Skip to main content
Glama

MCP Atlassian

PyPI Version PyPI - Downloads PePy - Total Downloads Run Tests License

Model Context Protocol (MCP) server for Atlassian products (Confluence, Jira, Bitbucket, and Xray for Jira). This integration supports Confluence, Jira, and Bitbucket for both Cloud and Server/Data Center deployments. Xray for Jira is available only on Server/Data Center deployments and always uses the Jira URL and credentials you configure. Note: This project is a fork from mcp-atlassian. The project at the time of making a fork has not been maintained for a while with couple of dozen pull requests and a few issues on the github project. Hence, it was about time to fork the project and make some fixes.

Example Usage

Ask your AI assistant to:

  • ๐Ÿ“ Automatic Jira Updates - "Update Jira from our meeting notes"

  • ๐Ÿ” AI-Powered Confluence Search - "Find our OKR guide in Confluence and summarize it"

  • ๐Ÿ› Smart Jira Issue Filtering - "Show me urgent bugs in PROJ project from last week"

  • ๐Ÿ“„ Content Creation & Management - "Create a tech design doc for XYZ feature"

  • ๐Ÿงช Test Management with Xray for Jira - "Get test execution results for the latest sprint"

  • ๐Ÿ“Š Quality Assurance Tracking - "Update test run status and add defects found during testing"

Feature Demo

https://github.com/user-attachments/assets/35303504-14c6-4ae4-913b-7c25ea511c3e

https://github.com/user-attachments/assets/7fe9c488-ad0c-4876-9b54-120b666bb785

Compatibility

Product

Deployment Type

Support Status

Confluence

Cloud

โœ… Fully supported

Confluence

Server/Data Center

โœ… Supported (version 6.0+)

Jira

Cloud

โœ… Fully supported

Jira

Server/Data Center

โœ… Supported (version 8.14+)

Bitbucket

Cloud

โš ๏ธ Not Tested

Bitbucket

Server/Data Center

โœ… Supported (version 9.0+)

Xray for Jira

Cloud

โŒ Not Supported

Xray for Jira

Server/Data Center

โœ… Supported (Jira 8.0+)

Related MCP server: MCP Atlassian

Quick Start Guide

๐Ÿ” 1. Authentication Setup

MCP Atlassian supports four authentication methods:

A. API Token Authentication (Cloud) - Recommended

  1. Go to https://id.atlassian.com/manage-profile/security/api-tokens

  2. Click Create API token, name it

  3. Copy the token immediately

B. Personal Access Token (Server/Data Center)

  1. Go to your profile (avatar) โ†’ Profile โ†’ Personal Access Tokens

  2. Click Create token, name it, set expiry

  3. Copy the token immediately

C. OAuth 2.0 Authentication (Cloud) - Advanced

NOTE

OAuth 2.0 is more complex to set up but provides enhanced security features. For most users, API Token authentication (Method A) is simpler and sufficient.

  1. Go to Atlassian Developer Console

  2. Create an "OAuth 2.0 (3LO) integration" app

  3. Configure Permissions (scopes) for Jira/Confluence

  4. Set Callback URL (e.g., http://localhost:8080/callback)

  5. Run setup wizard:

    docker run --rm -i \
      -p 8080:8080 \
      -v "${HOME}/.mcp-atlassian:/home/app/.mcp-atlassian" \
      ghcr.io/SharkyND/mcp-atlassian:latest --oauth-setup -v
  6. Follow prompts for Client ID, Secret, URI, and Scope

  7. Complete browser authorization

  8. Add obtained credentials to .env or IDE config:

    • ATLASSIAN_OAUTH_CLOUD_ID (from wizard)

    • ATLASSIAN_OAUTH_CLIENT_ID

    • ATLASSIAN_OAUTH_CLIENT_SECRET

    • ATLASSIAN_OAUTH_REDIRECT_URI

    • ATLASSIAN_OAUTH_SCOPE

IMPORTANT

For the standard OAuth flow described above, includeoffline_access in your scope (e.g., read:jira-work write:jira-work offline_access). This allows the server to refresh the access token automatically.

If you are running mcp-atlassian part of a larger system that manages Atlassian OAuth 2.0 access tokens externally (e.g., through a central identity provider or another application), you can provide an access token directly to this MCP server. This method bypasses the interactive setup wizard and the server's internal token management (including refresh capabilities).

Requirements:

  • A valid Atlassian OAuth 2.0 Access Token with the necessary scopes for the intended operations.

  • The corresponding ATLASSIAN_OAUTH_CLOUD_ID for your Atlassian instance.

Configuration: To use this method, set the following environment variables (or use the corresponding command-line flags when starting the server):

  • ATLASSIAN_OAUTH_CLOUD_ID: Your Atlassian Cloud ID. (CLI: --oauth-cloud-id)

  • ATLASSIAN_OAUTH_ACCESS_TOKEN: Your pre-existing OAuth 2.0 access token. (CLI: --oauth-access-token)

Important Considerations for BYOT:

  • Token Lifecycle Management: When using BYOT, the MCP server does not handle token refresh. The responsibility for obtaining, refreshing (before expiry), and revoking the access token lies entirely with you or the external system providing the token.

  • Unused Variables: The standard OAuth client variables (ATLASSIAN_OAUTH_CLIENT_ID, ATLASSIAN_OAUTH_CLIENT_SECRET, ATLASSIAN_OAUTH_REDIRECT_URI, ATLASSIAN_OAUTH_SCOPE) are not used and can be omitted when configuring for BYOT.

  • No Setup Wizard: The --oauth-setup wizard is not applicable and should not be used for this approach.

  • No Token Cache Volume: The Docker volume mount for token storage (e.g., -v "${HOME}/.mcp-atlassian:/home/app/.mcp-atlassian") is also not necessary if you are exclusively using the BYOT method, as no tokens are stored or managed by this server.

  • Scope: The provided access token must already have the necessary permissions (scopes) for the Jira/Confluence operations you intend to perform.

This option is useful in scenarios where OAuth credential management is centralized or handled by other infrastructure components.

D. Dynamic Header-Based Authentication - Multi-Tenant

NOTE

Header-based authentication enables dynamic, per-request credential management without requiring environment variables or server restarts. This is ideal for multi-tenant applications, serverless environments, or when credentials need to be managed dynamically.

With header-based authentication, you can pass Jira, Confluence, and Bitbucket credentials directly through HTTP headers on each request. Xray for Jira automatically reuses the Jira headers. This method supports both Personal Access Tokens (PAT) for Server/Data Center and API tokens for Cloud deployments.

Required Headers:

For Jira authentication:

  • X-Atlassian-Jira-Personal-Token: Your Jira PAT or API token

  • X-Atlassian-Jira-Url: Your Jira instance URL

For Confluence authentication:

  • X-Atlassian-Confluence-Personal-Token: Your Confluence PAT or API token

  • X-Atlassian-Confluence-Url: Your Confluence instance URL

For Bitbucket authentication:

  • X-Atlassian-Bitbucket-Personal-Token: Your Bitbucket PAT or app password

  • X-Atlassian-Bitbucket-Url: Your Bitbucket instance URL

For Xray for Jira authentication:

  • Reuses your Jira headers (X-Atlassian-Jira-Personal-Token and X-Atlassian-Jira-Url), which must point to a Server/Data Center Jira with Xray installed.

  • Xray for Jira tools are disabled by default. To enable Xray for Jira tools, set the X-Atlassian-Enable-Xray header to true.

Benefits:

  • โœ… No environment variables required

  • โœ… Per-request authentication

  • โœ… Multi-tenant support

  • โœ… Dynamic credential management

  • โœ… Zero server configuration needed

  • โœ… Works with both Cloud and Server/Data Center

Example MCP Client Configuration:

{
  "Atlassian": {
    "url": "http://localhost:8000/mcp",
    "headers": {
      "X-Atlassian-Jira-Personal-Token": "your_jira_pat_or_api_token",
      "X-Atlassian-Jira-Url": "https://your-jira-instance.com",
      "X-Atlassian-Confluence-Personal-Token": "your_confluence_pat_or_api_token",
      "X-Atlassian-Confluence-Url": "https://your-confluence-instance.com",
      "X-Atlassian-Bitbucket-Personal-Token": "your_bitbucket_pat_or_app_password",
      "X-Atlassian-Bitbucket-Url": "https://your-bitbucket-instance.com",
      "X-Atlassian-Read-Only-Mode": "true",
      "X-Atlassian-Jira-Read-Only-Mode": "false"
    },
    "type": "http"
  }
}
TIP

Per-product headers override the globalX-Atlassian-Read-Only-Mode header for that product. In the example above the global flag enables read-only for Confluence and Bitbucket, while Jira remains in read/write mode.

TIP

Multi-Cloud OAuth Support: If you're building a multi-tenant application where users provide their own OAuth tokens, see the Multi-Cloud OAuth Support section for minimal configuration setup.

๐Ÿ“ฆ 2. Installation

MCP Atlassian is distributed as a Docker image. This is the recommended way to run the server, especially for IDE integration. Ensure you have Docker installed.

# Pull Pre-built Image
docker pull ghcr.io/SharkyND/mcp-atlassian:latest

๐Ÿ› ๏ธ IDE Integration

MCP Atlassian is designed to be used with AI assistants through IDE integration.

TIP

For Claude Desktop: Locate and edit the configuration file directly:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

For Cursor: Open Settings โ†’ MCP โ†’ + Add new global MCP server

โš™๏ธ Configuration Methods

There are three main approaches to configure the Docker container:

  1. Passing Variables Directly (shown in examples below)

  2. Using an Environment File with --env-file flag (shown in collapsible sections)

  3. Header-Based Authentication (no environment variables required - see Header-Based Authentication Configuration)

NOTE

Common environment variables include:

  • CONFLUENCE_SPACES_FILTER: Filter by space keys (e.g., "DEV,TEAM,DOC")

  • JIRA_PROJECTS_FILTER: Filter by project keys (e.g., "PROJ,DEV,SUPPORT")

  • READ_ONLY_MODE: Set to true to disable write operations for all products

  • JIRA_READ_ONLY_MODE: Set to true to disable write operations for Jira only

  • CONFLUENCE_READ_ONLY_MODE: Set to true to disable write operations for Confluence only

  • BITBUCKET_READ_ONLY_MODE: Set to true to disable write operations for Bitbucket only

  • MCP_VERBOSE: Set to "true" for more detailed logging

  • MCP_LOGGING_STDOUT: Set to "true" to log to stdout instead of stderr

  • ENABLED_TOOLS: Comma-separated list of tool names to enable (e.g., "confluence_search,jira_get_issue")

Header-Based Authentication (no environment variables needed):

  • X-Atlassian-Jira-Personal-Token: Jira PAT/API token (passed as HTTP header), used for XRay as well

  • X-Atlassian-Jira-Url: Jira instance URL (passed as HTTP header), used for XRay as well

  • X-Atlassian-Confluence-Personal-Token: Confluence PAT/API token (passed as HTTP header)

  • X-Atlassian-Confluence-Url: Confluence instance URL (passed as HTTP header)

  • X-Atlassian-Bitbucket-Url: Bitbucket URL (passed as HTTP header)

  • X-Atlassian-Bitbucket-Personal-Token: Bitbucket PAT token (passed as HTTP header)

  • X-Atlassian-Read-Only-Mode: Global per-request read-only mode โ€” applies to all products (passed as HTTP header)

  • X-Atlassian-Jira-Read-Only-Mode: Per-request read-only mode for Jira only (passed as HTTP header)

  • X-Atlassian-Confluence-Read-Only-Mode: Per-request read-only mode for Confluence only (passed as HTTP header)

  • X-Atlassian-Bitbucket-Read-Only-Mode: Per-request read-only mode for Bitbucket only (passed as HTTP header)

  • X-Atlassian-Enable-Xray: Enable/disable Xray for Jira tools (disabled by default)

See the .env.example file for all available options.

๐Ÿ“ Configuration Examples

Method 1 (Passing Variables Directly):

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "CONFLUENCE_URL",
        "-e", "CONFLUENCE_USERNAME",
        "-e", "CONFLUENCE_API_TOKEN",
        "-e", "JIRA_URL",
        "-e", "JIRA_USERNAME",
        "-e", "JIRA_API_TOKEN",
        "-e", "BITBUCKET_URL",
        "-e", "BITBUCKET_USERNAME",
        "-e", "BITBUCKET_APP_PASSWORD",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
        "CONFLUENCE_USERNAME": "your.email@company.com",
        "CONFLUENCE_API_TOKEN": "your_confluence_api_token",
        "JIRA_URL": "https://your-company.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your_jira_api_token",
        "BITBUCKET_URL": "https://bitbucket.org",
        "BITBUCKET_USERNAME": "your.email@company.com",
        "BITBUCKET_APP_PASSWORD": "your_bitbucket_app_password"
      }
    }
  }
}
{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--env-file",
        "/path/to/your/mcp-atlassian.env",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ]
    }
  }
}

For Server/Data Center deployments, use direct variable passing:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "CONFLUENCE_URL",
        "-e", "CONFLUENCE_PERSONAL_TOKEN",
        "-e", "CONFLUENCE_SSL_VERIFY",
        "-e", "JIRA_URL",
        "-e", "JIRA_PERSONAL_TOKEN",
        "-e", "JIRA_SSL_VERIFY",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "CONFLUENCE_URL": "https://confluence.your-company.com",
        "CONFLUENCE_PERSONAL_TOKEN": "your_confluence_pat",
        "CONFLUENCE_SSL_VERIFY": "false",
        "JIRA_URL": "https://jira.your-company.com",
        "JIRA_PERSONAL_TOKEN": "your_jira_pat",
        "JIRA_SSL_VERIFY": "false"
      }
    }
  }
}
NOTE

SetCONFLUENCE_SSL_VERIFY and JIRA_SSL_VERIFY to "false" only if you have self-signed certificates.

These examples show how to configure mcp-atlassian in your IDE (like Cursor or Claude Desktop) when using OAuth 2.0 for Atlassian Cloud.

Example for Standard OAuth 2.0 Flow (using Setup Wizard):

This configuration is for when you use the server's built-in OAuth client and have completed the OAuth setup wizard.

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v", "<path_to_your_home>/.mcp-atlassian:/home/app/.mcp-atlassian",
        "-e", "JIRA_URL",
        "-e", "CONFLUENCE_URL",
        "-e", "ATLASSIAN_OAUTH_CLIENT_ID",
        "-e", "ATLASSIAN_OAUTH_CLIENT_SECRET",
        "-e", "ATLASSIAN_OAUTH_REDIRECT_URI",
        "-e", "ATLASSIAN_OAUTH_SCOPE",
        "-e", "ATLASSIAN_OAUTH_CLOUD_ID",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "JIRA_URL": "https://your-company.atlassian.net",
        "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
        "ATLASSIAN_OAUTH_CLIENT_ID": "YOUR_OAUTH_APP_CLIENT_ID",
        "ATLASSIAN_OAUTH_CLIENT_SECRET": "YOUR_OAUTH_APP_CLIENT_SECRET",
        "ATLASSIAN_OAUTH_REDIRECT_URI": "http://localhost:8080/callback",
        "ATLASSIAN_OAUTH_SCOPE": "read:jira-work write:jira-work read:confluence-content.all write:confluence-content offline_access",
        "ATLASSIAN_OAUTH_CLOUD_ID": "YOUR_CLOUD_ID_FROM_SETUP_WIZARD"
      }
    }
  }
}
NOTE
  • For the Standard Flow:

    • ATLASSIAN_OAUTH_CLOUD_ID is obtained from the --oauth-setup wizard output or is known for your instance.

    • Other ATLASSIAN_OAUTH_* client variables are from your OAuth app in the Atlassian Developer Console.

    • JIRA_URL and CONFLUENCE_URL for your Cloud instances are always required.

    • The volume mount (-v .../.mcp-atlassian:/home/app/.mcp-atlassian) is crucial for persisting the OAuth tokens obtained by the wizard, enabling automatic refresh.

Example for Pre-existing Access Token (BYOT - Bring Your Own Token):

This configuration is for when you are providing your own externally managed OAuth 2.0 access token.

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "JIRA_URL",
        "-e", "CONFLUENCE_URL",
        "-e", "ATLASSIAN_OAUTH_CLOUD_ID",
        "-e", "ATLASSIAN_OAUTH_ACCESS_TOKEN",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "JIRA_URL": "https://your-company.atlassian.net",
        "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
        "ATLASSIAN_OAUTH_CLOUD_ID": "YOUR_KNOWN_CLOUD_ID",
        "ATLASSIAN_OAUTH_ACCESS_TOKEN": "YOUR_PRE_EXISTING_OAUTH_ACCESS_TOKEN"
      }
    }
  }
}
NOTE
  • For the BYOT Method:

    • You primarily need JIRA_URL, CONFLUENCE_URL, ATLASSIAN_OAUTH_CLOUD_ID, and ATLASSIAN_OAUTH_ACCESS_TOKEN.

    • Standard OAuth client variables (ATLASSIAN_OAUTH_CLIENT_ID, CLIENT_SECRET, REDIRECT_URI, SCOPE) are not used.

    • Token lifecycle (e.g., refreshing the token before it expires and restarting mcp-atlassian) is your responsibility, as the server will not refresh BYOT tokens.

This configuration uses the new dynamic header-based authentication feature. No environment variables are required - credentials are passed through HTTP headers on each request.

Minimal Docker Configuration (No Environment Variables Needed):

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ]
    }
  }
}

MCP Client Configuration with Headers:

Configure your MCP client to send authentication headers with each request:

{
  "Atlassian": {
    "url": "http://localhost:8000/mcp",
    "headers": {
      "X-Atlassian-Read-Only-Mode": "true",
      "X-Atlassian-Jira-Read-Only-Mode": "false",
      "X-Atlassian-Jira-Personal-Token": "your_jira_pat_or_api_token",
      "X-Atlassian-Jira-Url": "https://your-jira-instance.com",
      "X-Atlassian-Confluence-Personal-Token": "your_confluence_pat_or_api_token",
      "X-Atlassian-Confluence-Url": "https://your-confluence-instance.com"
    },
    "type": "http"
  }
}
NOTE

In the example above,X-Atlassian-Read-Only-Mode: true sets the global default (Confluence and Bitbucket become read-only), but X-Atlassian-Jira-Read-Only-Mode: false overrides that for Jira, keeping it in read/write mode.

Optional Docker Configuration with Read-Only Mode:

If you want to enable read-only mode globally (rather than per-request), you can still use environment variables:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "READ_ONLY_MODE",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "READ_ONLY_MODE": "true"
      }
    }
  }
}
NOTE

Header-Based Authentication Benefits:

  • โœ… Zero Configuration: No environment variables required

  • โœ… Multi-Tenant Ready: Different credentials per request

  • โœ… Dynamic: Credentials can change without server restart

  • โœ… Flexible: Mix and match Jira/Confluence authentication

  • โœ… Secure: Credentials are not stored in environment or files

TIP

Selective Service Authentication: You can authenticate with just Jira or just Confluence by providing only the relevant headers. The server will automatically detect available services based on the headers provided.

  • Service-specific overrides are available (e.g., JIRA_HTTPS_PROXY, CONFLUENCE_NO_PROXY).

  • Service-specific variables override global ones for that service.

Add the relevant proxy variables to the args (using -e) and env sections of your MCP configuration:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "... existing Confluence/Jira vars",
        "-e", "HTTP_PROXY",
        "-e", "HTTPS_PROXY",
        "-e", "NO_PROXY",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "... existing Confluence/Jira vars": "...",
        "HTTP_PROXY": "http://proxy.internal:8080",
        "HTTPS_PROXY": "http://proxy.internal:8080",
        "NO_PROXY": "localhost,.your-company.com"
      }
    }
  }
}

Credentials in proxy URLs are masked in logs. If you set NO_PROXY, it will be respected for requests to matching hosts.

MCP Atlassian supports adding custom HTTP headers to all API requests. This feature is particularly useful in corporate environments where additional headers are required for security, authentication, or routing purposes.

Custom headers are configured using environment variables with comma-separated key=value pairs:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "CONFLUENCE_URL",
        "-e", "CONFLUENCE_USERNAME",
        "-e", "CONFLUENCE_API_TOKEN",
        "-e", "CONFLUENCE_CUSTOM_HEADERS",
        "-e", "JIRA_URL",
        "-e", "JIRA_USERNAME",
        "-e", "JIRA_API_TOKEN",
        "-e", "JIRA_CUSTOM_HEADERS",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
        "CONFLUENCE_USERNAME": "your.email@company.com",
        "CONFLUENCE_API_TOKEN": "your_confluence_api_token",
        "CONFLUENCE_CUSTOM_HEADERS": "X-Confluence-Service=mcp-integration,X-Custom-Auth=confluence-token,X-ALB-Token=secret-token",
        "JIRA_URL": "https://your-company.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your_jira_api_token",
        "JIRA_CUSTOM_HEADERS": "X-Forwarded-User=service-account,X-Company-Service=mcp-atlassian,X-Jira-Client=mcp-integration"
      }
    }
  }
}

Security Considerations:

  • Custom header values are masked in debug logs to protect sensitive information

  • Ensure custom headers don't conflict with standard HTTP or Atlassian API headers

  • Avoid including sensitive authentication tokens in custom headers if already using basic auth or OAuth

  • Headers are sent with every API request - verify they don't interfere with API functionality

MCP Atlassian supports multi-cloud OAuth scenarios where each user connects to their own Atlassian cloud instance. This is useful for multi-tenant applications, chatbots, or services where users provide their own OAuth tokens.

Minimal OAuth Configuration:

  1. Enable minimal OAuth mode (no client credentials required):

    docker run -e ATLASSIAN_OAUTH_ENABLE=true -p 9000:9000 \
      ghcr.io/SharkyND/mcp-atlassian:latest \
      --transport streamable-http --port 9000
  2. Users provide authentication via HTTP headers:

    • Authorization: Bearer <user_oauth_token>

    • X-Atlassian-Cloud-Id: <user_cloud_id>

Example Integration (Python):

import asyncio
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession

user_token = "user-specific-oauth-token"
user_cloud_id = "user-specific-cloud-id"

async def main():
    # Connect to streamable HTTP server with custom headers
    async with streamablehttp_client(
        "http://localhost:9000/mcp",
        headers={
            "Authorization": f"Bearer {user_token}",
            "X-Atlassian-Cloud-Id": user_cloud_id
        }
    ) as (read_stream, write_stream, _):
        # Create a session using the client streams
        async with ClientSession(read_stream, write_stream) as session:
            # Initialize the connection
            await session.initialize()

            # Example: Get a Jira issue
            result = await session.call_tool(
                "jira_get_issue",
                {"issue_key": "PROJ-123"}
            )
            print(result)

asyncio.run(main())

Configuration Notes:

  • Each request can use a different cloud instance via the X-Atlassian-Cloud-Id header

  • User tokens are isolated per request - no cross-tenant data leakage

  • Falls back to global ATLASSIAN_OAUTH_CLOUD_ID if header not provided

  • Compatible with standard OAuth 2.0 bearer token authentication

For Confluence Cloud only:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "CONFLUENCE_URL",
        "-e", "CONFLUENCE_USERNAME",
        "-e", "CONFLUENCE_API_TOKEN",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
        "CONFLUENCE_USERNAME": "your.email@company.com",
        "CONFLUENCE_API_TOKEN": "your_api_token"
      }
    }
  }
}

For Confluence Server/DC, use:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "CONFLUENCE_URL",
        "-e", "CONFLUENCE_PERSONAL_TOKEN",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "CONFLUENCE_URL": "https://confluence.your-company.com",
        "CONFLUENCE_PERSONAL_TOKEN": "your_personal_token"
      }
    }
  }
}

For Jira Cloud only:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "JIRA_URL",
        "-e", "JIRA_USERNAME",
        "-e", "JIRA_API_TOKEN",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "JIRA_URL": "https://your-company.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your_api_token"
      }
    }
  }
}

For Jira Server/DC, use:

{
  "mcpServers": {
    "mcp-atlassian": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "JIRA_URL",
        "-e", "JIRA_PERSONAL_TOKEN",
        "ghcr.io/SharkyND/mcp-atlassian:latest"
      ],
      "env": {
        "JIRA_URL": "https://jira.your-company.com",
        "JIRA_PERSONAL_TOKEN": "your_personal_token"
      }
    }
  }
}

๐Ÿ‘ฅ HTTP Transport Configuration

Instead of using stdio, you can run the server as a persistent HTTP service using either:

  • sse (Server-Sent Events) transport at /sse endpoint

  • streamable-http transport at /mcp endpoint

Both transport types support single-user and multi-user authentication:

Authentication Options:

  • Single-User: Use server-level authentication configured via environment variables

  • Multi-User: Each user provides their own authentication:

    • Cloud: OAuth 2.0 Bearer tokens

    • Server/Data Center: Personal Access Tokens (PATs)

  1. Start the server with your chosen transport:

    # For SSE transport
    docker run --rm -p 9000:9000 \
      --env-file /path/to/your/.env \
      ghcr.io/SharkyND/mcp-atlassian:latest \
      --transport sse --port 9000 -vv
    
    # OR for streamable-http transport
    docker run --rm -p 9000:9000 \
      --env-file /path/to/your/.env \
      ghcr.io/SharkyND/mcp-atlassian:latest \
      --transport streamable-http --port 9000 -vv
  2. Configure your IDE (single-user example):

    SSE Transport Example:

    {
      "mcpServers": {
        "mcp-atlassian-http": {
          "url": "http://localhost:9000/sse"
        }
      }
    }

    Streamable-HTTP Transport Example:

    {
      "mcpServers": {
        "mcp-atlassian-service": {
          "url": "http://localhost:9000/mcp"
        }
      }
    }

By default the streamable-http transport keeps per-session state in memory, which requires sticky sessions when running more than one replica. Enable stateless mode so any request can be served by any instance behind a round-robin load balancer โ€” ideal for multi-replica / autoscaled deployments.

Enable it with either the CLI flag or the environment variable:

Method

Value

CLI flag

--stateless-http

Environment variable

STATELESS_HTTP=true

NOTE
  • Applies to the streamable-http transport only (ignored for stdio).

  • The CLI flag takes precedence over the STATELESS_HTTP environment variable.

  • In stateless mode the server does not return an mcp-session-id header, so clients must not rely on session affinity.

# CLI flag
docker run --rm -p 9000:9000 \
  --env-file /path/to/your/.env \
  ghcr.io/SharkyND/mcp-atlassian:latest \
  --transport streamable-http --port 9000 --stateless-http -vv

# OR via environment variable
docker run --rm -p 9000:9000 \
  --env-file /path/to/your/.env \
  -e STATELESS_HTTP=true \
  ghcr.io/SharkyND/mcp-atlassian:latest \
  --transport streamable-http --port 9000 -vv

Here's a complete example of setting up multi-user authentication with streamable-HTTP transport:

  1. First, run the OAuth setup wizard to configure the server's OAuth credentials:

    docker run --rm -i \
      -p 8080:8080 \
      -v "${HOME}/.mcp-atlassian:/home/app/.mcp-atlassian" \
      ghcr.io/SharkyND/mcp-atlassian:latest --oauth-setup -v
  2. Start the server with streamable-HTTP transport:

    docker run --rm -p 9000:9000 \
      --env-file /path/to/your/.env \
      ghcr.io/SharkyND/mcp-atlassian:latest \
      --transport streamable-http --port 9000 -vv
  3. Configure your IDE's MCP settings:

Choose the appropriate Authorization method for your Atlassian deployment:

  • Cloud (OAuth 2.0): Use this if your organization is on Atlassian Cloud and you have an OAuth access token for each user.

  • Server/Data Center (PAT): Use this if you are on Atlassian Server or Data Center and each user has a Personal Access Token (PAT).

Cloud (OAuth 2.0) Example:

{
  "mcpServers": {
    "mcp-atlassian-service": {
      "url": "http://localhost:9000/mcp",
      "headers": {
        "Authorization": "Bearer <USER_OAUTH_ACCESS_TOKEN>"
      }
    }
  }
}

Server/Data Center (PAT) Example:

{
  "mcpServers": {
    "mcp-atlassian-service": {
      "url": "http://localhost:9000/mcp",
      "headers": {
        "Authorization": "Token <USER_PERSONAL_ACCESS_TOKEN>"
      }
    }
  }
}
  1. Required environment variables in .env:

    JIRA_URL=https://your-company.atlassian.net
    CONFLUENCE_URL=https://your-company.atlassian.net/wiki
    ATLASSIAN_OAUTH_CLIENT_ID=your_oauth_app_client_id
    ATLASSIAN_OAUTH_CLIENT_SECRET=your_oauth_app_client_secret
    ATLASSIAN_OAUTH_REDIRECT_URI=http://localhost:8080/callback
    ATLASSIAN_OAUTH_SCOPE=read:jira-work write:jira-work read:confluence-content.all write:confluence-content offline_access
    ATLASSIAN_OAUTH_CLOUD_ID=your_cloud_id_from_setup_wizard
NOTE
  • The server should have its own fallback authentication configured (e.g., via environment variables for API token, PAT, or its own OAuth setup using --oauth-setup). This is used if a request doesn't include user-specific authentication.

  • OAuth: Each user needs their own OAuth access token from your Atlassian OAuth app.

  • PAT: Each user provides their own Personal Access Token.

  • Multi-Cloud: For OAuth users, optionally include X-Atlassian-Cloud-Id header to specify which Atlassian cloud instance to use

  • The server will use the user's token for API calls when provided, falling back to server auth if not

  • User tokens should have appropriate scopes for their needed operations

Monitoring

Username Requirement

Enforce username headers in requests by setting REQUIRE_USERNAME=true only for monitoring purpose. When the enviroment variable is passed in as true, it will be enable prometheus client to caputre username from the header and avalible to scrape through the service monitor:

# Environment variable
REQUIRE_USERNAME=true

# Helm chart
env:
  REQUIRE_USERNAME: "true"

When enabled, requests must include at least one username header:

  • X-Atlassian-Username

Returns 400 error if missing when enabled.

Monitoring & Metrics

Prometheus Metrics available at /metrics endpoint:

  • Request counts, duration, errors by service

  • User activity tracking (when username headers provided)

  • Pod-specific metrics for Kubernetes deployments

Health Checks:

  • /healthz - Basic health status

  • /readyz - Kubernetes readiness probe

Kubernetes Integration:

  • Helm chart with monitoring configuration

  • Grafana dashboard provisioning via ConfigMaps

  • ServiceMonitor for Prometheus Operator

Read-Only Mode

Read-only mode removes all tools tagged with write from tool discovery and blocks direct calls to write handlers. Unless configured, the server runs in read/write mode.

Read-only mode can be controlled globally (all products) or per-product (Jira, Confluence, Bitbucket independently). The effective state is recalculated on every request using this priority (highest first):

Priority

Scope

Mechanism

1

Per-product

HTTP header X-Atlassian-<Product>-Read-Only-Mode

2

Global

HTTP header X-Atlassian-Read-Only-Mode

3

Per-product

Environment variable <PRODUCT>_READ_ONLY_MODE

4

Global

Environment variable READ_ONLY_MODE

5

Per-product

CLI flag --<product>-read-only

6

Global

CLI flag --read-only

Truthy values: true, 1, yes, on. Falsy values: false, 0, no, off. A falsy value at a higher priority overrides a truthy value at a lower priority.

When enabled for a product, its write tools are hidden in tools/list, and the @check_write_access decorator raises ValueError if a client tries to invoke one directly.

CLI flags

# All products read-only
uv run mcp-atlassian --transport streamable-http --port 8889 --read-only

# Per-product: only Jira is read-only
uv run mcp-atlassian --transport streamable-http --port 8889 --jira-read-only

# Combined: Jira and Confluence read-only, Bitbucket stays read/write
uv run mcp-atlassian --transport streamable-http --port 8889 --jira-read-only --confluence-read-only

Environment variables

# Global โ€” all products
set READ_ONLY_MODE=true               # Windows CMD
$Env:READ_ONLY_MODE = "true"          # PowerShell
export READ_ONLY_MODE=true            # macOS/Linux

# Per-product overrides
$Env:JIRA_READ_ONLY_MODE = "true"      # Jira only
$Env:CONFLUENCE_READ_ONLY_MODE = "true" # Confluence only
$Env:BITBUCKET_READ_ONLY_MODE = "true" # Bitbucket only

# Example: global read-only, but Jira stays read/write
$Env:READ_ONLY_MODE = "true"
$Env:JIRA_READ_ONLY_MODE = "false"

HTTP headers (per-request)

Headers let you override the server defaults on a per-request basis without restarting.

{
  "headers": {
    "X-Atlassian-Read-Only-Mode": "true",
    "X-Atlassian-Jira-Read-Only-Mode": "false",
    "X-Atlassian-Confluence-Read-Only-Mode": "true",
    "X-Atlassian-Bitbucket-Read-Only-Mode": "false"
  }
}

Header

Scope

X-Atlassian-Read-Only-Mode

All products (global fallback)

X-Atlassian-Jira-Read-Only-Mode

Jira only

X-Atlassian-Confluence-Read-Only-Mode

Confluence only

X-Atlassian-Bitbucket-Read-Only-Mode

Bitbucket only

A per-product header always takes precedence over the global header for that product. In the example above, the global flag enables read-only for all products, but the Jira and Bitbucket headers override it back to read/write.

Tools

Key Tools

Jira Tools

  • jira_get_issue: Get details of a specific issue

  • jira_search: Search issues using JQL

  • jira_create_issue: Create a new issue

  • jira_update_issue: Update an existing issue

  • jira_transition_issue: Transition an issue to a new status

  • jira_add_comment: Add a comment to an issue

  • jira_summarize_attachments: Extract readable text from PDF/Office/CSV/JSON attachments (via Microsoft MarkItDown)

  • jira_get_attachment_images: Fetch image attachments as viewable image content so a vision-capable client model can describe them

Confluence Tools

  • confluence_search: Search Confluence content using CQL

  • confluence_get_page: Get content of a specific page

  • confluence_create_page: Create a new page

  • confluence_update_page: Update an existing page

Bitbucket Tools

  • list_workspaces_or_projects: List all accessible workspaces/projects

  • list_repositories: List repositories in a workspace or all accessible repositories

  • get_repository_info: Get detailed information about a specific repository

  • list_branches: List all branches in a repository

  • get_default_branch: Get the default branch of a repository

  • get_file_content: Get content of a specific file from a repository

  • list_directory: List contents of a directory in a repository

  • list_pull_requests: List pull requests for a repository

  • pull_request_activities: Get activities/comments for a pull request

  • get_pull_request: Get detailed information about a specific pull request

  • get_commit_changes: Get changes made in a specific commit

  • get_commits: Get commit history for a repository

  • create_pull_request: Create a new pull request

  • create_branch: Create a new branch in a repository

  • add_pull_request_blocker_comment: Add a blocking comment to a pull request

  • add_pull_request_comment: Add a regular comment to a pull request

  • add_pull_request_inline_comment: Add an inline comment on a specific line of a file in a pull request

Xray Tools

  • get_tests: Retrieve information about specific tests

  • get_test_statuses: Get all available test statuses

  • get_test_runs: Get test runs for a specific test

  • get_test_runs_in_context: Get test runs from a Test Execution, optionally including selected Test issue custom fields

  • get_test_run: Get an individual run with its execution metadata and steps

  • get_test_executions: Get test executions for a test

  • get_test_plans: Get test plans associated with a test

  • create_test_step: Create a new test step for a test

  • update_test_step: Update an existing test step

  • update_test_run_status: Update the status of a test run

  • update_test_run_defects: Associate defects with a test run

Operation

Jira Tools

Confluence Tools

Bitbucket Tools

Xray Tools

Read

jira_search

confluence_search

list_workspaces_or_projects

get_tests

jira_get_issue

confluence_get_page

list_repositories

get_test_statuses

jira_get_all_projects

confluence_get_page_children

get_repository_info

get_test_runs

jira_get_project_issues

confluence_get_comments

list_branches

get_test_runs_with_environment

jira_get_worklog

confluence_get_labels

get_default_branch

get_test_runs_in_context

jira_get_transitions

confluence_search_user

get_file_content

get_test_preconditions

jira_search_fields

list_directory

get_test_sets

jira_get_agile_boards

list_pull_requests

get_test_executions

jira_get_board_issues

pull_request_activities

get_test_plans

jira_get_sprints_from_board

get_pull_request

get_test_step_statuses

jira_get_sprint_issues

get_commit_changes

get_test_step

jira_get_issue_link_types

get_commits

get_test_steps

jira_batch_get_changelogs*

get_tests_with_precondition

jira_get_user_profile

get_tests_with_test_set

jira_download_attachments

get_tests_with_test_plan

jira_get_project_versions

get_test_executions_with_test_plan

get_tests_with_test_execution

get_test_run

jira_summarize_attachments

get_test_run_assignee

jira_get_attachment_images

get_test_run_iteration

get_test_run_status

get_test_run_defects

get_test_run_comment

get_test_run_steps

Write

jira_create_issue

confluence_create_page

create_pull_request

create_test_step

jira_update_issue

confluence_update_page

create_branch

update_test_step

jira_delete_issue

confluence_delete_page

add_pull_request_blocker_comment

delete_test_step

jira_batch_create_issues

confluence_add_label

add_pull_request_comment

update_precondition

jira_add_comment

confluence_add_comment

add_pull_request_inline_comment

delete_test_from_precondition

jira_transition_issue

update_test_set

jira_add_worklog

delete_test_from_test_set

jira_link_to_epic

update_test_plan

jira_create_sprint

delete_test_from_test_plan

jira_update_sprint

update_test_plan_test_executions

jira_create_issue_link

delete_test_execution_from_test_plan

jira_remove_issue_link

update_test_execution

jira_create_version

delete_test_from_test_execution

jira_batch_create_versions

update_test_run_assignee

update_test_run_status

update_test_run_defects

update_test_run_comment

*Tool only available on Jira Cloud

Tool Filtering and Access Control

The server provides two ways to control tool access:

  1. Tool Filtering: Use --enabled-tools flag or ENABLED_TOOLS environment variable to specify which tools should be available:

    # Via environment variable
    ENABLED_TOOLS="confluence_search,jira_get_issue,jira_search"
    
    # Or via command line flag
    docker run ... --enabled-tools "confluence_search,jira_get_issue,jira_search" ...
  2. Read/Write Control: Tools are categorized as read or write operations. When READ_ONLY_MODE is enabled, only read operations are available regardless of ENABLED_TOOLS setting.

Troubleshooting & Debugging

Common Issues

  • Authentication Failures:

    • For Cloud: Check your API tokens (not your account password)

    • For Server/Data Center: Verify your personal access token is valid and not expired

    • For older Confluence servers: Some older versions require basic authentication with CONFLUENCE_USERNAME and CONFLUENCE_API_TOKEN (where token is your password)

  • SSL Certificate Issues: If using Server/Data Center and encounter SSL errors, set CONFLUENCE_SSL_VERIFY=false or JIRA_SSL_VERIFY=false

  • Permission Errors: Ensure your Atlassian account has sufficient permissions to access the spaces/projects

  • Custom Headers Issues: See the "Debugging Custom Headers" section below to analyze and resolve issues with custom headers

Debugging Custom Headers

To verify custom headers are being applied correctly:

  1. Enable Debug Logging: Set MCP_VERY_VERBOSE=true to see detailed request logs

    # In your .env file or environment
    MCP_VERY_VERBOSE=true
    MCP_LOGGING_STDOUT=true
  2. Check Header Parsing: Custom headers appear in logs with masked values for security:

    DEBUG Custom headers applied: {'X-Forwarded-User': '***', 'X-ALB-Token': '***'}
  3. Verify Service-Specific Headers: Check logs to confirm the right headers are being used:

    DEBUG Jira request headers: service-specific headers applied
    DEBUG Confluence request headers: service-specific headers applied
  4. Test Header Format: Ensure your header string format is correct:

    # Correct format
    JIRA_CUSTOM_HEADERS=X-Custom=value1,X-Other=value2
    CONFLUENCE_CUSTOM_HEADERS=X-Custom=value1,X-Other=value2
    
    # Incorrect formats (will be ignored)
    JIRA_CUSTOM_HEADERS="X-Custom=value1,X-Other=value2"  # Extra quotes
    JIRA_CUSTOM_HEADERS=X-Custom: value1,X-Other: value2  # Colon instead of equals
    JIRA_CUSTOM_HEADERS=X-Custom = value1               # Spaces around equals

Security Note: Header values containing sensitive information (tokens, passwords) are automatically masked in logs to prevent accidental exposure.

Debugging Tools

# Using MCP Inspector for testing
npx @modelcontextprotocol/inspector uvx mcp-atlassian ...

# For local development version
npx @modelcontextprotocol/inspector uv --directory /path/to/your/mcp-atlassian run mcp-atlassian ...

# View logs
# macOS
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
# Windows
type %APPDATA%\Claude\logs\mcp*.log | more

