e08ba42697
docker / test (pull_request) Successful in 29s
docker / lint (pull_request) Successful in 35s
lint / lint (pull_request) Successful in 35s
test / test (pull_request) Successful in 35s
docker / docker-test (pull_request) Successful in 8s
docker / docker-publish (pull_request) Has been skipped
test / test (push) Successful in 23s
lint / lint (push) Successful in 23s
Add a `milestone` argument to `create_issue` and `update_issue` accepting either a numeric milestone id or a title (resolved case-insensitively against open and closed milestones, with a clear error for unknown titles). On `update_issue`, `milestone: 0` clears the milestone. A BeforeValidator rejects booleans so they are not silently coerced to an id. Gitea Projects (Kanban boards) were investigated for #22 and are intentionally left unsupported: Gitea 1.26.2 exposes no project endpoints in its REST API. Documented this in api-reference.md and refreshed the (stale) write-mode tool list to cover all 16 write tools. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.3 KiB
5.3 KiB
API Reference
Core Endpoints
GET /: server metadata.GET /health: health probe.GET /metrics: Prometheus metrics (when enabled).
OAuth Discovery and Token Exchange
GET /.well-known/oauth-protected-resource- Returns OAuth protected resource metadata used by MCP clients.
GET /.well-known/oauth-authorization-server- Returns OAuth authorization server metadata.
POST /register- Registers an OAuth client and persists the client metadata.
POST /oauth/token- Proxies OAuth authorization-code token exchange to Gitea.
MCP Endpoints
GET /mcp/tools: list tool definitions.GET /mcpandPOST /mcp: streamable HTTP transport.GET /mcp/sseandPOST /mcp/sse: MCP SSE transport alias.POST /mcp/tool/call: direct tool-call endpoint.
Authentication requirements:
- MCP tool execution requires
Authorization: Bearer <token>. - Missing or invalid tokens return
401with:WWW-Authenticate: Bearer resource_metadata="<absolute metadata url>", scope="read:repository"
Scope requirements:
- Read tools require
read:repository. - Write tools require
write:repository. - Insufficient scope returns
403.
Automation Endpoints
POST /automation/webhook: ingest policy-controlled webhook events.POST /automation/jobs/run: run policy-controlled automation jobs.
Read Tools
list_repositoriesget_repository_info(owner,repo)get_file_tree(owner,repo, optionalref,recursive)get_file_contents(owner,repo,filepath, optionalref)search_code(owner,repo,query, optionalref,page,limit)list_commits(owner,repo, optionalref,page,limit)get_commit_diff(owner,repo,sha)compare_refs(owner,repo,base,head)list_issues(owner,repo, optionalstate,page,limit,labels)get_issue(owner,repo,issue_number)list_pull_requests(owner,repo, optionalstate,page,limit)get_pull_request(owner,repo,pull_number)list_labels(owner,repo, optionalpage,limit)list_tags(owner,repo, optionalpage,limit)list_releases(owner,repo, optionalpage,limit)list_pull_request_files(owner,repo,pull_number, optionalpage,limit)list_pull_request_commits(owner,repo,pull_number, optionalpage,limit)list_issue_comments(owner,repo,issue_number, optionalpage,limit)list_branches(owner,repo, optionalpage,limit)get_branch(owner,repo,branch)get_release(owner,repo,release_id)get_latest_release(owner,repo)list_milestones(owner,repo, optionalstate,page,limit)get_commit_status(owner,repo,sha)list_org_repositories(org, optionalpage,limit)list_organizations(optionalpage,limit)get_repo_languages(owner,repo)list_repo_topics(owner,repo)
Write Tools (Write Mode Required)
create_issue(owner,repo,title, optionalbody,labels,assignees,milestone)update_issue(owner,repo,issue_number, one or more oftitle,body,state,milestone)create_issue_comment(owner,repo,issue_number,body)create_pr_comment(owner,repo,pull_number,body)add_labels(owner,repo,issue_number,labelsby name)remove_labels(owner,repo,issue_number,labelsby name)assign_issue(owner,repo,issue_number,assignees)create_label(owner,repo,name,colorhex e.g.#00aabb, optionaldescription,exclusive)update_label(owner,repo,name, one or more ofnew_name,color,description)create_pull_request(owner,repo,title,head,base, optionalbody)create_release(owner,repo,tag_name, optionalname,body,draft,prerelease,target)edit_release(owner,repo,release_id, one or more ofname,body,draft,prerelease)create_branch(owner,repo,new_branch_name, optionalold_branch_name)create_milestone(owner,repo,title, optionaldescription,due_on)edit_issue_comment(owner,repo,comment_id,body)
Not supported by design: merge, branch/label/release deletion, force push, repo/admin management.
Note: create_issue, add_labels, and remove_labels accept label names; the
server resolves them to Gitea label ids and returns a clear error for unknown labels.
Note: the milestone argument on create_issue/update_issue accepts either a numeric
milestone id or a milestone title (resolved case-insensitively against open and
closed milestones; unknown titles return a clear error). On update_issue, milestone: 0
clears the issue's milestone. Gitea Projects (Kanban boards) are intentionally unsupported:
the Gitea REST API exposes no project endpoints.
Validation and Limits
- All tool argument schemas reject unknown fields.
- List responses are capped by
MAX_TOOL_RESPONSE_ITEMS. - Text payloads are capped by
MAX_TOOL_RESPONSE_CHARS. - File reads are capped by
MAX_FILE_SIZE_BYTES.
Error Model
- Auth error: HTTP
401. - Policy/scope denial: HTTP
403. - Validation error: HTTP
400. - Rate limit: HTTP
429. - Internal errors: HTTP
500(no stack traces in production).