Skip to main content
Glama
vish288

mcp-atlassian-extended

by vish288

mcp-atlassian-extended

PyPI version PyPI downloads Python License: MIT CI MCP Registry

Install: uvx mcp-atlassian-extended | PyPI | MCP Registry | Changelog

uvx mcp-atlassian-extended                          # with writes
MCP_READ_ONLY=true uvx mcp-atlassian-extended       # locked read-only: write tools are not listed

mcp-atlassian-extended is a Model Context Protocol (MCP) server for Jira and Confluence. It gives an AI assistant 22 tools, 15 resources, and 5 prompts for Jira and Confluence work. The tools create and update issues with custom fields, link issues, manage attachments, and search users. They also run agile boards and sprints, track project versions (API v2), read team calendars, and plan sprint capacity. It extends mcp-atlassian with zero tool overlap. Runs in one of two modes: with writes, or locked read-only (MCP_READ_ONLY=true) so the 10 write tools are never offered to the model.

The server supports the MCP 2026-07-28 specification (often called MCP 2.0) and stays compatible with 2025-11-25 clients. It works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible client.

The server supports Jira Cloud, Jira Data Center, Confluence Cloud, and Confluence Data Center (self-hosted). It needs no Atlassian Premium plan.

Built with FastMCP, httpx, and Pydantic.

Protocol support

  • The server implements the MCP 2026-07-28 specification, often called MCP 2.0.

  • It stays compatible with 2025-11-25 clients.

  • Transports: stdio (default) and streamable-http (recommended for remote clients). The sse transport still works, but the 2026-07-28 specification deprecates it, so the server prints a warning.

  • The server uses no roots, sampling, logging, elicitation, or resource subscriptions. The 2026-07-28 deprecations do not affect it.

  • Built on FastMCP 4.x and the MCP Python SDK 2.x.

Error results

Expected failures — a 404, a 401/403, a read-only refusal, an invalid argument — come back as a tool result with isError: true, so an MCP client sees the failure instead of a result that merely happens to contain the word error. The result body is the same {"error": …, "hint": …} object as before, with status_code and body when the failure came from the API; the hint names the fix. This object is the result's text content; structuredContent is not set, because a strict MCP client validates structuredContent against the tool's output schema even when isError is true, and the error envelope does not match it. Genuine bugs are still raised as protocol-level tool errors and logged with a traceback.

On success, a tool carries the same pretty-printed JSON as its text content and that JSON object as structuredContent — the pre-2.0 {"result": "<json string>"} wrapper is gone (a payload that is a JSON array, such as a multi-file upload response, carries text only, since structuredContent must be an object). Tools advertise no outputSchema: upstream fields pass through untyped, and a typed schema is opt-in per tool via output_schema= on @mcp.tool(...) when a client needs one.

Related MCP server: atlassian-mcp

Relationship to mcp-atlassian

This project runs alongside mcp-atlassian, not as a replacement. Configure both servers:

  • mcp-atlassian handles: issues, search, transitions, comments, worklog, pages, Confluence search

  • mcp-atlassian-extended handles: attachments, agile, users, fields, versions (API v2), calendars, time-off

There is no tool overlap — this server only implements tools that mcp-atlassian lacks.

1-Click Installation

Install in Cursor

Install in VS Code Install in VS Code Insiders

💡 Tip: For other AI assistants (Claude Code, Windsurf, IntelliJ, Gemini CLI), visit the Atlassian Extended MCP Installation Gateway.

Prerequisite: Install uv first (required for all uvx install flows). Install uv.

Claude Code

# with writes
claude mcp add atlassian-extended \
  -e JIRA_URL=https://your-company.atlassian.net -e JIRA_USERNAME=your.email@company.com -e JIRA_API_TOKEN=your_api_token \
  -- uvx mcp-atlassian-extended
# locked read-only: write tools are not listed
claude mcp add atlassian-extended -e MCP_READ_ONLY=true \
  -e JIRA_URL=https://your-company.atlassian.net -e JIRA_USERNAME=your.email@company.com -e JIRA_API_TOKEN=your_api_token \
  -- uvx mcp-atlassian-extended

Windsurf & IntelliJ

Windsurf: Add to ~/.codeium/windsurf/mcp_config.json IntelliJ: Add to Settings | Tools | MCP Servers

Note: The actual server config starts at atlassian-extended inside the mcpServers object. Remove MCP_READ_ONLY to allow writes.

{
  "mcpServers": {
    "atlassian-extended": {
      "command": "uvx",
      "args": ["mcp-atlassian-extended"],
      "env": {
        "JIRA_URL": "https://your-company.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your_api_token",
        "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
        "CONFLUENCE_USERNAME": "your.email@company.com",
        "CONFLUENCE_API_TOKEN": "your_api_token",
        "MCP_READ_ONLY": "true"
      }
    }
  }
}

Gemini CLI

# with writes
gemini mcp add -s user -e JIRA_URL=https://your-company.atlassian.net -e JIRA_USERNAME=your.email@company.com -e JIRA_API_TOKEN=your_api_token -e CONFLUENCE_URL=https://your-company.atlassian.net/wiki -e CONFLUENCE_USERNAME=your.email@company.com -e CONFLUENCE_API_TOKEN=your_api_token atlassian-extended uvx mcp-atlassian-extended
# locked read-only
gemini mcp add -s user -e MCP_READ_ONLY=true -e JIRA_URL=https://your-company.atlassian.net -e JIRA_USERNAME=your.email@company.com -e JIRA_API_TOKEN=your_api_token -e CONFLUENCE_URL=https://your-company.atlassian.net/wiki -e CONFLUENCE_USERNAME=your.email@company.com -e CONFLUENCE_API_TOKEN=your_api_token atlassian-extended uvx mcp-atlassian-extended

VS Code

Add to .vscode/mcp.json. Remove MCP_READ_ONLY to allow writes.

{
  "servers": {
    "atlassian-extended": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-atlassian-extended"],
      "env": {
        "JIRA_URL": "https://your-company.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your_api_token",
        "MCP_READ_ONLY": "true"
      }
    }
  }
}

Codex

# with writes
codex mcp add atlassian-extended --env JIRA_URL=https://your-company.atlassian.net --env JIRA_USERNAME=your.email@company.com --env JIRA_API_TOKEN=your_api_token -- uvx mcp-atlassian-extended
# locked read-only
codex mcp add atlassian-extended --env MCP_READ_ONLY=true --env JIRA_URL=https://your-company.atlassian.net --env JIRA_USERNAME=your.email@company.com --env JIRA_API_TOKEN=your_api_token -- uvx mcp-atlassian-extended

pip / uv

uv pip install mcp-atlassian-extended

Drop MCP_READ_ONLY to allow writes. On a shared or hosted server put it in the deployer's env, not the client config.

Configuration

Jira Cloud (Basic Auth)

Variable

Required

Default

Description

JIRA_URL

Yes

-

Jira instance URL (e.g. https://your-company.atlassian.net)

JIRA_USERNAME

Yes

-

Email address for Jira Cloud

JIRA_API_TOKEN

Yes

-

API token from id.atlassian.com/manage-profile/security/api-tokens

Jira Data Center / Self-Hosted (Bearer Token)

Variable

Required

Default

Description

JIRA_URL

Yes

-

Jira instance URL

JIRA_PAT

Yes

-

Personal access token (see fallback order below)

The server checks these environment variables in order — first match wins:

  1. JIRA_PAT

  2. JIRA_PERSONAL_TOKEN

  3. JIRA_TOKEN

Basic auth wins. If you set both JIRA_USERNAME and JIRA_API_TOKEN, the server uses Basic auth and ignores any personal access token. The server uses Bearer auth only when the Cloud pair is incomplete. To force Bearer, unset JIRA_USERNAME and JIRA_API_TOKEN.

Confluence Cloud (Basic Auth)

Variable

Required

Default

Description

CONFLUENCE_URL

Yes

-

Confluence URL (e.g. https://your-company.atlassian.net/wiki)

CONFLUENCE_USERNAME

Yes

-

Email address for Confluence Cloud

CONFLUENCE_API_TOKEN

Yes

-

API token (same as Jira if same Atlassian account)

Confluence Data Center / Self-Hosted (Bearer Token)

Variable

Required

Default

Description

CONFLUENCE_URL

Yes

-

Confluence instance URL

CONFLUENCE_PAT

Yes

-

Personal access token (see fallback order below)

The server checks these environment variables in order — first match wins:

  1. CONFLUENCE_PAT

  2. CONFLUENCE_PERSONAL_TOKEN

  3. CONFLUENCE_TOKEN

Basic auth wins here too: CONFLUENCE_USERNAME + CONFLUENCE_API_TOKEN take precedence over any personal access token.

All Confluence calendar tools require the Team Calendars add-on (/rest/calendar-services/1.0/). On instances without it every calendar tool returns a 404 with a hint naming the add-on.

Optional settings

Variable

Default

Description

MCP_READ_ONLY

false

Shared name across the mcp-* servers. Any value other than false/0/no/off/empty locks the server read-only: the 10 write tools and write-workflow prompts are not listed, and nothing can turn it back off at runtime

ATLASSIAN_READ_ONLY

false

Per-server alias for MCP_READ_ONLY; either one locks the server read-only. --read-only can only raise the lock

ATLASSIAN_HTTP_BEARER_TOKEN

-

Bearer token (min 16 chars) required to bind an HTTP transport to a non-loopback host; clients send Authorization: Bearer <token>

ATLASSIAN_UPLOAD_DIR

working directory

Only files under this directory may be uploaded (jira_upload_attachment). A relative value is resolved against the working directory.

ATLASSIAN_DOWNLOAD_DIR

./atlassian-downloads

Where jira_download_attachment writes. Created on first download.

JIRA_TIMEOUT

30

HTTP request timeout for Jira in seconds

JIRA_SSL_VERIFY

true

Set to false to skip SSL verification for Jira

CONFLUENCE_TIMEOUT

30

HTTP request timeout for Confluence in seconds

CONFLUENCE_SSL_VERIFY

true

Set to false to skip SSL verification for Confluence

Compatibility

Client

Supported

Install Method

Claude Desktop

Yes

claude_desktop_config.json

Claude Code

Yes

claude mcp add

Cursor

Yes

One-click deeplink or .cursor/mcp.json

Windsurf

Yes

~/.codeium/windsurf/mcp_config.json

VS Code Copilot

Yes

.vscode/mcp.json

Any MCP client

Yes

stdio or HTTP transport

Tools (22)

Category

Count

Tools

Jira Issues

2

create (with custom fields; issue_type="Epic" for epics), update (with custom fields)

Jira Links

2

create link, delete link

Jira Attachments

4

get, upload, download, delete

Jira Users

1

search by name/email

Jira Metadata

3

list projects, list fields, backlog

Jira Agile

4

get board, board config, get sprint, move to sprint

Jira Versions

3

get project versions, create version, update version

Confluence Calendars

3

list (type/search filter), time-off (date range, per-person), sprint capacity

Jira Issues

Tool

Description

jira_create_issue

Create issue with standard and custom fields (issue_type="Epic" creates an epic)

jira_update_issue

Update issue fields and custom fields

Tool

Description

jira_create_link

Create a link between two issues (Relates, Blocks, etc.)

jira_delete_link

Delete an issue link by ID

Jira Attachments

Tool

Description

jira_get_attachments

List attachments on an issue

jira_upload_attachment

Upload file to issue

jira_download_attachment

Download attachment to local file

jira_delete_attachment

Delete an attachment

Jira Users

Tool

Description

jira_search_users

Search users by name/email

Jira Metadata

Tool

Description

jira_list_projects

List all accessible projects

jira_list_fields

List fields (with search/custom filter)

jira_backlog

Get backlog issues for a board

Jira Agile

Tool

Description

jira_get_board

Get board details

jira_board_config

Get board column configuration

jira_get_sprint

Get sprint details

jira_move_to_sprint

Move issues to a sprint

Jira Versions

Tool

Description

jira_get_project_versions

List all versions for a project (REST API v2, Server/DC + Cloud)

jira_create_version

Create a new version in a project (REST API v2)

jira_update_version

Update an existing version (REST API v2)

Confluence Calendars

Tool

Description

confluence_list_calendars

List calendars; optional filter_type and name/space search

confluence_get_time_off

Time-off events for a date range; optional person (exact match) and group_by_person

confluence_sprint_capacity

Calculate sprint capacity with time-off

Resources (15)

The server exposes curated Jira and Confluence workflow guides as MCP resources.

URI

Name

Description

resource://rules/jira-hierarchy

Jira Issue Hierarchy

Epic/story/task/subtask relationships, when to use each level

resource://rules/jira-ticket-writing

Jira Ticket Writing Standards

Summary format, description structure, acceptance criteria placement

resource://rules/acceptance-criteria

Acceptance Criteria Standards

Given/When/Then format, testability, DoD vs AC

resource://rules/sprint-hygiene

Sprint Hygiene Rules

Capacity planning, carryover policy, sprint goals, retrospective items

resource://rules/jira-workflow

Jira Workflow & Automation

Status transitions, automation triggers, post-functions

resource://rules/issue-linking

Issue Linking Best Practices

Link types (blocks, relates, duplicates), cross-project links, epic links

resource://guides/story-points

Story Point Estimation

Fibonacci scale, relative sizing, team calibration, anti-patterns

resource://guides/definition-of-done

Definition of Done Checklists

Checklist format, team-level vs org-level DoD, verification steps

resource://guides/jira-labels

Jira Label Taxonomy

Naming conventions, label categories, label vs component

resource://guides/jql-library

JQL Query Library

Common queries, date functions, custom field syntax, saved filters

resource://guides/custom-fields

Jira Custom Field Governance

Field types, screen schemes, context, naming standards

resource://guides/confluence-spaces

Confluence Space Organization

Space types, permission schemes, archiving, templates

resource://guides/agile-ceremonies

Agile Ceremony Standards

Standup, planning, review, retro formats and time-boxing

resource://guides/git-jira-integration

Git-Jira Integration Patterns

Smart commits, branch naming, PR linking, status transitions

resource://templates/confluence-pages

Confluence Page Templates

ADR, runbook, onboarding, postmortem page structures

Prompts (5)

The server provides MCP prompts — reusable multi-tool workflow templates that clients can surface as slash commands.

Prompt

Parameters

Workflow

create_ticket

project_key, issue_type

Gather fields → set custom fields (DoD, privacy, security) → create → add links

plan_sprint

board_id, sprint_id

Check sprint → review backlog → calculate capacity → suggest scope → move issues

close_ticket

issue_key

Verify DoD → check linked MR → transition statuses → add closing comment

team_availability

team_members, start_date, end_date

Check who is out → per-person time-off → calculate capacity → flag conflicts

manage_attachments

issue_key

List attachments → identify stale/duplicates → upload/download → clean up

Usage Examples

Issue Management

"Create a story in PROJ with custom story points"
→ jira_create_issue(project_key="PROJ", summary="Add OAuth login", issue_type="Story",
    custom_fields={"customfield_10004": 5})

"Update a ticket's priority and add labels"
→ jira_update_issue(issue_key="PROJ-123", fields={"priority": {"name": "High"}, "labels": ["urgent"]})

"Create an epic and link related stories"
→ jira_create_issue(project_key="PROJ", summary="Q1 Auth Overhaul", issue_type="Epic")
→ jira_create_link(link_type="Relates", inward_issue="PROJ-100", outward_issue="PROJ-200")

Attachments

"List attachments on PROJ-123"
→ jira_get_attachments(issue_key="PROJ-123")

"Upload a screenshot to a ticket"
→ jira_upload_attachment(issue_key="PROJ-123", file_path="./screenshot.png")

"Download an attachment"
→ jira_download_attachment(content_url="https://jira.example.com/rest/api/2/attachment/content/456",
    save_path="report.pdf")  # lands in ./atlassian-downloads/report.pdf (or ATLASSIAN_DOWNLOAD_DIR)

Agile & Sprint Management

"Get the current sprint for board 42"
→ jira_get_board(board_id=42) → jira_get_sprint(sprint_id=7)

"Move tickets into the next sprint"
→ jira_move_to_sprint(sprint_id=8, issue_keys=["PROJ-1", "PROJ-2", "PROJ-3"])

"View backlog for board 42"
→ jira_backlog(board_id=42, max_results=50)

Version Management

"List versions for project PROJ"
→ jira_get_project_versions(project_key="PROJ")

"Create a new release version"
→ jira_create_version(project_key="PROJ", name="v2.0.0", release_date="2026-04-01")

"Mark version as released"
→ jira_update_version(version_id="200", released=True)

Time-Off & Sprint Capacity

"Who is out today?"
→ confluence_get_time_off(start_date="today", end_date="today", group_by_person=True)

"Get team time-off for the next two weeks"
→ confluence_get_time_off(start_date="today", end_date="+14d", group_by_person=True)

"Calculate sprint capacity accounting for PTO"
→ confluence_sprint_capacity(
    team_members=["Alice", "Bob", "Carol"],
    sprint_start="2025-03-03", sprint_end="2025-03-14")

Security Considerations

  • Token scope: For Jira Cloud, use API tokens scoped to the minimum required permissions. For Data Center, use PATs with project-level access.

  • Read-only mode: Set MCP_READ_ONLY=true (or ATLASSIAN_READ_ONLY=true) in the launch you control and the server starts locked: the 10 write tools and the write-workflow prompts are not listed, a call to one returns "Unknown tool", and the guard refuses any write that still reaches it. Nothing lifts the lock at runtime — not a false from another source, not a .env file, not tool arguments; any value other than false/0/no/off/empty locks, and --read-only can only raise it. The lock is only as strong as the launch: set it where users cannot edit it (a managed MCP config such as Claude Code managed-mcp.json, a container, k8s or systemd env, or a hosted HTTP deployment). A user who starts the server themselves controls its environment. All write tools are Jira tools; the Confluence tools are read-only in both modes.

  • HTTP transport auth: An HTTP transport (--transport streamable-http/sse) serves every tool with the configured Atlassian credentials to anyone who reaches the port, so a non-loopback bind requires a shared bearer token. Set ATLASSIAN_HTTP_BEARER_TOKEN (≥ 16 chars; openssl rand -hex 32) and clients send it as Authorization: Bearer <token>; the token is compared in constant time. Without it the server refuses to start on any host other than 127.0.0.1/localhost/::1. The server also validates the Host/Origin header on HTTP requests (host_origin_protection="auto") so a DNS-rebinding page cannot drive a loopback-bound server.

  • Upload root restriction: jira_upload_attachment only reads files inside the upload root — ATLASSIAN_UPLOAD_DIR if set, otherwise the working directory. The path is resolved (following symlinks) before the containment check, so a symlink pointing outside the root is rejected; dotfiles and dot-directories below the root are refused. Size is capped at 100 MB.

  • Download directory restriction: jira_download_attachment writes only into the download directory (ATLASSIAN_DOWNLOAD_DIR, default ./atlassian-downloads/, created on first use). save_path must be a bare file name — directories, absolute paths and dotfiles are rejected, not silently stripped. Existing files are never overwritten: a -1, -2 numeric suffix is added and the final path is returned. The downloaded body is capped at 100 MB, mirroring the upload cap. Add atlassian-downloads/ to your project's .gitignore.

  • Desktop-client caveat: clients such as Claude Desktop launch stdio servers with a working directory of / or $HOME, which makes most of the filesystem the upload root (dotfiles excepted). Set ATLASSIAN_UPLOAD_DIR (and, if you like, ATLASSIAN_DOWNLOAD_DIR) explicitly for such clients.

  • Migration (0.11 → 0.12): uploads are now restricted to ATLASSIAN_UPLOAD_DIR (default: the server's working directory) and dotfiles are refused — if your client uploads from ~/Downloads, set ATLASSIAN_UPLOAD_DIR=~/Downloads. Downloads now land in ./atlassian-downloads/ (or ATLASSIAN_DOWNLOAD_DIR) instead of the working directory, save_path is a file name only, and existing files are never overwritten.

  • Download URL validation: The server validates each attachment download URL against the configured Jira URL domain to prevent SSRF.

  • SSL verification: The server enables SSL verification by default for Jira and Confluence. Disable it only for self-signed certificates in trusted networks.

  • MCP tool annotations: Each tool declares readOnlyHint, destructiveHint, and idempotentHint for client-side permission prompts.

  • No credential storage: The server reads tokens from environment variables at startup. It never stores them.

Rate Limits & Permissions

Rate Limits

Jira Cloud enforces per-user rate limits. When rate-limited, tools return a 429 error with a hint to wait. Confluence Calendar API calls may be slower due to the Team Calendars plugin architecture.

Required Permissions

Operation

Minimum Jira Permission

List projects, fields, boards

Browse Projects

Search users

Browse Users

Create/update issues, epics

Create Issues + Edit Issues

Create/delete issue links

Link Issues

Upload/delete attachments

Create Attachments + Delete Own Attachments

Move issues to sprint

Manage Sprints

Create/update versions

Administer Projects

Confluence calendars/time-off

View space content

CLI & Transport Options

# Default: stdio transport (for MCP clients)
uvx mcp-atlassian-extended

# HTTP transport. Use streamable-http for remote clients.
uvx mcp-atlassian-extended --transport streamable-http --port 9000

# A non-loopback HTTP bind requires a shared bearer token (>= 16 chars).
# Clients send it as "Authorization: Bearer <token>".
ATLASSIAN_HTTP_BEARER_TOKEN=$(openssl rand -hex 32) \
  uvx mcp-atlassian-extended --transport streamable-http --host 0.0.0.0 --port 9000

# sse still works, but the MCP 2026-07-28 spec deprecates it. The server prints a warning.
uvx mcp-atlassian-extended --transport sse --host 127.0.0.1 --port 8000

# CLI overrides for config
JIRA_PAT=xxx uvx mcp-atlassian-extended --jira-url https://jira.example.com --read-only

The --jira-token, --jira-api-token, --confluence-token and --confluence-api-token flags still work but are deprecated and hidden from --help: they expose the token to ps and shell history. Set JIRA_PAT / JIRA_API_TOKEN / CONFLUENCE_PAT / CONFLUENCE_API_TOKEN instead.

The server loads .env files from the working directory automatically via python-dotenv.

Partial configuration: You configure Jira and Confluence independently. Set either or both. The server always advertises all 22 tools. A tool for an unconfigured product returns a "not configured" error that names the variables to set. The server does not fail at startup.

Docker

A minimal non-root image is provided. The image defaults to locked read-only (MCP_READ_ONLY=true); pass -e MCP_READ_ONLY=false to allow writes.

docker build -t mcp-atlassian-extended .
docker run --rm -i \
  -e JIRA_URL=https://your-company.atlassian.net \
  -e JIRA_USERNAME=your.email@company.com -e JIRA_API_TOKEN=your_api_token \
  mcp-atlassian-extended

The entry point is the mcp-atlassian-extended command; pass CLI flags after the image name. For an HTTP transport on a published port, also set ATLASSIAN_HTTP_BEARER_TOKEN and run with --transport streamable-http --host 0.0.0.0.

FAQ

Does it support the MCP 2026-07-28 spec (MCP 2.0)?

Yes. It implements the MCP 2026-07-28 specification (MCP 2.0) and stays compatible with 2025-11-25 clients.

Which transports does it support?

It supports stdio (the default) and streamable-http (recommended for remote clients). The sse transport still works, but the 2026-07-28 specification deprecates it.

Can I run mcp-atlassian-extended read-only so the assistant cannot change anything?

Yes. Start it with MCP_READ_ONLY=true (or ATLASSIAN_READ_ONLY=true). The 10 write tools and the write-workflow prompts are then not listed at all, so the model never sees them; a call to one returns "Unknown tool", and nothing can turn writes back on while the process runs. Set it in a launch you control — a managed MCP config, a container or systemd env, or a hosted deployment — because a user who starts the server themselves can start it without the variable.

Does it work with self-hosted Jira and Confluence?

Yes. It supports Jira Cloud, Jira Data Center, Confluence Cloud, and Confluence Data Center. It uses the Jira REST API v2, which works on both Cloud and Server/Data Center.

What permissions and token scopes does it need?

It needs a Jira API token (Cloud) or a personal access token (Data Center). Each operation needs the matching Jira permission. See Required Permissions.

Does it replace mcp-atlassian?

No. It runs alongside mcp-atlassian with zero tool overlap. mcp-atlassian handles core search and CRUD. This server adds attachments, agile boards, versions, and calendars.

Do the Confluence tools need an add-on?

Yes. The three Confluence calendar tools need the Team Calendars add-on. Without it, they return a 404 with a hint that names the add-on.

How many tools does it provide?

It provides 22 tools, 15 resources, and 5 prompts for Jira and Confluence.

  • mcp-gitlab — GitLab integration (83 tools, 7 resources, 6 prompts)

  • mcp-coda — Coda integration (53 tools, 12 resources, 5 prompts)

  • mcp-argocd — Argo CD integration (37 tools, 7 resources, 7 prompts)

Attribution

Inspired by mcp-atlassian by sooperset. Architecture and patterns follow similar conventions.

Development

git clone https://github.com/vish288/mcp-atlassian-extended.git
cd mcp-atlassian-extended
uv sync --all-extras

uv run pytest --cov
uv run ruff check .
uv run ruff format --check .

License

MIT

Available Tools

22 tools
confluence_get_time_offConfluence Get Time OffA
Read-onlyIdempotent

Get time-off events for a date range across all leave calendars.

Pass person for one person's events, or a single day for start_date and end_date to see who is out on that day.

ParametersJSON Schema
NameRequiredDescriptionDefault
personNoReturn only this person's events (exact, case-insensitive name match)
end_dateYesEnd date (YYYY-MM-DD, 'today', '+14d', etc.)
start_dateYesStart date (YYYY-MM-DD, 'today', '+14d', etc.)
calendar_nameNoFilter by calendar name
group_by_personNoGroup results by person

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds the meaningful scope fact that the search spans ALL leave calendars, but says nothing about matching semantics, pagination, or what happens when a person name matches nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core capability before the optional query patterns. No filler, no repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the annotations carry the safety profile. The description covers the two main query modes but is silent on the calendar_name and group_by_person options, leaving minor gaps that the schema fills.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented, including the exact case-insensitive name match for 'person' and the relative date formats. The description only restates the person and single-day usage, adding little beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), resource ('time-off events'), scope ('across all leave calendars') and the date-range constraint, which cleanly separates it from confluence_list_calendars and confluence_sprint_capacity. It does not explicitly name or contrast with those siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives concrete query patterns (filter by person, or query a single day to see who is out), which is useful implied usage guidance. However, it offers no when-to-use vs when-not-to-use framing and never mentions the alternative siblings (e.g., list calendars first to discover calendar names).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confluence_list_calendarsConfluence List CalendarsA
Read-onlyIdempotent

List Confluence calendars, optionally narrowed by type or a name/space search.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter by calendar name, space name, or space key (case-insensitive)
filter_typeNoFilter by calendar type (e.g. 'leaves')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety and side-effect profile is covered. The description adds only the optional-filtering behavior, with no note on result scope, pagination, or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the action, resource, and modifiers with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-optional-parameter list tool with an output schema and full annotation coverage, the description is essentially complete; only richer behavioral detail (result scope/limits) is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both filters are fully documented in the schema. The description's mention of 'type' and 'name/space search' mirrors the schema without adding syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('Confluence calendars') plus the narrowing options. It is distinct from the Jira siblings, but does not explicitly differentiate itself from the nearby confluence_get_time_off or confluence_sprint_capacity tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'optionally narrowed by type or a name/space search' implies when the filters are useful, but there is no explicit when-to-use/when-not or pointer to an alternative tool for broader or different calendar queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confluence_sprint_capacityConfluence Sprint CapacityB
Read-onlyIdempotent

Calculate sprint capacity considering team time-off.

ParametersJSON Schema
NameRequiredDescriptionDefault
sprint_endYesSprint end date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week'
sprint_startYesSprint start date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week'
team_membersYesFull names exactly as they appear on the calendar
working_days_per_weekNoWorking days per week

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and open-world behavior. The description adds that it factors in team time-off, which is a useful behavioral hint, but it does not cover return format, permissions, or how time-off data is sourced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero wasted words. It is efficient, though arguably too minimal for a multi-parameter tool, but it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema (100% coverage), output schema, and annotations, the description is adequate but thin. It omits any usage context or behavioral details beyond the annotations, leaving some inference to the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond the schema, making the baseline score appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Calculate') and resource ('sprint capacity'), and adds a key factor ('team time-off'). It does not explicitly distinguish from siblings like confluence_get_time_off, but the purpose is clear enough to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, prerequisites, or exclusions are provided. The agent must infer usage from the tool name and schema, with no indication of alternatives or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_backlogJira BacklogC
Read-onlyIdempotent

Get backlog issues for a board.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idYesBoard ID
start_atNoIndex of the first result (use next_start_at to page)
max_resultsNoMaximum results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered by structured data. The description adds nothing on top: no mention of pagination behavior, board-type requirements, or what constitutes a 'backlog' issue. With the annotation bar met, the description contributes essentially zero extra behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, which is efficient. It borders on under-specification rather than verbosity, but the sentence itself earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations plus a fully documented schema cover most structured needs. However, for a tool an agent must route between multiple Jira read operations, the absence of any usage or pagination context leaves a real gap, making it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (board_id, start_at, max_results) are documented in the schema, so the description need not compensate. It adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb (Get) and resource (backlog issues) scoped to a board, which an agent can distinguish from jira_get_sprint (sprint issues) and jira_get_board (board metadata). It is specific enough to identify the operation, though it does nothing to explicitly contrast with those near neighbors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus jira_get_sprint, jira_get_board, or a general search. Usage must be inferred purely from the phrase 'backlog issues for a board'. No exclusions or prerequisites are offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_board_configJira Board ConfigB
Read-onlyIdempotent

Get board column/status configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idYesBoard ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, idempotent=true, openWorld=true, so safety and repeat-call behavior are covered. The description adds only that the payload concerns columns/statuses, with no note on auth requirements, rate limits, or whether config is cached/derived.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the resource front-loaded and zero filler. It is efficient, though this efficiency shades into under-specification given the sibling overlap.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and there is only one required param. Still, the ambiguity against jira_get_board and the absence of any usage condition leave a real gap for such a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema coverage; the schema documents board_id, so the baseline of 3 applies. The description contributes no extra meaning about the identifier's origin or valid sources.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (board column/status configuration), which is more precise than a bare resource fetch. It does not, however, differentiate itself from the sibling jira_get_board, leaving the agent to guess whether these overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this versus jira_get_board, jira_backlog, or jira_get_sprint. The agent gets no context or exclusions, only the bare purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_create_issueJira Create IssueB

Create a Jira issue with standard and custom fields.

Pass issue_type="Epic" to create an epic; set your instance's Epic Name custom field through custom_fields (e.g. {"customfield_10009": "My Epic"}).

custom_fields example: {"customfield_10004": 5, "customfield_12345": {"value": "MyTeam"}}

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsNoLabels to set
summaryYesIssue title/summary
priorityNoPriority name
issue_typeNoIssue type nameStory
descriptionNoIssue description
project_keyYesProject key (e.g. PROJ)
custom_fieldsNoCustom fields dict — keys are customfield_NNNNN IDs. Use jira_list_fields to discover IDs for your instance.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and openWorldHint=true, so the write and external-system nature is covered. The description adds genuinely useful context that custom field IDs are instance-specific and discoverable via jira_list_fields, but says nothing about permissions, required auth scope, or side effects on linked epics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in the first sentence, followed by targeted Epic and custom_fields guidance. Both examples earn their place by demonstrating non-obvious value formats, though the two example blocks are slightly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations plus 100% schema coverage carry most of the remaining burden. The description covers the one genuinely tricky area (custom field ID/value formats), leaving only permission and prerequisite details unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: the special-casing of issue_type="Epic" and worked custom_fields examples showing both scalar (customfield_10004: 5) and object ({"value": "MyTeam"}) value shapes for different field types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a Jira issue') with the added scope of 'standard and custom fields'. Clear enough to distinguish from sibling mutators like jira_create_version or jira_create_link, though it never names or contrasts those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to use this tool versus alternatives, nor does it state prerequisites such as required project permissions. The only usage-shaped hint is the Epic-specific issue_type guidance, which is really parameter semantics rather than tool selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_create_versionJira Create VersionB

Create a new version in a Jira project (REST API v2, supports Server/DC and Cloud).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesVersion name
archivedNoMark as archived
releasedNoMark as released
start_dateNoStart date (YYYY-MM-DD)
descriptionNoVersion description
project_keyYesProject key (e.g. PROJ)
release_dateNoRelease date (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and openWorldHint=true, so the write/external-impact profile is covered. The description adds the API version and Server/DC vs Cloud compatibility, which is useful for an agent choosing an endpoint, but says nothing about permissions, idempotency, or duplicate-name handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the action and then the compatibility qualifier; nothing is wasted. It is perhaps too spare, but it is not padded or disorganized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema fully documents parameters. However, for a 7-parameter creation tool with no annotations covering permissions or version-collision behavior, the description leaves real gaps an agent may need to know.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters (name, project_key, dates, flags) are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Create a new version in a Jira project') that clearly separates it from siblings like jira_update_version and jira_get_project_versions. It does not explicitly name an alternative or scope beyond the project, but the verb alone disambiguates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus jira_update_version or jira_get_project_versions, and no mention of preconditions such as required permissions or the need for an existing project. Usage context is only implied by the word 'Create'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_delete_attachmentJira Delete AttachmentC
Destructive

Delete a Jira attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachment_idYesAttachment ID to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no note on permanence, required permissions, or side effects, so with annotations carrying the full burden this is a bare restatement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no waste, but it is under-specified rather than truly concise. There is no front-loaded caveat an agent would need before running a destructive call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with an output schema, the description is too thin: it omits irreversibility, permission requirements, and confirmation behavior. The output schema covers return values, so that gap is minor, but the usage/safety gaps are significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema description coverage, so the schema fully documents attachment_id. The description adds no format or sourcing detail (e.g., where to obtain the ID), leaving this at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (Jira attachment), which is unambiguous. It does not, however, differentiate itself from siblings like jira_download_attachment or jira_get_attachments beyond the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives. It does not say to confirm the attachment exists (via jira_get_attachments) beforehand or warn that deletion is irreversible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_download_attachmentJira Download AttachmentA

Download a Jira attachment to a local file. Writes to current working directory only.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_pathYesLocal path to save the file
content_urlYesAttachment content URL

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark it as non-read-only and open-world, which the description does not contradict. It adds a genuinely useful behavioral constraint the annotations lack: writes are confined to the current working directory, which materially changes how an agent should form save_path. It omits overwrite behavior for an existing file, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the primary action stated first and the scoping constraint second. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the action, destination, and the CWD restriction. Remaining gaps are small: authentication/prerequisite assumptions and what happens if the target file already exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 and both parameters are already documented. The description goes beyond the schema by clarifying that save_path resolves against the current working directory rather than an arbitrary absolute location, which adds real meaning for a path parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Download') plus resource ('a Jira attachment') plus destination ('to a local file'), which is enough to separate it from jira_get_attachments (metadata listing) and jira_upload_attachment (opposite direction). It does not explicitly name or contrast those siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never states when to reach for this tool versus jira_get_attachments or jira_upload_attachment, nor any precondition such as already knowing the attachment's content URL. Usage is only inferred from the verb, which is minimal guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_get_attachmentsJira Get AttachmentsB
Read-onlyIdempotent

List attachments on a Jira issue.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key (e.g. PROJ-123)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds nothing beyond that — no pagination behavior, no ordering, no indication of whether attachments can be filtered or whether auth scopes matter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the resource front-loaded. It is efficient but borders on under-specification rather than genuinely tight writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with a single required parameter, full schema coverage, existing annotations, and an output schema handling return values, the description is adequate. What is missing is usage routing rather than missing behavioral detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter and schema coverage is 100%, with the schema itself supplying the 'PROJ-123' example format. The description adds no semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('attachments on a Jira issue'), which implicitly distinguishes it from the upload/download/delete attachment siblings. It stops short of naming those siblings or clarifying any scope, so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative guidance is given. An agent could infer this is the read counterpart to jira_upload_attachment/jira_download_attachment, but the description never says so explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_get_boardJira Get BoardB
Read-onlyIdempotent

Get details of a Jira agile board.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idYesBoard ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds no further behavioral context—no details on return format, auth requirements, rate limits, or what 'details' includes—so it does not go beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero wasted words. It is appropriately sized for a simple get operation and immediately conveys the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and a single fully documented parameter, the description does not need to explain return values. It is nearly complete, though it could mention how it differs from jira_board_config to fully guide selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the single board_id parameter, so the schema fully documents it. The description adds no additional meaning or format constraints beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: retrieve details of a Jira agile board. It does not differentiate from sibling tools like jira_board_config, which likely also returns board-related data, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as jira_board_config or jira_get_sprint. The description gives no context about when board details are needed, leaving the agent to infer usage entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_get_project_versionsJira Get Project VersionsA
Read-onlyIdempotent

List all versions for a Jira project (REST API v2, supports Server/DC and Cloud).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_keyYesProject key (e.g. PROJ)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description's genuinely extra contribution is the deployment compatibility note ('REST API v2, supports Server/DC and Cloud'), but it says nothing about result ordering, pagination, or whether archived versions are included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact, front-loaded sentence with no filler or repetition of the title. The parenthetical API-version detail is slightly tangential but short and arguably earns its place as compatibility context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations carry the safety profile for this read-only tool. Combined with a single well-documented parameter, the description is close to sufficient, missing only scoping details such as whether unreleased or archived versions are returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100%, with the schema itself supplying the example format ('Project key (e.g. PROJ)'). The description adds no syntax or constraint detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') plus resource ('all versions for a Jira project'), which cleanly separates it from the mutating siblings jira_create_version and jira_update_version. It does not name those siblings explicitly, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the read verb 'List all'; the description never states when to reach for this versus jira_create_version or jira_update_version, nor any prerequisites like project permissions. A reader can infer it is the read path, but nothing is made explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_get_sprintJira Get SprintC
Read-onlyIdempotent

Get details of a specific sprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
sprint_idYesSprint ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered structurally. The description adds nothing beyond that – no note on missing/inactive sprints, permission requirements, or error behavior for a read against an external system.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no padding or redundancy. It is front-loaded but arguably too terse to be fully informative, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because the output schema exists and annotations carry the read-only/idempotent profile, the definition is minimally viable. Still, for an 'openWorld' read it gives no guidance on lookup semantics or failure modes, leaving clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single required, well-constrained integer parameter, and an output schema exists. Per the baseline rule, 3 is appropriate; the description adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get details of a specific sprint'), so the operation is unambiguous. However, it does not distinguish itself from adjacent siblings such as jira_move_to_sprint or confluence_sprint_capacity, leaving no differentiation guidance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent learns nothing about when this tool is preferable to sibling tools that also touch sprints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_list_fieldsJira List FieldsB
Read-onlyIdempotent

List Jira fields, optionally filtered.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter fields by name
custom_onlyNoOnly return custom fields

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is already covered. The description adds no behavioral context beyond what annotations and schema provide (e.g., no return format, pagination, or field-type details), but it does not contradict the annotations either. This is the minimum viable level when structured data carries the safety burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word ('List', 'Jira fields', 'optionally filtered') contributes to the core meaning, and there is no redundancy or tangential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with an output schema and full parameter coverage, the description is nearly complete. The output schema handles return values and annotations cover safety, but the description could do slightly more to clarify what 'fields' means in Jira (system vs. custom) without relying entirely on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters ('search' and 'custom_only'), so the schema already fully documents their meaning. The description's 'optionally filtered' phrase is redundant with the schema and adds no syntax or format detail beyond it. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb 'List' and resource 'Jira fields', making the tool's function clear. It does not differentiate itself from sibling list tools like jira_list_projects or jira_search_users, but the resource noun is specific enough for an agent to identify the correct tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Optionally filtered' hints that the tool can be used with or without parameters, but there is no explicit guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. An agent gets no routing help from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_list_projectsJira List ProjectsA
Read-onlyIdempotent

List all accessible Jira projects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered by structured data. The phrase "all accessible" usefully signals that results are permission-scoped, which is context beyond the annotations, but nothing is said about pagination, result size, or refresh behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with zero filler, front-loading both the action and the scope constraint. Nothing to trim and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value details need not be described, and annotations cover the read-only/idempotent profile. For a zero-parameter list tool the description is essentially sufficient, lacking only notes on filtering or pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("List ... Jira projects") and adds a meaningful scope qualifier ("all accessible"). It is unambiguous, though it does no explicit sibling differentiation — unnecessary here since no other sibling lists projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and no alternatives (e.g. jira_get_project_versions for version-specific needs). Usage is only weakly implied by the verb itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_move_to_sprintJira Move To SprintC

Move issues into a sprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
sprint_idYesTarget sprint ID
issue_keysYesIssue keys to move (e.g. ['PROJ-1', 'PROJ-2'])

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and openWorldHint=true, which already signal a mutating, external-facing operation. The description adds nothing beyond that: it does not say whether issues are removed from a prior sprint, whether the target sprint must be active/future, whether permissions are required, or whether the move is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though its brevity is under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with only partial annotation coverage, the description omits the operationally important details: what happens to issues already in another sprint, sprint state requirements, and permission needs. The output schema covers return values, but the pre-call semantics an agent needs are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented inline (sprint_id, issue_keys with example format). The description contributes no additional parameter meaning, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('move issues into a sprint'), which is unambiguous on its own. However, it does nothing to distinguish itself from siblings like jira_backlog or jira_get_sprint, so an agent gets no routing signal from the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative guidance. With sprint-related siblings (jira_backlog, jira_get_sprint, confluence_sprint_capacity) present, the description never explains which one applies to a given intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_search_usersJira Search UsersB
Read-onlyIdempotent

Search for Jira users.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch by name, email, or username
start_atNoIndex of the first result (use next_start_at to page)
max_resultsNoMaximum results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds no further behavioral context such as authentication requirements, rate limits, or result handling, and it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It is perhaps overly terse, but structurally it is efficient and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only search tool with full schema descriptions, annotations, and an output schema, the terse description is largely sufficient. It omits query scope and pagination guidance, but those details are covered by the schema and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the query fields and pagination parameters fully documented in the input schema. The description adds no parameter meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Search') and resource ('Jira users'), making the tool's core purpose immediately understandable. It does not explicitly differentiate itself from siblings, but no sibling tool overlaps with user search, so the resource alone is sufficiently distinctive for selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no alternatives, and no exclusions. An agent gets no help deciding between this and other Jira search or lookup tools, though there is no direct sibling alternative for user search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_update_issueJira Update IssueC
Idempotent

Update a Jira issue's standard and custom fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoStandard fields to update (summary, description, labels, etc.)
issue_keyYesJira issue key (e.g. PROJ-123)
custom_fieldsNoCustom fields dict — keys are customfield_NNNNN IDs

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, and openWorld=true, so the safety profile is covered. The description adds nothing beyond them: it does not say whether the update is a partial merge or a replace, what happens to unlisted fields, or whether permissions are required for custom fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is appropriately sized, though at the cost of the behavioral context the tool would benefit from.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the three parameters are fully documented in the schema. However, for a mutation tool the definition is silent on update semantics (partial vs full) and permission requirements, leaving a real operational gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameter descriptions (standard vs customfield_NNNNN keys) are already in the schema. The description only restates 'standard and custom fields', adding no format or syntax detail beyond structured data. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (update) plus resource (Jira issue) with the field scope named. It does not differentiate itself from siblings like jira_create_issue, but the create/update distinction is implied by the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus jira_create_issue or other mutating siblings, no prerequisites, and no mention of whether both fields and custom_fields can be sent together. The agent must infer everything from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_update_versionJira Update VersionB
Idempotent

Update an existing Jira version (REST API v2, supports Server/DC and Cloud).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew version name
archivedNoMark as archived
releasedNoMark as released
start_dateNoStart date (YYYY-MM-DD)
version_idYesVersion ID
descriptionNoNew description
release_dateNoRelease date (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation and idempotency profile (readOnlyHint=false, idempotentHint=true, openWorldHint=true). The description adds useful platform context (REST API v2, Server/DC and Cloud support), but omits more valuable behavioral detail such as partial-update semantics for omitted fields or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and resource come first. It is lean, though the trailing parenthetical about API version and deployment targets could be trimmed or expanded into actual guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the schema fully documents the seven parameters. However, for a mutation tool the description leaves update semantics and permission requirements unaddressed, making it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including version_id, name, archived, released, and the date fields is documented in the schema. The description adds nothing about parameter meaning or format, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Update an existing Jira version"), which clearly distinguishes it from read-oriented siblings like jira_get_project_versions. It does not explicitly contrast with jira_create_version, but the word 'existing' implies the distinction adequately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as jira_create_version, nor any stated prerequisites (e.g., required permissions or product edition). The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jira_upload_attachmentJira Upload AttachmentB

Upload a file as an attachment to a Jira issue.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoOverride filename
file_pathYesLocal file path to upload
issue_keyYesJira issue key

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and openWorldHint=true, so the write and external-facing nature is covered. The description adds no behavioral context such as authentication needs, overwrite behavior, file size limits, or handling of existing attachments.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with zero waste. For a simple upload operation, this is appropriately sized and structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values need not be described, and the annotations cover safety. However, the description is minimal and omits contextual details like local file handling, success/failure behavior, or attachment overwrite semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema documents issue_key, file_path, and optional filename. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (upload) and resource (attachment to a Jira issue), clearly distinguishing this tool from sibling attachment operations like get, download, and delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides no when-to-use guidance, no prerequisites, and no explicit alternatives such as jira_get_attachments or jira_download_attachment. The purpose is implied, but selection guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.10.1
    • Removedconfluence_get_person_time_off
    • Changedconfluence_get_time_off1 field changed
      • addedInput schema / properties / person
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Return only this person's events (exact, case-insensitive name match)"
        +}
    • Changedconfluence_list_calendars1 field changed
      • addedInput schema / properties / search
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Filter by calendar name, space name, or space key (case-insensitive)"
        +}
    • Removedconfluence_search_calendars
    • Changedconfluence_sprint_capacity3 fields changed
      • changedInput schema / properties / sprint_end / description
        Previous value: -"Sprint end date"New value: +"Sprint end date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week'"
      • changedInput schema / properties / sprint_start / description
        Previous value: -"Sprint start date"New value: +"Sprint start date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week'"
      • changedInput schema / properties / team_members / description
        Previous value: -"List of team member names"New value: +"Full names exactly as they appear on the calendar"
    • Removedconfluence_who_is_out
    • Removedjira_create_epic
  2. 2 tool updatesv0.8.1
    • Changedjira_backlog1 field changed
      • addedInput schema / properties / start_at
        Added value: +{
        +  "default": 0,
        +  "description": "Index of the first result (use next_start_at to page)",
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedjira_search_users1 field changed
      • addedInput schema / properties / start_at
        Added value: +{
        +  "default": 0,
        +  "description": "Index of the first result (use next_start_at to page)",
        +  "minimum": 0,
        +  "type": "integer"
        +}
  3. 26 tool updatesv0.6.13
    • First observedconfluence_get_person_time_off
    • First observedconfluence_get_time_off
    • First observedconfluence_list_calendars
    • First observedconfluence_search_calendars
    • First observedconfluence_sprint_capacity
    • First observedconfluence_who_is_out
    • First observedjira_backlog
    • First observedjira_board_config
    • First observedjira_create_epic
    • First observedjira_create_issue
    • First observedjira_create_link
    • First observedjira_create_version
    • First observedjira_delete_attachment
    • First observedjira_delete_link
    • First observedjira_download_attachment
    • First observedjira_get_attachments
    • First observedjira_get_board
    • First observedjira_get_project_versions
    • First observedjira_get_sprint
    • First observedjira_list_fields
    • First observedjira_list_projects
    • First observedjira_move_to_sprint
    • First observedjira_search_users
    • First observedjira_update_issue
    • First observedjira_update_version
    • First observedjira_upload_attachment

TDQS

B3.2/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target a distinct resource+action within Jira (attachments, versions, sprints, boards, links) or Confluence calendars, so selection is generally clear. Minor overlap exists among the agile tools (jira_backlog, jira_get_board, jira_board_config, jira_get_sprint, jira_move_to_sprint), which an agent must disambiguate by reading descriptions.

Naming Consistency4/5

Strong jira_/confluence_ prefixing plus a consistent verb_noun pattern (list_projects, get_sprint, create_version, delete_link, upload_attachment). A few names break the pattern (jira_backlog, jira_board_config, confluence_sprint_capacity) but remain readable and predictable.

Tool Count4/5

22 tools is on the heavy side, but the server spans two products (Jira issues/attachments/versions/agile plus Confluence calendars), so most tools earn their place. It could be trimmed, but no obvious redundancy bloats the set.

Completeness3/5

Attachments get full CRUD and versions are well covered, but issue handling is notably asymmetric: there is create_issue and update_issue yet no get_issue, delete_issue, or general issue search/list. Versions lack delete and links lack a list/get, leaving agents with dead ends for common workflows.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers