jc-mcp
Provides tools for interacting with Confluence, enabling reading and creating pages, updating pages, and searching content.
Provides tools for interacting with Jira, enabling management of issues (create, read, update, transition, comment, search) and release versions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@jc-mcpfind issues with high priority assigned to me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Get an API token from id.atlassian.com
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-mcpThe --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@latestThen restart your MCP client (Claude Code, Cursor, etc.) to pick up the new version.
Tools
Tool | Description | Returns |
| Read a Jira issue | Flat fields (incl. |
| Field-change history, oldest first, optionally after |
|
| Resolve a temporary attachment download URL on demand |
|
| Available workflow transitions |
|
| Update issue fields |
|
| Change workflow state |
|
| 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 |
|
| Create a new issue |
|
| Add a comment (plain text) |
|
| JQL search |
|
| Get the authenticated user |
|
| Find a user by email |
|
| Create a release version |
|
| List project versions |
|
| Mark a version as released |
|
| Link two issues: issueKey → targetIssueKey (A blocks B) |
|
| Delete an issue link by ID |
|
| List links on an issue |
|
| Change type of one or more issues, keeping keys (e.g. Tasks → Sub-tasks under a Story); uses Jira bulk move |
|
| Read a Confluence page | Title + markdown body + |
| Resolve a Confluence space key to its numeric ID |
|
| Create a Confluence page |
|
| Update a Confluence page |
|
| CQL search |
|
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 nestedstatus.name+statusCategory+selflinks +iconUrlLean search results:
{key, summary, status, assignee, updated, updatedJql}per issue — no descriptions, avatars, or project metadataMinimal 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 issuejcm_editIssue— update issue fieldsjcm_transitionIssue— change workflow statejcm_addToActiveSprint— add an issue to the active sprintjcm_addComment— add a commentjcm_createArticle— create a Confluence pagejcm_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-mcpConfiguration
Variable | Required | Description |
| Yes | Site URL, e.g. |
| Yes | Atlassian account email |
| Yes | API token |
| No | Auto-discovered if omitted |
| No | Set to |
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 |
|
|
|
|
| Bind address. Keep it on loopback (see Security) |
|
| Listen port. Use a distinct port per credential set |
|
| Endpoint path |
|
| Sessions with no open stream and no activity for this long are closed. Clients that disconnect cleanly ( |
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.targetPer-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=3103EnvironmentFile 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/mcpAfter 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
Start the systemd instances above and confirm each one logs its URL.
In each of
~/.config/mcp/groups/maphnet.json,publius.jsonandlektra.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).Re-apply the groups in each project:
mcp-group rm <group> <dir>thenmcp-group add <group> <dir>.Update Codex
config.tomlentries as shown above, and re-enable the jc-mcp entries that were disabled for memory reasons.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.
Verify in a fresh session: the client lists the jc-mcp tools, and a read-only call such as
jcm_getIssueon 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 ( | 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 toolsjcm_addCommentAdd Comment to Jira IssueA
Add a comment to a Jira issue. Body accepts markdown (headings, tables, code fences, lists). Returns {ok, commentId}.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment text (supports markdown formatting) | |
| issueKey | Yes | Jira issue key, e.g. PROJ-123 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare 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.
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.
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.
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.
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.
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_addIssueLinkAdd Jira Issue LinkA
Create a link between two Jira issues. issueKey is the source and gets the outward verb (e.g. "blocks", "duplicates", "clones"); targetIssueKey gets the inward verb. Returns {ok, issueKey, targetKey, linkType}.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key of the source issue; gets the outward verb (e.g. "blocks"), e.g. PROJ-123 | |
| linkType | Yes | Link type name, e.g. "Blocks", "Relates", "Cloners", "Duplicate". | |
| targetIssueKey | Yes | Jira issue key of the target issue; gets the inward verb (e.g. "is blocked by"), e.g. PROJ-456 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, non-idempotent, open-world mutation. The description adds useful behavioral context by explaining outward versus inward verb direction and the returned object shape, though it does not mention duplicate-link behavior or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action and directional semantics front-loaded. The return-shape sentence is brief and informative without adding clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple three-parameter mutation, and the description covers the action, parameter directionality, and return shape. With annotations and full schema coverage, it is nearly complete, though it omits edge cases such as duplicate links or invalid link types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already well documented in the schema. The description reinforces the source/target directionality but adds little syntax or format detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Create a link between two Jira issues." It also clarifies the directionality of the link, which is the key semantic distinction for this operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through "Create a link," which distinguishes it from sibling tools like jcm_removeIssueLink and jcm_getIssueLinks. However, it does not explicitly state when to use this tool versus checking existing links or removing links.
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 SprintAIdempotent
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | No | Scrum board ID; only needed when the project has several scrum boards | |
| issueKey | Yes | Jira issue key, e.g. PROJ-123 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare 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.
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.
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.
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.
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.
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 TypeADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKeys | Yes | Jira issue keys to convert, all in the same project, e.g. ['PROJ-2', 'PROJ-3'] | |
| parentKey | No | Parent issue key when converting to a sub-task. Omit when converting to a standalone issue type. | |
| issueTypeName | Yes | Target issue type name, e.g. 'Sub-task' or 'Task' |
TDQS
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.
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.
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.
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.
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.
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Page body content (supports markdown formatting) | |
| title | Yes | Page title | |
| spaceId | Yes | Numeric Confluence space ID — take spaceId from jcm_getArticle, or resolve a space key via jcm_lookupSpace | |
| parentId | No | Parent page ID (optional) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | Issue summary/title | |
| issueType | Yes | Issue type name, e.g. Task, Bug, Story | |
| parentKey | No | Parent issue key for sub-tasks, e.g. PROJ-1 | |
| projectKey | Yes | Project key, e.g. PROJ | |
| description | No | Description (supports markdown formatting) |
TDQS
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.
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.
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.
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.
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.
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Version name, e.g. '1.0.0' | |
| projectKey | Yes | Jira project key, e.g. PROJ | |
| description | No | Version description | |
| releaseDate | No | Target release date (YYYY-MM-DD) |
TDQS
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.
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.
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.
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.
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.
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 IssueADestructiveIdempotent
Update fields on a Jira issue. Pass fields as {fieldName: value}. Description field accepts markdown. Returns {ok, key}.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Fields to update as {fieldName: value}. Example: {summary: 'New title', labels: ['bug']} | |
| issueKey | Yes | Jira issue key, e.g. PROJ-123 |
TDQS
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.
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.
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.
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.
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.
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 ArticleARead-onlyIdempotent
Fetch a Confluence page by ID. Returns {id, title, body (markdown), status, version, spaceId, parentId?}.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Confluence page ID |
TDQS
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.
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.
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.
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.
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.
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_getAttachmentDownloadLinkGet Jira Attachment Download LinkARead-onlyIdempotent
Resolve an attachment ID from jcm_getIssue to {attachmentId, filename, url, temporary: true}. Requires the server's Jira account to have permission to view the attachment. Download the sensitive temporary URL without Jira credentials using a local download tool; request a fresh URL after expiry. File bytes are not returned. Supports Jira Cloud's Atlassian media redirects.
| Name | Required | Description | Default |
|---|---|---|---|
| attachmentId | Yes | Numeric attachment ID from jcm_getIssue attachments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive and openWorld, so the bar is lower, and the description still adds real context: permission requirement, URL temporariness and expiry, that file bytes are not returned, and that Atlassian media redirects are handled. That is a lot of behavior an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight clauses with zero filler, front-loaded on what the tool resolves and what it returns before the caveats. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the returned object fields and the temporary flag, plus permission and expiry caveats. An agent has everything needed to call it and handle the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds provenance meaning by tying the ID to jcm_getIssue attachments, telling the agent where to obtain a valid value. It does not restate the numeric pattern, but that is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resolve an attachment ID') and names the source tool (jcm_getIssue) and the return shape. No sibling tool does attachment-link resolution, so the agent can tell this apart from all 22 siblings instantly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions ('Requires the server's Jira account to have permission to view the attachment') and post-call guidance ('download the temporary URL without Jira credentials using a local download tool; request a fresh URL after expiry'). It does not name an alternative tool or state when not to use it, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jcm_getCurrentUserGet Current UserARead-onlyIdempotent
Returns the authenticated Atlassian user's account info: accountId, displayName, email, active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and 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.
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.
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.
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.
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.
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 IssueARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, e.g. PROJ-123 |
TDQS
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.
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.
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.
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.
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.
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 ChangelogARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO-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`) | |
| issueKey | Yes | Jira issue key, e.g. PROJ-123 | |
| maxResults | No | Max entries to return (default 20, max 50) |
TDQS
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.
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.
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.
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.
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.
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_getIssueLinksGet Jira Issue LinksARead-onlyIdempotent
Get all links for a Jira issue. Returns flat array of [{id, type, inwardIssue?, outwardIssue?}].
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, e.g. PROJ-123 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds useful return structure, a flat array with optional inwardIssue/outwardIssue fields, which is valuable because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core action and followed by the return shape. Every sentence carries useful information without redundant prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one fully documented parameter and rich annotations, the definition is complete enough to select and invoke correctly. The missing output schema is compensated by the description's explicit return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter, issueKey, is fully documented in the schema with a pattern and example. The description adds no parameter-specific detail beyond the schema, so the high-coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource, 'Get all links for a Jira issue,' and states the return shape. This clearly distinguishes it from sibling mutation tools like jcm_addIssueLink and jcm_removeIssueLink, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative routing guidance. Usage is implied by the purpose: retrieve link data for a known issue key, while sibling add/remove tools handle mutations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jcm_getTransitionsGet Issue TransitionsARead-onlyIdempotent
Get available workflow transitions for a Jira issue. Returns [{id, name}].
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, e.g. PROJ-123 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and 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.
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.
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.
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.
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.
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 VersionsARead-onlyIdempotent
List all versions in a Jira project. Returns [{id, name, released, releaseDate}].
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Jira project key, e.g. PROJ |
TDQS
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.
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.
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.
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.
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.
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 SpaceARead-onlyIdempotent
Resolve a Confluence space key to its numeric ID for use with jcm_createArticle. Returns {id, key, name}.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceKey | Yes | Confluence space key |
TDQS
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.
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.
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.
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.
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.
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 UserARead-onlyIdempotent
Look up a Jira user by email address. Returns [{accountId, displayName, email, active}].
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address of the user to look up |
TDQS
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.
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.
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.
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.
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.
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 VersionADestructiveIdempotent
Mark a Jira version as released. Returns {ok, id, name}.
| Name | Required | Description | Default |
|---|---|---|---|
| versionId | Yes | Jira version ID (numeric) | |
| releaseDate | No | Release date (YYYY-MM-DD). Defaults to today. |
TDQS
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.
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.
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.
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.
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.
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_removeIssueLinkRemove Jira Issue LinkADestructiveIdempotent
Delete an issue link by its ID. Use jcm_getIssueLinks to find link IDs. Returns {ok, linkId}.
| Name | Required | Description | Default |
|---|---|---|---|
| linkId | Yes | Issue link ID (from jcm_getIssueLinks) |
TDQS
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 safety profile is covered. The description adds the return contract ({ok, linkId}), which the annotations cannot supply, but does not restate irreversibility or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: action, prerequisite, return value. Nothing is redundant and the operative verb is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the return fields. For a one-parameter destructive tool whose safety hints come from annotations, only edge cases (what happens on a missing/already-deleted link ID) are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single linkId parameter is documented with its source (jcm_getIssueLinks) and a numeric pattern. The description repeats that sourcing hint but adds no new syntax or format detail, matching the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete an issue link by its ID') that clearly separates it from the sibling addIssueLink and from getIssueLinks, which only reads. An agent can pick this tool without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to jcm_getIssueLinks to source the link ID, which is the main prerequisite for calling this tool. It stops short of stating when-not-to-use (e.g., prefer editIssue for changing links), so it is slightly under 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jcm_searchArticlesSearch Confluence ArticlesARead-onlyIdempotent
Search Confluence pages using CQL. Returns [{id, title, space, spaceKey, lastModified}].
| Name | Required | Description | Default |
|---|---|---|---|
| cql | Yes | Confluence Query Language string. Example: space = "KB" AND type = "page" AND text ~ "search term" | |
| maxResults | No | Max results (default 10, max 25) |
TDQS
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.
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.
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.
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.
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.
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 IssuesARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| jql | Yes | JQL query string | |
| maxResults | No | Max results to return (default 20, max 50) |
TDQS
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.
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.
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.
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.
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.
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 IssueADestructive
Move a Jira issue to a new workflow state. Use jcm_getTransitions first to get valid transition IDs. Returns {ok, key, transitionId}.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, e.g. PROJ-123 | |
| transitionId | Yes | Transition ID from jcm_getTransitions |
TDQS
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.
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.
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.
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.
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.
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 ArticleADestructiveIdempotent
Update a Confluence page. Pass current version number (auto-incremented). Returns {ok, id, version}.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Updated page body content (supports markdown formatting) | |
| title | Yes | Page title (required for updates) | |
| pageId | Yes | Confluence page ID | |
| version | Yes | Current version number (from jcm_getArticle). Will be incremented automatically. |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.10.3- First observed
jcm_addComment - First observed
jcm_addIssueLink - First observed
jcm_addToActiveSprint - First observed
jcm_convertIssueType - First observed
jcm_createArticle - First observed
jcm_createIssue - First observed
jcm_createVersion - First observed
jcm_editIssue - First observed
jcm_getArticle - First observed
jcm_getAttachmentDownloadLink - First observed
jcm_getCurrentUser - First observed
jcm_getIssue - First observed
jcm_getIssueChangelog - First observed
jcm_getIssueLinks - First observed
jcm_getTransitions - First observed
jcm_listVersions - First observed
jcm_lookupSpace - First observed
jcm_lookupUser - First observed
jcm_releaseVersion - First observed
jcm_removeIssueLink - First observed
jcm_searchArticles - First observed
jcm_searchIssues - First observed
jcm_transitionIssue - First observed
jcm_updateArticle
TDQS
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
Official Fibery MCP server: query and update your workspace from any AI client via OAuth.
One MCP server for all your work accounts: Slack, Teams, Google Chat chats and Jira/ClickUp tickets.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Free, no-key MCP server: token estimates, JSON Schema conversion, MCP configs, tool search.
Related MCP Servers
- AlicenseBqualityCmaintenance🚀 Token-efficient MCP server for Confluence. Reduces LLM costs by 76% via Markdown conversion. Supports listing, searching, and fetching pages.33MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for interacting with Jira Cloud instances. Enables issue management, JQL queries, project and sprint management, and batch operations via natural language interfaces.157 npm4MIT
- AlicenseBqualityCmaintenanceLightweight MCP server for Jira, Confluence, and Bitbucket — read, create, and update from your AI IDE.20MIT
- AlicenseAqualityDmaintenanceMinimal MCP server for Jira with configurable tools to reduce token usage, starting from ~150 tokens for basic issue retrieval.1MIT