diff --git a/data/schemas/PENPOT_DEPLOYMENT_NOTES.md b/data/schemas/PENPOT_DEPLOYMENT_NOTES.md new file mode 100644 index 0000000..dd8cc8f --- /dev/null +++ b/data/schemas/PENPOT_DEPLOYMENT_NOTES.md @@ -0,0 +1,49 @@ +# Penpot MCP — notas de este deployment + +Investigado a fondo en la Fase 1 (código fuente oficial + docs), para saber exactamente qué tools/parámetros existen realmente en este deployment y cuáles hay que excluir del dataset de entrenamiento. + +## Identificación del proyecto + +- Repo oficial: `github.com/penpot/penpot/tree/develop/mcp` (antes `penpot/penpot-mcp`, ahora archivado y fusionado al monorepo principal). +- Paquete npm: `@penpot/mcp` (se ejecuta vía `npx -y @penpot/mcp@latest`). +- Monorepo con 4 paquetes: `packages/common` (tipos compartidos), `packages/server` (servidor MCP), `packages/plugin` (plugin de Penpot vía WebSocket), `types-generator`. +- Confirmado con 100% de coincidencia contra el código fuente (`mcp/packages/server/src/tools/*.ts`) comparando las descripciones exactas de las 4 tools (incluida la frase gramaticalmente atípica "You have access two main objects" en `execute_code`). + +## Tools registradas en el código, por condición de gating + +- **Siempre registradas** (presentes en nuestro deployment): `execute_code`, `high_level_overview`, `penpot_api_info`, `export_shape`. +- **`import_image`** — registrada solo si `mcpServer.isFileSystemAccessEnabled()` es `true`. **Ausente en nuestro deployment.** +- **Solo en modo devenv interno de Penpot** (`PENPOT_MCP_DEVENV=true`, para el equipo core, no para diseñadores): `CljsReplTool`, `ImportPenpotFileTool`, `CljsCompilerOutputTool`, `CljCheckParentheses`, `ReadTaigaIssueTool` (Clojure REPL y Taiga — no relevante para el dataset de diseño). + +## Lógica exacta del gating (`PenpotMcpServer.ts`) + +``` +isRemoteMode() = isMultiUserMode() || (PENPOT_MCP_REMOTE_MODE === "true") +isFileSystemAccessEnabled() = !isRemoteMode() +``` + +`import_image` solo se registra si `isFileSystemAccessEnabled()` es verdadero. + +## `export_shape` y `filePath` + +El schema oficial SÍ define un parámetro opcional `filePath` (para guardar el export a disco), pero el constructor de `ExportShapeTool` hace `delete schema.filePath` cuando `!isFileSystemAccessEnabled()`. La descripción también agrega condicionalmente la frase "Alternatively, you can save it to a file." solo cuando el filesystem está habilitado. + +**En nuestro deployment, `export_shape` NO tiene `filePath`** (ver `penpot.json`) — señal inequívoca de que este deployment corre en modo remoto/multi-usuario con acceso a filesystem deshabilitado, la misma condición que oculta `import_image`. + +## Estructura de la Penpot Plugin API (accesible desde `execute_code`) + +El objeto global `penpot` (tipo `Penpot`, ver docs oficiales en https://help.penpot.app/plugins/ y https://doc.plugins.penpot.app/, tipos vía npm `@penpot/plugin-types`) expone: + +- `ui`, `utils` (`ContextUtils`), `root`/`currentFile`/`currentPage`/`viewport`, `library`, `fonts`, `currentUser`/`activeUsers`, `theme`, `localStorage`, `selection`. +- Métodos de creación: `createRectangle`, `createBoard`, etc. +- Árbol de diseño: `Page` → `Board`/`Group` → shapes de bajo nivel (`Rectangle`, `Path`, `Text`, `Ellipse`, `Image`, `Boolean`, `SvgRaw`), todos derivando de `ShapeBase`/`Shape`. + +**Importante**: `penpotUtils` (visto en la descripción de `execute_code`) **no es API oficial de Penpot** — es una capa de conveniencia propia del plugin MCP (`mcp/packages/plugin/src/PenpotUtils.ts`), con helpers como `findShapeById`, `exportImage`, `importImage`, `setParentXY`. No confundir con la API oficial `penpot`. + +## Implicación para el dataset de entrenamiento (Fase 2) + +El bucket de Penpot debe reflejar que, en deployments remotos/multi-usuario (como este), `import_image` y `export_shape(filePath)` no existen. El modelo debe aprender a: + +- Nunca intentar llamar `import_image` (no existe como tool). +- Nunca pasar `filePath` a `export_shape` (el parámetro no está en el schema; si el modelo lo inventa, la llamada fallará con un error de parámetro no reconocido). +- Devolver imágenes por respuesta directa (base64/PNG vía `export_shape`) en vez de asumir escritura a disco. diff --git a/data/schemas/atlassian.json b/data/schemas/atlassian.json new file mode 100644 index 0000000..7869931 --- /dev/null +++ b/data/schemas/atlassian.json @@ -0,0 +1,686 @@ +[ + { + "name": "addCommentToJiraIssue", + "description": "Add or update a comment on a Jira issue", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "commentBody": { "type": "string", "description": "Comment body" }, + "commentId": { "type": "string", "maxLength": 18, "description": "ID of an existing comment to update. If omitted, a new comment is added." }, + "commentVisibility": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { "type": "string", "enum": ["group", "role"] }, + "value": { "type": "string" } + }, + "required": ["type", "value"] + }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"], "description": "Content format for body content. 'markdown' for simplified plain text. 'adf' (Atlassian Document Format, JSON) for full programmatic fidelity." }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" }, + "responseContentFormat": { "type": "string", "enum": ["markdown", "adf"] } + }, + "required": ["cloudId", "issueIdOrKey", "commentBody"] + } + }, + { + "name": "addWorklogToJiraIssue", + "description": "Add or update a worklog on a Jira issue. When worklogId is provided, updates that worklog;", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "commentBody": { "type": "string", "description": "Comment body" }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" }, + "started": { "type": "string", "description": "When the work was started (ISO 8601 date-time). If omitted, booked at current date/time." }, + "timeSpent": { "type": "string", "description": "Time spent (e.g. 2h, 30m, 4d). Required for new worklogs; use to set or change time when updating." }, + "visibility": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { "type": "string", "enum": ["group", "role"] }, + "value": { "type": "string" } + }, + "required": ["type", "value"] + }, + "worklogId": { "type": "string", "description": "ID of an existing worklog to update. If omitted, a new worklog is created." } + }, + "required": ["cloudId", "issueIdOrKey", "timeSpent"] + } + }, + { + "name": "atlassianUserInfo", + "description": "Get current user info", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "createCompassComponent", + "description": "Create a new Compass component", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "description": { "type": "string", "description": "Description of the component" }, + "labels": { "type": "array", "items": { "type": "string" }, "description": "Labels for the component" }, + "name": { "type": "string", "description": "Name of the component" }, + "ownerId": { "type": "string", "description": "Owner ID of the component" }, + "typeId": { "type": "string", "description": "Type ID of the component" } + }, + "required": ["cloudId", "name", "typeId"] + } + }, + { + "name": "createCompassComponentRelationship", + "description": "Create a relationship between Compass components", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "fromComponentId": { "type": "string", "description": "The ARI of the source component" }, + "relationshipType": { "type": "string", "enum": ["DEPENDS_ON", "DEPENDENCY_OF"], "description": "Type of relationship" }, + "toComponentId": { "type": "string", "description": "The ARI of the target component" } + }, + "required": ["cloudId", "fromComponentId", "toComponentId", "relationshipType"] + } + }, + { + "name": "createCompassCustomFieldDefinition", + "description": "Create a custom field definition in Compass", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "input": { + "type": "object", + "additionalProperties": false, + "description": "Input data for creating the custom field definition", + "properties": { + "description": { "type": "string", "description": "Description of the custom field definition" }, + "isRequired": { "type": "boolean", "description": "Whether the custom field is required" }, + "name": { "type": "string", "description": "Name of the custom field definition" }, + "type": { "type": "string", "enum": ["TEXT", "NUMBER", "BOOLEAN", "USER", "DATE"], "description": "Type of the custom field" } + }, + "required": ["name", "type"] + } + }, + "required": ["cloudId", "input"] + } + }, + { + "name": "createConfluenceFooterComment", + "description": "Create a footer comment on a page or blog post", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "attachmentId": { "type": "string", "description": "Attachment ID to include" }, + "body": { "type": "string", "description": "Page/comment body. HTML supports headings/paragraphs/tables/links/code/lists plus Confluence-specific data-type nodes (panels, status, task/decision lists, expands, layouts, cards, media, dates, mentions, macros/extensions, sync blocks). Never wrap in /
/." }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["html", "markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "customContentId": { "type": "string", "description": "Custom content ID to include" }, + "pageId": { "type": "string", "description": "Page or blog post ID, or a Confluence tiny link ID" }, + "parentCommentId": { "type": "string", "description": "Parent comment ID for replies" } + }, + "required": ["cloudId", "body"] + } + }, + { + "name": "createConfluenceInlineComment", + "description": "Create an inline comment on specific text in a page or blog post. For top-level comments, provide pageId and inlineCommentProperties (text selection + match counts). For replies, provide parentCommentId only. Must first fetch the page content to find the exact text and count occurrences.", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "body": { "type": "string", "description": "Same HTML/markdown/adf body format as createConfluencePage." }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["html", "markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "inlineCommentProperties": { + "type": "object", + "additionalProperties": false, + "description": "Required for top-level inline comments (not replies).", + "properties": { + "textSelection": { "type": "string", "minLength": 1, "description": "The exact text on the page to anchor the inline comment to. Must match rendered page text exactly (case-sensitive)." }, + "textSelectionMatchCount": { "type": "integer", "minimum": 0, "description": "Total number of times textSelection appears on the page." }, + "textSelectionMatchIndex": { "type": "integer", "minimum": 0, "description": "Zero-based index of the specific occurrence to anchor the comment to. Must be < textSelectionMatchCount." } + }, + "required": ["textSelection", "textSelectionMatchCount", "textSelectionMatchIndex"] + }, + "pageId": { "type": "string", "description": "Page or blog post ID or tiny link ID. Use for top-level inline comments only; not with parentCommentId." }, + "parentCommentId": { "type": "string", "description": "Parent comment ID for replies. When provided, creates a reply; do not provide pageId/inlineCommentProperties." } + }, + "required": ["cloudId", "body"] + } + }, + { + "name": "createConfluencePage", + "description": "Create a Confluence page or blog post", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "body": { "type": "string", "description": "Page body. HTML: standard blocks (h1-h6, p, table/thead/tbody/tr/th/td, a, pre/code, ul/ol/li) plus Confluence HTML+ data-type nodes -- panels (panel-info/warning/note/success/error), status spans, task/decision lists, expand/details, layout sections, inline cards, dates, mentions, macros/extensions, sync blocks, media groups/inline media. Native macros use data-extension-type=com.atlassian.confluence.macro.core, never storage XML. Do not invent opaque IDs (data-user-id/data-id/data-collection/data-media-id/data-resource-id) -- only copy from existing content/tool output. ADF nesting rules apply (no self-nesting panels/expands/tables/blockquotes; list items/headings/captions are inline-only in some contexts). Never wrap in //." }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["html", "markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "isPrivate": { "type": "boolean", "description": "Make private" }, + "parentId": { "type": "string", "description": "Parent page ID (pages only, ignored for blogs)" }, + "spaceId": { "type": "string", "description": "Numeric space ID (a Long, e.g. '131073'). A space key (e.g. 'ENG') or personal-space key (e.g. '~712020abc') is also accepted and resolved automatically." }, + "status": { "type": "string", "enum": ["current", "draft"], "default": "current", "description": "Status (draft for unpublished)" }, + "subtype": { "type": "string", "enum": ["live"], "description": "Page subtype (pages only, ignored for blogs)" }, + "title": { "type": "string", "description": "Page or blog post title" } + }, + "required": ["cloudId", "spaceId", "body"] + } + }, + { + "name": "createIssueLink", + "description": "Create a link between two Jira issues. For directional link types (e.g. Blocks): inwardIssue = issue that blocks, outwardIssue = issue that is blocked (e.g. \"A is blocked by B\" -> inwardIssue: B, outwardIssue: A). Use getIssueLinkTypes if link type is unknown.", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "comment": { "type": "string", "description": "Optional comment on the outward issue." }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "inwardIssue": { "type": "string", "description": "Inward issue key (e.g. HSP-1)." }, + "outwardIssue": { "type": "string", "description": "Outward issue key (e.g. MKY-1)." }, + "type": { "type": "string", "description": "Link type name (e.g. Duplicate, Blocks, Clones, Relates). Use getIssueLinkTypes to list available types." } + }, + "required": ["cloudId", "inwardIssue", "outwardIssue", "type"] + } + }, + { + "name": "createJiraIssue", + "description": "Create a Jira issue. Use additional_fields to set any Jira field that does not have its own parameter (e.g. custom fields, priority, components).", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "additional_fields": { "type": "object", "description": "REQUIRED for custom fields. The ONLY parameter to set priority, labels, custom fields, components, fix versions, or any other Jira fields not listed above. Examples: {\"components\": [{\"name\": \"Backend\"}]}, {\"fixVersions\": [{\"name\": \"v1.2\"}]}, {\"priority\": {\"name\": \"High\"}}, {\"labels\": [\"bug\"]}, {\"customfield_10001\": \"value\"}." }, + "assignee_account_id": { "type": "string", "description": "Assignee ID" }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "description": { "description": "Issue description. With contentFormat 'markdown' (default), plain text or Markdown string. With 'adf', an ADF JSON string or document object with type 'doc'." }, + "issueTypeName": { "type": "string", "description": "Type (Task, Bug, Story)" }, + "parent": { "type": "string", "description": "Parent for subtasks" }, + "projectKey": { "type": "string", "description": "Project key" }, + "responseContentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "summary": { "type": "string" }, + "transition": { + "type": "object", + "additionalProperties": false, + "description": "Optional workflow transition to apply during creation. Use getTransitionsForJiraIssue to find valid IDs. Placed at top level, not inside fields.", + "properties": { "id": { "type": "string", "description": "The workflow transition ID to apply during issue creation" } }, + "required": ["id"] + } + }, + "required": ["cloudId", "projectKey", "issueTypeName", "summary"] + } + }, + { + "name": "editJiraIssue", + "description": "Update issue. After updating, returns the issue using the same default read fields as getJiraIssue (summary, description, status, issuetype, priority, labels, components, assignee, reporter, created, updated, resolution, project). Use getJiraIssue with fields [\"*all\"] or a custom list if you need more.", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "fields": { "type": "object", "description": "Fields to set, keyed by field name or customfield_* ID. To CLEAR a field, pass explicit null, e.g. { \"resolution\": null } -- fixes reopened issues blocked from transitioning because Resolution is still set." }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" }, + "responseContentFormat": { "type": "string", "enum": ["markdown", "adf"] } + }, + "required": ["cloudId", "issueIdOrKey", "fields"] + } + }, + { + "name": "fetch", + "description": "Get details of a Jira issue or Confluence page by ARI (Atlassian Resource Identifier), if the id is not an ARI, then use a different tool to fetch the content", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Not needed for this tool -- cloudId is extracted from the ARI automatically" }, + "id": { "type": "string", "description": "Atlassian Resource Identifier (ARI) from search results, e.g., 'ari:cloud:jira:cloudId:issue/10107' or 'ari:cloud:confluence:cloudId:page/123456789'" } + }, + "required": ["id"] + } + }, + { + "name": "getAccessibleAtlassianResources", + "description": "Get cloudId to make tool calls. When a link is provided (e.g. https://site.atlassian.net/*), try passing the site hostname as cloudId to other tools first; if that fails, use this tool to list accessible resources.", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "getCompassComponent", + "description": "Get a Compass component by ID", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "componentId": { "type": "string", "description": "The ID of the component to get" }, + "includeCustomFieldsInResponse": { "type": "boolean", "default": true, "description": "Whether to include custom fields in the response." }, + "includeRelatedComponentsAndDependenciesInResponse": { "type": "boolean", "default": false, "description": "Whether to include related components and dependencies (all relationship types)." }, + "includeRelatedLinksInResponse": { "type": "boolean", "default": true, "description": "Whether to include related links (repository, documentation, Jira project, on-call, etc.)." } + }, + "required": ["cloudId", "componentId"] + } + }, + { + "name": "getCompassComponents", + "description": "Get a list of Compass components", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "after": { "type": "string", "description": "The cursor to start at." }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "filters": { + "type": "object", + "additionalProperties": false, + "description": "Additional filters -- results match ALL provided filters", + "properties": { + "labels": { "type": "array", "items": { "type": "string" }, "description": "Filter by component labels (e.g., [\"frontend\", \"backend\"])." }, + "repositories": { "type": "array", "items": { "type": "string" }, "description": "Filter by repository URLs -- reverse lookup a component by repo." }, + "types": { "type": "array", "items": { "type": "string" }, "description": "Filter by component type ids (e.g., [\"SERVICE\", \"LIBRARY\", \"APPLICATION\"])." } + } + }, + "maxResults": { "type": "number", "default": 10, "maximum": 50, "description": "Max items per page." }, + "query": { "type": "string", "description": "The query to search for components." } + }, + "required": ["cloudId"] + } + }, + { + "name": "getCompassCustomFieldDefinitions", + "description": "Get a list of Compass custom field definitions", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" } + }, + "required": ["cloudId"] + } + }, + { + "name": "getConfluenceCommentChildren", + "description": "Get reply(child) comments for a comment", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "commentId": { "type": "string", "description": "Parent comment ID" }, + "commentType": { "type": "string", "enum": ["footer", "inline"] }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "cursor": { "type": "string", "description": "Pagination cursor" }, + "limit": { "type": "number", "description": "Max replies" }, + "sort": { "type": "string", "enum": ["id", "-id", "created-date", "-created-date"] } + }, + "required": ["cloudId", "commentId", "commentType"] + } + }, + { + "name": "getConfluencePage", + "description": "Get a Confluence page or blog post by ID, including body content.", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["html", "markdown", "adf"], "description": "'html' for structured HTML (round-trip safe, preserves inline comments/local IDs). 'markdown' for simplified plain text." }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "pageId": { "type": "string", "description": "Page or blog post ID, or a Confluence tiny link ID (encoded part from /wiki/x/ URLs)" } + }, + "required": ["cloudId", "pageId"] + } + }, + { + "name": "getConfluencePageDescendants", + "description": "Get child pages of specified page", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "cursor": { "type": "string", "description": "Pagination cursor" }, + "depth": { "type": "number", "description": "Max depth" }, + "limit": { "type": "number", "description": "Max descendants" }, + "pageId": { "type": "string", "description": "Page or blog post ID, or a Confluence tiny link ID" } + }, + "required": ["cloudId", "pageId"] + } + }, + { + "name": "getConfluencePageFooterComments", + "description": "Get footer comments for a page or blog post", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "cursor": { "type": "string", "description": "Pagination cursor" }, + "includeReplies": { "type": "boolean", "default": false, "description": "When true, also return reply comments" }, + "limit": { "type": "number", "description": "Max comments" }, + "pageId": { "type": "string", "description": "Page or blog post ID, or a Confluence tiny link ID" }, + "repliesPerComment": { "type": "integer", "minimum": 1, "maximum": 25 }, + "sort": { "type": "string", "enum": ["id", "-id", "created-date", "-created-date"] }, + "status": { "type": "string", "enum": ["current", "archived", "trashed", "deleted", "historical", "draft"], "default": "current" } + }, + "required": ["cloudId", "pageId"] + } + }, + { + "name": "getConfluencePageInlineComments", + "description": "Get inline comments for a page or blog post", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "cursor": { "type": "string", "description": "Pagination cursor" }, + "includeReplies": { "type": "boolean", "default": false, "description": "When true, also return reply comments" }, + "limit": { "type": "number", "description": "Max comments" }, + "pageId": { "type": "string", "description": "Page or blog post ID, or a Confluence tiny link ID" }, + "repliesPerComment": { "type": "integer", "minimum": 1, "maximum": 25 }, + "resolutionStatus": { "type": "string", "enum": ["resolved", "open", "dangling", "reopened"], "default": "open" }, + "sort": { "type": "string", "enum": ["id", "-id", "created-date", "-created-date"] }, + "status": { "type": "string", "enum": ["current", "archived", "trashed", "deleted", "historical", "draft"], "default": "current" } + }, + "required": ["cloudId", "pageId"] + } + }, + { + "name": "getConfluenceSpaces", + "description": "Get spaces", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "expand": { "description": "Properties to expand (string or array of strings)" }, + "favoritedBy": { "type": "string", "description": "User favorites" }, + "favourite": { "type": "boolean", "description": "Favorite spaces only" }, + "ids": { "description": "Space IDs (string or array of numbers)" }, + "keys": { "description": "Space keys (string or array of strings)" }, + "labels": { "description": "Space labels (string or array of strings)" }, + "limit": { "type": "number", "description": "Max results (default: 25, max: 250)" }, + "start": { "type": "number", "description": "Start index" }, + "status": { "type": "string", "enum": ["current", "archived"] }, + "type": { "type": "string", "enum": ["global", "personal"] } + }, + "required": ["cloudId"] + } + }, + { + "name": "getIssueLinkTypes", + "description": "Get available Jira issue link types (e.g. Blocks, Duplicate, Clones, Relates). For createIssueLink: inwardIssue = blocker, outwardIssue = blocked (e.g. \"A is blocked by B\" -> inwardIssue: B, outwardIssue: A).", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" } + }, + "required": ["cloudId"] + } + }, + { + "name": "getJiraIssue", + "description": "Get issue details", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "expand": { "type": "string", "description": "Additional issue details to expand (e.g. renderedFields, names)." }, + "failFast": { "type": "boolean", "description": "Whether to fail quickly when some fields cannot be loaded instead of partially returning data." }, + "fields": { "type": "array", "items": { "type": "string" }, "description": "Issue fields to return. Defaults to summary/description/status/issuetype/priority/labels/components/assignee/reporter/created/updated/resolution/project. Pass \"*all\" for every field. Include \"comment\" to get comments in fields.comment.comments." }, + "fieldsByKeys": { "type": "boolean", "description": "Whether fields in the request are referenced by field keys instead of IDs." }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" }, + "properties": { "type": "array", "items": { "type": "string" }, "description": "Issue property keys to include in the response." }, + "responseContentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "updateHistory": { "type": "boolean", "description": "Whether to update the user's recently viewed projects/history for this issue request." } + }, + "required": ["cloudId", "issueIdOrKey"] + } + }, + { + "name": "getJiraIssueRemoteIssueLinks", + "description": "Get remote links", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "globalId": { "type": "string" }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" } + }, + "required": ["cloudId", "issueIdOrKey"] + } + }, + { + "name": "getJiraIssueTypeMetaWithFields", + "description": "Get field metadata", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "issueTypeId": { "type": "string" }, + "maxResults": { "type": "number" }, + "projectIdOrKey": { "type": "string" }, + "requiredFieldsOnly": { "type": "boolean", "description": "When true (default), returns only required fields to create an issue of this type. Set false for all fields." }, + "startAt": { "type": "number" } + }, + "required": ["cloudId", "projectIdOrKey", "issueTypeId"] + } + }, + { + "name": "getJiraProjectIssueTypesMetadata", + "description": "Get issue types", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "maxResults": { "type": "number", "default": 50, "maximum": 200 }, + "projectIdOrKey": { "type": "string" }, + "startAt": { "type": "number", "default": 0 } + }, + "required": ["cloudId", "projectIdOrKey"] + } + }, + { + "name": "getPagesInConfluenceSpace", + "description": "Get pages or blog posts in a space", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "cursor": { "type": "string", "description": "Pagination cursor" }, + "limit": { "type": "number", "description": "Max results (default: 25, max: 250)" }, + "sort": { "type": "string", "enum": ["id", "-id", "created-date", "-created-date", "modified-date", "-modified-date", "title", "-title"] }, + "spaceId": { "type": "string", "description": "Space ID" }, + "status": { "type": "string", "enum": ["current", "archived", "deleted", "trashed"] }, + "title": { "type": "string", "description": "Title filter" } + }, + "required": ["cloudId", "spaceId"] + } + }, + { + "name": "getTransitionsForJiraIssue", + "description": "Get transitions", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "expand": { "type": "string" }, + "includeUnavailableTransitions": { "type": "boolean" }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" }, + "skipRemoteOnlyCondition": { "type": "boolean" }, + "sortByOpsBarAndStatus": { "type": "boolean" }, + "transitionId": { "type": "string" } + }, + "required": ["cloudId", "issueIdOrKey"] + } + }, + { + "name": "getVisibleJiraProjects", + "description": "Get projects", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "action": { "type": "string", "enum": ["view", "browse", "edit", "create"], "default": "create" }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "expandIssueTypes": { "type": "boolean", "default": true }, + "maxResults": { "type": "number", "default": 50, "maximum": 50 }, + "searchString": { "type": "string" }, + "startAt": { "type": "number", "default": 0 } + }, + "required": ["cloudId"] + } + }, + { + "name": "lookupJiraAccountId", + "description": "Lookup user IDs", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "searchString": { "type": "string" } + }, + "required": ["cloudId", "searchString"] + } + }, + { + "name": "search", + "description": "Search Jira and Confluence using Rovo Search, ALWAYS use this tool to search for Jira and Confluence content unless the word CQL or JQL is used in the context", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Not needed for this tool -- cloudId is derived from your access token automatically" }, + "query": { "type": "string", "description": "The search query to use for Rovo Search" } + }, + "required": ["query"] + } + }, + { + "name": "searchConfluenceUsingCql", + "description": "Search Confluence content (pages, blog posts, comments, attachments) using CQL (Confluence Query Language). CQL is specific to Confluence and is not interchangeable with JQL.", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "cql": { "type": "string", "description": "CQL query string. Common fields: title, text, space, type, creator, contributor, label, ancestor, parent, lastmodified, created, mention, watcher, space.title, space.key. Use space key (not name) for the space field; use space.title ~ \"name\" for name search. Content types: page, blogpost, comment, attachment. Escape inner quotes with backslash." }, + "cqlcontext": { "type": "string", "description": "CQL context for narrowing search scope (e.g., spaceKey)" }, + "cursor": { "type": "string", "description": "Pagination cursor" }, + "expand": { "type": "string", "description": "Properties to expand" }, + "limit": { "type": "number", "description": "Max results (default: 25, max: 250)" }, + "next": { "type": "boolean", "description": "Include next page link" }, + "prev": { "type": "boolean", "description": "Include previous page link" } + }, + "required": ["cloudId", "cql"] + } + }, + { + "name": "searchJiraIssuesUsingJql", + "description": "Search issues with JQL, total counts only when explicitly requested.", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "fields": { "type": "array", "items": { "type": "string" }, "description": "Issue fields to return. Defaults as in getJiraIssue. Pass \"*all\" for every field. Include \"comment\" for comments." }, + "jql": { "type": "string", "description": "JQL query" }, + "maxResults": { "type": "number", "maximum": 100, "description": "Max (50-100)" }, + "nextPageToken": { "type": "string", "description": "Page token" }, + "responseContentFormat": { "type": "string", "enum": ["markdown", "adf"] }, + "searchResultMode": { "type": "string", "enum": ["issues", "count", "all"], "description": "Default \"issues\". Never count for normal search or if nextPageToken used. Use \"count\" only when no trusted count exists and needed. Use \"all\" only if both required." } + }, + "required": ["cloudId", "jql"] + } + }, + { + "name": "transitionJiraIssue", + "description": "Transition issue status", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "fields": { "type": "object" }, + "historyMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "activityDescription": { "type": "string" }, + "activityDescriptionKey": { "type": "string" }, + "actor": { "type": "object", "additionalProperties": false, "properties": { "avatarUrl": { "type": "string" }, "displayName": { "type": "string" }, "id": { "type": "string" }, "type": { "type": "string" }, "url": { "type": "string" } } }, + "cause": { "type": "object", "additionalProperties": false, "properties": { "avatarUrl": { "type": "string" }, "displayName": { "type": "string" }, "id": { "type": "string" }, "type": { "type": "string" }, "url": { "type": "string" } } }, + "description": { "type": "string" }, + "descriptionKey": { "type": "string" }, + "emailDescription": { "type": "string" }, + "emailDescriptionKey": { "type": "string" }, + "extraData": { "type": "object", "additionalProperties": { "type": "string" } }, + "generator": { "type": "object", "additionalProperties": false, "properties": { "avatarUrl": { "type": "string" }, "displayName": { "type": "string" }, "id": { "type": "string" }, "type": { "type": "string" }, "url": { "type": "string" } } }, + "type": { "type": "string" } + } + }, + "issueIdOrKey": { "type": "string", "description": "Issue ID or key (e.g., PROJ-123 or 10000)" }, + "transition": { + "type": "object", + "additionalProperties": false, + "properties": { "id": { "type": "string" } }, + "required": ["id"] + }, + "update": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object" } } } + }, + "required": ["cloudId", "issueIdOrKey", "transition"] + } + }, + { + "name": "updateConfluencePage", + "description": "Update a Confluence page or blog post", + "parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "body": { "type": "string", "description": "Same HTML/markdown/adf body format as createConfluencePage." }, + "cloudId": { "type": "string", "description": "Cloud ID (UUID or site URL)" }, + "contentFormat": { "type": "string", "enum": ["html", "markdown", "adf"] }, + "contentType": { "type": "string", "enum": ["page", "blog"], "default": "page" }, + "includeBody": { "type": "boolean", "default": false, "description": "If true, include the page body in the response; if false, omit to reduce payload size." }, + "pageId": { "type": "string", "description": "Page or blog post ID, or a Confluence tiny link ID" }, + "parentId": { "type": "string", "description": "Parent page ID (pages only, ignored for blogs)" }, + "spaceId": { "type": "string", "description": "Space ID" }, + "status": { "type": "string", "enum": ["current", "draft"], "default": "current" }, + "title": { "type": "string", "description": "New title" }, + "versionMessage": { "type": "string", "description": "Version message" } + }, + "required": ["cloudId", "pageId", "body"] + } + } +] diff --git a/data/schemas/docmost.json b/data/schemas/docmost.json new file mode 100644 index 0000000..f0a170b --- /dev/null +++ b/data/schemas/docmost.json @@ -0,0 +1,214 @@ +[ + { + "name": "check_new_comments", + "description": "Check for new comments across pages in a space since a given timestamp. Optionally scope to a page subtree (folder). Returns only comments created after the specified time.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "spaceId": { "type": "string", "description": "Space ID to check for new comments" }, + "since": { "type": "string", "description": "ISO 8601 timestamp — only return comments created after this time (e.g. '2026-03-10T00:00:00Z')" }, + "parentPageId": { "type": "string", "description": "Optional root page ID to scope the check to a subtree (folder). Only pages under this parent will be checked." } + }, + "required": ["spaceId", "since"] + } + }, + { + "name": "create_comment", + "description": "Create a new comment on a page. Content is provided as Markdown and automatically converted to the required format.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageId": { "type": "string", "description": "ID of the page to comment on" }, + "content": { "type": "string", "description": "Comment content in Markdown format" }, + "parentCommentId": { "type": "string", "description": "Parent comment ID to create a reply (max 2 nesting levels)" }, + "selection": { "type": "string", "description": "Selected text for inline comments (max 250 chars). Required when type is 'inline'." }, + "type": { "type": "string", "enum": ["page", "inline"], "description": "Comment type: 'page' for general page comment (default), 'inline' for text selection comment" } + }, + "required": ["pageId", "content"] + } + }, + { + "name": "create_page", + "description": "Create a new page with content (automatically moves it to the correct hierarchy).", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "title": { "type": "string", "description": "Title of the page" }, + "content": { "type": "string", "description": "Markdown content" }, + "spaceId": { "type": "string" }, + "parentPageId": { "type": "string", "description": "Optional parent page ID to nest under" } + }, + "required": ["title", "content", "spaceId"] + } + }, + { + "name": "delete_comment", + "description": "Delete a comment. Only the comment creator or space admin can delete it.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "commentId": { "type": "string", "description": "ID of the comment to delete" } + }, + "required": ["commentId"] + } + }, + { + "name": "delete_page", + "description": "Delete a single page by ID.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageId": { "type": "string" } + }, + "required": ["pageId"] + } + }, + { + "name": "delete_pages", + "description": "Delete multiple pages at once. Useful for cleanup.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageIds": { "type": "array", "items": { "type": "string" } } + }, + "required": ["pageIds"] + } + }, + { + "name": "get_comment", + "description": "Get a single comment by ID with content as Markdown.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "commentId": { "type": "string", "description": "ID of the comment" } + }, + "required": ["commentId"] + } + }, + { + "name": "get_page", + "description": "Get details and content of a specific page by ID", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageId": { "type": "string" } + }, + "required": ["pageId"] + } + }, + { + "name": "get_workspace", + "description": "Get the current Docmost workspace", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "list_comments", + "description": "List all comments on a page. Returns comments with content converted to Markdown.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageId": { "type": "string", "description": "ID of the page to list comments for" } + }, + "required": ["pageId"] + } + }, + { + "name": "list_groups", + "description": "List all available groups in Docmost", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "list_pages", + "description": "List pages in a space ordered by updatedAt (descending).", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "spaceId": { "type": "string" } + } + } + }, + { + "name": "list_spaces", + "description": "List all available spaces in Docmost", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "move_page", + "description": "Move a page to a new parent (nesting) or root. Essential for organizing pages created via 'import_page'.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageId": { "type": "string" }, + "parentPageId": { "type": ["string", "null"], "description": "Target parent page ID. Pass 'null' or empty string to move to root." }, + "position": { "type": "string", "description": "Optional position string (5-12 chars). Defaults to 'a00000' (end) if omitted." } + }, + "required": ["pageId"] + } + }, + { + "name": "search", + "description": "Search for pages and content.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "query": { "type": "string", "description": "Search query" }, + "spaceId": { "type": "string", "description": "Optional space ID to filter by" } + }, + "required": ["query"] + } + }, + { + "name": "update_comment", + "description": "Update an existing comment's content. Only the comment creator can update it. Content is provided as Markdown.", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "commentId": { "type": "string", "description": "ID of the comment to update" }, + "content": { "type": "string", "description": "New comment content in Markdown format" } + }, + "required": ["commentId", "content"] + } + }, + { + "name": "update_page", + "description": "Update a page's content and/or title via realtime collaboration (preserves Page ID and history).", + "parameters": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "pageId": { "type": "string", "description": "ID of the page to update" }, + "content": { "type": "string", "description": "New Markdown content" }, + "title": { "type": "string", "description": "Optional new title" } + }, + "required": ["pageId", "content"] + }, + "notes": "Requiere SIEMPRE la fila separadora GFM (| --- | --- |) en tablas markdown, con cada fila en su propia linea -- sin eso el editor colapsa las filas en un parrafo ilegible (bug real documentado en el plan principal)." + } +] diff --git a/data/schemas/gitea.json b/data/schemas/gitea.json new file mode 100644 index 0000000..9e9ad35 --- /dev/null +++ b/data/schemas/gitea.json @@ -0,0 +1,862 @@ +[ + { + "name": "actions_config_read", + "description": "Read Actions secrets and variables.", + "parameters": { + "type": "object", + "properties": { + "method": { "type": "string", "enum": ["list_repo_secrets", "list_org_secrets", "list_repo_variables", "get_repo_variable", "list_org_variables", "get_org_variable"] }, + "name": { "type": "string", "description": "for get methods" }, + "org": { "type": "string", "description": "for org methods" }, + "owner": { "type": "string", "description": "for repo methods" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "minimum": 1, "description": "results per page" }, + "repo": { "type": "string", "description": "for repo methods" } + }, + "required": ["method"] + } + }, + { + "name": "actions_config_write", + "description": "Write Actions secrets and variables: upsert, create, update, delete.", + "parameters": { + "type": "object", + "properties": { + "data": { "type": "string", "description": "secret value (upsert)" }, + "description": { "type": "string" }, + "method": { "type": "string", "enum": ["upsert_repo_secret", "delete_repo_secret", "upsert_org_secret", "delete_org_secret", "create_repo_variable", "update_repo_variable", "delete_repo_variable", "create_org_variable", "update_org_variable", "delete_org_variable"] }, + "name": { "type": "string", "description": "secret or variable name" }, + "org": { "type": "string", "description": "for org methods" }, + "owner": { "type": "string", "description": "for repo methods" }, + "repo": { "type": "string", "description": "for repo methods" }, + "value": { "type": "string", "description": "variable value" } + }, + "required": ["method"] + } + }, + { + "name": "actions_run_read", + "description": "Read Actions workflows, runs, jobs, and logs.", + "parameters": { + "type": "object", + "properties": { + "job_id": { "type": "number", "description": "for log methods" }, + "max_bytes": { "type": "number", "default": 65536, "minimum": 1024, "description": "max log bytes" }, + "method": { "type": "string", "enum": ["list_workflows", "get_workflow", "list_runs", "get_run", "list_jobs", "list_run_jobs", "get_job_log_preview", "download_job_log"] }, + "output_path": { "type": "string", "description": "for 'download_job_log'" }, + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "minimum": 1, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" }, + "run_id": { "type": "number", "description": "for 'get_run'/'list_run_jobs'" }, + "status": { "type": "string", "description": "filter for 'list_runs'/'list_jobs'" }, + "tail_lines": { "type": "number", "default": 200, "minimum": 1, "description": "log tail lines" }, + "workflow_id": { "type": "string", "description": "ID or filename (for 'get_workflow')" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "actions_run_write", + "description": "Write Actions runs: dispatch, cancel, rerun.", + "parameters": { + "type": "object", + "properties": { + "inputs": { "type": "object", "properties": {}, "description": "for 'dispatch_workflow'" }, + "method": { "type": "string", "enum": ["dispatch_workflow", "cancel_run", "rerun_run"] }, + "owner": { "type": "string", "description": "repo owner" }, + "ref": { "type": "string", "description": "branch or tag (for 'dispatch_workflow')" }, + "repo": { "type": "string", "description": "repo name" }, + "run_id": { "type": "number", "description": "for 'cancel_run'/'rerun_run'" }, + "workflow_id": { "type": "string", "description": "ID or filename (for 'dispatch_workflow')" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "create_branch", + "description": "", + "parameters": { + "type": "object", + "properties": { + "branch": { "type": "string" }, + "old_branch": { "type": "string", "description": "source branch (default: repo default)" }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo", "branch"] + } + }, + { + "name": "create_or_update_file", + "description": "Create or update a file (provide sha to update an existing file).", + "parameters": { + "type": "object", + "properties": { + "branch_name": { "type": "string" }, + "content": { "type": "string" }, + "message": { "type": "string", "description": "commit message" }, + "new_branch_name": { "type": "string", "description": "new branch (create only)" }, + "owner": { "type": "string", "description": "repo owner" }, + "path": { "type": "string" }, + "repo": { "type": "string", "description": "repo name" }, + "sha": { "type": "string", "description": "existing file SHA (omit to create)" } + }, + "required": ["owner", "repo", "path", "content", "message", "branch_name"] + } + }, + { + "name": "create_release", + "description": "", + "parameters": { + "type": "object", + "properties": { + "body": { "type": "string" }, + "is_draft": { "type": "boolean" }, + "is_pre_release": { "type": "boolean" }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "tag_name": { "type": "string" }, + "target": { "type": "string", "description": "commitish" }, + "title": { "type": "string" } + }, + "required": ["owner", "repo", "tag_name", "target", "title"] + } + }, + { + "name": "create_repo", + "description": "", + "parameters": { + "type": "object", + "properties": { + "auto_init": { "type": "boolean" }, + "default_branch": { "type": "string" }, + "description": { "type": "string" }, + "gitignores": { "type": "string" }, + "issue_labels": { "type": "string" }, + "license": { "type": "string" }, + "name": { "type": "string" }, + "object_format_name": { "type": "string", "enum": ["sha1", "sha256"] }, + "organization": { "type": "string", "description": "defaults to personal account" }, + "private": { "type": "boolean" }, + "readme": { "type": "string" }, + "template": { "type": "boolean" }, + "trust_model": { "type": "string", "enum": ["default", "collaborator", "committer", "collaboratorcommitter"] } + }, + "required": ["name"] + } + }, + { + "name": "create_tag", + "description": "", + "parameters": { + "type": "object", + "properties": { + "message": { "type": "string", "description": "tag message" }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "tag_name": { "type": "string" }, + "target": { "type": "string", "description": "commitish" } + }, + "required": ["owner", "repo", "tag_name"] + } + }, + { + "name": "delete_branch", + "description": "", + "parameters": { + "type": "object", + "properties": { + "branch": { "type": "string" }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo", "branch"] + } + }, + { + "name": "delete_file", + "description": "", + "parameters": { + "type": "object", + "properties": { + "branch_name": { "type": "string" }, + "message": { "type": "string", "description": "commit message" }, + "owner": { "type": "string", "description": "repo owner" }, + "path": { "type": "string" }, + "repo": { "type": "string", "description": "repo name" }, + "sha": { "type": "string" } + }, + "required": ["owner", "repo", "path", "message", "branch_name", "sha"] + } + }, + { + "name": "delete_release", + "description": "", + "parameters": { + "type": "object", + "properties": { + "id": { "type": "number" }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo", "id"] + } + }, + { + "name": "delete_tag", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "tag_name": { "type": "string" } + }, + "required": ["owner", "repo", "tag_name"] + } + }, + { + "name": "fork_repo", + "description": "", + "parameters": { + "type": "object", + "properties": { + "name": { "type": "string", "description": "fork name" }, + "organization": { "type": "string", "description": "target org" }, + "repo": { "type": "string" }, + "user": { "type": "string", "description": "owner of source repo" } + }, + "required": ["user", "repo"] + } + }, + { + "name": "get_commit", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "sha": { "type": "string" } + }, + "required": ["owner", "repo", "sha"] + } + }, + { + "name": "get_dir_contents", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "path": { "type": "string" }, + "ref": { "type": "string", "description": "branch, tag, or commit SHA" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo", "ref", "path"] + } + }, + { + "name": "get_file_contents", + "description": "Get file content and metadata", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "path": { "type": "string" }, + "ref": { "type": "string", "description": "branch, tag, or commit SHA" }, + "repo": { "type": "string", "description": "repo name" }, + "withLines": { "type": "boolean", "description": "return numbered lines" } + }, + "required": ["owner", "repo", "ref", "path"] + } + }, + { + "name": "get_gitea_mcp_server_version", + "description": "", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "get_latest_release", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "get_me", + "description": "Get current user", + "parameters": { "type": "object", "properties": {} } + }, + { + "name": "get_release", + "description": "Get a release by ID", + "parameters": { + "type": "object", + "properties": { + "id": { "type": "number" }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo", "id"] + } + }, + { + "name": "get_repository_tree", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "recursive": { "type": "boolean" }, + "repo": { "type": "string", "description": "repo name" }, + "tree_sha": { "type": "string", "description": "SHA, branch, or tag" } + }, + "required": ["owner", "repo", "tree_sha"] + } + }, + { + "name": "get_tag", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "tag_name": { "type": "string" } + }, + "required": ["owner", "repo", "tag_name"] + } + }, + { + "name": "get_user_orgs", + "description": "List current user's organizations", + "parameters": { + "type": "object", + "properties": { + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" } + } + } + }, + { + "name": "issue_read", + "description": "Read issue: details, comments, or labels.", + "parameters": { + "type": "object", + "properties": { + "issue_number": { "type": "number" }, + "method": { "type": "string", "enum": ["get", "get_comments", "get_labels"] }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["method", "owner", "repo", "issue_number"] + } + }, + { + "name": "issue_write", + "description": "Write issues: create, update, manage comments and labels.", + "parameters": { + "type": "object", + "properties": { + "assignees": { "type": "array", "items": { "type": "string" } }, + "body": { "type": "string", "description": "required for 'create'/'add_comment'/'edit_comment'" }, + "commentID": { "type": "number", "description": "for 'edit_comment'" }, + "deadline": { "type": "string", "description": "ISO 8601" }, + "issue_number": { "type": "number", "description": "required except for 'create'" }, + "label_id": { "type": "number", "description": "for 'remove_label'" }, + "labels": { "type": "array", "items": { "type": "number" }, "description": "label IDs" }, + "method": { "type": "string", "enum": ["create", "update", "add_comment", "edit_comment", "add_labels", "remove_label", "replace_labels", "clear_labels"] }, + "milestone": { "type": "number" }, + "owner": { "type": "string", "description": "repo owner" }, + "ref": { "type": "string", "description": "branch to associate" }, + "remove_deadline": { "type": "boolean" }, + "repo": { "type": "string", "description": "repo name" }, + "state": { "type": "string", "enum": ["open", "closed", "all"] }, + "title": { "type": "string", "description": "required for 'create'" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "label_read", + "description": "Read repo or org labels.", + "parameters": { + "type": "object", + "properties": { + "id": { "type": "number", "description": "label ID (for 'get_repo_label')" }, + "method": { "type": "string", "enum": ["list_repo_labels", "get_repo_label", "list_org_labels"] }, + "org": { "type": "string", "description": "for org methods" }, + "owner": { "type": "string", "description": "for repo methods" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "for repo methods" } + }, + "required": ["method"] + } + }, + { + "name": "label_write", + "description": "Write labels (repo or org): create, edit, delete.", + "parameters": { + "type": "object", + "properties": { + "color": { "type": "string", "description": "hex (#RRGGBB); required for create" }, + "description": { "type": "string" }, + "exclusive": { "type": "boolean", "description": "exclusive (org only)" }, + "id": { "type": "number", "description": "for edit/delete" }, + "is_archived": { "type": "boolean", "description": "archived (repo only)" }, + "method": { "type": "string", "enum": ["create_repo_label", "edit_repo_label", "delete_repo_label", "create_org_label", "edit_org_label", "delete_org_label"] }, + "name": { "type": "string", "description": "required for create" }, + "org": { "type": "string", "description": "for org methods" }, + "owner": { "type": "string", "description": "for repo methods" }, + "repo": { "type": "string", "description": "for repo methods" } + }, + "required": ["method"] + } + }, + { + "name": "list_branches", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "list_commits", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "path": { "type": "string", "description": "only commits touching this path" }, + "per_page": { "type": "number", "default": 30, "minimum": 1, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" }, + "sha": { "type": "string", "description": "starting SHA or branch" } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "list_issues", + "description": "", + "parameters": { + "type": "object", + "properties": { + "before": { "type": "string", "description": "updated before ISO 8601" }, + "labels": { "type": "array", "items": { "type": "string" }, "description": "label name filter" }, + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" }, + "since": { "type": "string", "description": "updated after ISO 8601" }, + "state": { "type": "string", "default": "all" } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "list_my_repos", + "description": "", + "parameters": { + "type": "object", + "properties": { + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "minimum": 1, "description": "results per page" } + } + } + }, + { + "name": "list_org_repos", + "description": "", + "parameters": { + "type": "object", + "properties": { + "org": { "type": "string" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 100, "minimum": 1, "description": "results per page" } + }, + "required": ["org"] + } + }, + { + "name": "list_pull_requests", + "description": "", + "parameters": { + "type": "object", + "properties": { + "milestone": { "type": "number" }, + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" }, + "sort": { "type": "string", "default": "recentupdate", "enum": ["oldest", "recentupdate", "leastupdate", "mostcomment", "leastcomment", "priority"] }, + "state": { "type": "string", "default": "all", "enum": ["open", "closed", "all"] } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "list_releases", + "description": "", + "parameters": { + "type": "object", + "properties": { + "is_draft": { "type": "boolean" }, + "is_pre_release": { "type": "boolean" }, + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 20, "minimum": 1, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "list_tags", + "description": "", + "parameters": { + "type": "object", + "properties": { + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 20, "minimum": 1, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["owner", "repo"] + } + }, + { + "name": "milestone_read", + "description": "Read milestones: get one or list.", + "parameters": { + "type": "object", + "properties": { + "id": { "type": "number", "description": "for 'get'" }, + "method": { "type": "string", "enum": ["get", "list"] }, + "name": { "type": "string", "description": "name filter (for 'list')" }, + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "repo name" }, + "state": { "type": "string", "default": "all" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "milestone_write", + "description": "Write milestones: create, update, delete.", + "parameters": { + "type": "object", + "properties": { + "description": { "type": "string" }, + "due_on": { "type": "string", "description": "due date" }, + "id": { "type": "number", "description": "for 'update'/'delete'" }, + "method": { "type": "string", "enum": ["create", "update", "edit", "delete"] }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "state": { "type": "string", "enum": ["open", "closed"] }, + "title": { "type": "string", "description": "for 'create'" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "notification_read", + "description": "Read notifications: list (optionally scoped to a repo) or get a thread by ID.", + "parameters": { + "type": "object", + "properties": { + "before": { "type": "string", "description": "updated before ISO 8601" }, + "id": { "type": "number", "description": "thread ID (for 'get')" }, + "method": { "type": "string", "enum": ["list", "get"] }, + "owner": { "type": "string", "description": "scope 'list' to a repo" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "scope 'list' to a repo" }, + "since": { "type": "string", "description": "updated after ISO 8601" }, + "status": { "type": "string", "enum": ["unread", "read", "pinned"] }, + "subject_type": { "type": "string", "enum": ["Issue", "Pull", "Commit", "Repository"] } + }, + "required": ["method"] + } + }, + { + "name": "notification_write", + "description": "Mark a notification or all notifications as read.", + "parameters": { + "type": "object", + "properties": { + "id": { "type": "number", "description": "thread ID (for 'mark_read')" }, + "last_read_at": { "type": "string", "description": "ISO 8601; defaults to now" }, + "method": { "type": "string", "enum": ["mark_read", "mark_all_read"] }, + "owner": { "type": "string", "description": "scope 'mark_all_read' to a repo" }, + "repo": { "type": "string", "description": "scope 'mark_all_read' to a repo" } + }, + "required": ["method"] + } + }, + { + "name": "package_read", + "description": "Read package registry: list packages (one entry per version, filter via 'q'/'type'), list versions, or get a version.", + "parameters": { + "type": "object", + "properties": { + "method": { "type": "string", "enum": ["list", "list_versions", "get"] }, + "name": { "type": "string", "description": "slashes auto-encoded; required except 'list'" }, + "owner": { "type": "string", "description": "user or org" }, + "page": { "type": "number", "default": 1, "minimum": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "minimum": 1, "description": "results per page" }, + "q": { "type": "string", "description": "search query" }, + "type": { "type": "string", "description": "container/npm/maven/pypi/cargo/generic; required except 'list'" }, + "version": { "type": "string", "description": "for 'get'" } + }, + "required": ["method", "owner"] + } + }, + { + "name": "package_write", + "description": "Delete a package version (irreversible).", + "parameters": { + "type": "object", + "properties": { + "method": { "type": "string", "enum": ["delete"] }, + "name": { "type": "string", "description": "slashes auto-encoded" }, + "owner": { "type": "string", "description": "user or org" }, + "type": { "type": "string", "description": "container/npm/maven/pypi/cargo/generic" }, + "version": { "type": "string" } + }, + "required": ["method", "owner", "type", "name", "version"] + } + }, + { + "name": "pull_request_read", + "description": "Read pull request: details, diff, changed files, head commit status, reviews.", + "parameters": { + "type": "object", + "properties": { + "binary": { "type": "boolean", "description": "include binary diff" }, + "method": { "type": "string", "enum": ["get", "get_diff", "get_files", "get_status", "get_reviews", "get_review", "get_review_comments"] }, + "owner": { "type": "string", "description": "repo owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "pull_number": { "type": "number" }, + "repo": { "type": "string", "description": "repo name" }, + "review_id": { "type": "number", "description": "for 'get_review'/'get_review_comments'" } + }, + "required": ["method", "owner", "repo", "pull_number"] + } + }, + { + "name": "pull_request_review_write", + "description": "Write PR reviews: create, submit, delete, dismiss.", + "parameters": { + "type": "object", + "properties": { + "body": { "type": "string" }, + "comments": { + "type": "array", + "description": "inline comments (for 'create')", + "items": { + "type": "object", + "properties": { + "body": { "type": "string" }, + "new_line_num": { "type": "number", "description": "new-file line (additions)" }, + "old_line_num": { "type": "number", "description": "old-file line (deletions)" }, + "path": { "type": "string" } + } + } + }, + "commit_id": { "type": "string", "description": "for 'create'" }, + "message": { "type": "string", "description": "dismissal reason" }, + "method": { "type": "string", "enum": ["create", "submit", "delete", "dismiss"] }, + "owner": { "type": "string", "description": "repo owner" }, + "pull_number": { "type": "number" }, + "repo": { "type": "string", "description": "repo name" }, + "review_id": { "type": "number", "description": "required except for 'create'" }, + "state": { "type": "string", "enum": ["APPROVED", "REQUEST_CHANGES", "COMMENT", "PENDING"] } + }, + "required": ["method", "owner", "repo", "pull_number"] + } + }, + { + "name": "pull_request_write", + "description": "Write pull requests: create, update, close, reopen, merge, update branch from base, manage reviewers.", + "parameters": { + "type": "object", + "properties": { + "allow_maintainer_edit": { "type": "boolean", "description": "for 'update'" }, + "assignee": { "type": "string", "description": "for 'update'" }, + "assignees": { "type": "array", "items": { "type": "string" }, "description": "for 'update'" }, + "base": { "type": "string", "description": "base branch (required for 'create')" }, + "body": { "type": "string", "description": "required for 'create'; optional for 'update'" }, + "deadline": { "type": "string", "description": "ISO 8601" }, + "delete_branch": { "type": "boolean", "description": "for 'merge'" }, + "draft": { "type": "boolean", "description": "uses 'WIP: ' title prefix" }, + "force_merge": { "type": "boolean", "description": "merge even if checks fail" }, + "head": { "type": "string", "description": "head branch (required for 'create')" }, + "head_commit_id": { "type": "string", "description": "expected head SHA for conflict detection" }, + "labels": { "type": "array", "items": { "type": "number" }, "description": "label IDs" }, + "merge_style": { "type": "string", "default": "merge", "enum": ["merge", "rebase", "rebase-merge", "squash", "fast-forward-only"], "description": "for 'merge'" }, + "merge_when_checks_succeed": { "type": "boolean", "description": "for 'merge'" }, + "message": { "type": "string", "description": "merge commit message or dismissal reason" }, + "method": { "type": "string", "enum": ["create", "update", "close", "reopen", "merge", "update_branch", "add_reviewers", "remove_reviewers"] }, + "milestone": { "type": "number", "description": "for 'update'" }, + "owner": { "type": "string", "description": "repo owner" }, + "pull_number": { "type": "number", "description": "required except for 'create'" }, + "remove_deadline": { "type": "boolean", "description": "for 'update'" }, + "repo": { "type": "string", "description": "repo name" }, + "reviewers": { "type": "array", "items": { "type": "string" }, "description": "for 'add_reviewers'/'remove_reviewers'" }, + "state": { "type": "string", "description": "for 'update'", "enum": ["open", "closed"] }, + "team_reviewers": { "type": "array", "items": { "type": "string" }, "description": "for 'add_reviewers'/'remove_reviewers'" }, + "title": { "type": "string", "description": "required for 'create'; optional for 'update'/'merge'" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "search_issues", + "description": "Search issues and PRs across repositories", + "parameters": { + "type": "object", + "properties": { + "labels": { "type": "string", "description": "comma-separated" }, + "owner": { "type": "string", "description": "filter by owner" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "query": { "type": "string" }, + "state": { "type": "string", "enum": ["open", "closed", "all"] }, + "type": { "type": "string", "enum": ["issues", "pulls"] } + }, + "required": ["query"] + } + }, + { + "name": "search_org_teams", + "description": "", + "parameters": { + "type": "object", + "properties": { + "includeDescription": { "type": "boolean" }, + "org": { "type": "string" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "query": { "type": "string" } + }, + "required": ["org", "query"] + } + }, + { + "name": "search_repos", + "description": "", + "parameters": { + "type": "object", + "properties": { + "isArchived": { "type": "boolean" }, + "isPrivate": { "type": "boolean" }, + "keywordInDescription": { "type": "boolean" }, + "keywordIsTopic": { "type": "boolean" }, + "order": { "type": "string" }, + "ownerID": { "type": "number" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "query": { "type": "string" }, + "sort": { "type": "string" } + }, + "required": ["query"] + } + }, + { + "name": "search_users", + "description": "", + "parameters": { + "type": "object", + "properties": { + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "query": { "type": "string" } + }, + "required": ["query"] + } + }, + { + "name": "timetracking_read", + "description": "Read time tracking: issue times, repo times, active stopwatches, your tracked times.", + "parameters": { + "type": "object", + "properties": { + "issue_number": { "type": "number", "description": "for 'list_issue_times'" }, + "method": { "type": "string", "enum": ["list_issue_times", "list_repo_times", "get_my_stopwatches", "get_my_times"] }, + "owner": { "type": "string", "description": "for list_* methods" }, + "page": { "type": "number", "default": 1, "description": "page" }, + "per_page": { "type": "number", "default": 30, "description": "results per page" }, + "repo": { "type": "string", "description": "for list_* methods" } + }, + "required": ["method"] + } + }, + { + "name": "timetracking_write", + "description": "Write time tracking: stopwatches and entries.", + "parameters": { + "type": "object", + "properties": { + "id": { "type": "number", "description": "entry ID (for 'delete_time')" }, + "issue_number": { "type": "number" }, + "method": { "type": "string", "enum": ["start_stopwatch", "stop_stopwatch", "delete_stopwatch", "add_time", "delete_time"] }, + "owner": { "type": "string", "description": "repo owner" }, + "repo": { "type": "string", "description": "repo name" }, + "time": { "type": "number", "description": "seconds (for 'add_time')" } + }, + "required": ["method"] + } + }, + { + "name": "wiki_read", + "description": "Read wiki: list pages, get content, revision history.", + "parameters": { + "type": "object", + "properties": { + "method": { "type": "string", "enum": ["list", "get", "get_revisions"] }, + "owner": { "type": "string", "description": "repo owner" }, + "pageName": { "type": "string", "description": "for 'get'/'get_revisions'" }, + "repo": { "type": "string", "description": "repo name" } + }, + "required": ["method", "owner", "repo"] + } + }, + { + "name": "wiki_write", + "description": "Write wiki pages: create, update, delete.", + "parameters": { + "type": "object", + "properties": { + "content": { "type": "string", "description": "for 'create'/'update'" }, + "message": { "type": "string", "description": "commit message" }, + "method": { "type": "string", "enum": ["create", "update", "delete"] }, + "owner": { "type": "string", "description": "repo owner" }, + "pageName": { "type": "string", "description": "for 'update'/'delete'" }, + "repo": { "type": "string", "description": "repo name" }, + "title": { "type": "string", "description": "for 'create'" } + }, + "required": ["method", "owner", "repo"] + } + } +] diff --git a/data/schemas/github-personal.json b/data/schemas/github-personal.json new file mode 100644 index 0000000..ad7994a --- /dev/null +++ b/data/schemas/github-personal.json @@ -0,0 +1,669 @@ +[ + { + "name": "add_comment_to_pending_review", + "description": "Add review comment to the requester's latest pending pull request review. A pending review needs to already exist to call this (check with the user if not sure).", + "parameters": { + "type": "object", + "properties": { + "body": { "type": "string", "description": "The text of the review comment" }, + "line": { "type": "number", "description": "The line of the blob in the pull request diff that the comment applies to. For multi-line comments, the last line of the range" }, + "owner": { "type": "string", "description": "Repository owner" }, + "path": { "type": "string", "description": "The relative path to the file that necessitates a comment" }, + "pullNumber": { "type": "number", "description": "Pull request number" }, + "repo": { "type": "string", "description": "Repository name" }, + "side": { "type": "string", "enum": ["LEFT", "RIGHT"], "description": "The side of the diff to comment on. LEFT indicates the previous state, RIGHT indicates the new state" }, + "startLine": { "type": "number", "description": "For multi-line comments, the first line of the range that the comment applies to" }, + "startSide": { "type": "string", "enum": ["LEFT", "RIGHT"], "description": "For multi-line comments, the starting side of the diff that the comment applies to" }, + "subjectType": { "type": "string", "enum": ["FILE", "LINE"], "description": "The level at which the comment is targeted" } + }, + "required": ["owner", "repo", "pullNumber", "path", "body", "subjectType"] + } + }, + { + "name": "add_issue_comment", + "description": "Add a comment to a specific issue in a GitHub repository. Use this tool to add comments to pull requests as well (in this case pass pull request number as issue_number), but only if user is not asking specifically to add review comments.", + "parameters": { + "type": "object", + "properties": { + "body": { "type": "string", "description": "Comment content" }, + "issue_number": { "type": "number", "description": "Issue number to comment on" }, + "owner": { "type": "string", "description": "Repository owner" }, + "repo": { "type": "string", "description": "Repository name" } + }, + "required": ["owner", "repo", "issue_number", "body"] + } + }, + { + "name": "add_reply_to_pull_request_comment", + "description": "Add a reply to an existing pull request comment. This creates a new comment that is linked as a reply to the specified comment.", + "parameters": { + "type": "object", + "properties": { + "body": { "type": "string", "description": "The text of the reply" }, + "commentId": { "type": "number", "description": "The ID of the comment to reply to" }, + "owner": { "type": "string", "description": "Repository owner" }, + "pullNumber": { "type": "number", "description": "Pull request number" }, + "repo": { "type": "string", "description": "Repository name" } + }, + "required": ["owner", "repo", "pullNumber", "commentId", "body"] + } + }, + { + "name": "assign_copilot_to_issue", + "description": "Assign Copilot to a specific issue in a GitHub repository.\n\nThis tool can help with the following outcomes:\n- a Pull Request created with source code changes to resolve the issue\n\n\nMore information can be found at:\n- https://docs.github.com/en/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks/about-assigning-tasks-to-copilot\n", + "parameters": { + "type": "object", + "properties": { + "base_ref": { "type": "string", "description": "Git reference (e.g., branch) that the agent will start its work from. If not specified, defaults to the repository's default branch" }, + "custom_instructions": { "type": "string", "description": "Optional custom instructions to guide the agent beyond the issue body." }, + "issue_number": { "type": "number", "description": "Issue number" }, + "owner": { "type": "string", "description": "Repository owner" }, + "repo": { "type": "string", "description": "Repository name" } + }, + "required": ["owner", "repo", "issue_number"] + } + }, + { + "name": "create_branch", + "description": "Create a new branch in a GitHub repository", + "parameters": { + "type": "object", + "properties": { + "branch": { "type": "string", "description": "Name for new branch" }, + "from_branch": { "type": "string", "description": "Source branch (defaults to repo default)" }, + "owner": { "type": "string", "description": "Repository owner" }, + "repo": { "type": "string", "description": "Repository name" } + }, + "required": ["owner", "repo", "branch"] + } + }, + { + "name": "create_or_update_file", + "description": "Create or update a single file in a GitHub repository.\nIf updating, you should provide the SHA of the file you want to update. Use this tool to create or update a file in a GitHub repository remotely; do not use it for local file operations.\n\nIn order to obtain the SHA of original file version before updating, use the following git command:\ngit rev-parse