mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2025-08-23 14:23:05 +00:00
Add EditIssue (#30)
Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/30 Reviewed-by: hiifong <i@hiif.ong> Co-authored-by: yp05327 <576951401@qq.com> Co-committed-by: yp05327 <576951401@qq.com>
This commit is contained in:
@@ -172,6 +172,7 @@ The Gitea MCP Server supports the following tools:
|
|||||||
| list_repo_issues | Issue | List all issues in a repository |
|
| list_repo_issues | Issue | List all issues in a repository |
|
||||||
| create_issue | Issue | Create a new issue |
|
| create_issue | Issue | Create a new issue |
|
||||||
| create_issue_comment | Issue | Create a comment on an issue |
|
| create_issue_comment | Issue | Create a comment on an issue |
|
||||||
|
| edit_issue | Issue | Edit a issue |
|
||||||
| get_pull_request_by_index | Pull Request | Get a pull request by its index |
|
| get_pull_request_by_index | Pull Request | Get a pull request by its index |
|
||||||
| list_repo_pull_requests | Pull Request | List all pull requests in a repository |
|
| list_repo_pull_requests | Pull Request | List all pull requests in a repository |
|
||||||
| create_pull_request | Pull Request | Create a new pull request |
|
| create_pull_request | Pull Request | Create a new pull request |
|
||||||
|
@@ -172,6 +172,7 @@ Gitea MCP 服务器支持以下工具:
|
|||||||
| list_repo_issues | 问题 | 列出仓库中的所有问题 |
|
| list_repo_issues | 问题 | 列出仓库中的所有问题 |
|
||||||
| create_issue | 问题 | 创建一个新问题 |
|
| create_issue | 问题 | 创建一个新问题 |
|
||||||
| create_issue_comment | 问题 | 在问题上创建评论 |
|
| create_issue_comment | 问题 | 在问题上创建评论 |
|
||||||
|
| edit_issue | 问题 | 编辑一个问题 |
|
||||||
| get_pull_request_by_index | 拉取请求 | 根据索引获取拉取请求 |
|
| get_pull_request_by_index | 拉取请求 | 根据索引获取拉取请求 |
|
||||||
| list_repo_pull_requests | 拉取请求 | 列出仓库中的所有拉取请求 |
|
| list_repo_pull_requests | 拉取请求 | 列出仓库中的所有拉取请求 |
|
||||||
| create_pull_request | 拉取请求 | 创建一个新拉取请求 |
|
| create_pull_request | 拉取请求 | 创建一个新拉取请求 |
|
||||||
|
@@ -171,6 +171,7 @@ Gitea MCP 伺服器支持以下工具:
|
|||||||
| list_repo_issues | 問題 | 列出倉庫中的所有問題 |
|
| list_repo_issues | 問題 | 列出倉庫中的所有問題 |
|
||||||
| create_issue | 問題 | 創建一個新問題 |
|
| create_issue | 問題 | 創建一個新問題 |
|
||||||
| create_issue_comment | 問題 | 在問題上創建評論 |
|
| create_issue_comment | 問題 | 在問題上創建評論 |
|
||||||
|
| edit_issue | 問題 | 編輯一個問題 |
|
||||||
| get_pull_request_by_index | 拉取請求 | 根據索引獲取拉取請求 |
|
| get_pull_request_by_index | 拉取請求 | 根據索引獲取拉取請求 |
|
||||||
| list_repo_pull_requests | 拉取請求 | 列出倉庫中的所有拉取請求 |
|
| list_repo_pull_requests | 拉取請求 | 列出倉庫中的所有拉取請求 |
|
||||||
| create_pull_request | 拉取請求 | 創建一個新拉取請求 |
|
| create_pull_request | 拉取請求 | 創建一個新拉取請求 |
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"gitea.com/gitea/gitea-mcp/pkg/gitea"
|
"gitea.com/gitea/gitea-mcp/pkg/gitea"
|
||||||
"gitea.com/gitea/gitea-mcp/pkg/log"
|
"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/to"
|
||||||
|
|
||||||
gitea_sdk "code.gitea.io/sdk/gitea"
|
gitea_sdk "code.gitea.io/sdk/gitea"
|
||||||
@@ -18,6 +19,7 @@ const (
|
|||||||
ListRepoIssuesToolName = "list_repo_issues"
|
ListRepoIssuesToolName = "list_repo_issues"
|
||||||
CreateIssueToolName = "create_issue"
|
CreateIssueToolName = "create_issue"
|
||||||
CreateIssueCommentToolName = "create_issue_comment"
|
CreateIssueCommentToolName = "create_issue_comment"
|
||||||
|
EditIssueToolName = "edit_issue"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -55,6 +57,18 @@ var (
|
|||||||
mcp.WithNumber("index", mcp.Required(), mcp.Description("repository issue index")),
|
mcp.WithNumber("index", mcp.Required(), mcp.Description("repository issue index")),
|
||||||
mcp.WithString("body", mcp.Required(), mcp.Description("issue comment body")),
|
mcp.WithString("body", mcp.Required(), mcp.Description("issue comment body")),
|
||||||
)
|
)
|
||||||
|
EditIssueTool = mcp.NewTool(
|
||||||
|
EditIssueToolName,
|
||||||
|
mcp.WithDescription("edit issue"),
|
||||||
|
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")),
|
||||||
|
mcp.WithString("title", mcp.Description("issue title"), mcp.DefaultString("")),
|
||||||
|
mcp.WithString("body", mcp.Description("issue body content")),
|
||||||
|
mcp.WithArray("assignees", mcp.Description("usernames to assign to this issue"), mcp.Items(map[string]interface{}{"type": "string"})),
|
||||||
|
mcp.WithNumber("milestone", mcp.Description("milestone number")),
|
||||||
|
mcp.WithString("state", mcp.Description("issue state, one of open, closed, all")),
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
func RegisterTool(s *server.MCPServer) {
|
func RegisterTool(s *server.MCPServer) {
|
||||||
@@ -62,6 +76,7 @@ func RegisterTool(s *server.MCPServer) {
|
|||||||
s.AddTool(ListRepoIssuesTool, ListRepoIssuesFn)
|
s.AddTool(ListRepoIssuesTool, ListRepoIssuesFn)
|
||||||
s.AddTool(CreateIssueTool, CreateIssueFn)
|
s.AddTool(CreateIssueTool, CreateIssueFn)
|
||||||
s.AddTool(CreateIssueCommentTool, CreateIssueCommentFn)
|
s.AddTool(CreateIssueCommentTool, CreateIssueCommentFn)
|
||||||
|
s.AddTool(EditIssueTool, EditIssueFn)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetIssueByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
func GetIssueByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
@@ -179,3 +194,49 @@ func CreateIssueCommentFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.Ca
|
|||||||
|
|
||||||
return to.TextResult(issueComment)
|
return to.TextResult(issueComment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EditIssueFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
|
log.Debugf("Called EditIssueFn")
|
||||||
|
owner, ok := req.Params.Arguments["owner"].(string)
|
||||||
|
if !ok {
|
||||||
|
return to.ErrorResult(fmt.Errorf("owner is required"))
|
||||||
|
}
|
||||||
|
repo, ok := req.Params.Arguments["repo"].(string)
|
||||||
|
if !ok {
|
||||||
|
return to.ErrorResult(fmt.Errorf("repo is required"))
|
||||||
|
}
|
||||||
|
index, ok := req.Params.Arguments["index"].(float64)
|
||||||
|
if !ok {
|
||||||
|
return to.ErrorResult(fmt.Errorf("index is required"))
|
||||||
|
}
|
||||||
|
|
||||||
|
opt := gitea_sdk.EditIssueOption{}
|
||||||
|
|
||||||
|
title, ok := req.Params.Arguments["title"].(string)
|
||||||
|
if ok {
|
||||||
|
opt.Title = title
|
||||||
|
}
|
||||||
|
body, ok := req.Params.Arguments["body"].(string)
|
||||||
|
if ok {
|
||||||
|
opt.Body = ptr.To(body)
|
||||||
|
}
|
||||||
|
assignees, ok := req.Params.Arguments["assignees"].([]string)
|
||||||
|
if ok {
|
||||||
|
opt.Assignees = assignees
|
||||||
|
}
|
||||||
|
milestone, ok := req.Params.Arguments["milestone"].(float64)
|
||||||
|
if ok {
|
||||||
|
opt.Milestone = ptr.To(int64(milestone))
|
||||||
|
}
|
||||||
|
state, ok := req.Params.Arguments["state"].(string)
|
||||||
|
if ok {
|
||||||
|
opt.State = ptr.To(gitea_sdk.StateType(state))
|
||||||
|
}
|
||||||
|
|
||||||
|
issue, _, err := gitea.Client().EditIssue(owner, repo, int64(index), opt)
|
||||||
|
if err != nil {
|
||||||
|
return to.ErrorResult(fmt.Errorf("edit %v/%v/issue/%v err: %v", owner, repo, int64(index), err))
|
||||||
|
}
|
||||||
|
|
||||||
|
return to.TextResult(issue)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user