Files
AegisGitea-MCP/docs/api-reference.md
T
Latte 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
feat: assign issues to milestones on create/update (#22)
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>
2026-06-22 17:36:01 +02:00

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 /mcp and POST /mcp: streamable HTTP transport.
  • GET /mcp/sse and POST /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 401 with:
    • 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_repositories
  • get_repository_info (owner, repo)
  • get_file_tree (owner, repo, optional ref, recursive)
  • get_file_contents (owner, repo, filepath, optional ref)
  • search_code (owner, repo, query, optional ref, page, limit)
  • list_commits (owner, repo, optional ref, page, limit)
  • get_commit_diff (owner, repo, sha)
  • compare_refs (owner, repo, base, head)
  • list_issues (owner, repo, optional state, page, limit, labels)
  • get_issue (owner, repo, issue_number)
  • list_pull_requests (owner, repo, optional state, page, limit)
  • get_pull_request (owner, repo, pull_number)
  • list_labels (owner, repo, optional page, limit)
  • list_tags (owner, repo, optional page, limit)
  • list_releases (owner, repo, optional page, limit)
  • list_pull_request_files (owner, repo, pull_number, optional page, limit)
  • list_pull_request_commits (owner, repo, pull_number, optional page, limit)
  • list_issue_comments (owner, repo, issue_number, optional page, limit)
  • list_branches (owner, repo, optional page, limit)
  • get_branch (owner, repo, branch)
  • get_release (owner, repo, release_id)
  • get_latest_release (owner, repo)
  • list_milestones (owner, repo, optional state, page, limit)
  • get_commit_status (owner, repo, sha)
  • list_org_repositories (org, optional page, limit)
  • list_organizations (optional page, limit)
  • get_repo_languages (owner, repo)
  • list_repo_topics (owner, repo)

Write Tools (Write Mode Required)

  • create_issue (owner, repo, title, optional body, labels, assignees, milestone)
  • update_issue (owner, repo, issue_number, one or more of title, 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, labels by name)
  • remove_labels (owner, repo, issue_number, labels by name)
  • assign_issue (owner, repo, issue_number, assignees)
  • create_label (owner, repo, name, color hex e.g. #00aabb, optional description, exclusive)
  • update_label (owner, repo, name, one or more of new_name, color, description)
  • create_pull_request (owner, repo, title, head, base, optional body)
  • create_release (owner, repo, tag_name, optional name, body, draft, prerelease, target)
  • edit_release (owner, repo, release_id, one or more of name, body, draft, prerelease)
  • create_branch (owner, repo, new_branch_name, optional old_branch_name)
  • create_milestone (owner, repo, title, optional description, 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).