[
  {
    "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 <html>/<head>/<body>." },
        "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 <html>/<head>/<body>." },
        "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"]
    }
  }
]