Security

  • Never share API tokens

  • Keep .env files secure and private

  • See SECURITY.md for best practices

Contributing

We welcome contributions to MCP Atlassian! If you'd like to contribute:

  1. Check out our CONTRIBUTING.md guide for detailed development setup instructions.

  2. Make changes and submit a pull request.

We use pre-commit hooks for code quality and follow semantic versioning for releases.

License

Licensed under MIT - see LICENSE file. This is not an official Atlassian product.

Available Tools

71 tools
bitbucket_add_pull_request_blocker_commentC

Add a comment to a pull request.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID. comment: Comment text. severity: Severity of the blocker. (Normal or Blocker) (default: NORMAL)

Returns: JSON string containing the created comment details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesComment text
severityNoSeverity of the blocker.NORMAL
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It only states the action and error conditions (ValueError for missing client). It omits behavioral details such as permission requirements, whether the comment is appended or replaces, side effects, rate limits, or state changes โ€“ essential for safe agent invocation.

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

Conciseness3/5

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

The description contains useful sections (Args, Returns, Raises) but is somewhat redundant โ€“ the Args block largely duplicates the schema descriptions. The Raises section is helpful but could be more succinct. Overall, it wastes space on repetition.

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

Completeness3/5

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

The description covers the basic action, parameters, return value, and error for a simple tool. However, it lacks context about the tool's position among siblings and does not explain the 'blocker' specificity. Given the presence of a detailed output schema (not shown here), the return description is sufficient, but behavioral gaps remain.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description's 'Args' section repeats parameter names and types but adds negligible new meaning beyond the schema (e.g., 'comment: Comment text' is identical to schema). It does add default for severity, but that is already in schema. No extra syntax, format, or constraint details.

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

Purpose4/5

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

The description clearly states 'Add a comment to a pull request' with a verb and resource. However, it does not differentiate from the sibling tool 'bitbucket_add_pull_request_comment' โ€“ the 'blocker' aspect is only in the name, not in the description, which limits clarity for distinguishing use cases.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'bitbucket_add_pull_request_comment' or 'bitbucket_add_pull_request_inline_comment'. There is no mention of prerequisites, context, or exclusions, leaving the agent without decision criteria.

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

bitbucket_add_pull_request_commentB

Add a comment to a pull request.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID. comment: Comment text.

Returns: JSON string containing the created comment details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesComment text
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does mention that the tool returns a JSON string with created comment details and raises ValueError if the client is not configured, which adds useful context. However, it does not disclose permission requirements, whether the comment is appended as a general comment rather than inline, or any other side effects.

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

Conciseness4/5

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

The description is concise and well-structured with a clear one-line summary followed by Args, Returns, and Raises sections. It avoids unnecessary fluff, though the Args list is redundant with the schema, keeping it from being maximally efficient.

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

Completeness3/5

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

The input schema fully covers all four parameters and the description mentions return and error behavior, so basic usage is sufficiently specified. However, the lack of usage guidance, alternative differentiation, and permission context leaves gaps for a complete picture, especially given that no annotations are present to fill in safety or auth details.

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

Parameters3/5

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

The input schema has 100% parameter description coverage, and the Args section in the description merely repeats the same names and one-line descriptions without adding extra meaning. Since the schema already documents all parameters clearly, the description provides no additional semantic value.

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

Purpose4/5

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

The description clearly states 'Add a comment to a pull request,' which is a specific verb and resource. However, it does not explicitly differentiate from sibling tools like bitbucket_add_pull_request_blocker_comment or bitbucket_add_pull_request_inline_comment, so it misses the full distinction expected for a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the blocker or inline comment variants, nor any mention of prerequisites, permissions, or context. The description only states what the tool does, offering no decision-support for an AI agent choosing among similar tools.

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

bitbucket_add_pull_request_inline_commentA

Add an inline comment on a specific line of a file in a pull request.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID. comment: Comment text. file_path: Path to the file to comment on. line: Line number to attach the comment to. line_type: Line type for Server/DC ('ADDED', 'REMOVED', or 'CONTEXT').

Returns: JSON string containing the created comment details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesLine number in the file to attach the comment to
commentYesComment text
file_pathYesPath to the file being commented on (e.g. 'src/main.py')
line_typeNoType of the line being commented on. Only used for Bitbucket Server/DC. 'ADDED' for new lines, 'REMOVED' for deleted lines, 'CONTEXT' for unchanged lines.ADDED
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses behavior: creates an inline comment, returns JSON details, and raises ValueError if client not configured. It does not mention permissions or rate limits, but for a creation tool this is adequate.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Raises sections. It is slightly verbose but every sentence adds value. Could be more concise, but it's acceptable.

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

Completeness5/5

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

Given the presence of an output schema (not shown but indicated), the description adequately explains the return value as a JSON string. It covers all necessary aspects for a create tool with no missing context.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds value by clarifying that 'line_type' is only used for Server/DC, and provides concise context for each parameter beyond the schema's descriptions.

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

Purpose5/5

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

The description clearly states the action: 'Add an inline comment on a specific line of a file in a pull request.' It uses specific verb and resource, and distinguishes from sibling tools like 'blocker comment' or general comment.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives like blocker comment or general comment. Usage is implied but not clarified with exclusions.

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

bitbucket_analyze_pr_review_statusA

Analyze a pull request's comment threads to determine which review feedback has been addressed and which is still pending.

For each comment thread the tool inspects:

  • Whether the comment is explicitly resolved/marked done (Server/DC state field, Cloud resolved flag).

  • Replies in the thread โ€” if a reply contains completion keywords ("done", "fixed", "addressed", "resolved", "updated", "completed") it is considered addressed even when no formal resolve action was taken.

Returns a structured summary with:

  • total_comments: number of top-level review comments found

  • addressed: list of comments considered done (resolved or positively replied)

  • pending: list of comments that still need attention

  • overall_status: "ALL_ADDRESSED" | "PARTIALLY_ADDRESSED" | "NONE_ADDRESSED"

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID.

Returns: JSON string with the review status analysis.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID to analyze

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description fully details the analysis logic (resolved status, reply keywords), output fields, and error condition. Could be improved by stating it's read-only 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.

Conciseness5/5

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

The description is concise, well-structured with a clear first sentence, bullet points for logic, then return summary, args, and raises. Every sentence adds value.

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

Completeness5/5

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

Given an output schema exists, the description still adequately covers input, logic, output fields, and errors, making it fully complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds minimal extra over schema descriptions. It repeats parameter names and provides a brief context for workspace but not significant new info.

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

Purpose5/5

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

The description clearly states the verb 'analyze' and the resource 'pull request comment threads' to determine addressed vs pending feedback. It distinguishes from sibling tools like adding comments or fetching PR diffs.

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

Usage Guidelines3/5

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

The description implicitly indicates when to use (to review comment status) but lacks explicit guidance on when not to use or comparisons to alternatives like bitbucket_get_pull_request.

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

bitbucket_create_branchA

Create a new branch in a repository.

Args: workspace: Workspace name or project key. repository: Repository name. branch_name: New branch name. source_branch: Source branch to create from (default: main).

Returns: JSON string containing the created branch details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
branch_nameYesNew branch name
source_branchNoSource branch to create frommain

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action (create), the default source branch, and raises ValueError if the client is not configured. However, it does not disclose whether branch creation is idempotent, what happens if the branch exists, or permission requirements. Basic behaviors are covered, but significant gaps remain.

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

Conciseness4/5

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

The description is well-structured with clear sections for Args, Returns, and Raises. It is concise at 9 lines with no unnecessary information. However, the Returns section could be more succinct (e.g., 'Returns JSON string of branch details') and might be slightly redundant with the output schema.

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

Completeness4/5

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

Given the tool's simplicity, the description covers the essential aspects: parameters, return type, and error condition. An output schema exists, so return details are not needed in the description. The only missing element is potential failure modes (e.g., branch already exists). Overall, it is largely complete for a create tool.

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

Parameters3/5

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

The input schema has 100% coverage, describing all four parameters. The tool description repeats parameter names and the default for source_branch but adds no meaningful context beyond what the schema provides. For example, it does not explain that 'workspace' can be a project key for Server/DC (already in schema). Baseline 3 is appropriate as the description adds minimal value over schema.

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

Purpose5/5

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

The description clearly states 'Create a new branch in a repository.' It uses a specific verb ('create') and resource ('branch'), which distinguishes it from sibling tools like bitbucket_list_branches (listing) and bitbucket_create_pull_request (creating PRs). The purpose is unambiguous.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives. While the purpose is clear, there is no mention of when not to use it (e.g., if a branch already exists) or which sibling tool to use for related actions (e.g., bitbucket_get_default_branch for checking the default branch). The usage context is implied but not stated.

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

bitbucket_create_pull_requestC

Create a new pull request.

Args: workspace: Workspace name or project key. repository: Repository name. title: Pull request title. source_branch: Source branch name. destination_branch: Destination branch name (default: main). description: Optional pull request description.

Returns: JSON string containing the created pull request details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesPull request title
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
descriptionNoPull request description
source_branchYesSource branch name
destination_branchNoDestination branch namemain

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

Without annotations, the description carries full burden. It discloses that it raises ValueError if client is not configured, but does not mention other potential failures (e.g., missing branches, duplicate PRs). It also does not state the effect (creation/mutation) explicitly or any side effects.

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

Conciseness4/5

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

The description is concise with a clear list of arguments. The structure is front-loaded with the purpose, followed by parameter list, return type, and errors. However, the 'Args' section could be more compact.

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

Completeness3/5

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

Given the schema coverage and presence of output schema (not shown), the description provides basic completeness. However, it lacks usage guidelines and behavioral context, which are important for a creation tool.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description repeats the parameter names and types but adds no additional meaning beyond the schema. For example, 'source_branch: Source branch name' is identical to the schema description.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Create a new pull request.' It lists the required parameters and resource. While it doesn't explicitly differentiate from sibling tools, the verb 'create' and the specific parameters distinguish it from other PR-related tools like bitbucket_add_pull_request_comment.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, such as bitbucket_list_pull_requests or bitbucket_get_pull_request. It does not mention prerequisites like the existence of branches or repository, nor does it specify situations where creation would fail.

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

bitbucket_create_repositoryA

Create a new repository in a workspace/project.

Args: ctx: The MCP context. workspace: Workspace name (Cloud) or project key (Server/DC). repo_slug: Repository name/slug to create. is_private: Whether the repository should be private (default: True). forkable: Whether the repository can be forked (default: False).

Returns: JSON string containing the created repository details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
forkableNoWhether the repository can be forked
repo_slugYesRepository name/slug to create
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
is_privateNoWhether the repository should be private

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses return format and a ValueError on missing client, but does not mention side effects, conflict behavior, or permission requirements beyond the basic creation. This is moderate transparency.

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

Conciseness4/5

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

Structured with Args/Returns/Raises sections, concise, and free of fluff. The inclusion of ctx is slightly redundant but not harmful.

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

Completeness4/5

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

For a simple create tool, the description covers purpose, parameters, returns, and a key error condition, supplemented by a rich output schema. It lacks deeper context like idempotency or permission requirements, but these are not critical for an MCP tool.

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

Parameters3/5

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

Schema coverage is 100% for the four parameters, so the baseline is 3. The description duplicates schema descriptions and adds only a non-schema ctx argument, which adds marginal value beyond the schema.

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

Purpose5/5

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

The description states 'Create a new repository in a workspace/project' with a specific verb and resource, clearly distinguishing it from sibling tools like bitbucket_get_repository_info or bitbucket_list_repositories.

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

Usage Guidelines3/5

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

The description implies usage by defining arguments (workspace, repo_slug) but does not explicitly state when to choose this over other Bitbucket tools or mention exclusions/alternatives. It provides some context about Cloud vs Server/DC naming but no direct comparative guidance.

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

bitbucket_get_commit_buildsA

Get all CI/CD build statuses for a specific commit.

Returns the full list of pipeline/build results associated with the commit, including the build state (SUCCESSFUL, FAILED, INPROGRESS), build key, name, description, and the URL to the build in the CI system (e.g. Jenkins, Bamboo).

Use this to check whether all required pipelines passed before merging a PR or to identify which specific build failed. If limit is not specified, all builds are returned.

Args: workspace: Workspace name or project key. repository: Repository name. commit_id: Full commit hash to look up builds for. limit: Maximum number of builds to return. If not specified, returns all builds.

Returns: JSON string containing the list of builds with their status and details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of builds to return. Omit or set to null to return all builds.
commit_idYesFull commit hash (e.g., 'b602bc8ce4201b91808bd9e12ba6f9ed0ffdd64c')
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the return content (build state, key, name, URL), the behavior of returning all builds when limit is omitted, and raises ValueError for client misconfiguration. This is solid transparency for a read-only tool, though it does not discuss edge cases like invalid commit hashes or rate limits.

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

Conciseness5/5

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

The description is well-structured with a clear purpose statement, a returns section, an Args list, and a Raises section. It is front-loaded with the core intent and each section serves a functional purpose without unnecessary verbosity.

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

Completeness5/5

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

The tool is simple and read-only, the schema covers all parameters, and an output schema exists. The description adds important context such as usage scenarios, return value shape, and error handling, leaving no critical gaps for an agent to successfully invoke this tool.

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

Parameters3/5

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

The input schema already provides complete descriptions for all 4 parameters (100% coverage). The Args section largely repeats the schema verbatim, adding no new semantic meaning. Baseline 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get all CI/CD build statuses for a specific commit.' It clearly differentiates from sibling Bitbucket tools like get_commits or get_pull_request by focusing narrowly on build statuses for a commit.

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

Usage Guidelines4/5

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

Explicit usage context is provided: 'Use this to check whether all required pipelines passed before merging a PR or to identify which specific build failed.' It also explains limit behavior. However, it does not mention alternatives or when not to use, so it misses the 'when-not' criterion for a 5.

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

bitbucket_get_commit_changesC

Get commit history for a repository branch.

Args: workspace: Workspace name or project key. repository: Repository name. commit_id: ID of the commit whose changes are being fetched. merges: Filter merges ('include', 'exclude', 'only') (default: include) hash_newest: Fetch changes for a particular commit hash.

Returns: JSON string containing commit history.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
mergesNoFilter merges ('include', 'exclude', 'only') (default: include)include
commit_idYesID of the commit whose changes are being fetched.
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
hash_newestNoFetch changes for a particular commit hash.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions a return value of 'JSON string containing commit history' but this contradicts the tool name's implication of getting changes. It does not indicate whether the operation is read-only, idempotent, or has side effects, nor does it specify any rate limits or authentication nuances.

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

Conciseness3/5

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

The description is reasonably concise but includes an Args list that repeats the schema, making it slightly redundant. The structure is clear, but the first sentence is misleading given the tool name and sibling tools.

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

Completeness2/5

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

Despite having an output schema (mentioned in context), the description's ambiguity about whether it returns commit history or changes for a specific commit undermines completeness. It fails to clarify the tool's exact behavior, which is critical for correct use.

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

Parameters3/5

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

Schema coverage is 100%, so the description does not need to add much. The Args list restates the schema parameters without adding new context (e.g., format or semantics of the returned JSON). Thus it adds marginal value beyond the schema.

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

Purpose2/5

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

The description states 'Get commit history for a repository branch' but the tool name is 'get_commit_changes', which typically refers to the diff of a specific commit. The parameters include commit_id and hash_newest, which suggest retrieving changes for a specific commit, not a branch history. This inconsistency with the sibling tool 'bitbucket_get_commits' (likely for history) further blurs the purpose.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives. The sibling tool 'bitbucket_get_commits' likely serves a similar purpose, but the description does not explain the difference or when to prefer one over the other.

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

bitbucket_get_commitsA

Get commit history for a repository branch.

Args: workspace: Workspace name or project key. repository: Repository name. until: The commit ID or ref (inclusively) to retrieve commits before limit: Maximum number of commits to return (default: 25). since: The commit ID or ref (inclusively) to retrieve commits after

Returns: JSON string containing commit history.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of commits to return
sinceNoThe commit ID or ref (inclusively) to retrieve commits after
untilNoThe commit ID or ref (inclusively) to retrieve commits before
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It does add a 'Returns' clause indicating a JSON string and mentions a ValueError condition when the client is misconfigured. However, it omits details about pagination, commit ordering, or behavior when the branch/workspace doesn't exist, so the added context is useful but incomplete.

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

Conciseness4/5

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

The description is well-organized with a clear one-sentence purpose, followed by an Args list and Returns/Raises sections. It is front-loaded and easy to scan, though it repeats schema information verbatim, creating minor redundancy that prevents a perfect score.

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

Completeness4/5

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

Given the presence of an output schema and full parameter documentation, the description adequately covers main usage and error conditions. The Returns and Raises sections add context not in structured fields. However, it lacks guidance on pagination/continuation for large histories, which is a minor gap for a list-type tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's Args section mostly mirrors the schema descriptions (e.g., 'Workspace name or project key') without adding deeper meaning or clarifying edge cases. It provides no extra value beyond what the schema already documents.

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

Purpose5/5

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

The description opens with 'Get commit history for a repository branch,' which is a specific verb-resource pair that clearly states the tool's function. This distinguishes it from sibling tools like bitbucket_get_pull_request_commits (commits for a PR) and bitbucket_get_commit_changes (changes for a commit), making its niche evident.

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

Usage Guidelines3/5

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

The description implies usage context by specifying 'for a repository branch,' but it does not explicitly state when to prefer this tool over related alternatives or provide exclusion criteria. No alternative tools are mentioned, leaving the agent to infer selection based on the resource type alone.

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

bitbucket_get_default_branchA

Get the default branch for a repository.

Args: workspace: Workspace name or project key. repository: Repository name.

Returns: JSON string containing default branch information.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

There are no annotations, so the description must carry the transparency burden. It discloses the return format (JSON string) and a specific error condition (ValueError when client is not configured). However, it does not address potential domain errors (e.g., repository not found) or mention that this is a read-only operation (though it is implied by 'Get'). The disclosure is minimal but not entirely absent.

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

Conciseness5/5

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

The description is front-loaded with a one-sentence purpose, followed by structured Args/Returns/Raises sections. Every line adds valueโ€”no filler. It is appropriately sized for a simple getter tool and follows a clean, readable format.

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

Completeness4/5

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

For a simple tool with fully documented schema parameters and an existing output schema, the description covers the essential aspects: purpose, inputs, return type, and an error condition. The main gap is lacking usage guidance, but given low complexity, the description is otherwise complete enough for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters fully described in the input schema (workspace and repository, including Cloud vs Server/DC distinction). The description's Args section simply repeats the schema text without adding additional meaning. Baseline 3 applies given the high coverage.

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

Purpose5/5

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

The description is specific and clear: "Get the default branch for a repository." It uses a strong verb and identifies the exact resource. This distinguishes it from sibling tools like bitbucket_list_branches (which lists all branches) and bitbucket_get_repository_info (which retrieves general repository details).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It simply states the operation. There is no mention of scenarios where this would be preferred over other Bitbucket tools, leaving the agent to infer usage solely from the tool name.

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

bitbucket_get_file_contentA

Get the content of a specific file from a repository.

Args: workspace: Workspace name or project key. repository: Repository name. file_path: Path to the file in the repository. branch: Branch name to read from (default: main).

Returns: JSON string containing file content and metadata.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNoBranch name to read frommain
sampleNoRead top N lines of a file. -1 for full file content.
file_pathYesPath to the file in the repository
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses that the tool returns a JSON string with content and metadata, and raises ValueError if client is unavailable. However, it does not mention authentication requirements, rate limits, file size limits, or what happens with binary files. Adequate but not comprehensive.

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

Conciseness5/5

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

The description is concise and well-structured with Args, Returns, Raises sections. Every sentence adds value and the format is highly readable for an AI agent. No fluff.

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

Completeness4/5

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

Given the presence of an output schema, the description appropriately summarizes return as 'JSON string containing file content and metadata.' It covers the core functionality but could mention encoding handling or binary file limitations. Still fairly complete for a file retrieval tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema, e.g., workspace can be name or project key, branch defaults to 'main', and sample parameter is explained with the -1 meaning. This extra context improves usability.

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

Purpose5/5

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

The description clearly states 'Get the content of a specific file from a repository.' It uses a specific verb and resource, distinguishing it from siblings like bitbucket_list_directory which lists file names without content.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives such as bitbucket_list_directory or bitbucket_get_commit_changes. The description implies use for reading file contents but does not compare or contrast with sibling tools.

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

bitbucket_get_pull_requestA

Get detailed information about a specific pull request.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID.

