mirror of
				https://gitea.com/gitea/gitea-mcp.git
				synced 2025-10-30 01:41:50 +00:00 
			
		
		
		
	feat: add get issue by index
This commit is contained in:
		
							
								
								
									
										52
									
								
								operation/issue/issue.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								operation/issue/issue.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | package issue | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fmt" | ||||||
|  |  | ||||||
|  | 	"gitea.com/gitea/gitea-mcp/pkg/gitea" | ||||||
|  | 	"github.com/mark3labs/mcp-go/mcp" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	GetIssueByIndexToolName = "get_issue_by_index" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	GetIssueByIndexTool = mcp.NewTool( | ||||||
|  | 		GetIssueByIndexToolName, | ||||||
|  | 		mcp.WithDescription("get issue by index"), | ||||||
|  | 		mcp.WithString( | ||||||
|  | 			"owner", | ||||||
|  | 			mcp.Required(), | ||||||
|  | 			mcp.Description("repository owner"), | ||||||
|  | 		), | ||||||
|  | 		mcp.WithString( | ||||||
|  | 			"repo", | ||||||
|  | 			mcp.Required(), | ||||||
|  | 			mcp.Description("repository name"), | ||||||
|  | 		), | ||||||
|  | 		mcp.WithNumber( | ||||||
|  | 			"index", | ||||||
|  | 			mcp.Required(), | ||||||
|  | 			mcp.Description("repository issue index"), | ||||||
|  | 		), | ||||||
|  | 	) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func GetIssueByIndexFn(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||||
|  | 	owner := request.Params.Arguments["owner"].(string) | ||||||
|  | 	repo := request.Params.Arguments["repo"].(string) | ||||||
|  | 	index := request.Params.Arguments["index"].(float64) | ||||||
|  | 	issue, _, err := gitea.Client().GetIssue(owner, repo, int64(index)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return mcp.NewToolResultError(fmt.Sprintf("get %v/%v/issue/%v err", owner, repo, int64(index))), err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	result, err := json.Marshal(issue) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return mcp.NewToolResultError("marshal issue err"), err | ||||||
|  | 	} | ||||||
|  | 	return mcp.NewToolResultText(string(result)), nil | ||||||
|  | } | ||||||
| @@ -3,6 +3,7 @@ package operation | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  |  | ||||||
|  | 	"gitea.com/gitea/gitea-mcp/operation/issue" | ||||||
| 	"gitea.com/gitea/gitea-mcp/operation/repo" | 	"gitea.com/gitea/gitea-mcp/operation/repo" | ||||||
| 	"gitea.com/gitea/gitea-mcp/operation/user" | 	"gitea.com/gitea/gitea-mcp/operation/user" | ||||||
| 	"gitea.com/gitea/gitea-mcp/operation/version" | 	"gitea.com/gitea/gitea-mcp/operation/version" | ||||||
| @@ -22,6 +23,9 @@ func RegisterTool(s *server.MCPServer) { | |||||||
| 	// Repo Tool | 	// Repo Tool | ||||||
| 	s.AddTool(repo.ListMyReposTool, repo.ListMyReposFn) | 	s.AddTool(repo.ListMyReposTool, repo.ListMyReposFn) | ||||||
|  |  | ||||||
|  | 	// Issue Tool | ||||||
|  | 	s.AddTool(issue.GetIssueByIndexTool, issue.GetIssueByIndexFn) | ||||||
|  |  | ||||||
| 	// Version Tool | 	// Version Tool | ||||||
| 	s.AddTool(version.GetGiteaMCPServerVersionTool, version.GetGiteaMCPServerVersionFn) | 	s.AddTool(version.GetGiteaMCPServerVersionTool, version.GetGiteaMCPServerVersionFn) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -16,25 +16,45 @@ const ( | |||||||
| var ( | var ( | ||||||
| 	ListMyReposTool = mcp.NewTool( | 	ListMyReposTool = mcp.NewTool( | ||||||
| 		ListMyReposToolName, | 		ListMyReposToolName, | ||||||
| 		mcp.WithDescription("List My Repositories"), | 		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), | ||||||
|  | 		), | ||||||
| 	) | 	) | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func ListMyReposFn(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { | func ListMyReposFn(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { | ||||||
|  | 	page, ok := request.Params.Arguments["page"].(float64) | ||||||
|  | 	if !ok { | ||||||
|  | 		return mcp.NewToolResultError("get page number error"), nil | ||||||
|  | 	} | ||||||
|  | 	size, ok := request.Params.Arguments["pageSize"].(float64) | ||||||
|  | 	if !ok { | ||||||
|  | 		return mcp.NewToolResultError("get page size number error"), nil | ||||||
|  | 	} | ||||||
| 	opts := gitea.ListReposOptions{ | 	opts := gitea.ListReposOptions{ | ||||||
| 		ListOptions: gitea.ListOptions{ | 		ListOptions: gitea.ListOptions{ | ||||||
| 			Page:     1, | 			Page:     int(page), | ||||||
| 			PageSize: 100, | 			PageSize: int(size), | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	repos, _, err := giteaPkg.Client().ListMyRepos(opts) | 	repos, _, err := giteaPkg.Client().ListMyRepos(opts) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return mcp.NewToolResultError("Get My User Info Error"), err | 		return mcp.NewToolResultError("List my repositories error"), err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	result, err := json.Marshal(repos) | 	result, err := json.Marshal(repos) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return mcp.NewToolResultError("Get My User Info Error"), err | 		return mcp.NewToolResultError("marshal repository list error"), err | ||||||
| 	} | 	} | ||||||
| 	return mcp.NewToolResultText(string(result)), nil | 	return mcp.NewToolResultText(string(result)), nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ const ( | |||||||
| var ( | var ( | ||||||
| 	GetMyUserInfoTool = mcp.NewTool( | 	GetMyUserInfoTool = mcp.NewTool( | ||||||
| 		GetMyUserInfoToolName, | 		GetMyUserInfoToolName, | ||||||
| 		mcp.WithDescription("Get My User Info"), | 		mcp.WithDescription("Get my user info"), | ||||||
| 	) | 	) | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -28,7 +28,7 @@ func GetUserInfoFn(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallT | |||||||
|  |  | ||||||
| 	result, err := json.Marshal(user) | 	result, err := json.Marshal(user) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return mcp.NewToolResultError("Get My User Info Error"), err | 		return mcp.NewToolResultError("marshal my user info error"), err | ||||||
| 	} | 	} | ||||||
| 	return mcp.NewToolResultText(string(result)), nil | 	return mcp.NewToolResultText(string(result)), nil | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user