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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 the meaningful scope fact that the search spans ALL leave calendars, but says nothing about matching semantics, pagination, or what happens when a person name matches nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core capability before the optional query patterns. No filler, no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotations carry the safety profile. The description covers the two main query modes but is silent on the calendar_name and group_by_person options, leaving minor gaps that the schema fills.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented, including the exact case-insensitive name match for 'person' and the relative date formats. The description only restates the person and single-day usage, adding little beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('time-off events'), scope ('across all leave calendars') and the date-range constraint, which cleanly separates it from confluence_list_calendars and confluence_sprint_capacity. It does not explicitly name or contrast with those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives concrete query patterns (filter by person, or query a single day to see who is out), which is useful implied usage guidance. However, it offers no when-to-use vs when-not-to-use framing and never mentions the alternative siblings (e.g., list calendars first to discover calendar names).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confluence_list_calendarsConfluence List 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') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety and side-effect profile is covered. The description adds only the optional-filtering behavior, with no note on result scope, pagination, or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action, resource, and modifiers with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-optional-parameter list tool with an output schema and full annotation coverage, the description is essentially complete; only richer behavioral detail (result scope/limits) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both filters are fully documented in the schema. The description's mention of 'type' and 'name/space search' mirrors the schema without adding syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('Confluence calendars') plus the narrowing options. It is distinct from the Jira siblings, but does not explicitly differentiate itself from the nearby confluence_get_time_off or confluence_sprint_capacity tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'optionally narrowed by type or a name/space search' implies when the filters are useful, but there is no explicit when-to-use/when-not or pointer to an alternative tool for broader or different calendar queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confluence_sprint_capacityConfluence Sprint 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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds that it factors in team time-off, which is a useful behavioral hint, but it does not cover return format, permissions, or how time-off data is sourced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero wasted words. It is efficient, though arguably too minimal for a multi-parameter tool, but it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema (100% coverage), output schema, and annotations, the description is adequate but thin. It omits any usage context or behavioral details beyond the annotations, leaving some inference to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond the schema, making the baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Calculate') and resource ('sprint capacity'), and adds a key factor ('team time-off'). It does not explicitly distinguish from siblings like confluence_get_time_off, but the purpose is clear enough to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or exclusions are provided. The agent must infer usage from the tool name and schema, with no indication of alternatives or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_backlogJira BacklogCRead-onlyIdempotent
Get backlog issues for a board.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | Board ID | |
| start_at | No | Index of the first result (use next_start_at to page) | |
| max_results | No | Maximum results |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 by structured data. The description adds nothing on top: no mention of pagination behavior, board-type requirements, or what constitutes a 'backlog' issue. With the annotation bar met, the description contributes essentially zero extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is efficient. It borders on under-specification rather than verbosity, but the sentence itself earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations plus a fully documented schema cover most structured needs. However, for a tool an agent must route between multiple Jira read operations, the absence of any usage or pagination context leaves a real gap, making it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (board_id, start_at, max_results) are documented in the schema, so the description need not compensate. It adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (Get) and resource (backlog issues) scoped to a board, which an agent can distinguish from jira_get_sprint (sprint issues) and jira_get_board (board metadata). It is specific enough to identify the operation, though it does nothing to explicitly contrast with those near neighbors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus jira_get_sprint, jira_get_board, or a general search. Usage must be inferred purely from the phrase 'backlog issues for a board'. No exclusions or prerequisites are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_board_configJira Board ConfigBRead-onlyIdempotent
Get board column/status configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | Board ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, openWorld=true, so safety and repeat-call behavior are covered. The description adds only that the payload concerns columns/statuses, with no note on auth requirements, rate limits, or whether config is cached/derived.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the resource front-loaded and zero filler. It is efficient, though this efficiency shades into under-specification given the sibling overlap.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and there is only one required param. Still, the ambiguity against jira_get_board and the absence of any usage condition leave a real gap for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema coverage; the schema documents board_id, so the baseline of 3 applies. The description contributes no extra meaning about the identifier's origin or valid sources.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (board column/status configuration), which is more precise than a bare resource fetch. It does not, however, differentiate itself from the sibling jira_get_board, leaving the agent to guess whether these overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus jira_get_board, jira_backlog, or jira_get_sprint. The agent gets no context or exclusions, only the bare purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_create_issueJira Create IssueB
Create a Jira issue with standard and custom fields.
Pass issue_type="Epic" to create an epic; set your instance's Epic Name
custom field through custom_fields (e.g. {"customfield_10009": "My Epic"}).
custom_fields example: {"customfield_10004": 5, "customfield_12345": {"value": "MyTeam"}}
| 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 and external-system nature is covered. The description adds genuinely useful context that custom field IDs are instance-specific and discoverable via jira_list_fields, but says nothing about permissions, required auth scope, or side effects on linked epics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence, followed by targeted Epic and custom_fields guidance. Both examples earn their place by demonstrating non-obvious value formats, though the two example blocks are slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations plus 100% schema coverage carry most of the remaining burden. The description covers the one genuinely tricky area (custom field ID/value formats), leaving only permission and prerequisite details unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: the special-casing of issue_type="Epic" and worked custom_fields examples showing both scalar (customfield_10004: 5) and object ({"value": "MyTeam"}) value shapes for different field types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a Jira issue') with the added scope of 'standard and custom fields'. Clear enough to distinguish from sibling mutators like jira_create_version or jira_create_link, though it never names or contrasts those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this tool versus alternatives, nor does it state prerequisites such as required project permissions. The only usage-shaped hint is the Epic-specific issue_type guidance, which is really parameter semantics rather than tool selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_create_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) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutating and external-system nature is covered. The description adds nothing beyond that – no mention of permission requirements, link-type validity constraints, duplicate-link behavior, or that the optional comment is attached to the 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 filler, which is structurally clean. It is arguably too terse for a tool with non-obvious directional semantics, but nothing in it is wasted.
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?
An output schema exists (so return values need not be described) and annotations cover the mutation profile. Still, for a tool whose inward/outward directionality is genuinely confusing, the description contributes no context, leaving the schema to carry the entire explanation.
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 the inward/outward directionality and link_type examples) are already documented in the schema. The description adds no parameter meaning beyond that, which is the baseline-3 case.
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 ('a link between two Jira issues'), which is enough to separate it from jira_delete_link. However it offers no differentiation from other create-family siblings or any scope detail beyond the bare operation.
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 tool versus alternatives (e.g. jira_delete_link for removal, or the issue-update tools for other relationships), and no prerequisites or exclusions are mentioned. The agent must infer usage purely 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_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) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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/external-impact profile is covered. The description adds the API version and Server/DC vs Cloud compatibility, which is useful for an agent choosing an endpoint, but says nothing about permissions, idempotency, or duplicate-name handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action and then the compatibility qualifier; nothing is wasted. It is perhaps too spare, but it is not padded or disorganized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema fully documents parameters. However, for a 7-parameter creation tool with no annotations covering permissions or version-collision behavior, the description leaves real gaps an agent may need to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (name, project_key, dates, flags) are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Create a new version in a Jira project') that clearly separates it from siblings like jira_update_version and jira_get_project_versions. It does not explicitly name an alternative or scope beyond the project, but the verb alone disambiguates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus jira_update_version or jira_get_project_versions, and no mention of preconditions such as required permissions or the need for an existing project. Usage context is only implied by the word 'Create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_delete_attachmentJira Delete AttachmentCDestructive
Delete a Jira attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| attachment_id | Yes | Attachment ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. The description adds nothing beyond that: no note on permanence, required permissions, or side effects, so with annotations carrying the full burden this is a bare restatement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no waste, but it is under-specified rather than truly concise. There is no front-loaded caveat an agent would need before running a destructive call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with an output schema, the description is too thin: it omits irreversibility, permission requirements, and confirmation behavior. The output schema covers return values, so that gap is minor, but the usage/safety gaps are significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage, so the schema fully documents attachment_id. The description adds no format or sourcing detail (e.g., where to obtain the ID), leaving this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (Jira attachment), which is unambiguous. It does not, however, differentiate itself from siblings like jira_download_attachment or jira_get_attachments beyond the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives. It does not say to confirm the attachment exists (via jira_get_attachments) beforehand or warn that deletion is irreversible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_delete_linkJira Delete LinkCDestructive
Delete a Jira issue link by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| link_id | Yes | Issue link ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 by structured data. The description adds nothing beyond that: it does not state that the deletion is permanent/irreversible, whether permissions are required, or what happens to the linked issues.
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 the action front-loaded and zero filler. It is efficient, though its brevity borders on under-specification rather than optimized 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?
With an output schema present, return values need not be described, and the one required parameter is fully documented. However, for a destructive mutation with no annotation-independent guidance on prerequisites or irreversibility, the definition 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% for the single link_id parameter, so the schema already carries its meaning. The description's 'by its ID' merely restates the parameter rather than adding format or sourcing details, 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 gives a specific verb (Delete), resource (Jira issue link), and lookup key (by its ID), which cleanly separates it from the sibling jira_create_link. It is clear and unambiguous, though it does not explicitly name the sibling it contrasts 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?
There is no guidance on when to use this versus alternatives, no prerequisites, and no note about how to obtain a valid link_id (e.g., from an issue's link list). The only implied usage is the obvious destructive action itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_download_attachmentJira Download AttachmentA
Download a Jira attachment to a local file. Writes to current working directory only.
| Name | Required | Description | Default |
|---|---|---|---|
| save_path | Yes | Local path to save the file | |
| content_url | Yes | Attachment content URL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark it as non-read-only and open-world, which the description does not contradict. It adds a genuinely useful behavioral constraint the annotations lack: writes are confined to the current working directory, which materially changes how an agent should form save_path. It omits overwrite behavior for an existing file, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the primary action stated first and the scoping constraint second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the action, destination, and the CWD restriction. Remaining gaps are small: authentication/prerequisite assumptions and what happens if the target file already exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and both parameters are already documented. The description goes beyond the schema by clarifying that save_path resolves against the current working directory rather than an arbitrary absolute location, which adds real meaning for a path parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Download') plus resource ('a Jira attachment') plus destination ('to a local file'), which is enough to separate it from jira_get_attachments (metadata listing) and jira_upload_attachment (opposite direction). It does not explicitly name or contrast those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never states when to reach for this tool versus jira_get_attachments or jira_upload_attachment, nor any precondition such as already knowing the attachment's content URL. Usage is only inferred from the verb, which is minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_get_attachmentsJira Get AttachmentsBRead-onlyIdempotent
List attachments on a Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_key | Yes | Jira issue key (e.g. PROJ-123) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 pagination behavior, no ordering, no indication of whether attachments can be filtered or whether auth scopes matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the resource front-loaded. It is efficient but borders on under-specification rather than genuinely tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with a single required parameter, full schema coverage, existing annotations, and an output schema handling return values, the description is adequate. What is missing is usage routing rather than missing behavioral detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema coverage is 100%, with the schema itself supplying the 'PROJ-123' example format. The description adds no semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('attachments on a Jira issue'), which implicitly distinguishes it from the upload/download/delete attachment siblings. It stops short of naming those siblings or clarifying any scope, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is given. An agent could infer this is the read counterpart to jira_upload_attachment/jira_download_attachment, but the description never says so explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_get_boardJira Get BoardBRead-onlyIdempotent
Get details of a Jira agile board.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | Board ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 no further behavioral context—no details on return format, auth requirements, rate limits, or what 'details' includes—so it does not go beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words. It is appropriately sized for a simple get operation and immediately conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and a single fully documented parameter, the description does not need to explain return values. It is nearly complete, though it could mention how it differs from jira_board_config to fully guide selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single board_id parameter, so the schema fully documents it. The description adds no additional meaning or format constraints beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: retrieve details of a Jira agile board. It does not differentiate from sibling tools like jira_board_config, which likely also returns board-related data, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as jira_board_config or jira_get_sprint. The description gives no context about when board details are needed, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_get_project_versionsJira Get Project VersionsARead-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) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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's genuinely extra contribution is the deployment compatibility note ('REST API v2, supports Server/DC and Cloud'), but it says nothing about result ordering, pagination, or whether archived versions are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact, front-loaded sentence with no filler or repetition of the title. The parenthetical API-version detail is slightly tangential but short and arguably earns its place as compatibility context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations carry the safety profile for this read-only tool. Combined with a single well-documented parameter, the description is close to sufficient, missing only scoping details such as whether unreleased or archived versions are returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter and schema description coverage is 100%, with the schema itself supplying the example format ('Project key (e.g. PROJ)'). The description adds no syntax or constraint detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') plus resource ('all versions for a Jira project'), which cleanly separates it from the mutating siblings jira_create_version and jira_update_version. It does not name those siblings explicitly, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the read verb 'List all'; the description never states when to reach for this versus jira_create_version or jira_update_version, nor any prerequisites like project permissions. A reader can infer it is the read path, but nothing is made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_get_sprintJira Get SprintCRead-onlyIdempotent
Get details of a specific sprint.
| Name | Required | Description | Default |
|---|---|---|---|
| sprint_id | Yes | Sprint ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 structurally. The description adds nothing beyond that – no note on missing/inactive sprints, permission requirements, or error behavior for a read against an external system.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no padding or redundancy. It is front-loaded but arguably too terse to be fully informative, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because the output schema exists and annotations carry the read-only/idempotent profile, the definition is minimally viable. Still, for an 'openWorld' read it gives no guidance on lookup semantics or failure modes, leaving clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required, well-constrained integer parameter, and an output schema exists. Per the baseline rule, 3 is appropriate; the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get details of a specific sprint'), so the operation is unambiguous. However, it does not distinguish itself from adjacent siblings such as jira_move_to_sprint or confluence_sprint_capacity, leaving no differentiation guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent learns nothing about when this tool is preferable to sibling tools that also touch sprints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_list_fieldsJira List FieldsBRead-onlyIdempotent
List Jira fields, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter fields by name | |
| custom_only | No | Only return custom fields |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is already covered. The description adds no behavioral context beyond what annotations and schema provide (e.g., no return format, pagination, or field-type details), but it does not contradict the annotations either. This is the minimum viable level when structured data carries the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word ('List', 'Jira fields', 'optionally filtered') contributes to the core meaning, and there is no redundancy or tangential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with an output schema and full parameter coverage, the description is nearly complete. The output schema handles return values and annotations cover safety, but the description could do slightly more to clarify what 'fields' means in Jira (system vs. custom) without relying entirely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters ('search' and 'custom_only'), so the schema already fully documents their meaning. The description's 'optionally filtered' phrase is redundant with the schema and adds no syntax or format detail beyond it. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'List' and resource 'Jira fields', making the tool's function clear. It does not differentiate itself from sibling list tools like jira_list_projects or jira_search_users, but the resource noun is specific enough for an agent to identify the correct tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally filtered' hints that the tool can be used with or without parameters, but there is no explicit guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. An agent gets no routing help from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_list_projectsJira List ProjectsARead-onlyIdempotent
List all accessible Jira projects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 by structured data. The phrase "all accessible" usefully signals that results are permission-scoped, which is context beyond the annotations, but nothing is said about pagination, result size, or refresh behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, front-loading both the action and the scope constraint. Nothing to trim and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value details need not be described, and annotations cover the read-only/idempotent profile. For a zero-parameter list tool the description is essentially sufficient, lacking only notes on filtering or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("List ... Jira projects") and adds a meaningful scope qualifier ("all accessible"). It is unambiguous, though it does no explicit sibling differentiation — unnecessary here since no other sibling lists projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and no alternatives (e.g. jira_get_project_versions for version-specific needs). Usage is only weakly implied by the verb itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_move_to_sprintJira Move To SprintC
Move issues into a sprint.
| Name | Required | Description | Default |
|---|---|---|---|
| sprint_id | Yes | Target sprint ID | |
| issue_keys | Yes | Issue keys to move (e.g. ['PROJ-1', 'PROJ-2']) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, which already signal a mutating, external-facing operation. The description adds nothing beyond that: it does not say whether issues are removed from a prior sprint, whether the target sprint must be active/future, whether permissions are required, or whether the move is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity is under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with only partial annotation coverage, the description omits the operationally important details: what happens to issues already in another sprint, sprint state requirements, and permission needs. The output schema covers return values, but the pre-call semantics an agent needs are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented inline (sprint_id, issue_keys with example format). The description contributes no additional parameter meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('move issues into a sprint'), which is unambiguous on its own. However, it does nothing to distinguish itself from siblings like jira_backlog or jira_get_sprint, so an agent gets no routing signal from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance. With sprint-related siblings (jira_backlog, jira_get_sprint, confluence_sprint_capacity) present, the description never explains which one applies to a given intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_search_usersJira Search UsersBRead-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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds no further behavioral context such as authentication requirements, rate limits, or result handling, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is perhaps overly terse, but structurally it is efficient and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search tool with full schema descriptions, annotations, and an output schema, the terse description is largely sufficient. It omits query scope and pagination guidance, but those details are covered by the schema and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the query fields and pagination parameters fully documented in the input schema. The description adds no parameter meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Search') and resource ('Jira users'), making the tool's core purpose immediately understandable. It does not explicitly differentiate itself from siblings, but no sibling tool overlaps with user search, so the resource alone is sufficiently distinctive for selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no alternatives, and no exclusions. An agent gets no help deciding between this and other Jira search or lookup tools, though there is no direct sibling alternative for user search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_update_issueJira Update 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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, and openWorld=true, so the safety profile is covered. The description adds nothing beyond them: it does not say whether the update is a partial merge or a replace, what happens to unlisted fields, or whether permissions are required for custom fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is appropriately sized, though at the cost of the behavioral context the tool would benefit from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the three parameters are fully documented in the schema. However, for a mutation tool the definition is silent on update semantics (partial vs full) and permission requirements, leaving a real operational gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameter descriptions (standard vs customfield_NNNNN keys) are already in the schema. The description only restates 'standard and custom fields', adding no format or syntax detail beyond structured data. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (update) plus resource (Jira issue) with the field scope named. It does not differentiate itself from siblings like jira_create_issue, but the create/update distinction is implied by the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus jira_create_issue or other mutating siblings, no prerequisites, and no mention of whether both fields and custom_fields can be sent together. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_update_versionJira Update 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 | Version ID | |
| description | No | New description | |
| release_date | No | Release date (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation and idempotency profile (readOnlyHint=false, idempotentHint=true, openWorldHint=true). The description adds useful platform context (REST API v2, Server/DC and Cloud support), but omits more valuable behavioral detail such as partial-update semantics for omitted fields or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and resource come first. It is lean, though the trailing parenthetical about API version and deployment targets could be trimmed or expanded into actual guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the schema fully documents the seven parameters. However, for a mutation tool the description leaves update semantics and permission requirements unaddressed, making it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including version_id, name, archived, released, and the date fields is documented in the schema. The description adds nothing about parameter meaning or format, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Update an existing Jira version"), which clearly distinguishes it from read-oriented siblings like jira_get_project_versions. It does not explicitly contrast with jira_create_version, but the word 'existing' implies the distinction adequately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as jira_create_version, nor any stated prerequisites (e.g., required permissions or product edition). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_upload_attachmentJira Upload AttachmentB
Upload a file as an attachment to a Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Override filename | |
| file_path | Yes | Local file path to upload | |
| issue_key | Yes | Jira issue key |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 and external-facing nature is covered. The description adds no behavioral context such as authentication needs, overwrite behavior, file size limits, or handling of existing attachments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero waste. For a simple upload operation, this is appropriately sized and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be described, and the annotations cover safety. However, the description is minimal and omits contextual details like local file handling, success/failure behavior, or attachment overwrite semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents issue_key, file_path, and optional filename. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (upload) and resource (attachment to a Jira issue), clearly distinguishing this tool from sibling attachment operations like get, download, and delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides no when-to-use guidance, no prerequisites, and no explicit alternatives such as jira_get_attachments or jira_download_attachment. The purpose is implied, but selection guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
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 a distinct resource+action within Jira (attachments, versions, sprints, boards, links) or Confluence calendars, so selection is generally clear. Minor overlap exists among the agile tools (jira_backlog, jira_get_board, jira_board_config, jira_get_sprint, jira_move_to_sprint), which an agent must disambiguate by reading descriptions.
Strong jira_/confluence_ prefixing plus a consistent verb_noun pattern (list_projects, get_sprint, create_version, delete_link, upload_attachment). A few names break the pattern (jira_backlog, jira_board_config, confluence_sprint_capacity) but remain readable and predictable.
22 tools is on the heavy side, but the server spans two products (Jira issues/attachments/versions/agile plus Confluence calendars), so most tools earn their place. It could be trimmed, but no obvious redundancy bloats the set.
Attachments get full CRUD and versions are well covered, but issue handling is notably asymmetric: there is create_issue and update_issue yet no get_issue, delete_issue, or general issue search/list. Versions lack delete and links lack a list/get, leaving agents with dead ends for common workflows.
Maintenance
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.529 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.3711 npm1GPL 2.0