← Jira MCP

Jira MCP b5b4eb2b070a098e606e9e025d260c0d9857a4d9

source_git · southocean/jira-mcp · current release

13
Tools
0
Resources
0
Templates
0
Prompts

Observation

Observed 2026-08-25T21:04:04.436Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.

Server capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools 13

ToolCategoryAnnotationsRisk
add_commentAdd a comment to a Jira ticket.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    },
    "comment": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "comment"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
add_labelAdd a label to a Jira ticket.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    },
    "label": {
      "type": "string",
      "description": "Label to add, e.g. 'ai-inprogress'"
    }
  },
  "required": [
    "key",
    "label"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
convert_to_subtaskConvert one or more EXISTING standard issues (Task/Story/Bug) into Sub-tasks nested under a parent, in the same project. This is the only way to nest an existing ticket — Jira's edit API refuses an issue-type change to subtask, so this uses the bulk-move API (the same operation as the UI 'Move'). Notifications are always sent (disabling them needs elevated permissions). Returns the per-issue result.
Input schema
{
  "type": "object",
  "properties": {
    "keys": {
      "type": "string",
      "description": "One or more ticket keys to convert, comma- or space-separated. E.g. 'ABC-371, ABC-373'"
    },
    "parent": {
      "type": "string",
      "description": "Parent ticket key the subtasks nest under (e.g. 'ABC-370'). Must be a standard-level issue (Task/Story/Feature/Bug) — not an Epic and not itself a subtask."
    }
  },
  "required": [
    "keys",
    "parent"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
create_ticketCreate a Jira ticket. Uses your configured default project unless `project` is given. If no default is set and `project` is omitted, this errors asking which project to use. Returns the ticket key (e.g. ABC-341).
Input schema
{
  "type": "object",
  "properties": {
    "summary": {
      "type": "string",
      "description": "Short title of the ticket"
    },
    "description": {
      "type": "string",
      "description": "Detailed description"
    },
    "type": {
      "type": "string",
      "enum": [
        "task",
        "bug",
        "feature",
        "subtask"
      ],
      "default": "task"
    },
    "project": {
      "type": "string",
      "description": "Project key to create in, e.g. 'ABC'. Omit to use the configured default project. Required (ask the user) when no default is configured."
    },
    "estimate": {
      "type": "string",
      "description": "Time estimate e.g. '2h', '1d'"
    },
    "assignee": {
      "type": "string",
      "description": "Who to assign — a full name, email, or 'me'/'unassigned'. Omit to leave unassigned. Resolved to a Jira account via the project's assignable-user search."
    },
    "parent": {
      "type": "string",
      "description": "Parent ticket key (e.g. 'ABC-370'). Required for type 'subtask' (parent must be a standard issue: Task/Story/Feature/Bug). For a Task/Story/Feature/Bug the parent must be an Epic — same-level parenting (e.g. Task under Feature) is rejected by Jira."
    },
    "move_to_in_progress": {
      "type": "boolean",
      "description": "Immediately move to In Progress after creation"
    }
  },
  "required": [
    "summary"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
download_attachmentDownload a Jira attachment by id to a local directory (created if missing). Returns the saved absolute path.
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Attachment id, e.g. '19014' — from list_attachments"
    },
    "outDir": {
      "type": "string",
      "description": "Directory to save into; created (recursively) if it doesn't exist"
    },
    "filename": {
      "type": "string",
      "description": "Override filename; defaults to the attachment's original filename"
    }
  },
  "required": [
    "id",
    "outDir"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
get_commentsGet comments on a Jira ticket: author, timestamp, and body flattened from ADF to plain text.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    },
    "max": {
      "type": "number",
      "default": 50,
      "description": "Max comments to return"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
get_ticketGet details of a Jira ticket by key or number. E.g. 'ABC-341' or just '341'.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just the number 341"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
list_attachmentsList attachments on a Jira ticket: id, filename, mimeType, size, created, author.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
move_ticketMove a Jira ticket to a new status.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    },
    "status": {
      "type": "string",
      "enum": [
        "todo",
        "in-progress",
        "qa",
        "vqa",
        "done"
      ]
    }
  },
  "required": [
    "key",
    "status"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
move_ticket_to_projectMove one or more Jira tickets to a DIFFERENT project (re-keys them, e.g. BUG-99 -> ABC-358). This is the cross-project 'Move' operation, not a status change — use move_ticket for status. Requires Move Issues permission on the source project. Statuses/fields the target workflow doesn't share are remapped to target defaults. Notifications are always sent (disabling them requires elevated permissions). Returns the old->new key mapping.
Input schema
{
  "type": "object",
  "properties": {
    "keys": {
      "type": "string",
      "description": "One or more ticket keys, comma- or space-separated. E.g. 'BUG-98, BUG-99'"
    },
    "target_project": {
      "type": "string",
      "description": "Target project key, e.g. 'ABC'. Defaults to your configured default project if one is set; required otherwise."
    }
  },
  "required": [
    "keys"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
remove_labelRemove a label from a Jira ticket.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    },
    "label": {
      "type": "string",
      "description": "Label to remove, e.g. 'ai-inprogress'"
    }
  },
  "required": [
    "key",
    "label"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
search_ticketsSearch Jira tickets using a plain-English query or JQL.
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Plain text like 'my open bugs' or JQL like 'project=ABC AND status=QA'"
    },
    "max": {
      "type": "number",
      "default": 10
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —
update_ticketUpdate fields on an existing Jira ticket.
Input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Ticket key like ABC-341 or just 341"
    },
    "summary": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "estimate": {
      "type": "string",
      "description": "e.g. '2h', '1d'"
    },
    "assignee": {
      "type": "string",
      "description": "A full name, email, 'me', or 'unassigned'. Resolved to a Jira account via the project's assignable-user search."
    },
    "parent": {
      "type": "string",
      "description": "Parent ticket key (e.g. 'ABC-370'). Jira hierarchy applies: only an Epic can parent a Task/Story/Feature, and only a standard issue can parent a Subtask — same-level parenting is rejected."
    },
    "sprint": {
      "type": "number",
      "description": "Sprint id (integer) to place the ticket in, e.g. the current active sprint. Find it via JQL 'sprint in openSprints()'. Required after a cross-project move for the ticket to appear on the board."
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
— · —

Resources 0

Resource templates 0

Prompts 0

Let’s talk about MCP security.

Share your details and our security team will contact you.