mcp-atlassian-extended
This MCP server extends Atlassian integration with 22 Jira/Confluence tools, 15 resources, and 5 prompts for attachments, agile, users, versions, and calendars.
Create/update Jira issues, including epics and custom fields
Create/delete Jira issue links
Manage Jira attachments: list, upload, download, delete
Search Jira users
List Jira projects, fields, and board backlog issues
Work with Jira agile boards and sprints: get board, board config, sprint details, move issues to sprint
Manage Jira project versions: list, create, update via REST API v2
List Confluence calendars and retrieve time-off events
Calculate Confluence sprint capacity accounting for team time-off
Access 15 MCP resources for Jira/Confluence workflow guides, rules, and templates
Use 5 MCP prompts: create_ticket, plan_sprint, close_ticket, team_availability, manage_attachments
Supports Jira Cloud/Data Center and Confluence Cloud/Data Center, read-only mode, and stdio/streamable-http transports
Provides tools for Confluence calendars, including listing calendars, searching events, tracking time-off, and sprint capacity planning.
Provides tools for Jira issue management including creation with custom fields, issue linking, attachments, agile boards, sprints, backlog management, user search, and project versions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-atlassian-extendedList all issues in the current sprint for project MYP"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-atlassian-extended
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 listedmcp-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) andstreamable-http(recommended for remote clients). Thessetransport 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
💡 Tip: For other AI assistants (Claude Code, Windsurf, IntelliJ, Gemini CLI), visit the Atlassian Extended MCP Installation Gateway.
Prerequisite: Install
uvfirst (required for alluvxinstall 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-extendedWindsurf & IntelliJ
Windsurf: Add to ~/.codeium/windsurf/mcp_config.json
IntelliJ: Add to Settings | Tools | MCP Servers
Note: The actual server config starts at
atlassian-extendedinside themcpServersobject. RemoveMCP_READ_ONLYto 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-extendedVS 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-extendedpip / uv
uv pip install mcp-atlassian-extendedDrop 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 |
| Yes | - | Jira instance URL (e.g. |
| Yes | - | Email address for Jira Cloud |
| Yes | - | API token from id.atlassian.com/manage-profile/security/api-tokens |
Jira Data Center / Self-Hosted (Bearer Token)
Variable | Required | Default | Description |
| Yes | - | Jira instance URL |
| Yes | - | Personal access token (see fallback order below) |
The server checks these environment variables in order — first match wins:
JIRA_PATJIRA_PERSONAL_TOKENJIRA_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 |
| Yes | - | Confluence URL (e.g. |
| Yes | - | Email address for Confluence Cloud |
| Yes | - | API token (same as Jira if same Atlassian account) |
Confluence Data Center / Self-Hosted (Bearer Token)
Variable | Required | Default | Description |
| Yes | - | Confluence instance URL |
| Yes | - | Personal access token (see fallback order below) |
The server checks these environment variables in order — first match wins:
CONFLUENCE_PATCONFLUENCE_PERSONAL_TOKENCONFLUENCE_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 |
|
| Shared name across the mcp-* servers. Any value other than |
|
| Per-server alias for |
| - | Bearer token (min 16 chars) required to bind an HTTP transport to a non-loopback host; clients send |
| working directory | Only files under this directory may be uploaded ( |
|
| Where |
|
| HTTP request timeout for Jira in seconds |
|
| Set to |
|
| HTTP request timeout for Confluence in seconds |
|
| Set to |
Compatibility
Client | Supported | Install Method |
Claude Desktop | Yes |
|
Claude Code | Yes |
|
Cursor | Yes | One-click deeplink or |
Windsurf | Yes |
|
VS Code Copilot | Yes |
|
Any MCP client | Yes | stdio or HTTP transport |
Tools (22)
Category | Count | Tools |
Jira Issues | 2 | create (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 |
| Create issue with standard and custom fields ( |
| Update issue fields and custom fields |
Jira Links
Tool | Description |
| Create a link between two issues (Relates, Blocks, etc.) |
| Delete an issue link by ID |
Jira Attachments
Tool | Description |
| List attachments on an issue |
| Upload file to issue |
| Download attachment to local file |
| Delete an attachment |
Jira Users
Tool | Description |
| Search users by name/email |
Jira Metadata
Tool | Description |
| List all accessible projects |
| List fields (with search/custom filter) |
| Get backlog issues for a board |
Jira Agile
Tool | Description |
| Get board details |
| Get board column configuration |
| Get sprint details |
| Move issues to a sprint |
Jira Versions
Tool | Description |
| List all versions for a project (REST API v2, Server/DC + Cloud) |
| Create a new version in a project (REST API v2) |
| Update an existing version (REST API v2) |
Confluence Calendars
Tool | Description |
| List calendars; optional |
| Time-off events for a date range; optional |
| Calculate sprint capacity with time-off |
Resources (15)
The server exposes curated Jira and Confluence workflow guides as MCP resources.
URI | Name | Description |
| Jira Issue Hierarchy | Epic/story/task/subtask relationships, when to use each level |
| Jira Ticket Writing Standards | Summary format, description structure, acceptance criteria placement |
| Acceptance Criteria Standards | Given/When/Then format, testability, DoD vs AC |
| Sprint Hygiene Rules | Capacity planning, carryover policy, sprint goals, retrospective items |
| Jira Workflow & Automation | Status transitions, automation triggers, post-functions |
| Issue Linking Best Practices | Link types (blocks, relates, duplicates), cross-project links, epic links |
| Story Point Estimation | Fibonacci scale, relative sizing, team calibration, anti-patterns |
| Definition of Done Checklists | Checklist format, team-level vs org-level DoD, verification steps |
| Jira Label Taxonomy | Naming conventions, label categories, label vs component |
| JQL Query Library | Common queries, date functions, custom field syntax, saved filters |
| Jira Custom Field Governance | Field types, screen schemes, context, naming standards |
| Confluence Space Organization | Space types, permission schemes, archiving, templates |
| Agile Ceremony Standards | Standup, planning, review, retro formats and time-boxing |
| Git-Jira Integration Patterns | Smart commits, branch naming, PR linking, status transitions |
| 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 |
|
| Gather fields → set custom fields (DoD, privacy, security) → create → add links |
|
| Check sprint → review backlog → calculate capacity → suggest scope → move issues |
|
| Verify DoD → check linked MR → transition statuses → add closing comment |
|
| Check who is out → per-person time-off → calculate capacity → flag conflicts |
|
| 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(orATLASSIAN_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 afalsefrom another source, not a.envfile, not tool arguments; any value other thanfalse/0/no/off/empty locks, and--read-onlycan 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 Codemanaged-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. SetATLASSIAN_HTTP_BEARER_TOKEN(≥ 16 chars;openssl rand -hex 32) and clients send it asAuthorization: Bearer <token>; the token is compared in constant time. Without it the server refuses to start on any host other than127.0.0.1/localhost/::1. The server also validates theHost/Originheader on HTTP requests (host_origin_protection="auto") so a DNS-rebinding page cannot drive a loopback-bound server.Upload root restriction:
jira_upload_attachmentonly reads files inside the upload root —ATLASSIAN_UPLOAD_DIRif 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_attachmentwrites only into the download directory (ATLASSIAN_DOWNLOAD_DIR, default./atlassian-downloads/, created on first use).save_pathmust be a bare file name — directories, absolute paths and dotfiles are rejected, not silently stripped. Existing files are never overwritten: a-1,-2numeric suffix is added and the final path is returned. The downloaded body is capped at 100 MB, mirroring the upload cap. Addatlassian-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). SetATLASSIAN_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, setATLASSIAN_UPLOAD_DIR=~/Downloads. Downloads now land in./atlassian-downloads/(orATLASSIAN_DOWNLOAD_DIR) instead of the working directory,save_pathis 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, andidempotentHintfor 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-onlyThe --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-extendedThe 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.
Related MCP Servers
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 toolsconfluence_get_time_offConfluence Get Time OffARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| person | No | Return only this person's events (exact, case-insensitive name match) | |
| end_date | Yes | End date (YYYY-MM-DD, 'today', '+14d', etc.) | |
| start_date | Yes | Start date (YYYY-MM-DD, 'today', '+14d', etc.) | |
| calendar_name | No | Filter by calendar name | |
| group_by_person | No | Group results by person |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true and openWorld=true, so the safety profile is covered. The description adds that results span all leave calendars and that a single-day query returns 'who is out', but says nothing about result ordering, volume, or grouping behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose, then the two usage patterns. No filler, no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description gives enough to call the tool correctly (required date range, optional person, implied grouping). It is slightly thin on what the returned events look like, but nothing essential to invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuine semantic value beyond it: it explains that 'person' narrows to one individual's events and that setting start_date=end_date produces a single-day 'who is out' view, which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 time-off events') plus scope ('across all leave calendars'), which separates it from the sibling confluence_list_calendars. It stops short of explicitly naming that sibling as the alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives two concrete calling patterns: pass 'person' for an individual, or equal start/end dates to see who is out on one day. That is clear context for invocation, though it notes no exclusions or prerequisites (e.g., what happens with no person filter).
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 CalendarsARead-onlyIdempotent
List Confluence calendars, optionally narrowed by type or a name/space search.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter by calendar name, space name, or space key (case-insensitive) | |
| filter_type | No | Filter by calendar type (e.g. 'leaves') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and idempotentHint=true, covering the safety profile, so the bar is lowered. The description adds the scoping constraint but no return format, pagination, or result-limit behavior beyond what annotations provide, making it minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the core action first and the optional narrowing second. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-parameter list tool with full schema coverage this is close to sufficient, but with no output schema the description says nothing about what a listing returns or how results are bounded, leaving a gap an agent would want covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (search, filter_type) are already documented with clear semantics and a type example ('leaves'). The description only restates them at a high level, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb plus resource: 'List Confluence calendars'. It scopes the operation and hints at filtering. It does not explicitly differentiate from the near siblings confluence_get_time_off or confluence_sprint_capacity, so it falls just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally narrowed by type or a name/space search' implies when the filters are appropriate, but there is no explicit when-to-use vs. when-not guidance and no named alternative tool. Usage is inferable rather than stated.
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 CapacityBRead-onlyIdempotent
Calculate sprint capacity considering team time-off.
| Name | Required | Description | Default |
|---|---|---|---|
| sprint_end | Yes | Sprint end date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week' | |
| sprint_start | Yes | Sprint start date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week' | |
| team_members | Yes | Full names exactly as they appear on the calendar | |
| working_days_per_week | No | Working days per week |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, lowering the bar. The description adds one genuine behavioral detail not in the schema: time-off is factored in automatically (there is no time-off parameter). It still says nothing about how capacity is derived or what the result contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though its extreme brevity borders on under-specification rather than optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully covered by the schema and safety is covered by annotations, so the tool is callable as-is. However, with no output schema, the description could usefully state what the capacity result looks like, and it omits any guidance on the calendar/time-off dependency, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including date-format options and the working_days_per_week default) are already documented. The description adds no parameter meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Calculate sprint capacity'), so the agent knows exactly what computation this performs. It does not, however, differentiate itself from related siblings like confluence_list_calendars and confluence_get_time_off, which supply the underlying data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives, and no statement of prerequisites (e.g., that calendar/time-off data must be accessible). The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_backlogJira BacklogBRead-onlyIdempotent
Get backlog issues for a board.
Returns a compact field set by default (summary, status, issue type, priority,
assignee, labels). Pass fields (e.g. *all) to widen it.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated Jira fields to return. Defaults to a compact set; pass '*all' for every field (large responses). | summary,status,issuetype,priority,assignee,labels |
| board_id | Yes | Board ID | |
| start_at | No | Index of the first result (use next_start_at to page) | |
| max_results | No | Maximum results |
TDQS
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 without the description. The description's one added behavioral fact — that a compact field set is returned by default and ``*all`` widens it — largely restates the schema text for ``fields``, so it contributes little beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose followed immediately by the return-shape note. Nothing is padded and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with full schema coverage and clear annotations, the description plus schema cover what an agent needs to invoke it; pagination is documented via start_at/max_results/next_start_at in the schema. Minor gap: no hint about ordering or total counts, but those are secondary here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the compact-default and '*all' semantics are already documented in the ``fields`` property, including the large-response warning. The description adds no syntax, format, or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get backlog issues for a board" states a specific verb (Get) plus resource (backlog issues) and scope (per board), which is enough for an agent to distinguish it from jira_get_sprint or jira_get_board. It stops short of explicitly naming a sibling or the boundary conditions that separate backlog from sprint queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and never mentions alternatives such as jira_get_sprint or issue search tools, even though the sibling list contains several plausible confusables. The only usage hint is about the ``fields`` parameter, not about when to select this tool.
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 ConfigCRead-onlyIdempotent
Get board column/status configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | Board ID |
TDQS
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 note about output shape, pagination, or what 'configuration' entails (columns, statuses, mappings).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, and the key resource term is front-loaded. It could carry one more clause of useful context without bloat, but there is zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, an agent still lacks any sense of what the returned configuration looks like, but the read-only annotations and complete param schema cover the call mechanics. Adequate but thin for a config-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with board_id documented as 'Board ID', so the schema carries the parameter burden. The description adds no syntax, format, or sourcing detail beyond it, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 the generic name. It is distinguishable from jira_get_board, though it never explicitly names or contrasts that sibling. Clear but without sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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_board or jira_list_fields. The usage is only implied by the phrase 'board column/status configuration'. No prerequisites or exclusions are offered.
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 IssueA
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"}}
| Name | Required | Description | Default |
|---|---|---|---|
| labels | No | Labels to set | |
| summary | Yes | Issue title/summary | |
| priority | No | Priority name | |
| issue_type | No | Issue type name | Story |
| description | No | Issue description | |
| project_key | Yes | Project key (e.g. PROJ) | |
| custom_fields | No | Custom fields dict — keys are customfield_NNNNN IDs. Use jira_list_fields to discover IDs for your instance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the write/open-world nature is covered. The description adds genuinely useful behavior beyond that: epics need an instance-specific Epic Name custom field, and custom_fields takes typed values like {"value": "MyTeam"}. It omits any statement about side effects (notifications, watchers) or what is returned, so it goes beyond annotations but not far.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines, front-loaded with the core action and followed by the two highest-value edge cases, using inline code for exact syntax. Nothing is padded, though the Epic paragraph and custom_fields example are somewhat tersely juxtaposed without a clear connective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description never says what a successful create returns (presumably an issue key/ID), which an agent needs to chain follow-up calls like jira_update_issue. Parameter coverage is otherwise solid, so the gap is narrow but real for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes further by explaining non-obvious semantics the schema cannot: the special issue_type="Epic" branch requires an Epic Name custom field, and custom_fields entries can be scalars or nested {"value": ...} objects. It also points at jira_list_fields for discovering IDs, which is real added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a Jira issue") and scopes it to standard and custom fields, which distinguishes it naturally from jira_update_issue and jira_create_version. It stops short of explicitly naming a sibling or clarifying boundaries, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Epic note is really the only usage guidance: use issue_type="Epic" and set the Epic Name via custom_fields. There is no statement of when to prefer this tool over alternatives, no prerequisites (project access, required fields per issue type), and no sizing or rate-limit context; usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_create_linkJira Create LinkC
Create a link between two Jira issues.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment on the link | |
| link_type | Yes | Link type name (Relates, Blocks, Duplicate, etc.) | |
| inward_issue | Yes | Inward issue key (receives the action) | |
| outward_issue | Yes | Outward issue key (performs the action) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutation and external-dependency profile is covered structurally. The description adds nothing beyond that: no mention of required permissions, whether the link type must pre-exist, or what happens on duplicate links.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence, front-loaded with the action and resource. It is neither bloated nor padded, though it is arguably too terse given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema and four parameters, the description is inadequate: it omits link-type availability, directionality implications, error behavior, and the optional comment's effect, all of which an agent would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including link_type semantics and inward/outward direction) are documented in the schema. The description adds no parameter meaning beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('link between two Jira issues'), which is clearly distinguishable from sibling tools like jira_create_issue or jira_delete_link. However, it offers no further differentiation or scope detail beyond the single clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives such as jira_delete_link, nor any prerequisite context (e.g., that the link types must already exist in the instance). The agent must infer all usage conditions.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Version name | |
| archived | No | Mark as archived | |
| released | No | Mark as released | |
| start_date | No | Start date (YYYY-MM-DD) | |
| description | No | Version description | |
| project_key | Yes | Project key (e.g. PROJ) | |
| release_date | No | Release date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the write/non-deterministic nature is covered. The description adds deployment-scope context (REST API v2, Server/DC and Cloud support) beyond the annotations, but says nothing about permission requirements or the uniqueness/duplicate-name error case that a version-creation call commonly hits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the compatibility note trailing in parentheses; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented 7-parameter schema and no output schema, the description need not explain return values, so the structured fields carry most of the load. However, for a mutation tool it omits the practical context an agent needs (auth/permission expectations, duplicate-name failure mode), leaving it merely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all 7 parameters (name, project_key, archived, released, start_date, release_date, description) documented inline, including date formats and defaults. The description adds no parameter semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new version in a Jira project'), so the agent knows exactly what the tool produces. It does not distinguish itself from the sibling jira_update_version or jira_get_project_versions, relying on the verb alone to separate them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites (e.g. project admin permission needed to create versions), and no routing to alternatives such as jira_update_version or jira_get_project_versions. The parenthetical about REST API v2 is compatibility context, not usage guidance.
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 AttachmentCDestructive
Delete a Jira attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| attachment_id | Yes | Numeric attachment ID to delete |
TDQS
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 structurally. However, the description adds nothing beyond the name at all — no note that deletion is permanent/irreversible, no permission requirements, no side effects on issues or comments referencing the attachment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single five-word sentence with zero padding — front-loaded verb and resource. It is efficient, though the terseness verges on under-specification rather than deliberate economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive operation with full schema coverage and annotations carrying the safety profile, the definition is minimally sufficient to invoke correctly. It still lacks any irreversibility or permission context that an agent authorizing a delete would want before acting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 100% schema description coverage ("Numeric attachment ID to delete"), the schema fully documents the input, so baseline 3 applies. The description adds no format, sourcing, or lookup guidance (e.g., how to obtain the attachment ID) beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a Jira attachment"), which is unambiguous and distinguishable from sibling attachment tools like jira_download_attachment and jira_upload_attachment. It stops short of naming a sibling or scope explicitly, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no reference to alternatives (e.g., why not download or re-upload instead of deleting). The agent must infer all routing decisions from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_delete_linkJira Delete LinkBDestructive
Delete a Jira issue link by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| link_id | Yes | Numeric issue link ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond those structured fields—it does not state permanence, required permissions, or side effects of removing a link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero wasted words. It states the action, the resource, and the identifier in the most compact form possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with fully covered annotations, the description is minimally sufficient. However, it omits how to obtain a link ID and does not clarify that the deletion is irreversible, leaving small but real gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single link_id parameter is fully documented with a numeric pattern. The phrase 'by its ID' in the description merely restates what the schema already specifies, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a Jira issue link') with the lookup key ('by its ID'), making the operation immediately clear. It does not explicitly name or contrast with the sibling jira_create_link, so it falls just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as jira_create_link or jira_delete_attachment, nor does it state prerequisites. Usage is left entirely to inference from the verb.
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 into the download directory (default ./atlassian-downloads/).
save_path is a bare file name, not a path. Existing files are never overwritten — a
numeric suffix is added — and the final absolute path is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| save_path | Yes | File name (no directories) to save under the download dir | |
| content_url | Yes | Attachment content URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the annotations by disclosing overwrite behavior (never overwrites; numeric suffix added) and the returned absolute path, which the readOnlyHint=false/openWorldHint=true flags alone would not reveal. It could still note required permissions or failure modes, but the mutation semantics are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in the first sentence and follows with the two behavioral caveats that matter. Every sentence carries information; sizing is appropriate with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return value (final absolute path) and destination behavior, which is what an agent needs to call it. Minor gap: no hint on where content_url comes from or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description reinforces that save_path is a bare file name and supplies the default download directory, adding minor value beyond the schema but no syntax or format detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Download a Jira attachment') plus the destination directory, so the action is unambiguous. It does not explicitly distinguish itself from nearby siblings like jira_get_attachments (list) or jira_upload_attachment (reverse direction), leaving a small sibling-overlap risk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the clear purpose and the save_path caveat, but there is no explicit when-to-use guidance or routing away from jira_get_attachments. Nothing tells the agent how to obtain content_url or when this is preferred over the list tool.
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 AttachmentsCRead-onlyIdempotent
List attachments on a Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_key | Yes | Jira issue key (e.g. PROJ-123) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, covering the safety profile, so the description is not the main carrier here. But it adds nothing further — no note on whether results are paginated, what auth/scope is required, or what attachment metadata is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler or redundancy. It is efficient, though it leans toward under-specification rather than deliberate brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with annotations covering safety, the description is minimally adequate. It omits any hint of the return shape (attachment id/name/size needed to chain into download) and pagination behavior, which an agent would need since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single issue_key parameter is fully documented in the schema, including a pattern and example. The description adds no syntax or format 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List attachments') scoped to a Jira issue, which functionally separates it from the download/delete/upload attachment siblings. However, it never names an alternative tool or explicitly delineates the boundary, so it falls short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as jira_download_attachment (to fetch content) or jira_delete_attachment. Usage is only inferable from the bare purpose statement.
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 BoardCRead-onlyIdempotent
Get details of a Jira agile board.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | Board ID |
TDQS
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 fully covered by structured fields. The description adds nothing beyond them - no statement of what 'details' are returned, pagination, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 borders on under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering the safety profile and no output schema, the description is minimally adequate. It still leaves open what fields the board details contain and how it relates to sibling board tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single board_id parameter, so the schema carries the semantics. The description adds no format, sourcing, or lookup guidance for the ID, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (Jira agile board), so the operation is unambiguous. It does not, however, distinguish itself from nearby siblings like jira_board_config or jira_backlog, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to fetch a board versus using jira_board_config or jira_backlog, and no prerequisites or context are given. The agent must infer the use case entirely from the tool name.
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 VersionsBRead-onlyIdempotent
List all versions for a Jira project (REST API v2, supports Server/DC and Cloud).
| Name | Required | Description | Default |
|---|---|---|---|
| project_key | Yes | Project key (e.g. PROJ) |
TDQS
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 useful platform context (REST API v2, Server/DC and Cloud) but says nothing about pagination or ordering for a 'list all' operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical adds real platform/API-version value rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 full annotation and schema coverage and no output schema, the description is nearly sufficient. The only meaningful gap is undisclosed pagination/return behavior for a 'list all' call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema description coverage, so the schema fully documents project_key including its pattern and example. The description adds no meaning beyond the schema, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (versions for a Jira project), which is unambiguous. It is distinguishable from the create/update version siblings by name and verb, but the description does not explicitly position itself against them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternative routing is given. The intended use is only implied by the verb 'List', with no exclusions or guidance on choosing this over other version-related tools.
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 SprintCRead-onlyIdempotent
Get details of a specific sprint.
| Name | Required | Description | Default |
|---|---|---|---|
| sprint_id | Yes | Sprint ID |
TDQS
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: it does not say what 'details' are returned, whether the sprint must be active/closed, or any auth requirements, so it contributes no behavioral context of its own.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficiently sized, though its brevity shades into under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing the return value, yet 'details of a specific sprint' says nothing about fields returned (name, state, dates, board). For a retrieval tool with no output schema, this leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, the schema fully documents sprint_id (integer, minimum 1). The description adds no format, sourcing, or lookup hints 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('a specific sprint'), so the operation is unambiguous. It does not differentiate itself from sprint-adjacent siblings like jira_move_to_sprint or confluence_sprint_capacity, but those are clearly different operations, so the risk of confusion is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives, no prerequisites (e.g., needing board/sprint IDs from jira_get_board or jira_backlog), and no exclusions. 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_list_fieldsJira List FieldsCRead-onlyIdempotent
List Jira fields, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter fields by name | |
| custom_only | No | Only return custom fields |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds nothing beyond that — no note on whether all fields or only visible/creatable fields are returned, whether the list is paginated, or whether custom fields behave differently.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and zero filler. It is efficient, though the extreme terseness borders on under-specification rather than genuine economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (two optional params, no output schema, fully documented schema, annotations covering safety), so the thin description is minimally viable. It still leaves the return shape and result volume unaddressed, which an agent enumerating fields would want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters fully ("Filter fields by name", "Only return custom fields"). The description's "optionally filtered" adds nothing beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List Jira fields"), which is unambiguous on its own. However it offers no differentiation from siblings — no other sibling lists fields, so no disambiguation is needed, but neither is any comparison or scope boundary drawn.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Optionally filtered" hints that filtering exists but gives no when-to-use guidance, no prerequisites, and no alternatives. An agent gets no help deciding between this and, say, jira_list_projects or any other enumeration tool.
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 ProjectsBRead-onlyIdempotent
List all accessible Jira projects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety and repeat-call behavior are covered structurally. The description adds one useful behavioral fact — results are permission-scoped ('accessible') and unfiltered ('all') — but says nothing about pagination or the shape/size of the result, which matters for a listing tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler — the verb and resource lead. It is arguably too terse to be maximally useful, but on the conciseness axis it is clean and wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read, annotations carry the safety profile, but with no output schema the description is the only place a caller could learn what comes back (list of project keys/names, pagination, result limits) and it omits that. Adequate but with a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4. The description correctly implies the call needs no input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('Jira projects') with a scope qualifier ('all accessible'), so the intent is unambiguous. It does not name or contrast any sibling tool, but no sibling duplicates this function, so differentiation is not really at stake.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus alternatives (e.g. jira_get_project_versions or jira_list_fields), nor any prerequisites or exclusions. Usage is only implied by the tool name, which is the definition of minimal guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sprint_id | Yes | Target sprint ID | |
| issue_keys | Yes | Issue keys to move (e.g. ['PROJ-1', 'PROJ-2']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false (a mutation) and openWorldHint=true, so the safety profile is covered. Beyond that, the description adds nothing: no mention of permission requirements, whether the move is atomic across multiple issue_keys, what happens to already-assigned issues, or error behavior on partial failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero padding, which is efficient and front-loaded. But it is terse to the point of under-specification for a mutation tool, so it reads more as minimal than as well-calibrated brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating bulk operation with no output schema and no explicit guidance on sprint state eligibility or failure semantics, the definition leaves meaningful gaps. The annotations cover the read/write nature but not the operational constraints an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters, so the schema fully documents sprint_id and issue_keys (including the example format). The description adds no syntax or constraint detail beyond that, which is the expected baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Move') and resource ('issues into a sprint'), so the operation is unambiguous. However, it offers no differentiation from related siblings such as jira_get_sprint or jira_backlog, which an agent might otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus alternatives like jira_backlog, nor any prerequisites (e.g. sprint must be active/future, issue must be on the same board). Usage context is entirely absent.
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 UsersCRead-onlyIdempotent
Search for Jira users.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search by name, email, or username | |
| start_at | No | Index of the first result (use next_start_at to page) | |
| max_results | No | Maximum results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description contributes nothing further — no mention of match semantics, whether results are paginated by default, or what happens when the query 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficiently sized, though its brevity is closer to under-specification than to disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with fully described parameters and annotation-covered safety, this is adequate to invoke the tool. It still leaves gaps about result shape and paging workflow, and notably the schema's start_at description references a next_start_at parameter that does not exist — context the description could have clarified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, start_at and max_results are already documented in the schema, which sets the baseline at 3. The description adds no syntax, format, or matching-behavior hints beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Search for Jira users"), so an agent immediately knows this queries the user directory rather than issues or projects. However, it offers no scope detail (e.g., matching semantics, whether it searches the whole site or a project) and does nothing to differentiate itself from the surrounding Jira siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context, no prerequisites, and names no alternatives. An agent must infer on its own that this is the tool for resolving a user to an accountId before operations like jira_create_issue or jira_move_to_sprint.
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 IssueCIdempotent
Update a Jira issue's standard and custom fields.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Standard fields to update (summary, description, labels, etc.) | |
| issue_key | Yes | Jira issue key (e.g. PROJ-123) | |
| custom_fields | No | Custom fields dict — keys are customfield_NNNNN IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and openWorldHint=true. The description adds no behavioral context beyond what annotations provide, such as whether unspecified fields are preserved, permission requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is efficient, though it provides no elaboration that might aid invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and only basic annotations, the description is too sparse. It does not explain whether the update merges or replaces fields, what happens to unmentioned fields, or any required permissions, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters including the distinction between standard and custom fields. The description's mention of 'standard and custom fields' adds no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('Jira issue'), and adds that both standard and custom fields can be updated. It does not explicitly distinguish from sibling tools like jira_create_issue, but the resource is clear enough to identify the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as jira_create_issue or other update tools. There are no prerequisites, no exclusions, and no context about typical scenarios.
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 VersionBIdempotent
Update an existing Jira version (REST API v2, supports Server/DC and Cloud).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New version name | |
| archived | No | Mark as archived | |
| released | No | Mark as released | |
| start_date | No | Start date (YYYY-MM-DD) | |
| version_id | Yes | Numeric version ID | |
| description | No | New description | |
| release_date | No | Release date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and openWorldHint=true, so the safety and repeat-call profile is covered. The description adds platform/deployment context (REST API v2, Server/DC and Cloud) but says nothing about partial-update semantics, permissions required, or what happens to omitted fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, resource and environment support are all packed into one clause with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no output schema, the description covers the bare essentials and annotations carry the safety profile. However it omits partial-update behavior and any hint about the returned version object, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 already documented in the schema. The description adds no format or semantic detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (Jira version), which is unambiguous and clearly distinct from jira_create_version and jira_get_project_versions. It does not explicitly contrast itself with any sibling, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as jira_create_version or jira_get_project_versions. The agent is left to infer that this applies only to versions that already exist.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Override filename | |
| file_path | Yes | Local file path to upload | |
| issue_key | Yes | Jira issue key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, so the write/external nature is partly covered. The description adds nothing further: no attachment size limits, no overwrite behavior for duplicate filenames, no permission requirements, and no indication of what the call returns (e.g. an attachment id). For a mutation tool this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. Nothing is redundant and the verb+resource appear immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and complete parameter documentation, the definition is minimally viable for calling the tool. It is incomplete on the behavioral side, though: return value, size limits, and duplicate-handling are absent, leaving the agent to guess at operational constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so issue_key, file_path, and the filename override are already fully documented in the schema. The description contributes no additional semantics such as format constraints or filename behavior, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 (file as attachment to a Jira issue), which cleanly distinguishes it from the read/delete attachment siblings. It does not, however, explicitly name those siblings or scope conditions, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. the issue must exist, permissions needed), and no reference to the sibling tools jira_get_attachments, jira_download_attachment, or jira_delete_attachment. The agent must infer all routing from the tool name alone.
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.
22 tool updates
v0.15.1- Changed
confluence_get_time_off1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
confluence_list_calendars1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
confluence_sprint_capacity1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_backlog2 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "default": "summary,status,issuetype,priority,assignee,labels", + "description": "Comma-separated Jira fields to return. Defaults to a compact set; pass '*all' for every field (large responses).", + "type": "string" +} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_board_config1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_create_issue1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_create_link1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_create_version1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_delete_attachment4 fields changed- changed
Input schema / properties / attachment_id / descriptionPrevious value: -"Attachment ID to delete"New value: +"Numeric attachment ID to delete" - removed
Input schema / properties / attachment_id / minLengthRemoved value: -1 - added
Input schema / properties / attachment_id / patternAdded value: +"^\\d+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_delete_link4 fields changed- changed
Input schema / properties / link_id / descriptionPrevious value: -"Issue link ID to delete"New value: +"Numeric issue link ID to delete" - removed
Input schema / properties / link_id / minLengthRemoved value: -1 - added
Input schema / properties / link_id / patternAdded value: +"^\\d+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_download_attachment3 fields changed- changed
Input schema / properties / save_path / descriptionPrevious value: -"Local path to save the file"New value: +"File name (no directories) to save under the download dir" - removed
Input schema / properties / save_path / minLengthRemoved value: -1 - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_get_attachments3 fields changed- removed
Input schema / properties / issue_key / minLengthRemoved value: -1 - added
Input schema / properties / issue_key / patternAdded value: +"^[A-Za-z][A-Za-z0-9_]+-\\d+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_get_board1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_get_project_versions3 fields changed- removed
Input schema / properties / project_key / minLengthRemoved value: -1 - added
Input schema / properties / project_key / patternAdded value: +"^[A-Za-z][A-Za-z0-9_]+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_get_sprint1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_list_fields1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_list_projects1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_move_to_sprint1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_search_users1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_update_issue3 fields changed- removed
Input schema / properties / issue_key / minLengthRemoved value: -1 - added
Input schema / properties / issue_key / patternAdded value: +"^[A-Za-z][A-Za-z0-9_]+-\\d+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_update_version4 fields changed- changed
Input schema / properties / version_id / descriptionPrevious value: -"Version ID"New value: +"Numeric version ID" - removed
Input schema / properties / version_id / minLengthRemoved value: -1 - added
Input schema / properties / version_id / patternAdded value: +"^\\d+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
jira_upload_attachment3 fields changed- removed
Input schema / properties / issue_key / minLengthRemoved value: -1 - added
Input schema / properties / issue_key / patternAdded value: +"^[A-Za-z][A-Za-z0-9_]+-\\d+$" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
7 tool updates
v0.10.1- Removed
confluence_get_person_time_off - Changed
confluence_get_time_off1 field changed- added
Input schema / properties / personAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Return only this person's events (exact, case-insensitive name match)" +}
- Changed
confluence_list_calendars1 field changed- added
Input schema / properties / searchAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Filter by calendar name, space name, or space key (case-insensitive)" +}
- Removed
confluence_search_calendars - Changed
confluence_sprint_capacity3 fields changed- changed
Input schema / properties / sprint_end / descriptionPrevious value: -"Sprint end date"New value: +"Sprint end date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week'" - changed
Input schema / properties / sprint_start / descriptionPrevious value: -"Sprint start date"New value: +"Sprint start date: YYYY-MM-DD, 'today', 'tomorrow', '+Nd', '-Nd', 'next week'" - changed
Input schema / properties / team_members / descriptionPrevious value: -"List of team member names"New value: +"Full names exactly as they appear on the calendar"
- Removed
confluence_who_is_out - Removed
jira_create_epic
2 tool updates
v0.8.1- Changed
jira_backlog1 field changed- added
Input schema / properties / start_atAdded value: +{ + "default": 0, + "description": "Index of the first result (use next_start_at to page)", + "minimum": 0, + "type": "integer" +}
- Changed
jira_search_users1 field changed- added
Input schema / properties / start_atAdded value: +{ + "default": 0, + "description": "Index of the first result (use next_start_at to page)", + "minimum": 0, + "type": "integer" +}
26 tool updates
v0.6.13- First observed
confluence_get_person_time_off - First observed
confluence_get_time_off - First observed
confluence_list_calendars - First observed
confluence_search_calendars - First observed
confluence_sprint_capacity - First observed
confluence_who_is_out - First observed
jira_backlog - First observed
jira_board_config - First observed
jira_create_epic - First observed
jira_create_issue - First observed
jira_create_link - First observed
jira_create_version - First observed
jira_delete_attachment - First observed
jira_delete_link - First observed
jira_download_attachment - First observed
jira_get_attachments - First observed
jira_get_board - First observed
jira_get_project_versions - First observed
jira_get_sprint - First observed
jira_list_fields - First observed
jira_list_projects - First observed
jira_move_to_sprint - First observed
jira_search_users - First observed
jira_update_issue - First observed
jira_update_version - First observed
jira_upload_attachment
TDQS
Scored across 22 tools
Most tools target clearly distinct resources: attachments (list/download/upload/delete), versions (create/update/list), boards/sprints, and Confluence calendars are well separated. Minor potential confusion exists around board-related tools (jira_get_board, jira_board_config, jira_backlog) and sprint tools, but descriptions disambiguate them adequately.
Names follow a consistent 'product_verb_noun' snake_case convention with jira_/confluence_ prefixes throughout, which is highly predictable. A few entries are noun-only (jira_board_config, jira_backlog, confluence_sprint_capacity) rather than verb-led, a minor deviation from the rest.
22 tools is on the heavier side but justified by an 'extended' server spanning two products (Jira and Confluence) with agile, attachment, version, and time-off domains. Each tool maps to a distinct operation, so little feels redundant despite the count.
Coverage is uneven: attachments have full lifecycle and versions have create/update/list, but there is no issue search/get, no delete-issue, no comment tools, and no delete-version. An agent can create and update issues but lacks a general way to retrieve or search them beyond the backlog endpoint.
Maintenance
Related MCP Connectors
MCP Server for JFrog, providing tools for development and artifact management.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
A MCP server that works with Google Calendar to manage event listing, reading, and updates.
A MCP server that works with Outlook Calendar to manage event listing, reading, and updates.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for Jira that enables comprehensive issue management, sprint operations, comments, attachments, and batch processing with localization and flexible date support.222 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Atlassian Confluence and Jira Cloud with 51 tools to manage pages, issues, sprints, boards, and backlogs.586 npm8MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for interacting with Jira Cloud, providing tools for issues, search, agile boards, comments, links, attachments, and webhook notifications.11 npm2MIT
- AlicenseBqualityCmaintenanceMCP server for Jira and Confluence integration with 32 tools for managing tickets, sprints, boards, worklogs, and Confluence pages.376 npm1GPL 2.0