Skip to main content
Glama
ccampora

Jira Data Center MCP Server

by ccampora

Jira Data Center MCP Server

A production-ready Model Context Protocol (MCP) server that connects an on-premises Jira Data Center instance to MCP-compatible clients such as GitHub Copilot Agent mode, Claude Desktop, or any other MCP host.

Built with TypeScript, the official @modelcontextprotocol/sdk, Axios, and Zod.

Features

  • 🔐 Pluggable authentication: round-robin Personal Access Token rotation, a single PAT fallback, or Basic auth, selected automatically from environment variables via an AuthProvider abstraction.

  • 🧰 19 Jira MCP tools covering issue search, bulk retrieval, creation, combined updates, comments, labels, workflow transitions, project listing, issue linking, and remote links (linked Confluence pages).

  • 📚 Optional Confluence Data Center / Server support: when CONFLUENCE_BASE_URL is set, 8 additional tools for spaces, CQL search, page retrieval, comments, and page creation/update are registered. Confluence uses its own credentials or falls back to the legacy single Jira credential; it never uses the rotating PAT pool.

  • 🧠 create_jira_story_from_requirements: turns raw workshop notes / Fit-Gap analysis text into structured Jira Stories, Tasks, and Bugs — ideal for going straight from meeting notes to a Jira backlog.

  • ✅ Zod-validated tool inputs, typed Jira REST responses, and normalized error handling.

  • 📝 Leveled logging to stderr (safe for the stdio MCP transport).

  • 🌐 Optional Streamable HTTP transport for standalone container deployments.

Related MCP server: Jira MCP Server

Project Structure

/src
  server.ts                          # Entry point: wires config, auth, client, tools, and stdio transport
  jira-client.ts                     # Axios-based Jira REST API v2 client + error normalization
  auth.ts                            # AuthProvider abstraction, PAT rotation, and cooldown state
  config.ts                          # Env var loading & validation (Zod)
  logger.ts                          # Leveled stderr logger
  types.ts                           # Jira REST API response shapes
  confluence-client.ts               # Axios-based Confluence REST client + error normalization
  confluence-types.ts                # Confluence REST API response shapes
  tools/
    tool-helpers.ts                  # Shared CallToolResult helpers
    get-current-user.ts
    server-info.ts
    search-issues.ts
    get-issue.ts
    create-issue.ts
    add-comment.ts
    transition-issue.ts
    get-projects.ts
    get-transitions.ts               # bonus
    get-issue-comments.ts            # bonus
    get-issue-remote-links.ts        # bonus: linked Confluence pages / web links
    get-issue-link-types.ts          # bonus: available inward/outward link types
    create-issue-link.ts             # bonus: links two existing Jira issues
    execute-jql.ts                   # bonus
    create-story-from-requirements.ts# bonus: notes -> Jira backlog
    requirements-parser.ts           # heuristic notes parser used above
    index.ts                        # registers all tools
    confluence/                      # Confluence tools (registered only when enabled)
      get-current-user.ts
      get-spaces.ts
      search.ts
      get-page.ts
      get-page-by-title.ts
      get-page-comments.ts
      create-page.ts
      update-page.ts
      index.ts

Prerequisites

  • Node.js >= 18

  • A Jira Data Center instance reachable from this machine, with either:

    • one or more Personal Access Tokens (Jira DC 8.14+, Profile > Personal Access Tokens), or

    • a valid username + password

Setup

npm install
cp .env.example .env   # then edit .env with your Jira URL + credentials
npm run build
npm start

For local iteration without a build step:

npm run dev

Environment Variables

Variable

Required

Description

JIRA_BASE_URL

Yes

Base URL of your Jira Data Center instance, e.g. https://jira.company.com

JIRA_PATS

One of PAT/Basic

JSON array of PAT strings. Requests use round-robin selection with independent 429 cooldowns.

JIRA_PAT

One of PAT/Basic

Single Personal Access Token used when JIRA_PATS is omitted.

JIRA_USERNAME

One of PAT/Basic

Username for Basic auth (requires JIRA_PASSWORD)

JIRA_PASSWORD

One of PAT/Basic

Password for Basic auth (requires JIRA_USERNAME)

JIRA_TIMEOUT_MS

No (default 15000)

HTTP request timeout in milliseconds (shared with Confluence)

JIRA_TLS_REJECT_UNAUTHORIZED

No (default true)

Set to false only for internal CAs without a valid chain (shared with Confluence)

CONFLUENCE_BASE_URL

No

Base URL of your Confluence Data Center instance, e.g. https://confluence.company.com. Enables the Confluence tools when set.

CONFLUENCE_PAT

No

Confluence Personal Access Token. Falls back to JIRA_PAT if omitted.

CONFLUENCE_USERNAME

