fix: annotate POST render endpoints read-only and irreversible POSTs destructive

This commit is contained in:
Latte committed 2026-10-14 16:09:59 +02:00
1 parent 156e963e21
commit 6b11d29919
4 files changed
+107 -22

No files matched your search

+7 -1
View File
@@ -24,7 +24,13 @@ Coverage target: every operation in the instance swagger gets a tool. Gitea
false` everywhere we control. Owner, repo and username path parameters get
name patterns.
- Annotations: `readOnlyHint` for GET, `destructiveHint` for DELETE and for
PUT/PATCH that replace state, `idempotentHint` for GET/PUT/DELETE.
PUT/PATCH that replace state, `idempotentHint` for GET/PUT/DELETE. A small
explicit override set in `catalog/build.py` corrects POST operations: the
render endpoints (`/markdown`, `/markdown/raw`, `/markup`) and the read-only
`file-contents` POST are read-only and idempotent; irreversible or
wide-reaching POSTs (PR merge, merge upstream, repo transfer and its
accept/reject, user and org rename, cron run, mirror sync, adopt unadopted
repository) are destructive.
- Every tool also accepts optional `sudo` (admin acts as another user).
- One extra hand-written tool, `gitea_api_request`, reaches endpoints added in
newer Gitea versions than the pinned spec.
+32 -3
View File
@@ -38,6 +38,33 @@ HTTP_METHODS = ("get", "put", "post", "delete", "patch", "head", "options")
MAX_DESCRIPTION_LENGTH = 500
_RESERVED_ARGUMENTS = frozenset({SUDO_ARGUMENT, BODY_ARGUMENT})
#: POST operations that only render or read and change no state. They are
#: annotated ``read_only`` and idempotent, so MCP clients do not ask for
#: confirmation to render markdown.
READ_ONLY_POST_OPERATIONS = frozenset(
{"renderMarkdown", "renderMarkdownRaw", "renderMarkup", "repoGetFileContentsPost"}
)
#: State-changing POST operations that are irreversible or wide-reaching. They are
#: annotated ``destructive`` although the HTTP verb alone would not say so.
#: Gitea 28.1.0 has no mirror-to-repo ``convert`` endpoint and branch/tag renames
#: are PATCH (already destructive), so neither appears here.
DESTRUCTIVE_POST_OPERATIONS = frozenset(
{
"repoMergePullRequest",
"repoMergeUpstream",
"repoTransfer",
"acceptRepoTransfer",
"rejectRepoTransfer",
"adminRenameUser",
"renameOrg",
"adminCronRun",
"repoMirrorSync",
"repoPushMirrorSync",
"adminAdoptRepository",
}
)
@dataclass(frozen=True)
class BuildResult:
@@ -199,9 +226,11 @@ def _build_operation(
input_schema=input_schema,
consumes=tuple(raw.get("consumes", spec.get("consumes", []))),
produces=tuple(raw.get("produces", spec.get("produces", []))),
read_only=verb in ("GET", "HEAD"),
destructive=verb in ("DELETE", "PUT", "PATCH"),
idempotent=verb in ("GET", "PUT", "DELETE"),
read_only=verb in ("GET", "HEAD") or str(raw["operationId"]) in READ_ONLY_POST_OPERATIONS,
destructive=verb in ("DELETE", "PUT", "PATCH")
or str(raw["operationId"]) in DESTRUCTIVE_POST_OPERATIONS,
idempotent=verb in ("GET", "PUT", "DELETE")
or str(raw["operationId"]) in READ_ONLY_POST_OPERATIONS,
paginated={"page", "limit"} <= names,
)
return operation, overridden
+15 -15
View File
@@ -70,7 +70,7 @@
{"tool_name":"gitea_actions_update_user_variable","domain":"actions","operation_id":"updateUserVariable","method":"PUT","path":"/user/actions/variables/{variablename}","summary":"Update a user-level variable which is created by current doer","description":"Update a user-level variable which is created by current doer. PUT /user/actions/variables/{variablename}.","parameters":[{"name":"variablename","arg_name":"variablename","location":"path","required":true,"schema":{"type":"string","description":"name of the variable","minLength":1},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"UpdateVariableOption the option when updating variable","type":"object","required":["value"],"properties":{"description":{"description":"Description of the variable to update","type":"string"},"name":{"description":"New name for the variable. If the field is empty, the variable name won't be updated.","type":"string"},"value":{"description":"Value of the variable to update","type":"string"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"variablename":{"type":"string","description":"name of the variable","minLength":1},"body":{"description":"UpdateVariableOption the option when updating variable","type":"object","required":["value"],"properties":{"description":{"description":"Description of the variable to update","type":"string"},"name":{"description":"New name for the variable. If the field is empty, the variable name won't be updated.","type":"string"},"value":{"description":"Value of the variable to update","type":"string"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["variablename"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_actions_user_create_runner_registration_token","domain":"actions","operation_id":"userCreateRunnerRegistrationToken","method":"POST","path":"/user/actions/runners/registration-token","summary":"Get a user's actions runner registration token","description":"Get a user's actions runner registration token. POST /user/actions/runners/registration-token.","parameters":[],"input_schema":{"type":"object","properties":{"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_add_user_badges","domain":"admin","operation_id":"adminAddUserBadges","method":"POST","path":"/admin/users/{username}/badges","summary":"Add a badge to a user","description":"Add a badge to a user. Requires a site-admin token. POST /admin/users/{username}/badges.","parameters":[{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"username of the user to whom a badge is to be added","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"UserBadgeOption options for link between users and badges","type":"object","properties":{"badge_slugs":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"username of the user to whom a badge is to be added","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"UserBadgeOption options for link between users and badges","type":"object","properties":{"badge_slugs":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["username"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_adopt_repository","domain":"admin","operation_id":"adminAdoptRepository","method":"POST","path":"/admin/unadopted/{owner}/{repo}","summary":"Adopt unadopted files as a repository","description":"Adopt unadopted files as a repository. Requires a site-admin token. POST /admin/unadopted/{owner}/{repo}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_adopt_repository","domain":"admin","operation_id":"adminAdoptRepository","method":"POST","path":"/admin/unadopted/{owner}/{repo}","summary":"Adopt unadopted files as a repository","description":"Adopt unadopted files as a repository. Requires a site-admin token. POST /admin/unadopted/{owner}/{repo}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_create_hook","domain":"admin","operation_id":"adminCreateHook","method":"POST","path":"/admin/hooks","summary":"Create a hook","description":"Create a hook. Requires a site-admin token. POST /admin/hooks.","parameters":[{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"CreateHookOption options when create a hook","type":"object","required":["type","config"],"properties":{"active":{"description":"Whether the webhook should be active upon creation","type":"boolean","default":false},"authorization_header":{"description":"Authorization header to include in webhook requests","type":"string"},"branch_filter":{"description":"Branch filter pattern to determine which branches trigger the webhook","type":"string"},"config":{"description":"CreateHookOptionConfig has all config options in it required are \"content_type\" and \"url\" Required","type":"object","additionalProperties":{"type":"string"}},"events":{"description":"List of events that will trigger this webhook","type":"array","items":{"type":"string"}},"name":{"description":"Optional human-readable name for the webhook","type":"string"},"type":{"description":"The type of the webhook to create","type":"string","enum":["dingtalk","discord","gitea","gogs","msteams","slack","telegram","feishu","wechatwork","packagist"]}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"CreateHookOption options when create a hook","type":"object","required":["type","config"],"properties":{"active":{"description":"Whether the webhook should be active upon creation","type":"boolean","default":false},"authorization_header":{"description":"Authorization header to include in webhook requests","type":"string"},"branch_filter":{"description":"Branch filter pattern to determine which branches trigger the webhook","type":"string"},"config":{"description":"CreateHookOptionConfig has all config options in it required are \"content_type\" and \"url\" Required","type":"object","additionalProperties":{"type":"string"}},"events":{"description":"List of events that will trigger this webhook","type":"array","items":{"type":"string"}},"name":{"description":"Optional human-readable name for the webhook","type":"string"},"type":{"description":"The type of the webhook to create","type":"string","enum":["dingtalk","discord","gitea","gogs","msteams","slack","telegram","feishu","wechatwork","packagist"]}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_create_org","domain":"admin","operation_id":"adminCreateOrg","method":"POST","path":"/admin/users/{username}/orgs","summary":"Create an organization","description":"Create an organization. Requires a site-admin token. POST /admin/users/{username}/orgs.","parameters":[{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"username of the user who will own the created organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"organization","arg_name":"body","location":"body","required":true,"schema":{"description":"CreateOrgOption options for creating an organization","type":"object","required":["username"],"properties":{"description":{"description":"The description of the organization","type":"string"},"email":{"description":"The email address of the organization","type":"string"},"full_name":{"description":"The full display name of the organization","type":"string"},"location":{"description":"The location of the organization","type":"string"},"repo_admin_change_team_access":{"description":"Whether repository administrators can change team access","type":"boolean"},"username":{"description":"username of the organization","type":"string"},"visibility":{"description":"possible values are `public` (default), `limited` or `private`","type":"string","enum":["public","limited","private"]},"website":{"description":"The website URL of the organization","type":"string"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"username of the user who will own the created organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"CreateOrgOption options for creating an organization","type":"object","required":["username"],"properties":{"description":{"description":"The description of the organization","type":"string"},"email":{"description":"The email address of the organization","type":"string"},"full_name":{"description":"The full display name of the organization","type":"string"},"location":{"description":"The location of the organization","type":"string"},"repo_admin_change_team_access":{"description":"Whether repository administrators can change team access","type":"boolean"},"username":{"description":"username of the organization","type":"string"},"visibility":{"description":"possible values are `public` (default), `limited` or `private`","type":"string","enum":["public","limited","private"]},"website":{"description":"The website URL of the organization","type":"string"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["username","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_create_public_key","domain":"admin","operation_id":"adminCreatePublicKey","method":"POST","path":"/admin/users/{username}/keys","summary":"Add a public key on behalf of a user","description":"Add a public key on behalf of a user. Requires a site-admin token. POST /admin/users/{username}/keys.","parameters":[{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"username of the user who is to receive a public key","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"key","arg_name":"body","location":"body","required":false,"schema":{"type":"object","required":["title","key"],"properties":{"key":{"description":"An armored SSH key to add","type":"string","uniqueItems":true},"read_only":{"description":"Describe if the key has only read access or read/write","type":"boolean"},"title":{"description":"Title of the key to add","type":"string","uniqueItems":true}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"username of the user who is to receive a public key","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"type":"object","required":["title","key"],"properties":{"key":{"description":"An armored SSH key to add","type":"string","uniqueItems":true},"read_only":{"description":"Describe if the key has only read access or read/write","type":"boolean"},"title":{"description":"Title of the key to add","type":"string","uniqueItems":true}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["username"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
@@ -78,7 +78,7 @@
{"tool_name":"gitea_admin_create_runner_registration_token","domain":"admin","operation_id":"adminCreateRunnerRegistrationToken","method":"POST","path":"/admin/actions/runners/registration-token","summary":"Get a global actions runner registration token","description":"Get a global actions runner registration token. Requires a site-admin token. POST /admin/actions/runners/registration-token.","parameters":[],"input_schema":{"type":"object","properties":{"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_create_user","domain":"admin","operation_id":"adminCreateUser","method":"POST","path":"/admin/users","summary":"Create a user","description":"Create a user. Requires a site-admin token. POST /admin/users.","parameters":[{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"CreateUserOption create user options","type":"object","required":["username","email"],"properties":{"created_at":{"description":"For explicitly setting the user creation timestamp. Useful when users are migrated from other systems. When omitted, the user's creation timestamp will be set to \"now\".","type":"string","format":"date-time"},"email":{"type":"string"},"full_name":{"description":"The full display name of the user","type":"string"},"login_name":{"description":"identifier of the user, provided by the external authenticator (if configured)","type":"string"},"must_change_password":{"description":"Whether the user must change password on first login","type":"boolean"},"password":{"description":"The plain text password for the user","type":"string"},"restricted":{"description":"Whether the user has restricted access privileges","type":"boolean"},"send_notify":{"description":"Whether to send welcome notification email to the user","type":"boolean"},"source_id":{"description":"The authentication source ID to associate with the user","type":"integer","format":"int64"},"username":{"description":"username of the user","type":"string"},"visibility":{"description":"User visibility level: public, limited, or private","type":"string","enum":["public","limited","private"]}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"CreateUserOption create user options","type":"object","required":["username","email"],"properties":{"created_at":{"description":"For explicitly setting the user creation timestamp. Useful when users are migrated from other systems. When omitted, the user's creation timestamp will be set to \"now\".","type":"string","format":"date-time"},"email":{"type":"string"},"full_name":{"description":"The full display name of the user","type":"string"},"login_name":{"description":"identifier of the user, provided by the external authenticator (if configured)","type":"string"},"must_change_password":{"description":"Whether the user must change password on first login","type":"boolean"},"password":{"description":"The plain text password for the user","type":"string"},"restricted":{"description":"Whether the user has restricted access privileges","type":"boolean"},"send_notify":{"description":"Whether to send welcome notification email to the user","type":"boolean"},"source_id":{"description":"The authentication source ID to associate with the user","type":"integer","format":"int64"},"username":{"description":"username of the user","type":"string"},"visibility":{"description":"User visibility level: public, limited, or private","type":"string","enum":["public","limited","private"]}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_cron_list","domain":"admin","operation_id":"adminCronList","method":"GET","path":"/admin/cron","summary":"List cron tasks","description":"List cron tasks. Requires a site-admin token. GET /admin/cron.","parameters":[{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_admin_cron_run","domain":"admin","operation_id":"adminCronRun","method":"POST","path":"/admin/cron/{task}","summary":"Run cron task","description":"Run cron task. Requires a site-admin token. POST /admin/cron/{task}.","parameters":[{"name":"task","arg_name":"task","location":"path","required":true,"schema":{"type":"string","description":"task to run","minLength":1},"is_file":false}],"input_schema":{"type":"object","properties":{"task":{"type":"string","description":"task to run","minLength":1},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["task"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_cron_run","domain":"admin","operation_id":"adminCronRun","method":"POST","path":"/admin/cron/{task}","summary":"Run cron task","description":"Run cron task. Requires a site-admin token. POST /admin/cron/{task}.","parameters":[{"name":"task","arg_name":"task","location":"path","required":true,"schema":{"type":"string","description":"task to run","minLength":1},"is_file":false}],"input_schema":{"type":"object","properties":{"task":{"type":"string","description":"task to run","minLength":1},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["task"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_delete_hook","domain":"admin","operation_id":"adminDeleteHook","method":"DELETE","path":"/admin/hooks/{id}","summary":"Delete a hook","description":"Delete a hook. Requires a site-admin token. DELETE /admin/hooks/{id}.","parameters":[{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the hook to delete"},"is_file":false}],"input_schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"id of the hook to delete"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_admin_delete_runner","domain":"admin","operation_id":"deleteAdminRunner","method":"DELETE","path":"/admin/actions/runners/{runner_id}","summary":"Delete a global runner","description":"Delete a global runner. Requires a site-admin token. DELETE /admin/actions/runners/{runner_id}.","parameters":[{"name":"runner_id","arg_name":"runner_id","location":"path","required":true,"schema":{"type":"string","description":"id of the runner","minLength":1},"is_file":false}],"input_schema":{"type":"object","properties":{"runner_id":{"type":"string","description":"id of the runner","minLength":1},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["runner_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_admin_delete_unadopted_repository","domain":"admin","operation_id":"adminDeleteUnadoptedRepository","method":"DELETE","path":"/admin/unadopted/{owner}/{repo}","summary":"Delete unadopted files","description":"Delete unadopted files. Requires a site-admin token. DELETE /admin/unadopted/{owner}/{repo}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
@@ -97,7 +97,7 @@
{"tool_name":"gitea_admin_list_user_badges","domain":"admin","operation_id":"adminListUserBadges","method":"GET","path":"/admin/users/{username}/badges","summary":"List a user's badges","description":"List a user's badges. Requires a site-admin token. GET /admin/users/{username}/badges.","parameters":[{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"username of the user whose badges are to be listed","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"username of the user whose badges are to be listed","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["username"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_admin_list_workflow_jobs","domain":"admin","operation_id":"listAdminWorkflowJobs","method":"GET","path":"/admin/actions/jobs","summary":"Lists all jobs","description":"Lists all jobs. Requires a site-admin token. GET /admin/actions/jobs.","parameters":[{"name":"status","arg_name":"status","location":"query","required":false,"schema":{"type":"string","description":"workflow status (requested, pending, queued, in_progress, failure, success, skipped)"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false},{"name":"sort","arg_name":"sort","location":"query","required":false,"schema":{"type":"string","description":"sort jobs by attribute. Supported values are \"id\". Default is \"id\""},"is_file":false},{"name":"order","arg_name":"order","location":"query","required":false,"schema":{"type":"string","description":"sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\""},"is_file":false}],"input_schema":{"type":"object","properties":{"status":{"type":"string","description":"workflow status (requested, pending, queued, in_progress, failure, success, skipped)"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sort":{"type":"string","description":"sort jobs by attribute. Supported values are \"id\". Default is \"id\""},"order":{"type":"string","description":"sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\""},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_admin_list_workflow_runs","domain":"admin","operation_id":"listAdminWorkflowRuns","method":"GET","path":"/admin/actions/runs","summary":"Lists all runs","description":"Lists all runs. Requires a site-admin token. GET /admin/actions/runs.","parameters":[{"name":"event","arg_name":"event","location":"query","required":false,"schema":{"type":"string","description":"workflow event name"},"is_file":false},{"name":"branch","arg_name":"branch","location":"query","required":false,"schema":{"type":"string","description":"workflow branch"},"is_file":false},{"name":"status","arg_name":"status","location":"query","required":false,"schema":{"type":"string","description":"workflow status (requested, pending, queued, in_progress, failure, success, skipped)"},"is_file":false},{"name":"actor","arg_name":"actor","location":"query","required":false,"schema":{"type":"string","description":"triggered by user"},"is_file":false},{"name":"head_sha","arg_name":"head_sha","location":"query","required":false,"schema":{"type":"string","description":"triggering sha of the workflow run"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"event":{"type":"string","description":"workflow event name"},"branch":{"type":"string","description":"workflow branch"},"status":{"type":"string","description":"workflow status (requested, pending, queued, in_progress, failure, success, skipped)"},"actor":{"type":"string","description":"triggered by user"},"head_sha":{"type":"string","description":"triggering sha of the workflow run"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_admin_rename_user","domain":"admin","operation_id":"adminRenameUser","method":"POST","path":"/admin/users/{username}/rename","summary":"Rename a user","description":"Rename a user. Requires a site-admin token. POST /admin/users/{username}/rename.","parameters":[{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"current username of the user","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"RenameUserOption options when renaming a user","type":"object","required":["new_username"],"properties":{"new_username":{"description":"New username for this user. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"current username of the user","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"RenameUserOption options when renaming a user","type":"object","required":["new_username"],"properties":{"new_username":{"description":"New username for this user. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["username","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_rename_user","domain":"admin","operation_id":"adminRenameUser","method":"POST","path":"/admin/users/{username}/rename","summary":"Rename a user","description":"Rename a user. Requires a site-admin token. POST /admin/users/{username}/rename.","parameters":[{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"current username of the user","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"RenameUserOption options when renaming a user","type":"object","required":["new_username"],"properties":{"new_username":{"description":"New username for this user. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"current username of the user","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"RenameUserOption options when renaming a user","type":"object","required":["new_username"],"properties":{"new_username":{"description":"New username for this user. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["username","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_admin_search_emails","domain":"admin","operation_id":"adminSearchEmails","method":"GET","path":"/admin/emails/search","summary":"Search all emails","description":"Search all emails. Requires a site-admin token. GET /admin/emails/search.","parameters":[{"name":"q","arg_name":"q","location":"query","required":false,"schema":{"type":"string","description":"keyword"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"q":{"type":"string","description":"keyword"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_admin_search_users","domain":"admin","operation_id":"adminSearchUsers","method":"GET","path":"/admin/users","summary":"Search users according filter conditions","description":"Search users according filter conditions. Requires a site-admin token. GET /admin/users.","parameters":[{"name":"source_id","arg_name":"source_id","location":"query","required":false,"schema":{"type":"integer","format":"int64","description":"ID of the user's login source to search for"},"is_file":false},{"name":"login_name","arg_name":"login_name","location":"query","required":false,"schema":{"type":"string","description":"identifier of the user, provided by the external authenticator"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false},{"name":"sort","arg_name":"sort","location":"query","required":false,"schema":{"type":"string","description":"sort users by attribute. Supported values are \"name\", \"created\", \"updated\" and \"id\". Default is \"name\""},"is_file":false},{"name":"order","arg_name":"order","location":"query","required":false,"schema":{"type":"string","description":"sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified."},"is_file":false},{"name":"q","arg_name":"q","location":"query","required":false,"schema":{"type":"string","description":"search term (username, full name, email)"},"is_file":false},{"name":"visibility","arg_name":"visibility","location":"query","required":false,"schema":{"type":"string","description":"visibility filter. Supported values are \"public\", \"limited\" and \"private\"."},"is_file":false},{"name":"is_active","arg_name":"is_active","location":"query","required":false,"schema":{"type":"boolean","description":"filter active users"},"is_file":false},{"name":"is_admin","arg_name":"is_admin","location":"query","required":false,"schema":{"type":"boolean","description":"filter admin users"},"is_file":false},{"name":"is_restricted","arg_name":"is_restricted","location":"query","required":false,"schema":{"type":"boolean","description":"filter restricted users"},"is_file":false},{"name":"is_2fa_enabled","arg_name":"is_2fa_enabled","location":"query","required":false,"schema":{"type":"boolean","description":"filter 2FA enabled users"},"is_file":false},{"name":"is_prohibit_login","arg_name":"is_prohibit_login","location":"query","required":false,"schema":{"type":"boolean","description":"filter login prohibited users"},"is_file":false}],"input_schema":{"type":"object","properties":{"source_id":{"type":"integer","format":"int64","description":"ID of the user's login source to search for"},"login_name":{"type":"string","description":"identifier of the user, provided by the external authenticator"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sort":{"type":"string","description":"sort users by attribute. Supported values are \"name\", \"created\", \"updated\" and \"id\". Default is \"name\""},"order":{"type":"string","description":"sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified."},"q":{"type":"string","description":"search term (username, full name, email)"},"visibility":{"type":"string","description":"visibility filter. Supported values are \"public\", \"limited\" and \"private\"."},"is_active":{"type":"boolean","description":"filter active users"},"is_admin":{"type":"boolean","description":"filter admin users"},"is_restricted":{"type":"boolean","description":"filter restricted users"},"is_2fa_enabled":{"type":"boolean","description":"filter 2FA enabled users"},"is_prohibit_login":{"type":"boolean","description":"filter login prohibited users"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_admin_unadopted_list","domain":"admin","operation_id":"adminUnadoptedList","method":"GET","path":"/admin/unadopted","summary":"List unadopted repositories","description":"List unadopted repositories. Requires a site-admin token. GET /admin/unadopted.","parameters":[{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false},{"name":"query","arg_name":"query","location":"query","required":false,"schema":{"type":"string","description":"glob pattern of repositories to search for, in the form owner or owner/repo"},"is_file":false}],"input_schema":{"type":"object","properties":{"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"query":{"type":"string","description":"glob pattern of repositories to search for, in the form owner or owner/repo"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
@@ -210,9 +210,9 @@
{"tool_name":"gitea_misc_list_gitignores_templates","domain":"misc","operation_id":"listGitignoresTemplates","method":"GET","path":"/gitignore/templates","summary":"Returns a list of all gitignore templates","description":"Returns a list of all gitignore templates. GET /gitignore/templates.","parameters":[],"input_schema":{"type":"object","properties":{"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_misc_list_label_templates","domain":"misc","operation_id":"listLabelTemplates","method":"GET","path":"/label/templates","summary":"Returns a list of all label templates","description":"Returns a list of all label templates. GET /label/templates.","parameters":[],"input_schema":{"type":"object","properties":{"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_misc_list_license_templates","domain":"misc","operation_id":"listLicenseTemplates","method":"GET","path":"/licenses","summary":"Returns a list of all license templates","description":"Returns a list of all license templates. GET /licenses.","parameters":[],"input_schema":{"type":"object","properties":{"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_misc_render_markdown","domain":"misc","operation_id":"renderMarkdown","method":"POST","path":"/markdown","summary":"Render a markdown document as HTML","description":"Render a markdown document as HTML. POST /markdown.","parameters":[{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MarkdownOption markdown options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markdown to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"MarkdownOption markdown options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markdown to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["text/html"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_misc_render_markdown_raw","domain":"misc","operation_id":"renderMarkdownRaw","method":"POST","path":"/markdown/raw","summary":"Render raw markdown as HTML","description":"Render raw markdown as HTML. POST /markdown/raw.","parameters":[{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"type":"string","description":"Request body to render"},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"type":"string","description":"Request body to render"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["body"],"additionalProperties":false},"consumes":["text/plain"],"produces":["text/html"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_misc_render_markup","domain":"misc","operation_id":"renderMarkup","method":"POST","path":"/markup","summary":"Render a markup document as HTML","description":"Render a markup document as HTML. POST /markup.","parameters":[{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MarkupOption markup options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"FilePath":{"description":"File path for detecting extension in file mode","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markup to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"MarkupOption markup options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"FilePath":{"description":"File path for detecting extension in file mode","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markup to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["text/html"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_misc_render_markdown","domain":"misc","operation_id":"renderMarkdown","method":"POST","path":"/markdown","summary":"Render a markdown document as HTML","description":"Render a markdown document as HTML. POST /markdown.","parameters":[{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MarkdownOption markdown options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markdown to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"MarkdownOption markdown options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markdown to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["text/html"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_misc_render_markdown_raw","domain":"misc","operation_id":"renderMarkdownRaw","method":"POST","path":"/markdown/raw","summary":"Render raw markdown as HTML","description":"Render raw markdown as HTML. POST /markdown/raw.","parameters":[{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"type":"string","description":"Request body to render"},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"type":"string","description":"Request body to render"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["body"],"additionalProperties":false},"consumes":["text/plain"],"produces":["text/html"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_misc_render_markup","domain":"misc","operation_id":"renderMarkup","method":"POST","path":"/markup","summary":"Render a markup document as HTML","description":"Render a markup document as HTML. POST /markup.","parameters":[{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MarkupOption markup options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"FilePath":{"description":"File path for detecting extension in file mode","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markup to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"MarkupOption markup options","type":"object","properties":{"Context":{"description":"URL path for rendering issue, media and file links Expected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}","type":"string"},"FilePath":{"description":"File path for detecting extension in file mode","type":"string"},"Mode":{"description":"Mode to render (markdown, comment, wiki, file)","type":"string"},"Text":{"description":"Text markup to render","type":"string"},"Wiki":{"description":"Is it a wiki page? (use mode=wiki instead)","type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["text/html"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_misc_topic_search","domain":"misc","operation_id":"topicSearch","method":"GET","path":"/topics/search","summary":"search topics via keyword","description":"search topics via keyword. GET /topics/search.","parameters":[{"name":"q","arg_name":"q","location":"query","required":true,"schema":{"type":"string","description":"keywords to search"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"q":{"type":"string","description":"keywords to search"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["q"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_notification_get_list","domain":"notification","operation_id":"notifyGetList","method":"GET","path":"/notifications","summary":"List users's notification threads","description":"List users's notification threads. GET /notifications.","parameters":[{"name":"all","arg_name":"all","location":"query","required":false,"schema":{"type":"boolean","description":"If true, show notifications marked as read. Default value is false"},"is_file":false},{"name":"status-types","arg_name":"status-types","location":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned."},"is_file":false},{"name":"subject-type","arg_name":"subject-type","location":"query","required":false,"schema":{"type":"array","items":{"type":"string","enum":["issue","pull","commit","repository"]},"description":"filter notifications by subject type"},"is_file":false},{"name":"since","arg_name":"since","location":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Only show notifications updated after the given time. This is a timestamp in RFC 3339 format"},"is_file":false},{"name":"before","arg_name":"before","location":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Only show notifications updated before the given time. This is a timestamp in RFC 3339 format"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"all":{"type":"boolean","description":"If true, show notifications marked as read. Default value is false"},"status-types":{"type":"array","items":{"type":"string"},"description":"Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned."},"subject-type":{"type":"array","items":{"type":"string","enum":["issue","pull","commit","repository"]},"description":"filter notifications by subject type"},"since":{"type":"string","format":"date-time","description":"Only show notifications updated after the given time. This is a timestamp in RFC 3339 format"},"before":{"type":"string","format":"date-time","description":"Only show notifications updated before the given time. This is a timestamp in RFC 3339 format"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_notification_get_repo_list","domain":"notification","operation_id":"notifyGetRepoList","method":"GET","path":"/repos/{owner}/{repo}/notifications","summary":"List users's notification threads on a specific repo","description":"List users's notification threads on a specific repo. GET /repos/{owner}/{repo}/notifications.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"all","arg_name":"all","location":"query","required":false,"schema":{"type":"boolean","description":"If true, show notifications marked as read. Default value is false"},"is_file":false},{"name":"status-types","arg_name":"status-types","location":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned"},"is_file":false},{"name":"subject-type","arg_name":"subject-type","location":"query","required":false,"schema":{"type":"array","items":{"type":"string","enum":["issue","pull","commit","repository"]},"description":"filter notifications by subject type"},"is_file":false},{"name":"since","arg_name":"since","location":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Only show notifications updated after the given time. This is a timestamp in RFC 3339 format"},"is_file":false},{"name":"before","arg_name":"before","location":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Only show notifications updated before the given time. This is a timestamp in RFC 3339 format"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"all":{"type":"boolean","description":"If true, show notifications marked as read. Default value is false"},"status-types":{"type":"array","items":{"type":"string"},"description":"Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned"},"subject-type":{"type":"array","items":{"type":"string","enum":["issue","pull","commit","repository"]},"description":"filter notifications by subject type"},"since":{"type":"string","format":"date-time","description":"Only show notifications updated after the given time. This is a timestamp in RFC 3339 format"},"before":{"type":"string","format":"date-time","description":"Only show notifications updated before the given time. This is a timestamp in RFC 3339 format"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
@@ -262,7 +262,7 @@
{"tool_name":"gitea_org_move_project_issue","domain":"org","operation_id":"orgMoveProjectIssue","method":"POST","path":"/orgs/{org}/projects/{id}/issues/{issue_id}/move","summary":"Move an issue between a project's columns","description":"Move an issue between a project's columns. POST /orgs/{org}/projects/{id}/issues/{issue_id}/move.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"issue_id","arg_name":"issue_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MoveProjectIssueOption represents options for moving an issue between columns","type":"object","required":["column_id"],"properties":{"column_id":{"description":"Target column to move the issue into","type":"integer","format":"int64"},"sorting":{"description":"Position within the column, ascending. Omit to append. Negative values sort above the rest, equal values are ordered newest first.","type":"integer","format":"int64"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"issue_id":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"body":{"description":"MoveProjectIssueOption represents options for moving an issue between columns","type":"object","required":["column_id"],"properties":{"column_id":{"description":"Target column to move the issue into","type":"integer","format":"int64"},"sorting":{"description":"Position within the column, ascending. Omit to append. Negative values sort above the rest, equal values are ordered newest first.","type":"integer","format":"int64"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","id","issue_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_org_publicize_member","domain":"org","operation_id":"orgPublicizeMember","method":"PUT","path":"/orgs/{org}/public_members/{username}","summary":"Publicize a user's membership","description":"Publicize a user's membership. PUT /orgs/{org}/public_members/{username}.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"username of the user whose membership is to be publicized","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"username":{"type":"string","description":"username of the user whose membership is to be publicized","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","username"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_org_remove_issue_from_project_column","domain":"org","operation_id":"orgRemoveIssueFromProjectColumn","method":"DELETE","path":"/orgs/{org}/projects/{id}/columns/{column_id}/issues/{issue_id}","summary":"Remove an issue from a project column","description":"Remove an issue from a project column. DELETE /orgs/{org}/projects/{id}/columns/{column_id}/issues/{issue_id}.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"column_id","arg_name":"column_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the column"},"is_file":false},{"name":"issue_id","arg_name":"issue_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"column_id":{"type":"integer","format":"int64","description":"id of the column"},"issue_id":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","id","column_id","issue_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_org_rename","domain":"org","operation_id":"renameOrg","method":"POST","path":"/orgs/{org}/rename","summary":"Rename an organization","description":"Rename an organization. POST /orgs/{org}/rename.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"existing org name","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"RenameOrgOption options when renaming an organization","type":"object","required":["new_name"],"properties":{"new_name":{"description":"New username for this org. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"existing org name","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"RenameOrgOption options when renaming an organization","type":"object","required":["new_name"],"properties":{"new_name":{"description":"New username for this org. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_org_rename","domain":"org","operation_id":"renameOrg","method":"POST","path":"/orgs/{org}/rename","summary":"Rename an organization","description":"Rename an organization. POST /orgs/{org}/rename.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"existing org name","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"RenameOrgOption options when renaming an organization","type":"object","required":["new_name"],"properties":{"new_name":{"description":"New username for this org. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"existing org name","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"RenameOrgOption options when renaming an organization","type":"object","required":["new_name"],"properties":{"new_name":{"description":"New username for this org. This name cannot be in use yet by any other user.","type":"string","uniqueItems":true}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_org_set_default_project_column","domain":"org","operation_id":"orgSetDefaultProjectColumn","method":"POST","path":"/orgs/{org}/projects/{id}/columns/{column_id}/default","summary":"Set a project's default column","description":"Set a project's default column. The default column is where newly assigned issues land. POST /orgs/{org}/projects/{id}/columns/{column_id}/default.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"column_id","arg_name":"column_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the column"},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"column_id":{"type":"integer","format":"int64","description":"id of the column"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","id","column_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_org_unblock_user","domain":"org","operation_id":"organizationUnblockUser","method":"DELETE","path":"/orgs/{org}/blocks/{username}","summary":"Unblock a user","description":"Unblock a user. DELETE /orgs/{org}/blocks/{username}.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"username","arg_name":"username","location":"path","required":true,"schema":{"type":"string","description":"username of the user to unblock","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"username":{"type":"string","description":"username of the user to unblock","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org","username"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_org_update_avatar","domain":"org","operation_id":"orgUpdateAvatar","method":"POST","path":"/orgs/{org}/avatar","summary":"Update Avatar","description":"Update Avatar. POST /orgs/{org}/avatar.","parameters":[{"name":"org","arg_name":"org","location":"path","required":true,"schema":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"UpdateUserAvatarUserOption options when updating the user avatar","type":"object","properties":{"image":{"description":"image must be base64 encoded","type":"string"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"org":{"type":"string","description":"name of the organization","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"UpdateUserAvatarUserOption options when updating the user avatar","type":"object","properties":{"image":{"description":"image must be base64 encoded","type":"string"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["org"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
@@ -294,7 +294,7 @@
{"tool_name":"gitea_pull_list_pinned_pull_requests","domain":"pull","operation_id":"repoListPinnedPullRequests","method":"GET","path":"/repos/{owner}/{repo}/pulls/pinned","summary":"List a repo's pinned pull requests","description":"List a repo's pinned pull requests. GET /repos/{owner}/{repo}/pulls/pinned.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_pull_list_pull_requests","domain":"pull","operation_id":"repoListPullRequests","method":"GET","path":"/repos/{owner}/{repo}/pulls","summary":"List a repo's pull requests","description":"List a repo's pull requests. GET /repos/{owner}/{repo}/pulls.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"Name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"base_branch","arg_name":"base_branch","location":"query","required":false,"schema":{"type":"string","description":"Filter by target base branch of the pull request"},"is_file":false},{"name":"state","arg_name":"state","location":"query","required":false,"schema":{"type":"string","enum":["open","closed","all"],"default":"open","description":"State of pull request"},"is_file":false},{"name":"sort","arg_name":"sort","location":"query","required":false,"schema":{"type":"string","enum":["oldest","recentupdate","recentclose","leastupdate","mostcomment","leastcomment","priority"],"description":"Type of sort"},"is_file":false},{"name":"milestone","arg_name":"milestone","location":"query","required":false,"schema":{"type":"integer","format":"int64","description":"ID of the milestone"},"is_file":false},{"name":"labels","arg_name":"labels","location":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Label IDs"},"is_file":false},{"name":"poster","arg_name":"poster","location":"query","required":false,"schema":{"type":"string","description":"Filter by pull request author"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","default":1,"minimum":1,"description":"Page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"Name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"base_branch":{"type":"string","description":"Filter by target base branch of the pull request"},"state":{"type":"string","enum":["open","closed","all"],"default":"open","description":"State of pull request"},"sort":{"type":"string","enum":["oldest","recentupdate","recentclose","leastupdate","mostcomment","leastcomment","priority"],"description":"Type of sort"},"milestone":{"type":"integer","format":"int64","description":"ID of the milestone"},"labels":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Label IDs"},"poster":{"type":"string","description":"Filter by pull request author"},"page":{"type":"integer","default":1,"minimum":1,"description":"Page number of results to return (1-based)"},"limit":{"type":"integer","minimum":0,"description":"Page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_pull_list_pull_reviews","domain":"pull","operation_id":"repoListPullReviews","method":"GET","path":"/repos/{owner}/{repo}/pulls/{index}/reviews","summary":"List all reviews for a pull request","description":"List all reviews for a pull request. GET /repos/{owner}/{repo}/pulls/{index}/reviews.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"index","arg_name":"index","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"index of the pull request"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"index":{"type":"integer","format":"int64","description":"index of the pull request"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","index"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_pull_merge_pull_request","domain":"pull","operation_id":"repoMergePullRequest","method":"POST","path":"/repos/{owner}/{repo}/pulls/{index}/merge","summary":"Merge a pull request","description":"Merge a pull request. POST /repos/{owner}/{repo}/pulls/{index}/merge.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"index","arg_name":"index","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"index of the pull request to merge"},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MergePullRequestForm form for merging Pull Request","type":"object","required":["do"],"properties":{"delete_branch_after_merge":{"type":"boolean"},"do":{"type":"string","enum":["merge","rebase","rebase-merge","squash","fast-forward-only","manually-merged"]},"force_merge":{"type":"boolean"},"head_commit_id":{"type":"string"},"merge_commit_id":{"type":"string"},"merge_message_field":{"type":"string"},"merge_title_field":{"type":"string"},"merge_when_checks_succeed":{"type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"index":{"type":"integer","format":"int64","description":"index of the pull request to merge"},"body":{"description":"MergePullRequestForm form for merging Pull Request","type":"object","required":["do"],"properties":{"delete_branch_after_merge":{"type":"boolean"},"do":{"type":"string","enum":["merge","rebase","rebase-merge","squash","fast-forward-only","manually-merged"]},"force_merge":{"type":"boolean"},"head_commit_id":{"type":"string"},"merge_commit_id":{"type":"string"},"merge_message_field":{"type":"string"},"merge_title_field":{"type":"string"},"merge_when_checks_succeed":{"type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","index"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_pull_merge_pull_request","domain":"pull","operation_id":"repoMergePullRequest","method":"POST","path":"/repos/{owner}/{repo}/pulls/{index}/merge","summary":"Merge a pull request","description":"Merge a pull request. POST /repos/{owner}/{repo}/pulls/{index}/merge.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"index","arg_name":"index","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"index of the pull request to merge"},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MergePullRequestForm form for merging Pull Request","type":"object","required":["do"],"properties":{"delete_branch_after_merge":{"type":"boolean"},"do":{"type":"string","enum":["merge","rebase","rebase-merge","squash","fast-forward-only","manually-merged"]},"force_merge":{"type":"boolean"},"head_commit_id":{"type":"string"},"merge_commit_id":{"type":"string"},"merge_message_field":{"type":"string"},"merge_title_field":{"type":"string"},"merge_when_checks_succeed":{"type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"index":{"type":"integer","format":"int64","description":"index of the pull request to merge"},"body":{"description":"MergePullRequestForm form for merging Pull Request","type":"object","required":["do"],"properties":{"delete_branch_after_merge":{"type":"boolean"},"do":{"type":"string","enum":["merge","rebase","rebase-merge","squash","fast-forward-only","manually-merged"]},"force_merge":{"type":"boolean"},"head_commit_id":{"type":"string"},"merge_commit_id":{"type":"string"},"merge_message_field":{"type":"string"},"merge_title_field":{"type":"string"},"merge_when_checks_succeed":{"type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","index"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_pull_pull_request_is_merged","domain":"pull","operation_id":"repoPullRequestIsMerged","method":"GET","path":"/repos/{owner}/{repo}/pulls/{index}/merge","summary":"Check if a pull request has been merged","description":"Check if a pull request has been merged. GET /repos/{owner}/{repo}/pulls/{index}/merge.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"index","arg_name":"index","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"index of the pull request"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"index":{"type":"integer","format":"int64","description":"index of the pull request"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","index"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_pull_resolve_pull_review_comment","domain":"pull","operation_id":"repoResolvePullReviewComment","method":"POST","path":"/repos/{owner}/{repo}/pulls/comments/{id}/resolve","summary":"Resolve a pull request review comment","description":"Resolve a pull request review comment. POST /repos/{owner}/{repo}/pulls/comments/{id}/resolve.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the review comment"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the review comment"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_pull_submit_pull_review","domain":"pull","operation_id":"repoSubmitPullReview","method":"POST","path":"/repos/{owner}/{repo}/pulls/{index}/reviews/{id}","summary":"Submit a pending review to a pull request","description":"Submit a pending review to a pull request. POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"index","arg_name":"index","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"index of the pull request"},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the review"},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"SubmitPullReviewOptions are options to submit a pending pull request review","type":"object","properties":{"body":{"type":"string"},"event":{"type":"string","enum":["APPROVED","PENDING","COMMENT","REQUEST_CHANGES","REQUEST_REVIEW"]}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"index":{"type":"integer","format":"int64","description":"index of the pull request"},"id":{"type":"integer","format":"int64","description":"id of the review"},"body":{"description":"SubmitPullReviewOptions are options to submit a pending pull request review","type":"object","properties":{"body":{"type":"string"},"event":{"type":"string","enum":["APPROVED","PENDING","COMMENT","REQUEST_CHANGES","REQUEST_REVIEW"]}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","index","id","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
@@ -314,7 +314,7 @@
{"tool_name":"gitea_release_get_release_by_tag","domain":"release","operation_id":"repoGetReleaseByTag","method":"GET","path":"/repos/{owner}/{repo}/releases/tags/{tag}","summary":"Get a release by tag name","description":"Get a release by tag name. GET /repos/{owner}/{repo}/releases/tags/{tag}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"tag","arg_name":"tag","location":"path","required":true,"schema":{"type":"string","description":"tag name of the release to get","minLength":1},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"tag":{"type":"string","description":"tag name of the release to get","minLength":1},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","tag"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_release_list_release_attachments","domain":"release","operation_id":"repoListReleaseAttachments","method":"GET","path":"/repos/{owner}/{repo}/releases/{id}/assets","summary":"List release's attachments","description":"List release's attachments. GET /repos/{owner}/{repo}/releases/{id}/assets.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the release"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the release"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_release_list_releases","domain":"release","operation_id":"repoListReleases","method":"GET","path":"/repos/{owner}/{repo}/releases","summary":"List a repo's releases","description":"List a repo's releases. GET /repos/{owner}/{repo}/releases.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"draft","arg_name":"draft","location":"query","required":false,"schema":{"type":"boolean","description":"filter (exclude / include) drafts, if you don't have repo write access none will show"},"is_file":false},{"name":"pre-release","arg_name":"pre-release","location":"query","required":false,"schema":{"type":"boolean","description":"filter (exclude / include) pre-releases"},"is_file":false},{"name":"tag_filter","arg_name":"tag_filter","location":"query","required":false,"schema":{"type":"string","description":"filter releases by tag. supports \"*\" as a wildcard (for example: v1*, *beta, *rc*)."},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"draft":{"type":"boolean","description":"filter (exclude / include) drafts, if you don't have repo write access none will show"},"pre-release":{"type":"boolean","description":"filter (exclude / include) pre-releases"},"tag_filter":{"type":"string","description":"filter releases by tag. supports \"*\" as a wildcard (for example: v1*, *beta, *rc*)."},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_repo_accept_repo_transfer","domain":"repo","operation_id":"acceptRepoTransfer","method":"POST","path":"/repos/{owner}/{repo}/transfer/accept","summary":"Accept a repo transfer","description":"Accept a repo transfer. POST /repos/{owner}/{repo}/transfer/accept.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_accept_repo_transfer","domain":"repo","operation_id":"acceptRepoTransfer","method":"POST","path":"/repos/{owner}/{repo}/transfer/accept","summary":"Accept a repo transfer","description":"Accept a repo transfer. POST /repos/{owner}/{repo}/transfer/accept.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_add_collaborator","domain":"repo","operation_id":"repoAddCollaborator","method":"PUT","path":"/repos/{owner}/{repo}/collaborators/{collaborator}","summary":"Add or Update a collaborator to a repository","description":"Add or Update a collaborator to a repository. PUT /repos/{owner}/{repo}/collaborators/{collaborator}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"collaborator","arg_name":"collaborator","location":"path","required":true,"schema":{"type":"string","description":"username of the user to add or update as a collaborator","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"AddCollaboratorOption options when adding a user as a collaborator of a repository","type":"object","properties":{"permission":{"description":"Permission level to grant the collaborator","type":"string","enum":["read","write","admin"]}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"collaborator":{"type":"string","description":"username of the user to add or update as a collaborator","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"AddCollaboratorOption options when adding a user as a collaborator of a repository","type":"object","properties":{"permission":{"description":"Permission level to grant the collaborator","type":"string","enum":["read","write","admin"]}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","collaborator"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_add_issue_to_project_column","domain":"repo","operation_id":"repoAddIssueToProjectColumn","method":"POST","path":"/repos/{owner}/{repo}/projects/{id}/columns/{column_id}/issues/{issue_id}","summary":"Add an issue to a project column","description":"Add an issue to a project column. Assigns the issue to the project if it is not a member yet, then places it in the column. POST /repos/{owner}/{repo}/projects/{id}/columns/{column_id}/issues/{issue_id}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"column_id","arg_name":"column_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the column"},"is_file":false},{"name":"issue_id","arg_name":"issue_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"column_id":{"type":"integer","format":"int64","description":"id of the column"},"issue_id":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id","column_id","issue_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_add_push_mirror","domain":"repo","operation_id":"repoAddPushMirror","method":"POST","path":"/repos/{owner}/{repo}/push_mirrors","summary":"add a push mirror to the repository","description":"add a push mirror to the repository. POST /repos/{owner}/{repo}/push_mirrors.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"type":"object","properties":{"interval":{"description":"The sync interval for automatic updates","type":"string"},"remote_address":{"description":"The remote repository URL to push to","type":"string"},"remote_password":{"description":"The password for authentication with the remote repository","type":"string"},"remote_username":{"description":"The username for authentication with the remote repository","type":"string"},"sync_on_commit":{"description":"Whether to sync on every commit","type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"type":"object","properties":{"interval":{"description":"The sync interval for automatic updates","type":"string"},"remote_address":{"description":"The remote repository URL to push to","type":"string"},"remote_password":{"description":"The password for authentication with the remote repository","type":"string"},"remote_username":{"description":"The username for authentication with the remote repository","type":"string"},"sync_on_commit":{"description":"Whether to sync on every commit","type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
@@ -376,7 +376,7 @@
{"tool_name":"gitea_repo_get_contents_list","domain":"repo","operation_id":"repoGetContentsList","method":"GET","path":"/repos/{owner}/{repo}/contents","summary":"Gets the metadata of all the entries of the root dir.","description":"Gets the metadata of all the entries of the root dir. This API follows GitHub's design, and it is not easy to use. Recommend users to use our \"contents-ext\" API instead. GET /repos/{owner}/{repo}/contents.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"ref","arg_name":"ref","location":"query","required":false,"schema":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"ref":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_get_editor_config","domain":"repo","operation_id":"repoGetEditorConfig","method":"GET","path":"/repos/{owner}/{repo}/editorconfig/{filepath}","summary":"Get the EditorConfig definitions of a file in a repository","description":"Get the EditorConfig definitions of a file in a repository. GET /repos/{owner}/{repo}/editorconfig/{filepath}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"filepath","arg_name":"filepath","location":"path","required":true,"schema":{"type":"string","description":"filepath of file to get","minLength":1},"is_file":false},{"name":"ref","arg_name":"ref","location":"query","required":false,"schema":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"filepath":{"type":"string","description":"filepath of file to get","minLength":1},"ref":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","filepath"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_get_file_contents","domain":"repo","operation_id":"repoGetFileContents","method":"GET","path":"/repos/{owner}/{repo}/file-contents","summary":"Get the metadata and contents of requested files","description":"Get the metadata and contents of requested files. See the POST method. This GET method supports using JSON encoded request body in query parameter. GET /repos/{owner}/{repo}/file-contents.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"ref","arg_name":"ref","location":"query","required":false,"schema":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"is_file":false},{"name":"body","arg_name":"query_body","location":"query","required":true,"schema":{"type":"string","description":"The JSON encoded body (see the POST request): {\"files\": [\"filename1\", \"filename2\"]}"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"ref":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"query_body":{"type":"string","description":"The JSON encoded body (see the POST request): {\"files\": [\"filename1\", \"filename2\"]}"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","query_body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_get_file_contents_post","domain":"repo","operation_id":"repoGetFileContentsPost","method":"POST","path":"/repos/{owner}/{repo}/file-contents","summary":"Get the metadata and contents of requested files","description":"Get the metadata and contents of requested files. Uses automatic pagination based on default page size and max response size and returns the maximum allowed number of files. Files which could not be retrieved are null. Files which are too large ar... POST /repos/{owner}/{repo}/file-contents.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"ref","arg_name":"ref","location":"query","required":false,"schema":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"GetFilesOptions options for retrieving metadate and content of multiple files","type":"object","properties":{"files":{"description":"Files is the list of file paths to retrieve","type":"array","items":{"type":"string"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"ref":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"body":{"description":"GetFilesOptions options for retrieving metadate and content of multiple files","type":"object","properties":{"files":{"description":"Files is the list of file paths to retrieve","type":"array","items":{"type":"string"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_get_file_contents_post","domain":"repo","operation_id":"repoGetFileContentsPost","method":"POST","path":"/repos/{owner}/{repo}/file-contents","summary":"Get the metadata and contents of requested files","description":"Get the metadata and contents of requested files. Uses automatic pagination based on default page size and max response size and returns the maximum allowed number of files. Files which could not be retrieved are null. Files which are too large ar... POST /repos/{owner}/{repo}/file-contents.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"ref","arg_name":"ref","location":"query","required":false,"schema":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"GetFilesOptions options for retrieving metadate and content of multiple files","type":"object","properties":{"files":{"description":"Files is the list of file paths to retrieve","type":"array","items":{"type":"string"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"ref":{"type":"string","description":"The name of the commit/branch/tag. Default to the repository\u2019s default branch."},"body":{"description":"GetFilesOptions options for retrieving metadate and content of multiple files","type":"object","properties":{"files":{"description":"Files is the list of file paths to retrieve","type":"array","items":{"type":"string"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_get_issue_config","domain":"repo","operation_id":"repoGetIssueConfig","method":"GET","path":"/repos/{owner}/{repo}/issue_config","summary":"Returns the issue config for a repo","description":"Returns the issue config for a repo. GET /repos/{owner}/{repo}/issue_config.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_get_issue_templates","domain":"repo","operation_id":"repoGetIssueTemplates","method":"GET","path":"/repos/{owner}/{repo}/issue_templates","summary":"Get available issue templates for a repository","description":"Get available issue templates for a repository. GET /repos/{owner}/{repo}/issue_templates.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_get_key","domain":"repo","operation_id":"repoGetKey","method":"GET","path":"/repos/{owner}/{repo}/keys/{id}","summary":"Get a repository's key by id","description":"Get a repository's key by id. GET /repos/{owner}/{repo}/keys/{id}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the key to get"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the key to get"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
@@ -415,15 +415,15 @@
{"tool_name":"gitea_repo_list_teams","domain":"repo","operation_id":"repoListTeams","method":"GET","path":"/repos/{owner}/{repo}/teams","summary":"List a repository's teams","description":"List a repository's teams. GET /repos/{owner}/{repo}/teams.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_list_topics","domain":"repo","operation_id":"repoListTopics","method":"GET","path":"/repos/{owner}/{repo}/topics","summary":"Get list of topics that a repository has","description":"Get list of topics that a repository has. GET /repos/{owner}/{repo}/topics.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_repo_list_user_tracked_times","domain":"repo","operation_id":"userTrackedTimes","method":"GET","path":"/repos/{owner}/{repo}/times/{user}","summary":"List a user's tracked times in a repo","description":"List a user's tracked times in a repo. Deprecated. GET /repos/{owner}/{repo}/times/{user}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"user","arg_name":"user","location":"path","required":true,"schema":{"type":"string","description":"username of the user whose tracked times are to be listed","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"user":{"type":"string","description":"username of the user whose tracked times are to be listed","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","user"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_merge_upstream","domain":"repo","operation_id":"repoMergeUpstream","method":"POST","path":"/repos/{owner}/{repo}/merge-upstream","summary":"Merge a branch from upstream","description":"Merge a branch from upstream. POST /repos/{owner}/{repo}/merge-upstream.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"type":"object","properties":{"branch":{"type":"string"},"ff_only":{"type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"type":"object","properties":{"branch":{"type":"string"},"ff_only":{"type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_merge_upstream","domain":"repo","operation_id":"repoMergeUpstream","method":"POST","path":"/repos/{owner}/{repo}/merge-upstream","summary":"Merge a branch from upstream","description":"Merge a branch from upstream. POST /repos/{owner}/{repo}/merge-upstream.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"type":"object","properties":{"branch":{"type":"string"},"ff_only":{"type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"type":"object","properties":{"branch":{"type":"string"},"ff_only":{"type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_migrate","domain":"repo","operation_id":"repoMigrate","method":"POST","path":"/repos/migrate","summary":"Migrate a remote git repository","description":"Migrate a remote git repository. POST /repos/migrate.","parameters":[{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MigrateRepoOptions options for migrating repository's this is used to interact with api v1","type":"object","required":["clone_addr","repo_name"],"properties":{"auth_password":{"type":"string"},"auth_token":{"type":"string"},"auth_username":{"type":"string"},"aws_access_key_id":{"type":"string"},"aws_secret_access_key":{"type":"string"},"clone_addr":{"type":"string"},"description":{"type":"string"},"issues":{"type":"boolean"},"labels":{"type":"boolean"},"lfs":{"type":"boolean"},"lfs_endpoint":{"type":"string"},"milestones":{"type":"boolean"},"mirror":{"type":"boolean"},"mirror_interval":{"type":"string"},"private":{"type":"boolean"},"pull_requests":{"type":"boolean"},"releases":{"type":"boolean"},"repo_name":{"type":"string"},"repo_owner":{"description":"the organization's name or individual user's name who will own the migrated repository","type":"string"},"service":{"type":"string","enum":["git","github","gitea","gitlab","gogs","onedev","gitbucket","codebase","codecommit"]},"uid":{"description":"deprecated (only for backwards compatibility, use repo_owner instead)","type":"integer","format":"int64"},"wiki":{"type":"boolean"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"body":{"description":"MigrateRepoOptions options for migrating repository's this is used to interact with api v1","type":"object","required":["clone_addr","repo_name"],"properties":{"auth_password":{"type":"string"},"auth_token":{"type":"string"},"auth_username":{"type":"string"},"aws_access_key_id":{"type":"string"},"aws_secret_access_key":{"type":"string"},"clone_addr":{"type":"string"},"description":{"type":"string"},"issues":{"type":"boolean"},"labels":{"type":"boolean"},"lfs":{"type":"boolean"},"lfs_endpoint":{"type":"string"},"milestones":{"type":"boolean"},"mirror":{"type":"boolean"},"mirror_interval":{"type":"string"},"private":{"type":"boolean"},"pull_requests":{"type":"boolean"},"releases":{"type":"boolean"},"repo_name":{"type":"string"},"repo_owner":{"description":"the organization's name or individual user's name who will own the migrated repository","type":"string"},"service":{"type":"string","enum":["git","github","gitea","gitlab","gogs","onedev","gitbucket","codebase","codecommit"]},"uid":{"description":"deprecated (only for backwards compatibility, use repo_owner instead)","type":"integer","format":"int64"},"wiki":{"type":"boolean"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":[],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_mirror_sync","domain":"repo","operation_id":"repoMirrorSync","method":"POST","path":"/repos/{owner}/{repo}/mirror-sync","summary":"Sync a mirrored repository","description":"Sync a mirrored repository. POST /repos/{owner}/{repo}/mirror-sync.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_mirror_sync","domain":"repo","operation_id":"repoMirrorSync","method":"POST","path":"/repos/{owner}/{repo}/mirror-sync","summary":"Sync a mirrored repository","description":"Sync a mirrored repository. POST /repos/{owner}/{repo}/mirror-sync.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_move_project_columns","domain":"repo","operation_id":"repoMoveProjectColumns","method":"POST","path":"/repos/{owner}/{repo}/projects/{id}/columns/move","summary":"Reorder a project's columns","description":"Reorder a project's columns. Reorders every column of the project at once. The body lists all column IDs in their new order. POST /repos/{owner}/{repo}/projects/{id}/columns/move.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MoveProjectColumnsOption represents options for reordering a project's columns","type":"object","required":["column_ids"],"properties":{"column_ids":{"description":"Every column ID of the project, in the desired left-to-right order","type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"body":{"description":"MoveProjectColumnsOption represents options for reordering a project's columns","type":"object","required":["column_ids"],"properties":{"column_ids":{"description":"Every column ID of the project, in the desired left-to-right order","type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_move_project_issue","domain":"repo","operation_id":"repoMoveProjectIssue","method":"POST","path":"/repos/{owner}/{repo}/projects/{id}/issues/{issue_id}/move","summary":"Move an issue between a project's columns","description":"Move an issue between a project's columns. POST /repos/{owner}/{repo}/projects/{id}/issues/{issue_id}/move.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"issue_id","arg_name":"issue_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"MoveProjectIssueOption represents options for moving an issue between columns","type":"object","required":["column_id"],"properties":{"column_id":{"description":"Target column to move the issue into","type":"integer","format":"int64"},"sorting":{"description":"Position within the column, ascending. Omit to append. Negative values sort above the rest, equal values are ordered newest first.","type":"integer","format":"int64"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"issue_id":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"body":{"description":"MoveProjectIssueOption represents options for moving an issue between columns","type":"object","required":["column_id"],"properties":{"column_id":{"description":"Target column to move the issue into","type":"integer","format":"int64"},"sorting":{"description":"Position within the column, ascending. Omit to append. Negative values sort above the rest, equal values are ordered newest first.","type":"integer","format":"int64"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id","issue_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_new_pin_allowed","domain":"repo","operation_id":"repoNewPinAllowed","method":"GET","path":"/repos/{owner}/{repo}/new_pin_allowed","summary":"Returns if new Issue Pins are allowed","description":"Returns if new Issue Pins are allowed. GET /repos/{owner}/{repo}/new_pin_allowed.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_push_mirror_sync","domain":"repo","operation_id":"repoPushMirrorSync","method":"POST","path":"/repos/{owner}/{repo}/push_mirrors-sync","summary":"Sync all push mirrored repository","description":"Sync all push mirrored repository. POST /repos/{owner}/{repo}/push_mirrors-sync.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_push_mirror_sync","domain":"repo","operation_id":"repoPushMirrorSync","method":"POST","path":"/repos/{owner}/{repo}/push_mirrors-sync","summary":"Sync all push mirrored repository","description":"Sync all push mirrored repository. POST /repos/{owner}/{repo}/push_mirrors-sync.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to sync","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_put_subscription","domain":"repo","operation_id":"userCurrentPutSubscription","method":"PUT","path":"/repos/{owner}/{repo}/subscription","summary":"Watch a repo","description":"Watch a repo. PUT /repos/{owner}/{repo}/subscription.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_reject_repo_transfer","domain":"repo","operation_id":"rejectRepoTransfer","method":"POST","path":"/repos/{owner}/{repo}/transfer/reject","summary":"Reject a repo transfer","description":"Reject a repo transfer. POST /repos/{owner}/{repo}/transfer/reject.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_reject_repo_transfer","domain":"repo","operation_id":"rejectRepoTransfer","method":"POST","path":"/repos/{owner}/{repo}/transfer/reject","summary":"Reject a repo transfer","description":"Reject a repo transfer. POST /repos/{owner}/{repo}/transfer/reject.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_remove_issue_from_project_column","domain":"repo","operation_id":"repoRemoveIssueFromProjectColumn","method":"DELETE","path":"/repos/{owner}/{repo}/projects/{id}/columns/{column_id}/issues/{issue_id}","summary":"Remove an issue from a project column","description":"Remove an issue from a project column. DELETE /repos/{owner}/{repo}/projects/{id}/columns/{column_id}/issues/{issue_id}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"id","arg_name":"id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the project"},"is_file":false},{"name":"column_id","arg_name":"column_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"id of the column"},"is_file":false},{"name":"issue_id","arg_name":"issue_id","location":"path","required":true,"schema":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"id":{"type":"integer","format":"int64","description":"id of the project"},"column_id":{"type":"integer","format":"int64","description":"id of the column"},"issue_id":{"type":"integer","format":"int64","description":"global id of the issue, not the repository-local index"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","id","column_id","issue_id"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_rename_branch","domain":"repo","operation_id":"repoRenameBranch","method":"PATCH","path":"/repos/{owner}/{repo}/branches/{branch}","summary":"Rename a branch","description":"Rename a branch. PATCH /repos/{owner}/{repo}/branches/{branch}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"branch","arg_name":"branch","location":"path","required":true,"schema":{"type":"string","description":"name of the branch","minLength":1},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"RenameBranchRepoOption options when renaming a branch in a repository","type":"object","required":["name"],"properties":{"name":{"description":"New branch name","type":"string","uniqueItems":true}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"branch":{"type":"string","description":"name of the branch","minLength":1},"body":{"description":"RenameBranchRepoOption options when renaming a branch in a repository","type":"object","required":["name"],"properties":{"name":{"description":"New branch name","type":"string","uniqueItems":true}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","branch"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_search","domain":"repo","operation_id":"repoSearch","method":"GET","path":"/repos/search","summary":"Search for repositories","description":"Search for repositories. GET /repos/search.","parameters":[{"name":"q","arg_name":"q","location":"query","required":false,"schema":{"type":"string","description":"keyword"},"is_file":false},{"name":"topic","arg_name":"topic","location":"query","required":false,"schema":{"type":"boolean","description":"Limit search to repositories with keyword as topic"},"is_file":false},{"name":"includeDesc","arg_name":"includeDesc","location":"query","required":false,"schema":{"type":"boolean","description":"include search of keyword within repository description"},"is_file":false},{"name":"uid","arg_name":"uid","location":"query","required":false,"schema":{"type":"integer","format":"int64","description":"search only for repos that the user with the given id owns or contributes to"},"is_file":false},{"name":"priority_owner_id","arg_name":"priority_owner_id","location":"query","required":false,"schema":{"type":"integer","format":"int64","description":"repo owner to prioritize in the results"},"is_file":false},{"name":"team_id","arg_name":"team_id","location":"query","required":false,"schema":{"type":"integer","format":"int64","description":"search only for repos that belong to the given team id"},"is_file":false},{"name":"starredBy","arg_name":"starredBy","location":"query","required":false,"schema":{"type":"integer","format":"int64","description":"search only for repos that the user with the given id has starred"},"is_file":false},{"name":"private","arg_name":"private","location":"query","required":false,"schema":{"type":"boolean","description":"include private repositories this user has access to (defaults to true)"},"is_file":false},{"name":"is_private","arg_name":"is_private","location":"query","required":false,"schema":{"type":"boolean","description":"show only pubic, private or all repositories (defaults to all)"},"is_file":false},{"name":"template","arg_name":"template","location":"query","required":false,"schema":{"type":"boolean","description":"include template repositories this user has access to (defaults to true)"},"is_file":false},{"name":"archived","arg_name":"archived","location":"query","required":false,"schema":{"type":"boolean","description":"show only archived, non-archived or all repositories (defaults to all)"},"is_file":false},{"name":"mode","arg_name":"mode","location":"query","required":false,"schema":{"type":"string","description":"type of repository to search for. Supported values are \"fork\", \"source\", \"mirror\" and \"collaborative\""},"is_file":false},{"name":"exclusive","arg_name":"exclusive","location":"query","required":false,"schema":{"type":"boolean","description":"if `uid` is given, search only for repos that the user owns"},"is_file":false},{"name":"sort","arg_name":"sort","location":"query","required":false,"schema":{"type":"string","description":"sort repos by attribute. Supported values are \"alpha\", \"created\", \"updated\", \"size\", \"git_size\", \"lfs_size\", \"stars\", \"forks\" and \"id\". Default is \"alpha\""},"is_file":false},{"name":"order","arg_name":"order","location":"query","required":false,"schema":{"type":"string","description":"sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified."},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"q":{"type":"string","description":"keyword"},"topic":{"type":"boolean","description":"Limit search to repositories with keyword as topic"},"includeDesc":{"type":"boolean","description":"include search of keyword within repository description"},"uid":{"type":"integer","format":"int64","description":"search only for repos that the user with the given id owns or contributes to"},"priority_owner_id":{"type":"integer","format":"int64","description":"repo owner to prioritize in the results"},"team_id":{"type":"integer","format":"int64","description":"search only for repos that belong to the given team id"},"starredBy":{"type":"integer","format":"int64","description":"search only for repos that the user with the given id has starred"},"private":{"type":"boolean","description":"include private repositories this user has access to (defaults to true)"},"is_private":{"type":"boolean","description":"show only pubic, private or all repositories (defaults to all)"},"template":{"type":"boolean","description":"include template repositories this user has access to (defaults to true)"},"archived":{"type":"boolean","description":"show only archived, non-archived or all repositories (defaultLine truncated
@@ -431,7 +431,7 @@
{"tool_name":"gitea_repo_signing_key","domain":"repo","operation_id":"repoSigningKey","method":"GET","path":"/repos/{owner}/{repo}/signing-key.gpg","summary":"Get signing-key.gpg for given repository","description":"Get signing-key.gpg for given repository. GET /repos/{owner}/{repo}/signing-key.gpg.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["text/plain"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_signing_key_ssh","domain":"repo","operation_id":"repoSigningKeySSH","method":"GET","path":"/repos/{owner}/{repo}/signing-key.pub","summary":"Get signing-key.pub for given repository","description":"Get signing-key.pub for given repository. GET /repos/{owner}/{repo}/signing-key.pub.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["text/plain"],"read_only":true,"destructive":false,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_tracked_times","domain":"repo","operation_id":"repoTrackedTimes","method":"GET","path":"/repos/{owner}/{repo}/times","summary":"List a repo's tracked times","description":"List a repo's tracked times. GET /repos/{owner}/{repo}/times.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"user","arg_name":"user","location":"query","required":false,"schema":{"type":"string","description":"optional filter by user (available for issue managers)"},"is_file":false},{"name":"since","arg_name":"since","location":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Only show times updated after the given time. This is a timestamp in RFC 3339 format"},"is_file":false},{"name":"before","arg_name":"before","location":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Only show times updated before the given time. This is a timestamp in RFC 3339 format"},"is_file":false},{"name":"page","arg_name":"page","location":"query","required":false,"schema":{"type":"integer","description":"page number of results to return (1-based)"},"is_file":false},{"name":"limit","arg_name":"limit","location":"query","required":false,"schema":{"type":"integer","description":"page size of results"},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"user":{"type":"string","description":"optional filter by user (available for issue managers)"},"since":{"type":"string","format":"date-time","description":"Only show times updated after the given time. This is a timestamp in RFC 3339 format"},"before":{"type":"string","format":"date-time","description":"Only show times updated before the given time. This is a timestamp in RFC 3339 format"},"page":{"type":"integer","description":"page number of results to return (1-based)"},"limit":{"type":"integer","description":"page size of results"},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":true,"destructive":false,"idempotent":true,"paginated":true},
{"tool_name":"gitea_repo_transfer","domain":"repo","operation_id":"repoTransfer","method":"POST","path":"/repos/{owner}/{repo}/transfer","summary":"Transfer a repo ownership","description":"Transfer a repo ownership. POST /repos/{owner}/{repo}/transfer.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"TransferRepoOption options when transfer a repository's ownership","type":"object","required":["new_owner"],"properties":{"new_owner":{"type":"string"},"team_ids":{"description":"ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.","type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"TransferRepoOption options when transfer a repository's ownership","type":"object","required":["new_owner"],"properties":{"new_owner":{"type":"string"},"team_ids":{"description":"ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.","type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_transfer","domain":"repo","operation_id":"repoTransfer","method":"POST","path":"/repos/{owner}/{repo}/transfer","summary":"Transfer a repo ownership","description":"Transfer a repo ownership. POST /repos/{owner}/{repo}/transfer.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":true,"schema":{"description":"TransferRepoOption options when transfer a repository's ownership","type":"object","required":["new_owner"],"properties":{"new_owner":{"type":"string"},"team_ids":{"description":"ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.","type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo to transfer","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"TransferRepoOption options when transfer a repository's ownership","type":"object","required":["new_owner"],"properties":{"new_owner":{"type":"string"},"team_ids":{"description":"ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.","type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","body"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_update_avatar","domain":"repo","operation_id":"repoUpdateAvatar","method":"POST","path":"/repos/{owner}/{repo}/avatar","summary":"Update avatar","description":"Update avatar. POST /repos/{owner}/{repo}/avatar.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"UpdateRepoAvatarUserOption options when updating the repo avatar","type":"object","properties":{"image":{"description":"image must be base64 encoded","type":"string"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"UpdateRepoAvatarUserOption options when updating the repo avatar","type":"object","properties":{"image":{"description":"image must be base64 encoded","type":"string"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
{"tool_name":"gitea_repo_update_branch","domain":"repo","operation_id":"repoUpdateBranch","method":"PUT","path":"/repos/{owner}/{repo}/branches/{branch}","summary":"Update a branch reference to a new commit","description":"Update a branch reference to a new commit. PUT /repos/{owner}/{repo}/branches/{branch}.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"branch","arg_name":"branch","location":"path","required":true,"schema":{"type":"string","description":"name of the branch","minLength":1},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"UpdateBranchRepoOption options when updating a branch reference in a repository","type":"object","required":["new_commit_id"],"properties":{"force":{"description":"Force update even if the change is not a fast-forward","type":"boolean"},"new_commit_id":{"description":"New commit SHA (or any ref) the branch should point to","type":"string"},"old_commit_id":{"description":"Expected old commit SHA of the branch; if provided it must match the current tip","type":"string"}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"branch":{"type":"string","description":"name of the branch","minLength":1},"body":{"description":"UpdateBranchRepoOption options when updating a branch reference in a repository","type":"object","required":["new_commit_id"],"properties":{"force":{"description":"Force update even if the change is not a fast-forward","type":"boolean"},"new_commit_id":{"description":"New commit SHA (or any ref) the branch should point to","type":"string"},"old_commit_id":{"description":"Expected old commit SHA of the branch; if provided it must match the current tip","type":"string"}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo","branch"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":true,"idempotent":true,"paginated":false},
{"tool_name":"gitea_repo_update_branch_protection_priorities","domain":"repo","operation_id":"repoUpdateBranchProtectionPriories","method":"POST","path":"/repos/{owner}/{repo}/branch_protections/priority","summary":"Update the priorities of branch protections for a repository.","description":"Update the priorities of branch protections for a repository. POST /repos/{owner}/{repo}/branch_protections/priority.","parameters":[{"name":"owner","arg_name":"owner","location":"path","required":true,"schema":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"repo","arg_name":"repo","location":"path","required":true,"schema":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"is_file":false},{"name":"body","arg_name":"body","location":"body","required":false,"schema":{"description":"UpdateBranchProtectionPriories a list to update the branch protection rule priorities","type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"is_file":false}],"input_schema":{"type":"object","properties":{"owner":{"type":"string","description":"owner of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"repo":{"type":"string","description":"name of the repo","minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","maxLength":255},"body":{"description":"UpdateBranchProtectionPriories a list to update the branch protection rule priorities","type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int64"}}},"additionalProperties":false},"sudo":{"type":"string","pattern":"^[A-Za-z0-9_.-]+$","maxLength":255,"description":"Admin only: perform the request as this user (Gitea Sudo header)."}},"required":["owner","repo"],"additionalProperties":false},"consumes":["application/json"],"produces":["application/json"],"read_only":false,"destructive":false,"idempotent":false,"paginated":false},
+53 -3
View File
@@ -9,7 +9,13 @@ import pytest
from jsonschema import Draft202012Validator
from aegis_gitea_mcp.catalog import Operation, load_catalog
from aegis_gitea_mcp.catalog.build import build_catalog, render_catalog, spec_sha256
from aegis_gitea_mcp.catalog.build import (
DESTRUCTIVE_POST_OPERATIONS,
READ_ONLY_POST_OPERATIONS,
build_catalog,
render_catalog,
spec_sha256,
)
from aegis_gitea_mcp.catalog.schema import (
MAX_DESCRIPTION_CHARS,
SUDO_SCHEMA,
@@ -536,8 +542,12 @@ def test_real_body_and_file_operations() -> None:
def test_real_annotations() -> None:
catalog = load_catalog()
for operation in catalog.operations:
assert operation.read_only == (operation.method == "GET")
assert operation.destructive == (operation.method in {"DELETE", "PUT", "PATCH"})
post_read_only = operation.operation_id in READ_ONLY_POST_OPERATIONS
post_destructive = operation.operation_id in DESTRUCTIVE_POST_OPERATIONS
assert operation.read_only == (operation.method == "GET" or post_read_only)
assert operation.destructive == (
operation.method in {"DELETE", "PUT", "PATCH"} or post_destructive
)
assert not (operation.read_only and operation.destructive)
if operation.paginated:
names = {p.name for p in operation.parameters}
@@ -574,3 +584,43 @@ def test_unknown_parameter_location_is_rejected() -> None:
)
with pytest.raises(ValueError, match="unknown parameter location"):
build_catalog(json.dumps(spec).encode())
def test_post_annotation_overrides_in_the_real_catalog() -> None:
by_id = {op.operation_id: op for op in load_catalog().operations}
for operation_id in ("renderMarkdown", "renderMarkdownRaw", "renderMarkup"):
operation = by_id[operation_id]
assert operation.method == "POST"
assert operation.read_only and not operation.destructive and operation.idempotent
for operation_id in (
"repoMergePullRequest",
"repoTransfer",
"acceptRepoTransfer",
"rejectRepoTransfer",
"adminRenameUser",
"renameOrg",
"adminCronRun",
"repoMirrorSync",
"adminAdoptRepository",
"adminDeleteUnadoptedRepository",
"repoRenameBranch",
):
operation = by_id[operation_id]
assert operation.destructive and not operation.read_only, operation_id
# Ordinary creating POSTs stay non-destructive.
for operation_id in ("issueCreateIssue", "repoCreatePullRequest", "repoCreateBranch"):
assert not by_id[operation_id].destructive
assert not by_id[operation_id].read_only
def test_every_annotation_override_names_a_real_post_operation() -> None:
posts = {op.operation_id for op in load_catalog().operations if op.method == "POST"}
assert READ_ONLY_POST_OPERATIONS <= posts
assert DESTRUCTIVE_POST_OPERATIONS <= posts
assert not READ_ONLY_POST_OPERATIONS & DESTRUCTIVE_POST_OPERATIONS
def test_override_applies_to_a_mini_spec() -> None:
spec = mini_spec({"/markdown": {"post": {"operationId": "renderMarkdown"}}})
operation = build_ops(spec)["renderMarkdown"]
assert operation.read_only and not operation.destructive and operation.idempotent