Returns: JSON string containing pull request details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the tool retrieves information and raises an error if the client is not configured, but it does not explicitly declare read-only behavior or other side effects. The description is adequate but not exhaustive.

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

Conciseness5/5

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

The description is extremely concise: one clear purpose sentence followed by a structured list of arguments, returns, and raises. Every line adds value, and there is no extraneous content.

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

Completeness4/5

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

Given that the tool has an output schema (indicated by context signals), the description does not need to detail return values. The three required parameters are clearly documented. However, additional context about when to use this tool over sibling PR tools would improve completeness.

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

Parameters3/5

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

The input schema has 100% description coverage for all parameters. The tool description repeats parameter names and types without adding additional meaning beyond what the schema already provides. Therefore, baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get detailed information about a specific pull request,' which is a specific verb-resource combination. It distinguishes itself from sibling tools like bitbucket_list_pull_requests and bitbucket_get_pull_request_diff.

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

Usage Guidelines3/5

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

The description implies usage when a specific pull request ID is known, but it lacks explicit guidance on when to use this tool vs alternatives (e.g., get diff, list, activities). No exclusion criteria or alternative mentions are provided.

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

bitbucket_get_pull_request_commitsA

Get the list of commits included in a pull request.

Returns each commit's hash, author, timestamp, and commit message so you can trace what changes were introduced and by whom. If limit is not specified, all commits are returned.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID. limit: Maximum number of commits to return. If not specified, returns all commits.

Returns: JSON string containing the list of commits for the pull request.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of commits to return. Omit or set to null to return all commits.
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the return format (JSON string with commit details), the limit semantics (all commits if unspecified), and raises ValueError when the client is not configured. This is good coverage for a read-only tool, though it omits details like ordering or auth requirements.

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

Conciseness4/5

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

The description is well-structured with clear Args, Returns, and Raises sections. It front-loads the main purpose. Minor redundancy: 'If limit is not specified, all commits are returned' appears twice, but overall it is concise and organized.

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

Completeness4/5

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

Given the tool's moderate complexity and rich sibling context, the description adequately covers purpose, return value, error handling, and limit behavior. It does not detail pagination or ordering, but these are not critical for basic invocation. The presence of an output schema (JSON string) reduces the need to describe return structure further.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description repeats parameter info already present in the schema (e.g., workspace, repository, pull_request_id). It adds little beyond the schema; the limit description in the text is even slightly less detailed than the schema's. No extra semantic value is provided.

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

Purpose5/5

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

The description clearly states 'Get the list of commits included in a pull request', using a specific verb and resource. It further details the returned fields (hash, author, timestamp, message) and distinguishes itself from sibling tools like bitbucket_get_commits by scoping to a pull request.

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

Usage Guidelines4/5

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

The description provides clear context for when this tool is appropriate, mentioning you can 'trace what changes were introduced and by whom'. It also explains the limit parameter's behavior. However, it does not explicitly name alternatives or exclusions, so it falls short of a 5.

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

bitbucket_get_pull_request_diffA

Get the full code diff (all changed files and lines) for a pull request.

Returns the unified diff of all changes included in the PR so you can review exactly what new code was added, modified, or removed.

For Bitbucket Cloud the response is a raw unified diff string. For Bitbucket Server/DC the response is structured JSON containing per-file diff hunks.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID.

Returns: JSON string wrapping the diff content and metadata.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states it returns a diff, notes platform differences, and raises ValueError if client is not configured. It does not explicitly mention that it is a read-only operation or discuss rate limits, but the behavior is reasonably clear for a read tool.

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

Conciseness5/5

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

The description is well-structured: a clear first sentence, followed by explanation of output, platform differences, parameters, returns, and raises. No superfluous information; each sentence serves a purpose.

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

Completeness4/5

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

Given the presence of an output schema (not shown), the description reasonably covers the return format and platform differences. It lacks details on handling large diffs or pagination, but overall is sufficient for a diff retrieval tool.

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

Parameters3/5

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

The input schema has 100% coverage with descriptions for all three parameters. The description repeats the parameter names without adding additional meaning or constraints beyond what the schema already provides, so it does not add value.

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

Purpose4/5

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

The description clearly states the tool returns the full code diff for a pull request, using specific verbs and resource. However, it does not explicitly distinguish from sibling tools like `bitbucket_get_pull_request` or `bitbucket_get_commit_changes`, which could also be related to code review.

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

Usage Guidelines3/5

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

The description implies usage for reviewing code changes in a PR but does not provide explicit guidance on when to use this tool versus alternatives (e.g., when to use `bitbucket_get_pull_request` for metadata only). No exclusion criteria are given.

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

bitbucket_get_repository_infoB

Get detailed information about a specific repository.

Args: ctx: The MCP context. workspace: Workspace name or project key. repository: Repository name.

Returns: JSON string containing repository details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

Without annotations, the description carries the full burden but only mentions return type and a ValueError for client configuration. It does not disclose other behavioral traits such as permissions, error handling for non-existent repos, or side effects.

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

Conciseness4/5

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

The description is relatively concise, but includes boilerplate Args/Returns/Raises sections that largely duplicate schema info. It is front-loaded with the core purpose, which is good.

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

Completeness3/5

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

With an output schema present, the need for return value explanation is reduced. However, the description lacks details on failure modes (e.g., not found) and does not mention the context of workspace/project key differences, leaving some gaps for a read operation.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description repeats parameter names but adds no additional meaning beyond what is already in the schema description.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'detailed information about a specific repository', which is distinct from sibling tools that list repositories or get pull requests.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like bitbucket_list_repositories or bitbucket_get_pull_request. There is no when-not-to-use or contextual advice.

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

bitbucket_list_branchesA

List all branches in a repository.

Args: ctx: The MCP context. workspace: Workspace name or project key. repository: Repository name. base: The base branch from which to find branches. branch_filter: Branch pattern to filter on. start: Starting index. limit: Maximum number of branches to fetch.

Returns: JSON string containing list of branches with their details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoThe base branch
limitNoMaximum number of branches to return
startNoStarting index.
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
branch_filterNoBranch pattern to filter on.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior. It states return type (JSON string) and raises ValueError, but does not explain pagination semantics, branch_filter pattern syntax, or whether 'base' limits to branches derived from that base. Some behavior is still opaque.

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

Conciseness4/5

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

The description is efficient: a one-sentence summary followed by structured Args/Returns/Raises blocks. No fluff, but the Args block duplicates schema information which slightly reduces value.

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

Completeness4/5

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

The tool has an output schema and a clear description of returns/errors, so it is reasonably complete for a list operation. However, it doesn't address potential pitfalls like large limits or how branch_filter matches (exact vs substring), leaving some gaps.

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

Parameters3/5

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

The input schema covers all parameters with descriptions, and the description essentially repeats them. It adds no extra meaning beyond the schema, so baseline of 3 applies. The description does not clarify default behavior when base or branch_filter are omitted.

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

Purpose5/5

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

The description states 'List all branches in a repository' with a specific verb and resource, clearly distinguishing from sibling Bitbucket tools such as list_pull_requests or get_commits.

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

Usage Guidelines3/5

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

Usage is implied by the name and description ('when you need to list branches'), but there is no explicit guidance on when to choose this over alternatives or any exclusions. No sibling comparisons are made.

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

bitbucket_list_directoryA

List the contents of a directory in a repository.

Args: workspace: Workspace name or project key. repository: Repository name. path: Directory path in the repository (empty for root). branch: Branch name to list from (default: main).

Returns: JSON string containing directory contents.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path in the repository
branchNoBranch name to list frommain
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds value by specifying the return format ('JSON string containing directory contents') and the error condition ('ValueError: If the Bitbucket client is not configured or available'). However, it does not disclose potential side effects, authentication requirements, or behavior for non-existent paths beyond the schema. This is adequate but not rich.

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

Conciseness4/5

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

The description is organized with a one-sentence purpose followed by structured Args, Returns, and Raises sections. It is not overly long, but the Args section duplicates the schema. Overall, it is well-structured and front-loaded, earning a 4.

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

Completeness4/5

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

For a straightforward listing tool, the description covers purpose, arguments, return format, and error conditions. It lacks contextual notes about sorting, hidden files, or path error handling, and could benefit from an explicit mention that it differs from get_file_content. Given the simplicity of the tool and the presence of schema descriptions, it is reasonably complete; score 4.

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

Parameters3/5

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

Schema coverage is 100%, with all four parameters already described in the schema. The description's Args section largely mirrors the schema, adding the 'empty for root' note for path and the 'default: main' for branch, both already present in schema defaults. No new semantic information is added, so baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'List the contents of a directory in a repository.' This clearly distinguishes from sibling tools like bitbucket_get_file_content (which fetches a file) and bitbucket_list_repositories (which lists repositories). The scope is clear (directory contents).

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

Usage Guidelines3/5

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

There is no explicit guidance on when to use this tool versus alternatives like get_file_content or list_branches. The usage is implied by the name and description. No exclusions or alternative recommendations are provided. This earns a 'minimal viable' score of 3.

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

bitbucket_list_pull_requestsA

List pull requests for a repository.

Args: workspace: Workspace name or project key. repository: Repository name. state: Pull request state filter (OPEN, MERGED, DECLINED).

Returns: JSON string containing list of pull requests.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoPull request state: OPEN, MERGED, DECLINEDOPEN
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses the return format (JSON string) and raises ValueError if the client is not configured, adding useful behavioral context. It also mentions the state filter, clarifying that only PRs matching the given state are returned. It does not cover pagination or ordering, but for a simple list tool this is sufficient.

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

Conciseness5/5

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

The description is concise and well-structured with clear Args, Returns, and Raises sections. It is front-loaded with the primary purpose and each section adds necessary information. No fluff or redundant content.

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

Completeness4/5

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

For a simple list tool with three parameters and an output schema (signaled by 'Has output schema: true'), the description covers the essentials: purpose, parameters, return format, and an error case. It does not mention pagination or result limits, but given the tool's simplicity and the presence of an output schema, this is sufficiently complete. A score of 4 reflects a thorough but not exhaustive description.

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

Parameters3/5

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

The input schema already describes all three parameters with 100% coverage. The description repeats the parameter names and purposes but adds no new semantic detail beyond what the schema provides. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description starts with 'List pull requests for a repository', which clearly identifies the action (list) and resource (pull requests scoped to a repository). This distinguishes it from sibling tools like 'bitbucket_get_pull_request' (single PR) and 'bitbucket_create_pull_request' (create). The verb and resource are specific and unambiguous.

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

Usage Guidelines3/5

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

The description provides context for when to use the tool (to list PRs, optionally filtered by state) but does not explicitly state when not to use it or name alternatives. The existence of sibling tools like get_pull_request implies the distinction, but no direct guidance is given. This is implied usage rather than explicit guidance, so a 3 is appropriate.

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

bitbucket_list_repositoriesA

List repositories in a workspace/project or all accessible repositories.

Args: ctx: The MCP context. workspace: Optional workspace name or project key to filter repositories.

Returns: JSON string containing list of repositories with their details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoWorkspace name (Cloud) or project key (Server/DC). If not provided, lists all accessible repositories.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided, so description must carry the burden. It states it lists repositories (read-only) and raises ValueError if client not configured. However, it lacks details on pagination, rate limits, or what 'list of repositories with details' entails, which is essential for a list tool.

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

Conciseness5/5

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

The description is extremely concise and well-structured with Args, Returns, Raises sections. Every sentence adds value, no fluff.

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

Completeness4/5

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

For a simple list tool with one optional parameter and an output schema (not shown), the description covers the essential purpose and basic behavior. Could be improved with pagination info or result ordering, but overall adequate.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description already covers workspace being a workspace name or project key. The description adds no new semantics beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists repositories in a workspace/project or all accessible ones. It uses a specific verb and resource, and distinguishes from siblings like bitbucket_get_repository_info (single repo) and other list tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., get_repository_info for details, list_branches for branches). It does not specify when not to use it or provide context for selection.

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

bitbucket_list_workspaces_or_projectsA

List all accessible workspaces (Cloud) or projects (Server/DC).

Returns: JSON string containing list of workspaces/projects with their details.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It explicitly states the read-only nature ('List'), specifies the return type as a JSON string, and discloses a ValueError condition for unconfigured clients. This is useful behavioral context, though it could further clarify empty-list behavior.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, followed by 'Returns' and 'Raises' sections. No redundant wording; every sentence contributes necessary information and the main verb is front-loaded.

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

Completeness4/5

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

For a zero-parameter list tool with an output schema, the description is nearly complete: it covers purpose, return format, and error condition. A minor gap is not addressing the empty-list scenario, but this is not critical given the tool's simplicity.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description's scope ('all accessible') correctly implies no filtering arguments, and the schema already confirms no parameters, leaving nothing for the description to add.

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

Purpose5/5

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

The description uses a specific verb 'List' with a clear resource 'accessible workspaces (Cloud) or projects (Server/DC)', and the scope 'all accessible' adds precision. It distinguishes from sibling tools like bitbucket_list_repositories which list repositories, not workspaces/projects.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention sibling tools, prerequisites, or cases where this tool should be preferred, leaving the agent to infer usage from the name and context signals alone.

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

bitbucket_pull_request_activitiesC

Get all activities on a pull request.

Args: workspace: Workspace name or project key. repository: Repository name. pull_request_id: Pull request ID to get comments for.

Returns: JSON string containing list of pull requests.

Raises: ValueError: If the Bitbucket client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesWorkspace name (Cloud) or project key (Server/DC)
repositoryYesRepository name
pull_request_idYesPull request ID to get comments for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions returning a JSON string and raising ValueError, but fails to describe pagination, authorization requirements, or what types of activities are included. The mention of 'comments' in the parameter description is misleading.

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

Conciseness2/5

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

The description is short but contains an inaccuracy: the Returns section says 'list of pull requests' instead of 'list of activities.' This undermines trust. While concise, every sentence should be accurate.

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

Completeness2/5

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

Despite having an output schema, the description misstates the return value as 'pull requests' instead of activities, creating confusion. It also omits details about the scope of 'activities' (e.g., comments, status changes, approvals).

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

Parameters3/5

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

The input schema has 100% description coverage, so the baseline is 3. The description repeats parameter names and adds context for workspace, but the schema already provides that context. No new semantic information is added.

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

Purpose3/5

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

The description states 'Get all activities on a pull request,' which identifies the action and resource. However, the parameter description for pull_request_id says 'to get comments for,' conflating activities with comments, creating ambiguity about the exact purpose.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like bitbucket_get_pull_request or bitbucket_add_pull_request_comment. The description does not specify scenarios or exclusions.

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

confluence_add_commentA

Add a comment to a Confluence page.

Args: ctx: The FastMCP context. page_id: The ID of the page to add a comment to. content: The comment content in Markdown format.

Returns: JSON string representing the created comment.

Raises: ValueError: If in read-only mode or Confluence client is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe comment content in Markdown format
page_idYesThe ID of the page to add a comment to

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral transparency burden. It discloses that it raises ValueError in read-only mode or when the client is unavailable, and states the return format. However, it does not elaborate on side effects or other failure conditions beyond these, so a 3.

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

Conciseness5/5

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

The description is compact and well-structured with clear sections for Args, Returns, and Raises. Each sentence adds value, and it is front-loaded with the purpose statement.

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

Completeness4/5

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

Given the tool's simplicity (2 params), a full output schema, and the inclusion of error conditions, the description is sufficiently complete for an agent to invoke it correctly. It could mention page existence checks, but that's a minor gap.

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

Parameters3/5

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

The input schema already provides full descriptions for page_id and content, with 100% coverage. The description repeats this information but adds no additional semantic details; the mention of ctx is an internal context parameter not part of the user-facing schema.

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

Purpose5/5

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

The description opens with 'Add a comment to a Confluence page,' which is a specific verb+resource statement. It clearly distinguishes from sibling tools like jira_add_comment and confluence_add_label.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: to add comments to Confluence pages. It does not explicitly name alternatives or exclusions, but the 'Confluence' qualifier differentiates it from Jira comment tools, giving a clear context without exclusions.

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

confluence_add_labelB

Add label to an existing Confluence page.

Args: ctx: The FastMCP context. page_id: The ID of the page to update. name: The name of the label.

Returns: JSON string representing the updated list of label objects for the page.

Raises: ValueError: If in read-only mode or Confluence client is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the label
page_idYesThe ID of the page to update

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions that the tool raises ValueError in read-only mode or if the client is unavailable, but does not clarify whether the label is appended or replaced, or what happens if the label already exists.

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

Conciseness4/5

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

The description is concise but includes a docstring-like format for Args/Returns/Raises, which is slightly verbose. Nevertheless, it is well-structured and front-loaded with the core action.

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

Completeness3/5

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

The description covers the basic action, parameters, return type, and exceptions, but lacks context on edge cases (e.g., duplicate labels) and authentication requirements. Given the tool's simplicity, it is minimally adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains both parameters. The description does not add meaning beyond what is in the schema, resulting in a baseline score of 3.

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

Purpose5/5

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

The description clearly states 'Add label to an existing Confluence page,' which is a specific verb+resource combination. It is distinct from sibling tools like confluence_add_comment or confluence_update_page.

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

Usage Guidelines3/5

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

The description does not explicitly guide when to use this tool versus alternatives (e.g., confluence_get_labels). While the purpose is clear, there is no when-to-use or when-not-to-use information.

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

confluence_create_pageA

Create a new Confluence page.

Args: ctx: The FastMCP context. space_key: The key of the space. title: The title of the page. content: The content of the page (format depends on content_format). parent_id: Optional parent page ID. content_format: The format of the content ('markdown', 'wiki', or 'storage'). enable_heading_anchors: Whether to enable heading anchors (markdown only).

Returns: JSON string representing the created page object.

Raises: ValueError: If in read-only mode, Confluence client is unavailable, or invalid content_format.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title of the page
contentYesThe content of the page. Format depends on content_format parameter. Can be Markdown (default), wiki markup, or storage format
parent_idNo(Optional) parent page ID. If provided, this page will be created as a child of the specified page
space_keyYesThe key of the space to create the page in (usually a short uppercase code like 'DEV', 'TEAM', or 'DOC')
content_formatNo(Optional) The format of the content parameter. Options: 'markdown' (default), 'wiki', or 'storage'. Wiki format uses Confluence wiki markup syntaxmarkdown
enable_heading_anchorsNo(Optional) Whether to enable automatic heading anchor generation. Only applies when content_format is 'markdown'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the tool raises ValueError for read-only mode, unavailable client, or invalid content_format. However, it does not mention rate limits, idempotency, or what happens if a page with the same title exists.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, Raises sections and is front-loaded with the main purpose. It is slightly verbose for a simple create operation but remains clear.

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

Completeness5/5

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

The description covers all 6 parameters, return value, and error cases. Given an output schema exists, the return description is extra but harmless. The tool has moderate complexity and the description is fully adequate.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds no significant meaning beyond the schema; it restates parameter roles (e.g., 'Optional parent page ID') and return format ('JSON string representing the created page object'), which is already covered by the output schema.

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

Purpose5/5

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

The description clearly states 'Create a new Confluence page,' specifying the verb and resource. It differentiates from siblings like confluence_update_page and confluence_delete_page by being the creation tool.

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

Usage Guidelines3/5

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

The description does not explicitly mention when to use this tool versus alternatives (e.g., update vs create, or using other Confluence tools). It impliedly guides by listing creation parameters but lacks context exclusions.

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

confluence_delete_pageA

Delete an existing Confluence page.

Args: ctx: The FastMCP context. page_id: The ID of the page to delete.

Returns: JSON string indicating success or failure.

Raises: ValueError: If Confluence client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesThe ID of the page to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It mentions deletion and possible ValueError, but does not disclose irreversibility or permission requirements. Adequate but not detailed.

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

Conciseness5/5

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

Extremely concise with no wasted words. Uses clear structured format for args, returns, and raises.

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

Completeness4/5

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

For a deletion tool with no output schema, it provides expected information: return format and exception. Could detail success/failure response more, but sufficient for simple operation.

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

Parameters3/5

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

Schema description covers page_id fully; description adds no extra meaning. Baseline 3 due to high schema coverage.

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

Purpose5/5

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

Description clearly states 'Delete an existing Confluence page.' It uses a specific verb and resource, and distinguishes from sibling tools like create, update, get.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Lacks prerequisites, conditions, or scenarios for deletion.

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

confluence_get_commentsB

Get comments for a specific Confluence page.

Args: ctx: The FastMCP context. page_id: Confluence page ID.