No

Username for Confluence Basic auth (requires CONFLUENCE_PASSWORD). Falls back to JIRA_USERNAME.

CONFLUENCE_PASSWORD

No

Password for Confluence Basic auth (requires CONFLUENCE_USERNAME). Falls back to JIRA_PASSWORD.

LOG_LEVEL

No (default info)

debug | info | warn | error

MCP_TRANSPORT

No (default stdio)

Set to http to expose the Streamable HTTP endpoint at /mcp

PORT

No (default 8787)

Listen port when MCP_TRANSPORT=http

JIRA_PATS takes precedence over the backward-compatible JIRA_PAT; otherwise both JIRA_USERNAME and JIRA_PASSWORD must be set. JIRA_PATS must be a valid JSON array containing at least one non-empty string. The server refuses to start without valid authentication.

When Jira responds with HTTP 429, only the PAT used for that request enters cooldown. The server honors Retry-After, immediately tries another available PAT, and waits for the earliest cooldown only when all PATs are cooling down. Rate-limit retries are bounded. Existing behavior for network and 5xx failures is unchanged.

Confluence is optional: set CONFLUENCE_BASE_URL to register the Confluence tools. It does not use the rotating JIRA_PATS pool. Configure CONFLUENCE_PAT explicitly, or omit it to reuse only the legacy single JIRA_PAT (or Jira username/password).

HTTP Transport

The default transport remains stdio, so node dist/server.js and existing MCP host configurations continue to work unchanged. To run as a standalone Streamable HTTP service, set:

MCP_TRANSPORT=http PORT=8787 node dist/server.js

The MCP endpoint is http://localhost:8787/mcp. Container health probes can use GET http://localhost:8787/healthz, which returns 200 {"status":"ok"} without contacting Jira.

For shared deployments, callers can override the Jira connection on every request with these headers:

Header

Description

X-Jira-Base-Url

Jira Data Center base URL; falls back to JIRA_BASE_URL

X-Jira-Pat

Jira Personal Access Token; falls back to JIRA_PAT

Both headers must be sent on each MCP HTTP request when environment fallbacks are not configured. Treat X-Jira-Pat as a secret and terminate TLS before the container endpoint. HTTP mode can start without Jira environment credentials so health probes remain available; an MCP request without valid header or environment credentials receives a configuration error.

Example initialization request:

curl http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "X-Jira-Base-Url: https://jira.company.com" \
  -H "X-Jira-Pat: $JIRA_PAT" \
  --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'

MCP Tools

Tool

REST Call

Description

get_current_user

GET /rest/api/2/myself

username, displayName, email, groups

server_info

GET /rest/api/2/serverInfo

Jira version, deployment type, build number

search_issues

GET /rest/api/2/search

Runs JQL, returns key/summary/status/assignee/reporter/created/updated

get_issue

GET /rest/api/2/issue/{key}

Full issue details incl. comments, labels, assignee

get_issues_bulk

POST /rest/api/2/search

Retrieves up to 1000 issue keys in one request with configurable fields

create_issue

POST /rest/api/2/issue

Creates an issue with optional labels and option-backed custom fields, then returns its key

create_issues_bulk

POST /rest/api/2/issue/bulk

Creates issues with optional option-backed custom fields in native Jira batches of up to 50

add_comment

POST /rest/api/2/issue/{key}/comment

Adds a comment

add_issue_labels

PUT /rest/api/2/issue/{key}

Adds labels without removing existing labels

update_issue

PUT /rest/api/2/issue/{key}

Updates fields, labels, and option-backed custom fields in one request

update_issues_bulk

PUT /rest/api/2/issue/{key} (parallel)

Combines fields, labels, and option-backed custom fields into one request per issue, with concurrency limited to 5

transition_issue

POST /rest/api/2/issue/{key}/transitions

Moves an issue through its workflow

get_projects

GET /rest/api/2/project

Lists visible projects

get_transitions (bonus)

GET /rest/api/2/issue/{key}/transitions

Lists valid transitions for an issue

get_issue_comments (bonus)

GET /rest/api/2/issue/{key}/comment

Lists all comments on an issue

get_issue_remote_links (bonus)

GET /rest/api/2/issue/{key}/remotelink

Lists an issue's remote links, including linked Confluence pages

get_issue_link_types (bonus)

GET /rest/api/2/issueLinkType

Lists valid issue link types and their inward/outward wording

create_issue_link (bonus)

POST /rest/api/2/issueLink

Links two existing issues, with an optional comment

execute_jql (bonus)

GET /rest/api/2/search

Arbitrary JQL with a configurable field set

create_jira_story_from_requirements (bonus)

POST /rest/api/2/issue/bulk

Parses workshop notes / Fit-Gap text and creates issues in batches of up to 50

