add some new tools and adjust format
This commit is contained in:
@@ -7,45 +7,68 @@ import ( | ||||
"gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||
"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 ( | ||||
GetIssueByIndexToolName = "get_issue_by_index" | ||||
GetIssueByIndexToolName = "get_issue_by_index" | ||||
GetPullRequestByIndexToolName = "get_pull_request_by_index" | ||||
CreateIssueToolName = "create_issue" | ||||
CreateIssueCommentToolName = "create_issue_comment" | ||||
CreatePullRequestToolName = "create_pull_request" | ||||
) | ||||
| ||||
var ( | ||||
GetIssueByIndexTool = mcp.NewTool( | ||||
GetIssueByIndexToolName, | ||||
GetIssueByIndexOpt..., | ||||
) | ||||
| ||||
GetIssueByIndexOpt = []mcp.ToolOption{ | ||||
mcp.WithDescription("get issue by index"), | ||||
mcp.WithString( | ||||
"owner", | ||||
mcp.Required(), | ||||
mcp.Description("repository owner"), | ||||
mcp.DefaultString(""), | ||||
), | ||||
mcp.WithString( | ||||
"repo", | ||||
mcp.Required(), | ||||
mcp.Description("repository name"), | ||||
mcp.DefaultString(""), | ||||
), | ||||
mcp.WithNumber( | ||||
"index", | ||||
mcp.Required(), | ||||
mcp.Description("repository issue index"), | ||||
mcp.DefaultNumber(0), | ||||
), | ||||
} | ||||
mcp.WithString("owner", mcp.Required(), mcp.Description("repository owner"), mcp.DefaultString("")), | ||||
mcp.WithString("repo", mcp.Required(), mcp.Description("repository name"), mcp.DefaultString("")), | ||||
mcp.WithNumber("index", mcp.Required(), mcp.Description("repository issue index"), mcp.DefaultNumber(0)), | ||||
) | ||||
GetPullRequestByIndexTool = mcp.NewTool( | ||||
GetPullRequestByIndexToolName, | ||||
mcp.WithDescription("get pull request by index"), | ||||
mcp.WithString("owner", mcp.Required(), mcp.Description("repository owner"), mcp.DefaultString("")), | ||||
mcp.WithString("repo", mcp.Required(), mcp.Description("repository name"), mcp.DefaultString("")), | ||||
mcp.WithNumber("index", mcp.Required(), mcp.Description("repository pull request index"), mcp.DefaultNumber(0)), | ||||
) | ||||
CreateIssueTool = mcp.NewTool( | ||||
CreateIssueToolName, | ||||
mcp.WithDescription("create issue"), | ||||
mcp.WithString("owner", mcp.Required(), mcp.Description("repository owner"), mcp.DefaultString("")), | ||||
mcp.WithString("repo", mcp.Required(), mcp.Description("repository name"), mcp.DefaultString("")), | ||||
mcp.WithString("title", mcp.Required(), mcp.Description("issue title"), mcp.DefaultString("")), | ||||
mcp.WithString("body", mcp.Required(), mcp.Description("issue body"), mcp.DefaultString("")), | ||||
) | ||||
CreateIssueCommentTool = mcp.NewTool( | ||||
CreateIssueCommentToolName, | ||||
mcp.WithDescription("create issue comment"), | ||||
mcp.WithString("owner", mcp.Required(), mcp.Description("repository owner"), mcp.DefaultString("")), | ||||
mcp.WithString("repo", mcp.Required(), mcp.Description("repository name"), mcp.DefaultString("")), | ||||
mcp.WithNumber("index", mcp.Required(), mcp.Description("repository issue index"), mcp.DefaultNumber(0)), | ||||
mcp.WithString("body", mcp.Required(), mcp.Description("issue comment body"), mcp.DefaultString("")), | ||||
) | ||||
CreatePullRequestTool = mcp.NewTool( | ||||
CreatePullRequestToolName, | ||||
mcp.WithDescription("create pull request"), | ||||
mcp.WithString("owner", mcp.Required(), mcp.Description("repository owner"), mcp.DefaultString("")), | ||||
mcp.WithString("repo", mcp.Required(), mcp.Description("repository name"), mcp.DefaultString("")), | ||||
mcp.WithString("title", mcp.Required(), mcp.Description("pull request title"), mcp.DefaultString("")), | ||||
mcp.WithString("body", mcp.Required(), mcp.Description("pull request body"), mcp.DefaultString("")), | ||||
mcp.WithString("head", mcp.Required(), mcp.Description("pull request head"), mcp.DefaultString("")), | ||||
mcp.WithString("base", mcp.Required(), mcp.Description("pull request base"), mcp.DefaultString("")), | ||||
) | ||||
) | ||||
| ||||
func RegisterTool(s *server.MCPServer) { | ||||
s.AddTool(GetIssueByIndexTool, GetIssueByIndexFn) | ||||
s.AddTool(GetPullRequestByIndexTool, GetPullRequestByIndexFn) | ||||
s.AddTool(CreateIssueTool, CreateIssueFn) | ||||
s.AddTool(CreateIssueCommentTool, CreateIssueCommentFn) | ||||
s.AddTool(CreatePullRequestTool, CreatePullRequestFn) | ||||
} | ||||
| ||||
func GetIssueByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
@@ -59,3 +82,66 @@ func GetIssueByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallT | ||||
| ||||
return to.TextResult(issue) | ||||
} | ||||
| ||||
func GetPullRequestByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
owner := req.Params.Arguments["owner"].(string) | ||||
repo := req.Params.Arguments["repo"].(string) | ||||
index := req.Params.Arguments["index"].(float64) | ||||
pr, _, err := gitea.Client().GetPullRequest(owner, repo, int64(index)) | ||||
if err != nil { | ||||
return mcp.NewToolResultError(fmt.Sprintf("get %v/%v/pr/%v err", owner, repo, int64(index))), err | ||||
} | ||||
| ||||
return to.TextResult(pr) | ||||
} | ||||
| ||||
func CreateIssueFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
owner := req.Params.Arguments["owner"].(string) | ||||
repo := req.Params.Arguments["repo"].(string) | ||||
title := req.Params.Arguments["title"].(string) | ||||
body := req.Params.Arguments["body"].(string) | ||||
issue, _, err := gitea.Client().CreateIssue(owner, repo, gitea_sdk.CreateIssueOption{ | ||||
Title: title, | ||||
Body: body, | ||||
}) | ||||
if err != nil { | ||||
return mcp.NewToolResultError(fmt.Sprintf("create %v/%v/issue err", owner, repo)), err | ||||
} | ||||
| ||||
return to.TextResult(issue) | ||||
} | ||||
| ||||
func CreateIssueCommentFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
owner := req.Params.Arguments["owner"].(string) | ||||
repo := req.Params.Arguments["repo"].(string) | ||||
index := req.Params.Arguments["index"].(float64) | ||||
body := req.Params.Arguments["body"].(string) | ||||
issueComment, _, err := gitea.Client().CreateIssueComment(owner, repo, int64(index), gitea_sdk.CreateIssueCommentOption{ | ||||
Body: body, | ||||
}) | ||||
if err != nil { | ||||
return mcp.NewToolResultError(fmt.Sprintf("create %v/%v/issue/%v/comment err", owner, repo, int64(index))), err | ||||
} | ||||
| ||||
return to.TextResult(issueComment) | ||||
} | ||||
| ||||
func CreatePullRequestFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
owner := req.Params.Arguments["owner"].(string) | ||||
repo := req.Params.Arguments["repo"].(string) | ||||
title := req.Params.Arguments["title"].(string) | ||||
body := req.Params.Arguments["body"].(string) | ||||
head := req.Params.Arguments["head"].(string) | ||||
base := req.Params.Arguments["base"].(string) | ||||
pr, _, err := gitea.Client().CreatePullRequest(owner, repo, gitea_sdk.CreatePullRequestOption{ | ||||
Title: title, | ||||
Body: body, | ||||
Head: head, | ||||
Base: base, | ||||
}) | ||||
if err != nil { | ||||
return mcp.NewToolResultError(fmt.Sprintf("create %v/%v/pull_request err", owner, repo)), err | ||||
} | ||||
| ||||
return to.TextResult(pr) | ||||
} | ||||
|
42 operation/repo/branch.go Normal file
42
operation/repo/branch.go Normal file @@ -0,0 +1,42 @@ | ||||
package repo | ||||
| ||||
import ( | ||||
"context" | ||||
| ||||
"gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||
"github.com/mark3labs/mcp-go/mcp" | ||||
| ||||
gitea_sdk "code.gitea.io/sdk/gitea" | ||||
) | ||||
| ||||
const ( | ||||
CreateBranchToolName = "create_branch" | ||||
) | ||||
| ||||
var ( | ||||
CreateBranchTool = mcp.NewTool( | ||||
CreateBranchToolName, | ||||
mcp.WithDescription("Create branch"), | ||||
mcp.WithString("owner", mcp.Required(), mcp.Description("repository owner"), mcp.DefaultString("")), | ||||
mcp.WithString("repo", mcp.Required(), mcp.Description("repository name"), mcp.DefaultString("")), | ||||
mcp.WithString("branch", mcp.Required(), mcp.Description("Name of the branch to create"), mcp.DefaultString("")), | ||||
mcp.WithString("old_branch", mcp.Description("Name of the old branch to create from"), mcp.DefaultString("")), | ||||
) | ||||
) | ||||
| ||||
func CreateBranchFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
owner := req.Params.Arguments["owner"].(string) | ||||
repo := req.Params.Arguments["repo"].(string) | ||||
branch := req.Params.Arguments["branch"].(string) | ||||
oldBranch := req.Params.Arguments["old_branch"].(string) | ||||
| ||||
_, _, err := gitea.Client().CreateBranch(owner, repo, gitea_sdk.CreateBranchOption{ | ||||
BranchName: branch, | ||||
OldBranchName: oldBranch, | ||||
}) | ||||
if err != nil { | ||||
return mcp.NewToolResultError("Create Branch Error"), err | ||||
} | ||||
| ||||
return mcp.NewToolResultText("Branch Created"), nil | ||||
} |
@@ -19,48 +19,33 @@ const ( | ||||
var ( | ||||
CreateRepoTool = mcp.NewTool( | ||||
CreateRepoToolName, | ||||
CreateRepoOpt..., | ||||
) | ||||
| ||||
CreateRepoOpt = []mcp.ToolOption{ | ||||
mcp.WithDescription("Create repository"), | ||||
mcp.WithString("name", mcp.Required(), mcp.DefaultString("test"), mcp.Description("Name of the repository to create")), | ||||
mcp.WithString("description", mcp.DefaultString(""), mcp.Description("Description of the repository to create")), | ||||
mcp.WithBoolean("private", mcp.DefaultBool(true), mcp.Description("Whether the repository is private")), | ||||
mcp.WithString("issue_labels", mcp.DefaultString(""), mcp.Description("Issue Label set to use")), | ||||
mcp.WithBoolean("auto_init", mcp.DefaultBool(false), mcp.Description("Whether the repository should be auto-intialized?")), | ||||
mcp.WithBoolean("template", mcp.DefaultBool(false), mcp.Description("Whether the repository is template")), | ||||
mcp.WithString("gitignores", mcp.DefaultString(""), mcp.Description("Gitignores to use")), | ||||
mcp.WithString("license", mcp.DefaultString("MIT"), mcp.Description("License to use")), | ||||
mcp.WithString("readme", mcp.DefaultString(""), mcp.Description("Readme of the repository to create")), | ||||
mcp.WithString("default_branch", mcp.DefaultString("main"), mcp.Description("DefaultBranch of the repository (used when initializes and in template)")), | ||||
} | ||||
mcp.WithString("name", mcp.Required(), mcp.Description("Name of the repository to create"), mcp.DefaultString("test")), | ||||
mcp.WithString("description", mcp.Description("Description of the repository to create"), mcp.DefaultString("")), | ||||
mcp.WithBoolean("private", mcp.Description("Whether the repository is private"), mcp.DefaultBool(true)), | ||||
mcp.WithString("issue_labels", mcp.Description("Issue Label set to use"), mcp.DefaultString("")), | ||||
mcp.WithBoolean("auto_init", mcp.Description("Whether the repository should be auto-intialized?"), mcp.DefaultBool(false)), | ||||
mcp.WithBoolean("template", mcp.Description("Whether the repository is template"), mcp.DefaultBool(false)), | ||||
mcp.WithString("gitignores", mcp.Description("Gitignores to use"), mcp.DefaultString("")), | ||||
mcp.WithString("license", mcp.Description("License to use"), mcp.DefaultString("MIT")), | ||||
mcp.WithString("readme", mcp.Description("Readme of the repository to create"), mcp.DefaultString("")), | ||||
mcp.WithString("default_branch", mcp.Description("DefaultBranch of the repository (used when initializes and in template)"), mcp.DefaultString("main")), | ||||
) | ||||
| ||||
ListMyReposTool = mcp.NewTool( | ||||
ListMyReposToolName, | ||||
ListMyReposOpt..., | ||||
) | ||||
| ||||
ListMyReposOpt = []mcp.ToolOption{ | ||||
mcp.WithDescription("List my repositories"), | ||||
mcp.WithNumber( | ||||
"page", | ||||
mcp.Description("Page number"), | ||||
mcp.DefaultNumber(1), | ||||
mcp.Min(1), | ||||
), | ||||
mcp.WithNumber( | ||||
"pageSize", | ||||
mcp.Description("Page size number"), | ||||
mcp.DefaultNumber(10), | ||||
mcp.Min(1), | ||||
), | ||||
} | ||||
mcp.WithNumber("page", mcp.Required(), mcp.Description("Page number"), mcp.DefaultNumber(1), mcp.Min(1)), | ||||
mcp.WithNumber("pageSize", mcp.Required(), mcp.Description("Page size number"), mcp.DefaultNumber(10), mcp.Min(1)), | ||||
) | ||||
) | ||||
| ||||
func RegisterTool(s *server.MCPServer) { | ||||
s.AddTool(CreateRepoTool, CreateRepoFn) | ||||
s.AddTool(ListMyReposTool, ListMyReposFn) | ||||
| ||||
// Branch | ||||
s.AddTool(CreateBranchTool, CreateBranchFn) | ||||
} | ||||
| ||||
func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||
|
Reference in New Issue
Block a user