Backlog MCP Server
Interact with Backlog through MCP tools spanning space, project, issue, wiki, Git, notification, and document management.
Inspect space, users, activities, stars, and the authenticated user.
Manage projects, project users, categories, custom fields, and issue types.
Search, count, create, update, delete, and comment on issues; handle attachments, related issues, priorities, resolutions, watching, versions, and milestones.
List, count, read, create, and update wiki pages.
List Git repositories and manage pull requests and PR comments.
List, count, reset, and mark notifications as read.
List document trees, documents, document comments, and add documents.
Operate via stdio or Streamable HTTP, with optional OAuth, toolsets, prefixes, field selection, and token limits.
Provides Git repository management capabilities, including listing repositories and accessing repository information within Backlog projects.
Enables pull request management including creating, updating, listing pull requests and adding or updating comments on pull requests across repositories.
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., "@Backlog MCP Serverlist open issues in the mobile app project"
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.
Backlog MCP Server
๐ ๆฅๆฌ่ชใงใฎใๅฉ็จใฌใคใ
A Model Context Protocol (MCP) server for interacting with the Backlog API. This server provides tools for managing projects, issues, wiki pages, and more in Backlog through AI agents like Claude Desktop / Cline / Cursor etc.
Features
Project tools (create, read, update, delete)
Issue tracking and comments (create, update, delete, list)
Version/Milestone management (create, read, update, delete)
Wiki page support
Git repository and pull request tools
Notification tools
Field selection for optimized responses
Token limiting for large responses
Related MCP server: Backlog MCP Server
Getting Started
Requirements
Docker
A Backlog account with API access
API key from your Backlog account
Option 1: Install via Docker
The easiest way to use this MCP server is through MCP configurations:
Open MCP settings
Navigate to the MCP configuration section
Add the following configuration:
{
"mcpServers": {
"backlog": {
"command": "docker",
"args": [
"run",
"--pull",
"always",
"-i",
"--rm",
"-e",
"BACKLOG_DOMAIN",
"-e",
"BACKLOG_API_KEY",
"ghcr.io/nulab/backlog-mcp-server"
],
"env": {
"BACKLOG_DOMAIN": "your-domain.backlog.com",
"BACKLOG_API_KEY": "your-api-key"
}
}
}
}Replace your-domain.backlog.com with your Backlog domain and your-api-key with your Backlog API key.
โ If you cannot use --pull always, you can manually update the image using:
docker pull ghcr.io/nulab/backlog-mcp-server:latestOption 2: Install via npx
You can also run the server directly using npx without cloning the repository. This is a convenient way to run the server without a full installation.
Open MCP settings
Navigate to the MCP configuration section
Add the following configuration:
{
"mcpServers": {
"backlog": {
"command": "npx",
"args": ["backlog-mcp-server"],
"env": {
"BACKLOG_DOMAIN": "your-domain.backlog.com",
"BACKLOG_API_KEY": "your-api-key"
}
}
}
}Replace your-domain.backlog.com with your Backlog domain and your-api-key with your Backlog API key.
Option 3: Manual Setup (Node.js)
Clone and install:
git clone https://github.com/nulab/backlog-mcp-server.git cd backlog-mcp-server pnpm install pnpm run buildCreate
.envfrom template and set required variables:
cp .env.example .envSet the following values in .env:
BACKLOG_DOMAIN=your-domain.backlog.comBACKLOG_API_KEY=your-api-key
Run locally:
pnpm run devSet your json to use as MCP
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["your-repository-location/build/index.js"],
"env": {
"BACKLOG_DOMAIN": "your-domain.backlog.com",
"BACKLOG_API_KEY": "your-api-key"
}
}
}
}HTTP transport (Streamable HTTP)
By default the server uses stdio. To run the MCP Streamable HTTP transport instead (JSON-RPC over HTTP, same tools as stdio), start with --transport http or set MCP_TRANSPORT=http.
pnpm run build
MCP_TRANSPORT=http MCP_HTTP_PORT=3333 node build/index.jsEndpoint:
POSTonhttp://<host>:<port><path>(default path/mcp). MCP2026-07-28has no standaloneGETstream endpoint; change notifications use asubscriptions/listenPOST whose response can remain an SSE stream. This server returns405forGETandDELETEon the MCP endpoint.Protocol: MCP
2026-07-28. The protocol is stateless: there is noinitializehandshake and nomcp-session-idheader. Clients send their metadata in_metaon every request and discover capabilities viaserver/discover. Streamable HTTP also requires theMcp-Methodheader (andMcp-Nameontools/call).Backward compatibility: Clients on
2025-11-25and earlier are still served over the same endpoint, statelessly. Because no session is kept, the 2025 session operations (GET/DELETEwith anmcp-session-id) answer405.Security: Default bind is
127.0.0.1. On a bare loopback bind,HostandOriginare both validated against the localhost set (DNS rebinding protection). Behind a reverse proxy, set--http-allowed-hoststo the public hostname; that turns off the localhostOrigindefault, since a browser client'sOriginis its own site and never this server's hostname. Add--http-allowed-originsto restrict which client origins may reach the server. Do not expose the HTTP port to untrusted networks without authentication and TLS; it allows full use of your Backlog API key via MCP tools.
Environment variables (CLI flags override when both are set):
Variable | Description |
|
|
| Bind address (default |
| Port (default |
| URL path (default |
|
|
| Comma-separated allowed |
| Comma-separated allowed |
OAuth 2.0 Authentication (Remote MCP)
When exposing the MCP server over a network, you can enable OAuth 2.0 authentication so that each user authenticates with their own Backlog account instead of sharing a single API key.
The server implements the MCP Third-Party Authorization Flow by acting as both an OAuth authorization server (for MCP clients) and an OAuth client (for Backlog).
Prerequisites
Register an OAuth application in your Backlog space:
Go to your Backlog space โ Personal Settings โ Register Application
Set the Redirect URI to
<MCP_SERVER_BASE_URL>/callback(e.g.,https://mcp.example.com/callback)Note the Client ID and Client Secret
Set the following environment variables (in addition to
BACKLOG_DOMAIN):
Variable | Description |
| OAuth Client ID from your Backlog application |
| OAuth Client Secret from your Backlog application |
| Public URL of your MCP server (e.g., |
Note:
BACKLOG_API_KEYis not required when OAuth is enabled โ each user authenticates with their own Backlog account.
Example
BACKLOG_DOMAIN=your-space.backlog.com \
BACKLOG_OAUTH_CLIENT_ID=your-client-id \
BACKLOG_OAUTH_CLIENT_SECRET=your-client-secret \
MCP_SERVER_BASE_URL=https://mcp.example.com \
node build/index.js --transport http --http-host 0.0.0.0 --http-port 3333 \
--http-allowed-hosts mcp.example.com--http-allowed-hosts is required in practice when binding to 0.0.0.0: without it there is no DNS rebinding protection, and the server logs a warning at startup.
The server automatically exposes the following OAuth endpoints when OAuth is enabled:
Endpoint | Description |
| OAuth Authorization Server Metadata (RFC 8414) |
| OAuth Protected Resource Metadata (RFC 9728) |
| Dynamic Client Registration (RFC 7591) |
| Authorization endpoint (redirects to Backlog OAuth) |
| Backlog OAuth callback |
| Token endpoint (authorization code & refresh token) |
MCP clients that support the MCP authorization specification will use these endpoints automatically.
POST /register restricts which redirect URIs a client may register. A loopback
URI (http://localhost, http://127.0.0.1, http://[::1]) is how an app running
on the user's machine receives the authorization code, and is accepted from a
client that declares "application_type": "native" โ or, when the field is
absent, from one whose redirect URIs are all loopback. A client declaring
"application_type": "web", or mixing a remote https: URI with a loopback one
without declaring itself, is rejected with invalid_client_metadata.
Limitations:
OAuth mode currently supports a single Backlog organization. It is not compatible with the multi-organization configuration.
Client registrations and tokens are stored in memory and will be lost on server restart.
Tool Configuration
You can selectively enable or disable specific toolsets using the --enable-toolsets command-line flag or the ENABLE_TOOLSETS environment variable. This allows better control over which tools are available to the AI agent and helps reduce context size.
Available Toolsets
The following toolsets are available (enabled by default when "all" is used):
Toolset | Description |
| Tools for managing Backlog space settings and general information |
| Tools for managing projects, categories, custom fields, and issue types |
| Tools for managing issues and their comments, version milestones |
| Tools for managing wiki pages |
| Tools for managing Git repositories and pull requests |
| Tools for managing user notifications |
| Tools for viewing documents and document trees |
Specifying Toolsets
You can control toolset activation in the following ways:
Using via CLI:
--enable-toolsets space,project,issueOr via environment variable:
ENABLE_TOOLSETS="space,project,issue"If all is specified, all available toolsets will be enabled. This is also the default behavior.
Using selective toolsets can be helpful if the toolset list is too large for your AI agent or if certain tools are causing performance issues. In such cases, disabling unused toolsets may improve stability.
๐งฉ Tip:
projecttoolset is highly recommended, as many other tools rely on project data as an entry point.
Available Tools
Toolset: space
Tools for managing Backlog space settings and general information.
get_space: Returns information about the Backlog space.get_users: Returns list of users in the Backlog space.get_myself: Returns information about the authenticated user.
Toolset: project
Tools for managing projects, categories, custom fields, and issue types.
get_project_list: Returns list of projects.add_project: Creates a new project.get_project: Returns information about a specific project.get_project_users: Returns list of users in a specific project.update_project: Updates an existing project.
Toolset: issue
Tools for managing issues, their comments, and related items like priorities, categories, custom fields, issue types, resolutions, and watching lists.
get_issue: Returns information about a specific issue.get_issue_attachment: Downloads one attachment of an issue. Returns it as image or embedded resource content, or as base64 withformat: "base64".get_issues: Returns list of issues.count_issues: Returns count of issues.add_issue: Creates a new issue in the specified project.update_issue: Updates an existing issue.delete_issue: Deletes an issue.get_issue_comments: Returns list of comments for an issue.add_issue_comment: Adds a comment to an issue.update_issue_comment: Updates a comment on an issue.get_related_issues: Returns list of issues related to a specific issue.add_related_issue: Relates an issue to another issue.remove_related_issue: Removes the relation between an issue and a related issue.get_priorities: Returns list of priorities.get_categories: Returns list of categories for a project.add_category: Creates a new category for a project.get_custom_fields: Returns list of custom fields for a project.get_issue_types: Returns list of issue types for a project.get_resolutions: Returns list of issue resolutions.get_watching_list_items: Returns list of watching items for a user.get_watching_list_count: Returns count of watching items for a user.add_watching: Adds a new watch to an issue.update_watching: Updates an existing watch note.delete_watching: Deletes a watch from an issue.mark_watching_as_read: Marks a watch as read.get_version_milestone_list: Returns list of version milestones for a project.add_version_milestone: Creates a new version milestone for a project.update_version_milestone: Updates an existing version milestone.delete_version_milestone: Deletes a version milestone.
Toolset: wiki
Tools for managing wiki pages.
get_wiki_pages: Returns list of Wiki pages.get_wikis_count: Returns count of wiki pages in a project.get_wiki: Returns information about a specific wiki page.add_wiki: Creates a new wiki page.
Toolset: git
Tools for managing Git repositories and pull requests.
get_git_repositories: Returns list of Git repositories for a project.get_git_repository: Returns information about a specific Git repository.get_pull_requests: Returns list of pull requests for a repository.get_pull_requests_count: Returns count of pull requests for a repository.get_pull_request: Returns information about a specific pull request.add_pull_request: Creates a new pull request.update_pull_request: Updates an existing pull request.get_pull_request_comments: Returns list of comments for a pull request.add_pull_request_comment: Adds a comment to a pull request.update_pull_request_comment: Updates a comment on a pull request.
Toolset: notifications
Tools for managing user notifications.
get_notifications: Returns list of notifications.get_notifications_count: Returns count of notifications.reset_unread_notification_count: Resets unread notification count.mark_notification_as_read: Marks a notification as read.
Toolset: document
Tools for managing documents and document trees in Backlog projects.
get_document_tree: Returns the hierarchical tree of documents for a project, including folders and neget_documents: Returns a flat list of documents in a project or folder.get_document_comments: Returns the comments on a document, including their replies.get_document: Returns detailed information about a specific document, including metadata, content, an
Usage Examples
Once the MCP server is configured in AI agents, you can use the tools directly in your conversations. Here are some examples:
Listing Projects
Could you list all my Backlog projects?Creating a New Issue
Create a new bug issue in the PROJECT-KEY project with high priority titled "Fix login page error"Getting Project Details
Show me the details of the PROJECT-KEY projectWorking with Git Repositories
List all Git repositories in the PROJECT-KEY projectManaging Pull Requests
Show me all open pull requests in the repository "repo-name" of PROJECT-KEY projectCreate a new pull request from branch "feature/new-feature" to "main" in the repository "repo-name" of PROJECT-KEY projectWatching Items
Show me all items I'm watchingOverriding Tool Descriptions
You can override the descriptions of tools by creating a .backlog-mcp-serverrc.json file in your home directory.
Almost all of these strings are the tool and parameter descriptions the model reads when it decides which tool to call and how to fill in its arguments, so overriding them is a way to steer tool selection โ for example to disambiguate two similar tools, or to add a rule your team follows โ rather than a way to change the language of the answers you get. The model answers in whatever language you ask in, regardless of the language these descriptions are written in.
A small number of keys are validation error messages instead (for example PROJECT_ID_OR_KEY_REQUIRED). Those are returned in the tool result when a call is rejected, so they can reach you by way of the model's reply.
The file should contain a JSON object with the tool names as keys and the new descriptions as values.
For example:
{
"TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "An alternative description",
"TOOL_CREATE_PROJECT_DESCRIPTION": "Create a new project in Backlog"
}When the server starts, it determines the final description for each tool based on the following priority:
Environment variables (e.g.,
BACKLOG_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION)Entries in
.backlog-mcp-serverrc.json- Supported configuration file formats: .json, .yaml, .ymlBuilt-in defaults
Empty or non-string values are ignored at every level, and the built-in default is used instead.
Sample config:
{
"mcpServers": {
"backlog": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"BACKLOG_DOMAIN",
"-e",
"BACKLOG_API_KEY",
"-v",
"/yourcurrentdir/.backlog-mcp-serverrc.json:/root/.backlog-mcp-serverrc.json:ro",
"ghcr.io/nulab/backlog-mcp-server"
],
"env": {
"BACKLOG_DOMAIN": "your-domain.backlog.com",
"BACKLOG_API_KEY": "your-api-key"
}
}
}
}Exporting Current Descriptions
You can export the current descriptions (including any overrides) by running the binary with the --export-descriptions flag. This flag was previously called --export-translations; the old name still works but prints a deprecation notice and will be removed in a future release.
This prints every key that is resolved while the tool list is built, with its current value, including any customizations you have made. That covers all tool and parameter descriptions, and it is the practical way to discover key names.
It does not cover the validation error messages, because those keys are only resolved when a call is actually rejected. They are still overridable by the same rules; you just have to read them out of the source.
Example:
docker run -i --rm ghcr.io/nulab/backlog-mcp-server node build/index.js --export-descriptionsor
npx github:nulab/backlog-mcp-server --export-descriptionsUsing Environment Variables
Alternatively, you can override tool descriptions via environment variables.
The environment variable names are based on the tool keys, prefixed with BACKLOGMCP and written in uppercase.
Example: To override the TOOL_ADD_ISSUE_COMMENT_DESCRIPTION:
{
"mcpServers": {
"backlog": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "BACKLOG_DOMAIN",
"-e", "BACKLOG_API_KEY",
"-e", "BACKLOG_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION"
"ghcr.io/nulab/backlog-mcp-server"
],
"env": {
"BACKLOG_DOMAIN": "your-domain.backlog.com",
"BACKLOG_API_KEY": "your-api-key",
"BACKLOG_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "An alternative description"
}
}
}
}The server loads the config file synchronously at startup.
Environment variables always take precedence over the config file.
Advanced Features
Tool Name Prefixing
Add prefix to tool names with:
--prefix backlog_or via environment variable:
PREFIX="backlog_"This is especially useful if you're using multiple MCP servers or tools in the same environment and want to avoid name collisions. For example, get_project can become backlog_get_project to distinguish it from similarly named tools provided by other services.
Response Optimization & Token Limits
Response Compaction
Tool results are compacted before they are returned. This is always on, and applies to every tool except get_issue_attachment, which returns the file itself:
A user nested in a result (
createdUser,assignee,stars[].presenter, a notification'ssender, โฆ) is reduced toid,userIdandname. A user that is the result โget_myself, the items ofget_usersorget_project_usersโ is returned whole.A nested project (each activity's and notification's
project) is reduced toid,projectKeyandname, and a nested issue (a pull request's or notification'sissue) toid,issueKey,summaryandstatus. A project or issue that is the result โget_project,get_issue, the items ofget_project_listorget_issuesโ is returned whole, and so is the issue of each item ofget_watching_list_items.Nested entities (statuses, issue types, categories, milestones, custom field items, โฆ) omit
coloranddisplayOrder, and nested milestones also omitdescription. Tools that list these themselves (get_issue_types,get_categories,get_version_milestone_list, โฆ) return them whole.Fields that are
null, an empty string or an empty array are omitted.0,falseand{}are kept. This also applies to a field named infields: an empty one is left out rather than returned as empty.JSON is returned without indentation.
Field Selection
--optimize-responseOr environment variable:
OPTIMIZE_RESPONSE=1Tools that return a list then take an optional fields parameter: a list of
top-level field names from that tool's own result, published as an enum so a name
the tool does not have is rejected rather than ignored. Tools that return a single
record do not get it โ the parameter costs schema on every session, and one record
has almost nothing to trim.
get_project(projectIdOrKey: "PROJECT-KEY", fields: ["name", "key", "description"])Omitting fields returns the whole result. Selection is one level deep: naming an
object or array field returns it whole.
Benefits:
Reduce response size by requesting only needed fields
Focus on specific data points
Improve performance for large responses
Token Limiting
Large responses are automatically limited to prevent exceeding token limits:
Default limit: 50,000 tokens
Configurable via
MAX_TOKENSenvironment variableResponses exceeding the limit are truncated with a message
You can change this using:
MAX_TOKENS=10000If a response exceeds the limit, it will be truncated with a warning.
Note: This is a best-effort mitigation, not a guaranteed enforcement.
Logging
The server logs to stderr (stdout carries the JSON-RPC stream on the stdio transport).
Variable | Description |
|
|
NODE_ENV still selects the output format: any value other than production switches to human-readable pino-pretty output when that package is available. Use LOG_LEVEL, not NODE_ENV, to change how much is logged, so that a deployment keeps structured JSON:
pino-pretty is a development dependency, so neither the published npm package nor the container image carries a copy. In those, logs are structured JSON whatever NODE_ENV says, and LOG_LEVEL is the only setting that changes the output.
LOG_LEVEL=info node build/index.js --transport httpFull Custom Configuration Example
This section demonstrates advanced configuration using multiple environment variables. These are experimental features and may not be supported across all MCP clients. This is not part of the MCP standard specification and should be used with caution.
{
"mcpServers": {
"backlog": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"BACKLOG_DOMAIN",
"-e",
"BACKLOG_API_KEY",
"-e",
"MAX_TOKENS",
"-e",
"OPTIMIZE_RESPONSE",
"-e",
"PREFIX",
"-e",
"ENABLE_TOOLSETS",
"ghcr.io/nulab/backlog-mcp-server"
],
"env": {
"BACKLOG_DOMAIN": "your-domain.backlog.com",
"BACKLOG_API_KEY": "your-api-key",
"MAX_TOKENS": "10000",
"OPTIMIZE_RESPONSE": "1",
"PREFIX": "backlog_",
"ENABLE_TOOLSETS": "space,project,issue"
}
}
}
}Development
Running Tests
pnpm testAdding New Tools
Create a new file in
src/tools/following the pattern of existing toolsCreate a corresponding test file
Add the new tool to
src/tools/tools.tsBuild and test your changes
Command Line Options
The server supports several command line options:
--transport stdio|http: MCP transport (default: stdio). Usehttpfor Streamable HTTP.--http-host,--http-port,--http-path: HTTP bind address, port, and path (defaults:127.0.0.1,3333,/mcp).--http-json-response: Prefer JSON responses over SSE. Applies to2026-07-28clients only; the backward-compatible2025-11-25path is served with the SDK's default response shaping.--http-allowed-hosts: Comma-separated allowedHosthostnames (port-agnostic). Needed when binding to all interfaces, or on a loopback bind behind a reverse proxy.--http-allowed-origins: Comma-separated allowedOriginhostnames for browser-based clients. Defaults to the localhost set on a bare loopback bind, and to noOrigincheck otherwise.--export-descriptions: Export the description keys and values resolved when building the tool list. Was named--export-translations; that spelling still works as a deprecated alias and will be removed in a future release--optimize-response: Add afieldsparameter to each tool for selecting which result fields to return--max-tokens=NUMBER: Set maximum token limit for responses--prefix=STRING: Optional string prefix to prepend to all tool names (default: "")--enable-toolsets <toolsets...>: Specify which toolsets to enable (comma-separated or multiple arguments). Defaults to "all". Example:--enable-toolsets space,projector--enable-toolsets issue --enable-toolsets gitAvailable toolsets:space,project,issue,wiki,git,notifications.
Example:
node build/index.js --optimize-response --max-tokens=100000 --prefix="backlog_" --enable-toolsets space,issueHTTP example:
node build/index.js --transport http --http-port 3333 --http-path /mcpMulti-Organization Support
This server can be configured to access multiple Backlog organizations from a single MCP server instance.
Configuration
Configure one env pair per organization and set a default organization:
BACKLOG_DEFAULT_ORG=COMPANY_A
BACKLOG_ORG_COMPANY_A_DOMAIN=company-a.backlog.com
BACKLOG_ORG_COMPANY_A_API_KEY=your-company-a-api-key
BACKLOG_ORG_COMPANY_B_DOMAIN=company-b.backlog.com
BACKLOG_ORG_COMPANY_B_API_KEY=your-company-b-api-keyThis works whether the variables come from a local .env, your shell environment, or an MCP client config env block.
Example MCP config:
{
"env": {
"BACKLOG_DEFAULT_ORG": "COMPANY_A",
"BACKLOG_ORG_COMPANY_A_DOMAIN": "company-a.backlog.com",
"BACKLOG_ORG_COMPANY_A_API_KEY": "your-company-a-api-key",
"BACKLOG_ORG_COMPANY_B_DOMAIN": "company-b.backlog.com",
"BACKLOG_ORG_COMPANY_B_API_KEY": "your-company-b-api-key"
}
}If no multi-organization env vars are set, the server falls back to the existing single-organization configuration:
BACKLOG_DOMAIN=your-domain.backlog.com
BACKLOG_API_KEY=your-api-keyTool Usage
When multi-organization env vars are configured, all normal tools accept an optional organization input field. When provided, the tool call is routed to that Backlog organization.
In single-organization mode the field is not published, since there would be only one organization to route to. Omitting it keeps roughly 8 KB of tool schema out of every tools/list response.
Examples:
{
"organization": "COMPANY_B",
"projectKey": "PROJECT"
}If organization is omitted:
the organization named by
BACKLOG_DEFAULT_ORGis usedif multi-organization env vars are present and
BACKLOG_DEFAULT_ORGis missing, the server fails at startup
Organization Discovery
In multi-organization mode the server provides a list_organizations tool that returns the configured organization names, their domains, and which one is the default. It is not registered in single-organization mode.
Example response:
[
{
"name": "COMPANY_A",
"domain": "company-a.backlog.com",
"isDefault": true
},
{
"name": "COMPANY_B",
"domain": "company-b.backlog.com",
"isDefault": false
}
]Notes
For multi-org mode, every organization must define both
BACKLOG_ORG_<NAME>_DOMAINandBACKLOG_ORG_<NAME>_API_KEY.The
<NAME>part is the organization name exposed through theorganizationtool input andlist_organizations.
License
This project is licensed under the MIT License.
Please note: This tool is provided under the MIT License without any warranty or official support.
Use it at your own risk after reviewing the contents and determining its suitability for your needs.
If you encounter any issues, please report them via GitHub Issues.
Available Tools
64 toolsadd_categoryC
Creates a new category for a project
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the category | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the mutation profile is known. The description adds only 'for a project' and says nothing an agent needs for a non-idempotent create: duplicate-name behavior, permission requirements, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no waste. It is efficient but borders on under-specified rather than tight.
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?
Only 'name' is required per the schema, yet the description implies project scoping is inherent to the operation, leaving ambiguity about whether projectId/projectKey are mandatory and which to use (ID vs key). For a create tool with no output schema, that ambiguity should be resolved in the description.
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 schema fully documents name, projectId, and projectKey. The phrase 'for a project' gestures at the project scoping parameters but adds no syntax, format, or requiredness guidance beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A clear verb+resource statement: creates a category, scoped to a project. It does not distinguish itself from the sibling get_categories or explain how categories relate to issues/projects, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to create a category versus reading existing ones with get_categories, and no prerequisites or preconditions (e.g., does the category already exist?). The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_documentC
Adds a new document to the specified project.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | No | Emoji for the document | |
| title | No | Title of the document | |
| addLast | No | Add to the end of the list | |
| content | No | Content of the document | |
| parentId | No | Parent document ID | |
| projectId | Yes | Project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, so the mutation profile is covered. The description adds nothing beyond that โ it doesn't mention ordering behavior (addLast), parent/child nesting implications, or what happens if required content is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. Its brevity is appropriate in form, though the space saved is not spent on any useful detail.
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 6-parameter creation tool with no output schema, the description should explain document hierarchy behavior (parentId vs projectId) and what is returned on success. None of that is present, leaving the agent to infer nontrivial semantics from parameter names alone.
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 six parameters including projectId, parentId, and addLast are documented in the schema itself. The description adds no supplementary meaning about how parameters interact (e.g., parentId vs projectId placement). Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Adds') and resource ('document') scoped to a project, so an agent knows the operation. However, it offers no differentiation from siblings like add_wiki or add_issue, which also create content inside a project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus add_wiki or add_issue, and no prerequisites or exclusions are mentioned. The agent must infer usage purely from the name and the surrounding sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_issueC
Creates a new issue in the specified project.
| Name | Required | Description | Default |
|---|---|---|---|
| dueDate | No | Scheduled due date (yyyy-MM-dd) | |
| summary | Yes | Summary of the issue | |
| projectId | Yes | Project ID | |
| startDate | No | Scheduled start date (yyyy-MM-dd) | |
| versionId | No | Version IDs | |
| assigneeId | No | User ID of the assignee | |
| categoryId | No | Category IDs | |
| priorityId | Yes | Priority ID | |
| actualHours | No | Actual work hours | |
| description | No | Creates a new issue in the specified project. | |
| issueTypeId | Yes | Issue type ID | |
| milestoneId | No | Milestone IDs | |
| attachmentId | No | Attachment IDs | |
| customFields | No | List of custom fields to set on the issue | |
| parentIssueId | No | Parent issue ID | |
| estimatedHours | No | Estimated work hours | |
| notifiedUserId | No | User IDs to notify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, idempotentHint=false, and readOnlyHint=false, so the description carries a lighter burden. It adds nothing beyond them โ notably it omits that non-idempotency means repeated calls create duplicate issues, and it says nothing about required permissions or side effects (notifications to notifiedUserId, attachments).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is good structure. But it is under-specified rather than concise: for a 17-parameter creation tool it leaves the agent to infer nearly everything.
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 17 parameters, four of them opaque numeric IDs, and no output schema, the description should explain prerequisites and what comes back (e.g. the new issue ID). Instead it restates the title and nothing more; the full disclosure burden falls on the schema alone.
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% across all 17 parameters, so baseline 3 applies. The description contributes no additional meaning about required IDs, date formats, or how customFields values map to field types beyond what the schema already documents.
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 ('Creates a new issue') plus the scoping container ('specified project'), so the agent knows exactly what the tool does. It stops short of differentiating itself from siblings like add_issue_comment or update_issue, but the core action 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?
No guidance on when to use this versus update_issue, add_issue_comment, or add_related_issue. Nothing tells the agent that issueTypeId and priorityId must first be discovered via get_issue_types and get_priorities, which is the main practical prerequisite for a successful call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_issue_commentC
Adds a comment to an issue
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Comment content | |
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') | |
| attachmentId | No | Attachment IDs | |
| notifiedUserId | No | User IDs to notify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation semantics (readOnlyHint=false, destructiveHint=false, non-idempotent, closed-world), and the description is consistent with them, so there is no contradiction. But it adds nothing beyond that boilerplate: it doesn't say whether the comment is attributed to the caller, whether attachment IDs must be pre-uploaded, or what notification side effects the notifiedUserId list triggers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the action front-loaded, so there is nothing wasteful. But the brevity comes at the cost of the guidance that would make the sentence earn its place for a five-parameter mutation tool.
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?
Annotations cover the safety profile and the schema fully documents all five params, so much of the burden is already carried. Still, for a write tool with no output schema and an issueId/issueKey ambiguity, the description is thinner than ideal โ it never addresses identifier choice or the attach/notify 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%, so the schema documents each parameter and the baseline is 3. The description adds nothing about the key ambiguity left in the schema: only content is required, yet the tool must be disambiguated by either issueId or issueKey, and the description never says which to supply or whether they are interchangeable.
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 concrete verb and resource ("Adds a comment to an issue"), so the action is unambiguous. However, it does nothing to separate itself from near-identical siblings such as add_pull_request_comment and update_issue_comment, leaving the agent to infer the difference from the names alone.
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 update_issue_comment or add_pull_request_comment, and no mention of prerequisites (e.g., that an issue identifier must be supplied). The agent gets a purpose but no selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_projectC
Creates a new project
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Project key | |
| name | Yes | Project name | |
| chartEnabled | No | Whether to enable chart (default: false) | |
| subtaskingEnabled | No | Whether to enable subtasking (default: false) | |
| textFormattingRule | No | Text formatting rule (default: 'backlog') | |
| projectLeaderCanEditProjectLeader | No | Whether project leaders can edit other project leaders (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that โ it doesn't mention that repeated calls with the same key may fail, what gets created (default settings), or auth requirements for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, though it borders on under-specification rather than tightness. Nothing is padded, but there is also almost nothing there.
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 six-parameter creation tool with no output schema, the description leaves key gaps: it doesn't say what is returned (e.g., the new project's identifier needed for subsequent calls) or what constraints apply to the required key. Annotations cover the safety profile only, so the description should carry more of the load here.
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 six parameters including the required name/key pair and defaults for chartEnabled, subtaskingEnabled, and textFormattingRule are already documented. The description contributes no additional parameter meaning, which is the expected baseline 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 gives a specific verb and resource ("Creates a new project"), which unambiguously tells the agent this is the create operation for projects. It doesn't explicitly contrast with update_project or get_project_list, but the name plus phrasing already make 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?
There is no guidance on when to use this versus alternatives, no prerequisites (permissions, existing project keys, space selection), and no note about what to do if the key already exists. The agent must infer everything from the one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_pull_requestC
Creates a new pull request
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | Base branch name | |
| branch | Yes | Branch name to merge | |
| repoId | No | Repository ID | |
| issueId | No | Issue ID to link | |
| summary | Yes | Summary of the pull request | |
| repoName | No | Repository name | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| assigneeId | No | User ID of the assignee | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| description | Yes | Creates a new pull request | |
| notifiedUserId | No | User IDs to notify |
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=false, so safety and idempotency are covered structurally. The description adds nothing on top: it does not mention required permissions, what happens when branch/base are invalid, whether duplicate PRs error out, or what the issueId linkage does. With 11 parameters and a mutation, this is a thin description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, but it is under-specified rather than genuinely concise. Front-loading is trivial here because there is only one clause.
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 an 11-parameter mutation with no output schema, the description omits the return value, the meaning of the two required branch parameters versus the optional repo/project identifiers, and the effect of linking an issue. An agent must reconstruct all of this from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is documented inline (including the base/branch distinction and the repoId vs repoName vs projectId/projectKey alternatives). The description contributes no additional parameter meaning, which is acceptable at baseline 3 given full schema coverage.
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 'Creates a new pull request' merely restates the tool name add_pull_request in prose, adding no specificity about scope, target system, or outcome. It does differentiate implicitly from update_pull_request/get_pull_request through the verb 'creates', but that distinction comes from the name itself, not the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_pull_request or when a PR is the right artifact versus an issue comment or linked issue. No prerequisites, no context about which repo/project parameters are needed in which combination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_pull_request_commentA
Adds a comment to a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Pull request number | |
| repoId | No | Repository ID | |
| content | Yes | Comment content | |
| repoName | No | Repository name | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| notifiedUserId | No | User IDs to notify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as a non-read-only, non-idempotent, non-destructive, closed-world operation, and the description's "Adds" is consistent with that. However, the description adds no further behavioral context such as notification effects 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?
The description is a single front-loaded sentence with no wasted words. It is appropriately sized for the tool's apparent simplicity.
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 schema fully documents the parameters and the annotations cover safety behavior, so the description is minimally sufficient. It does not explain the notification parameter's effect or clarify when this should be used instead of related comment tools, leaving some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in the input schema. The description adds no parameter-specific meaning beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Adds a comment to a pull request." This clearly distinguishes it from sibling operations such as get_pull_request_comments, update_pull_request_comment, and add_issue_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. The intended use is only implied by the tool name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_version_milestoneC
Creates a new version milestone
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Version name | |
| projectId | No | Project ID | |
| startDate | No | Start date of the version | |
| projectKey | No | Project key | |
| description | No | Creates a new version milestone | |
| releaseDueDate | No | Release due date of the version |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so an agent knows this writes and is not idempotent, yet the description never warns that repeated calls may create duplicate milestones nor describes permission requirements. For a non-idempotent mutation with no output schema, the description adds no behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, but it is under-specified rather than economical; there is room for one more sentence of routing guidance that would earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, non-idempotent creation tool with no output schema, the description omits how the project is scoped (projectId vs projectKey), what happens on name collision, and what is returned. That is more than an agent can safely infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with six documented parameters, so the schema carries the semantics and baseline 3 applies. The tool description provides no additional meaning, such as when to use projectId versus projectKey or expected date formats.
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 phrase 'Creates a new version milestone' names a verb and a resource, so the basic action is legible, but it adds nothing beyond the tool name expanded into a sentence and never distinguishes this from update_version_milestone or get_version_milestone_list. It sits at the line between a clear purpose and a tautology.
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 statement of when to use this tool versus its siblings, no prerequisite (e.g. a project must be selected first), and no mention of the update/get counterparts in the sibling list. Usage is only inferable from the verb 'creates'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_watchingC
Adds a new watch to an issue
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note for the watch | |
| issueIdOrKey | Yes | Issue ID or issue key (e.g., 1234 or "PROJECT-123") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is covered and the description does not contradict it. However, the description adds no behavioral context beyond the annotations โ it does not say that the watch is per-current-user, what happens if the issue is already watched (non-idempotent implies duplication), or whether the owner gets 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?
A single clause with the verb front-loaded and zero filler. It is well structured, though its brevity stems partly from under-specification rather than from disciplined editing.
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 only two parameters, no output schema, and annotations covering safety, the definition is nearly minimal. It still omits what a "watch" is in this product (a subscription to an issue's notifications), who the watcher is, and what a successful response looks like โ gaps that matter for a non-idempotent create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both issueIdOrKey and note documented in the schema (including ID/key format and the note's optionality), so this is the baseline case. The description adds nothing about parameter meaning, which is acceptable but not additive.
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 ("Adds a new watch") plus the scope ("to an issue"), so an agent can tell this is a watch-creation action rather than a generic write. It does not differentiate itself from the very close siblings update_watching, delete_watching, or add_issue, which would be needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives, despite three sibling tools operating on the same watch resource (get_watching_list_items, update_watching, delete_watching). The agent is left to infer that this is the create path and nothing else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_wikiC
Creates a new wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the wiki page | |
| content | Yes | Content of the wiki page | |
| projectId | Yes | Project ID | |
| mailNotify | No | Whether to send notification emails (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the mutation profile is covered. The description adds nothing beyond thatโno note on email notification side effects (the mailNotify param implies one) or whether duplicates are created.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste, but it is under-specified rather than conciseโthere is no front-loaded scope or key constraint to anchor the call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description says nothing about the returned page, whether the email notification is triggered by default, or what happens on name collision. Annotations carry the safety profile, but the behavioral context is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters including mailNotify are already documented in the schema. The description adds no parameter meaning, which meets the baseline 3 for high-coverage schemas.
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 ('Creates') and resource ('wiki page'), so the action is identifiable. But it does nothing to distinguish itself from siblings like update_wiki or add_document, and reads close to a restatement of the tool 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 indication of when to use this versus update_wiki, get_wiki, or add_document, and no prerequisites (project scope, required permissions) are mentioned. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_issuesCRead-only
Returns count of issues
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | Keyword to search for in issues | |
| statusId | No | Status IDs | |
| projectId | No | Project IDs | |
| versionId | No | Version IDs | |
| assigneeId | No | Assignee user IDs | |
| categoryId | No | Category IDs | |
| priorityId | No | Priority IDs | |
| issueTypeId | No | Issue type IDs | |
| milestoneId | No | Milestone IDs | |
| createdSince | No | Created since (yyyy-MM-dd) | |
| createdUntil | No | Created until (yyyy-MM-dd) | |
| customFields | No | Custom field filters (text, numeric, date, or list) | |
| dueDateSince | No | Due date since (yyyy-MM-dd) | |
| dueDateUntil | No | Due date until (yyyy-MM-dd) | |
| resolutionId | No | Resolution IDs | |
| updatedSince | No | Updated since (yyyy-MM-dd) | |
| updatedUntil | No | Updated until (yyyy-MM-dd) | |
| createdUserId | No | Created user IDs | |
| parentIssueId | No | Parent issue IDs | |
| startDateSince | No | Start date since (yyyy-MM-dd) | |
| startDateUntil | No | Start date until (yyyy-MM-dd) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it says nothing about how the count is computed, whether filters combine with AND semantics, or what the response looks like (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?
A single sentence with no waste, but its brevity reflects under-specification rather than disciplined concision. There is nothing to front-load because nothing was said.
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 tool with 21 optional filter parameters and no output schema, the description leaves critical gaps: it never explains that the parameters are filters narrowing the count, nor describes the return shape or how an empty filter set behaves. This is inadequate for the tool's complexity.
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% across all 21 parameters, so the schema carries the full burden and baseline 3 applies. The description contributes no additional meaning about how filters, date ranges, or custom fields affect the count.
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?
"Returns count of issues" states a verb and resource, but it essentially restates the tool name (count_issues) and gives no scope or differentiation from the sibling get_issues. An agent can infer it counts rather than lists, but nothing more.
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 instead of get_issues, or what tradeoffs apply (e.g., use count for totals/pagination, get_issues for details). The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_notificationsCRead-only
Returns count of notifications
| Name | Required | Description | Default |
|---|---|---|---|
| alreadyRead | Yes | Whether to include already read notifications | |
| resourceAlreadyRead | Yes | Whether to include notifications for already read resources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is fully covered structurally. The description adds nothing beyond the purpose statement โ it does not say what the count represents (total vs unread vs filtered), nor how the two boolean flags change the result, nor the response shape.
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 waste. It is appropriately sized, though the terseness leaves the description thin rather than dense with useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter counting tool with no output schema, the description should at minimum clarify what is being counted (unread notifications by default, presumably) and what happens with the boolean filters. Those gaps mean an agent can invoke it but may misinterpret the returned number.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both required booleans are documented in the schema, so the baseline of 3 applies. The description contributes no additional meaning about how alreadyRead and resourceAlreadyRead interact to shape the count.
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 ('Returns count of notifications'), which is clear enough to distinguish a counting operation from a listing operation. However, it never contrasts with get_notifications or reset_unread_notification_count, so the sibling distinction is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_notifications (which presumably returns the notifications themselves) or reset_unread_notification_count. The agent must infer which of the three notification tools produces a count.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_issueCDestructiveIdempotent
Deletes an issue
| Name | Required | Description | Default |
|---|---|---|---|
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally; the description adds nothing beyond that โ no statement that deletion is permanent, whether comments/attachments go with it, or what permissions are needed. It does not contradict the annotations, but it contributes zero behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a three-word sentence with no waste, but the brevity is under-specification rather than efficiency: there is no front-loaded scope, consequence, or identifier guidance an agent could act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible mutation the description is too thin. Critically, zero parameters are marked required and the description says nothing about supplying issueId or issueKey, leaving the call signature ambiguous despite a rich sibling set and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (issueId, issueKey) are documented with examples, so baseline 3 applies. The description adds no meaning beyond the schema, notably nothing about whether one or both identifiers are needed.
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?
"Deletes an issue" restates the tool name (delete_issue) without adding scope or specificity. It does not distinguish this from sibling destructive tools (delete_watching, delete_version, remove_related_issue), nor say whether deletion is permanent or what an issue encompasses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no named alternative (e.g., closing vs. deleting, or using remove_related_issue instead). The agent must infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_versionCDestructiveIdempotent
Deletes a version from a project
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The numeric ID of the version to delete (e.g., 67890) | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that โ no mention of irreversibility, cascade effects on issues linked to the version, or required permissions. It merely restates the name.
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 wasted words. It is appropriately sized for the amount of information it actually conveys, though that information is thin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool, the definition leaves critical gaps: it doesn't explain whether projectId or projectKey is required to scope the deletion (only id is required in the schema), nor what happens to entities attached to the deleted version. With no output schema and annotations carrying only the safety profile, the description should do more.
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 each of id, projectId, and projectKey is already documented with examples. The description adds no parameter meaning, which is acceptable given full schema coverage but warrants only the baseline score.
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 ('Deletes a version from a project'), but 'version' is ambiguous given sibling tools like get_version_milestone_list and update_version_milestone; the description never clarifies whether it deletes a version milestone or a project version. An agent can't confidently distinguish this from version-milestone operations.
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, and no alternatives named. It also doesn't state prerequisites (e.g., whether the version must be unreleased or empty), which matters for a destructive operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_watchingCDestructiveIdempotent
Deletes a watch from an issue
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | Watch ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond this โ no statement about permanence, whether the underlying issue is affected, or authorization requirements โ so it contributes essentially no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero padding and the key information front-loaded. It is terse rather than bloated; the issue is under-specification, not verbosity.
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 delete with full annotations and no output schema, the definition is minimally sufficient to invoke correctly. It is missing the practically important detail of where a watchId comes from and what happens to the watch afterward.
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% for the single watchId parameter, and the schema description ('Watch ID to delete') already explains it. The description adds no format, source, or lookup guidance, which is acceptable but not additive.
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 ('Deletes a watch from an issue') so the operation is unambiguous. It does not differentiate itself from siblings like update_watching or mark_watching_as_read, but the verb alone distinguishes it well enough.
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 update_watching, mark_watching_as_read, or how to obtain a watchId (e.g. via get_watching_list_items). The agent must infer everything about selection and preconditions from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesBRead-only
Returns list of categories for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The numeric ID of the project (e.g., 12345) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only the project scoping, and says nothing about result ordering, pagination, or what happens when neither identifier is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient rather than padded; the only criticism is that brevity here reflects thin content rather than tight editing.
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 read-only, zero-required-parameter list tool with fully described parameters and no output schema, the description is minimally adequate. It still omits return shape, ordering, and how the two optional identifiers interact, which an agent would need to call it confidently.
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 documented and the baseline is 3. The description does not clarify the relationship between projectId and projectKey (nor the apparent copy-paste error in projectKey's schema text), leaving that ambiguity unaddressed.
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 concrete verb and resource ("Returns list of categories") and scopes it to a project, which is clear enough to distinguish from add_category. It stops short of differentiating itself from other read-only list siblings like get_priorities or get_custom_fields, so a 4 rather than 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?
There is no guidance on when to call this tool versus alternatives, no mention that add_category is the write counterpart, and no note on prerequisites or whether projectId or projectKey must be supplied. The agent must infer all of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_fieldsBRead-only
Returns list of custom fields for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond restating that it returns a list; it does not mention pagination, permissions, or response shape.
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 a single front-loaded sentence with no filler. Every word contributes to identifying the resource and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with rich annotations and full schema coverage, the description is adequate but leaves a subtle gap: both projectId and projectKey are optional in the schema, and the description does not clarify whether one is required or how the two identifiers relate.
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 projectId and projectKey are fully documented in the schema. The description adds no parameter-level semantics beyond implying that a project identifier is involved, which matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: returns custom fields for a project. It is clear enough to distinguish from sibling tools like get_categories or get_priorities, although it does not explicitly name any sibling alternative.
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 the phrase 'for a project'โthe agent should call this when it needs a project's custom fields. However, there is no explicit when-to-use guidance, no mention of alternatives, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentARead-only
Gets information about a document. The content is returned as plain text in plain, up to limit characters at a time; when nextStart is present, the rest can be read by calling again with start set to it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of characters of `plain` to return (default: 40000). Fewer may be returned so that the response fits the server's token limit; continue from `nextStart`. | |
| start | No | Character offset in `plain` to start reading from (default: 0). To read a long document in parts, pass the `nextStart` of the previous response. | |
| documentId | Yes | Document ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds behavior beyond that: content is truncated at `limit` and may be short of the requested size due to a server token limit, with continuation via `nextStart` โ exactly the kind of operational detail annotations cannot 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?
Two sentences, no filler, with the return shape and the paging contract front-loaded. Every clause 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?
There is no output schema, and the description compensates by naming the returned fields (`plain`, `nextStart`) and explaining truncation. Only gap is that 'information about a document' beyond content is never enumerated.
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 each parameter already documents defaults and the nextStart hand-off, so the schema is doing the heavy lifting. The description reinforces the limit/start/nextStart relationship but adds little syntax or semantics not 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+resource ('Gets information about a document') and immediately clarifies that the payload is plain-text content with paging. It is clear against list-oriented siblings like get_documents, but never explicitly distinguishes itself from get_document_tree or get_document_comments.
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 pagination loop is spelled out (call again with `start` set to `nextStart`), which is real usage guidance. However there is no statement of when to prefer this over get_documents, get_document_tree, or get_document_comments, or any prerequisite/exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_commentsBRead-only
Returns list of comments (with their replies) for a document.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | Document ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds one genuinely useful behavioral detail โ that replies are nested in the result โ but says nothing about ordering, pagination, or whether resolved comments are included in this list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the action and resource, with no filler. It is appropriately sized for a simple list tool, though slightly more detail could be folded in without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, single-param tool with no output schema, this is close to sufficient, but an agent still lacks ordering, pagination, and empty-result behavior. Those are the main gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already documents documentId and the baseline is 3. The description adds no extra meaning, such as the expected ID format or where to obtain one.
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 concrete verb+resource: returns the comment list for a document. It also discloses the reply-nesting shape. No sibling is named, but the document scope cleanly separates it from get_issue_comments and get_pull_request_comments.
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 or when-not guidance, no mention of alternatives such as get_document or the *_comments siblings, and no stated prerequisites (e.g., needing read access or a valid documentId). Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentsCRead-only
Gets a list of documents in a project.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Offset for pagination (default is 0) | |
| projectIds | Yes | Project ID List |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond the basic operation: it does not mention pagination behavior, ordering, what a document represents, or whether results are scoped or limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is arguably too terse, but it is not padded or poorly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema descriptions and annotations, the essentials are mostly covered. However, the description does not clarify how this differs from get_document_tree or get_document, nor does it mention pagination or multi-project behavior, leaving gaps for an agent choosing between similar 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%, so the schema already documents both offset and projectIds. The description's phrase 'in a project' loosely corresponds to projectIds but does not add syntax, array/multi-project semantics, or pagination guidance beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Gets a list of documents.' However, it does not distinguish this from sibling tools like get_document_tree or get_document, and 'in a project' is slightly misleading because the required parameter is projectIds, an array supporting multiple projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides no guidance on when to use this tool versus alternatives such as get_document_tree or get_document. There are no exclusions, prerequisites, or context cues to help an agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_treeCRead-only
Gets the document tree of a project.
| Name | Required | Description | Default |
|---|---|---|---|
| projectIdOrKey | Yes | Project ID or Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that โ it does not say whether the tree is full-depth or truncated, whether it includes folders vs. pages, or anything about ordering or size of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, front-loading the verb and resource. It is efficient but borders on under-specification rather than being genuinely tight, since nothing substantive follows the core statement.
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 hierarchical retrieval tool, the description never explains what the tree contains (folders, documents, nesting depth), so an agent cannot predict the shape or scale of the result. With no output schema available, the description should carry more of that burden than it does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ('Project ID or Key'), so the schema carries the semantics and baseline 3 applies. The description does not add any detail about accepted ID formats or whether a key works as well as an ID.
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 ('Gets') and a specific resource ('the document tree of a project'), which is meaningfully distinct from the sibling get_documents (list) and get_document (single item). It does not explicitly name those siblings or clarify what 'tree' means structurally, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_documents, get_document, or get_wiki_pages, and no prerequisites or exclusions are stated. The agent must infer that this returns a hierarchical view while the other tools return flat/single results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_git_repositoriesBRead-only
Returns list of Git repositories for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this is a read-only, non-destructive, closed-world operation. The description adds only the project scoping and does not disclose pagination behavior, permission requirements, or what happens when neither projectId nor projectKey is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to stating the resource and its project scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with fully described parameters and safety annotations, the description is minimally adequate. However, because both parameters are optional, it does not clarify whether omitting both returns all repositories or is an error, which is relevant context for correct invocation.
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 with examples. The description's phrase 'for a project' reinforces project scoping but does not explain the relationship or choice between projectId and projectKey beyond what the schema already 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?
The description states a specific verb and resource: it returns a list of Git repositories scoped to a project. This is clear enough for an agent, but it does not explicitly distinguish itself from the sibling get_git_repository tool, which likely returns a single repository.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_git_repository or any other sibling. The phrase 'for a project' implies it lists repositories in a project, but there are no exclusions, prerequisites, or alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_git_repositoryCRead-only
Returns information about a specific Git repository
| Name | Required | Description | Default |
|---|---|---|---|
| repoId | No | Repository ID | |
| repoName | No | Repository name | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered; the description adds nothing beyond thatโno note on permission requirements, errors when the repo id/name doesn't resolve, or what fields come back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though its brevity is partly the cause of the missing guidance rather than deliberate compression.
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 four optional parameters, no output schema, and rich annotations, the description should at least say which identifier selects the repository and roughly what is returned. Instead it leaves both the identification semantics and the response shape entirely to inference.
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 (repoId, repoName, projectId, projectKey) are documented in the schema and the baseline is 3. Notably all four are optional, and the description does not clarify whether one identifier is required or which is preferred, adding no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Returns information about a specific Git repository.' The singular 'a specific' implicitly contrasts with the sibling get_git_repositories (plural listing), but it never names that sibling or states the distinction 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?
No when-to-use guidance, no prerequisites, and no routing to get_git_repositories for listing versus this tool for a single repo. The agent must infer the distinction from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issueCRead-only
Returns information about a specific issue
| Name | Required | Description | Default |
|---|---|---|---|
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds no behavioral context beyond restating that this is a read operationโit doesn't mention error cases, required identifiers, or return characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple getter, though it is arguably too terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read nature, annotations, and full schema coverage, the description is minimally adequate. However, it does not clarify that at least one of issueId or issueKey must be supplied (since neither is required by schema), and it omits any mention of what information is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both issueId and issueKey are fully documented in the schema. The description adds no additional meaning about parameter semantics, which is expected at this coverage level.
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?
It states a specific verb ('Returns') and resource ('information about a specific issue'), making the basic operation clear. However, it does not distinguish the tool from siblings like get_issues, get_related_issues, or get_issue_comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor does it state prerequisites or identifier requirements. The only usage signal is implicit in the name and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_attachmentARead-only
Downloads one attachment of an issue. Returns it as MCP image or embedded resource content by default, or as base64 in a JSON object with format: 'base64'. Call get_issue first to obtain the attachmentId from the issue's attachments array.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | How to return the file. 'auto' (default) returns a verified raster image as MCP image content and anything else as an embedded resource, so a client can render it. 'base64' returns a single JSON object with the encoded bytes in `content`, for callers that process the file programmatically โ note that this puts the whole encoding in the caller's context. | |
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') | |
| maxBytes | No | Maximum raw attachment size in bytes. Defaults to 5242880 and cannot exceed 7340032. | |
| attachmentId | Yes | The numeric ID of the attachment. Get it from get_issue (the issue's `attachments` array). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/destructiveHint/openWorldHint already declaring a safe read, the description adds real behavioral context: the default auto behavior of rendering raster images as MCP image content, and the warning that base64 mode places the whole encoding in the caller's context. It omits the maxBytes cap and default, which is a meaningful behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, return modes second, prerequisite last. Nothing is padded and the most decision-relevant information leads.
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 correctly compensates by describing return shapes (image content, embedded resource, base64 JSON). It falls short on the optional issueId/issueKey parameters and the maxBytes default, which an agent needs to call the tool optimally.
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 schema already documents format, attachmentId provenance, and maxBytes limits, so the description largely mirrors structured data. It offers no explanation of why issueId/issueKey are accepted alongside attachmentId, leaving the multi-param authorization semantics unaddressed.
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 ('Downloads one attachment of an issue') and immediately clarifies the return shape, which lets an agent distinguish it from get_issue or the comment/wiki siblings.
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: 'Call get_issue first to obtain the attachmentId', and distinguishes the two return modes. It does not state when not to use the tool or how issueId/issueKey interact with attachmentId, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_commentsCRead-only
Returns list of comments for an issue
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of comments to retrieve | |
| maxId | No | Maximum comment ID | |
| minId | No | Minimum comment ID | |
| order | No | Sort order | |
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds no behavioral context whatsoever โ no default sort order, no default/max page size, no statement of what happens when neither issueId nor issueKey is given, and no pagination semantics for minId/maxId.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence with no filler, but its brevity is under-specification rather than disciplined economy โ the operation's key constraint (an issue identifier is effectively required) is omitted entirely.
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 6-parameter tool with zero required parameters and no output schema, the description should clarify the identifier requirement and paging behavior. Without it an agent could call the tool with no arguments and get an ambiguous 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 description coverage is 100%, so every parameter including the minId/maxId paging pair and the asc/desc enum is already documented in the schema. The description contributes nothing beyond that, which is the baseline expectation at full coverage.
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 ('Returns list of comments for an issue'), which lets an agent distinguish it from the sibling mutation tools add_issue_comment/update_issue_comment and from get_pull_request_comments/get_document_comments by resource. It stops short of explicitly naming those alternatives, so no sibling differentiation credit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the other comment getters, no note that issueId or issueKey must be supplied (both are optional in the schema), and no mention of defaults for count/order. The agent is left to infer the calling contract entirely from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issuesCRead-only
Returns list of issues
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field | |
| count | No | Number of issues to retrieve | |
| order | No | Sort order | |
| offset | No | Offset for pagination | |
| keyword | No | Keyword to search for in issues | |
| statusId | No | Status IDs | |
| projectId | No | Project IDs | |
| versionId | No | Version IDs | |
| assigneeId | No | Assignee user IDs | |
| categoryId | No | Category IDs | |
| priorityId | No | Priority IDs | |
| issueTypeId | No | Issue type IDs | |
| milestoneId | No | Milestone IDs | |
| createdSince | No | Created since (yyyy-MM-dd) | |
| createdUntil | No | Created until (yyyy-MM-dd) | |
| customFields | No | Custom field filters (text, numeric, date, or list) | |
| dueDateSince | No | Due date since (yyyy-MM-dd) | |
| dueDateUntil | No | Due date until (yyyy-MM-dd) | |
| resolutionId | No | Resolution IDs | |
| updatedSince | No | Updated since (yyyy-MM-dd) | |
| updatedUntil | No | Updated until (yyyy-MM-dd) | |
| createdUserId | No | Created user IDs | |
| parentIssueId | No | Parent issue IDs | |
| startDateSince | No | Start date since (yyyy-MM-dd) | |
| startDateUntil | No | Start date until (yyyy-MM-dd) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered elsewhere. The description adds nothing beyond that: no note on default page size, ordering defaults when sort/order are omitted, whether filters combine with AND, or how large result sets behave.
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 words with no padding and nothing buried, so structurally clean and front-loaded. But the brevity comes from omission rather than economy - there is no substantive content to be concise about.
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?
A 25-parameter, zero-required retrieval tool with pagination, sorting, date ranges, and polymorphic custom-field filters gets a five-word description and no output schema. Nothing tells the agent how to page, what the defaults are, or what shape the returned list takes - completely inadequate for the complexity.
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 25 parameters including the nested customFields oneOf variants are documented in the schema itself; baseline 3 applies. The description contributes zero additional meaning - notably it never explains whether the many ID-array filters are ORed within a field and ANDed across fields, which is the main ambiguity the schema leaves.
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?
"Returns list of issues" restates the tool name almost verbatim; the only added signal is the plural "list", which weakly implies bulk retrieval versus the sibling get_issue. It names no scope, no filter semantics, and does not distinguish itself from count_issues, get_issue, or get_related_issues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: no mention that this is the filtered/bulk retrieval path, no pointer to count_issues for totals, no note that get_issue should be used for a single issue by ID. The agent must infer routing from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_typesCRead-only
Returns list of issue types for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that โ no note on whether the list is paginated, cached, or whether it reflects archived issue types.
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 waste. It is efficient but borders on under-specified for a lookup whose identifier semantics are ambiguous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with a fully documented schema and clear annotations, this is close to adequate. The remaining gap is the projectId-vs-projectKey choice and whether one is required, which neither schema nor description resolves.
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 both projectId and projectKey are documented with examples, and the baseline is 3. However, the description doesn't clarify the important fact that both parameters are optional and presumably either identifies the project โ an agent could call with neither and the description gives no warning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Returns list of issue types') scoped to a project, which is enough to distinguish it from nearby lookup siblings like get_categories, get_priorities, and get_resolutions. It stops short of explicitly naming those siblings or how they differ.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not, or alternative is given. The phrase 'for a project' only weakly implies the tool is scoped to a single project; nothing tells the agent when to prefer issue types over custom fields or priorities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_myselfBRead-only
Returns information about the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that โ no note about what identity context it requires, whether it may fail when unauthenticated, or what fields come back โ so it earns no credit over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the key qualifier ('authenticated user') up front. Efficiency is fine, but the extreme brevity leaves substance gaps rather than trimming redundancy.
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 no-param read tool with annotations and no output schema, the definition is minimally viable. It still omits the most useful thing an agent would want โ roughly what user fields are returned (id, name, email) and whether this is the canonical way to resolve 'me' before calling user-scoped 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the empty schema is self-explanatory. Baseline for a no-parameter tool 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 ('Returns') and resource ('information about the authenticated user'), which implicitly distinguishes it from the sibling get_users that targets arbitrary users. It does not explicitly name that sibling or say what 'information' is included, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus get_users or get_user_recent_updates, and no prerequisites or exclusions. The intended use (fetch the caller's own identity) is only weakly implied by the phrase 'authenticated user'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notificationsCRead-only
Returns list of notifications
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of notifications to retrieve | |
| maxId | No | Maximum notification ID | |
| minId | No | Minimum notification ID | |
| order | No | Sort order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured fields. The description adds nothing beyond that โ no pagination behavior, no default ordering, no note on whether results are capped by count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, so it is not bloated. However, its brevity comes at the cost of under-specification rather than efficiency โ there is no front-loaded scope or key constraint.
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 four optional ID/order parameters and no output schema, the description should clarify what a notification record contains, how ordering interacts with count, and whether ID ranges are inclusive. None of this is present, leaving the agent to guess at retrieval semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (count, maxId, minId, order) are already documented in the schema. The description adds no extra meaning such as whether minId/maxId are inclusive or what the default sort order is; 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?
"Returns list of notifications" essentially restates the tool name (get_notifications) with the addition of the word "list". It does not distinguish this from count_notifications or mark_notification_as_read, nor does it describe scope, filtering, or ordering behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus count_notifications or mark_notification_as_read, and no mention of prerequisites such as authentication or unread state. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prioritiesCRead-only
Returns list of priorities
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing behavioral on top: no mention of ordering, global vs. project scoping, caching, or typical list size. With annotations carrying the burden, this is a bare-minimum read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero padding, which is efficient. However, it is under-specified rather than concise-in-service-of-clarity โ the brevity comes from omitting useful information, not from tight editing.
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 parameters, no output schema, and no annotations describing return shape, the description is the only place to say what a "priority" actually is in this system. It does not, leaving the agent unable to predict what the returned list contains or how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is an empty object, so there is nothing for the description to explain. Baseline 4 applies; no parameter-level value is withheld.
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?
"Returns list of priorities" gives a verb (returns) and a resource (priorities), so the basic operation is legible. But "priorities" is never disambiguated โ it could be an issue-priority master list, a ranking of issues, or personal priorities โ and the description does nothing to distinguish it from look-alike siblings such as get_issue_types, get_resolutions, get_categories, and get_custom_fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion, and no mention of the alternative lookup tools in the sibling set. The agent must infer from the name alone that this is the master-data enumeration used when setting an issue's priority.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectCRead-only
Returns information about a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds nothing beyond that โ no note on behavior when the project is not found, no indication of what subset of project data is returned, and no mention that projectId/projectKey are alternative lookup keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, and the verb+resource is front-loaded. Its brevity borders on under-specification, but nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is the only place to convey what 'information' means (fields returned, shape, behavior on missing project), and it does not. For a lookup tool that returns an entity, this leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters carry examples in the schema, so the baseline applies. The description adds no clarification of the important ambiguity that zero parameters are required yet one of projectId or projectKey must presumably be supplied.
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 ('Returns') and resource ('information about a specific project'), so the agent knows it is a single-record lookup. It does not explicitly distinguish itself from siblings like get_project_list or update_project, leaving the single-vs-list distinction to inference from the word 'specific'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_project_list, get_project_users, or update_project. The agent must infer from the name alone that this is the single-project read path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_listCRead-only
Returns list of projects
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Only applies to administrators. If โtrue,โ it returns all projects. If โfalse,โ it returns only projects they have joined. | |
| archived | No | For unspecified parameters, this form returns all projects. For โfalseโ parameters, it returns unarchived projects. For โtrueโ parameters, it returns archived projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, covering the safety profile. The description adds nothing beyond that โ no mention that the result set depends on admin status or archived state, which is the key behavioral nuance of this tool.
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 single sentence is front-loaded and free of waste, but it is under-specified rather than concise โ it stops well short of what an agent needs. Brevity here reflects thin content, not efficiency.
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 list tool with no output schema, the description says nothing about what a returned project contains, ordering, pagination, or how the default call behaves (joined projects only). Against 60+ siblings including get_project, this leaves the agent guessing.
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 explains the 'all' and 'archived' semantics thoroughly, including defaults. The description contributes no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and resource ('list of projects'), so the basic purpose is recoverable. However, with siblings like get_project (singular) and get_project_users present, it offers no differentiation โ an agent cannot tell from the text alone how this list differs from fetching a single project.
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 call this versus get_project or get_project_users, and no mention of prerequisites such as admin rights implied by the 'all' parameter. The agent gets no selection criteria at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_usersCRead-only
Returns list of users in a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds nothing beyond that: no pagination behavior, no result size expectations, and no note that the lookup is scoped to a single project's membership.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is terse to the point of under-specification, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry return-shape information and does not โ no word on what a 'user' object contains or whether results are paginated. Combined with the unresolved projectId-vs-projectKey question from the optional parameters, an agent lacks enough context to call this confidently.
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 projectId and projectKey are documented in the schema, giving baseline 3. However, the description misses a meaningful semantic point: the schema marks zero required parameters, leaving an agent unsure whether one identifier, either, or both must be supplied โ this is exactly the kind of clarification a description should add and it does not.
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 with scope ('Returns list of users in a specific project'). This implicitly separates it from the broader get_users sibling, though the distinction is never made explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_users (list all users) or get_myself. The agent must infer that this tool is the project-scoped variant from the name and resource alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestCRead-only
Returns information about a specific pull request
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Pull request number | |
| repoId | No | Repository ID | |
| repoName | No | Repository name | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that โ no mention of what fields come back, what happens when the PR number or repo identifiers don't resolve, or how the repoId/repoName and projectId/projectKey pairs interact. With no output schema, some of this burden falls on the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. Brevity is appropriate, though it tips into under-specification given the tool's identifier complexity.
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 five parameters forming alternative identifier pairs, one required field, and no output schema, the description should clarify which identifiers suffice and roughly what is returned. It leaves both questions entirely to the schema, which only labels the fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all five parameters carry descriptions, so the baseline of 3 applies. The description adds no meaning beyond the schema, notably silent on why both repoId and repoName (and projectId and projectKey) exist as alternative identifiers.
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 ('Returns') and resource ('information about a specific pull request'), and the word 'specific' signals single-resource retrieval as opposed to the sibling get_pull_requests list. It does not explicitly name the sibling, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_pull_requests (list) or get_pull_request_comments. The agent must infer from the name alone that this is for fetching one PR by number.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_commentsCRead-only
Returns list of comments for a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of comments to retrieve | |
| maxId | No | Maximum comment ID | |
| minId | No | Minimum comment ID | |
| order | No | Sort order | |
| number | Yes | Pull request number | |
| repoId | No | Repository ID | |
| repoName | No | Repository ID | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that โ no mention of pagination behavior, default ordering, whether all comments are returned, or what the response contains.
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 wasted words. It is appropriately terse, though the brevity comes at the cost of the behavioral and usage detail captured above.
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 nine-parameter read tool with pagination-style parameters and no output schema, the description says far too little. It never explains how count/minId/maxId affect the result set or whether the list is complete or paged.
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 nine parameters (count, minId/maxId, order, repoId, projectId, etc.) are already documented in the schema. The description adds no meaning beyond that, which is acceptable given the baseline for high coverage.
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 (returns list) and resource (comments for a pull request), so an agent knows exactly what it fetches. It does not distinguish itself from get_issue_comments or explain why get_pull_request_comments is preferable, leaving that inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_pull_request, add_pull_request_comment, or get_issue_comments. The description states what happens but not the context or prerequisites for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestsCRead-only
Returns list of pull requests for a repository
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of pull requests to retrieve | |
| offset | No | Offset for pagination | |
| repoId | No | Repository ID | |
| issueId | No | Issue IDs | |
| repoName | No | Repository name | |
| statusId | No | Status IDs | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| assigneeId | No | Assignee user IDs | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| createdUserId | No | Created user IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the repository scoping and says nothing about default ordering, default page size, how multiple filters combine, or whether an unfiltered call returns all PRs โ meaningful gaps even under the lower annotated bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, so it is efficient. It leans toward under-specification rather than verbosity, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With ten optional parameters and no output schema, the description should explain the filtering model and default pagination behavior; it does neither. An agent could call it, but not confidently predict whether it gets all PRs, a default page, or how the filter arrays behave.
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 ten parameters are documented in the schema itself and the baseline is 3. The description adds no additional meaning about filter semantics (e.g., whether issueId/statusId/assigneeId are OR'd or AND'd, or what count/offset default to), so it neither helps nor harms beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Returns list of pull requests") and scopes it to a repository, so an agent knows exactly what it fetches. It does not, however, distinguish it from close siblings like get_pull_requests_count or get_pull_request, which an agent must infer from the names alone.
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 get_pull_request (single) or get_pull_requests_count, nor any statement of prerequisites or exclusions. The agent is left to infer that this is the bulk/filtered listing variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requests_countBRead-only
Returns count of pull requests for a repository
| Name | Required | Description | Default |
|---|---|---|---|
| repoId | No | Repository ID | |
| issueId | No | Issue IDs | |
| repoName | No | Repository name | |
| statusId | No | Status IDs | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| assigneeId | No | Assignee user IDs | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| createdUserId | No | Created user IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation is read-only, non-destructive, and closed-world, so the safety profile is covered. The description adds that the result is an aggregate count rather than a list, but it does not explain filter behavior, default counting scope when no parameters are supplied, or 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?
The description is a single front-loaded sentence with no wasted words. It is appropriately sized for a simple count tool, though its brevity contributes to gaps addressed under other dimensions.
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 has eight optional filter parameters and no output schema, yet the description only says the count is 'for a repository.' It omits that the count can be filtered by project, issue, status, assignee, and creator, and does not explain what happens when no repository identifier or filters are supplied.
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 eight optional parameters are already documented in the schema. The description mentions only 'repository' and does not add meaning about how issueId, statusId, assigneeId, createdUserId, or project filters affect the count, leaving the baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns count') and resource ('pull requests') scoped to a repository, which distinguishes it from the sibling get_pull_requests that retrieves PRs rather than counting them. It does not, however, mention the broader project/issue/status/assignee filtering implied by 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?
There is no explicit guidance on when to use this tool instead of get_pull_requests or get_pull_request. The 'count' wording implies aggregate use, but the description provides no conditions, exclusions, or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resolutionsBRead-only
Returns list of issue resolutions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds no further behavioral context such as ordering, whether the list is exhaustive, or whether default/uncategorized resolutions are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single five-word sentence with the resource front-loaded and no filler. It is efficient, though it borders on under-specification rather than optimal density.
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-parameter reference-list tool with annotations covering safety, the definition is minimally adequate. With no output schema, the description could state what each entry contains (id, name) and whether the list is filtered by project, which it omits.
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 parameter semantics are not a concern and the baseline of 4 applies. Nothing in the description is needed to explain inputs.
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: 'Returns list of issue resolutions'. An agent can tell it returns reference data rather than resolving an issue. It does not differentiate itself from analogous sibling lookup tools such as get_priorities or get_issue_types.
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 call it, e.g. to discover valid resolution values before calling update_issue, and no mention of prerequisites or alternatives. The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spaceBRead-only
Returns information about the Backlog space
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds nothing beyond them, such as what fields the returned space record contains or whether any caching/auth scope applies; it essentially restates the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is efficient, though also thin, so it earns a solid rather than top score.
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 and no annotations covering the return payload, the description should indicate what information about the space is returned (name, domain, settings, etc.). It leaves the agent unable to predict the response shape for even a simple read.
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 there is no parameter semantics to document; the schema is empty and complete. Baseline for a zero-param tool is 4.
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: returns information about the Backlog space. An agent can tell it is a read of the space-level resource, though it does not distinguish itself from near-neighbors like get_myself, get_users, or get_space_activities.
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 call this versus the numerous sibling getters, and no mention of prerequisites such as authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_space_activitiesCRead-only
Returns list of space activities
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of activities to retrieve | |
| maxId | No | Maximum activity ID | |
| minId | No | Minimum activity ID | |
| order | No | Sort order | |
| activityTypeId | No | Activity type IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false, openWorld=false, so the safety profile is fully covered and the description adds nothing. It does not disclose pagination behavior, default ordering, default count, or what happens when no ID bounds are supplied โ meaningful gaps for a list endpoint with five optional filters.
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 single sentence contains no filler, so nothing is wasteful, but it is terse to the point of under-specification rather than efficient packaging of information. There is no front-loaded scope, default behavior, or return-shape hint.
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?
A five-parameter, enum-bearing list endpoint with no output schema needs the description to explain paging semantics and the meaning of ID-range filtering. The description covers none of this, leaving the agent to reverse-engineer behavior from parameter names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the five parameters documented (count, minId/maxId, order, activityTypeId). The description adds no syntax or semantic context beyond that โ e.g., what an activityTypeId of -1 means โ so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Returns list of space activities"), so an agent can infer this is a read/list operation. However, it does not clarify what a "space activity" is (feed entries? audit log? status updates?) nor distinguish it from siblings like get_user_recent_updates or get_notifications, which plausibly return overlapping content.
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 call this versus alternatives, no prerequisite (e.g., a space context), and no mention of whether it is a feed-style listing with paging. The agent must guess based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_recent_updatesCRead-only
Returns recent updates (activities) for a specific user
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of activities to retrieve (1-100, default: 20) | |
| maxId | No | Maximum activity ID | |
| minId | No | Minimum activity ID | |
| order | No | Sort order ("asc" or "desc", default: "desc") | desc |
| userId | Yes | ID of the user to retrieve activities for | |
| activityTypeId | No | Activity type IDs to filter by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond restating the resourceโit does not define what 'recent' means, how pagination via maxId/minId behaves, or what activity fields are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is arguably too sparse for a six-parameter tool, but it is not verbose or poorly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover safety and the schema fully documents parameters, but the description does not clarify behavioral details like the 'recent' window, default ordering, or how ID-based pagination should be used. Adequate for invocation, but with clear gaps for a multi-filter activity retrieval 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 description coverage is 100%, so all six parameters are documented in the schema, including defaults, ranges, and enum values. The description adds no parameter-level meaning beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Returns') and resource ('recent updates (activities) for a specific user'), so an agent knows exactly what the tool fetches. It does not distinguish itself from siblings such as get_space_activities, which also returns activity-like data, leaving the scope boundary implicit.
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 no guidance on when to use this tool versus alternatives like get_space_activities or get_watching_list_items. There are no exclusions, prerequisites, or usage conditions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usersBRead-only
Returns list of users in the Backlog space
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond that: no return shape, no ordering, no note on whether the list is complete or truncated, and no mention of pagination behavior (which matters here because there are no parameters to paginate with).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, front-loading the verb and resource. The only minor waste is 'in the Backlog space', which restates where every tool in this server already operates.
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-parameter read tool with no output schema, the description is minimally adequate. However, with no parameters to filter or limit results, an agent would benefit from knowing whether the list is paginated, truncated, or ordered โ none of which is stated, and with no output schema it cannot be learned from structured fields.
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 there is no parameter semantics to explain and the baseline of 4 applies. The schema is empty and 100% covered by definition; the description correctly says nothing about inputs.
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 ('Returns') and resource ('list of users') with the scope 'in the Backlog space', so the agent knows exactly what comes back. It only implicitly distinguishes itself from space-scoped siblings like get_myself, get_project_users, or get_space; a reader has to infer that 'the Backlog space' means the whole space rather than a project.
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: fetch users who live in this Backlog space. There is no explicit 'when to use this vs get_myself / get_project_users' guidance, and no statement about whether project-scoped user lists are a different tool. An agent must infer the boundary from the description and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_stars_countBRead-only
Returns the count of stars received by a user
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Count stars received after this date (yyyy-MM-dd) | |
| until | No | Count stars received before this date (yyyy-MM-dd) | |
| userId | Yes | User ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a safe, read-only, non-destructive, closed-world operation. The description adds no behavioral context beyond thatโit does not mention date-range filtering, result semantics, or any other operational 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?
It is a single front-loaded sentence with no filler. Every word contributes to stating the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple count tool with a fully documented schema and clear safety annotations, the description is minimally adequate. However, it omits what the count represents exactly (total vs. filtered) and provides no indication of return behavior, which would be helpful since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents `userId`, `since`, and `until`. The description adds no parameter meaning beyond the schema, which meets the baseline 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb (returns) and resource (count of stars received by a user), which is unambiguous and distinct from the sibling list. It does not explicitly differentiate from other count tools, but none of the siblings cover user-star counts, so disambiguation is not critical.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. Usage is only implied by the tool name and the idea of retrieving a count.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_version_milestone_listCRead-only
Returns list of versions/milestones in the Backlog space
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., TEST_PROJECT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds only the vague phrase 'in the Backlog space' โ no pagination behavior, no result ordering, no disclosure of what happens with zero filters, which is the key behavioral question for a list endpoint with all-optional params.
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 wasted words, so it is not verbose. But the terseness comes at the cost of under-specification rather than efficient communication.
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 list tool with two optional filters, no output schema, and no required parameters, the agent needs to know default scoping and return shape. Neither is present; the description is little more than a restatement of the name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters carry examples, so the schema does the heavy lifting. The description mentions neither parameter and adds no filtering semantics (e.g. whether projectId and projectKey are alternatives or combinable), which is the baseline-3 outcome.
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 (returns list) and a specific resource (versions/milestones), plus a scope hint ('in the Backlog space'). It is distinguishable from the write siblings add_version_milestone / update_version_milestone / delete_version by the read verb, though it never names them 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?
No indication of when to use this versus alternatives, and no guidance on the two optional filters. An agent cannot tell whether omitting both projectId and projectKey returns all versions space-wide or errors, nor when to prefer projectKey over projectId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watching_list_countCRead-only
Returns count of watching items for a user
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, non-destructive, closed-world operation. The description adds only that the count is for a user, without clarifying what qualifies as a watching item, whether unread-only filtering exists, or what the returned count represents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted text. It is appropriately sized for a simple count tool, though it could have included one short clarification without becoming verbose.
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 count tool with no output schema, the description is minimally adequate. It still leaves ambiguity about what 'watching items' includes and whether the count is total or filtered, which matters for correct invocation.
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 already documents the single userId parameter as 'User ID.' The description's phrase 'for a user' adds no additional syntax or formatting 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: returns a count of watching items for a user. It implicitly distinguishes itself from the sibling list tool get_watching_list_items by saying 'count,' though it does not name that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_watching_list_items or other count tools. The agent must infer the use case from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watching_list_itemsCRead-only
Returns list of watching items for a user
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered elsewhere and the bar is lower. The description adds only the per-user scoping implied by 'for a user' and says nothing about ordering, pagination, or whether unread/archived items are included โ no value beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero padding and the resource front-loaded after the verb. Slightly awkward grammar ('Returns list of') keeps it from being exemplary, but there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description gives no indication of what fields a watching item has, how many are returned, or whether results are paginated. For a simple read-only single-parameter list tool with full annotation coverage this is minimally adequate but leaves real gaps for an agent planning a call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single required parameter (userId), so the schema already documents it. The phrase 'for a user' merely restates that the filter is by user without adding format or semantics beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Returns') and a specific resource ('watching items') scoped to a user, so the agent knows what it retrieves. However, it does nothing to distinguish it from siblings such as get_watching_list_count, get_notifications, or mark_watching_as_read, which share the same domain vocabulary.
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 contains no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent must infer from the name alone that this is the full-list counterpart to get_watching_list_count and the read counterpart to add/update/delete_watching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wikiCRead-only
Returns information about a specific wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | Wiki ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that โ no note on what happens with an unknown wikiId, whether the page body or just metadata comes back, or access 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?
It is a single front-loaded sentence with no filler, so there is nothing to trim. The problem is the opposite of verbosity: under-specification rather than 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 one-parameter read tool with annotations and no output schema, the caller still cannot tell what the response contains, since there is no output schema to document return fields. "Information" leaves the return shape โ metadata vs. page content, included fields โ entirely unknown.
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% with a single required wikiId, so the schema carries the parameter burden and the baseline is 3. The description's phrase "a specific wiki page" only restates that a single identifier is expected, adding no format or sourcing detail.
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 pairs a verb ("Returns") with a resource ("a specific wiki page"), and the singular phrasing loosely distinguishes it from the sibling get_wiki_pages. But "information" is vague โ it doesn't say whether that means metadata, body content, or both โ so the purpose is only minimally pinned down.
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 statement of when to use this tool versus get_wiki_pages, get_wikis_count, or get_document, and no prerequisites or exclusions. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_pagesCRead-only
Returns list of Wiki pages
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | Keyword to search for in Wiki pages | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered elsewhere. The description adds nothing on top: no pagination behavior, no default sort, no statement of what happens when keyword/projectId/projectKey are omitted or combined.
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 five-word sentence with no padding, but it is under-specified rather than concise โ the brevity comes at the cost of scope and filter behavior that 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?
For a three-parameter listing tool with no output schema, the description should say what a result item looks like, whether results are paginated, and how the filters interact. None of that is present, leaving the agent to discover behavior empirically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself documents keyword, projectId and projectKey with examples. The description adds no meaning beyond that, but per the high-coverage baseline a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Returns list of Wiki pages" names a verb and resource, but it essentially restates the tool name and says nothing about scope (project-scoped? keyword-filtered? paginated?). It does not distinguish this from the sibling get_wiki (single page) or get_wikis_count, so the agent must infer the difference from names alone.
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 rather than get_wiki, get_wikis_count, or get_documents, and no note that all three parameters are optional. The agent must guess whether an unfiltered call is a full dump or a scoped listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wikis_countBRead-only
Returns count of wiki pages in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover readOnly, non-destructive and closed-world behavior, so the safety profile needs no restatement. The description contributes only the fact that the response is a count rather than page objects; it says nothing about what happens with zero pages or with an unknown project.
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 well-formed sentence with no filler, and the essential resource is front-loaded. It is arguably too terse for the alternatives available, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple counting tool with annotations and full schema coverage, the definition is close to adequate, but the zero-required-parameter schema leaves ambiguity about whether projectId or projectKey must be supplied, and the description does not resolve it.
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 are documented, so the schema carries the semantics. The description adds nothing about the projectId/projectKey alternatives or whether they are mutually exclusive, so a baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Returns count of wiki pages') in a single sentence, and the count framing distinguishes it from the sibling get_wiki_pages list tool. It does not explicitly name the sibling or say how the count relates to the listing, 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?
There is no guidance on when to prefer this tool over get_wiki_pages or get_wiki, and no indication of which of the two optional parameters to supply (projectId vs projectKey). The agent must infer that this is the cheap alternative when only a total is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_notification_as_readCIdempotent
Mark a notification as read
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Notification ID to mark as read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing on top: it does not say whether the unread count is decremented, whether marking an already-read notification errors or no-ops, or how failures surface โ all useful context for a state-mutating call.
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?
It is a single short sentence with zero waste, but its brevity comes from omission rather than discipline. There is nothing front-loaded because there is nothing beyond the name.
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 simple (one required param, no output schema), so a short description is defensible, but the definition still omits the one thing an agent would want here โ the relationship to get_notifications / count_notifications and reset_unread_notification_count, and whether the action affects unread counts. Given the crowded sibling namespace, that gap is material.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage ('Notification ID to mark as read'), so the schema already carries parameter meaning. The description adds no format, source, or lookup hints, which is acceptable at this coverage level but not additive.
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 is a near-verbatim restatement of the tool name: 'Mark a notification as read' vs. mark_notification_as_read. It does identify the verb and resource, but adds no distinguishing detail beyond what the identifier already conveys, so it sits at the tautology line rather than a clear statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The sibling list contains mark_watching_as_read and reset_unread_notification_count, which an agent could easily confuse with this tool, and the description does nothing to route between them or state prerequisites such as owning the notification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_watching_as_readCIdempotent
Mark a watch as read
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | Watch ID to mark as read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, and the description is consistent with that but adds nothing. It does not disclose whether marking read is reversible (via update_watching), whether the watchId must exist or be owned by the caller, or what the response contains. With annotations covering the safety profile, a terse restatement earns little.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with zero padding โ nothing needs to be trimmed. It loses a point only because brevity here shades into under-specification rather than disciplined concision.
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 an idempotent mutation tool with no output schema, the description should say what object a watch is, how to obtain a valid watchId, and what state change results. None of that is present, leaving the agent dependent on sibling tools and annotations to infer the operation.
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?
Only one parameter, and schema description coverage is 100% ('Watch ID to mark as read'), so the schema already documents it fully. The description adds no syntax, type, or origin guidance (where to obtain sonar-style watchId) beyond what is structured, so this sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource: 'Mark a watch as read' tells the agent exactly the state transition and the object. However, it offers no differentiation from a close sibling such as mark_notification_as_read, and does not clarify what a 'watch' is (a watching-list item vs. an issue watcher).
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 statement of when to use this versus mark_notification_as_read or the update_watching path for the same object, and no preconditions (e.g., must the item be unread first?). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_unread_notification_countCIdempotent
Reset unread notification count
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this mutates state (readOnlyHint=false), is idempotent, and is non-destructive, so the description is not required to carry the full safety burden. It nonetheless adds nothing: it does not clarify what 'reset' means (to zero, or clearing the unread flag), whether the operation is scoped to the caller, or whether reset is recoverable.
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?
It is a single short, front-loaded sentence with no filler, so it is not bloated. The problem is under-specification rather than verbosity โ the one sentence carries no information beyond the tool name.
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 surface is simple (no params, no output schema, no nested objects), and annotations cover the mutation/idempotency profile, so a minimal description is defensible. Still, for a state-changing reset operation the agent would benefit from knowing the scope of the reset and what the response indicates.
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 for this dimension is 4. Nothing in the description conflicts with the empty schema, although nothing is added either.
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 is a verbatim restatement of the tool name with spaces instead of underscores, adding no scope, target, or effect detail. An agent learns nothing beyond what the identifier already said, and it is not distinguished from siblings such as mark_notification_as_read or count_notifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion of alternatives, and no statement of prerequisites. An agent cannot infer from the text whether this clears notifications for the current user only, all users, or only already-read ones, nor how it relates to mark_notification_as_read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_issueCDestructiveIdempotent
Updates an existing issue
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Comment to add when updating the issue | |
| dueDate | No | Scheduled due date (yyyy-MM-dd) | |
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| summary | No | Summary of the issue | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') | |
| statusId | No | Status ID | |
| startDate | No | Scheduled start date (yyyy-MM-dd) | |
| versionId | No | Version IDs. Pass an empty array to clear all versions. Omit this field to leave the current versions unchanged. | |
| assigneeId | No | User ID of the assignee | |
| categoryId | No | Category IDs. Pass an empty array to clear all categories. Omit this field to leave the current categories unchanged. | |
| priorityId | No | Priority ID | |
| actualHours | No | Actual work hours | |
| description | No | Updates an existing issue | |
| issueTypeId | No | Issue type ID | |
| milestoneId | No | Milestone IDs. Pass an empty array to clear all milestones. Omit this field to leave the current milestones unchanged. | |
| attachmentId | No | Attachment IDs | |
| customFields | No | List of custom fields to set on the issue | |
| resolutionId | No | Resolution ID | |
| parentIssueId | No | Parent issue ID. Pass null to remove the current parent issue. Omit to leave it unchanged. | |
| estimatedHours | No | Estimated work hours | |
| notifiedUserId | No | User IDs to notify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond them: it does not explain partial-update semantics, that omitted fields are left unchanged, or what a destructive update entails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, but it is under-specified rather than efficient. There is no front-loaded statement of the core requirement (identify the issue, list fields to change).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with 21 optional parameters and no required fields, the description omits critical context: which identifier is mandatory, that only supplied fields change, and the impact of clearing array fields. Annotations cover the safety hints but not the operational contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema documents each of the 21 fields, including the important "omit to leave unchanged / empty array to clear" semantics. The description contributes no additional parameter meaning, so the baseline of 3 applies; the lack of any note that at least one issue identifier (issueId/issueKey) is required is a gap the description could have filled.
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?
"Updates an existing issue" is essentially a restatement of the tool name update_issue; the only added information is the word "existing", implying the issue must already exist. It names no updatable field, scope, or distinguishing behavior versus add_issue/delete_issue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus update_project, update_issue_comment, or add_issue, and no prerequisites such as required permissions or that an identifier must be supplied. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_issue_commentCDestructiveIdempotent
Updates a comment on an issue
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Comment content | |
| issueId | No | The numeric ID of the issue (e.g., 12345) | |
| issueKey | No | The key of the issue (e.g., 'PROJ-123') | |
| commentId | Yes | Comment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are rich here (readOnlyHint=false, destructiveHint=true, idempotentHint=true, openWorldHint=false), so the safety profile is covered by structured data. But the description adds nothing: it does not say that the existing comment text is destroyed and replaced, nor which of issueId/issueKey must accompany commentId, nor what happens on partial updates.
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?
It is a single front-loaded sentence with no filler, but its brevity comes from under-specification rather than discipline; there is nothing to pad because nothing substantive was said.
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?
A destructive mutation with no output schema and an ambiguous schema (issueId and issueKey both optional alongside required commentId) needs the description to clarify replacement semantics and identifier resolution. None of that is present, so an agent must guess.
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 (content, commentId, issueId, issueKey) are already documented in the schema. The description contributes no additional meaning, which meets the baseline for fully covered schemas.
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?
"Updates a comment on an issue" gives a verb and resource, but it is essentially a restatement of the tool name update_issue_comment and adds no distinguishing detail versus siblings like update_pull_request_comment or add_issue_comment. An agent knows the general category but gets no scope information.
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 add_issue_comment (to create) or get_issue_comments (to read), and no prerequisites or conditions. The only routing signal is the tool name itself, which the agent already had.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectCDestructiveIdempotent
Updates an existing project
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Project key | |
| name | No | Project name | |
| archived | No | Whether to archive the project | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| chartEnabled | No | Whether to enable chart | |
| subtaskingEnabled | No | Whether to enable subtasking | |
| textFormattingRule | No | Text formatting rule | |
| projectLeaderCanEditProjectLeader | No | Whether project leaders can edit other project leaders |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is known. The description adds nothing further: it does not say whether this is a partial patch (only supplied fields change) or a full replace, what omitting all nine optional fields does, or that archiving is a destructive side effect. For a destructive mutation with zero required parameters, this is a meaningful gap.
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 single clause is front-loaded and waste-free, but at four words it is under-specified rather than genuinely concise given nine parameters and destructive semantics. There is no structure to speak of.
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?
This is a nine-parameter destructive mutation with no required fields and no output schema, so the description should clarify partial-update behavior and identifier requirements. It omits all of that, leaving the agent to guess at how the call behaves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (key, projectId, archived, chartEnabled, etc.) is already documented in the schema, and the enum on textFormattingRule is visible. The description contributes no additional meaning about parameter interaction or which identifier (key vs projectId vs projectKey) is authoritative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource ('Updates an existing project'), so the basic operation is understandable. However, it says nothing about which attributes can be changed or how it differs from siblings like get_project and add_project, so an agent gets only a generic notion of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_project (read) or add_project (create), nor any prerequisites such as needing an existing project ID or key. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_requestCDestructiveIdempotent
Updates an existing pull request
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Pull request number | |
| repoId | No | Repository ID | |
| issueId | No | Issue ID to link | |
| summary | No | Summary of the pull request | |
| repoName | No | Repository name | |
| statusId | No | Status ID | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| assigneeId | No | User ID of the assignee | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| description | No | Updates an existing pull request | |
| notifiedUserId | No | User IDs to notify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is known without the description. However, the description adds nothing: it does not warn that the operation is destructive, does not say which fields are overwritten or what happens to omitted fields, and mentions no permissions or side effects such as the notifiedUserId 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?
The single sentence is front-loaded and free of padding, but its brevity reflects under-specification rather than economy. There is nothing extra to trim, yet nothing informative is present either.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An 11-parameter destructive mutation with no output schema needs more than one tautological sentence, even with annotations covering the safety hints. The description omits what a successful update returns, whether partial updates are allowed, and how the rich parameter set (project, repo, status, assignee, issue link) interacts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including projectId, assigneeId, statusId, and notifiedUserId is documented in the schema. The description contributes no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description only expands the tool name into a sentence: 'Updates an existing pull request' says nothing beyond update_pull_request. It does not identify which aspects of the PR can be changed (status, assignee, summary, linked issue) nor distinguish it from siblings such as update_pull_request_comment or add_pull_request. This is effectively a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, prerequisites (e.g., needing the PR number), or when a different tool is appropriate. The agent must infer everything from the name and the 11-parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_request_commentCDestructiveIdempotent
Updates a comment on a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Pull request number | |
| repoId | No | Repository ID | |
| content | Yes | Comment content | |
| repoName | No | Repository name | |
| commentId | Yes | Comment ID | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| projectKey | No | The key of the project (e.g., 'PROJECT') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond annotations โ it doesn't say that existing comment content is overwritten, whether the edit is attributed to the caller, or whether other fields are affected, which matters for a destructive mutation.
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 single sentence is front-loaded and free of filler, but it is so sparse for a 7-parameter destructive mutation that brevity crosses into under-specification rather than efficient conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-parameter mutation with no output schema, the description should at minimum clarify the required trio (number, commentId, content) and how the four optional repo/project identifiers are chosen. None of that is present, leaving the agent dependent on the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in the schema, and the baseline of 3 applies. The description adds no extra meaning, such as whether repository can be identified via repoId, repoName, projectId, or projectKey, or how those alternatives interact.
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 ('Updates') and a specific resource ('a comment on a pull request'), which is unambiguous about what operation is performed. However, it offers no differentiation from siblings such as update_issue_comment or update_pull_request, so an agent must infer which comment type applies.
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 add_pull_request_comment or update_issue_comment, and no prerequisites (permissions, ownership of the comment) are mentioned. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_version_milestoneDDestructiveIdempotent
Updates an existing version milestone
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Version ID | |
| name | Yes | Version name | |
| archived | No | Archive status of the version | |
| projectId | No | The numeric ID of the project (e.g., 12345) | |
| startDate | No | Start date | |
| projectKey | No | The key of the project (e.g., 'PROJECT') | |
| description | No | Updates an existing version milestone | |
| releaseDueDate | No | Release due date |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, which is significant, yet the description adds nothing about what a destructive update affects, whether archived milestones behave differently, or what permissions are required. For a destructive mutation, this is effectively silent.
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?
It is a single short sentence with no padding, so it's concise, but that brevity comes from under-specification rather than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, a destructive mutation annotation set, and no output schema, the description is far too thin to help an agent call it correctly. It should at minimum explain what fields are commonly changed and the destructive consequences.
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 8 parameters are documented in the schema itself; the description contributes no additional meaning. Per the high-coverage baseline, a 3 is appropriate, though note the schema's 'description' parameter text was seemingly copied from the tool description, which is confusing.
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 'Updates an existing version milestone' essentially restates the tool name with no added specificity. It identifies a verb and resource, but doesn't distinguish what aspect of the milestone is updated or how it differs from add_version_milestone / delete_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings such as delete_version or add_version_milestone, no preconditions, and no exclusions. The agent must infer all usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_watchingCDestructiveIdempotent
Updates an existing watch note
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | Updated note for the watch | |
| watchId | Yes | Watch ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is carried by structured data. The description adds nothing beyond that โ it doesn't say the existing note is overwritten irreversibly, what happens if the watchId doesn't exist, or whether permissions are required. For a destructive mutation with zero added context, this is a clear gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity borders on under-specification rather than true economy.
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 no annotations beyond safety hints, yet the description says nothing about return values, error conditions for an invalid watchId, or the overwrite semantics of the note. For a destructive two-parameter mutation it should do considerably more.
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 ('Updated note for the watch', 'Watch ID'). The description adds no format, length, or validation detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (updates) and a resource narrowed to 'watch note', which is slightly more than a restatement of the name. However, it never explains what a watch is or how this differs from sibling mutations like add_watching, delete_watching, or mark_watching_as_read, so the agent must infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of add_watching (to create) or delete_watching, nor any prerequisites such as needing an existing watchId. The agent is left to infer routing from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wikiCDestructiveIdempotent
Updates an existing wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the wiki page | |
| wikiId | Yes | Wiki ID | |
| content | No | Content of the wiki page | |
| mailNotify | No | Whether to send notification emails (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered by structured data. The description adds nothing beyond that โ it does not say whether content replaces or appends, whether name is optional, or that mailNotify can trigger emails, which is the only genuinely new behavioral fact an agent would need.
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 five-word sentence with zero filler and the action front-loaded. It is efficient, though the terseness trades away information that the other dimensions penalize.
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?
This is a destructive mutation with four parameters and no output schema. The description never says which fields get changed, whether content fully overwrites the page, or what a successful update returns โ gaps that matter for an overwrite-style operation.
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 (name, wikiId, content, mailNotify) are already documented in the schema. The description adds no semantics beyond that, which is the 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?
States a specific verb and resource ('Updates an existing wiki page'), and the word 'existing' implicitly distinguishes it from add_wiki. However, it does not explicitly name or contrast with the sibling read/add tools, so differentiation is only inferable.
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 add_wiki or get_wiki, no prerequisites such as the page needing to already exist (only implied), and no exclusions. The agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.23.2- Changed
get_document2 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Maximum number of characters of `plain` to return (default: 40000). Fewer may be returned so that the response fits the server's token limit; continue from `nextStart`.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +} - added
Input schema / properties / startAdded value: +{ + "description": "Character offset in `plain` to start reading from (default: 0). To read a long document in parts, pass the `nextStart` of the previous response.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +}
- Added
get_document_comments - Changed
update_issue2 fields changed- changed
Input schema / properties / parentIssueId / descriptionPrevious value: -"Parent issue ID"New value: +"Parent issue ID. Pass null to remove the current parent issue. Omit to leave it unchanged." - changed
Input schema / properties / parentIssueId / typePrevious value: -"number"New value: +[ + "number", + "null" +]
9 tool updates
v0.20.5- Added
add_category - Added
add_document - Changed
add_watching2 fields changed- removed
Input schema / properties / issueIdOrKey / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / issueIdOrKey / typeAdded value: +[ + "number", + "string" +]
- Removed
addDocument - Removed
delete_project - Changed
get_document_tree2 fields changed- removed
Input schema / properties / projectIdOrKey / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - } -] - added
Input schema / properties / projectIdOrKey / typeAdded value: +[ + "string", + "number" +]
- Added
get_issue_attachment - Changed
get_wiki2 fields changed- removed
Input schema / properties / wikiId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - } -] - added
Input schema / properties / wikiId / typeAdded value: +[ + "string", + "number" +]
- Changed
update_wiki2 fields changed- removed
Input schema / properties / wikiId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - } -] - added
Input schema / properties / wikiId / typeAdded value: +[ + "string", + "number" +]
62 tool updates
v0.15.1- Added
add_issue - Added
add_issue_comment - Added
add_project - Added
add_pull_request - Added
add_pull_request_comment - Added
add_related_issue - Added
add_version_milestone - Added
add_watching - Added
add_wiki - Added
addDocument - Added
count_issues - Added
count_notifications - Added
delete_issue - Added
delete_project - Added
delete_version - Added
delete_watching - Added
get_categories - Added
get_custom_fields - Added
get_document - Added
get_document_tree - Added
get_documents - Added
get_git_repositories - Added
get_git_repository - Added
get_issue - Added
get_issue_comments - Added
get_issue_types - Added
get_issues - Changed
get_myself3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Added
get_notifications - Added
get_priorities - Added
get_project - Added
get_project_list - Added
get_project_users - Added
get_pull_request - Changed
get_pull_request_comments3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Added
get_pull_requests - Added
get_pull_requests_count - Added
get_related_issues - Changed
get_resolutions3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Added
get_space - Added
get_space_activities - Added
get_user_recent_updates - Added
get_user_stars_count - Added
get_users - Added
get_version_milestone_list - Added
get_watching_list_count - Added
get_watching_list_items - Added
get_wiki - Added
get_wiki_pages - Changed
get_wikis_count3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Added
mark_notification_as_read - Added
mark_watching_as_read - Added
remove_related_issue - Added
reset_unread_notification_count - Added
update_issue - Added
update_issue_comment - Changed
update_project3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Changed
update_pull_request3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Added
update_pull_request_comment - Changed
update_version_milestone3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / organizationRemoved value: -{ - "description": "Optional organization name. Use list_organizations to inspect available organizations.", - "type": "string" -}
- Added
update_watching - Added
update_wiki
52 tool updates
v0.13.1- Removed
add_issue - Removed
add_issue_comment - Removed
add_project - Removed
add_pull_request - Removed
add_pull_request_comment - Removed
add_version_milestone - Removed
add_watching - Removed
add_wiki - Removed
addDocument - Removed
count_issues - Removed
count_notifications - Removed
delete_issue - Removed
delete_project - Removed
delete_version - Removed
delete_watching - Removed
get_categories - Removed
get_custom_fields - Removed
get_document - Removed
get_document_tree - Removed
get_documents - Removed
get_git_repositories - Removed
get_git_repository - Removed
get_issue - Removed
get_issue_comments - Removed
get_issue_types - Removed
get_issues - Removed
get_notifications - Removed
get_priorities - Removed
get_project - Removed
get_project_list - Removed
get_project_users - Removed
get_pull_request - Removed
get_pull_requests - Removed
get_pull_requests_count - Removed
get_space - Removed
get_space_activities - Removed
get_user_recent_updates - Removed
get_user_stars_count - Removed
get_users - Removed
get_version_milestone_list - Removed
get_watching_list_count - Removed
get_watching_list_items - Removed
get_wiki - Removed
get_wiki_pages - Removed
list_organizations - Removed
mark_notification_as_read - Removed
mark_watching_as_read - Removed
reset_unread_notification_count - Removed
update_issue - Removed
update_pull_request_comment - Removed
update_watching - Removed
update_wiki
1 tool update
v0.13.0- Added
get_project_users
2 tool updates
v0.11.1- Changed
add_issue2 fields changed- changed
Input schema / properties / customFields / items / properties / value / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "items": { - "type": "number" - }, - "type": "array" - } -]New value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } +] - changed
Input schema / properties / customFields / items / properties / value / descriptionPrevious value: -"The ID(s) of the custom field item. For single-select fields, provide a number. For multi-select fields, provide an array of numbers representing the selected item IDs."New value: +"Value of the custom field. For text/date fields, provide a string. For numeric fields, provide a number. For list fields, provide an array of strings or numbers."
- Changed
update_issue2 fields changed- changed
Input schema / properties / customFields / items / properties / value / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "items": { - "type": "number" - }, - "type": "array" - } -]New value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } +] - changed
Input schema / properties / customFields / items / properties / value / descriptionPrevious value: -"The ID(s) of the custom field item. For single-select fields, provide a number. For multi-select fields, provide an array of numbers representing the selected item IDs."New value: +"Value of the custom field. For text/date fields, provide a string. For numeric fields, provide a number. For list fields, provide an array of strings or numbers."
58 tool updates
v0.11.0- Changed
add_issue1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_issue_comment1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_project1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_pull_request1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_pull_request_comment1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_version_milestone1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_watching1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
add_wiki1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Added
addDocument - Changed
count_issues1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
count_notifications1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
delete_issue1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
delete_project1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
delete_version1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
delete_watching1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_categories1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_custom_fields1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_document1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_document_tree1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_documents1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_git_repositories1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_git_repository1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_issue1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_issue_comments1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_issue_types1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_issues1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_myself2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_notifications1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_priorities2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_project1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_project_list1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_pull_request1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_pull_request_comments1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_pull_requests1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_pull_requests_count1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_resolutions2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_space2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Added
get_space_activities - Added
get_user_recent_updates - Added
get_user_stars_count - Changed
get_users2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_version_milestone_list1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_watching_list_count1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_watching_list_items1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_wiki1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_wiki_pages1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
get_wikis_count1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Added
list_organizations - Changed
mark_notification_as_read1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
mark_watching_as_read1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
reset_unread_notification_count2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_issue1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_project1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_pull_request1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_pull_request_comment1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_version_milestone1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_watching1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
- Changed
update_wiki1 field changed- added
Input schema / properties / organizationAdded value: +{ + "description": "Optional organization name. Use list_organizations to inspect available organizations.", + "type": "string" +}
45 tool updates
v1.0.0- Changed
add_issue3 fields changed- removed
Input schema / properties / customFieldIdRemoved value: -{ - "description": "Custom field IDs", - "items": { - "type": "number" - }, - "type": "array" -} - removed
Input schema / properties / customFieldValueRemoved value: -{ - "description": "Values for custom fields", - "items": { - "type": "string" - }, - "type": "array" -} - added
Input schema / properties / customFieldsAdded value: +{ + "description": "List of custom fields to set on the issue", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "description": "The ID of the custom field (e.g., 12345)", + "type": "number" + }, + "otherValue": { + "description": "Other value for list type fields", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } + ], + "description": "The ID(s) of the custom field item. For single-select fields, provide a number. For multi-select fields, provide an array of numbers representing the selected item IDs." + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +}
- Changed
add_issue_comment4 fields changed- added
Input schema / properties / issueIdAdded value: +{ + "description": "The numeric ID of the issue (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / issueIdOrKeyRemoved value: -{ - "description": "Issue ID or issue key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / issueKeyAdded value: +{ + "description": "The key of the issue (e.g., 'PROJ-123')", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "issueIdOrKey", - "content" -]New value: +[ + "content" +]
- Changed
add_pull_request7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "projectIdOrKey", - "repoIdOrName", - "summary", - "description", - "base", - "branch" -]New value: +[ + "summary", + "description", + "base", + "branch" +]
- Changed
add_pull_request_comment7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "projectIdOrKey", - "repoIdOrName", - "number", - "content" -]New value: +[ + "number", + "content" +]
- Added
add_version_milestone - Added
add_watching - Changed
count_issues1 field changed- added
Input schema / properties / customFieldsAdded value: +{ + "description": "Custom field filters (text, numeric, date, or list)", + "items": { + "anyOf": [ + { + "additionalProperties": false, + "description": "Text custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "type": { + "const": "text", + "type": "string" + }, + "value": { + "description": "Keyword to match for the custom field", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "type", + "id", + "value" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "Numeric custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "max": { + "description": "Maximum numeric value (inclusive)", + "type": "number" + }, + "min": { + "description": "Minimum numeric value (inclusive)", + "type": "number" + }, + "type": { + "const": "numeric", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "Date custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "max": { + "description": "End date (yyyy-MM-dd)", + "type": "string" + }, + "min": { + "description": "Start date (yyyy-MM-dd)", + "type": "string" + }, + "type": { + "const": "date", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "List custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "type": { + "const": "list", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array" + } + ], + "description": "Value ID(s) to match for list-type custom field" + } + }, + "required": [ + "type", + "id", + "value" + ], + "type": "object" + } + ] + }, + "type": "array" +}
- Changed
delete_issue4 fields changed- added
Input schema / properties / issueIdAdded value: +{ + "description": "The numeric ID of the issue (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / issueIdOrKeyRemoved value: -{ - "description": "Issue ID or issue key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / issueKeyAdded value: +{ + "description": "The key of the issue (e.g., 'PROJ-123')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "issueIdOrKey" -]
- Changed
delete_project4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Added
delete_version - Added
delete_watching - Changed
get_categories4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Added
get_custom_fields - Added
get_document - Added
get_document_tree - Added
get_documents - Changed
get_git_repositories4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Changed
get_git_repository7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey", - "repoIdOrName" -]
- Changed
get_issue4 fields changed- added
Input schema / properties / issueIdAdded value: +{ + "description": "The numeric ID of the issue (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / issueIdOrKeyRemoved value: -{ - "description": "Issue ID or issue key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / issueKeyAdded value: +{ + "description": "The key of the issue (e.g., 'PROJ-123')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "issueIdOrKey" -]
- Changed
get_issue_comments4 fields changed- added
Input schema / properties / issueIdAdded value: +{ + "description": "The numeric ID of the issue (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / issueIdOrKeyRemoved value: -{ - "description": "Issue ID or issue key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / issueKeyAdded value: +{ + "description": "The key of the issue (e.g., 'PROJ-123')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "issueIdOrKey" -]
- Changed
get_issue_types4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Changed
get_issues1 field changed- added
Input schema / properties / customFieldsAdded value: +{ + "description": "Custom field filters (text, numeric, date, or list)", + "items": { + "anyOf": [ + { + "additionalProperties": false, + "description": "Text custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "type": { + "const": "text", + "type": "string" + }, + "value": { + "description": "Keyword to match for the custom field", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "type", + "id", + "value" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "Numeric custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "max": { + "description": "Maximum numeric value (inclusive)", + "type": "number" + }, + "min": { + "description": "Minimum numeric value (inclusive)", + "type": "number" + }, + "type": { + "const": "numeric", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "Date custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "max": { + "description": "End date (yyyy-MM-dd)", + "type": "string" + }, + "min": { + "description": "Start date (yyyy-MM-dd)", + "type": "string" + }, + "type": { + "const": "date", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "List custom field filter", + "properties": { + "id": { + "description": "Custom field ID (e.g., 12345)", + "type": "number" + }, + "type": { + "const": "list", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array" + } + ], + "description": "Value ID(s) to match for list-type custom field" + } + }, + "required": [ + "type", + "id", + "value" + ], + "type": "object" + } + ] + }, + "type": "array" +}
- Changed
get_myself1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_notifications2 fields changed- removed
Input schema / properties / alreadyReadRemoved value: -{ - "description": "Whether to include already read notifications", - "type": "boolean" -} - removed
Input schema / properties / resourceAlreadyReadRemoved value: -{ - "description": "Whether to include notifications for already read resources", - "type": "boolean" -}
- Changed
get_priorities1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_project4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Changed
get_pull_request7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "projectIdOrKey", - "repoIdOrName", - "number" -]New value: +[ + "number" +]
- Changed
get_pull_request_comments7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository ID", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "projectIdOrKey", - "repoIdOrName", - "number" -]New value: +[ + "number" +]
- Changed
get_pull_requests7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey", - "repoIdOrName" -]
- Changed
get_pull_requests_count7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey", - "repoIdOrName" -]
- Changed
get_resolutions1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_space1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_users1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
get_version_milestone_list - Changed
get_wiki_pages4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Changed
get_wikis_count4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Added
mark_watching_as_read - Changed
reset_unread_notification_count1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
update_issue5 fields changed- added
Input schema / properties / customFieldsAdded value: +{ + "description": "List of custom fields to set on the issue", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "description": "The ID of the custom field (e.g., 12345)", + "type": "number" + }, + "otherValue": { + "description": "Other value for list type fields", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } + ], + "description": "The ID(s) of the custom field item. For single-select fields, provide a number. For multi-select fields, provide an array of numbers representing the selected item IDs." + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / issueIdAdded value: +{ + "description": "The numeric ID of the issue (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / issueIdOrKeyRemoved value: -{ - "description": "Issue ID or issue key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / issueKeyAdded value: +{ + "description": "The key of the issue (e.g., 'PROJ-123')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "issueIdOrKey" -]
- Changed
update_project4 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "projectIdOrKey" -]
- Changed
update_pull_request7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "projectIdOrKey", - "repoIdOrName", - "number" -]New value: +[ + "number" +]
- Changed
update_pull_request_comment7 fields changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The numeric ID of the project (e.g., 12345)", + "type": "number" +} - removed
Input schema / properties / projectIdOrKeyRemoved value: -{ - "description": "Project ID or project key", - "type": [ - "string", - "number" - ] -} - added
Input schema / properties / projectKeyAdded value: +{ + "description": "The key of the project (e.g., 'PROJECT')", + "type": "string" +} - added
Input schema / properties / repoIdAdded value: +{ + "description": "Repository ID", + "type": "number" +} - removed
Input schema / properties / repoIdOrNameRemoved value: -{ - "description": "Repository ID or name", - "type": "string" -} - added
Input schema / properties / repoNameAdded value: +{ + "description": "Repository name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "projectIdOrKey", - "repoIdOrName", - "number", - "commentId", - "content" -]New value: +[ + "number", + "commentId", + "content" +]
- Added
update_version_milestone - Added
update_watching - Added
update_wiki
40 tool updates
- First observed
add_issue - First observed
add_issue_comment - First observed
add_project - First observed
add_pull_request - First observed
add_pull_request_comment - First observed
add_wiki - First observed
count_issues - First observed
count_notifications - First observed
delete_issue - First observed
delete_project - First observed
get_categories - First observed
get_git_repositories - First observed
get_git_repository - First observed
get_issue - First observed
get_issue_comments - First observed
get_issue_types - First observed
get_issues - First observed
get_myself - First observed
get_notifications - First observed
get_priorities - First observed
get_project - First observed
get_project_list - First observed
get_pull_request - First observed
get_pull_request_comments - First observed
get_pull_requests - First observed
get_pull_requests_count - First observed
get_resolutions - First observed
get_space - First observed
get_users - First observed
get_watching_list_count - First observed
get_watching_list_items - First observed
get_wiki - First observed
get_wiki_pages - First observed
get_wikis_count - First observed
mark_notification_as_read - First observed
reset_unread_notification_count - First observed
update_issue - First observed
update_project - First observed
update_pull_request - First observed
update_pull_request_comment
TDQS
Scored across 64 tools
Most tools clearly target a distinct resource and action, such as get_issue vs. add_issue_comment vs. get_pull_request_comments. A few boundaries could still be confused, especially the mixed count/list tools and version/milestone operations like get_version_milestone_list vs. delete_version.
The dominant pattern is verb_noun, but counting tools are inconsistent: count_issues, count_notifications, get_pull_requests_count, get_wikis_count, and get_watching_list_count all use different structures. There are also singular/plural mismatches such as get_git_repositories vs. get_git_repository and delete_version vs. the version_milestone naming elsewhere.
64 tools is excessive for an MCP server even given Backlog's broad surface area. The set includes many narrow list/count variants, and the cognitive load is high for an agent selecting among them.
Core issue workflows are well covered, including CRUD, comments, related issues, watching, wiki, pull requests, and documents. However, notable gaps remain: documents lack update/delete and comment creation, several metadata resources are read-only, and wiki/project/pull-request deletion or merge operations are absent.
Maintenance
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
Nifty's MCP server โ exposes tasks, projects, messages, and files as tools for AI agents.
Model Context Protocol server for todo.vu task management and time tracking.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates Backlog project management with Claude via Model Context Protocol, enabling access to projects, issues, and wiki pages through natural language interactions.1-
- AlicenseBqualityDmaintenanceProvides access to Backlog API for project management, issue tracking, and file operations through Claude Desktop.8011MIT
- AlicenseBqualityCmaintenanceA Model Context Protocol server that enables Claude Code to directly interact with Redmine project management systems, supporting issue management, project operations, and search features.229MIT
- -licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables AI agents to interact with Backlog API for managing projects, issues, wikis, Git repositories, and other Backlog features.-