Jira Data Center REST v2 has native bulk creation and bulk search, but no public bulk-update endpoint. update_issues_bulk therefore reduces MCP round trips and combines multiple changes to each issue, while Jira still receives one PUT request per issue.

Option-backed custom fields

The create_issue, create_issues_bulk, update_issue, and update_issues_bulk tools accept customFieldOptions. This lets callers provide deployment-specific Jira custom field keys and option IDs at call time instead of hardcoding them in the server. Each field key must use Jira's customfield_<number> format.

For example, create a Test issue whose required customfield_12402 option is 22300:

{
  "projectKey": "NFS",
  "issueType": "Test",
  "summary": "Test summary",
  "customFieldOptions": [
    {
      "fieldKey": "customfield_12402",
      "optionId": "22300"
    }
  ]
}

For bulk creation, include customFieldOptions on each issue that needs them:

{
  "issues": [
    {
      "projectKey": "NFS",
      "issueType": "Test",
      "summary": "First test",
      "customFieldOptions": [
        {
          "fieldKey": "customfield_12402",
          "optionId": "22300"
        }
      ]
    }
  ]
}

The same structure can update an existing issue:

{
  "issueKey": "NFS-123",
  "customFieldOptions": [
    {
      "fieldKey": "customfield_12402",
      "optionId": "22300"
    }
  ]
}

For update_issues_bulk, include that structure on each item in updates:

{
  "updates": [
    {
      "issueKey": "NFS-123",
      "customFieldOptions": [
        {
          "fieldKey": "customfield_12402",
          "optionId": "22300"
        }
      ]
    }
  ]
}

Confluence Tools (enabled when CONFLUENCE_BASE_URL is set)

Tool

REST Call

Description

confluence_get_current_user

GET /rest/api/user/current

Current Confluence user (username, key, displayName)

confluence_get_spaces

GET /rest/api/space

Lists visible spaces

confluence_search

GET /rest/api/content/search

Runs a CQL query, returns matching content

confluence_get_page

GET /rest/api/content/{id}

Full page by ID. format: "storage" (raw source, default) or "view" (server-rendered HTML with macros resolved)

confluence_get_page_by_title

GET /rest/api/content?spaceKey=&title=

Finds a page by exact title within a space

confluence_get_page_comments

GET /rest/api/content/{id}/child/comment

Lists comments on a page

confluence_create_page

POST /rest/api/content

Creates a page from Confluence storage-format XHTML, optionally under a parent page

confluence_update_page

PUT /rest/api/content/{id}

Replaces a page title and full storage-format XHTML body using a new version number

Confluence page bodies use storage-format XHTML, not Markdown. Before calling confluence_update_page, fetch the page with confluence_get_page, then pass versionNumber as the current version.number + 1; updates replace the complete body.

Accessing Confluence pages linked from a Jira issue

Linked Confluence pages are not part of an issue's fields — Jira Data Center stores them as remote links. To go from an issue to its Confluence content:

  1. Call get_issue_remote_links with the issue key to list linked pages. Each entry's url looks like .../pages/viewpage.action?pageId=<ID>.

  2. Extract the numeric pageId from that URL.

  3. Call confluence_get_page with that pageId and format: "view" for readable content (or "storage" for the raw source).

Alternatively, run confluence_search with a CQL query like text ~ "<ISSUE-KEY>" to find any page that mentions the issue. The get_issue tool also returns a confluenceAccess hint pointing agents at this workflow.

create_jira_story_from_requirements details

Two ways to use it:

  1. Automatic parsing — pass raw notes text. The built-in heuristic parser detects:

    • Explicit tags: lines starting with Story:, Task:, or Bug:

    • User-story phrasing: As a <role>, I want <goal> so that <benefit> → Story

    • Bullet / numbered list lines → Task

    • Falls back to a single Task if nothing else matches, so non-empty notes always produce at least one item.

  2. Pre-structured input — pass an items array ({ type, summary, description?, acceptanceCriteria? }) when the calling agent has already analyzed the notes itself. items always takes precedence over notes.

Set dryRun: true to preview the parsed/would-create items without touching Jira — recommended before bulk-creating from a large set of notes.

Issue creation is done per-item with Promise.allSettled, so partial failures (e.g. one bad issue type) don't block the rest; the response reports created and failed separately.

VS Code MCP Configuration

Add to your VS Code MCP configuration (e.g. .vscode/mcp.json in a workspace, or the user-level MCP settings):