Returns: JSON string representing a list of comment objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesConfluence page ID (numeric ID, can be parsed from URL, e.g. from 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title' -> '123456789')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does convey that the tool returns a JSON string of comment objects, but omits any details about error handling, pagination, sorting, permissions, or behavior when the page has no comments. Basic read-only intent is inferable from 'Get', but significant behavioral context is missing.

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

Conciseness5/5

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

The description is extremely concise, front-loaded with the core purpose, and structured with Args and Returns sections. Every sentence is necessary and adds value; there is no redundant or tangential content.

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

Completeness4/5

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

For a simple one-parameter read tool with an existing output schema, the description covers the essentials: it specifies the input (page_id) and that the return is a JSON string of comments. The output schema supplements return structure details, so the description need not enumerate them. Minor gaps exist around pagination and error cases, but overall it is adequate for the tool's low complexity.

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

Parameters3/5

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

The schema already provides 100% coverage for the single parameter page_id, including a detailed description with an example URL. The description adds only a terse 'Confluence page ID,' which adds no new meaning beyond the schema. This aligns with the baseline of 3 when schema coverage is high.

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

Purpose4/5

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

The description clearly states the tool's function with a specific verb and resource: 'Get comments for a specific Confluence page.' It is distinct from sibling tools like confluence_get_page or confluence_add_comment. However, it does not explicitly differentiate itself from other comment-related tools or mention scope limitations (e.g., only retrieves top-level comments, not inline).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites (e.g., page existence), exclusions, or comparison to other confluence_get_* tools. The only implied usage is that a page_id is needed, but the description stops short of advising when this tool is the right choice.

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

confluence_get_labelsA

Get labels for a specific Confluence page.

Args: ctx: The FastMCP context. page_id: Confluence page ID.

Returns: JSON string representing a list of label objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesConfluence page ID (numeric ID, can be parsed from URL, e.g. from 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title' -> '123456789')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It discloses the return type (JSON list of label objects) but omits any error conditions, rate limits, or permissions. For a simple read operation, this is minimally acceptable.

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

Conciseness5/5

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

The description is extremely concise, using one sentence for purpose and a structured docstring for args/returns. No redundant words; every line adds value.

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

Completeness4/5

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

Given the tool's simplicity (one required parameter, no nested objects, and an output schema present), the description sufficiently covers what the tool does and returns. It is not deeply detailed but is complete for a straightforward read operation.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already provides a detailed description of the 'page_id' parameter. The description adds no further semantic context, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Get labels') and the resource ('for a specific Confluence page'). This distinguishes it from sibling tools like 'confluence_add_label' (adds labels) and 'confluence_get_page' (retrieves page details).

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

Usage Guidelines3/5

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

The description implies usage for retrieving labels but does not specify when to use this over alternatives (e.g., when you need labels vs. comments or page content). No exclusions or context are provided, leaving the agent to infer from the name.

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

confluence_get_pageA

Get content of a specific Confluence page by its ID, or by its title and space key.

Args: ctx: The FastMCP context. page_id: Confluence page ID. If provided, 'title' and 'space_key' are ignored. title: The exact title of the page. Must be used with 'space_key'. space_key: The key of the space. Must be used with 'title'. include_metadata: Whether to include page metadata. convert_to_markdown: Convert content to markdown (true) or keep raw HTML (false). sample: Return only top N lines or the whole page when set to -1.

Returns: JSON string representing the page content and/or metadata, or an error if not found or parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoThe exact title of the Confluence page. Use this with 'space_key' if 'page_id' is not known.
sampleNoReturn only the first N lines of the page for inspection. Set to -1 for full page content.
page_idNoConfluence page ID (numeric ID, can be found in the page URL). For example, in the URL 'https://example.atlassian.net/wiki/spaces/TEAM/pages/123456789/Page+Title', the page ID is '123456789'. Provide this OR both 'title' and 'space_key'. If page_id is provided, title and space_key will be ignored.
space_keyNoThe key of the Confluence space where the page resides (e.g., 'DEV', 'TEAM'). Required if using 'title'.
include_metadataNoWhether to include page metadata such as creation date, last update, version, and labels.
convert_to_markdownNoWhether to convert page to markdown (true) or keep it in raw HTML format (false). Raw HTML can reveal macros (like dates) not visible in markdown, but CAUTION: using HTML significantly increases token usage in AI responses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses output format (JSON string), error conditions ('or an error if not found'), and behavioral nuances like markdown conversion vs raw HTML, including the token-cost warning. This is strong transparency, though it doesn't cover auth/permissions or rate limits.

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

Conciseness5/5

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

The description is structured with Args and Returns sections and stays on point. Every line adds relevant guidance; the token-cost caveat on HTML justifies its inclusion. Moderately lengthy due to six parameters, but appropriately organized.

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

Completeness5/5

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

For a six-parameter read tool with an output schema and no annotations, this description covers purpose, identification methods, return shape, and error handling. The raw HTML warning and sample behavior round out practical usage. It is comprehensive without needing to restate schema fields.

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

Parameters4/5

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

Schema description coverage is 100% and the description's Args section reinforces and extends schema docsโ€”clarifying precedence between lookup parameters, the requirement to use title with space_key, and sample semantics. This adds real meaning beyond the struct, though some repetition of schema text exists.

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

Purpose5/5

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

The description opens with a clear action: 'Get content of a specific Confluence page by its ID, or by its title and space key.' It identifies the resource (Confluence page) and the two lookup methods, which effectively distinguishes it from sibling tools like confluence_search or confluence_get_page_children.

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

Usage Guidelines4/5

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

Provides explicit parameter usage rules: page_id takes precedence, title must be paired with space_key, and sample returns only top N lines. No explicit alternatives are named (e.g., use confluence_search to find pages), but the context is clear enough for a known-page retrieval tool.

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

confluence_get_page_childrenA

Get child pages of a specific Confluence page.

Args: ctx: The FastMCP context. parent_id: The ID of the parent page. expand: Fields to expand. limit: Maximum number of child pages. include_content: Whether to include page content. convert_to_markdown: Convert content to markdown if include_content is true. start: Starting index for pagination.

Returns: JSON string representing a list of child page objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of child pages to return (1-50)
startNoStarting index for pagination (0-based)
expandNoFields to expand in the response (e.g., 'version', 'body.storage')version
parent_idYesThe ID of the parent page whose children you want to retrieve
include_contentNoWhether to include the page content in the response
convert_to_markdownNoWhether to convert page content to markdown (true) or keep it in raw HTML format (false). Only relevant if include_content is true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden. It explains pagination (start, limit), optional content inclusion, and markdown conversion, giving a clear behavioral picture. However, it does not mention ordering, recursion depth, or performance characteristics, which are minor omissions.

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

Conciseness4/5

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

The description is well-structured with Args and Returns sections, and each parameter is listed clearly. It is slightly verbose due to parameter duplication with the schema, but overall concise and easy to parse.

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

Completeness5/5

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

Given the presence of an output schema (not shown but indicated), the description adequately covers the tool's behavior. All parameters are documented, pagination is addressed, and optional behaviors are specified. No obvious gaps for a retrieval tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that convert_to_markdown is only relevant if include_content is true, and it lists parameters in order with brief clarifications beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states 'Get child pages of a specific Confluence page,' which is a specific verb-resource pair. It distinguishes itself from sibling tools like confluence_get_page (single page) and confluence_search (search across pages).

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

Usage Guidelines3/5

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

The description implies usage for fetching children given a parent_id, but does not explicitly state when to use this over alternatives or mention any prerequisites or exclusions. Sibling tools are many, but no guidance is provided.

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

confluence_search_userA

Search Confluence users using CQL.

Args: ctx: The FastMCP context. query: Search query - a CQL query string for user search. limit: Maximum number of results (1-50).

Returns: JSON string representing a list of simplified Confluence user search result objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-50)
queryYesSearch query - a CQL query string for user search. Examples of CQL: - Basic user lookup by full name: 'user.fullname ~ "First Last"' Note: Special identifiers need proper quoting in CQL: personal space keys (e.g., "~username"), reserved words, numeric IDs, and identifiers with special characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the CQL query format, includes quoting examples, and specifies a JSON return value. However, it does not mention read-only status, authentication requirements, potential errors, or pagination behavior beyond the limit parameter.

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

Conciseness4/5

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

The description is concise and includes a clear Returns line. However, the Args section duplicates the parameter information already present in the schema, adding minor redundancy. It remains appropriately sized and well-structured.

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

Completeness3/5

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

For a relatively simple search tool, the description covers purpose, parameters, and return format. However, it lacks usage guidance and deeper behavioral context, such as read-only status or how it handles invalid CQL. The presence of an output schema reduces the need for return structure details, but the description could be more complete.

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

Parameters3/5

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

The input schema already provides detailed descriptions for both parameters (100% coverage), so the description's Args block adds little new meaning beyond restating the schema. The schema itself includes examples and quoting guidance, making the description redundant in this dimension.

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

Purpose5/5

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

The description clearly states 'Search Confluence users using CQL' which identifies a specific verb+resource and distinguishes it from sibling content search tools like confluence_search. The Returns line further clarifies that it produces a list of user search result objects, making the purpose unambiguous.

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

Usage Guidelines3/5

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

No explicit guidance is given on when to use this tool versus alternatives like confluence_search or jira_get_user_profile. The usage context is implied by the tool name and description, but there are no named alternatives or exclusion criteria, leaving the agent to infer the appropriate scenario.

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

confluence_update_pageB

Update an existing Confluence page.

Args: ctx: The FastMCP context. page_id: The ID of the page to update. title: The new title of the page. content: The new content of the page (format depends on content_format). is_minor_edit: Whether this is a minor edit. version_comment: Optional comment for this version. parent_id: Optional new parent page ID. content_format: The format of the content ('markdown', 'wiki', or 'storage'). enable_heading_anchors: Whether to enable heading anchors (markdown only).

Returns: JSON string representing the updated page object.

Raises: ValueError: If Confluence client is not configured, available, or invalid content_format.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe new title of the page
contentYesThe new content of the page. Format depends on content_format parameter
page_idYesThe ID of the page to update
parent_idNoOptional the new parent page ID
is_minor_editNoWhether this is a minor edit
content_formatNo(Optional) The format of the content parameter. Options: 'markdown' (default), 'wiki', or 'storage'. Wiki format uses Confluence wiki markup syntaxmarkdown
version_commentNoOptional comment for this version
enable_heading_anchorsNo(Optional) Whether to enable automatic heading anchor generation. Only applies when content_format is 'markdown'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It mentions that the tool updates a page and raises a ValueError if the client is misconfigured, but it does not disclose whether the operation is destructive (e.g., overwriting content), what permissions are required, or if there are rate limits. The description lacks important behavioral context for a mutation tool.

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

Conciseness4/5

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

The description is structured as a Python docstring, which is clear and front-loaded with the main action. However, it is somewhat verbose with repeated parameter details. A more concise summary would improve efficiency for AI agents, but the current structure is still effective.

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

Completeness4/5

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

Given the complexity of 8 parameters (3 required) and the presence of an output schema, the description covers the input clearly, explains content format options, and notes conditional behavior (enable_heading_anchors only for markdown). It lacks details on output structure, but the output schema compensates. It is reasonably complete for a tool of this complexity.

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

Parameters3/5

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

The input schema already provides 100% coverage with descriptions for all 8 parameters. The description essentially repeats the parameter list without adding significant new meaning. Baseline score of 3 is appropriate since the schema carries the semantic load.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Update an existing Confluence page.' It specifies the resource (Confluence page) and the action (update). The tool name itself is unambiguous, and sibling tools like 'confluence_create_page' and 'confluence_delete_page' provide clear differentiation.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool vs alternatives (e.g., when to create vs update). It does not list prerequisites, such as requiring the page to exist prior to update. The only context is the tool name and the sibling list, which does not compensate for the lack of explicit usage instructions.

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

jira_add_commentA

Add a comment to a Jira issue.

Args: ctx: The FastMCP context. issue_key: Jira issue key. comment: Comment text in Markdown.

Returns: JSON string representing the added comment object.

Raises: ValueError: If in read-only mode or Jira client unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesComment text in Markdown format
issue_keyYesJira issue key (e.g., 'PROJ-123')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of transparency. It discloses that ValueError is raised in read-only mode or when the Jira client is unavailable, and states the return type (JSON string). This provides meaningful behavioral context beyond the tool name.

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

Conciseness5/5

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

The description is concise and well-structured with Args, Returns, and Raises sections. Every sentence contributes essential information, with no redundancy or padding.

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

Completeness4/5

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

For a simple two-parameter mutation tool, the description is sufficiently complete. It covers error conditions and return value, and the schema already documents parameters. Minor gaps like permissions or side effects are not critical given the tool's simplicity.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description restates issue_key and comment with minimal detail ('Jira issue key', 'Comment text in Markdown') that does not add value over the schema descriptions. No new parameter semantics are introduced.

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

Purpose5/5

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

The description begins with 'Add a comment to a Jira issue', which uses a specific verb and resource, clearly distinguishing it from siblings like jira_create_issue or jira_add_worklog. The purpose is unambiguous.

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

Usage Guidelines3/5

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

The description does not explicitly discuss when to use this over alternatives or provide exclusions. The usage context is implied by the clear purpose and the read-only mode error, but no direct guidance is given.

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

jira_add_worklogA

Add a worklog entry to a Jira issue.

Args: ctx: The FastMCP context. issue_key: Jira issue key. time_spent: Time spent in Jira format. comment: Optional comment in Markdown. started: Optional start time in ISO format. original_estimate: Optional new original estimate. remaining_estimate: Optional new remaining estimate.

Returns: JSON string representing the added worklog object.

Raises: ValueError: If in read-only mode or Jira client unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentNo(Optional) Comment for the worklog in Markdown format
startedNo(Optional) Start time in ISO format. If not provided, the current time will be used. Example: '2023-08-01T12:00:00.000+0000'
issue_keyYesJira issue key (e.g., 'PROJ-123')
time_spentYesTime spent in Jira format. Examples: '1h 30m' (1 hour and 30 minutes), '1d' (1 day), '30m' (30 minutes), '4h' (4 hours)
original_estimateNo(Optional) New value for the original estimate
remaining_estimateNo(Optional) New value for the remaining estimate

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description bears the full burden of behavioral disclosure. It discloses expected failure modes ('Raises ValueError: If in read-only mode or Jira client unavailable') and the return type ('JSON string representing the added worklog object'). It also documents optional parameter behaviors (e.g., 'started' defaults to current time) in the schema, but the description reinforces these. This goes beyond a typical one-line mutation tool.

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

Conciseness4/5

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

The description is concise, starting with a one-sentence purpose followed by a structured Args/Returns/Raises format. It is front-loaded and avoids verbosity. The Args section is somewhat redundant with the schema, but the overall format is clean and scannable, making it efficient for an agent to parse.

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

Completeness4/5

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

The description covers the essentials: the action, all parameters (via schema), the return value (JSON string), and error conditions (read-only mode, client unavailable). Given the tool's moderate complexity and the rich schema, this is sufficiently complete for an agent to invoke it correctly without additional context.

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

Parameters3/5

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

The input schema already provides 100% coverage with detailed parameter descriptions, including examples for time_spent and started and default behaviors. The description's Args section merely echoes parameter names and short descriptions without adding new meaning. Baseline of 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description opens with 'Add a worklog entry to a Jira issue,' which clearly states the action (add) and resource (worklog on a Jira issue). This is distinct from sibling tools like jira_get_worklog (retrieve) and jira_add_comment (add a comment), making the purpose unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is for logging time on an issue or contrast it with jira_get_worklog for reading worklogs. The only context is the action itself, so the agent receives no explicit usage direction.

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

jira_batch_create_issuesA

Create multiple Jira issues in a batch.

Args: ctx: The FastMCP context. issues: Issue objects as an array or a JSON-encoded array string. validate_only: If true, only validates without creating.

Returns: JSON string indicating success and listing created issues (or validation result).

Raises: ValueError: If in read-only mode, Jira client unavailable, or input is invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
issuesYesArray of issue objects. A JSON-encoded array string is also accepted for backward compatibility. Each object should contain: - project_key (required): The project key (e.g., 'PROJ') - summary (required): Issue summary/title - issue_type (required): Type of issue (e.g., 'Task', 'Bug') - description (optional): Issue description - assignee (optional): Assignee username or email - components (optional): Array of component names Example: [ {"project_key": "PROJ", "summary": "Issue 1", "issue_type": "Task"}, {"project_key": "PROJ", "summary": "Issue 2", "issue_type": "Bug", "components": ["Frontend"]} ]
validate_onlyNoIf true, only validates the issues without creating them

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses the return format, validation mode, and error conditions (ValueError for read-only mode, unavailable client, invalid input). It could mention atomicity or partial-failure behavior, but what's included is solid.

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

Conciseness5/5

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

The description is well-structured with Args, Returns, and Raises sections, front-loaded with the core purpose. Every section earns its place, and there is no redundant or vague wording.

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

Completeness5/5

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

The description covers inputs, return behavior, validation mode, and error conditions, making it self-sufficient despite no annotations. An output schema exists, so the return explanation is an extra bonus, not a requirement.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already provides detailed parameter descriptions including an example. The description adds only the 'ctx' argument (FastMCP context), which is a technical framework detail rather than a user-facing semantic improvement, so it stays at baseline.

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

Purpose5/5

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

The description immediately states 'Create multiple Jira issues in a batch,' which is a specific verb-resource-scope statement. This clearly distinguishes it from sibling single-create tool jira_create_issue, and the mention of 'validate_only' further clarifies its dual purpose.

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

Usage Guidelines4/5

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

The batch nature and 'multiple' explicitly signal when this tool is appropriate, and the validate_only flag adds context for validation-only usage. It does not explicitly name alternatives or exclusions, but the contrast to a single-create sibling is implied.

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

jira_batch_create_versionsA

Batch create multiple versions in a Jira project.

Args: ctx: The FastMCP context. project_key: The project key. versions: JSON array string of version objects.

Returns: JSON array of results, each with success flag, version or error.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionsYesJSON array of version objects. Each object should contain: - name (required): Name of the version - startDate (optional): Start date (YYYY-MM-DD) - releaseDate (optional): Release date (YYYY-MM-DD) - description (optional): Description of the version Example: [ {"name": "v1.0", "startDate": "2025-01-01", "releaseDate": "2025-02-01", "description": "First release"}, {"name": "v2.0"} ]
project_keyYesJira project key (e.g., 'PROJ')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states that the tool takes a project key and a JSON array string of versions, and returns an array of results with success/error flags. However, it does not disclose whether failure of one version affects the others, whether the operation is atomic, or any side effects or rate considerations. For a batch mutation tool, this is a significant gap.

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

Conciseness5/5

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

The description is compact, structured with 'Args' and 'Returns' sections, and front-loads the core purpose in the first sentence. Every sentence provides necessary information without redundancy or fluff.

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

Completeness3/5

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

The description covers the tool's purpose, inputs, and return format, and the schema fully documents parameters while an output schema exists. However, it does not explain partial failure behavior, potential duplicates, or when this tool should be preferred over single-version creation. Given its moderate complexity, the description is adequate but leaves some behavioral gaps.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already provides detailed descriptions for project_key and versions, including an example JSON array. The description adds only the 'ctx' parameter (a framework-injected context) and restates the purpose of the other parameters. This does not significantly enhance understanding beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Batch create multiple versions in a Jira project', which is a specific verb (batch create) plus a specific resource (versions in a Jira project). This clearly distinguishes it from sibling tools like 'jira_create_version' (single version) and 'jira_get_project_versions' (retrieval), so the purpose is unambiguous.

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

Usage Guidelines4/5

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

The phrase 'Batch create multiple versions' implies this is the tool to use when creating more than one version at a time, which is a clear context. However, it does not explicitly state when not to use it or mention the alternative single-create tool (jira_create_version), so it lacks exclusions but still provides clear context.

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

jira_batch_get_changelogsA

Get changelogs for multiple Jira issues (Cloud only).

Args: ctx: The FastMCP context. issue_ids_or_keys: List of issue IDs or keys. fields: List of fields to filter changelogs by. None for all fields. limit: Maximum changelogs per issue (-1 for all).

Returns: JSON string representing a list of issues with their changelogs.

Raises: NotImplementedError: If run on Jira Server/Data Center. ValueError: If Jira client is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of changelogs to return in result for each issue. Default to -1 for all changelogs. Notice that it only limits the results in the response, the function will still fetch all the data.
fieldsNo(Optional) Filter the changelogs by fields, e.g. ['status', 'assignee']. Default to None for all fields.
issue_ids_or_keysYesList of Jira issue IDs or keys, e.g. ['PROJ-123', 'PROJ-124']

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It discloses the return type (JSON string), Cloud-only limitation, and raises (NotImplementedError, ValueError). However, it omits the nuance that 'limit' only limits the response and the function still fetches all data, which is a notable behavioral detail.

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

