mirror of
				https://gitea.com/gitea/gitea-mcp.git
				synced 2025-10-30 09:51:50 +00:00 
			
		
		
		
	Support read only mode (#36)
Fix: #35 Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/36 Co-authored-by: hiifong <f@ilo.nz> Co-committed-by: hiifong <f@ilo.nz>
This commit is contained in:
		| @@ -10,6 +10,7 @@ import ( | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"github.com/mark3labs/mcp-go/mcp" | ||||
| 	"github.com/mark3labs/mcp-go/server" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -44,6 +45,21 @@ var ( | ||||
| 	) | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    CreateBranchTool, | ||||
| 		Handler: CreateBranchFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    DeleteBranchTool, | ||||
| 		Handler: DeleteBranchFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    ListBranchesTool, | ||||
| 		Handler: ListBranchesFn, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func CreateBranchFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
| 	log.Debugf("Called CreateBranchFn") | ||||
| 	owner, ok := req.Params.Arguments["owner"].(string) | ||||
|   | ||||
| @@ -10,6 +10,7 @@ import ( | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"github.com/mark3labs/mcp-go/mcp" | ||||
| 	"github.com/mark3labs/mcp-go/server" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -29,6 +30,13 @@ var ( | ||||
| 	) | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    ListRepoCommitsTool, | ||||
| 		Handler: ListRepoCommitsFn, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func ListRepoCommitsFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
| 	log.Debugf("Called ListRepoCommitsFn") | ||||
| 	owner, ok := req.Params.Arguments["owner"].(string) | ||||
|   | ||||
| @@ -11,6 +11,7 @@ import ( | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"github.com/mark3labs/mcp-go/mcp" | ||||
| 	"github.com/mark3labs/mcp-go/server" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -66,6 +67,25 @@ var ( | ||||
| 	) | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    GetFileContentTool, | ||||
| 		Handler: GetFileContentFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    CreateFileTool, | ||||
| 		Handler: CreateFileFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    UpdateFileTool, | ||||
| 		Handler: UpdateFileFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    DeleteFileTool, | ||||
| 		Handler: DeleteFileFn, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func GetFileContentFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
| 	log.Debugf("Called GetFileFn") | ||||
| 	owner, ok := req.Params.Arguments["owner"].(string) | ||||
|   | ||||
| @@ -5,12 +5,14 @@ import ( | ||||
| 	"fmt" | ||||
| 	"time" | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/log" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/ptr" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/to" | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"github.com/mark3labs/mcp-go/mcp" | ||||
| 	"github.com/mark3labs/mcp-go/server" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -69,6 +71,29 @@ var ( | ||||
| 	) | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    CreateReleaseTool, | ||||
| 		Handler: CreateReleaseFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    DeleteReleaseTool, | ||||
| 		Handler: DeleteReleaseFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    GetReleaseTool, | ||||
| 		Handler: GetReleaseFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    GetLatestReleaseTool, | ||||
| 		Handler: GetLatestReleaseFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    ListReleasesTool, | ||||
| 		Handler: ListReleasesFn, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // To avoid return too many tokens, we need to provide at least information as possible | ||||
| // llm can call get release to get more information | ||||
| type ListReleaseResult struct { | ||||
|   | ||||
| @@ -9,12 +9,15 @@ import ( | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/log" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/ptr" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/to" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/tool" | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"github.com/mark3labs/mcp-go/mcp" | ||||
| 	"github.com/mark3labs/mcp-go/server" | ||||
| ) | ||||
|  | ||||
| var Tool = tool.New() | ||||
|  | ||||
| const ( | ||||
| 	CreateRepoToolName  = "create_repo" | ||||
| 	ForkRepoToolName    = "fork_repo" | ||||
| @@ -54,6 +57,21 @@ var ( | ||||
| 	) | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    CreateRepoTool, | ||||
| 		Handler: CreateRepoFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    ForkRepoTool, | ||||
| 		Handler: ForkRepoFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    ListMyReposTool, | ||||
| 		Handler: ListMyReposFn, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func RegisterTool(s *server.MCPServer) { | ||||
| 	s.AddTool(CreateRepoTool, CreateRepoFn) | ||||
| 	s.AddTool(ForkRepoTool, ForkRepoFn) | ||||
|   | ||||
| @@ -4,11 +4,13 @@ import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/log" | ||||
| 	"gitea.com/gitea/gitea-mcp/pkg/to" | ||||
|  | ||||
| 	gitea_sdk "code.gitea.io/sdk/gitea" | ||||
| 	"github.com/mark3labs/mcp-go/mcp" | ||||
| 	"github.com/mark3labs/mcp-go/server" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -55,6 +57,25 @@ var ( | ||||
| 	) | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    CreateTagTool, | ||||
| 		Handler: CreateTagFn, | ||||
| 	}) | ||||
| 	Tool.RegisterWrite(server.ServerTool{ | ||||
| 		Tool:    DeleteTagTool, | ||||
| 		Handler: DeleteTagFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    GetTagTool, | ||||
| 		Handler: GetTagFn, | ||||
| 	}) | ||||
| 	Tool.RegisterRead(server.ServerTool{ | ||||
| 		Tool:    ListTagsTool, | ||||
| 		Handler: ListTagsFn, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // To avoid return too many tokens, we need to provide at least information as possible | ||||
| // llm can call get tag to get more information | ||||
| type ListTagResult struct { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user