{
  "servers": {
    "jira-datacenter": {
      "type": "stdio",
      "command": "node",
      "args": ["${workspaceFolder}/dist/server.js"],
      "env": {
        "JIRA_BASE_URL": "https://jira.company.com",
        "JIRA_PATS": "[\"${input:jiraPat1}\",\"${input:jiraPat2}\",\"${input:jiraPat3}\"]"
      }
    }
  },
  "inputs": [
    {
      "id": "jiraPat1",
      "type": "promptString",
      "description": "Jira Personal Access Token 1",
      "password": true
    },
    {
      "id": "jiraPat2",
      "type": "promptString",
      "description": "Jira Personal Access Token 2",
      "password": true
    },
    {
      "id": "jiraPat3",
      "type": "promptString",
      "description": "Jira Personal Access Token 3",
      "password": true
    }
  ]
}

Alternatively, point command at your global install (jira-mcp-server) if you npm link or npm install -g this package, or simply rely on a .env file next to dist/server.js and omit env entirely.

Example Prompts

Once connected in Copilot Agent mode:

  • "Use server_info to confirm we're talking to the right Jira instance, then get_current_user to confirm my identity."

  • "Search for all open bugs in project ABC assigned to me using search_issues."

  • "Get the full details of ABC-123, including its comments."

  • "Create a Task in project ABC titled 'Configure SSO for staging' with a short description."

  • "Add a comment to ABC-123 saying the fix has been deployed to staging."

  • "Show me the available transitions for ABC-123, then transition it to Done."

  • "List the Jira issue link types, then link ABC-123 as blocking ABC-456."

  • "List all projects I have access to."

  • "Run this JQL and show me just the priority and fixVersions fields: project = ABC AND status = 'In Progress'."

  • "Here are my Fit/Gap workshop notes: [paste notes]. Preview the Jira Stories/Tasks/Bugs you'd create in project ABC with dryRun, then create them for real."

  • "Fetch Confluence page 12345, then update it with this full storage-format XHTML body using the next version number."

Error Handling

All Jira REST errors (4xx/5xx, network failures) are caught in jira-client.ts, mapped to a JiraApiError carrying the HTTP status code and Jira's own errorMessages/errors payload, and surfaced to the MCP client as a tool error result (isError: true) with a human-readable message — never a raw stack trace.

Security Notes

  • Credentials are only ever read from environment variables — never hardcoded or logged.

  • If a PAT has been exposed, revoke it immediately and replace it with a newly generated PAT. Do not reuse the exposed value in JIRA_PATS.

  • Prefer a Personal Access Token over Basic auth; PATs can be scoped and revoked independently of your account password.

  • Set JIRA_TLS_REJECT_UNAUTHORIZED=false only as a last resort for internal CAs; prefer installing your corporate CA certificate via NODE_EXTRA_CA_CERTS instead.

  • The optional HTTP transport listens on all interfaces by default. Put it behind TLS and appropriate network access controls; treat X-Jira-Pat as a secret.

  • Run npm audit periodically and keep the MCP SDK and HTTP transport dependencies current.

License

MIT

Available Tools

13 tools
add_commentAdd CommentA

Adds a comment to an issue (POST /rest/api/2/issue/{key}/comment).

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesComment body text
issueKeyYesIssue key, e.g. 'ABC-123'

TDQS

A3.5/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 discloses that this is a POST (write) operation via the endpoint, but does not mention authentication requirements, rate limits, side effects, or return values. This is a minimal addition beyond the fact that it adds a comment.

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

Conciseness5/5

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

The description is a single concise sentence that includes the relevant endpoint. It is front-loaded with the action and resource, contains no unnecessary words, and is easy to parse at a glance.

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 low complexity (2 simple params, no output schema), the description covers the core purpose but lacks any contextual details such as expected response format, error conditions, or confirmation of success. This makes it minimally viable but not fully complete for an agent that might need to handle invocation outcomes.

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 description coverage is 100%, with both 'issueKey' and 'comment' clearly documented. The description adds no additional meaning beyond the schema, so it does not improve parameter understanding beyond what the schema already provides.

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 ('Adds') and resource ('a comment to an issue'), and includes the REST endpoint for clarity. This clearly distinguishes it from sibling tools like get_issue_comments, which retrieves comments, and create_issue, which creates 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 implies usage through the verb 'Adds' but does not explicitly state when to use this tool versus alternatives. It lacks any mention of exclusions, prerequisites, or when to prefer get_issue_comments for reading comments, so guidance is only implicit.

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

create_issueCreate IssueB

Creates a new Jira issue (POST /rest/api/2/issue) and returns the created issue key.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesIssue summary/title
issueTypeYesIssue type name, e.g. 'Story', 'Task', 'Bug'
projectKeyYesProject key, e.g. 'ABC'
descriptionNoIssue description

TDQS

B3.1/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 for behavioral disclosure. It mentions the POST endpoint and the returned key, but does not disclose any permission requirements, side effects, failure behavior, or irreversibility of the creation, which is a significant gap for a mutating operation.

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

