Skip to main content
Glama

jc-mcp

Token-efficient Jira & Confluence MCP server. Returns lean, flat responses that minimize token consumption while preserving the information LLM agents need.

Quick Start

  1. Get an API token from id.atlassian.com

  2. Add the server to your MCP client:

claude mcp add --scope user jc-mcp \
  -e ATLASSIAN_URL=https://yoursite.atlassian.net \
  -e ATLASSIAN_EMAIL=you@example.com \
  -e ATLASSIAN_TOKEN=your-api-token \
  -- npx -y @maphnet/jc-mcp

The --scope user flag makes the server available across all your projects. Omit it to add only for the current project. CloudId is auto-discovered from your site URL.

Related MCP server: Jira Cloud MCP Server

Updating

npx caches packages per package spec — a cache entry created for @maphnet/jc-mcp (no version) is not refreshed by running npx @maphnet/jc-mcp@latest; that creates a separate entry. To actually update a server configured as npx -y @maphnet/jc-mcp, clear the stale entry:

# find and remove the cached copy used by the un-versioned spec
for d in ~/.npm/_npx/*/node_modules/@maphnet/jc-mcp; do
  echo "$d: $(node -p "require('$d/package.json').version")"
done
rm -rf ~/.npm/_npx/<hash-of-old-version>

Alternatively, configure the server as npx -y @maphnet/jc-mcp@latest so every start resolves the newest release.

If you installed globally (npm i -g @maphnet/jc-mcp, command jc-mcp), update with:

npm i -g @maphnet/jc-mcp@latest

Then restart your MCP client (Claude Code, Cursor, etc.) to pick up the new version.

Tools

Tool

Description

Returns

jcm_getIssue

Read a Jira issue

Flat fields (incl. reporter {displayName, accountId} or null) + markdown description + attachments + updated/updatedJql; comments carry id, authorAccountId, updated

jcm_getIssueChangelog

Field-change history, oldest first, optionally after since

{entries: [{id, authorAccountId, author, created, items: [{field, from, to}]}], truncated}

jcm_getAttachmentDownloadLink

Resolve a temporary attachment download URL on demand

{attachmentId, filename, url, temporary: true}

jcm_getTransitions

Available workflow transitions

[{id, name}]

jcm_editIssue

Update issue fields

{ok, key}

jcm_transitionIssue

Change workflow state

{ok, key}

jcm_addToActiveSprint

Add an issue to its project's active scrum sprint (no-op if already in one or no scrum board; returns candidates if ambiguous; pass boardId when several scrum boards exist)

{ok, key, sprintId, sprintName, boardId} or {ok, skipped} / {ok: false, reason, candidates}

jcm_createIssue

Create a new issue

{key, url}

jcm_addComment

Add a comment (plain text)

{ok, id}

jcm_searchIssues

JQL search

{total, issues: [{key, summary, status, assignee, updated, updatedJql}]}

jcm_getCurrentUser

Get the authenticated user

{accountId, displayName, email, active}

jcm_lookupUser

Find a user by email

[{accountId, displayName, email, active}]

jcm_createVersion

Create a release version

{id, name}

jcm_listVersions

List project versions

[{id, name, released, releaseDate}]

jcm_releaseVersion

Mark a version as released

{ok, id, name}

jcm_addIssueLink

Link two issues: issueKey → targetIssueKey (A blocks B)

{ok, issueKey, targetKey, linkType}

jcm_removeIssueLink

Delete an issue link by ID

{ok, linkId}

jcm_getIssueLinks

List links on an issue

[{id, type, inwardIssue?, outwardIssue?}]

jcm_convertIssueType

Change type of one or more issues, keeping keys (e.g. Tasks → Sub-tasks under a Story); uses Jira bulk move

{ok, keys, issueType, parentKey}

jcm_getArticle

Read a Confluence page

Title + markdown body + spaceId, parentId

jcm_lookupSpace

Resolve a Confluence space key to its numeric ID

{id, key, name}

jcm_createArticle

Create a Confluence page

{id, url}

jcm_updateArticle

Update a Confluence page

{ok, id}

jcm_searchArticles

CQL search

[{id, title, space, spaceKey, lastModified}]

To create a page next to an existing one, pass its spaceId (and parentId) from jcm_getArticle to jcm_createArticle. Otherwise resolve a space key (e.g. spaceKey from jcm_searchArticles) via jcm_lookupSpace. Space names are not unique — don't use them to pick a space.

Jira attachments

Call jcm_getIssue to discover attachments: [{id, filename, mimeType, size, content}] (an empty array when none exist). content is Jira's authenticated content URL; issue reads do not resolve temporary links.

Pass the selected id to jcm_getAttachmentDownloadLink as attachmentId. The server uses its existing Jira credentials and returns a temporary URL plus the filename. Its Jira account needs permission to view the issue and attachment, including applicable issue security restrictions. Download the URL with a local HTTP client without a Jira Authorization header; file bytes stay outside the model context. For example, in a shell, after assigning the returned values to download_url and a local output_path:

curl --fail --location --proto '=https' --proto-redir '=https' --output "$output_path" "$download_url"

Treat the returned URL as a secret: anyone holding it may be able to download the file. Avoid public logs and tickets. URLs expire; call the tool again to obtain a fresh one. No fixed lifetime or permanent public access is promised.

The resolver supports HTTPS redirects to api.media.atlassian.com/file/{id}/binary. Missing or unsupported redirects, direct file responses, and authentication/permission/not-found failures produce errors. It does not host or proxy attachments. A live private Jira Cloud check on 2026-10-16 observed a 303 redirect; downloading its URL without Jira credentials matched the authenticated file byte for byte. One token carried an expiry about ten minutes after the request; that observation is not a lifetime guarantee.

Watching a ticket

Poll with jcm_searchIssues using key = PROJ-1 AND updated > "<updatedJql>", where updatedJql comes from the previous jcm_getIssue or jcm_searchIssues result. It is the issue's updated time floored to the minute in the Jira user's profile timezone, which is the timezone JQL uses. It is null if the timezone lookup failed (retry later). Because of the minute floor, the query re-matches the issue itself and anything changed within that minute. Matching is at-least-once, so compare raw updated values or dedupe by id. The profile timezone is re-read hourly. The no-miss guarantee does not hold during the repeated hour when daylight saving ends: two instants format to the same local minute and JQL may resolve it to the later one. During that hour, also compare raw updated values, or use a lookback of one hour.

On a match, read new comments with jcm_getIssue. Filter them by comment id, created, or updated, and skip your own using authorAccountId from jcm_getCurrentUser. Read field changes with jcm_getIssueChangelog(issueKey, since). Entries are returned oldest first, and since is strict (created > since). When truncated is true, call again with since set to the last returned created.

Why This Server?

Standard Atlassian MCP servers return raw API responses — deeply nested JSON with metadata LLM agents don't need. jc-mcp flattens and trims every response, cutting ~92% of tokens across typical operations:

Operation

jc-mcp

Standard MCP

Reduction

Get issue

~460 tokens

~1,144 tokens

60%

Search (5 issues)

~105 tokens

~6,204 tokens

98%

Get transitions

~17 tokens

~313 tokens

95%

  • Flat fields: status: "In Progress" instead of nested status.name + statusCategory + self links + iconUrl

  • Lean search results: {key, summary, status, assignee, updated, updatedJql} per issue — no descriptions, avatars, or project metadata

  • Minimal writes: {ok: true, key: "PROJ-1"} — no re-fetch

Less tokens = faster responses, lower cost, more room in the context window.

Write Confirmation (Elicitation Gate)

Set JCM_CONFIRM_WRITES=true to require user confirmation before every write operation. When enabled, the following tools present a confirmation form (via MCP elicitation) before executing:

  • jcm_createIssue — create a Jira issue

  • jcm_editIssue — update issue fields

  • jcm_transitionIssue — change workflow state

  • jcm_addToActiveSprint — add an issue to the active sprint

  • jcm_addComment — add a comment

  • jcm_createArticle — create a Confluence page

  • jcm_updateArticle — update a Confluence page

The confirmation shows a title and summary of the pending write. The user can:

  • Accept — the write proceeds normally

  • Decline or Cancel — the write is skipped and the tool returns {ok: false, message: "...declined by user."}

  • Timeout (client-dependent) — treated as decline

Without the flag (or with any value other than "true"), all writes proceed immediately — existing behaviour is unchanged.

MCP client requirements

The client must support the elicitation/create capability (MCP spec 2025-06-18+). In Hermes, confirmations appear as approve/deny buttons in Slack. In Claude Code, they appear as inline prompts.

claude mcp add --scope user jc-mcp \
  -e JCM_CONFIRM_WRITES=true \
  -e ATLASSIAN_URL=https://yoursite.atlassian.net \
  -e ATLASSIAN_EMAIL=you@example.com \
  -e ATLASSIAN_TOKEN=your-api-token \
  -- npx -y @maphnet/jc-mcp

Configuration

Variable

Required

Description

ATLASSIAN_URL

Yes

Site URL, e.g. https://yoursite.atlassian.net

ATLASSIAN_EMAIL

Yes

Atlassian account email

ATLASSIAN_TOKEN

Yes

API token

ATLASSIAN_CLOUD_ID

No

Auto-discovered if omitted

JCM_CONFIRM_WRITES

No

Set to "true" to require user confirmation before writes

HTTP transport (shared multi-client server)

By default jc-mcp speaks MCP over stdio, one process per client session. Set JCM_TRANSPORT=http to run one long-lived process per credential set that many clients (Claude Code, Codex, …) share over MCP Streamable HTTP. Every client session gets its own MCP session (isolated responses and write-confirmation prompts). All sessions share one Atlassian client.

Variable

Default

Description

JCM_TRANSPORT

stdio

http enables HTTP mode; anything else keeps stdio

JCM_HTTP_HOST

127.0.0.1

Bind address. Keep it on loopback (see Security)

JCM_HTTP_PORT

3000

Listen port. Use a distinct port per credential set

JCM_HTTP_PATH

/mcp

Endpoint path

JCM_HTTP_IDLE_TIMEOUT_MS

1800000

Sessions with no open stream and no activity for this long are closed. Clients that disconnect cleanly (DELETE) are removed immediately. Sessions with an open stream are force-closed after 4x this timeout

Security: the HTTP endpoint has no authentication. Any local process that can reach the port acts with the configured Atlassian credentials. It is meant for trusted, single-user hosts on loopback only. Requests whose Host header is not 127.0.0.1:<port>, localhost:<port> or [::1]:<port> (or exactly <host>:<port> for a non-loopback bind) get 403 (DNS-rebinding protection); the Origin header, when present, is checked the same way. POST requests must send Content-Type: application/json (415 otherwise), and the request body is capped at 4 MiB (413, checked via Content-Length and enforced during the read). Wildcard binds such as 0.0.0.0 or :: are rejected at startup, including spellings Node normalizes to a wildcard (e.g. 0, 0.0); binding to a specific non-loopback IP is still allowed, but it remains unauthenticated — use at your own risk. Under WSL with mirrored networking, Windows-side processes and rootless Docker containers (via the slirp gateway) can also reach loopback, which falls inside this "local = trusted" model.

systemd user services (one per credential set)

Use one template unit, ~/.config/systemd/user/jc-mcp@.service:

[Unit]
Description=jc-mcp HTTP server (%i)
After=network-online.target

[Service]
Type=simple
EnvironmentFile=%h/.config/mcp/secrets/%i-jc-mcp.env
EnvironmentFile=%h/.config/jc-mcp/%i.env
Environment=JCM_TRANSPORT=http
# systemd does not load nvm: use the absolute output of `command -v node`
ExecStart=/home/USER/.nvm/versions/node/v24.0.0/bin/node /home/USER/dev/jc-mcp/dist/index.js
Restart=on-failure
RestartSec=2

[Install]
WantedBy=default.target

Per-instance port files, ~/.config/jc-mcp/<set>.env:

# ~/.config/jc-mcp/maphnet.env
JCM_HTTP_PORT=3101
# ~/.config/jc-mcp/publius.env
JCM_HTTP_PORT=3102
# ~/.config/jc-mcp/lektra.env
JCM_HTTP_PORT=3103

EnvironmentFile accepts plain KEY=VALUE lines only. If a secrets file uses export KEY=VALUE, remove the export prefixes.

systemctl --user daemon-reload
systemctl --user enable --now jc-mcp@maphnet jc-mcp@publius jc-mcp@lektra
journalctl --user -u jc-mcp@maphnet -f    # expect: jc-mcp server running via http at http://127.0.0.1:3101/mcp

After upgrading jc-mcp (npm run build), run systemctl --user restart 'jc-mcp@*'.

Client configuration

Claude Code (project .mcp.json):

{
  "mcpServers": {
    "maphnet-jc-mcp": { "type": "http", "url": "http://127.0.0.1:3101/mcp" }
  }
}

Or from the CLI: claude mcp add --transport http maphnet-jc-mcp http://127.0.0.1:3101/mcp.

Codex (~/.codex/config.toml or project .codex/config.toml):

[mcp_servers.maphnet-jc-mcp]
url = "http://127.0.0.1:3101/mcp"

Older Codex releases also need experimental_use_rmcp_client = true at the top level of config.toml.

Migrating from stdio group entries

  1. Start the systemd instances above and confirm each one logs its URL.

  2. In each of ~/.config/mcp/groups/maphnet.json, publius.json and lektra.json, replace the jc-mcp stdio entry (command/args/env sourcing) with an HTTP entry: { "type": "http", "url": "http://127.0.0.1:<port>/mcp" } (ports 3101/3102/3103).

  3. Re-apply the groups in each project: mcp-group rm <group> <dir> then mcp-group add <group> <dir>.

  4. Update Codex config.toml entries as shown above, and re-enable the jc-mcp entries that were disabled for memory reasons.

  5. Restart running Claude Code and Codex sessions. MCP server config is read at session start, so existing sessions keep their old stdio processes until restarted.

  6. Verify in a fresh session: the client lists the jc-mcp tools, and a read-only call such as jcm_getIssue on a known key succeeds.

Memory: stdio vs HTTP

Date measured: 2026-10-12, Node v24.19.0. Procedure: start the server with fake credentials, connect N SDK clients and run tools/list on each, then read ps -o rss= -p <pid>.

Mode

Processes

Sessions

Measured RSS

stdio (node dist/index.js)

1 per session

1

78.2 MB

stdio, 6 sessions

6

6

469.2 MB (6 × above)

HTTP, idle

1

0

90.7 MB

HTTP, 6 sessions

1

6

92.9 MB

The previous npx-launched stdio setup used 1.3-1.7 GB combined RSS across sessions, including the npm wrapper processes.

License

MIT

Available Tools

24 tools
jcm_addCommentAdd Comment to Jira IssueA

Add a comment to a Jira issue. Body accepts markdown (headings, tables, code fences, lists). Returns {ok, commentId}.

NameRequiredDescriptionDefault
bodyYesComment text (supports markdown formatting)
issueKeyYesJira issue key, e.g. PROJ-123

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare the mutation and open-world profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds real value beyond them by disclosing the return payload ({ok, commentId}) and the fact that the body renders as markdown, though it says nothing about duplicate-comment behavior or notification 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?

Three short sentences with zero filler: action first, input format second, return shape last. Every clause carries information an agent needs before calling.

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 two-parameter tool with no output schema, the description covers purpose, input format, and return shape, which is enough to invoke it correctly. Error behavior and permission requirements are the only notable omissions, and annotations partly cover the latter.

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, but the description goes further than the schema by enumerating the supported markdown constructs (headings, tables, code fences, lists) that the body parameter accepts. issueKey semantics (the PROJ-123 pattern) are left entirely to the schema, which already handles them well.

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 first sentence gives a specific verb and resource ("Add a comment to a Jira issue"), which is unambiguous and cannot be confused with any sibling such as jcm_createIssue or jcm_editIssue. It does not explicitly name or contrast with siblings, so it lands just short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied by the purpose statement — there is no explicit when-to-use, when-not-to-use, or prerequisite guidance (e.g., required permissions or whether the issue must be open). Since no sibling tool offers a comparable commenting action, the lack of alternatives is low-risk, keeping this at a minimum-viable 3.

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

jcm_addToActiveSprintAdd Issue to Active SprintA
Idempotent

Add a Jira issue to its project's active scrum sprint. No-op if the issue is already in an active sprint or the project has no scrum board. If the board or sprint is ambiguous, returns {ok:false, reason, candidates:[{id,name}]}: for reason multiple-scrum-boards retry with boardId; no-active-sprint and multiple-active-sprints need manual handling in Jira. Returns {ok, key, sprintId, sprintName, boardId} or {ok, skipped}.

NameRequiredDescriptionDefault
boardIdNoScrum board ID; only needed when the project has several scrum boards
issueKeyYesJira issue key, e.g. PROJ-123

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=true; the description goes further by naming the concrete no-op triggers, enumerating failure reasons with candidate payloads, and describing both success and skipped return shapes despite there being no output schema. This is materially more than the annotations carry.

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?

Three short sentences ordered as purpose, edge cases, error handling, return values — front-loaded and free of filler. The compact JSON-ish shape fragments convey return structure in far fewer tokens than prose would.

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?

No output schema exists, so the description must describe return values, and it does for success, skip, and both error classes. Combined with a fully documented two-parameter schema and annotations, an agent has everything needed to call this correctly and interpret the result.

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, but the description adds operational meaning the schema cannot: boardId is only needed as a retry after a multiple-scrum-boards failure, not something to supply upfront. issueKey semantics are left entirely to the schema, which is fine given its pattern example.

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?

States a specific verb and resource ('Add a Jira issue to its project's active scrum sprint') with the implicit scope resolution (its project's board) made explicit. Clearly distinct from siblings like jcm_editIssue or jcm_transitionIssue, which do not touch sprint membership.

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?

Gives explicit no-op conditions (already in an active sprint, no scrum board) and a concrete recovery path tied to a specific failure reason: retry with boardId on multiple-scrum-boards, handle no-active-sprint and multiple-active-sprints manually in Jira. The agent knows both when to call it and what to do when it fails.

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

jcm_convertIssueTypeConvert Jira Issue TypeA
DestructiveIdempotent

Convert one or more Jira issues (same project) to another issue type, keeping their keys. To make tasks sub-tasks, provide parentKey. To make sub-tasks standalone, omit parentKey. Uses Jira's bulk move and waits up to 30s. Returns {ok, keys, issueType, parentKey}, or {ok:false, taskId, status, failed?} if the move failed or is still running.

NameRequiredDescriptionDefault
issueKeysYesJira issue keys to convert, all in the same project, e.g. ['PROJ-2', 'PROJ-3']
parentKeyNoParent issue key when converting to a sub-task. Omit when converting to a standalone issue type.
issueTypeNameYesTarget issue type name, e.g. 'Sub-task' or 'Task'

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, and the description adds real context on top: it uses Jira's bulk move, blocks up to 30s, and returns a taskId with status when the move fails or is still running. It stops short of saying what is lost in the conversion (field values, sub-task links, workflow state), which matters for a destructive 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?

Four tight sentences: purpose and constraint first, then the parentKey decision rule, then mechanism/timeout, then return shapes. Every sentence carries information an agent needs.

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 no output schema, the description responsibly supplies both return shapes and the 30s blocking behavior, and notes the same-project restriction. One gap: it surfaces a taskId for still-running moves but no sibling tool in this set appears to poll that task, so recovery from that state is unclear.

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 all three parameters are already documented, including the parentKey omit/provide rule. The description largely restates that plus the same-project constraint, adding little new meaning; 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?

States a specific verb and resource ('Convert one or more Jira issues ... to another issue type') plus the distinguishing constraint that keys are preserved and all issues must share a project. This separates it from jcm_editIssue and jcm_transitionIssue without needing their schemas.

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?

Gives explicit conditional guidance for the one ambiguous parameter: provide parentKey to create sub-tasks, omit it to make sub-tasks standalone. It does not name the sibling alternatives (editIssue/transitionIssue) or say when not to use this tool at all, so it stops 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.

jcm_createArticleCreate Confluence ArticleB

Create a new Confluence page. Returns {id, title, url}.

NameRequiredDescriptionDefault
bodyYesPage body content (supports markdown formatting)
titleYesPage title
spaceIdYesNumeric Confluence space ID — take spaceId from jcm_getArticle, or resolve a space key via jcm_lookupSpace
parentIdNoParent page ID (optional)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the mutation/safety profile is covered structurally. The description adds one piece of genuinely new context – the return shape {id, title, url} – which matters because there is no output schema, but it says nothing about duplicate-creation risk on retry, required permissions, or space visibility.

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

Conciseness5/5

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

Two short sentences, no filler, with the action stated first and the return value second. Every clause carries 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?

Adequate for a straightforward create tool whose schema is fully documented and whose annotations cover mutation semantics. However, with no output schema the return description is a terse inline list, and nothing explains what happens on a title collision or whether the created page is draft vs published – gaps an agent invoking a create operation would benefit from knowing.

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 itself already explains the non-obvious bits (numeric spaceId, markdown in body, how to resolve a space key). The description adds no parameter information beyond this, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create a new Confluence page'), which clearly separates it from jcm_getArticle and jcm_updateArticle among the siblings. It stops short of explicitly contrasting with those siblings, so it is clear but not fully differentiated by name.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance is given, and no prerequisites or alternatives (e.g. jcm_updateArticle for existing pages) are named. The agent must infer the usage context entirely from the verb.

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

jcm_createIssueCreate Jira IssueA

Create a new Jira issue. Returns {key, url}. For sub-tasks, pass parentKey.

NameRequiredDescriptionDefault
summaryYesIssue summary/title
issueTypeYesIssue type name, e.g. Task, Bug, Story
parentKeyNoParent issue key for sub-tasks, e.g. PROJ-1
projectKeyYesProject key, e.g. PROJ
descriptionNoDescription (supports markdown formatting)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this is a non-readonly, non-idempotent, non-destructive open-world write, so the safety profile is carried structurally. The description adds value annotations cannot: the return shape {key, url}, which matters because there is no output schema. It omits permission requirements and side effects such as notifications.

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?

Three short sentences, front-loaded with the action, followed by return value and then the one conditional hint. Nothing is redundant and every sentence earns its place.

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

Completeness4/5

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

Return value is stated despite having no output schema, and the sub-task case is covered, which an agent needs to invoke correctly given the three required parameters. Minor gaps remain around permissions and whether creating an issue triggers notifications or workflow validation.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema, including the parentKey sub-task example. The description's parentKey note restates schema content rather than adding format or validation detail beyond it, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create a new Jira issue') that is immediately distinguishable from siblings like jcm_editIssue, jcm_getIssue, and jcm_createVersion. It doesn't explicitly contrast with the nearest alternative, but the verb makes the operation 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 only usage guidance is 'For sub-tasks, pass parentKey,' which is conditional invocation advice for one parameter. There is no guidance on when to use this versus jcm_editIssue or jcm_convertIssueType, nor any note on prerequisites such as required project permissions.

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

jcm_createVersionCreate Jira VersionB

Create a new version (release) in a Jira project. Returns {id, name}.

NameRequiredDescriptionDefault
nameYesVersion name, e.g. '1.0.0'
projectKeyYesJira project key, e.g. PROJ
descriptionNoVersion description
releaseDateNoTarget release date (YYYY-MM-DD)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the description needn't repeat that. It does add useful value by stating the return shape '{id, name}', which is the only source of return information given there is no output schema. However, it says nothing about permission requirements, duplicate-name behavior, 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?

Two short sentences, zero filler, with the core action front-loaded and the return value appended. Nothing is wasted or buried.

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

Completeness4/5

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

For a four-parameter creation tool with full schema coverage and annotations covering the safety profile, the description supplies the missing return-shape information. It stops short of the creation-specific caveats (duplicates, required permissions, whether the version is created unreleased) that would make it 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 description coverage is 100%, so all four parameters are already documented with examples and a project-key pattern. The description adds no parameter-level meaning beyond the schema, which is the expected baseline-3 case when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb and resource ('Create a new version (release) in a Jira project') and clarifies the domain term 'version' with 'release'. It is clearly distinguishable from siblings like jcm_listVersions and jcm_releaseVersion, though it never explicitly contrasts with them.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus alternatives such as jcm_releaseVersion (which presumably marks a version as released) or jcm_listVersions for checking existing ones. No prerequisites, permissions, or duplicate-name caveats are mentioned.

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

jcm_editIssueEdit Jira IssueA
DestructiveIdempotent

Update fields on a Jira issue. Pass fields as {fieldName: value}. Description field accepts markdown. Returns {ok, key}.

NameRequiredDescriptionDefault
fieldsYesFields to update as {fieldName: value}. Example: {summary: 'New title', labels: ['bug']}
issueKeyYesJira issue key, e.g. PROJ-123

TDQS

A4.2/5.0
Behavior4/5

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

It adds valuable operational context not in the schema or annotations, specifically noting that the 'Description' field supports markdown, which is a crucial execution 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 definition is extremely concise, using two focused sentences to cover the purpose, key input format, and basic return structure.

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 highly complete for execution, particularly since it defines the return structure ('Returns {ok, key}') which is not fully specified in the schema.

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?

Although the schema is 100% covered, the description adds semantic meaning by clarifying the expected structure ('Pass fields as {fieldName: value}') and detailing the markdown capability of the description field.

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 explicitly states the function ('Update fields on a Jira issue') and is clearly distinguishable from sibling tools like 'createIssue' or 'getIssue' by focusing on the 'update' action.

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?

It provides implied usage by contrasting it with creation/retrieval, but it offers no specific guidelines regarding constraints or when it should be chosen over related complex Jira API calls.

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

jcm_getArticleGet Confluence ArticleA
Read-onlyIdempotent

Fetch a Confluence page by ID. Returns {id, title, body (markdown), status, version, spaceId, parentId?}.

NameRequiredDescriptionDefault
pageIdYesConfluence page ID

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds useful return-shape context, including that body is markdown and parentId is optional, though it does not mention permissions or error 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?

Two short sentences, front-loaded with the core action and then the return fields. There is no redundant or wasted 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 simple one-parameter read tool with full schema coverage and complete safety annotations, the description is complete enough. Even without an output schema, it briefly documents the returned structure.

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 only parameter pageId is already documented as a Confluence page ID. The description adds no syntax or format detail beyond the schema 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 states a specific verb and resource: 'Fetch a Confluence page by ID.' It is clearly distinct from siblings such as jcm_searchArticles, jcm_createArticle, and jcm_updateArticle.

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

Usage Guidelines3/5

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

The phrase 'by ID' implies the tool is for cases where a page ID is already known, but the description does not explicitly say when to use this instead of jcm_searchArticles or other retrieval tools.

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

jcm_getCurrentUserGet Current UserA
Read-onlyIdempotent

Returns the authenticated Atlassian user's account info: accountId, displayName, email, active.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description earns extra credit by enumerating the returned fields (accountId, displayName, email, active) in the absence of an output schema; it does not cover auth-failure behavior or whether email may be hidden by privacy settings.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the resource and the return contract are delivered immediately with zero waste.

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-arg read with no output schema, listing the returned fields makes the tool callable without guesswork. The only shortfall is the unstated boundary versus jcm_lookupUser and the absence of any auth-prerequisite note.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description correctly implies no input is needed by framing the call around the authenticated session.

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

Purpose4/5

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

Specific verb ('Returns') plus a precisely scoped resource ('the authenticated Atlassian user's account info'), which implicitly separates it from jcm_lookupUser, the sibling that looks up arbitrary users. It stops short of naming that sibling explicitly, so the differentiation requires the agent to infer it.

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 rather than stated: 'authenticated user' signals the self-lookup case. There is no explicit guidance on when to pick this over jcm_lookupUser, nor any note that it requires an active authenticated session.

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

jcm_getIssueGet Jira IssueA
Read-onlyIdempotent

Fetch a Jira issue by key. Returns lean fields: key, summary, description (markdown), status, type, priority, assignee, reporter ({displayName, accountId} or null), labels, updated (ISO), updatedJql (updated floored to the minute in your Jira timezone, for JQL updated > "..." polling; at-least-once, dedupe; null if unavailable), comments (id, author, authorAccountId, body, created, updated), attachments (id, filename, mimeType, size, content URL). Attachment content URLs require Jira authentication.

NameRequiredDescriptionDefault
issueKeyYesJira issue key, e.g. PROJ-123

TDQS

A4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open world), yet the description adds substantive behavior the annotations cannot: the exact lean field set returned, the updatedJql minute-flooring and at-least-once/dedupe semantics for polling, and the requirement of Jira auth for attachment content URLs. These are precisely the non-obvious traits that prevent misuse in a polling loop.

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 action is front-loaded in the first clause, then the return shape is enumerated. The second half is a long run-on enumeration, but since no output schema exists each listed field earns its place; it could be tightened with a compact list rather than parenthetical nesting.

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?

With no output schema, the description takes on the return-contract burden and discharges it fully, including nullability (assignee/reporter, updatedJql), date formats, and the auth caveat on attachment URLs. Nothing an agent needs to call this correctly or interpret the response is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single issueKey parameter already carries its own description and regex pattern, so the schema does the work here. The description only restates "by key" and adds no format, casing, or failure-mode detail beyond the schema's pattern.

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?

"Fetch a Jira issue by key" gives a specific verb and resource with a clear scope qualifier (single issue, addressed by key), which implicitly separates it from jcm_searchIssues and jcm_getIssueChangelog. It stops short of naming any sibling explicitly, so the agent must infer the boundary rather than being told it.

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

Usage Guidelines3/5

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

Usage is only implied: the phrase "by key" suggests this is for when you already know the issue identifier and search is for when you don't. There is no explicit statement of when to prefer jcm_searchIssues, no prerequisite for obtaining a key, and no note on whether this tool errors on missing keys.

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

jcm_getIssueChangelogGet Jira Issue ChangelogA
Read-onlyIdempotent

Get a Jira issue's field-change history, oldest first. Returns {entries: [{id, authorAccountId, author, created, items: [{field, from, to}]}], truncated}. since keeps entries created strictly after it. Capped at maxResults oldest matches (entries sharing the last timestamp stay together); if truncated, call again with since = last returned created.

NameRequiredDescriptionDefault
sinceNoISO-8601 date-time with a timezone (Z or offset such as +03:00); only entries created strictly after it (e.g. the last returned `created`)
issueKeyYesJira issue key, e.g. PROJ-123
maxResultsNoMax entries to return (default 20, max 50)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent/non-destructive, and the description goes well beyond them: it discloses result ordering, a hard cap of maxResults, the tie-breaking rule that entries sharing the last timestamp stay together, and the truncation flag. Without an output schema, that payload and paging disclosure is doing real work.

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?

Three tight sentences, front-loaded with purpose, then return shape, then the paging rule. No filler; every clause carries either contract or recovery information.

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?

With no output schema, the description supplies the full return shape (entries, items, truncated) and the exact continuation procedure, so an agent can both interpret and page results without guessing. Nothing material is left out for a 3-parameter read 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 baseline is 3, but the description adds semantic detail the schema lacks: `since` is strictly-after, and `maxResults` selects the oldest matches with same-timestamp grouping. The only gap is that it does not restate the issueKey key format, which the schema already covers.

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?

States a specific verb and resource ("Get a Jira issue's field-change history") plus an ordering guarantee ("oldest first") that immediately distinguishes it from sibling jcm_getIssue and jcm_editIssue. An agent can tell this is a read of audit-style change records rather than current field values.

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?

Gives explicit operational guidance for the paging loop: "if truncated, call again with since = last returned created," which is the main decision an agent faces here. It stops short of naming when to prefer jcm_getIssue or which sibling answers 'current state' questions, so it is clear-context but not full when/when-not routing.

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

jcm_getTransitionsGet Issue TransitionsA
Read-onlyIdempotent

Get available workflow transitions for a Jira issue. Returns [{id, name}].

NameRequiredDescriptionDefault
issueKeyYesJira issue key, e.g. PROJ-123

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description contributes the return payload format ([{id, name}]), which is valuable since there is no output schema, but it omits that available transitions vary by workflow state and user 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?

Two short sentences, purpose front-loaded, return shape given immediately after. Zero 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 simple one-parameter read tool with no output schema, purpose plus return shape is nearly sufficient. The only missing element is a note that available transitions depend on the issue's current workflow status.

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 single issueKey parameter is fully documented with an example and pattern in the schema. The description adds nothing about the parameter, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('available workflow transitions for a Jira issue') and discloses the return shape. It is implicitly distinguishable from the sibling jcm_transitionIssue (which performs a transition), though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is a prerequisite lookup before jcm_transitionIssue, but the description never states when to call it, when not to, or what to do with the returned ids. No alternatives are named.

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

jcm_listVersionsList Jira VersionsA
Read-onlyIdempotent

List all versions in a Jira project. Returns [{id, name, released, releaseDate}].

NameRequiredDescriptionDefault
projectKeyYesJira project key, e.g. PROJ

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds value beyond that by disclosing the return shape [{id, name, released, releaseDate}], which annotations cannot convey; it omits any note on pagination or empty-project 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?

Two short sentences, front-loaded with the action and scope, then the return shape. Nothing is wasted and there is no 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 one-parameter read tool with no output schema, the description supplies the return structure and scope, which is nearly everything an agent needs. A note on pagination or ordering would make it 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 single projectKey parameter is documented with a pattern and example in the schema. The description adds no formatting or meaning beyond that, so the schema carries the semantic load and baseline 3 applies.

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

Purpose4/5

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

States a specific verb (List) and resource (versions) scoped to a Jira project, and distinguishes itself by verb from siblings like jcm_createVersion and jcm_releaseVersion. It stops short of explicitly naming those siblings, but the read-vs-write verb makes the distinction obvious.

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: it is the read path for version metadata on a project, contrasted implicitly with createVersion/releaseVersion. There is no explicit when-to-use, prerequisites, or named alternative, so an agent must infer the routing.

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

jcm_lookupSpaceLookup Confluence SpaceA
Read-onlyIdempotent

Resolve a Confluence space key to its numeric ID for use with jcm_createArticle. Returns {id, key, name}.

NameRequiredDescriptionDefault
spaceKeyYesConfluence space key

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new information by disclosing the return payload ("{id, key, name}"), which matters because no output schema exists; it omits error behavior for an invalid key.

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

Conciseness5/5

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

Two short sentences, front-loaded with the purpose and followed by the return shape. Every clause carries information; nothing is redundant 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 single-parameter lookup with full annotation coverage, the description covers purpose, consumer, and return fields. The only meaningful gap is what happens when the space key does not exist (error vs. empty result), which an agent would otherwise have to discover by trial.

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 there is only one required parameter whose meaning ("Confluence space key") is already spelled out in the schema. The description restates the concept without adding format or validation semantics beyond what the schema provides, 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?

States a specific verb ("Resolve") and resource ("a Confluence space key to its numeric ID"), which is a narrow, unambiguous operation that no sibling tool performs. It also names the downstream consumer (jcm_createArticle), so an agent immediately knows the result's role.

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?

"for use with jcm_createArticle" gives a clear positive trigger for calling this tool. There is no explicit when-not or note about what to do if the key is already known, but the usage context is concrete rather than implied.

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

jcm_lookupUserLookup UserA
Read-onlyIdempotent

Look up a Jira user by email address. Returns [{accountId, displayName, email, active}].

NameRequiredDescriptionDefault
emailYesEmail address of the user to look up

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and openWorld, so safety is covered. The description adds genuine value by disclosing the return shape ([{accountId, displayName, email, active}]) despite there being no output schema. It does not say what happens when no user matches, which keeps it from a 5.

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

Conciseness5/5

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

Two short sentences with zero filler; the lookup action is front-loaded and the return contract follows immediately.

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 one-parameter lookup with no output schema, the description covers purpose and return fields, which is what an agent needs to call it. The only meaningful gap is the no-match/empty-result behavior.

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 single email parameter is documented with format: email, so the schema does the heavy lifting. The description only restates 'by email address' without adding matching semantics (exact vs partial, case sensitivity).

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

Purpose4/5

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

States a specific verb (look up) and resource (Jira user) with the key selector (by email address), which implicitly separates it from jcm_getCurrentUser. It does not name any sibling explicitly, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

Usage is implied by 'look up a user by email address' — an agent can infer this is the tool for resolving an email to an accountId. However, there is no explicit guidance on when to prefer this over jcm_getCurrentUser, and no mention of failure behavior or prerequisites.

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

jcm_releaseVersionRelease Jira VersionA
DestructiveIdempotent

Mark a Jira version as released. Returns {ok, id, name}.

NameRequiredDescriptionDefault
versionIdYesJira version ID (numeric)
releaseDateNoRelease date (YYYY-MM-DD). Defaults to today.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructive, idempotent, open-world, and non-read-only behavior. The description adds the return shape {ok, id, name}, but does not add further context on permissions or side effects beyond annotations; it is consistent with them.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and followed by the return shape. No wasted words.

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

Completeness4/5

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

For a simple mutation with rich schema and annotations, the description supplies the return shape that would otherwise be missing without an output schema. It could mention error or already-released behavior, but annotations cover idempotency.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description adds no parameter semantics beyond what the schema provides, making 3 the appropriate 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?

States a specific verb ('Mark ... as released') and resource ('Jira version'), clearly distinguishing it from siblings like createVersion and listVersions.

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 when-to-use guidance, prerequisites, or alternatives are given. The action implies releasing an existing version, but the agent must infer the context.

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

jcm_searchArticlesSearch Confluence ArticlesA
Read-onlyIdempotent

Search Confluence pages using CQL. Returns [{id, title, space, spaceKey, lastModified}].

NameRequiredDescriptionDefault
cqlYesConfluence Query Language string. Example: space = "KB" AND type = "page" AND text ~ "search term"
maxResultsNoMax results (default 10, max 25)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuine value beyond that by disclosing the return payload shape ({id, title, space, spaceKey, lastModified}), which matters because there is no output schema. It omits any note about auth requirements or what happens when the 25-result cap is hit.

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

Conciseness5/5

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

Two short sentences with zero filler. The query mechanism and the resource are front-loaded, followed immediately by the return shape.

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 2-parameter read tool with full annotation coverage, complete schema descriptions and an inline return-shape disclosure, the definition gives an agent everything needed to invoke it. The remaining gaps are pagination behavior past the 25-item cap and explicit routing versus sibling lookup/search tools.

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%: the cql parameter carries a concrete example query and maxResults documents default and bounds. The description adds nothing about parameter semantics beyond that, so the baseline 3 applies. No enum or format hints are added for CQL syntax beyond the schema example.

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

Purpose4/5

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

States a specific verb and resource ("Search Confluence pages") plus the query language used (CQL), which separates it from jcm_getArticle/jcm_createArticle/jcm_updateArticle by naming the retrieval-by-query behavior. It does not explicitly say how it differs from sibling search tools like jcm_searchIssues, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the tool for finding pages when it lacks an ID, whereas jcm_getArticle takes a known identifier. There is no explicit when-to-use, when-not-to-use, or named alternative for cases where CQL is unavailable or where space listing (jcm_lookupSpace) is the better path.

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

jcm_searchIssuesSearch Jira IssuesA
Read-onlyIdempotent

Search Jira issues using JQL. Returns {total, issues: [{key, summary, status, assignee, updated, updatedJql}]}. updatedJql is the issue's updated time floored to the minute in your Jira timezone; poll with key = X AND updated > "<updatedJql>" (at-least-once, dedupe).

NameRequiredDescriptionDefault
jqlYesJQL query string
maxResultsNoMax results to return (default 20, max 50)

TDQS

A4.1/5.0
Behavior5/5

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

With no output schema, the description discloses the exact return envelope {total, issues:[{key, summary, status, assignee, updated, updatedJql}]}. It goes further by explaining updatedJql's minute-flooring in the user's timezone and warning that polling is at-least-once so callers must dedupe — behavioral context the readOnly/idempotent annotations cannot convey.

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?

Three tight sentences, all load-bearing: purpose first, then return shape, then the polling semantics. No filler, and the most decision-relevant facts (return shape, dedupe) are 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?

Compensates for the missing output schema by fully specifying the return structure, and covers the subtle polling-increment semantics unique to this tool. Combined with 100% schema coverage of maxResults/jql, an agent has everything needed to call and consume 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 coverage is 100%, so `jql` and `maxResults` are already documented in the schema. The description reinforces JQL usage and shows a query template (key/updated), which adds modest value but no parameter-level detail beyond the structured data. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Search Jira issues using JQL'. The verb 'search' plus the JQL mechanism distinguishes it implicitly from jcm_getIssue (single fetch) and jcm_searchArticles (different resource), but it never names a sibling or scoping rule explicitly.

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?

Provides a concrete usage pattern for polling with `key = X AND updated > "<updatedJql>"` and warns about at-least-once semantics requiring dedupe. It does not say when to prefer this over jcm_getIssue for a single known key, so usage is implied rather than fully guided.

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

jcm_transitionIssueTransition Jira IssueA
Destructive

Move a Jira issue to a new workflow state. Use jcm_getTransitions first to get valid transition IDs. Returns {ok, key, transitionId}.

NameRequiredDescriptionDefault
issueKeyYesJira issue key, e.g. PROJ-123
transitionIdYesTransition ID from jcm_getTransitions

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds real value beyond that by stating the return shape ({ok, key, transitionId}), which no output schema provides, though it stops short of saying what side effects a transition triggers (notifications, workflow post-functions, required fields).

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?

Three short sentences, front-loaded with the action, then the prerequisite, then the return shape. Every sentence carries distinct information and none is 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 two-parameter mutation with no output schema, the description supplies the action, the prerequisite and the response shape, which is enough to call it correctly. It could add one line on what a failed or partial transition looks like, but the gaps are minor.

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

Parameters3/5

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

Schema coverage is 100% and both parameters carry their own descriptions plus patterns (issue key format, numeric transition ID). The description's mention of transition IDs sourced from jcm_getTransitions only repeats what the schema's parameter description already says, 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?

States a specific verb and resource: 'Move a Jira issue to a new workflow state.' That is clearly distinct from the read-only siblings (jcm_getIssue, jcm_getTransitions) and from the field-editing sibling jcm_editIssue, so an agent can pick it without opening a schema.

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?

'Use jcm_getTransitions first to get valid transition IDs' names the prerequisite tool and the condition that requires it, which is the single most important routing decision for this call. Nothing about sequencing is left to inference.

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

jcm_updateArticleUpdate Confluence ArticleA
DestructiveIdempotent

Update a Confluence page. Pass current version number (auto-incremented). Returns {ok, id, version}.

NameRequiredDescriptionDefault
bodyYesUpdated page body content (supports markdown formatting)
titleYesPage title (required for updates)
pageIdYesConfluence page ID
versionYesCurrent version number (from jcm_getArticle). Will be incremented automatically.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the risk profile is covered. The description adds real value by disclosing the version auto-increment behavior and the return shape {ok, id, version}. It does not disclose whether body is a full replacement or merge, nor how concurrency/stale-version failures surface, which is the key behavioral detail an agent needs before calling a destructive page update.

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?

Three short sentences, front-loaded with purpose, then the critical precondition, then the return shape. No filler sentences.

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?

Return-shape disclosure compensates for the absent output schema, and the version precondition is stated. However, a destructive, open-world mutation should also tell the agent that title/body fully overwrite existing content and how to recover from a version mismatch.

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 all four parameters are already documented. The description's '(auto-incremented)' note reinforces the version parameter's mechanics but adds nothing about body replacement semantics beyond the schema's markdown hint.

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

Purpose4/5

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

States a specific verb and resource ('Update a Confluence page'), which is immediately distinguishable from jcm_getArticle and jcm_createArticle. It does not explicitly name those siblings, but the mutating intent 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 version sentence implies the read-then-update workflow (get current version, then update), but the description never says to call jcm_getArticle first or what to do on a version conflict. Usage is only implied, not directed.

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. 24 tool updatesv0.10.3
    • First observedjcm_addComment
    • First observedjcm_addIssueLink
    • First observedjcm_addToActiveSprint
    • First observedjcm_convertIssueType
    • First observedjcm_createArticle
    • First observedjcm_createIssue
    • First observedjcm_createVersion
    • First observedjcm_editIssue
    • First observedjcm_getArticle
    • First observedjcm_getAttachmentDownloadLink
    • First observedjcm_getCurrentUser
    • First observedjcm_getIssue
    • First observedjcm_getIssueChangelog
    • First observedjcm_getIssueLinks
    • First observedjcm_getTransitions
    • First observedjcm_listVersions
    • First observedjcm_lookupSpace
    • First observedjcm_lookupUser
    • First observedjcm_releaseVersion
    • First observedjcm_removeIssueLink
    • First observedjcm_searchArticles
    • First observedjcm_searchIssues
    • First observedjcm_transitionIssue
    • First observedjcm_updateArticle

TDQS

A3.9/5.0

Scored across 24 tools

Disambiguation5/5

Each tool targets a distinct resource+action pair, and the Jira vs Confluence split (searchIssues/searchArticles, getIssue/getArticle) is explicit in names and descriptions. Closely related operations such as editIssue, transitionIssue, and convertIssueType are clearly differentiated by their descriptions and return shapes. Only mild conceptual adjacency exists between getIssue and searchIssues, but the lean-vs-full field distinction resolves it.

Naming Consistency5/5

All 24 tools use a uniform jcm_ prefix followed by camelCase verb_noun (getIssue, createVersion, removeIssueLink, updateArticle). Verb vocabulary is consistent (get/list/search/create/update/edit/add/remove) and resource nouns map predictably to Jira or Confluence entities. No mixed conventions or stray naming styles.

Tool Count4/5

At 24 tools the set is at the upper end of comfortable, but the surface spans two products (Jira and Confluence) across issues, comments, links, versions, sprints, attachments, and users, so most tools earn their place. A few could arguably be consolidated (e.g. version tools), making it slightly heavy rather than poorly scoped.

Completeness4/5

Core workflows are covered: issue create/read/edit/transition/convert/search, comments, links, versions, sprint assignment, attachments, user lookup, and Confluence page search/get/create/update with space resolution. Gaps exist around destructive and maintenance operations — no delete for issues, pages, comments, or links beyond removeIssueLink, no comment edit, and no project/board listing — but these are workable around.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers