Files
gitea-mcp/operation/testdata/tools.golden.json
T
Bo-Yi Wu 80c8b25d6e refactor!: replace mcp-go with the official MCP Go SDK
- Swap the mark3labs MCP dependency for modelcontextprotocol/go-sdk v1.7.0
- Add a declarative tool definition and JSON Schema builder to the tool package
- Adapt registered tools to the official low-level handler, recovering panics and mapping failures to JSON-RPC errors
- Narrow tool handlers to take a plain argument map instead of an SDK request type
- Rewire stdio and HTTP transports onto the official server, moving Authorization parsing into receiving middleware
- Add a golden contract test that locks the exposed tool schemas, plus SDK integration and helper tests
- Add a test target and run it in the pull request workflow

BREAKING CHANGE: The exported helpers change signature. Tool.RegisterRead and
Tool.RegisterWrite now take tool.ServerTool instead of server.ServerTool, and the
annotation constructors return *mcp.ToolAnnotations from the official SDK. Callers
must build tool definitions with tool.NewDefinition and handlers with the
func(context.Context, map[string]any) signature.

The 30-second SSE heartbeat is removed because the official SDK has no equivalent.
ServerOptions.KeepAlive is deliberately not used as a substitute, since it sends MCP
ping requests and ping is removed in protocol 2026. HTTP stays stateless=false, so
new clients negotiate at most 2025-11-25.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 21:30:19 +08:00

2818 lines
66 KiB
JSON

[
{
"scope": "actions",
"access": "read",
"name": "actions_config_read",
"description": "Read Actions secrets and variables.",
"inputSchema": {
"properties": {
"method": {
"enum": [
"list_repo_secrets",
"list_org_secrets",
"list_repo_variables",
"get_repo_variable",
"list_org_variables",
"get_org_variable"
],
"type": "string"
},
"name": {
"description": "for get methods",
"type": "string"
},
"org": {
"description": "for org methods",
"type": "string"
},
"owner": {
"description": "for repo methods",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"minimum": 1,
"type": "number"
},
"repo": {
"description": "for repo methods",
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Read Actions secrets and variables",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "actions",
"access": "read",
"name": "actions_run_read",
"description": "Read Actions workflows, runs, jobs, logs, and artifacts.",
"inputSchema": {
"properties": {
"artifact_id": {
"description": "for 'get_artifact'/'download_artifact'",
"type": "number"
},
"artifact_name": {
"description": "name filter for 'list_artifacts'/'list_run_artifacts'",
"type": "string"
},
"job_id": {
"description": "for 'get_job'/log methods",
"type": "number"
},
"max_bytes": {
"default": 65536,
"description": "max log bytes",
"minimum": 1024,
"type": "number"
},
"method": {
"enum": [
"list_workflows",
"get_workflow",
"list_runs",
"get_run",
"list_jobs",
"list_run_jobs",
"get_job",
"get_job_log_preview",
"download_job_log",
"list_artifacts",
"list_run_artifacts",
"get_artifact",
"download_artifact"
],
"type": "string"
},
"output_path": {
"description": "for 'download_job_log'/'download_artifact'",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"minimum": 1,
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"run_id": {
"description": "for 'get_run'/'list_run_jobs'/'list_run_artifacts'",
"type": "number"
},
"status": {
"description": "filter for 'list_runs'/'list_jobs'",
"type": "string"
},
"tail_lines": {
"default": 200,
"description": "log tail lines",
"minimum": 1,
"type": "number"
},
"workflow_id": {
"description": "ID or filename (for 'get_workflow')",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Read Actions workflow, run, job, and artifact data",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "actions",
"access": "write",
"name": "actions_config_write",
"description": "Write Actions secrets and variables: upsert, create, update, delete.",
"inputSchema": {
"properties": {
"data": {
"description": "secret value (upsert)",
"type": "string"
},
"description": {
"type": "string"
},
"method": {
"enum": [
"upsert_repo_secret",
"delete_repo_secret",
"upsert_org_secret",
"delete_org_secret",
"create_repo_variable",
"update_repo_variable",
"delete_repo_variable",
"create_org_variable",
"update_org_variable",
"delete_org_variable"
],
"type": "string"
},
"name": {
"description": "secret or variable name",
"type": "string"
},
"org": {
"description": "for org methods",
"type": "string"
},
"owner": {
"description": "for repo methods",
"type": "string"
},
"repo": {
"description": "for repo methods",
"type": "string"
},
"value": {
"description": "variable value",
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Manage Actions secrets and variables",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "actions",
"access": "write",
"name": "actions_run_write",
"description": "Write Actions runs: dispatch, cancel, rerun.",
"inputSchema": {
"properties": {
"inputs": {
"description": "for 'dispatch_workflow'",
"properties": {},
"type": "object"
},
"method": {
"enum": [
"dispatch_workflow",
"cancel_run",
"rerun_run"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"ref": {
"description": "branch or tag (for 'dispatch_workflow')",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"run_id": {
"description": "for 'cancel_run'/'rerun_run'",
"type": "number"
},
"workflow_id": {
"description": "ID or filename (for 'dispatch_workflow')",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Trigger, cancel, or rerun Actions workflows",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "branch",
"access": "read",
"name": "list_branches",
"description": "List all branches in a repository, paginated.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "List repository branches",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "branch",
"access": "write",
"name": "create_branch",
"description": "Create a new branch in a repository, optionally from a specific source branch (defaults to the repository's default branch).",
"inputSchema": {
"properties": {
"branch": {
"type": "string"
},
"old_branch": {
"description": "source branch (default: repo default)",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo",
"branch"
],
"type": "object"
},
"annotations": {
"title": "Create a new branch",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "branch",
"access": "write",
"name": "delete_branch",
"description": "Permanently delete a branch from a repository. This action is destructive and cannot be undone.",
"inputSchema": {
"properties": {
"branch": {
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo",
"branch"
],
"type": "object"
},
"annotations": {
"title": "Delete a branch",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "commit",
"access": "read",
"name": "get_commit",
"description": "Get details for a single commit in a repository by its SHA.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"sha": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"sha"
],
"type": "object"
},
"annotations": {
"title": "Get commit details",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "commit",
"access": "read",
"name": "list_commits",
"description": "List commits in a repository, optionally starting from a specific branch or SHA and filtered to commits touching a given file path.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"path": {
"description": "only commits touching this path",
"type": "string"
},
"per_page": {
"default": 30,
"description": "results per page",
"minimum": 1,
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"sha": {
"description": "starting SHA or branch",
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "List repository commits",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "file",
"access": "read",
"name": "get_dir_contents",
"description": "List the entries (files and subdirectories) in a repository directory at a given ref (branch, tag, or commit SHA).",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"path": {
"type": "string"
},
"ref": {
"description": "branch, tag, or commit SHA",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo",
"ref",
"path"
],
"type": "object"
},
"annotations": {
"title": "Get directory contents",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "file",
"access": "read",
"name": "get_file_contents",
"description": "Get file content and metadata",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"path": {
"type": "string"
},
"ref": {
"description": "branch, tag, or commit SHA",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"withLines": {
"description": "return numbered lines",
"type": "boolean"
}
},
"required": [
"owner",
"repo",
"ref",
"path"
],
"type": "object"
},
"annotations": {
"title": "Get file content",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "file",
"access": "write",
"name": "create_or_update_file",
"description": "Create or update a file (provide sha to update an existing file).",
"inputSchema": {
"properties": {
"branch_name": {
"type": "string"
},
"content": {
"type": "string"
},
"message": {
"description": "commit message",
"type": "string"
},
"new_branch_name": {
"description": "new branch (create only)",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"path": {
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"sha": {
"description": "existing file SHA (omit to create)",
"type": "string"
}
},
"required": [
"owner",
"repo",
"path",
"content",
"message",
"branch_name"
],
"type": "object"
},
"annotations": {
"title": "Create or update a file",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "file",
"access": "write",
"name": "delete_file",
"description": "Delete a file from a repository by committing the removal to a branch. Requires the file's current SHA and a commit message.",
"inputSchema": {
"properties": {
"branch_name": {
"type": "string"
},
"message": {
"description": "commit message",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"path": {
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"sha": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"path",
"message",
"branch_name",
"sha"
],
"type": "object"
},
"annotations": {
"title": "Delete a file",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "issue",
"access": "read",
"name": "attachment_read",
"description": "Read issue/comment attachments: list metadata, get metadata, or download content.",
"inputSchema": {
"properties": {
"attachment_id": {
"description": "required for get and for download when attachment_uuid is not provided",
"type": "number"
},
"attachment_uuid": {
"description": "attachment UUID for direct download path lookup",
"type": "string"
},
"comment_id": {
"description": "required for comment attachment list/get or comment-scoped metadata lookup",
"type": "number"
},
"issue_number": {
"description": "required for issue attachment list/get or issue-scoped metadata lookup",
"type": "number"
},
"method": {
"enum": [
"list",
"get",
"download"
],
"type": "string"
},
"output_path": {
"description": "write the attachment to this exact path",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Read issue or comment attachments",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "issue",
"access": "read",
"name": "issue_read",
"description": "Read issue: details, comments, or labels.",
"inputSchema": {
"properties": {
"issue_number": {
"type": "number"
},
"method": {
"enum": [
"get",
"get_comments",
"get_labels"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo",
"issue_number"
],
"type": "object"
},
"annotations": {
"title": "Read issue details",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "issue",
"access": "read",
"name": "list_issues",
"description": "List issues in a repository (or pull requests, via the 'type' filter), filterable by state, labels, milestones, and update time range.",
"inputSchema": {
"properties": {
"before": {
"description": "updated before ISO 8601",
"type": "string"
},
"labels": {
"description": "label name filter",
"items": {
"type": "string"
},
"type": "array"
},
"milestones": {
"description": "milestone name or ID filter",
"items": {
"type": "string"
},
"type": "array"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"since": {
"description": "updated after ISO 8601",
"type": "string"
},
"state": {
"default": "all",
"type": "string"
},
"type": {
"description": "issues or pulls",
"enum": [
"issues",
"pulls"
],
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "List repository issues",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "issue",
"access": "write",
"name": "issue_write",
"description": "Write issues: create, update, manage comments and labels.",
"inputSchema": {
"properties": {
"assignees": {
"items": {
"type": "string"
},
"type": "array"
},
"body": {
"description": "required for 'create'/'add_comment'/'edit_comment'",
"type": "string"
},
"commentID": {
"description": "for 'edit_comment'",
"type": "number"
},
"deadline": {
"description": "ISO 8601",
"type": "string"
},
"issue_number": {
"description": "required except for 'create'",
"type": "number"
},
"label_id": {
"description": "for 'remove_label'",
"type": "number"
},
"labels": {
"description": "label IDs",
"items": {
"type": "number"
},
"type": "array"
},
"method": {
"enum": [
"create",
"update",
"add_comment",
"edit_comment",
"add_labels",
"remove_label",
"replace_labels",
"clear_labels"
],
"type": "string"
},
"milestone": {
"type": "number"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"ref": {
"description": "branch to associate",
"type": "string"
},
"remove_deadline": {
"type": "boolean"
},
"repo": {
"description": "repo name",
"type": "string"
},
"state": {
"enum": [
"open",
"closed",
"all"
],
"type": "string"
},
"title": {
"description": "required for 'create'",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Create or update issues, comments, and labels",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "label",
"access": "read",
"name": "label_read",
"description": "Read repo or org labels.",
"inputSchema": {
"properties": {
"id": {
"description": "label ID (for 'get_repo_label')",
"type": "number"
},
"method": {
"enum": [
"list_repo_labels",
"get_repo_label",
"list_org_labels"
],
"type": "string"
},
"org": {
"description": "for org methods",
"type": "string"
},
"owner": {
"description": "for repo methods",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "for repo methods",
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Read labels",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "label",
"access": "write",
"name": "label_write",
"description": "Write labels (repo or org): create, edit, delete.",
"inputSchema": {
"properties": {
"color": {
"description": "hex (#RRGGBB); required for create",
"type": "string"
},
"description": {
"type": "string"
},
"exclusive": {
"description": "exclusive (org only)",
"type": "boolean"
},
"id": {
"description": "for edit/delete",
"type": "number"
},
"is_archived": {
"description": "archived (repo only)",
"type": "boolean"
},
"method": {
"enum": [
"create_repo_label",
"edit_repo_label",
"delete_repo_label",
"create_org_label",
"edit_org_label",
"delete_org_label"
],
"type": "string"
},
"name": {
"description": "required for create",
"type": "string"
},
"org": {
"description": "for org methods",
"type": "string"
},
"owner": {
"description": "for repo methods",
"type": "string"
},
"repo": {
"description": "for repo methods",
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Create, update, or delete labels",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "milestone",
"access": "read",
"name": "milestone_read",
"description": "Read milestones: get one or list.",
"inputSchema": {
"properties": {
"id": {
"description": "for 'get'",
"type": "number"
},
"method": {
"enum": [
"get",
"list"
],
"type": "string"
},
"name": {
"description": "name filter (for 'list')",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"state": {
"default": "all",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Read milestones",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "milestone",
"access": "write",
"name": "milestone_write",
"description": "Write milestones: create, update, delete.",
"inputSchema": {
"properties": {
"description": {
"type": "string"
},
"due_on": {
"description": "due date",
"type": "string"
},
"id": {
"description": "for 'update'/'delete'",
"type": "number"
},
"method": {
"enum": [
"create",
"update",
"edit",
"delete"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"state": {
"enum": [
"open",
"closed"
],
"type": "string"
},
"title": {
"description": "for 'create'",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Create, update, or delete milestones",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "notification",
"access": "read",
"name": "notification_read",
"description": "Read notifications: list (optionally scoped to a repo) or get a thread by ID.",
"inputSchema": {
"properties": {
"before": {
"description": "updated before ISO 8601",
"type": "string"
},
"id": {
"description": "thread ID (for 'get')",
"type": "number"
},
"method": {
"enum": [
"list",
"get"
],
"type": "string"
},
"owner": {
"description": "scope 'list' to a repo",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "scope 'list' to a repo",
"type": "string"
},
"since": {
"description": "updated after ISO 8601",
"type": "string"
},
"status": {
"enum": [
"unread",
"read",
"pinned"
],
"type": "string"
},
"subject_type": {
"enum": [
"Issue",
"Pull",
"Commit",
"Repository"
],
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Read notifications",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "notification",
"access": "write",
"name": "notification_write",
"description": "Mark a notification or all notifications as read.",
"inputSchema": {
"properties": {
"id": {
"description": "thread ID (for 'mark_read')",
"type": "number"
},
"last_read_at": {
"description": "ISO 8601; defaults to now",
"type": "string"
},
"method": {
"enum": [
"mark_read",
"mark_all_read"
],
"type": "string"
},
"owner": {
"description": "scope 'mark_all_read' to a repo",
"type": "string"
},
"repo": {
"description": "scope 'mark_all_read' to a repo",
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Manage notifications",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "packages",
"access": "read",
"name": "package_read",
"description": "Read package registry: list packages (one entry per version, filter via 'q'/'type'), list versions, or get a version.",
"inputSchema": {
"properties": {
"method": {
"enum": [
"list",
"list_versions",
"get"
],
"type": "string"
},
"name": {
"description": "slashes auto-encoded; required except 'list'",
"type": "string"
},
"owner": {
"description": "user or org",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"minimum": 1,
"type": "number"
},
"q": {
"description": "search query",
"type": "string"
},
"type": {
"description": "container/npm/maven/pypi/cargo/generic; required except 'list'",
"type": "string"
},
"version": {
"description": "for 'get'",
"type": "string"
}
},
"required": [
"method",
"owner"
],
"type": "object"
},
"annotations": {
"title": "Read package registry",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "packages",
"access": "write",
"name": "package_write",
"description": "Delete a package version (irreversible).",
"inputSchema": {
"properties": {
"method": {
"enum": [
"delete"
],
"type": "string"
},
"name": {
"description": "slashes auto-encoded",
"type": "string"
},
"owner": {
"description": "user or org",
"type": "string"
},
"type": {
"description": "container/npm/maven/pypi/cargo/generic",
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"method",
"owner",
"type",
"name",
"version"
],
"type": "object"
},
"annotations": {
"title": "Delete a package version",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "pull_request",
"access": "read",
"name": "list_pull_requests",
"description": "List pull requests in a repository, filterable by state and milestone, with configurable sort order (e.g. recently updated, most commented).",
"inputSchema": {
"properties": {
"milestone": {
"type": "number"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"sort": {
"default": "recentupdate",
"enum": [
"oldest",
"recentupdate",
"leastupdate",
"mostcomment",
"leastcomment",
"priority"
],
"type": "string"
},
"state": {
"default": "all",
"enum": [
"open",
"closed",
"all"
],
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "List pull requests",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "pull_request",
"access": "read",
"name": "pull_request_read",
"description": "Read pull request: details, diff, changed files, head commit status, reviews, review comments.",
"inputSchema": {
"properties": {
"binary": {
"description": "include binary diff",
"type": "boolean"
},
"method": {
"enum": [
"get",
"get_diff",
"get_files",
"get_status",
"get_reviews",
"get_review",
"get_review_comments"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"pull_number": {
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"review_id": {
"description": "for 'get_review'; optional for 'get_review_comments', omit to list all",
"type": "number"
}
},
"required": [
"method",
"owner",
"repo",
"pull_number"
],
"type": "object"
},
"annotations": {
"title": "Read pull request details",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "pull_request",
"access": "write",
"name": "pull_request_review_write",
"description": "Write PR reviews: create, submit, delete, dismiss, reply to and resolve review comments.",
"inputSchema": {
"properties": {
"body": {
"description": "review body, or reply text for 'reply_comment'",
"type": "string"
},
"comment_id": {
"description": "comment ID from 'get_review_comments'; resolve takes the thread's first",
"type": "number"
},
"comments": {
"description": "inline comments (for 'create')",
"items": {
"properties": {
"body": {
"type": "string"
},
"new_line_num": {
"description": "new-file line (additions)",
"type": "number"
},
"old_line_num": {
"description": "old-file line (deletions)",
"type": "number"
},
"path": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"commit_id": {
"description": "for 'create'",
"type": "string"
},
"message": {
"description": "dismissal reason",
"type": "string"
},
"method": {
"enum": [
"create",
"submit",
"delete",
"dismiss",
"reply_comment",
"resolve_thread",
"unresolve_thread"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"pull_number": {
"description": "required except for 'resolve_thread'/'unresolve_thread'",
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
},
"review_id": {
"description": "for 'submit'/'delete'/'dismiss'",
"type": "number"
},
"state": {
"enum": [
"APPROVED",
"REQUEST_CHANGES",
"COMMENT",
"PENDING"
],
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Write pull request reviews",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "pull_request",
"access": "write",
"name": "pull_request_write",
"description": "Write pull requests: create, update, close, reopen, merge, update branch from base, manage reviewers.",
"inputSchema": {
"properties": {
"allow_maintainer_edit": {
"description": "for 'update'",
"type": "boolean"
},
"assignee": {
"description": "for 'update'",
"type": "string"
},
"assignees": {
"description": "for 'update'",
"items": {
"type": "string"
},
"type": "array"
},
"base": {
"description": "base branch (required for 'create')",
"type": "string"
},
"body": {
"description": "required for 'create'; optional for 'update'",
"type": "string"
},
"deadline": {
"description": "ISO 8601",
"type": "string"
},
"delete_branch": {
"description": "for 'merge'",
"type": "boolean"
},
"draft": {
"description": "uses 'WIP: ' title prefix",
"type": "boolean"
},
"force_merge": {
"description": "merge even if checks fail",
"type": "boolean"
},
"head": {
"description": "head branch (required for 'create')",
"type": "string"
},
"head_commit_id": {
"description": "expected head SHA for conflict detection",
"type": "string"
},
"labels": {
"description": "label IDs",
"items": {
"type": "number"
},
"type": "array"
},
"merge_style": {
"default": "merge",
"description": "for 'merge'",
"enum": [
"merge",
"rebase",
"rebase-merge",
"squash",
"fast-forward-only"
],
"type": "string"
},
"merge_when_checks_succeed": {
"description": "for 'merge'",
"type": "boolean"
},
"message": {
"description": "merge commit message or dismissal reason",
"type": "string"
},
"method": {
"enum": [
"create",
"update",
"close",
"reopen",
"merge",
"update_branch",
"add_reviewers",
"remove_reviewers"
],
"type": "string"
},
"milestone": {
"description": "for 'update'",
"type": "number"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"pull_number": {
"description": "required except for 'create'",
"type": "number"
},
"remove_deadline": {
"description": "for 'update'",
"type": "boolean"
},
"repo": {
"description": "repo name",
"type": "string"
},
"reviewers": {
"description": "for 'add_reviewers'/'remove_reviewers'",
"items": {
"type": "string"
},
"type": "array"
},
"state": {
"description": "for 'update'",
"enum": [
"open",
"closed"
],
"type": "string"
},
"team_reviewers": {
"description": "for 'add_reviewers'/'remove_reviewers'",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "required for 'create'; optional for 'update'/'merge'",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Create, update, close, reopen, or merge pull requests",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "release",
"access": "read",
"name": "get_latest_release",
"description": "Get the most recent published (non-draft) release in a repository.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Get latest release",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "release",
"access": "read",
"name": "get_release",
"description": "Get a release by ID",
"inputSchema": {
"properties": {
"id": {
"type": "number"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo",
"id"
],
"type": "object"
},
"annotations": {
"title": "Get release details",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "release",
"access": "read",
"name": "list_releases",
"description": "List releases in a repository, optionally filtered to drafts or pre-releases.",
"inputSchema": {
"properties": {
"is_draft": {
"type": "boolean"
},
"is_pre_release": {
"type": "boolean"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 20,
"description": "results per page",
"minimum": 1,
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "List releases",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "release",
"access": "write",
"name": "create_release",
"description": "Create a new release in a repository from a tag, optionally marking it as a draft or pre-release.",
"inputSchema": {
"properties": {
"body": {
"type": "string"
},
"is_draft": {
"type": "boolean"
},
"is_pre_release": {
"type": "boolean"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"tag_name": {
"type": "string"
},
"target": {
"description": "commitish",
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"tag_name",
"target",
"title"
],
"type": "object"
},
"annotations": {
"title": "Create a release",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "release",
"access": "write",
"name": "delete_release",
"description": "Delete a release from a repository by its numeric ID. This action is destructive and cannot be undone.",
"inputSchema": {
"properties": {
"id": {
"type": "number"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo",
"id"
],
"type": "object"
},
"annotations": {
"title": "Delete a release",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "repository",
"access": "read",
"name": "get_repository_tree",
"description": "Get the file tree of a repository at a given ref (SHA, branch, or tag), optionally recursively.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"recursive": {
"type": "boolean"
},
"repo": {
"description": "repo name",
"type": "string"
},
"tree_sha": {
"description": "SHA, branch, or tag",
"type": "string"
}
},
"required": [
"owner",
"repo",
"tree_sha"
],
"type": "object"
},
"annotations": {
"title": "Get repository file tree",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "repository",
"access": "read",
"name": "list_my_repos",
"description": "List repositories owned by the authenticated user.",
"inputSchema": {
"properties": {
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"minimum": 1,
"type": "number"
}
},
"required": [],
"type": "object"
},
"annotations": {
"title": "List my repositories",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "repository",
"access": "read",
"name": "list_org_repos",
"description": "List repositories belonging to an organization.",
"inputSchema": {
"properties": {
"org": {
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 100,
"description": "results per page",
"minimum": 1,
"type": "number"
}
},
"required": [
"org"
],
"type": "object"
},
"annotations": {
"title": "List organization repositories",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "repository",
"access": "write",
"name": "create_repo",
"description": "Create a new Git repository, optionally under an organization (defaults to the authenticated user's account), with options for visibility, template, license, .gitignore, and initial README.",
"inputSchema": {
"properties": {
"auto_init": {
"type": "boolean"
},
"default_branch": {
"type": "string"
},
"description": {
"type": "string"
},
"gitignores": {
"type": "string"
},
"issue_labels": {
"type": "string"
},
"license": {
"type": "string"
},
"name": {
"type": "string"
},
"object_format_name": {
"enum": [
"sha1",
"sha256"
],
"type": "string"
},
"organization": {
"description": "defaults to personal account",
"type": "string"
},
"private": {
"type": "boolean"
},
"readme": {
"type": "string"
},
"template": {
"type": "boolean"
},
"trust_model": {
"enum": [
"default",
"collaborator",
"committer",
"collaboratorcommitter"
],
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"annotations": {
"title": "Create a new repository",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "repository",
"access": "write",
"name": "fork_repo",
"description": "Fork an existing repository into the authenticated user's account or a target organization, optionally under a new name.",
"inputSchema": {
"properties": {
"name": {
"description": "fork name",
"type": "string"
},
"organization": {
"description": "target org",
"type": "string"
},
"repo": {
"type": "string"
},
"user": {
"description": "owner of source repo",
"type": "string"
}
},
"required": [
"user",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Fork a repository",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "search",
"access": "read",
"name": "search_issues",
"description": "Search issues and PRs across repositories",
"inputSchema": {
"properties": {
"labels": {
"description": "comma-separated",
"type": "string"
},
"owner": {
"description": "filter by owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"query": {
"type": "string"
},
"state": {
"enum": [
"open",
"closed",
"all"
],
"type": "string"
},
"type": {
"enum": [
"issues",
"pulls"
],
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"annotations": {
"title": "Search issues",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "search",
"access": "read",
"name": "search_org_teams",
"description": "Search for teams within an organization by name, optionally including each team's description in the results.",
"inputSchema": {
"properties": {
"includeDescription": {
"type": "boolean"
},
"org": {
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"query": {
"type": "string"
}
},
"required": [
"org",
"query"
],
"type": "object"
},
"annotations": {
"title": "Search organization teams",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "search",
"access": "read",
"name": "search_repos",
"description": "Search for repositories by keyword, with filters for topic/description matching, owner, visibility, archived status, and sort order.",
"inputSchema": {
"properties": {
"isArchived": {
"type": "boolean"
},
"isPrivate": {
"type": "boolean"
},
"keywordInDescription": {
"type": "boolean"
},
"keywordIsTopic": {
"type": "boolean"
},
"order": {
"type": "string"
},
"ownerID": {
"type": "number"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"query": {
"type": "string"
},
"sort": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"annotations": {
"title": "Search repositories",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "search",
"access": "read",
"name": "search_users",
"description": "Search for Gitea users by username or full name.",
"inputSchema": {
"properties": {
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"query": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"annotations": {
"title": "Search users",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "tag",
"access": "read",
"name": "get_tag",
"description": "Get details for a single tag in a repository by name.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"tag_name": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"tag_name"
],
"type": "object"
},
"annotations": {
"title": "Get tag details",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "tag",
"access": "read",
"name": "list_tags",
"description": "List all tags in a repository, paginated.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"minimum": 1,
"type": "number"
},
"per_page": {
"default": 20,
"description": "results per page",
"minimum": 1,
"type": "number"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "List tags",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "tag",
"access": "write",
"name": "create_tag",
"description": "Create a new Git tag in a repository at a target commit, branch, or existing tag, with an optional annotation message.",
"inputSchema": {
"properties": {
"message": {
"description": "tag message",
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"tag_name": {
"type": "string"
},
"target": {
"description": "commitish",
"type": "string"
}
},
"required": [
"owner",
"repo",
"tag_name"
],
"type": "object"
},
"annotations": {
"title": "Create a tag",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "tag",
"access": "write",
"name": "delete_tag",
"description": "Permanently delete a tag from a repository. This action is destructive and cannot be undone.",
"inputSchema": {
"properties": {
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"tag_name": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"tag_name"
],
"type": "object"
},
"annotations": {
"title": "Delete a tag",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "timetracking",
"access": "read",
"name": "timetracking_read",
"description": "Read time tracking: issue times, repo times, active stopwatches, your tracked times.",
"inputSchema": {
"properties": {
"issue_number": {
"description": "for 'list_issue_times'",
"type": "number"
},
"method": {
"enum": [
"list_issue_times",
"list_repo_times",
"get_my_stopwatches",
"get_my_times"
],
"type": "string"
},
"owner": {
"description": "for list_* methods",
"type": "string"
},
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
},
"repo": {
"description": "for list_* methods",
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Read tracked time",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "timetracking",
"access": "write",
"name": "timetracking_write",
"description": "Write time tracking: stopwatches and entries.",
"inputSchema": {
"properties": {
"id": {
"description": "entry ID (for 'delete_time')",
"type": "number"
},
"issue_number": {
"type": "number"
},
"method": {
"enum": [
"start_stopwatch",
"stop_stopwatch",
"delete_stopwatch",
"add_time",
"delete_time"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"time": {
"description": "seconds (for 'add_time')",
"type": "number"
}
},
"required": [
"method"
],
"type": "object"
},
"annotations": {
"title": "Add or manage tracked time",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "user",
"access": "read",
"name": "get_me",
"description": "Get current user",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"annotations": {
"title": "Get current user information",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "user",
"access": "read",
"name": "get_user_orgs",
"description": "List current user's organizations",
"inputSchema": {
"properties": {
"page": {
"default": 1,
"description": "page",
"type": "number"
},
"per_page": {
"default": 30,
"description": "results per page",
"type": "number"
}
},
"required": [],
"type": "object"
},
"annotations": {
"title": "Get user organizations",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "version",
"access": "read",
"name": "get_gitea_mcp_server_version",
"description": "Get the running version of the Gitea MCP Server itself (not the Gitea instance it connects to).",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"annotations": {
"title": "Get server version",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "wiki",
"access": "read",
"name": "wiki_read",
"description": "Read wiki: list pages, get content, revision history.",
"inputSchema": {
"properties": {
"method": {
"enum": [
"list",
"get",
"get_revisions"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"pageName": {
"description": "for 'get'/'get_revisions'",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Read wiki pages",
"readOnlyHint": true,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
},
{
"scope": "wiki",
"access": "write",
"name": "wiki_write",
"description": "Write wiki pages: create, update, delete.",
"inputSchema": {
"properties": {
"content": {
"description": "for 'create'/'update'",
"type": "string"
},
"message": {
"description": "commit message",
"type": "string"
},
"method": {
"enum": [
"create",
"update",
"delete"
],
"type": "string"
},
"owner": {
"description": "repo owner",
"type": "string"
},
"pageName": {
"description": "for 'update'/'delete'",
"type": "string"
},
"repo": {
"description": "repo name",
"type": "string"
},
"title": {
"description": "for 'create'",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo"
],
"type": "object"
},
"annotations": {
"title": "Create, update, or delete wiki pages",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
}
}
]