Conciseness5/5

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

The description is a single, well-formed sentence that includes the core action, the endpoint, and the return value. It contains no unnecessary words or repetition, making it maximally concise and front-loaded.

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 is relatively simple with documented parameters and a clear return value, but the description omits contextual guidance such as when to prefer this tool over the specialized create_jira_story_from_requirements. It also lacks any mention of potential validation rules or error conditions, leaving the description only minimally complete for 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?

The input schema provides descriptions for all four parameters, covering 100% of parameter semantics. The description adds no additional parameter-level meaning beyond the schema, so it meets the baseline of 3 but does not exceed it.

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 creates a new Jira issue via a specific endpoint and returns the issue key. However, it does not differentiate from the sibling tool create_jira_story_from_requirements, which also creates Jira issues, so it lacks explicit sibling differentiation.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It does not mention the existence of create_jira_story_from_requirements or any conditions that would favor one over the other, leaving the agent to infer usage.

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

create_jira_story_from_requirementsCreate Jira Backlog Items From RequirementsA

Turns workshop notes or Fit/Gap analysis text into properly structured Jira Stories, Tasks, and Bugs, then creates them in the given project. If items is provided, those pre-structured items are created as-is (recommended when the calling agent has already analyzed the notes). Otherwise, notes is parsed heuristically: lines tagged 'Story:'/'Task:'/'Bug:', 'As a ... I want ... so that ...' phrasing (-> Story), and bullet/numbered lines (-> Task) are detected automatically. Use dryRun to preview extracted items before creating anything in Jira.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoOptional pre-structured backlog items; overrides automatic parsing of `notes`
notesNoRaw workshop notes / Fit-Gap analysis text to auto-parse into backlog items
dryRunNoIf true, only return the parsed/would-create items without calling Jira
projectKeyYesTarget project key, e.g. 'ABC'

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 and does well by disclosing the creation behavior, heuristic parsing rules (tagged lines, 'As a...' phrasing, bullets), and dryRun safety. It does not explicitly mention permissions or reversibility, but the mutation and preview behavior are well explained.

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 appropriately sized at about three sentences, front-loaded with the primary purpose, and every sentence earns its place by explaining modes, parsing rules, and dryRun. It is concise yet thorough.

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 complexity and lack of output schema, the description covers the main workflow, parsing heuristics, and preview capability. It does not explicitly state the return value (e.g., created issues vs. parsed items), but the overall operation is well enough specified for an agent to use it effectively.

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 the relationship between `items` and `notes` (items override parsing and are recommended for pre-analyzed content) and clarifies that `dryRun` previews without creating. This adds semantic meaning beyond the schema's individual field 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 uses a specific verb 'Turns... into... and creates' with a clear resource (Jira Stories, Tasks, Bugs) and target project. It clearly distinguishes itself from sibling tools like create_issue by focusing on parsing requirements text into structured backlog items.

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 usage context: use `items` when pre-structured, use `notes` for automatic parsing, and use `dryRun` to preview. While it does not explicitly contrast with alternatives like `create_issue`, the mode-selection guidance is strong and practical.

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

execute_jqlExecute Arbitrary JQLA

Runs an arbitrary JQL query (GET /rest/api/2/search) and returns raw issue data for the requested fields. Use this for ad-hoc reporting when search_issues' fixed field set isn't enough.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYesJQL query string
fieldsNoJira field names to return, e.g. ['summary','status','priority']
maxResultsNoDefault 50

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description discloses the HTTP method (GET) and the raw-data output, which conveys read-only behavior. It does not mention pagination or rate limits, but the schema documents maxResults and the description's emphasis on arbitrary JQL hints at potential complexity. Overall, it adds useful 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 only two sentences, with no filler. The first sentence states the action and output; the second provides usage context. All words contribute to understanding.

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 is complete enough for a read-only query tool: it specifies the purpose, the alternative, and the output type ('raw issue data'). The absence of an output schema is mitigated by this output description. It does not detail error scenarios or pagination, but these are minor for a well-scoped tool with a fully described schema.

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

Parameters3/5

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

Schema coverage is 100%, so the description only needs to add minimal context. It aligns 'requested fields' with the fields parameter and 'arbitrary JQL' with the jql parameter, but does not explain default behavior or parameter interactions. The schema itself already provides parameter-level descriptions, so the description adds no critical new semantics.

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 runs arbitrary JQL queries via the Jira REST API and returns raw issue data. It explicitly contrasts with the sibling search_issues by mentioning its fixed field set, making the scope and resource unambiguous.

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?

It gives explicit guidance: 'Use this for ad-hoc reporting when search_issues' fixed field set isn't enough.' This names the alternative and specifies the condition for choosing this tool, which 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.

