A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Office services through the Graph API
Retrieve profile information for a specific Jira user.
A call is made on an account: it counts against an allowance and the publisher sees it, which is why this one asks who you are first.
What it does
Jira and Confluence for your agent. Built from mcp-atlassian and run on mcprush hosting: there is no endpoint to keep alive and nothing to deploy yourself. The image is pinned, so what answers today is what answered yesterday.
Quickstart
# 1 — buy it first ($29 a month): mcprush.com/checkout?server=atlassian-cloud-hosted-mcp
# a key alone is not enough: the gateway refuses every call until it is bought
# 2 — sign in with a key of the account that bought it: npx mcprush@latest login
# the key is at mcprush.com/dashboard#access
# 3 — install
npx mcprush@latest add mcpdevpro/atlassian-cloud-hosted-mcp
# 4 — ask your agent for something these tools do
# jira_get_user_profile, jira_search_assignable_users, jira_get_issue_watchers and 95 more
Windows PowerShell says 'running scripts is disabled on this system'? Run Set-ExecutionPolicy -Scope CurrentUser RemoteSigned once, or type npx.cmd instead of npx (codex.cmd, gemini.cmd, grok.cmd likewise). PowerShell 7 needs neither.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine — this server runs on infrastructure we host behind our gateway, and what you install is the connection to it.
Claude Code has its own MCP command, and the key rides on it as a header — the gateway refuses a call that carries none. Claude Code reads MCPRUSH_KEY each time it connects, so the key stays out of its config: export your key from Access in your shell profile (macOS, Linux), or run setx MCPRUSH_KEY <your key> and open a new terminal (Windows). Or let npx mcprush@latest add mcpdevpro/atlassian-cloud-hosted-mcp write the entry with the key for you; --scope user makes it available in every project. The first connection after a quiet spell starts the server, which takes up to a minute: if your client says it failed to connect, reconnect after that (/mcp in Claude Code).
Buy it first — $29 a month. A key alone is not enough: until this account has bought it, the gateway refuses every call. Subscribe, then use a key of the account that bought it.
claude mcp add --transport http --scope user atlassian-cloud-hosted-mcp https://mcprush.com/gw/atlassian-cloud-hosted-mcp/mcp --header 'Authorization: Bearer ${MCPRUSH_KEY}'Reconnect, or start a new session, and the tools appear in the model’s tool list.
It reaches a system of yours, so it needs your own credential rather than the publisher’s: JIRA_URL — Your Jira Cloud address, like https://your-team.atlassian.net.; JIRA_USERNAME — The email of the Atlassian account the API token belongs to.; JIRA_API_TOKEN — An Atlassian API token for that account: create one at id.atlassian.com/manage-profile/security/api-tokens.. You set them after installing; the value is sealed here and handed to the server when it starts.
One config entry pointing at the gateway. The server itself runs on infrastructure we host, so nothing from this listing executes on your machine.
98 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Retrieve profile information for a specific Jira user.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| user_identifier | string | yes | Identifier for the user (e.g., email address 'user@example.com', username 'johndoe', account ID 'accountid:...', or key for Server/DC). |
Search Jira users assignable in a given project or issue. Use this when you have a display name / partial name / email fragment and need a concrete identifier (`name / key for Server/DC, accountId for Cloud) to feed into assignee, reporter, watcher, etc. Returns the full result set so the caller can disambiguate when several users match — get_user_profile` only resolves one identif
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Free-form text to search Jira users by: display name, username, or email substring (e.g. 'Smith', 'jane.doe', 'doe@example.com'). Server-side match is case-insensitive and partial. |
| project_key | string | no | Project key to scope the search to (e.g. 'DT'). Required if issue_key is not given. |
| issue_key | string | no | Issue key to scope the search to (e.g. 'DT-779'). Required if project_key is not given. |
| limit | integer | no | Maximum number of users to return (default 20). |
Get the list of watchers for a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
Add a user as a watcher to a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
| user_identifier | string | yes | User to add as watcher. For Jira Cloud, use the account ID. For Jira Server/DC, use the username. |
Remove a user from watching a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
| username | string | no | Username to remove (for Jira Server/DC). |
| account_id | string | no | Account ID to remove (for Jira Cloud). |
Get details of a specific Jira issue. Includes Epic links and relationship information. Use the `include` parameter to inline enrichments (remote_links, transitions, watchers, changelog, comments, worklogs) so that separate tool calls are not needed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| fields | string | no | (Optional) Comma-separated list of fields to return (e.g., 'summary,status,customfield_10010'). You may also provide a single field as a string (e.g., 'duedate'). Use '*all' for all fields (including |
| expand | string | no | (Optional) Fields to expand. Examples: 'renderedFields' (for rendered content), 'transitions' (for available status transitions), 'changelog' (for history) |
| comment_limit | integer | no | Maximum number of comments to include (0 or null for no comments) |
| properties | string | no | (Optional) A comma-separated list of issue properties to return |
| update_history | boolean | no | Whether to update the issue view history for the requesting user |
| include | string | no | (Optional) Comma-separated sections to inline in the response, avoiding extra tool calls. Supported: all, remote_links, transitions, watchers, changelog, comments, worklogs |
| use_display_names | boolean | no | When true, custom field keys in the output use human-readable display names (e.g. 'Story Points') instead of opaque IDs (e.g. 'customfield_10243'). The 'names' expansion is added automatically. Standa |
Search Jira issues using JQL (Jira Query Language).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jql | string | yes | JQL query string (Jira Query Language). Examples: - Find Epics: "issuetype = Epic AND project = PROJ" - Find issues in Epic: "parent = PROJ-123" - Find by status: "status = 'In Progress' AND project = |
| fields | string | no | (Optional) Comma-separated fields to return in the results. Use '*all' for all fields, or specify individual fields like 'summary,status,assignee,priority' |
| limit | integer | no | Maximum number of results (1-50) |
| start_at | integer | no | Starting index for pagination (0-based) |
| projects_filter | string | no | (Optional) Comma-separated list of project keys to filter results by. Overrides the environment variable JIRA_PROJECTS_FILTER if provided. |
| expand | string | no | (Optional) fields to expand. Examples: 'renderedFields', 'transitions', 'changelog' |
| page_token | string | no | (Optional) Pagination token from a previous search result. Cloud only — Server/DC uses start_at for pagination. |
| use_display_names | boolean | no | When true, custom field keys in the output use human-readable display names (e.g. 'Story Points') instead of opaque IDs (e.g. 'customfield_10243'). The 'names' expansion is added automatically. Standa |
Search Jira fields by keyword with fuzzy match.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keyword | string | no | Keyword for fuzzy search. If left empty, lists the first 'limit' available fields in their default order. |
| limit | integer | no | Maximum number of results |
| refresh | boolean | no | Whether to force refresh the field list |
Get allowed option values for a custom field. Returns the list of valid options for select, multi-select, radio, checkbox, and cascading select custom fields. Cloud: Uses the Field Context Option API. If context_id is not provided, automatically resolves to the global context. Server/DC: Uses createmeta to get allowedValues. Requires project_key and issue_type parameters.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| field_id | string | yes | Custom field ID (e.g., 'customfield_10001'). Use jira_search_fields to find field IDs. |
| context_id | string | no | Field context ID (Cloud only). If omitted, auto-resolves to the global context. |
| project_key | string | no | Project key (required for Server/DC). Example: 'PROJ' |
| issue_type | string | no | Issue type name (required for Server/DC). Example: 'Bug' |
| contains | string | no | Case-insensitive substring filter on option values. Also matches child values in cascading selects. |
| return_limit | integer | no | Maximum number of results to return (applied after filtering). |
| values_only | boolean | no | If true, return only value strings in a compact JSON format instead of full option objects. |
Get all issues for a specific Jira project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'ACV2') |
| limit | integer | no | Maximum number of results (1-50) |
| start_at | integer | no | Starting index for pagination (0-based) |
Get available status transitions for a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
Get worklog entries for a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
Download attachments from a Jira issue. Returns attachment contents as base64-encoded content so that they are available over the MCP protocol without requiring filesystem access on the server. Image attachments are returned as `EmbeddedResource blobs; all other attachments (documents, archives, etc.) are returned as TextContent` carrying a base64 payload, since many MCP clients only forwar
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
Get all images attached to a Jira issue as inline image content. Filters attachments to images only (PNG, JPEG, GIF, WebP, SVG, BMP) and returns them as base64-encoded ImageContent that clients can render directly. Non-image attachments are excluded. Files with ambiguous MIME types (application/octet-stream) are detected by filename extension as a fallback. Images larger than 50 MB are skipped w
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123'). Returns image attachments as inline ImageContent for LLM vision. |
Get jira agile boards by name, project key, or type.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| board_name | string | no | (Optional) The name of board, support fuzzy search |
| project_key | string | no | (Optional) Jira project key (e.g., 'PROJ', 'ACV2') |
| board_type | string | no | (Optional) The type of jira board (e.g., 'scrum', 'kanban') |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
Get all issues linked to a specific board filtered by JQL.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| board_id | string | yes | The id of the board (e.g., '1001') |
| jql | string | yes | JQL query string (Jira Query Language). Examples: - Find Epics: "issuetype = Epic AND project = PROJ" - Find issues in Epic: "parent = PROJ-123" - Find by status: "status = 'In Progress' AND project = |
| fields | string | no | Comma-separated fields to return in the results. Use '*all' for all fields, or specify individual fields like 'summary,status,assignee,priority' |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
| expand | string | no | Optional fields to expand in the response (e.g., 'changelog'). |
Get jira sprints from board by state.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| board_id | string | yes | The id of board (e.g., '1000') |
| state | string | no | Sprint state (e.g., 'active', 'future', 'closed') |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
Get jira issues from sprint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprint_id | string | yes | The id of sprint (e.g., '10001') |
| fields | string | no | Comma-separated fields to return in the results. Use '*all' for all fields, or specify individual fields like 'summary,status,assignee,priority' |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
Get all available issue link types.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name_filter | string | no | (Optional) Filter link types by name substring (case-insensitive) |
Create a new Jira issue with optional Epic link or parent for subtasks.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | The JIRA project key (e.g. 'PROJ', 'DEV', 'ACV2'). This is the prefix of issue keys in your project. Never assume what it might be, always ask the user. |
| summary | string | yes | Summary/title of the issue |
| issue_type | string | yes | Issue type (e.g. 'Task', 'Bug', 'Story', 'Epic', 'Subtask'). The available types depend on your project configuration. For subtasks, use 'Subtask' (not 'Sub-task') and include parent in additional_fie |
| assignee | string | no | (Optional) Assignee's user identifier (string): Email, display name, or account ID (e.g., 'user@example.com', 'John Doe', 'accountid:...') |
| description | string | no | Issue description in Markdown format. On Jira Cloud, use '{expand:Title}...{expand}' for a collapsible section. |
| components | string | no | (Optional) Comma-separated list of component names to assign (e.g., 'Frontend,API') |
| additional_fields | string | no | (Optional) JSON string of additional fields to set. Examples: - Set priority: {"priority": {"name": "High"}} - Add labels: {"labels": ["frontend", "urgent"]} - Link to parent (for any issue type): {"p |
Create multiple Jira issues in a batch.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issues | string | yes | JSON array of issue objects. Each object should contain: - project_key (required): The project key (e.g., 'PROJ') - summary (required): Issue summary/title - issue_type (required): Type of issue (e.g. |
| validate_only | boolean | no | If true, only validates the issues without creating them |
Get changelogs for multiple Jira issues (Cloud only).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_ids_or_keys | string | yes | Comma-separated list of Jira issue IDs or keys (e.g. 'PROJ-123,PROJ-124') |
| fields | string | no | (Optional) Comma-separated list of fields to filter changelogs by (e.g. 'status,assignee'). Default to None for all fields. |
| limit | integer | no | Maximum number of changelogs to return in result for each issue. Default to -1 for all changelogs. Notice that it only limits the results in the response, the function will still fetch all the data. |
Update an existing Jira issue including changing status, adding Epic links, updating fields, etc.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| fields | string | yes | JSON string of fields to update. For 'assignee', provide a string identifier (email, name, or accountId). For 'description', provide text in Markdown format; on Jira Cloud, use '{expand:Title}...{expa |
| additional_fields | string | no | (Optional) JSON string of additional fields to update. Use this for custom fields or more complex updates. Link to epic: {"epicKey": "EPIC-123"} or {"epic_link": "EPIC-123"}. |
| components | string | no | (Optional) Comma-separated list of component names (e.g., 'Frontend,API') |
| attachments | string | no | (Optional) JSON string array or comma-separated list of file paths to attach to the issue. Example: '/path/to/file1.txt,/path/to/file2.txt' or ['/path/to/file1.txt','/path/to/file2.txt'] |
| return_fields | string | no | (Optional) Controls which fields of the updated issue are returned, to reduce response size and token usage. Defaults to '*all' (the complete issue, which can be very large). TOKEN-SAVING TIP: after a |
Assign a Jira issue to a user using the dedicated assignment endpoint. This is more reliable than setting assignee via update_issue, which is silently ignored by some Jira configurations. Uses PUT /issue/{key}/assignee.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| assignee | string | no | User identifier to assign (email, display name, or account ID), or a JSON object string from jira_search_assignable_users. Pass null or empty string to unassign the issue. |
Delete an existing Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
Move a Jira issue to a different project (Jira Cloud only). Uses Jira Cloud's bulk move API to perform a cross-project move. The issue keeps its current issue type and may be assigned a new key in the target project (e.g., OLDPROJ-123 becomes NEWPROJ-456). The move is processed asynchronously on Jira's side; this tool polls until confirmed or times out after 30 seconds.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key to move (e.g., 'PROJ-123') |
| target_project_key | string | yes | Key of the target project (e.g., 'OTHERPROJ'). The issue will keep its current issue type and may receive a new key in the target project. |
Add a comment to a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| body | string | yes | Comment text in Markdown format |
| visibility | string | no | (Optional) Comment visibility as JSON string (e.g. '{"type":"group","value":"jira-users"}') |
| public | boolean | no | (Optional) For JSM/Service Desk issues only. Set to true for customer-visible comment, false for internal agent-only comment. Posted via the ServiceDesk API as a raw string; Jira Cloud renders it serv |
Edit an existing comment on a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| comment_id | string | yes | The ID of the comment to edit |
| body | string | yes | Updated comment text in Markdown format |
| visibility | string | no | (Optional) Comment visibility as JSON string (e.g. '{"type":"group","value":"jira-users"}') |
Add a worklog entry to a Jira issue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| time_spent | string | yes | Time spent in Jira format. Examples: '1h 30m' (1 hour and 30 minutes), '1d' (1 day), '30m' (30 minutes), '4h' (4 hours) |
| comment | string | no | (Optional) Comment for the worklog in Markdown format |
| started | string | no | (Optional) Start time in ISO format. If not provided, the current time will be used. Example: '2023-08-01T12:00:00.000+0000' |
| original_estimate | string | no | (Optional) New value for the original estimate |
| remaining_estimate | string | no | (Optional) New value for the remaining estimate |
Link an existing issue to an epic.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | The key of the issue to link (e.g., 'PROJ-123', 'ACV2-642') |
| epic_key | string | yes | The key of the epic to link to (e.g., 'PROJ-456') |
Create a link between two Jira issues.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| link_type | string | yes | The type of link to create (e.g., 'Duplicate', 'Blocks', 'Relates to') |
| inward_issue_key | string | yes | The key of the inward issue (e.g., 'PROJ-123', 'ACV2-642') |
| outward_issue_key | string | yes | The key of the outward issue (e.g., 'PROJ-456') |
| comment | string | no | (Optional) Comment to add to the link. Rejected when either linked issue belongs to a project listed in JIRA_INTERNAL_ONLY_PROJECTS (a link comment may be customer-visible on JSM and cannot be forced |
| comment_visibility | string | no | (Optional) Visibility settings for the comment as JSON string (e.g. '{"type":"group","value":"jira-users"}') |
Create a remote issue link (web link or Confluence link) for a Jira issue. This tool allows you to add web links and Confluence links to Jira issues. The links will appear in the issue's "Links" section and can be clicked to navigate to external resources.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | The key of the issue to add the link to (e.g., 'PROJ-123', 'ACV2-642') |
| url | string | yes | The URL to link to (e.g., 'https://example.com/page' or Confluence page URL) |
| title | string | yes | The title/name of the link (e.g., 'Documentation Page', 'Confluence Page') |
| summary | string | no | (Optional) Description of the link |
| relationship | string | no | (Optional) Relationship description (e.g., 'causes', 'relates to', 'documentation') |
| icon_url | string | no | (Optional) URL to a 16x16 icon for the link |
Remove a link between two Jira issues.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| link_id | string | yes | The ID of the link to remove |
Transition a Jira issue to a new status.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| transition_id | string | yes | ID of the transition to perform. Use the jira_get_transitions tool first to get the available transition IDs for the issue. Example values: '11', '21', '31' |
| fields | string | no | (Optional) JSON string of fields to update during the transition. Some transitions require specific fields to be set (e.g., resolution). Example: '{"resolution": {"name": "Fixed"}}' |
| comment | string | no | (Optional) Comment to add during the transition in Markdown format. This will be visible in the issue history. Rejected for projects listed in JIRA_INTERNAL_ONLY_PROJECTS (a transition comment may be |
Create Jira sprint for a board.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| board_id | string | yes | The id of board (e.g., '1000') |
| name | string | yes | Name of the sprint (e.g., 'Sprint 1') |
| start_date | string | yes | Start time for sprint (ISO 8601 format) |
| end_date | string | yes | End time for sprint (ISO 8601 format) |
| goal | string | no | (Optional) Goal of the sprint |
Update jira sprint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprint_id | string | yes | The id of sprint (e.g., '10001') |
| name | string | no | (Optional) New name for the sprint |
| state | string | no | (Optional) New state for the sprint (future|active|closed) |
| start_date | string | no | (Optional) New start date for the sprint |
| end_date | string | no | (Optional) New end date for the sprint |
| goal | string | no | (Optional) New goal for the sprint |
Add issues to a Jira sprint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprint_id | string | yes | Sprint ID to add issues to |
| issue_keys | string | yes | Comma-separated issue keys (e.g., 'PROJ-1,PROJ-2') |
Move issues to the backlog, removing them from any sprint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_keys | string | yes | Comma-separated issue keys (e.g., 'PROJ-1,PROJ-2') |
Get available issue types for a Jira project. Returns the list of issue types (Bug, Task, Story, Epic, etc.) that can be created in the specified project. Use the returned issue type IDs with get_create_fields to discover what fields each type requires.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'JTEST') |
Get fields available for creating an issue of a specific type. Returns all fields (required and optional) for the given project and issue type, including field names, IDs, whether they're required, and their schema. Use jira_get_field_options when a returned field needs its allowed values.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'JTEST') |
| issue_type_id | string | yes | The issue type ID (from get_project_issue_types). Example: '10002' for Task. |
Get all fix versions for a specific Jira project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'ACV2') |
Get all components for a specific Jira project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'ACV2') |
Get all Jira projects accessible to the current user.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| include_archived | boolean | no | Whether to include archived projects in the results |
Search for Jira projects by name or key prefix. Uses the projects picker endpoint to return a ranked list of matching projects without fetching every visible project on the instance.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Name or key prefix to search for |
| max_results | integer | no | Maximum number of results to return |
| current_project_ids | string | no | Comma-separated list of project IDs to exclude from results |
Get the fields available on issues of a project (the create schema), deduplicated across the project's issue types — i.e. which fields tickets in this project have, regardless of whether they are filled.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | The project key, e.g. 'PROJ'. |
Get the Jira Service Desk associated with a project key. Server/Data Center only. Not available on Jira Cloud.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'SUP') |
Get queues for a Jira Service Desk. Server/Data Center only. Not available on Jira Cloud.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service_desk_id | string | yes | Service desk ID (e.g., '4') |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
Get issues from a Jira Service Desk queue. Server/Data Center only. Not available on Jira Cloud.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service_desk_id | string | yes | Service desk ID (e.g., '4') |
| queue_id | string | yes | Queue ID (e.g., '47') |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
Get request types for a Jira Service Management service desk.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service_desk_id | string | yes | Service desk ID (e.g., '4') |
| start_at | integer | no | Starting index for pagination (0-based) |
| limit | integer | no | Maximum number of results (1-50) |
Get field definitions for a Jira Service Management request type.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service_desk_id | string | yes | Service desk ID (e.g., '4') |
| request_type_id | string | yes | Request type ID (e.g., '23') |
Create a Jira Service Management customer request.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service_desk_id | string | yes | Service desk ID (e.g., '4') |
| request_type_id | string | yes | Request type ID (e.g., '23') |
| request_field_values | string | yes | JSON string of request field values keyed by field ID. Examples: - Summary and description: {"summary": "Access issue", "description": "Cannot log in"} - Multi-value field: {"customfield_10001": ["ali |
| raise_on_behalf_of | string | no | (Optional) Jira user identifier for raiseOnBehalfOf. For Server/DC this is typically username or key; for Cloud use the identifier expected by your JSM instance. |
| request_participants | string | no | (Optional) JSON array string or comma-separated list of request participants. Examples: ["user1","user2"] or "user1,user2" |
| attachments | string | no | (Optional) JSON array string of files to attach to the created request. Each object must contain 'filename', 'mime_type', and base64-encoded 'base64' content. Example: [{"filename": "log.txt", "mime_t |
| strict_on_behalf | boolean | no | If true, fail immediately when raiseOnBehalfOf cannot be applied. If false, retry without raiseOnBehalfOf and return a fallback warning. |
Create a new fix version in a Jira project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'ACV2') |
| name | string | yes | Name of the version |
| start_date | string | no | Start date (YYYY-MM-DD) |
| release_date | string | no | Release date (YYYY-MM-DD) |
| description | string | no | Description of the version |
Batch create multiple versions in a Jira project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ', 'ACV2') |
| versions | string | yes | JSON array of version objects. Each object should contain: - name (required): Name of the version - startDate (optional): Start date (YYYY-MM-DD) - releaseDate (optional): Release date (YYYY-MM-DD) - |
Update an existing fix version in a Jira project. Only fields explicitly provided are modified; other attributes of the version are left untouched. Useful for archiving/unarchiving versions, renaming, or shifting release dates without recreating them.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| version_id | string | yes | Numeric ID of the version to update (e.g. '10001') |
| name | string | no | New name for the version |
| description | string | no | New description for the version |
| start_date | string | no | New start date (YYYY-MM-DD) |
| release_date | string | no | New release date (YYYY-MM-DD) |
| archived | boolean | no | Set archived flag (true to archive) |
| released | boolean | no | Set released flag (true to mark released) |
Get all ProForma forms associated with a Jira issue. Uses the new Jira Forms REST API. Form IDs are returned as UUIDs.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
Get detailed information about a specific ProForma form. Uses the new Jira Forms REST API. Returns form details including ADF design structure.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
| form_id | string | yes | ProForma form UUID (e.g., '1946b8b7-8f03-4dc0-ac2d-5fac0d960c6a') |
Update form field answers using the Jira Forms REST API. This is the primary method for updating form data. Each answer object must specify the question ID, answer type, and value. ⚠️ KNOWN LIMITATION - DATETIME fields: The Jira Forms API does NOT properly preserve time components in DATETIME fields. Only the date portion is stored; times are reset to midnight (00:00:00). **Workaround for D
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
| form_id | string | yes | ProForma form UUID (e.g., '1946b8b7-8f03-4dc0-ac2d-5fac0d960c6a') |
| answers | array | yes | List of answer objects. Each answer must have: questionId (string), type (TEXT/NUMBER/SELECT/etc), value (any) |
Get date information and status transition history for a Jira issue. Returns dates (created, updated, due date, resolution date) and optionally status change history with time tracking for workflow analysis.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| include_status_changes | boolean | no | Include status change history with timestamps and durations |
| include_status_summary | boolean | no | Include aggregated time spent in each status |
Calculate SLA metrics for a Jira issue. Computes various time-based metrics including cycle time, lead time, time spent in each status, due date compliance, and more. Working hours can be configured via environment variables: - JIRA_SLA_WORKING_HOURS_ONLY: Enable working hours filtering (true/false) - JIRA_SLA_WORKING_HOURS_START: Start time (e.g., "09:00") - JIRA_SLA_WORKING_HOURS_END: End time
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123', 'ACV2-642') |
| metrics | string | no | Comma-separated list of SLA metrics to calculate. Available: cycle_time, lead_time, time_in_status, due_date_compliance, resolution_time, first_response_time. Defaults to configured metrics or 'cycle_ |
| working_hours_only | boolean | no | Calculate using working hours only (excludes weekends/non-business hours). Defaults to value from JIRA_SLA_WORKING_HOURS_ONLY environment variable. |
| include_raw_dates | boolean | no | Include raw date values in the response |
Get development information (PRs, commits, branches) linked to a Jira issue. This retrieves the development panel information that shows linked pull requests, branches, and commits from connected source control systems like Bitbucket, GitHub, or GitLab.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_key | string | yes | Jira issue key (e.g., 'PROJ-123') |
| application_type | string | no | (Optional) Filter by application type (case-sensitive). Examples: 'stash' (Bitbucket Server), 'bitbucket', 'GitHub', 'githube' (GitHub Enterprise Server), 'GitLab'. If omitted, types are discovered au |
| data_type | string | no | (Optional) Filter by data type. Examples: 'pullrequest', 'branch', 'repository' |
Get development information for multiple Jira issues. Batch retrieves development panel information (PRs, commits, branches) for multiple issues at once.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| issue_keys | string | yes | Comma-separated list of Jira issue keys (e.g., 'PROJ-123,PROJ-456') |
| application_type | string | no | (Optional) Filter by application type (case-sensitive). Examples: 'stash' (Bitbucket Server), 'bitbucket', 'GitHub', 'githube' (GitHub Enterprise Server), 'GitLab'. If omitted, types are discovered au |
| data_type | string | no | (Optional) Filter by data type. Examples: 'pullrequest', 'branch', 'repository' |
Group a project's epics under their cross-project parent issues. Fetches all epics in the project, detects their parent issue via the parent field or inward issue links, then groups them by parent. Epics with no detected parent appear under "Unlinked". Useful for understanding how a project's epics roll up to initiatives in another project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ') |
| max_epics | integer | no | Maximum number of epics to fetch (1-500) |
Find all cross-project issue links for a project. Scans issues in the project, extracts every issue link whose target belongs to a different project, and groups them by target project and link type. Useful for dependency analysis across multi-project Jira setups.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_key | string | yes | Jira project key (e.g., 'PROJ') |
| max_issues | integer | no | Maximum issues to scan for links (1-500) |
Search Confluence content using simple terms or CQL.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Search query - can be either a simple text (e.g. 'project documentation') or a CQL query string. Simple queries use 'siteSearch' by default, to mimic the WebUI search, with an automatic fallback to 't |
| limit | integer | no | Maximum number of results (1-50) |
| spaces_filter | string | no | (Optional) Comma-separated list of space keys to filter results by. Overrides the environment variable CONFLUENCE_SPACES_FILTER if provided. Use empty string to disable filtering. |
Get content of a specific Confluence page by its ID, or by its title and space key.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | no | Confluence page ID, full page URL, or tiny link. For example: '123456789', 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title', or 'https://example.atlassian.net/wiki/x/N4CIO'. |
| title | string | no | The exact title of the Confluence page. Use this with 'space_key' if 'page_id' is not known. |
| space_key | string | no | The key of the Confluence space where the page resides (e.g., 'DEV', 'TEAM'). Required if using 'title'. |
| include_metadata | boolean | no | Whether to include page metadata such as creation date, last update, version, and labels. |
| convert_to_markdown | boolean | no | Whether to convert page to markdown (true) or keep it in raw HTML format (false). Raw HTML can reveal macros (like dates) not visible in markdown, but CAUTION: using HTML significantly increases token |
Get child pages and folders of a specific Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| parent_id | string | yes | The ID of the parent page whose children you want to retrieve |
| expand | string | no | Fields to expand in the response (e.g., 'version', 'body.storage') |
| limit | integer | no | Maximum number of child items to return (1-50) |
| include_content | boolean | no | Whether to include the page content in the response |
| convert_to_markdown | boolean | no | Whether to convert page content to markdown (true) or keep it in raw HTML format (false). Only relevant if include_content is true. |
| start | integer | no | Starting index for pagination (0-based) |
| include_folders | boolean | no | Whether to include child folders in addition to child pages |
Get page hierarchy for a Confluence space as a flat list. Returns pages with parent_id and depth attributes for token-efficient processing. Filter by depth to focus on relevant sections, or find pages by title. Much more efficient than rendering full ASCII trees. Use this to understand space organization before creating/moving pages.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_key | string | yes | Space key |
| limit | integer | no | Max pages to fetch |
Get comments for a specific Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | Confluence page ID (numeric ID, can be parsed from URL, e.g. from 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title' -> '123456789') |
Get labels for Confluence content (pages, blog posts, or attachments).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | Confluence content ID (page, blog post, or attachment). For pages: numeric ID from URL (e.g., '123456789'). For attachments: ID with 'att' prefix (e.g., 'att123456789'). Works with any Confluence cont |
Add label to Confluence content (pages, blog posts, or attachments). Useful for: - Categorizing attachments (e.g., 'screenshot', 'diagram', 'legal-doc') - Tracking status (e.g., 'approved', 'needs-review', 'archived') - Filtering content by topic or version
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | Confluence content ID to label. For pages/blogs: numeric ID (e.g., '123456789'). For attachments: ID with 'att' prefix (e.g., 'att123456789'). Use get_attachments to find attachment IDs. |
| name | string | yes | Label name to add (lowercase, no spaces). Examples: 'draft', 'reviewed', 'confidential', 'v1.0'. Labels help organize and categorize content. |
Create a new Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_key | string | yes | The key of the space to create the page in (usually a short uppercase code like 'DEV', 'TEAM', or 'DOC') |
| title | string | yes | The title of the page |
| content | string | no | The content of the page. Format depends on content_format parameter. Can be Markdown (default), wiki markup, storage format, or XHTML storage format. Either 'content' or 'content_file' must be provide |
| parent_id | string | no | (Optional) parent page ID. If provided, this page will be created as a child of the specified page |
| content_format | string | no | (Optional) The format of the content parameter. Options: 'markdown' (default), 'wiki', 'storage', or 'xhtml'. Use 'xhtml' when providing Confluence XHTML storage format (same as 'storage'). Wiki forma |
| enable_heading_anchors | boolean | no | (Optional) Whether to enable automatic heading anchor generation. Only applies when content_format is 'markdown' |
| include_content | boolean | no | (Optional) Whether to include page content in the response. Defaults to false since callers already have the content at create time |
| emoji | string | no | (Optional) Page title emoji (icon shown in navigation). Can be any emoji character like '📝', '🚀', '📚'. Set to null/None to remove. |
| content_file | string | no | (Optional) Absolute or relative filesystem path to read the page body from (UTF-8). Use this instead of 'content' when the body is too large to pass comfortably as a tool argument. Mutually exclusive |
| page_width | string | no | (Optional) Page layout width. Options: 'full-width', 'default'. Defaults to null (Confluence default). |
| table_layout | string | no | (Optional) Table width preset applied to all markdown tables. Options: 'full-width' (1800 px), 'wide' (960 px), 'default' (760 px). Only applies when content_format is 'markdown'. |
| subtype | string | no | (Optional) Confluence page subtype. Use 'live' to create a Confluence Live Doc. Only supported for Confluence Cloud. |
Update an existing Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to update |
| title | string | yes | The new title of the page |
| content | string | no | The new content of the page. Format depends on content_format parameter and may be Markdown (default), wiki markup, storage format, or XHTML storage format. Either 'content' or 'content_file' must be |
| is_minor_edit | boolean | no | Whether this is a minor edit |
| version_comment | string | no | Optional comment for this version |
| parent_id | string | no | Optional the new parent page ID |
| content_format | string | no | (Optional) The format of the content parameter. Options: 'markdown' (default), 'wiki', 'storage', or 'xhtml'. Use 'xhtml' when providing Confluence XHTML storage format (same as 'storage'). Wiki forma |
| enable_heading_anchors | boolean | no | (Optional) Whether to enable automatic heading anchor generation. Only applies when content_format is 'markdown' |
| include_content | boolean | no | (Optional) Whether to include page content in the response. Defaults to false since callers already have the content at update time |
| emoji | string | no | (Optional) Page title emoji (icon shown in navigation). Can be any emoji character like '📝', '🚀', '📚'. Set to null/None to remove. |
| content_file | string | no | (Optional) Absolute or relative filesystem path to read the new page body from (UTF-8). Use this instead of 'content' when the body is too large to pass comfortably as a tool argument. Mutually exclus |
| page_width | string | no | (Optional) Page layout width. Options: 'full-width', 'default'. Defaults to null (preserve existing). |
| table_layout | string | no | (Optional) Table width preset applied to all markdown tables. Options: 'full-width' (1800 px), 'wide' (960 px), 'default' (760 px). Only applies when content_format is 'markdown'. |
Update a single section of a Confluence page without affecting the rest. Replaces only the content beneath a named heading, leaving all other sections, macros, layouts, and Confluence-specific elements completely intact. This avoids the data loss that occurs when a full page is downloaded as Markdown, edited, and re-uploaded.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to update |
| heading_text | string | yes | Exact text of the heading that starts the section to replace. Matching is case-sensitive. Use confluence_get_page with convert_to_markdown=false to inspect exact heading text when unsure. |
| new_content | string | yes | Replacement content for the section body. Do NOT include the heading itself — only the body beneath it. Format is controlled by content_format. |
| content_format | string | no | (Optional) Format of new_content. Options: 'markdown' (default) or 'storage' (raw Confluence storage XML). Use 'storage' to insert macros or elements that markdown cannot express. |
| is_minor_edit | boolean | no | Whether this is a minor edit |
| version_comment | string | no | Optional comment for this version |
Delete an existing Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to delete |
Move a Confluence page to a new parent or space.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | ID of the page to move |
| target_parent_id | string | no | Target parent page ID. If omitted with target_space_key, moves to space root. |
| target_space_key | string | no | Target space key for cross-space moves |
| position | string | no | Position: 'append' (default, move as child of target), 'above' (move before target as sibling), or 'below' (move after target as sibling) |
Add a comment to a Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to add a comment to |
| body | string | yes | The comment content in Markdown format |
Reply to an existing comment thread on a Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| comment_id | string | yes | The ID of the parent comment to reply to |
| body | string | yes | The reply content in Markdown format |
Get all inline comments for a Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to get inline comments from |
Add an inline comment anchored to a text selection on a page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to add the inline comment to |
| body | string | yes | The comment content in Markdown format |
| text_selection | string | yes | The exact text on the page to anchor the inline comment to. Must match text that exists in the page content. |
| text_selection_match_count | integer | no | Total number of times the selected text appears on the page. Defaults to 1. |
| text_selection_match_index | integer | no | Zero-based index of which occurrence of the text to anchor to. Defaults to 0 (first occurrence). |
Search Confluence users using CQL (Cloud) or group member API (Server/DC).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Search query - a CQL query string for user search. Examples of CQL: - Basic user lookup by full name: 'user.fullname ~ "First Last"' Note: Special identifiers need proper quoting in CQL: personal spac |
| limit | integer | no | Maximum number of results (1-50) |
| group_name | string | no | Group to search within on Server/DC instances (default: 'confluence-users'). Ignored on Cloud. |
Get a historical version of a specific Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | Confluence page ID (numeric ID, can be found in the page URL). For example, in 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title', the page ID is '123456789'. |
| version | integer | yes | The version number of the page to retrieve |
| convert_to_markdown | boolean | no | Whether to convert page to markdown (true) or keep it in raw HTML format (false). Raw HTML can reveal macros (like dates) not visible in markdown, but CAUTION: using HTML significantly increases token |
Get a unified diff between two versions of a Confluence page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | Confluence page ID (numeric ID, can be found in the page URL). For example, in 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title', the page ID is '123456789'. |
| from_version | integer | yes | Source version number |
| to_version | integer | yes | Target version number |
Get view statistics for a Confluence page. Note: This tool is only available for Confluence Cloud. Server/Data Center instances do not support the Analytics API.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | Confluence page ID (numeric ID, can be found in the page URL). For example, in 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title', the page ID is '123456789'. |
| include_title | boolean | no | Whether to fetch and include the page title |
Upload an attachment to Confluence content (page or blog post). Provide the file either as a server-readable path ('file_path') or as base64-encoded content ('content_base64' together with 'filename'). The base64 form is intended for remote or containerized servers that cannot read host file paths. Exactly one of the two must be supplied. If the attachment already exists (same filename), a new v
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content_id | string | yes | The ID of the Confluence content (page or blog post) to attach the file to. Page IDs can be found in the page URL or by using the search/get_page tools. Example: '123456789' |
| file_path | string | no | Full path to the file to upload. Can be absolute (e.g., '/home/user/document.pdf' or 'C:\Users ame\file.docx') or relative to the current working directory (e.g., './uploads/document.pdf'). If a file |
| content_base64 | string | no | (Optional) Base64-encoded file content to upload directly, without the server reading from disk. Use this when the server cannot access host file paths (e.g. a remote or containerized MCP server). Req |
| filename | string | no | (Optional) Attachment filename, including extension (e.g. 'report.pdf'). Required when using 'content_base64'; it determines the attachment title and file type. Ignored when 'file_path' is used. |
| comment | string | no | (Optional) A comment describing this attachment or version. Visible in the attachment history. Example: 'Updated Q4 2024 figures' |
| minor_edit | boolean | no | (Optional) Whether this is a minor edit. If true, watchers are not notified. Default is false. |
Upload multiple attachments to Confluence content in a single operation. More efficient than calling upload_attachment multiple times. If files with the same names exist, new versions are created automatically. Useful for: - Bulk uploading documentation assets (diagrams, screenshots, etc.) - Adding multiple related files to a page at once - Batch updating existing attachments with new versions
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content_id | string | yes | The ID of the Confluence content (page or blog post) to attach files to. Example: '123456789'. If uploading multiple files with the same names, new versions will be created automatically. |
| file_paths | string | yes | Comma-separated list of file paths to upload. Can be absolute or relative paths. Examples: './file1.pdf,./file2.png' or 'C:\docs\report.docx,D:\image.jpg'. All files uploaded with same comment/minor_e |
| comment | string | no | (Optional) Comment for all uploaded attachments. Visible in version history. Example: 'Q4 2024 batch upload' |
| minor_edit | boolean | no | (Optional) Whether this is a minor edit. If true, watchers are not notified. Default is false. |
List all attachments for a Confluence content item (page or blog post). Returns metadata about attachments including: - Attachment ID, title, and file type - File size and download URL - Creation/modification dates - Version information Important: Confluence API returns 'application/octet-stream' as the media type for most binary files (PNG, JPG, PDF) instead of specific types like 'image/pn
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content_id | string | yes | The ID of the Confluence content (page or blog post) to list attachments for. Example: '123456789' |
| start | integer | no | (Optional) Starting index for pagination. Use 0 for the first page. To get the next page, add the 'limit' value to 'start'. Default: 0 |
| limit | integer | no | (Optional) Maximum number of attachments to return per request (1-100). Use pagination (start/limit) for large attachment lists. Default: 50 |
| filename | string | no | (Optional) Filter results to only attachments matching this filename. Exact match only. Example: 'report.pdf' |
| media_type | string | no | (Optional) Filter by MIME type. Note: Confluence API returns 'application/octet-stream' for most binary files (PNG, JPG, PDF) instead of specific MIME types like 'image/png'. For more reliable fil |
Download an attachment from Confluence as an embedded resource. Returns the attachment content as a base64-encoded embedded resource so that it is available over the MCP protocol without requiring filesystem access on the server. Files larger than 50 MB are not downloaded inline; a descriptive error message is returned instead.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| attachment_id | string | yes | The ID of the attachment to download (e.g., 'att123456789'). Find attachment IDs using get_attachments tool. Example workflow: get_attachments(content_id) → use returned ID here. |
Download all attachments for a Confluence content item as embedded resources. Returns attachment contents as base64-encoded embedded resources so that they are available over the MCP protocol without requiring filesystem access on the server. Files larger than 50 MB are skipped with an error entry in the summary.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content_id | string | yes | The ID of the Confluence content (page or blog post) to download attachments from. Example: '123456789' |
Permanently delete an attachment from Confluence. Warning: This action cannot be undone! The attachment and ALL its versions will be permanently deleted. Use this tool to: - Remove outdated or incorrect attachments - Clean up duplicate files - Delete sensitive information that was accidentally uploaded Best practices: - Verify the attachment ID before deletion using get_attachments - Consid
| Parameter | Type | Required | Notes |
|---|---|---|---|
| attachment_id | string | yes | The ID of the attachment to delete. Attachment IDs can be found using the get_attachments tool. Example: 'att123456789'. Warning: This permanently deletes the attachment and all its versions. |
Get all images attached to a Confluence page as inline image content. Filters attachments to images only (PNG, JPEG, GIF, WebP, SVG, BMP) and returns them as base64-encoded ImageContent that clients can render directly. Non-image attachments are excluded. Files with ambiguous MIME types (application/octet-stream) are detected by filename extension as a fallback. Images larger than 50 MB are skip
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content_id | string | yes | The ID of the Confluence page or blog post to retrieve images from. Example: '123456789' |
List Confluence page content templates. This operation is only available for Confluence Cloud. Returns template metadata (ID, name, description, type) without the full body. Use confluence_get_page_template to fetch a template's body.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_key | string | no | Optional space key to list templates defined in that space. When omitted, global templates are returned. |
| limit | integer | no | Maximum number of templates to return. |
Get a Cloud page template by ID, including its storage-format body.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| template_id | string | yes | The ID of the template to retrieve. |
Create a new Cloud page pre-populated with a template's body. This operation is only available for Confluence Cloud. Fetches the named template and creates a page with its storage-format content. The page can be edited afterwards via confluence_update_page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_key | string | yes | Key of the space in which to create the page. |
| title | string | yes | Title for the new page. |
| template_id | string | yes | ID of the template to use as the page body. |
| parent_id | string | no | Optional ID of the parent page. |
Get view and edit restrictions for a Confluence page. Returns the current restriction lists for the read (view) and update (edit) operations. An empty list means the page is unrestricted for that operation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page |
Set view and edit restrictions on a Confluence page. Replaces all existing restrictions with the provided lists. Omitting all parameters (or passing empty lists) removes all restrictions.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | string | yes | The ID of the page to restrict |
| read_users | array | no | (Optional) Account IDs (Cloud) or usernames (Server/DC) allowed to view the page. Empty list = unrestricted. |
| read_groups | array | no | (Optional) Group names allowed to view the page. |
| edit_users | array | no | (Optional) Account IDs (Cloud) or usernames (Server/DC) allowed to edit the page. |
| edit_groups | array | no | (Optional) Group names allowed to edit the page. |
Copy a Confluence page to a new location. On Confluence Cloud the native copy endpoint is used. On Server/Data Center the page body is fetched and a new page is created manually (attachments are not copied in the Server/DC path).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source_page_id | string | yes | The ID of the page to copy |
| destination_space_key | string | yes | Space key for the new page (e.g. 'DEV', 'TEAM') |
| new_title | string | yes | Title for the new copied page |
| destination_parent_id | string | no | (Optional) Parent page ID in the destination space. When omitted the page is created at the space root. |
| copy_attachments | boolean | no | (Optional) Whether to copy attachments to the new page. Defaults to true. Only supported on Confluence Cloud. |
Check whether a user or group can perform an operation on specific content. Wraps POST /wiki/rest/api/content/{id}/permission/check. Note: This tool is only available for Confluence Cloud. Server/Data Center instances use different permission APIs. Returns a JSON object with a 'hasPermission' boolean indicating whether the subject has the requested permission on the content.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content_id | string | yes | Confluence content ID (page, blog post, comment, or attachment). Example: '123456789' |
| user_identifier | string | yes | Account ID of the user (for subject_type='user') or group ID (for subject_type='group'). Example user account ID: '5b10a2844c20165700ede21g' |
| operation | string | yes | The operation to check. Common values: 'read', 'update', 'delete', 'export', 'purge', 'administer', 'create_or_delete_from_view'. |
| subject_type | string | no | Whether the subject is a 'user' or a 'group'. Defaults to 'user'. |
List all permission assignments for a Confluence space. Wraps GET /wiki/api/v2/spaces/{id}/permissions. Note: This tool is only available for Confluence Cloud. Server/Data Center instances use different permission APIs. Returns a JSON object with a 'results' list of permission assignment objects. Each entry contains the principal (user or group), the operation permitted, and the target. Use thi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_id | string | yes | Numeric ID of the Confluence space. This is the internal space ID, not the space key. Example: '98304'. You can find the space ID from the Confluence REST API (GET /wiki/api/v2/spaces) or from the spa |
| limit | integer | no | Maximum number of permission entries to return. Defaults to 25. |
| cursor | string | no | Optional pagination cursor from a previous response. |
- 50,000 calls a month, included
- 120 calls a minute at peak
- Every tool the listing has
- Cancel any time — the unused days are credited
- Runs behind the gateway, so cancelling stops it
What counts against the 50,000 calls a month on Starter
| Tool | Unit | Calls used | Out of the monthly allowance |
|---|---|---|---|
| jira_get_user_profile | call | 1 | 0.0020% |
| jira_search_assignable_users | call | 1 | 0.0020% |
| jira_get_issue_watchers | call | 1 | 0.0020% |
| jira_add_watcher | write | 2 | 0.0040% |
| jira_remove_watcher | write | 2 | 0.0040% |
| jira_get_issue | call | 1 | 0.0020% |
| jira_search | call | 1 | 0.0020% |
| jira_search_fields | call | 1 | 0.0020% |
Failed calls, timeouts and anything the gateway rejects never count. When the allowance runs out the gateway returns an error naming the plan limit — nothing is billed beyond the subscription, ever.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| verification-discount | none | publisher verification (unlinked) — no provenance/repo link, but the shipped source was fully read | −2 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (96 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| search | no tags | |
| get_page | untrusted-input | untrusted-input: keyword "get_page" |
| get_page_children | untrusted-input | untrusted-input: keyword "get_page" |
| get_space_page_tree | untrusted-input | untrusted-input: keyword "fetch" |
| get_comments | no tags | |
| get_labels | no tags | |
| get_inline_comments | no tags | |
| search_user | no tags | |
| get_page_history | untrusted-input | untrusted-input: keyword "get_page" |
| get_page_diff | untrusted-input | untrusted-input: keyword "get_page" |
| get_page_views | untrusted-input | untrusted-input: keyword "get_page" |
| get_attachments | untrusted-input | untrusted-input: keyword "download" |
| download_attachment | untrusted-input | untrusted-input: keyword "download" |
| download_content_attachments | untrusted-input | untrusted-input: keyword "download" |
| get_page_images | untrusted-input | untrusted-input: keyword "get_page" |
| list_page_templates | untrusted-input | untrusted-input: keyword "fetch" |
| get_page_template | untrusted-input | untrusted-input: keyword "get_page" |
| get_page_restrictions | untrusted-input | untrusted-input: keyword "get_page" |
| check_content_permissions | no tags | |
| get_space_permissions | no tags | |
| add_label | no tags | |
| create_page | no tags | |
| update_page | state-write | state-write: declares destructiveHint: true |
| update_page_section | state-write | state-write: declares destructiveHint: true |
| delete_page | state-write | state-write: declares destructiveHint: true |
| move_page | state-write | state-write: declares destructiveHint: true |
| add_comment | no tags | |
| reply_to_comment | no tags | |
| add_inline_comment | state-write | state-write: declares destructiveHint: true |
| upload_attachment | state-write | state-write: declares destructiveHint: true |
| upload_attachments | state-write | state-write: declares destructiveHint: true |
| delete_attachment | state-write | state-write: declares destructiveHint: true |
| create_page_from_template | no tags | |
| set_page_restrictions | state-write | state-write: declares destructiveHint: true |
| copy_page | state-write | state-write: declares destructiveHint: true |
| get_user_profile | no tags | |
| search_assignable_users | no tags | |
| get_issue_watchers | no tags | |
| get_issue | no tags | |
| search_fields | no tags | |
| get_field_options | no tags | |
| get_project_issues | no tags | |
| get_transitions | no tags | |
| get_worklog | no tags | |
| download_attachments | untrusted-input | untrusted-input: keyword "download" |
| get_issue_images | no tags | |
| get_agile_boards | no tags | |
| get_board_issues | no tags | |
| get_sprints_from_board | no tags | |
| get_sprint_issues | no tags | |
| get_link_types | no tags | |
| batch_get_changelogs | no tags | |
| get_project_issue_types | no tags | |
| get_create_fields | no tags | |
| get_project_versions | no tags | |
| get_project_components | no tags | |
| get_all_projects | no tags | |
| search_projects | no tags | |
| get_project_fields | no tags | |
| get_service_desk_for_project | no tags | |
| get_service_desk_queues | no tags | |
| get_queue_issues | no tags | |
| get_request_types | no tags | |
| get_request_type_fields | no tags | |
| get_issue_proforma_forms | no tags | |
| get_proforma_form_details | no tags | |
| get_issue_dates | no tags | |
| get_issue_sla | no tags | |
| get_issue_development_info | no tags | |
| get_issues_development_info | no tags | |
| get_project_epic_hierarchy | untrusted-input | untrusted-input: keyword "fetch" |
| get_cross_project_dependencies | no tags | |
| add_watcher | no tags | |
| remove_watcher | state-write | state-write: declares destructiveHint: true |
| create_issue | external-sink | external-sink: keyword "create_issue" |
| batch_create_issues | external-sink | external-sink: keyword "create_issue" |
| update_issue | state-write | state-write: declares destructiveHint: true |
| assign_issue | state-write | state-write: declares readOnlyHint: false |
| delete_issue | state-write | state-write: declares destructiveHint: true |
| move_issue | state-write | state-write: declares destructiveHint: true |
| edit_comment | state-write | state-write: declares destructiveHint: true |
| add_worklog | state-write | state-write: declares destructiveHint: true |
| link_to_epic | state-write | state-write: declares destructiveHint: true |
| create_issue_link | external-sink | external-sink: keyword "create_issue" |
| create_remote_issue_link | no tags | |
| remove_issue_link | state-write | state-write: declares destructiveHint: true |
| transition_issue | state-write | state-write: declares destructiveHint: true |
| create_sprint | no tags | |
| update_sprint | state-write | state-write: declares destructiveHint: true |
| add_issues_to_sprint | state-write | state-write: declares destructiveHint: true |
| move_issues_to_backlog | state-write | state-write: declares readOnlyHint: false |
| create_customer_request | state-write | state-write: declares destructiveHint: true |
| create_version | no tags | |
| batch_create_versions | no tags | |
| update_version | state-write | state-write: declares destructiveHint: true |
| update_proforma_form_answers | state-write | state-write: declares destructiveHint: true |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
The gateway serves every install the publisher’s current release, so a release cannot be pinned or rolled back to here yet. The history below is for reading; the current release on file is 0.1.0.
- The version this listing went live with, after review.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Atlassian Cloud can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.