mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2025-08-23 14:23:05 +00:00
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