Conciseness5/5

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

The description is well-structured with clear Args, Returns, and Raises sections. It is concise and front-loaded with the core purpose and scope, with no redundant or filler content.

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

Completeness4/5

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

The description covers the tool's purpose, key restriction (Cloud only), return format, and error conditions. With an output schema present, it doesn't need to detail every return field. The missing fetch-all-data nuance is already captured in the input schema, so the overall context is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 100%, and the description largely repeats parameter info from the schema. It adds minimal value beyond what the schema already states, such as 'None for all fields'. The schema provides the more detailed notice about limit behavior.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get changelogs for multiple Jira issues', with an explicit scope 'Cloud only'. This clearly distinguishes it from sibling tools like jira_get_issue or jira_get_transitions.

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

Usage Guidelines4/5

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

The description states the tool is for multiple issues and includes a 'Cloud only' restriction, which is an important exclusion (not supported on Server/Data Center). However, it does not explicitly name alternatives or provide when-not-to-use guidance beyond the Cloud-only constraint.

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

jira_construct_download_endpointA

Return a short-lived authenticated download URL for a cached Jira attachment.

This is intended for clients that need a regular HTTP URL instead of an MCP resource URI. The attachment must already be present in the in-memory cache, typically by running jira_download_attachments with return_content=true.

Args: ctx: The FastMCP context. issue_key: Jira issue key for the cached attachment. filename: Cached attachment filename. ttl_minutes: Download URL lifetime in minutes (max 10).

Returns: JSON string with download_url, expires_at, and attachment metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesAttachment filename exactly as returned by jira_download_attachments or list_cached_attachments.
issue_keyYesJira issue key for the cached attachment (e.g., 'PROJ-123')
ttl_minutesNoLifetime for the generated download URL in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the URL is short-lived (with ttl parameter) and returns a JSON structure. However, it omits error behavior, such as what happens if the attachment is not cached or the key is invalid. This is a minor gap.

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

Conciseness5/5

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

The description is well-structured with a summary line, usage context, and clear 'Args' and 'Returns' sections. Every sentence is informative, no redundancy. It is concise yet complete.

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

Completeness4/5

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

The tool has an output schema (not shown but indicated), so the description does not need to detail return values beyond the high-level JSON fields. It covers the tool's purpose, prerequisites, parameters, and return types adequately. Missing only minor error handling details.

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

Parameters3/5

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

Input schema coverage is 100%; each parameter has a description. The description adds marginal value by clarifying that 'filename' must match exactly as returned by sibling tools and reinforcing the ttl_minutes maximum (10). This aligns with baseline expectations for high coverage.

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

Purpose5/5

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

The description begins with a clear verb ('Return a short-lived authenticated download URL') and resource ('cached Jira attachment'). It distinguishes itself from sibling tools like jira_download_attachments and jira_construct_upload_endpoint by specifying its purpose for clients needing an HTTP URL instead of an MCP resource URI.

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

Usage Guidelines4/5

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

The description explicitly states the intended use case ('for clients that need a regular HTTP URL instead of an MCP resource URI') and the prerequisite ('attachment must already be present in the in-memory cache, typically by running jira_download_attachments with return_content=true'). It could be improved by explicitly mentioning when not to use this tool, but the guidance is clear and actionable.

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

jira_construct_upload_endpointA

Return the URL and session token needed to upload local files to the MCP server.

This is step 1 of the client-side file upload flow:

  1. Call this tool to get upload_url + session_id.

  2. POST your file(s) to upload_url using multipart/form-data with the Mcp-Session-Id header set to session_id.

    Windows PowerShell (handles paths with spaces): curl.exe -X POST -H "Mcp-Session-Id: " -F 'file=@"C:\path with spaces\file.pdf"'

    Linux / macOS (handles paths with spaces): curl -X POST -H "Mcp-Session-Id: " -F "file=@'/path/with spaces/file.pdf'"

    The server returns: {"uploaded": [{"filename": "...", "uri": "upload://...", "size": ...}]}

  3. Pass the returned upload:// URIs to jira_upload_attachment.

Sessions expire after 30 minutes (configurable via UPLOAD_STAGING_TTL_MINUTES). The base URL defaults to http://localhost:8932 and can be overridden by the MCP_SERVER_BASE_URL environment variable.

Args: ctx: The FastMCP context.

Returns: JSON string with upload_url, session_id, required_headers, and OS-specific usage example.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It discloses key behavioral traits: session expiration ('Sessions expire after 30 minutes'), configurability of TTL and base URL, and the exact return structure including required_headers and usage example. This exceeds the basic expectations and provides transparency about operational constraints.

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

Conciseness5/5

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

The description is long but every sentence adds value. It is structured with a numbered flow, code samples, environment variable notes, and return format. The front-loaded purpose is immediately clear, and the details are organized logically. Nothing feels redundant.

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

Completeness5/5

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

The description is fully complete for this tool's complexity. It explains the entire upload flow, session mechanics, configuration options, return values, and how to use the results with a sibling tool. Even though an output schema exists, the description already provides a precise return shape, making the tool independently understandable.

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

Parameters4/5

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

The tool has 0 parameters, so the baseline is 4. The description mentions 'Args: ctx: The FastMCP context' but this is internal and not in the schema. The description adds no parameter semantics because there are none, but it does add value by documenting the return object and usage flow, covering any ambiguity.

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

Purpose5/5

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

The description states the tool's purpose explicitly: 'Return the URL and session token needed to upload local files to the MCP server.' It uses a specific verb ('return') and resource (upload endpoint/session token), and clearly distinguishes itself from siblings like jira_construct_download_endpoint by focusing on uploads and describing the upload flow.

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

Usage Guidelines5/5

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

The description provides explicit step-by-step usage instructions and names the alternative/next tool: 'This is step 1 of the client-side file upload flow' and 'Pass the returned upload:// URIs to jira_upload_attachment.' It also includes OS-specific curl examples, making it clear when and how to use the tool.

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

jira_create_issueA

Create a new Jira issue with optional Epic link or parent for subtasks.

Args: ctx: The FastMCP context. project_key: The JIRA project key. summary: Summary/title of the issue. issue_type: Issue type (e.g., 'Task', 'Bug', 'Story', 'Epic', 'Subtask'). assignee: Assignee's user identifier (string): Email, display name, or account ID (e.g., 'user@example.com', 'John Doe', 'accountid:...'). description: Issue description. components: Comma-separated list of component names. additional_fields: Dictionary of additional fields.

Returns: JSON string representing the created issue object.

Raises: ValueError: If in read-only mode or Jira client is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesSummary/title of the issue
assigneeNo(Optional) Assignee's user identifier (string): Email, display name, or account ID (e.g., 'user@example.com', 'John Doe', 'accountid:...')
componentsNo(Optional) Comma-separated list of component names to assign (e.g., 'Frontend,API')
issue_typeYesIssue type (e.g. 'Task', 'Bug', 'Story', 'Epic', 'Subtask'). The available types depend on your project configuration. For subtasks, use 'Subtask' (not 'Sub-task') and include parent in additional_fields.
descriptionNoIssue description
project_keyYesThe JIRA project key (e.g. 'PROJ', 'DEV', 'SUPPORT'). This is the prefix of issue keys in your project. Never assume what it might be, always ask the user.
additional_fieldsNo(Optional) Dictionary of additional fields to set. Examples: - Set priority: {'priority': {'name': 'High'}} - Add labels: {'labels': ['frontend', 'urgent']} - Link to parent (for any issue type): {'parent': 'PROJ-123'} - Set Fix Version/s: {'fixVersions': [{'id': '10020'}]} - Custom fields: {'customfield_10010': 'value'}

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It mentions error conditions (read-only, client unavailable) but does not disclose side effects like workflow triggers, validation requirements, or whether the operation is idempotent. The Raises section adds some transparency but lacks depth.

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

Conciseness3/5

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

The description is well-structured with Args, Returns, Raises sections but repeats parameter descriptions already present in the schema. It could be more concise by reducing duplication, though it remains clear and organized.

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

Completeness4/5

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

Given the presence of an output schema, the description is complete for a creation tool: it covers all parameters, usage nuances (e.g., 'always ask the user' for project key), and error conditions. It does not need to explain return values.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds significant value beyond schema: clarifies assignee format, warns not to assume project_key, provides detailed examples for additional_fields (priority, labels, parent), and explains subtask requirements. This goes well above baseline.

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

Purpose5/5

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

The description clearly states 'Create a new Jira issue' with specific mention of optional Epic link or parent for subtasks, using a specific verb and resource. It differentiates from siblings like batch_create_issues or create_issue_link by focusing on single issue creation with linking capabilities.

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

Usage Guidelines2/5

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

The description lacks explicit guidance on when to use this tool versus alternatives such as jira_batch_create_issues, jira_create_issue_link, or jira_update_issue. It does not mention exclusions or preferred scenarios, leaving the agent to infer from context.

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

jira_create_sprintA

Create Jira sprint for a board.

Args: ctx: The FastMCP context. board_id: Board ID. sprint_name: Sprint name. start_date: Start date (ISO format). end_date: End date (ISO format). goal: Optional sprint goal.

Returns: JSON string representing the created sprint object.

Raises: ValueError: If in read-only mode or Jira client unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNo(Optional) Goal of the sprint
board_idYesThe id of board (e.g., '1000')
end_dateYesEnd time for sprint (ISO 8601 format)
start_dateYesStart time for sprint (ISO 8601 format)
sprint_nameYesName of the sprint (e.g., 'Sprint 1')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that the tool creates a sprint, returns a JSON string, and raises ValueError for read-only or unavailable client. However, it does not discuss permissions, duplicate checking, or side effects beyond creation.

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

Conciseness4/5

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

The description follows a clean docstring format with a concise first line. The Args and Returns sections are useful, though some redundancy with the schema exists. Overall efficient.

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

Completeness4/5

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

Given the presence of an output schema (not shown) and full parameter coverage, the description covers the core purpose, exceptions, and return type. It is mostly sufficient but could include more about the created sprint's properties.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter is already described in the schema. The description's Args section merely restates parameter names and types, adding minimal value beyond the schema.

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

Purpose5/5

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

The description clearly states 'Create Jira sprint for a board,' using a specific verb and resource. It distinguishes from sibling tools like jira_get_sprints_from_board or jira_update_sprint by focusing on creation.

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

Usage Guidelines2/5

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

The description lacks explicit guidance on when to use this tool versus alternatives. It mentions read-only mode errors but does not provide context for choosing this tool over jira_update_sprint or other board-related tools.

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

jira_create_versionA

Create a new fix version in a Jira project.

Args: ctx: The FastMCP context. project_key: The project key. name: Name of the version. start_date: Start date (optional). release_date: Release date (optional). description: Description (optional).

Returns: JSON string of the created version object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the version
start_dateNoStart date (YYYY-MM-DD)
descriptionNoDescription of the version
project_keyYesJira project key (e.g., 'PROJ')
release_dateNoRelease date (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description alone must convey behavioral traits. It mentions the return type (JSON string) but does not disclose side effects, idempotency, error conditions, or rate limits. For a create operation, this is minimal.

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

Conciseness4/5

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

The description is well-structured with sections (Args, Returns) and front-loaded with the main purpose. It is somewhat verbose but still concise enough, with no redundant information.

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

Completeness3/5

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

The description covers basic usage but lacks context about what a 'fix version' means, constraints, or default behavior. Since an output schema exists (indicated), return values are documented, but overall completeness is average for a simple create tool.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents parameters. The description adds value by listing parameters in a clear Args section with natural language, including the return type. This goes beyond the schema.

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

Purpose5/5

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

The description clearly states the tool creates a new fix version in a Jira project, specifying the action (create) and resource (fix version). It distinguishes from siblings like jira_get_project_versions (list) and jira_batch_create_versions (batch).

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

Usage Guidelines3/5

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

The description does not provide explicit when-to-use or when-not-to-use guidance. It lacks prerequisites (e.g., permissions) and does not mention alternatives. Usage is implied but not clarified.

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

jira_delete_issueA

Delete an existing Jira issue.

Args: ctx: The FastMCP context. issue_key: Jira issue key.

Returns: JSON string indicating success.

Raises: ValueError: If in read-only mode or Jira client unavailable.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

The description mentions that ValueError is raised if in read-only mode or if the Jira client is unavailable, which is useful. However, it does not disclose that deletion is permanent or irreversible, nor does it mention any side effects on linked issues or attachments. With no annotations provided, the description carries the burden but only partially covers it.

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

Conciseness5/5

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

The description is compact and well-structured, including Args, Returns, and Raises sections. It conveys the essential information without any fluff, making it easy to scan.

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

Completeness4/5

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

For a simple delete tool with one parameter and an output schema, the description covers the main action, arguments, return value, and a key exception. However, it could be enhanced by noting irreversibility and potential impacts on related data, but it is already reasonably complete.

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

Parameters3/5

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

The schema already fully documents issue_key with an example, and the description merely repeats the parameter name without adding additional semantics. Since schema coverage is 100%, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Delete an existing Jira issue' with a specific verb and resource, which distinguishes it from sibling tools like create, update, or transition. The word 'existing' adds necessary scope.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no exclusions, or prerequisites beyond the implicit read-only mode check. It simply states what it does, leaving the agent to infer usage context.

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

jira_download_attachmentsA

Download attachments from a Jira issue to disk, MCP resources, or both.

When resource caching is enabled, each attachment is immediately available in the MCP resource browser via a static URI โ€” no cache key required:

jira://attachments/{issue_key}/{filename}

Examples: jira://attachments/JDQU-2322/desktop-screenshot-1.png โ† renders as image jira://attachments/JDQU-2322/SPyDR%20Metadata.txt โ† opens as text

Cached resources are valid for 10 minutes. Re-run this tool to refresh.

Args: ctx: The FastMCP context. issue_key: Jira issue key (e.g., 'PROJ-123'). target_dir: Optional server-side save path for downloaded files. return_content: Optional flag to cache attachments as MCP resources.

Returns: JSON string with download results. Attachments may include: - filename: The attachment filename - size: File size in bytes - path: Server-side download path when target_dir is provided - static_resource_uri: Direct MCP resource URI when return_content is enabled - mime_type: MIME type of the file when return_content is enabled

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key (e.g., 'PROJ-123')
target_dirNo(Optional) Directory where attachments should be saved on the server. Preserves the legacy jira_download_attachments behavior.
return_contentNo(Optional) Cache attachments as MCP resources. Defaults to true when target_dir is omitted and false when target_dir is provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description fully discloses caching behavior, URI format, 10-minute validity, and default parameter interactions. It does not explicitly mention read-only nature or authentication.

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

Conciseness5/5

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

The description is well-organized with clear sections (purpose, caching, examples, args, returns). Every sentence serves a purpose, and the most critical information is front-loaded.

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

Completeness5/5

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

Given the tool's moderate complexity and the presence of an output schema, the description thoroughly covers all aspects: inputs, outputs, caching behavior, default logic, and resource URI format.

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

Parameters5/5

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

The description adds substantial meaning beyond the schema, including dynamic default rules for return_content, MCP resource URI examples, and explanations of how parameters affect behavior.

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

Purpose5/5

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

The description states 'Download attachments from a Jira issue to disk, MCP resources, or both.' This is a specific verb-resource pair with clear scope, distinguishing it from upload and listing tools.

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

Usage Guidelines3/5

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

The description explains the caching mechanism and default behavior but does not explicitly guide when to use this tool versus siblings like jira_list_cached_attachments or jira_save_attachment_to_disk.

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

jira_get_agile_boardsA

Get jira agile boards by name, project key, or type.

Args: ctx: The FastMCP context. board_name: Name of the board (fuzzy search). project_key: Project key. board_type: Board type ('scrum' or 'kanban'). start_at: Starting index. limit: Maximum results.

Returns: JSON string representing a list of board objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-50)
start_atNoStarting index for pagination (0-based)
board_nameNo(Optional) The name of board, support fuzzy search
board_typeNo(Optional) The type of jira board (e.g., 'scrum', 'kanban')
project_keyNo(Optional) Jira project key (e.g., 'PROJ-123')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It states the return type ('JSON string representing a list of board objects') and mentions fuzzy search, which adds some context. However, it doesn't disclose potential side effects, authentication requirements, or how the fuzzy search behaves, leaving gaps.

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

Conciseness4/5

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

The description is efficient: a single introductory sentence followed by a parameter list. It's front-loaded with the core purpose. The Args block is somewhat redundant with the schema but is standard docstring format and not excessively verbose.

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

Completeness4/5

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

Given the tool's simplicity, the description covers the essential aspects: purpose, filters, and return value. The output schema handles the return structure, so the description doesn't need to explain it. The only missing piece is explicit usage guidance, but that's not critical for a straightforward read-only tool.

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

Parameters3/5

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

The input schema has 100% description coverage with clear explanations for all five parameters. The description largely repeats the schema information without adding extra meaning beyond the 'fuzzy search' note already present in the schema. The description doesn't compensate for any schema gaps because there are none.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get jira agile boards by name, project key, or type.' The verb 'Get' plus the specific resource 'jira agile boards' makes the purpose unmistakable. It also distinguishes itself from sibling tools like jira_get_board_issues or jira_get_sprints_from_board by focusing on board listing/filtering.

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

Usage Guidelines3/5

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

The description implies when to use the tool via its filter parameters but provides no explicit when-to-use or when-not-to-use guidance. No alternatives are named. Since it's a straightforward listing tool with no closely competing sibling, the implicit context is acceptable, but it doesn't reach the level of explicit guidance.

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

jira_get_all_projectsA

Get all Jira projects accessible to the current user.

Args: ctx: The FastMCP context. include_archived: Whether to include archived projects.

Returns: JSON string representing a list of project objects accessible to the user. Project keys are always returned in uppercase. If JIRA_PROJECTS_FILTER is configured, only returns projects matching those keys.

Raises: ValueError: If the Jira client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_archivedNoWhether to include archived projects in the results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that only accessible projects are returned, keys are uppercase, include_archived filter, and the optional env-var filter. It also notes the ValueError for client issues. This is good, though it omits details on pagination or side effects.

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

Conciseness5/5

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

The description is concise with 5-6 sentences, structured with clear Args, Returns, and Raises sections. Every sentence adds value, and the most critical information is front-loaded.

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

Completeness4/5

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

Given the simple tool (one optional param, no side effects) and the presence of an output schema, the description covers the main aspects: behavior, return format, and exception. It does not mention pagination or rate limits, but for this tool it is adequate.

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

Parameters3/5

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

Schema coverage is 100% for the single boolean parameter, so baseline is 3. The description's Args section restates 'include_archived' but adds no additional semantic meaning beyond the schema. The context about JIRA_PROJECTS_FILTER is related but not a parameter.

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

Purpose5/5

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

The description clearly states 'Get all Jira projects' with the scope 'accessible to the current user.' It also specifies important details like uppercase keys and filtering via environment variable, making the tool's purpose distinct from sibling tools that focus on specific issues or projects.

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

Usage Guidelines3/5

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

The description mentions the effect of JIRA_PROJECTS_FILTER but does not explicitly state when to use this tool versus alternatives (e.g., when to use jira_get_project_issues instead). There is no guidance on exclusion or comparison, though the unique purpose is clear.

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

jira_get_attachment_imagesA

Fetch image attachments from a Jira issue as viewable image content.

Returns each image as an MCP image content block so a vision-capable model can see and describe it directly โ€” no MarkItDown text extraction and no MCP sampling required. Works with any client whose own model supports images (e.g., Claude, GPT-4o, Bedrock vision models).

Non-image attachments are ignored; use jira_summarize_attachments for documents (PDF / DOCX / XLSX / CSV / โ€ฆ).

Args: ctx: The FastMCP context. issue_key: Jira issue key (e.g., 'PROJ-123'). filename_filter: Optional comma-separated list of image filenames to fetch. max_images: Maximum number of images to return (default: 10).

Returns: A ToolResult whose content holds one image block per attachment (each preceded by a text label) and whose structured content lists the image metadata plus any download failures.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key whose image attachments should be fetched (e.g., 'PROJ-123')
max_imagesNoMaximum number of images to return (default: 10).
filename_filterNo(Optional) Comma-separated list of specific image filenames to fetch. When omitted all image attachments on the issue are returned.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it excels: it discloses that each image is returned as an MCP image content block, that non-image attachments are ignored, that no MarkItDown extraction or MCP sampling is required, and that the structured content includes metadata and download failures. This gives the agent a clear picture of the tool's behavior and edge cases.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the main purpose, then organized with clear Args and Returns sections. However, the Args section partially duplicates the schema's parameter descriptions, making it slightly longer than strictly necessary, though the Returns detail is non-redundant given there is no output schema.

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

Completeness5/5

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

Given the lack of annotations and output schema, the description is exceptionally complete: it explains the exact return format (ToolResult with image blocks and structured content), the client compatibility requirements, the exclusion of non-image files, and provides an alternative tool. It covers all key aspects an agent needs to invoke and interpret this tool correctly.

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

Parameters4/5

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

The input schema already provides 100% coverage for the three JSON parameters, so the baseline is 3. The description adds value by documenting the `ctx` FastMCP context argument, which is absent from the schema, and by clarifying defaults (e.g., max_images=10) in the Args section, though this mostly repeats schema descriptions.

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

Purpose5/5

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

The description opens with 'Fetch image attachments from a Jira issue as viewable image content,' a specific verb+resource+output combination. It explicitly contrasts with jira_summarize_attachments, which handles documents, thereby distinguishing from a sibling tool.

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

Usage Guidelines5/5

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

The description states when to use this tool: when you need image attachments as viewable content for vision-capable models. It also provides an explicit alternative: 'use jira_summarize_attachments for documents (PDF / DOCX / XLSX / CSV / โ€ฆ)' when non-image attachments are involved.

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

jira_get_board_issuesA

Get all issues linked to a specific board filtered by JQL.

Args: ctx: The FastMCP context. board_id: The ID of the board. jql: JQL query string to filter issues. fields: Comma-separated fields to return. start_at: Starting index for pagination. limit: Maximum number of results. expand: Optional fields to expand.

Returns: JSON string representing the search results including pagination info.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYesJQL query string (Jira Query Language). Examples: - Find Epics: "issuetype = Epic AND project = PROJ" - Find issues in Epic: "parent = PROJ-123" - Find by status: "status = 'In Progress' AND project = PROJ" - Find by assignee: "assignee = currentUser()" - Find recently updated: "updated >= -7d AND project = PROJ" - Find by label: "labels = frontend AND project = PROJ" - Find by priority: "priority = High AND project = PROJ"
limitNoMaximum number of results (1-50)
expandNoOptional fields to expand in the response (e.g., 'changelog').version
fieldsNoComma-separated fields to return in the results. Use '*all' for all fields, or specify individual fields like 'summary,status,assignee,priority'reporter,issuetype,status,labels,created,summary,assignee,updated,versions,description,priority,fixVersions
board_idYesThe id of the board (e.g., '1001')
start_atNoStarting index for pagination (0-based)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It mentions pagination via 'start_at' and 'limit' and notes the return is a 'JSON string... including pagination info,' which adds some transparency. However, it does not discuss important traits like rate limits, authorization requirements, or the fact that 'all issues' is constrained by pagination defaults.

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

Conciseness4/5

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

The description is front-loaded with a clear one-sentence summary and then organized into Args and Returns sections, making it easy to scan. The Args section duplicates much of the schema information, which adds some redundancy, but the overall structure is efficient and serves as a useful quick reference.

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

Completeness4/5

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

The tool has a rich input schema, an output schema, and six parameters, and the description adequately covers the core use case, parameters, and return format. It explains pagination info and JQL filtering, which is sufficient for an agent to invoke it correctly. It could be enhanced with sibling differentiation, but such guidance is not essential for basic invocation.

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

Parameters3/5

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

The input schema already provides 100% parameter coverage with rich descriptions, so the baseline is 3. The description merely lists parameter names and short hints (e.g., 'Comma-separated fields to return') without adding significant meaning beyond the schema's detailed explanations and examples. It adds marginal value by grouping the parameters in a readable Args block.

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

Purpose5/5

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

The description clearly states the tool's primary function: 'Get all issues linked to a specific board filtered by JQL.' This specifies the verb, resource (board issues), and filtering mechanism, and it distinguishes the tool from siblings like jira_search, jira_get_project_issues, and jira_get_sprint_issues by emphasizing the board scope.

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

Usage Guidelines4/5

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

The phrase 'linked to a specific board' provides clear context that this tool is intended for board-scoped queries, which differentiates it from issue, project, or sprint searches. However, it does not explicitly mention when not to use this tool or name alternative tools, stopping short of the 'when/when-not/alternatives' standard.

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

jira_get_issueA

Get details of a specific Jira issue including its Epic links and relationship information.

Args: ctx: The FastMCP context. issue_key: Jira issue key. fields: Comma-separated list of fields to return (e.g., 'summary,status,customfield_10010'), a single field as a string (e.g., 'duedate'), '*all' for all fields, or omitted for essentials. expand: Optional fields to expand. comment_limit: Maximum number of comments. properties: Issue properties to return. update_history: Whether to update issue view history.

Returns: JSON string representing the Jira issue object.

Raises: ValueError: If the Jira client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNo(Optional) Fields to expand. Examples: 'renderedFields' (for rendered content), 'transitions' (for available status transitions), 'changelog' (for history)
fieldsNo(Optional) Comma-separated list of fields to return (e.g., 'summary,status,customfield_10010'). You may also provide a single field as a string (e.g., 'duedate'). Use '*all' for all fields (including custom fields), or omit for essential fields only.reporter,issuetype,status,labels,created,summary,assignee,updated,versions,description,priority,fixVersions
issue_keyYesJira issue key (e.g., 'PROJ-123')
propertiesNo(Optional) A comma-separated list of issue properties to return
comment_limitNoMaximum number of comments to include (0 or null for no comments)
update_historyNoWhether to update the issue view history for the requesting user

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description discloses return format (JSON string), raises ValueError, and reveals a side effect via update_history parameter. It doesn't mention authentication or rate limits, but for a read operation this is substantial.

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

Conciseness3/5

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

The opening sentence is clear and front-loaded. However, the Args section repeats the input schema parameter descriptions with less detail, adding redundancy. Returns/Raises are useful. It is not excessively long but could be trimmed.

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

Completeness4/5

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

The tool is well-specified by the schema and output schema. The description adds the defining feature (Epic links), notes the update_history side effect, and provides error info. It is sufficiently complete for an agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description's parameter explanations largely repeat or simplify the schema entries (e.g., fields, expand, comment_limit) without adding meaningful new information.

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

Purpose5/5

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

The description uses a specific verb 'Get' and resource 'specific Jira issue' and adds unique detail 'Epic links and relationship information' which distinguishes it from sibling tools like jira_search or jira_get_project_issues.

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

Usage Guidelines3/5

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

The description provides no explicit when-to-use guidance or alternatives. Usage is implied by the tool name and summary, but it doesn't tell agents to prefer this over jira_search for single issue retrieval or when NOT to use it.

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

jira_get_project_issuesB

Get all issues for a specific Jira project.

Args: ctx: The FastMCP context. project_key: The project key. limit: Maximum number of results. start_at: Starting index for pagination.

Returns: JSON string representing the search results including pagination info.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-50)
start_atNoStarting index for pagination (0-based)
project_keyYesThe project key

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the return is a JSON string with pagination info, which is useful. However, it does not cover auth requirements, rate limits, or the precise scope of 'all issues' (e.g., whether archived issues are included). The read-only nature is implied by 'get' but not explicitly stated.

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

Conciseness3/5

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

The description starts with a clear one-sentence purpose, but then repeats schema information in an Args block and even includes a 'ctx' parameter that is not present in the input schema, which could confuse an agent. The Returns line is redundant given the output schema exists. It is not as concise as it could be.

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

Completeness3/5

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

For a simple paginated list tool, the description covers the essential purpose and parameters, and the output schema handles return structure. However, it does not clarify how this tool relates to jira_search or jira_get_board_issues, nor whether the results are limited to certain issue types. This leaves some contextual gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents project_key, limit, and start_at with their constraints. The description restates these parameter names and basic purpose without adding new meaning, warranting the baseline score of 3.

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

Purpose4/5

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

The description clearly states the tool gets all issues for a specific Jira project, using a specific verb and resource. However, it does not distinguish this tool from siblings like jira_search or jira_get_board_issues, so it misses the top score.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. The description implies project-scoped retrieval but does not mention exclusions, prerequisites, or when to prefer another tool such as jira_search.

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

jira_get_project_versionsA

Get all fix versions for a specific Jira project.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_keyYesJira project key (e.g., 'PROJ')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral traits. It lacks mention of authentication, rate limits, pagination, or what happens if the project key is invalid. The short description does not disclose these.

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

Conciseness5/5

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

Single sentence front-loaded with verb and resource. No wasted words; efficient and clear.

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

Completeness3/5

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

For a simple getter with output schema, the description is minimally adequate. However, it does not clarify if 'fix versions' includes only unreleased or all, or any ordering. Slightly incomplete.

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

Parameters3/5

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

Schema description coverage is 100% (project_key is well-described). The description adds minimal value beyond the schema by stating 'for a specific Jira project', but this is redundant.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'all fix versions' for a specific Jira project. It distinguishes from sibling tools like jira_get_project_issues and jira_get_all_projects by specifying 'fix versions'.

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

Usage Guidelines3/5

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

The description implies usage (when you need fix versions for a project) but provides no explicit guidance on when not to use it or alternatives. Given siblings like jira_create_version, some differentiation would help.

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

jira_get_sprint_issuesB

Get jira issues from sprint.

Args: ctx: The FastMCP context. sprint_id: The ID of the sprint. fields: Comma-separated fields to return. start_at: Starting index. limit: Maximum results.

Returns: JSON string representing the search results including pagination info.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-50)
fieldsNoComma-separated fields to return in the results. Use '*all' for all fields, or specify individual fields like 'summary,status,assignee,priority'reporter,issuetype,status,labels,created,summary,assignee,updated,versions,description,priority,fixVersions
start_atNoStarting index for pagination (0-based)
sprint_idYesThe id of sprint (e.g., '10001')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not disclose whether the operation is read-only, what error behavior occurs for invalid sprint IDs, or any rate limits or auth requirements. It simply describes the action and return format.

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

Conciseness4/5

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

The description is reasonably concise and structured with Args/Returns sections. However, it redundantly lists parameters already described in the schema, and includes a 'ctx' parameter not in the user-facing schema, adding minor noise.

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

Completeness4/5

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

Given the output schema exists and the input schema is complete, the description provides adequate context about the action and return format. It mentions pagination info in the return, which is useful, but lacks guidance on usage contexts, lowering completeness slightly.

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

Parameters3/5

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

The schema covers all parameters with detailed descriptions, achieving 100% coverage. The description's Args section merely lists parameter names without adding semantic meaning beyond the schema, so it adds little value.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb and resource ('Get jira issues from sprint'). This distinguishes it from siblings like jira_get_board_issues or jira_get_project_issues, which target different scopes.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives is provided. The description only states what it does without mentioning prerequisites, exclusions, or comparing to similar tools like jira_get_board_issues or jira_search.

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

jira_get_sprints_from_boardA

Get jira sprints from board by state.

Args: ctx: The FastMCP context. board_id: The ID of the board. state: Sprint state ('active', 'future', 'closed'). If None, returns all sprints. start_at: Starting index. limit: Maximum results.

Returns: JSON string representing a list of sprint objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-50)
stateNoSprint state (e.g., 'active', 'future', 'closed')
board_idYesThe id of board (e.g., '1000')
start_atNoStarting index for pagination (0-based)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits beyond what is in the input schema. It does not mention rate limits, authentication requirements, or side effects. The return format (JSON string of sprint objects) is stated, but additional context is minimal.

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

Conciseness5/5

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

The description is concise with no wasted words. It is structured with a clear header, parameter list, and return type. Information is front-loaded, making it easy to scan.

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

Completeness4/5

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

Given the presence of an output schema and full schema description coverage, the description adequately covers parameters and return type. It lacks details about pagination behavior beyond start_at and limit but is sufficient for a simple retrieval tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that setting 'state' to None returns all sprints, and it lists the parameter descriptions clearly. However, it does not significantly augment the schema's own descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'jira sprints from board'. It distinguishes itself from sibling tools like jira_get_agile_boards and jira_get_board_issues by focusing specifically on sprints. The parameter details further clarify the purpose.

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

Usage Guidelines3/5

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

The description implies usage for retrieving sprints from a board but does not explicitly state when to use this tool versus alternatives (e.g., jira_get_sprint_issues for issues within a sprint). No exclusion criteria are provided.

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

jira_get_transitionsB

Get available status transitions for a Jira issue.

Args: ctx: The FastMCP context. issue_key: Jira issue key.

Returns: JSON string representing a list of available transitions.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided. The description only states it returns a JSON string of transitions, but does not disclose behavioral traits such as idempotency, required permissions, or that it is a read-only operation. It carries the full burden of behavioral disclosure and falls short.

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

Conciseness5/5

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

The description is concise and well-structured, with a clear purpose statement followed by Args and Returns sections. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Given the tool is simple and has an output schema, the description is mostly complete. However, it could mention that transitions depend on the current status and is a read operation, which would make it more self-contained.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter issue_key. The description repeats the parameter role but does not add significant meaning beyond what the schema provides (e.g., format example). Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'available status transitions', and the target 'Jira issue'. It effectively distinguishes from sibling tool jira_transition_issue which is for performing transitions.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives. It does not mention that it should be used before jira_transition_issue to see valid transitions, nor does it indicate when not to use it.

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

jira_get_user_profileA

Retrieve profile information for a specific Jira user.

Args: ctx: The FastMCP context. user_identifier: User identifier (email, username, key, or account ID).

Returns: JSON string representing the Jira user profile object, or an error object if not found.

Raises: ValueError: If the Jira client is not configured or available.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_identifierYesIdentifier for the user (e.g., email address 'user@example.com', username 'johndoe', account ID 'accountid:...', or key for Server/DC).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses return behavior ('JSON string representing the Jira user profile object, or an error object if not found') and a raised ValueError when the Jira client is unavailable, providing useful behavioral context beyond the input schema.

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

Conciseness4/5

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

The description is a compact docstring with clear sections (Args, Returns, Raises) and front-loads the purpose. It is slightly redundant by repeating parameter info already in the schema and listing ctx, but overall it is well-organized and not overly verbose.

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

Completeness5/5

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

For a simple one-parameter lookup tool, the description is complete: it states the purpose, return format, error behavior, and a key prerequisite (client configuration). It covers essential information an agent needs to invoke and interpret the result without relying on an output schema.

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

Parameters3/5

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

The input schema already describes user_identifier in detail with examples, so the description adds little new parameter meaning. It repeats the identifier types and also lists 'ctx' in Args even though ctx is not part of the input schema, which is a minor source of confusion; schema coverage is 100%, so the baseline 3 applies.

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

Purpose5/5

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

The description begins with a specific action and resource: 'Retrieve profile information for a specific Jira user.' This clearly states what the tool does and is distinct from sibling tools like jira_get_issue or jira_get_project_issues, which target different resources.

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

Usage Guidelines4/5

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

The description gives clear context by specifying 'for a specific Jira user' but does not explicitly mention when not to use it or alternative tools. It implies this is the go-to tool for fetching a user profile, but lacks explicit exclusions or references to alternatives.

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

jira_get_worklogB

Get worklog entries for a Jira issue.

Args: ctx: The FastMCP context. issue_key: Jira issue key.

Returns: JSON string representing the worklog entries.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states it returns a JSON string, but does not mention that it is a read-only operation, potential authentication requirements, or any side effects. For a 'get' tool, the lack of explicit read-only indication reduces transparency.

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

Conciseness4/5

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

The description is very concise, with two main sentences and separate lines for args and returns. It is front-loaded with the core purpose. No unnecessary words, but the format includes redundant information (e.g., 'args' and 'returns' are already implied by schema and output schema). Still, it is efficient.

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

Completeness3/5

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

Given the simplicity of the tool (single parameter, output schema exists), the description provides the essential information. However, it lacks examples, notes on permissions, or information about pagination or worklog limits. It is adequate but not fully complete for all scenarios.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description in the schema is clear. The description's mention of 'issue_key: Jira issue key' adds no new information beyond the schema. Baseline 3 is appropriate as the schema already documents the parameter adequately.

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

Purpose5/5

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

The description states 'Get worklog entries for a Jira issue', which is a specific verb+resource combination. It clearly distinguishes from sibling tools like jira_add_worklog by focusing on retrieval. The inclusion of 'for a Jira issue' adds context beyond the tool name, avoiding tautology.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as jira_add_worklog. There is no mention of prerequisites, limitations, or scenarios where another tool would be more appropriate. The description simply states what it does without usage context.

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

jira_jira_upload_attachmentA

Upload one or more staged files to a Jira issue as attachments.

This is step 3 of the client-side file upload flow (after construct_upload_endpoint and POSTing files to /upload).

Each upload:// URI is resolved from the server-side staging store, then uploaded directly to Jira via the REST API โ€” no base64, no context-window overhead.

Staged files are removed from the store after a successful upload. Unused uploads expire automatically after 30 minutes.

Args: ctx: The FastMCP context. issue_key: Jira issue key (e.g., 'PROJ-123'). upload_uris: List of upload:// URIs from the /upload endpoint response.

Returns: JSON string with per-file upload results.

Raises: ValueError: If in read-only mode or Jira client is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key to attach the file(s) to (e.g., 'PROJ-123')
upload_urisYesList of upload:// URIs returned by the /upload endpoint after calling construct_upload_endpoint and uploading your files. Example: ['upload://sessions/abc123/xyz456']

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full burden and delivers richly: it discloses side effects (staged files are removed after success), automatic expiry after 30 minutes, technical approach (direct REST upload, no base64), and error conditions (ValueError in read-only mode or without Jira client).

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

Conciseness4/5

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

The description is longer than the two-sentence ideal but every sentence adds value, covering purpose, flow position, technical details, side effects, expiry, and errors. It is well-structured with Args/Returns/Raises sections, making it scannable despite the length.

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

Completeness5/5

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

Given the multi-step upload flow, the description thoroughly covers prerequisites (staging), the operational process, postconditions (file removal and expiry), and failure modes. An output schema is present, so the Returns line is a bonus rather than a necessity. There are no missing pieces for an agent to correctly select and invoke the tool.

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

Parameters4/5

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

Both parameters have complete schema descriptions (100% coverage), and the description adds flow-specific context: upload_uris are explicitly tied to the /upload endpoint response with an example, and issue_key is given a concrete format. It also documents a 'ctx' argument not present in the schema, which adds a bit of confusion but still contributes useful context.

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

Purpose5/5

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

The description clearly states the verb 'Upload' and the resource 'one or more staged files to a Jira issue as attachments'. It explicitly identifies this as step 3 of a client-side file upload flow, distinguishing it from construct_upload_endpoint and other attachment-related tools.

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

Usage Guidelines4/5

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

It provides explicit when-to-use guidance by stating this is step 3 after construct_upload_endpoint and POSTing files to /upload. However, it doesn't mention when not to use it or list alternative tools, so it falls short of a perfect 5.

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

jira_list_cached_attachmentsA

List all currently cached attachments available via MCP resources.

Each attachment exposes a static_resource_uri that can be opened directly in the MCP resource browser without knowing the cache key:

jira://attachments/{issue_key}/{filename}

Images (PNG, JPEG, etc.) render inline. Text files open as-is. All cached resources expire after 10 minutes.

Returns: JSON string with list of cached attachments including URIs and metadata

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that attachments expire after 10 minutes, that images render inline, and the URI format. It does not mention any destructive behavior or potential staleness beyond the 10-minute expiry.

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

Conciseness5/5

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

The description is concise and well-structured: a clear purpose statement, followed by URI format details, behavior notes, and return type. Every sentence adds value with no redundancy.

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

Completeness5/5

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

For a zero-parameter tool with an output schema, the description covers the essential aspects: what the tool does, how to use the URIs, cache expiration, inline rendering, and return format. It is complete for the tool's complexity.

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

Parameters4/5

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

The tool has no parameters, and schema coverage is 100% (none). The description adds context about the URI format and return type, compensating for the absence of parameters.

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

Purpose5/5

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

The description clearly states the verb 'list', the resource 'cached attachments', and the scope 'currently cached'. It distinguishes from siblings like jira_download_attachments and jira_save_attachment_to_disk by focusing on cached resources available via MCP resources.

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

Usage Guidelines3/5

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

The description implies usage for browsing cached attachments via MCP resource browser but does not explicitly state when to use this tool versus alternatives like jira_download_attachments or jira_save_attachment_to_disk. No direct comparisons or exclusions are provided.

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

jira_save_attachment_to_diskA

