Initialize commit
This commit is contained in:
50 operation/operation.go Normal file
50
operation/operation.go Normal file @@ -0,0 +1,50 @@ | ||||
package operation | ||||
| ||||
import ( | ||||
"fmt" | ||||
| ||||
"gitea.com/gitea/gitea-mcp/operation/repo" | ||||
"gitea.com/gitea/gitea-mcp/operation/user" | ||||
"gitea.com/gitea/gitea-mcp/pkg/log" | ||||
"github.com/mark3labs/mcp-go/server" | ||||
) | ||||
| ||||
var ( | ||||
mcpServer *server.MCPServer | ||||
) | ||||
| ||||
func RegisterTool(s *server.MCPServer) { | ||||
// User Tool | ||||
s.AddTool(user.GetMyUserInfoTool, user.MyUserInfoFn) | ||||
| ||||
// Repo Tool | ||||
s.AddTool(repo.GetMyReposTool, repo.MyUserReposFn) | ||||
} | ||||
| ||||
func Run(transport, version string) error { | ||||
mcpServer = newMCPServer(version) | ||||
RegisterTool(mcpServer) | ||||
switch transport { | ||||
case "stdio": | ||||
if err := server.ServeStdio(mcpServer); err != nil { | ||||
return err | ||||
} | ||||
case "sse": | ||||
sseServer := server.NewSSEServer(mcpServer) | ||||
log.Infof("Gitea MCP SSE server listening on :8080") | ||||
if err := sseServer.Start(":8080"); err != nil { | ||||
return err | ||||
} | ||||
default: | ||||
return fmt.Errorf("invalid transport type: %s. Must be 'stdio' or 'sse'", transport) | ||||
} | ||||
return nil | ||||
} | ||||
| ||||
func newMCPServer(version string) *server.MCPServer { | ||||
return server.NewMCPServer( | ||||
"Gitea MCP Server", | ||||
version, | ||||
server.WithLogging(), | ||||
) | ||||
} |
40 operation/repo/repo.go Normal file
40
operation/repo/repo.go Normal file @@ -0,0 +1,40 @@ | ||||
package repo | ||||
| ||||
import ( | ||||
"context" | ||||
"encoding/json" | ||||
| ||||
"code.gitea.io/sdk/gitea" | ||||
giteaPkg "gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||
"github.com/mark3labs/mcp-go/mcp" | ||||
) | ||||
| ||||
const ( | ||||
ListMyReposToolName = "list_my_repos" | ||||
) | ||||
| ||||
var ( | ||||
GetMyReposTool = mcp.NewTool( | ||||
ListMyReposToolName, | ||||
mcp.WithDescription("List My Repositories"), | ||||
) | ||||
) | ||||
| ||||
func MyUserReposFn(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
opts := gitea.ListReposOptions{ | ||||
ListOptions: gitea.ListOptions{ | ||||
Page: 1, | ||||
PageSize: 100, | ||||
}, | ||||
} | ||||
repos, _, err := giteaPkg.Client().ListMyRepos(opts) | ||||
if err != nil { | ||||
return mcp.NewToolResultError("Get My User Info Error"), err | ||||
} | ||||
| ||||
result, err := json.Marshal(repos) | ||||
if err != nil { | ||||
return mcp.NewToolResultError("Get My User Info Error"), err | ||||
} | ||||
return mcp.NewToolResultText(string(result)), nil | ||||
} |
34 operation/user/user.go Normal file
34
operation/user/user.go Normal file @@ -0,0 +1,34 @@ | ||||
package user | ||||
| ||||
import ( | ||||
"context" | ||||
"encoding/json" | ||||
| ||||
"gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||
| ||||
"github.com/mark3labs/mcp-go/mcp" | ||||
) | ||||
| ||||
const ( | ||||
GetMyUserInfoToolName = "get_my_user_info" | ||||
) | ||||
| ||||
var ( | ||||
GetMyUserInfoTool = mcp.NewTool( | ||||
GetMyUserInfoToolName, | ||||
mcp.WithDescription("Get My User Info"), | ||||
) | ||||
) | ||||
| ||||
func MyUserInfoFn(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
user, _, err := gitea.Client().GetMyUserInfo() | ||||
if err != nil { | ||||
return mcp.NewToolResultError("Get My User Info Error"), err | ||||
} | ||||
| ||||
result, err := json.Marshal(user) | ||||
if err != nil { | ||||
return mcp.NewToolResultError("Get My User Info Error"), err | ||||
} | ||||
return mcp.NewToolResultText(string(result)), nil | ||||
} |
Reference in New Issue
Block a user