get_current_userGet Current UserA

Returns the Jira user identity associated with the configured credentials (GET /rest/api/2/myself).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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 full behavioral burden. It reveals read-only intent via the GET endpoint and links to configured credentials, but does not explicitly state auth requirements, possible errors (e.g., invalid credentials), or output structure. It provides some context but omits failure modes and side-effect absence.

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

Conciseness5/5

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

The description is a single sentence that immediately states the tool's purpose, followed by the endpoint in parentheses. It is front-loaded, concise, and contains no unnecessary words.

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

Completeness4/5

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

For a zero-parameter, read-only identity tool, the description gives enough context for an agent to know when and why to call it. Although there is no output schema or annotation, the description's clarity mitigates the need for extensive detail. However, it could specify the returned fields or error scenarios for full completeness.

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 empty schema provides complete coverage, and the description need not explain any parameter semantics. Nothing more is required.

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 identifies the tool's function: returning the Jira user identity associated with the configured credentials. It uses a specific verb ('Returns') and resource ('user identity'), and includes the REST endpoint for precision. This distinguishes it from sibling tools, which focus on issues, projects, or comments.

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 intended usage is clear: call this tool to retrieve the current user's identity. While it does not explicitly contrast with alternatives, no sibling tool serves this purpose, so the context is sufficient without exclusions or when-not guidance.

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

get_issueGet IssueA

Fetches full details for a single issue (GET /rest/api/2/issue/{key}): summary, description, status, comments, labels, and assignee.

Confluence access: linked Confluence pages are NOT part of an issue's fields and are never returned here. In Jira Data Center they are stored as REMOTE LINKS. To read the Confluence content associated with an issue, an agent should:

  1. Call get_issue_remote_links with the same issueKey to list linked Confluence pages (each entry has a url like .../pages/viewpage.action?pageId=).

  2. Extract the numeric pageId from that url (the pageId= query parameter).

  3. Call confluence_get_page with that pageId and format: "view" to get readable, server-rendered content (use format: "storage" for the raw source). These Confluence tools are available when CONFLUENCE_BASE_URL is configured. Alternatively, use confluence_search with a CQL query such as text ~ "<ISSUE-KEY>" to find pages that mention the issue.

ParametersJSON Schema
NameRequiredDescriptionDefault
issueKeyYesIssue key, e.g. 'ABC-123'

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility. It discloses a non-obvious limitation: linked Confluence pages are never included, and in Jira Data Center they appear as remote links. It also notes the dependency on CONFLUENCE_BASE_URL for certain tools. However, it does not specify response format or error behavior, which are minor gaps for a single-issue fetch.

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 average, but every sentence serves a purpose: stating the action, listing return fields, and giving a detailed cross-tool workflow for Confluence. It is well-structured with a clear 'Confluence access' section. Slightly verbose but justified.

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 simplicity (one parameter, no output schema), the description is exceptionally complete. It explains the tool's scope, its relationship to other tools, and provides an end-to-end alternative workflow. It fully covers the context an agent needs to use 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?

The schema already fully covers the single parameter (issueKey) with an example. The description adds usage context by referring to the issueKey in the workflow, but no extra parameter semantics beyond what the schema provides. Baseline 3 for 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?

The description clearly identifies the verb ('fetches'), the resource ('full details for a single issue'), and the API endpoint. It lists specific fields returned, distinguishing it from sibling tools like get_issue_comments or search_issues.

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?

Provides explicit guidance on when NOT to use this tool (Confluence content), and exactly when to use alternative tools (get_issue_remote_links, confluence_get_page, and confluence_search). The 'Confluence access' section offers a step-by-step workflow, covering both reading remote links and alternative search.

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

get_issue_commentsGet Issue CommentsA

Lists all comments on an issue (GET /rest/api/2/issue/{key}/comment).

ParametersJSON Schema
NameRequiredDescriptionDefault
issueKeyYesIssue key, e.g. 'ABC-123'

TDQS

A3.5/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 simply states 'Lists all comments' and the endpoint, without explaining pagination behavior, whether the result is a complete list or as-yet-unloaded pages, or any authentication/permission requirements. The GET endpoint implies read-only, but key behavioral traits are 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 a single sentence that immediately states the action and resource, with the REST endpoint in parentheses for precision. There is no redundant text or padding; every element earns its place, making it highly concise 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?

Given the tool's simplicity (one parameter, no annotations, no output schema), the description provides a minimal but workable overview. It fails to mention the structure of the returned comments (e.g., comment bodies, authors, timestamps) or any pagination limits, which are gaps an agent might need. This is adequate for a basic tool but not fully 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 sole parameter issueKey is already clearly described in the schema with an example ('ABC-123'). The description's endpoint reference including {key} adds no additional semantic meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description 'Lists all comments on an issue' uses a specific verb ('Lists') and resource ('comments on an issue'), making the tool's purpose immediately clear. The REST endpoint reference further reinforces the named resource and distinguishes it from siblings like add_comment (which creates) and get_issue (which retrieves issue 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 the tool is for retrieving comments when needed, but provides no explicit when-to-use guidance, exclusions, or comparisons to alternatives. The presence of sibling tools like add_comment and get_issue is not leveraged to clarify use cases, so it remains at the 'implied usage' level.

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

get_projectsGet ProjectsA

Lists all Jira projects visible to the authenticated user (GET /rest/api/2/project).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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 operation is a GET (read-only) and that it is scoped to visibility. However, it does not mention pagination, output format, or potential auth failures, which are minor gaps for a simple list operation.

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

Conciseness5/5

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

The description is a single, concise sentence that fronts the action and resource. No redundant wording; every element 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?

For a simple parameterless tool with no output schema, the description provides enough context: it names the endpoint and the result set. It could elaborate on the return structure, but 'Lists all Jira projects' adequately implies a list of project objects.

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 has zero parameters, so the baseline of 4 applies. The description adds no parameter-specific information because none exist, which 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 ('Lists'), the resource ('Jira projects'), and the scope ('visible to the authenticated user'). It is distinct from sibling tools which focus on issues, comments, and 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 conveys clear usage context: use it to get all projects the user can see. It does not explicitly mention when not to use it or name alternatives, but the specificity makes the appropriate scenario obvious.

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

get_transitionsGet Available TransitionsA

Lists the workflow transitions currently available for an issue (GET /rest/api/2/issue/{key}/transitions).

ParametersJSON Schema
NameRequiredDescriptionDefault
issueKeyYesIssue key, e.g. 'ABC-123'

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It adds a small nuance with 'currently available,' indicating dynamic results based on issue status, but does not state read-only nature, permissions, or return format. Lacks the context needed for an agent to understand side effects or prerequisites.

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

Conciseness5/5

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

A single, concise sentence that front-loads the purpose and includes the API endpoint. Every word earns its place, with no filler or redundancy.

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 low-complexity tool with one parameter and no output schema, the description is minimally adequate. However, it does not explain what the returned transitions contain or how to use them with the sibling tool 'transition_issue', which would improve completeness for an agent.

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

Parameters3/5

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

Schema coverage is 100% as the only parameter 'issueKey' has a clear description and example. The description adds no extra meaning beyond the schema, so baseline of 3 is appropriate per the rubric.

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 workflow transitions for an issue, with a specific verb ('Lists') and resource ('workflow transitions... for an issue'). It distinguishes from the sibling tool 'transition_issue' by focusing on retrieving available transitions rather than performing one.

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 in a workflow context but does not explicitly state when to use this tool versus alternatives like 'transition_issue' or 'get_issue'. No exclusions or alternative scenarios are mentioned, leaving the agent to infer from the title and sibling tool names.

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

search_issuesSearch IssuesC

Runs a JQL query and returns matching issues (GET /rest/api/2/search) with key, summary, status, assignee, reporter, created, and updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYesJQL query string, e.g. 'project = ABC AND status = Open'
maxResultsNoMaximum number of issues to return (default 50)

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 disclose behavioral traits. It mentions the GET endpoint and returned fields, but does not mention pagination, default result limits, or error behavior. The read-only nature is only implied by the HTTP method, not explicit.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that immediately states the action, includes the endpoint, and lists return fields with no extraneous words.

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?

With no output schema and no annotations, the description should more fully describe behavior. It lists returned fields but omits pagination details and the effect of maxResults, and it does not clarify how search_issues differs from execute_jql. This incompleteness could cause incorrect usage.

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 for jql and maxResults, so the baseline is 3. The description adds no additional parameter meaning, only stating that it runs the query without elaborating on the parameters.

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 runs a JQL query and returns matching issues, with the specific REST endpoint and a list of returned fields. This is a specific verb+resource, but it does not explicitly differentiate from the sibling tool execute_jql, which may also run JQL.

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 search_issues versus alternatives like execute_jql. The description only states what it does, not the context or exclusions.

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

server_infoJira Server InfoA

Returns Jira Data Center deployment info: version, deployment type, and build number (GET /rest/api/2/serverInfo).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/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 the HTTP method (GET), the endpoint, and that it returns data, implying a read-only operation. However, it does not mention authentication requirements, potential errors, or that the endpoint is specifically for Jira Data Center (as opposed to Cloud). These are useful behavioral nuances but the description partially covers them by naming 'Jira Data Center'.

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

Conciseness5/5

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