Save a cached attachment to the MCP SERVER's filesystem.

โš ๏ธ WARNING: This saves to the SERVER's filesystem, NOT your local client machine!

Use cases:

  • MCP server is running locally on your machine

  • Need to save files on a remote server for server-side processing

  • Saving to a shared network location accessible from server

For CLIENT-SIDE saving (your local VS Code machine):

  • Use the resource URI from download_attachments response

  • Your MCP client (VS Code) will fetch and save it locally

Args: ctx: The FastMCP context. cache_key: The cache_key returned from download_attachments tool target_path: Full file path on SERVER filesystem (not client's local disk)

Returns: JSON string with save result including absolute path on server

Example: # This saves to SERVER filesystem, not your local machine! save_attachment_to_disk( cache_key="abc123def456", target_path="/server/storage/design.pdf" )

ParametersJSON Schema
NameRequiredDescriptionDefault
cache_keyYesThe cache key from download_attachments response
target_pathYesFull path on MCP SERVER filesystem (e.g., '/tmp/file.pdf' or 'C:/server/downloads/file.pdf')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that saving occurs on the server filesystem, not the client, and adds warnings about the destination. While it could mention overwrite behavior or permissions, it provides sufficient behavioral context beyond the schema.

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

Conciseness5/5

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

The description is well-structured with a warning, use cases, args, returns, and an example. Every section earns its place, and the information is front-loaded with the critical warning.

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

Completeness5/5

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

Given the tool's complexity and the presence of an output schema (as per context), the description covers all needed aspects: it explains the return format, references sibling tools, and provides enough detail for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining cache_key's origin from download_attachments and providing context for target_path. The example also clarifies usage, enriching the schema descriptions.

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

Purpose5/5

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

The description clearly states the tool saves a cached attachment to the MCP SERVER's filesystem, using specific verb and resource. It differentiates from client-side saving and provides use cases, distinguishing it from sibling tools like jira_download_attachments.

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

Usage Guidelines5/5

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

The description explicitly says when to use (e.g., server running locally, need server-side processing) and when not to use (for client-side saving, use the resource URI). It includes a clear warning and alternative guidance, making it easy for the agent to decide.

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

jira_search_fieldsA

Search Jira fields by keyword with fuzzy match.

Args: ctx: The FastMCP context. keyword: Keyword for fuzzy search. limit: Maximum number of results. refresh: Whether to force refresh the field list.

Returns: JSON string representing a list of matching field definitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results
keywordNoKeyword for fuzzy search. If left empty, lists the first 'limit' available fields in their default order.
refreshNoWhether to force refresh the field list

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and does reasonably well: it notes fuzzy matching, the optional force-refresh behavior, and the JSON-string list return format. It implicitly reveals caching via the 'refresh' flag, though it does not explicitly state side-effect-free read-only behavior or rate-limit considerations.

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

Conciseness4/5

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

The description is front-loaded with a one-sentence purpose and uses a clear Args/Returns structure. It is efficient, though the per-parameter lines largely duplicate the schema descriptions and add minor redundancy. Still, it is compact and easy to scan.

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

Completeness4/5

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

For a low-complexity search tool with full schema coverage and an output schema, the description is mostly complete: it states the purpose, refresh semantics, and return format. It could improve by clarifying that this is metadata-field discovery rather than issue search, but the core invocation is well-covered.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description's parameter list mostly mirrors the schema descriptions and adds little beyond the 'ctx' context parameter and return type. The schema itself provides richer detail (e.g., empty keyword lists first limit fields) than the description does.

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

Purpose5/5

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

The description clearly specifies a distinct resource ('Jira fields') and a specific search behavior ('by keyword with fuzzy match'), differentiating it from siblings such as jira_search (which searches issues). The return type ('matching field definitions') further disambiguates it from generic search tools.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as jira_search or jira_get_project_issues. The description only states the operation, with no exclusions, prerequisites, or conditions for choosing this tool.

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

jira_summarize_attachmentsA

Scan and summarize attachments (PDFs, images, Office documents) from a Jira issue.

Uses Microsoft MarkItDown to extract readable content from each supported attachment:

โ€ข PDF โ†’ full text extracted via pdfminer โ€ข Images โ†’ EXIF metadata (for a visual description use jira_get_attachment_images) โ€ข DOCX / PPTX / XLSX โ†’ document text and structure as Markdown โ€ข CSV / JSON / XML โ†’ raw content rendered as Markdown

Unsupported file types (e.g., zip, mp4, exe) are skipped and listed under "skipped" in the response.

Requires the markitdown package โ€” add it with: uv add 'markitdown[pdf]'

To have a vision-capable model see image attachments (screenshots, diagrams, charts), use jira_get_attachment_images instead โ€” it returns the raw images as content blocks your model can view directly.

Args: ctx: The FastMCP context. issue_key: Jira issue key (e.g., 'PROJ-123'). filename_filter: Optional comma-separated list of filenames to process. max_chars_per_file: Truncation limit per file in characters (0 = unlimited).

Returns: JSON string with per-attachment summaries including extracted markdown content.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key whose attachments should be summarized (e.g., 'PROJ-123')
filename_filterNo(Optional) Comma-separated list of specific filenames to process. When omitted all supported attachments in the issue are processed.
max_chars_per_fileNoMaximum characters of extracted text to include per file in the response. Use 0 for no limit. Default is 4000.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the use of MarkItDown, detailed extraction behavior per file type, handling of unsupported types (listed under 'skipped'), truncation behavior, and a package dependency. It could further clarify whether the operation is read-only or has side effects, but the summary nature strongly implies non-mutating.

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

Conciseness4/5

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

The description is well-structured with a clear opening, bullet-pointed file type breakdown, and distinct sections for behavior and arguments. It is somewhat verbose and repeats schema information, but each section serves a purpose, making the length acceptable.

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

Completeness5/5

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

The description covers the tool's complexity thoroughly: supported/unsupported file types, extraction method, truncation, package requirement, and alternative tool for images. Since an output schema is present, the return value (JSON string with 'skipped' key) is adequately described without requiring further detail.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's Args section largely repeats schema descriptions without adding new semantics, though it does restate the default values and the meaning of 0. No additional parameter insight is provided beyond what the schema already offers.

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

Purpose5/5

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

The description clearly states the tool's function: 'Scan and summarize attachments (PDFs, images, Office documents) from a Jira issue.' It identifies the specific verb (scan/summarize), resource (attachments on a Jira issue), and scope, distinguishing it from the sibling jira_get_attachment_images, which is explicitly contrasted for image viewing.

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

Usage Guidelines5/5

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

Explicit guidance is provided on when to use this tool versus the alternative: 'To have a vision-capable model *see* image attachments (screenshots, diagrams, charts), use jira_get_attachment_images instead.' It also clarifies supported vs. unsupported file types, ensuring the agent can decide when this tool is appropriate.

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

jira_transition_issueA

Transition a Jira issue to a new status.

Args: ctx: The FastMCP context. issue_key: Jira issue key. transition_id: ID of the transition. fields: Optional dictionary of fields to update during transition. comment: Optional comment for the transition.

Returns: JSON string representing the updated issue object.

Raises: ValueError: If required fields missing, invalid input, in read-only mode, or Jira client unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo(Optional) Dictionary of fields to update during the transition. Some transitions require specific fields to be set (e.g., resolution). Example: {'resolution': {'name': 'Fixed'}}
commentNo(Optional) Comment to add during the transition. This will be visible in the issue history.
issue_keyYesJira issue key (e.g., 'PROJ-123')
transition_idYesID of the transition to perform. Use the jira_get_transitions tool first to get the available transition IDs for the issue. Example values: '11', '21', '31'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description bears full burden. It mentions raising ValueError for read-only mode or missing inputs, and that some transitions require specific fields. However, it does not disclose potential irreversibility, permission requirements, or side effects like status changes. Adequate but not rich.

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

Conciseness5/5

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

Description is concise and well-structured: one-line purpose, then Args/Returns/Raises sections. Every sentence adds value. Front-loaded with clear purpose. No wasted words.

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

Completeness4/5

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

With 4 parameters (2 required), 100% schema coverage, and output schema present (though not shown), the description covers return format and errors. It is fairly complete, though could benefit from mentioning that transitions are typically irreversible and require appropriate permissions.

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

Parameters4/5

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

Schema coverage is 100% and description adds useful context beyond the schema: provides examples for fields (e.g., {'resolution': {'name': 'Fixed'}}), explains transition_id usage (pointing to jira_get_transitions), and clarifies optionality of fields and comment. Adds meaningful guidance.

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

Purpose5/5

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

The description clearly states the tool transitions a Jira issue to a new status, using specific verb+resource. It distinguishes from sibling tools like jira_update_issue (which updates fields) and jira_get_transitions (which lists available transitions).

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. It implies a prerequisite by mentioning using jira_get_transitions first, but lacks clear when-to-use or when-not-to-use guidance. Siblings include many similar Jira tools, but no comparative context is provided.

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

jira_update_issueB

Update an existing Jira issue including changing status, adding Epic links, updating fields, etc.

Args: ctx: The FastMCP context. issue_key: Jira issue key. fields: Dictionary of fields to update. additional_fields: Optional dictionary of additional fields. attachments: Optional JSON array string or comma-separated list of file paths.

Returns: JSON string representing the updated issue object and attachment results.

Raises: ValueError: If in read-only mode or Jira client unavailable, or invalid input.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesDictionary of fields to update. For 'assignee', provide a string identifier (email, name, or accountId). Example: `{'assignee': 'user@example.com', 'summary': 'New Summary'}`
issue_keyYesJira issue key (e.g., 'PROJ-123')
attachmentsNo(Optional) JSON string array or comma-separated list of file paths to attach to the issue. Example: '/path/to/file1.txt,/path/to/file2.txt' or ['/path/to/file1.txt','/path/to/file2.txt']
additional_fieldsNo(Optional) Dictionary of additional fields to update. Use this for custom fields or more complex updates.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden of behavioral disclosure. It adds value by mentioning ValueError when in read-only mode or if the Jira client is unavailable, and states the return format. However, it does not discuss permission requirements, reversibility, or side effects beyond mutation, leaving the behavioral profile only partially transparent.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Raises sections, and is reasonably concise. The Args section duplicates schema information somewhat but does not hurt readability. No filler or wasted sentences, though it could be tightened by removing redundant parameter listings.

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

Completeness3/5

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

The tool has an output schema and 100% schema coverage, which reduces the need for explaining return values. The description includes error conditions and return format, making it functionally complete. However, it lacks guidance on when to use this general update tool versus specialized siblings like jira_transition_issue and jira_link_to_epic, so contextual completeness is only adequate.

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

Parameters3/5

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

The input schema already has 100% coverage with detailed descriptions for each parameter (e.g., assignee format, attachment examples). The description merely lists parameter names without adding new semantic meaning, so the schema does the heavy lifting and the description adds no extra value.

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

Purpose4/5

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

The description clearly states the tool updates an existing Jira issue with a specific verb and resource, and lists example update types like changing status and adding Epic links. It distinguishes from create/delete/get, but does not explicitly differentiate from overlapping siblings like jira_transition_issue or jira_link_to_epic.

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

Usage Guidelines2/5

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

The description says what the tool does but provides no explicit guidance on when to use it versus alternatives such as jira_transition_issue or jira_link_to_epic. There are no exclusions, prerequisites, or preferred use cases, so an agent gets no selection help beyond the general 'update' scope.

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

jira_update_sprintC

Update jira sprint.

Args: ctx: The FastMCP context. sprint_id: The ID of the sprint. sprint_name: Optional new name. state: Optional new state (future|active|closed). start_date: Optional new start date. end_date: Optional new end date. goal: Optional new goal.

Returns: JSON string representing the updated sprint object or an error message.

Raises: ValueError: If in read-only mode or Jira client unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNo(Optional) New goal for the sprint
stateNo(Optional) New state for the sprint (future|active|closed)
end_dateNo(Optional) New end date for the sprint
sprint_idYesThe id of sprint (e.g., '10001')
start_dateNo(Optional) New start date for the sprint
sprint_nameNo(Optional) New name for the sprint

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose all behavioral traits. It mentions raising ValueError for read-only mode or client unavailability, but does not detail possible side effects (e.g., closing a sprint changes state, impacts on issues), permissions required, or whether the operation is reversible. This is insufficient for a mutation tool.

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

Conciseness3/5

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

The description is structured as a Python docstring with Args, Returns, Raises sections, which is organized. However, it is somewhat verbose, repeating parameter information already in the schema. The purpose statement is front-loaded, but the rest could be more concise given schema coverage.

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

Completeness2/5

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

This is a mutation tool with no annotations and an existing output schema (context signals indicate has_output_schema=true). The description does not explain what happens on success/failure beyond returning a JSON string, lacks information about idempotency, partial updates, or relationship to other sprint operations. The Raises section helps but is not enough for a complete picture.

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

Parameters3/5

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

The input schema already documents all 6 parameters with descriptions (100% coverage). The description merely lists the parameters without adding extra semantic detail (e.g., date format, valid state values beyond the enum hint, or constraints). Therefore, the description adds minimal value over the schema.

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

Purpose4/5

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

The description clearly states 'Update jira sprint', which is a specific verb and resource. It distinguishes the tool from siblings like jira_create_sprint, but does not explicitly contrast with other update tools, though the resource 'sprint' is distinct among siblings.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives (e.g., jira_create_sprint for creating, or other update tools). The description does not mention prerequisites, typical use cases, or when not to use this tool.

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. Dates show when Glama detected each change.

  1. 36 tool updatesv0.7.0
    • Addedbitbucket_add_pull_request_comment
    • Addedbitbucket_create_repository
    • Addedbitbucket_get_commit_builds
    • Addedbitbucket_get_commits
    • Addedbitbucket_get_default_branch
    • Addedbitbucket_get_pull_request_commits
    • Addedbitbucket_list_branches
    • Addedbitbucket_list_directory
    • Addedbitbucket_list_pull_requests
    • Addedbitbucket_list_workspaces_or_projects
    • Addedconfluence_add_comment
    • Addedconfluence_get_comments
    • Addedconfluence_get_page
    • Addedconfluence_search
    • Addedconfluence_search_user
    • Addedjira_add_comment
    • Addedjira_add_worklog
    • Addedjira_batch_create_issues
    • Addedjira_batch_create_versions
    • Addedjira_batch_get_changelogs
    • Addedjira_construct_upload_endpoint
    • Addedjira_create_issue_link
    • Addedjira_create_remote_issue_link
    • Addedjira_delete_issue
    • Addedjira_get_agile_boards
    • Addedjira_get_attachment_images
    • Addedjira_get_board_issues
    • Changedjira_get_issue1 field changed
      • changedInput schema / properties / fields / default
        Previous value: -"status,assignee,updated,description,versions,reporter,issuetype,summary,created,labels,priority,fixVersions"New value: +"reporter,issuetype,status,labels,created,summary,assignee,updated,versions,description,priority,fixVersions"
    • Addedjira_get_project_issues
    • Addedjira_get_sprint_issues
    • Addedjira_get_user_profile
    • Addedjira_jira_upload_attachment
    • Addedjira_search
    • Addedjira_search_fields
    • Addedjira_summarize_attachments
    • Addedjira_update_issue
  2. 31 tool updatesv0.6.2-rc.1
    • Removedbitbucket_add_pull_request_comment
    • Removedbitbucket_get_commits
    • Removedbitbucket_get_default_branch
    • Removedbitbucket_list_branches
    • Removedbitbucket_list_directory
    • Removedbitbucket_list_pull_requests
    • Removedbitbucket_list_workspaces_or_projects
    • Removedconfluence_add_comment
    • Removedconfluence_get_comments
    • Removedconfluence_get_page
    • Removedconfluence_search
    • Removedconfluence_search_user
    • Removedjira_add_comment
    • Removedjira_add_worklog
    • Removedjira_batch_create_issues
    • Removedjira_batch_create_versions
    • Removedjira_batch_get_changelogs
    • Removedjira_construct_upload_endpoint
    • Removedjira_create_issue_link
    • Removedjira_create_remote_issue_link
    • Removedjira_delete_issue
    • Removedjira_get_agile_boards
    • Removedjira_get_board_issues
    • Changedjira_get_issue1 field changed
      • changedInput schema / properties / fields / default
        Previous value: -"description,updated,reporter,status,summary,assignee,issuetype,priority,created,labels"New value: +"status,assignee,updated,description,versions,reporter,issuetype,summary,created,labels,priority,fixVersions"
    • Removedjira_get_project_issues
    • Removedjira_get_sprint_issues
    • Removedjira_get_user_profile
    • Removedjira_jira_upload_attachment
    • Removedjira_search
    • Removedjira_search_fields
    • Removedjira_update_issue
  3. 66 tool updatesv0.1.0
    • First observedbitbucket_add_pull_request_blocker_comment
    • First observedbitbucket_add_pull_request_comment
    • First observedbitbucket_add_pull_request_inline_comment
    • First observedbitbucket_analyze_pr_review_status
    • First observedbitbucket_create_branch
    • First observedbitbucket_create_pull_request
    • First observedbitbucket_get_commit_changes
    • First observedbitbucket_get_commits
    • First observedbitbucket_get_default_branch
    • First observedbitbucket_get_file_content
    • First observedbitbucket_get_pull_request
    • First observedbitbucket_get_pull_request_diff
    • First observedbitbucket_get_repository_info
    • First observedbitbucket_list_branches
    • First observedbitbucket_list_directory
    • First observedbitbucket_list_pull_requests
    • First observedbitbucket_list_repositories
    • First observedbitbucket_list_workspaces_or_projects
    • First observedbitbucket_pull_request_activities
    • First observedconfluence_add_comment
    • First observedconfluence_add_label
    • First observedconfluence_create_page
    • First observedconfluence_delete_page
    • First observedconfluence_get_comments
    • First observedconfluence_get_labels
    • First observedconfluence_get_page
    • First observedconfluence_get_page_children
    • First observedconfluence_search
    • First observedconfluence_search_user
    • First observedconfluence_update_page
    • First observedjira_add_comment
    • First observedjira_add_worklog
    • First observedjira_batch_create_issues
    • First observedjira_batch_create_versions
    • First observedjira_batch_get_changelogs
    • First observedjira_construct_download_endpoint
    • First observedjira_construct_upload_endpoint
    • First observedjira_create_issue
    • First observedjira_create_issue_link
    • First observedjira_create_remote_issue_link
    • First observedjira_create_sprint
    • First observedjira_create_version
    • First observedjira_delete_issue
    • First observedjira_download_attachments
    • First observedjira_get_agile_boards
    • First observedjira_get_all_projects
    • First observedjira_get_board_issues
    • First observedjira_get_issue
    • First observedjira_get_link_types
    • First observedjira_get_project_issues
    • First observedjira_get_project_versions
    • First observedjira_get_sprint_issues
    • First observedjira_get_sprints_from_board
    • First observedjira_get_transitions
    • First observedjira_get_user_profile
    • First observedjira_get_worklog
    • First observedjira_jira_upload_attachment
    • First observedjira_link_to_epic
    • First observedjira_list_cached_attachments
    • First observedjira_remove_issue_link
    • First observedjira_save_attachment_to_disk
    • First observedjira_search
    • First observedjira_search_fields
    • First observedjira_transition_issue
    • First observedjira_update_issue
    • First observedjira_update_sprint

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have distinct resource+action targets, but a few overlapping ones like jira_download_attachments vs jira_save_attachment_to_disk could cause confusion. Search/issue-listing tools (jira_search, jira_get_project_issues, jira_get_board_issues) also share similar behavior but differ in scope.

Naming Consistency4/5

All tools follow a product-prefix (jira_, confluence_, bitbucket_) with verb_noun structure, which is consistent. However, there are deviations like 'jira_jira_upload_attachment' (duplicated prefix), 'bitbucket_pull_request_activities' (missing verb), and mixed verb choices (get vs list) that prevent a perfect score.

Tool Count2/5

With 71 tools, the server is extremely large, exceeding even the 25+ threshold. While it covers three separate products (Jira, Confluence, Bitbucket), the sheer number makes it heavy and harder to navigate, and many tools are narrowly scoped.

Completeness4/5

Core workflows for Jira (issues, sprints, projects, attachments), Confluence (pages, comments, labels), and Bitbucket (repos, PRs, commits, file access) are well-covered. Obvious gaps like merging PRs, deleting branches/comments, or updating PRs are missing but can be worked around via other means.

Maintenance

ActivityMaintained
ResponsivenessSlow

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SharkyND/mcp-atlassian'

If you have feedback or need assistance with the MCP directory API, please join our Discord server