A single, front-loaded sentence that provides the purpose, key return fields, and the endpoint. No wasted words, and the structure is immediately scannable. The API path is included as a useful reference without burdening the text.

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, read-only tool with no output schema, the description is sufficiently complete. It lists exactly what data will be returned (version, deployment type, build number), which allows an agent to decide if this tool is relevant. No additional behavioral details are necessary 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, and the input schema is empty. The baseline for 0 params is 4, and there is nothing for the description to add beyond the schema. The description correctly does not invent parameters or add unnecessary detail.

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 returns Jira Data Center deployment info (version, deployment type, build number) and specifies the exact GET endpoint. This verb+resource combination is specific and distinguishes it from sibling tools focused on issues, projects, or users.

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?

Although there are no explicit 'when to use' instructions, the description provides clear context that this is the tool for retrieving server deployment information. Among the sibling tools, none serve the same purpose, so implicit usage is strong. Lacks explicit exclusions or alternative guidance, but this is a minor gap for such a simple read-only tool.

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

transition_issueTransition IssueA

Moves an issue through its workflow (POST /rest/api/2/issue/{key}/transitions). Use get_transitions first to discover valid transitionId values.

ParametersJSON Schema
NameRequiredDescriptionDefault
issueKeyYesIssue key, e.g. 'ABC-123'
transitionIdYesTransition ID (see get_transitions)

TDQS

A4.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 reveals that this is a mutating POST operation ('Moves') and highlights the need for valid transition IDs, but it does not mention permissions, reversibility, side effects, or potential extra fields required by some transitions. This is a moderate level of transparency, missing some context that would be helpful for a write operation.

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 two sentences, front-loaded with the core action, includes the endpoint, and finishes with a valuable prerequisite. Every word earns its place with no redundancy or filler.

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 tool with only 2 parameters and no output schema, the description provides the essential usage steps: move the issue and consult get_transitions for the ID. It lacks details on potential error conditions or required transition fields, but given the simplicity and the schema coverage, it is largely 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 provides descriptions for both parameters with 100% coverage, so the description adds limited new meaning. It reinforces the transitionId source by telling the agent to use get_transitions, which is helpful but not essential given the schema's 'see get_transitions' note. This meets the baseline but does not exceed it.

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 ('Moves') and identifies a clear resource ('issue through its workflow'), making the tool's purpose unambiguous. It also distinguishes itself from sibling tools like get_transitions by explicitly referencing it for discovering transition IDs, and includes the API endpoint for additional clarity.

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 instructs to use get_transitions first to discover valid transitionId values, providing a clear prerequisite and guiding the agent on when to use this tool relative to a sibling. This effectively tells the agent the sequence of operations and implies the alternative for obtaining transition IDs.

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

Tool Schema Changelog

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

  1. 13 tool updatesv1.0.0
    • First observedadd_comment
    • First observedcreate_issue
    • First observedcreate_jira_story_from_requirements
    • First observedexecute_jql
    • First observedget_current_user
    • First observedget_issue
    • First observedget_issue_comments
    • First observedget_issue_remote_links
    • First observedget_projects
    • First observedget_transitions
    • First observedsearch_issues
    • First observedserver_info
    • First observedtransition_issue

TDQS

A3.6/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct resources and actions, such as issue retrieval, comment management, and workflow transitions. However, search_issues and execute_jql both run JQL queries with only a difference in field selection, and create_jira_story_from_requirements overlaps with create_issue for issue creation, requiring careful reading of descriptions to choose correctly.

Naming Consistency4/5

Names generally follow a get_/create_/add_/transition_ verb-noun pattern, making the set predictable. Minor deviations include server_info (lacking the 'get_' prefix) and transition_issue (using the verb 'transition' rather than a noun like 'issue_transition'), but these are still clear and do not confuse the overall convention.

Tool Count5/5

With 13 tools, the server covers a broad range of Jira operations without being overwhelming. Each tool addresses a meaningful capability, from basic issue CRUD-like operations to search, transitions, remote links, and a novel requirements-to-story transformer, fitting well within the typical 3-15 range.

Completeness3/5

The tool set lacks update_issue and delete_issue, which are fundamental for full issue lifecycle management. While it provides create, read, transition, comments, search, and project listing, an agent cannot modify an existing issue's fields or remove it, leaving a notable gap for many Jira workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables interaction with Jira to fetch issues by key and perform JQL searches. It provides a foundation for integrating multiple work systems, with planned support for Slack and GitHub.
    408 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for integrating with Jira Server instances, enabling natural language interactions to create, update, search, and manage issues and comments.
    60 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for interacting with Jira Cloud instances. Enables issue management, JQL queries, project and sprint management, and batch operations via natural language interfaces.
    195 npm
    4
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Jira Server/Data Center, enabling issue management, comments, attachments, JQL search, and more through natural language.
    -