MantisBT MCP Server
The MantisBT MCP Server integrates MantisBT bug tracking into MCP-capable clients (e.g., Claude Code), enabling full issue lifecycle management and more.
Issue Management
Get, list (with filtering by project, status, assignee, reporter, saved filter, and field projection), create, update, and delete issues
Notes & Attachments
List, add (public or private), and delete notes/comments on issues
List attachments and upload files via local path or Base64-encoded content
Relationships & Monitoring
Add/remove relationships between issues (
duplicate_of,related_to,parent_of,child_of,has_duplicate)Add/remove users as issue monitors/watchers for email notifications
Tags
List available tags; attach (auto-creating if needed) or detach tags from issues
Projects
List accessible projects; retrieve project versions, categories, and users (with optional access level filter)
Semantic Search (optional, requires MANTIS_SEARCH_ENABLED=true)
Natural language search over issues using offline embedding models (
vectraorsqlite-vecbackends)Rebuild the search index (full or incremental) and check index status
Metadata & System
Sync and retrieve cached metadata (projects, users, versions, categories)
List saved filters, get current user profile, list supported languages
Retrieve enum values for issue fields (severity, status, priority, resolution, reproducibility)
Get MantisBT and MCP server version information and server configuration
Deployment
Supports stdio (local) and HTTP (remote) modes with optional token authentication and configurable file upload restrictions
MantisBT MCP Server
English · Deutsch
A Model Context Protocol (MCP) server that integrates the MantisBT REST API into Claude Code and other MCP-capable clients. Read, create, and update issues directly from your editor.
Requirements
Node.js ≥ 18
MantisBT installation with REST API enabled (version 2.23+)
MantisBT API token (create under My Account → API Tokens)
Related MCP server: MantisBT MCP Server
Installation
Via npx (recommended):
Add to ~/.claude/claude_desktop_config.json (Claude Desktop) or your local
claude_desktop_config.json (Claude Code):
{
"mcpServers": {
"mantisbt": {
"command": "npx",
"args": ["-y", "@dpesch/mantisbt-mcp-server"],
"env": {
"MANTIS_BASE_URL": "https://your-mantis.example.com/api/rest",
"MANTIS_API_KEY": "your-api-token"
}
}
}
}Local build:
git clone https://codeberg.org/dpesch/mantisbt-mcp-server
cd mantisbt-mcp-server
npm run init
npm run build{
"mcpServers": {
"mantisbt": {
"command": "node",
"args": ["/path/to/mantisbt-mcp-server/dist/index.js"],
"env": {
"MANTIS_BASE_URL": "https://your-mantis.example.com/api/rest",
"MANTIS_API_KEY": "your-api-token"
}
}
}
}Configuration
Environment variables
Variable | Required | Default | Description |
| ✅ | – | Base URL of your MantisBT installation. Both |
| ✅ | – | API token for authentication |
| – | auto | Set to |
| – |
| Directory for the metadata cache |
| – |
| Cache lifetime in seconds |
| – |
| Transport mode: |
| – |
| Port for HTTP mode |
| – |
| Bind address for HTTP mode. Changed from |
| ✅ (HTTP mode) | – | Bearer token for the |
| – |
| Set to |
| – |
| Vector store backend: |
| – |
| Directory for the search index |
| – |
| Embedding model name (downloaded once on first use, ~80 MB) |
| – |
| Number of ONNX intra-op threads for the embedding model. Default is 1 to prevent CPU saturation on multi-core machines and WSL. Increase only if index rebuild speed matters and the host is dedicated to this workload. |
| – | – | Restrict |
Available tools
Issues
Tool | Description |
| Retrieve an issue by its numeric ID; optional |
| Retrieve multiple issues by ID in one call (1–50 IDs); missing or inaccessible IDs return |
| Filter issues by project, status, author, and more; optional |
| Create a new issue; |
| Update an existing issue; enum fields ( |
| Delete an issue |
Notes
Tool | Description |
| List all notes of an issue |
| Add a note to an issue |
| Delete a note |
Attachments
Tool | Description |
| List attachments of an issue |
| Upload a file to an issue — preferred: local |
Relationships
Tool | Description |
| Create a relationship between two issues; optional |
| Remove a relationship from an issue (use the |
Monitors
Tool | Description |
| Add a user as a monitor of an issue |
| Remove a user as a monitor of an issue |
Tags
Tool | Description |
| List all available tags; falls back to the metadata cache when |
| Attach tags to an issue |
| Remove a tag from an issue |
Projects
Tool | Description |
| List all accessible projects; returns normalized project data (consistent with |
| Get versions of a project; optional |
| Get categories of a project |
| Get users of a project |
| Search project members by name, real name, or email (case-insensitive substring match); optional |
Semantic search (optional)
Instead of exact keyword matching, semantic search understands the meaning behind a query. Ask in plain language — the search engine finds conceptually related issues even when the wording doesn't match:
"login fails after password reset" — finds issues about authentication edge cases
"performance problems on the checkout page" — surfaces related reports regardless of the exact terminology used
"duplicate entries in the invoice list" — catches issues described as "shown twice", "double records", etc.
The embedding model (~80 MB) runs entirely offline — no OpenAI key, no external API. It is downloaded once on first start and cached locally. Issues are indexed incrementally on every server start (only new and updated issues are re-indexed).
Activate with MANTIS_SEARCH_ENABLED=true.
Tool | Description |
| Natural language search over all indexed issues — returns top-N results with cosine similarity score; optional |
| Build or update the search index; |
| Return the current fill level of the search index: how many issues are indexed vs. total, and the timestamp of the last sync |
Which backend to choose?
|
| |
Dependencies | None (pure JS) | Requires native build tools |
Install | Included |
|
Best for | Up to ~10,000 issues | 10,000+ issues |
Performance | Fast enough for most setups | Faster for large corpora |
Start with vectra. Switch to sqlite-vec if indexing or query times become noticeably slow.
npm install sqlite-vec better-sqlite3
# then set MANTIS_SEARCH_BACKEND=sqlite-vecMetadata & system
Tool | Description |
| Return all field names valid for the |
| Retrieve a compact metadata summary: project/tag counts and per-project user/version/category counts; use |
| Return the full raw metadata cache as minified JSON (all projects with complete fields, users/versions/categories per project, all tags) |
| Refresh the metadata cache |
| List saved filters |
| Retrieve your own user profile |
| List available languages |
| Show server configuration (base URL, cache TTL) |
| Return valid ID/name pairs for all issue enum fields (severity, status, priority, resolution, reproducibility) — use before |
| Get MantisBT version and check for updates |
| Return the version of this mantisbt-mcp-server instance |
Available resources
MCP Resources are URI-addressable, read-only data that clients can fetch directly without calling a tool. They are the third MCP primitive alongside Tools and Prompts. Note that Resource support is less widely implemented in MCP clients than Tools — check your client's documentation.
Resource URI | Description |
| Profile of the authenticated API user (live fetch) |
| All accessible MantisBT projects as a compact list (cache-backed, refreshed via |
| Combined project view: project fields + users + versions + categories in one call; cache-first, list-support for enumerating all available project URIs |
| Valid values for all issue enum fields: severity, priority, status, resolution, reproducibility (live fetch) |
Available prompts
MCP prompt templates are conversation starters that instruct the LLM to collect structured input and then call the appropriate tool. They are not tools themselves — they initiate a guided workflow.
Prompt | Required args | Optional args | Description |
|
|
| Guides through a structured bug report and calls |
|
|
| Guides through a feature request and calls |
|
| – | Fetches an issue via |
|
| – | Lists issues via |
HTTP mode
For use as a standalone server (e.g. in remote setups). MCP_HTTP_TOKEN is required in HTTP mode — the server refuses to start without it:
MCP_HTTP_TOKEN=secret MANTIS_BASE_URL=... MANTIS_API_KEY=... \
TRANSPORT=http PORT=3456 node dist/index.js
# With explicit bind address (required for Docker/remote):
# MCP_HTTP_TOKEN=secret MANTIS_BASE_URL=... MANTIS_API_KEY=... \
# TRANSPORT=http PORT=3456 MCP_HTTP_HOST=0.0.0.0 node dist/index.jsEvery /mcp request must send Authorization: Bearer <token>. Over HTTP, upload_file's file_path is disabled unless MANTIS_UPLOAD_DIR is set — use the content (Base64) parameter instead.
Health check: GET http://localhost:3456/health (always public, no token required)
Documentation
Cookbook — tool-oriented recipes with copy-paste-ready parameter examples for all registered tools
Usage Examples — natural language prompt examples for everyday use cases (no tool names required)
Development
npm run init # First-time setup: install deps, git hooks, typecheck
npm run build # Compile TypeScript → dist/
npm run typecheck # Type check without output
npm run dev # Watch mode for development
npm test # Run tests (vitest)
npm run test:watch # Run tests in watch mode
npm run test:coverage # Coverage reportLicense
MIT – see LICENSE
Contributing
Contributions welcome! Please read CONTRIBUTING.md. Repository: codeberg.org/dpesch/mantisbt-mcp-server
Available Tools
34 toolsadd_monitorAdd Issue MonitorA
Add a user as a monitor (watcher) of a MantisBT issue. Monitors receive email notifications whenever the issue is updated. Returns a success confirmation object.
Use add_monitor to subscribe team members to issue updates without assigning them as the handler. To unsubscribe a user, call remove_monitor with the same parameters.
Adding a user who is already a monitor is a no-op — the operation succeeds without creating duplicates.
Prerequisites: obtain issue_id from list_issues or get_issue; use find_project_member or get_project_users to look up valid MantisBT login names.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Numeric issue ID — use list_issues or get_issue to obtain issue IDs | |
| username | Yes | MantisBT login name (not the display name) of the user to add as monitor. Use find_project_member or get_project_users to discover valid login names for a project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds important behavior: 'Adding a user who is already a monitor is a no-op' and mentions return of a success confirmation object. Annotations are basic, but the description enhances understanding of idempotency for duplicates.
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 concise (5 sentences) and front-loaded with the primary action. Each sentence adds essential information: action, purpose, usage, no-op behavior, and prerequisites.
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 2-parameter mutation tool, the description covers purpose, usage, behavior, and return type ('success confirmation object'). No gaps given 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?
While schema coverage is 100% with good descriptions, the tool description adds value by guiding how to obtain parameter values (e.g., 'use list_issues or get_issue to obtain issue IDs').
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 clearly states 'Add a user as a monitor (watcher) of a MantisBT issue,' specifying the verb 'add' and the resource 'monitor/watcher'. It distinguishes from related tools like remove_monitor and create_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?
The description explicitly says 'Use add_monitor to subscribe team members...without assigning them as handler' and directs to use remove_monitor for unsubscription. It also lists prerequisites for obtaining issue_id and username.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_noteAdd Note to IssueA
Add a note (comment) to an existing MantisBT issue. Returns the created note object including id, created_at, reporter, text, view_state, and a view_url linking directly to the note in the MantisBT web UI.
Full UTF-8 text is supported. Markdown syntax is stored as-is — rendering depends on the MantisBT instance's configured text renderer.
Use view_state="private" to restrict the note to users with reporter-level access or higher; public notes are visible to all users who can view the issue.
Prerequisites: obtain issue_id from list_issues, get_issue, or search_issues.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Note text (minimum 1 character). Full UTF-8 including emoji is supported. Markdown is stored as-is. | |
| issue_id | Yes | Numeric issue ID — use list_issues or get_issue to obtain issue IDs | |
| view_state | No | Visibility of the note: "public" (visible to all, default) or "private" (visible only to users with sufficient access level). | public |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond minimal annotations: describes return object, UTF-8 support, Markdown handling dependency on config, and view_state access levels. No contradictions with 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?
Five well-organized sentences with no redundancy. Front-loaded with purpose and return, then details, then prerequisites.
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?
Complete coverage for a tool with 3 parameters and no output schema: describes return fields, encoding, behavior, and prerequisites. No 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 coverage is 100%; description adds practical context for each parameter, such as details on encoding for text and how to obtain issue_id. Adds value beyond 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?
Clearly states the action 'Add a note (comment) to an existing MantisBT issue' and specifies the return object with fields. Distinguishes from sibling tools like delete_note and list_notes.
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 prerequisites for obtaining issue_id and explains when to use private vs public view_state. Lacks explicit guidance on when not to use this tool or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_relationshipAdd Issue RelationshipA
Add a relationship between two MantisBT issues.
Relationship types — use either type_id (numeric) or type_name (string):
0 / "duplicate_of" — this issue is a duplicate of target
1 / "related_to" — this issue is related to target
2 / "parent_of" — this issue depends on target (target must be done first); alias: "depends_on"
3 / "child_of" — this issue blocks target (target can't proceed until this is done); alias: "blocks"
4 / "has_duplicate" — this issue has target as a duplicate
Directionality note: "A child_of B" means A blocks B. "A parent_of B" means A depends on B.
Dash variants (e.g. "related-to") are also accepted for type_name.
| Name | Required | Description | Default |
|---|---|---|---|
| type_id | No | Relationship type ID: 0=duplicate_of, 1=related_to, 2=parent_of (depends on), 3=child_of (blocks), 4=has_duplicate. Use either type_id or type_name. | |
| issue_id | Yes | The source issue ID (the one the relationship is added to) | |
| target_id | Yes | The target issue ID | |
| type_name | No | Relationship type name as alternative to type_id. Accepted: "duplicate_of", "related_to", "parent_of" (or "depends_on"), "child_of" (or "blocks"), "has_duplicate". Dash variants (e.g. "related-to") also work. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-idempotent, non-destructive behavior. The description adds directionality details but no additional behavioral traits beyond what annotations imply.
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 well-structured with bullet points and front-loaded purpose, though slightly lengthy; every sentence serves a purpose given the 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?
Given the tool's complexity (4 parameters, no output schema), the description is fully complete, covering all relationship types, aliases, directionality, and parameter alternatives without 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 coverage is 100%, but the description adds significant value by explaining relationship type aliases, variants (e.g., dash), and directionality, which goes beyond the schema's minimal descriptions.
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 clearly states 'Add a relationship between two MantisBT issues.' with explicit verb and resource, and the detailed relationship types distinguish it from sibling tools like remove_relationship.
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 provides clear context for using the tool, including relationship types and directionality, but lacks explicit when-not-to-use or comparison with alternatives beyond mentioning remove_relationship.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_tagsAttach Tags to IssueA
Attach one or more tags to a MantisBT issue.
Each tag can be specified either by ID or by name. If a tag name is provided that does not exist yet, MantisBT will create it automatically (requires tag_create_threshold permission, default: REPORTER).
Requires tag_attach_threshold permission (default: REPORTER).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Tags to attach — each entry needs at least id or name | |
| issue_id | Yes | Numeric issue ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral details beyond annotations: automatic tag creation as a side effect and permission thresholds. Annotations indicate non-destructive, non-idempotent, non-read-only, which the description complements without contradiction.
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?
Concise and well-structured: first sentence states purpose, then details on parameter specification and permissions. No unnecessary words; every sentence adds value.
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?
Covers the action, parameters, side effects (auto-creation), and permissions. No output schema, but description sufficiently addresses what the agent needs to know.
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 has 100% coverage with descriptions, but the description adds meaning: clarifies that tags can be specified by ID or name, and notes auto-creation for new names, going beyond schema definitions.
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 clearly states the action ('Attach one or more tags to a MantisBT issue'), identifies the resource (tags to issue), and distinguishes from siblings like 'detach_tag' and 'list_tags'.
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 guidance on specifying tags by ID or name, automatic creation behavior with permission requirements, and explicit permission thresholds. It does not explicitly state when not to use (e.g., for removal), but context from siblings implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_issueCreate IssueA
Create a new MantisBT issue. Returns the full created issue object including the assigned id, summary, status, priority, severity, category, reporter, created_at, and view_url.
Required fields: summary, description, project_id, category. All other fields are optional with sensible defaults (priority: "normal", severity: "minor").
Recommended workflow:
Call get_project_categories to obtain a valid category name
Optionally call get_project_versions to obtain version names
Optionally call find_project_member to resolve the assignee's username
Both priority and severity accept canonical English names or localized labels from the connected MantisBT instance — call get_issue_enums to see all available values.
For the handler, prefer the username field (resolved server-side) over handler_id when working interactively.
| Name | Required | Description | Default |
|---|---|---|---|
| handler | No | MantisBT login name of the assignee. The server resolves the name to a user ID from the project member list. Use find_project_member or get_project_users to look up valid login names. | |
| summary | Yes | Issue summary/title (required) | |
| version | No | Affected product version name. Use get_project_versions to list available version names for the project. | |
| category | Yes | Category name (required). Use get_project_categories to list available categories for the project. | |
| priority | No | Priority level. Canonical English names: none, low, normal, high, urgent, immediate. Default: "normal". Use get_issue_enums to see localized labels. | normal |
| severity | No | Severity level. Canonical English names: feature, trivial, text, tweak, minor, major, crash, block. Default: "minor". Use get_issue_enums to see localized labels. | minor |
| handler_id | No | Numeric user ID of the assignee. Alternative to the handler field — use one or the other, not both. | |
| project_id | Yes | Project ID the issue belongs to — use list_projects to discover project IDs | |
| view_state | No | Visibility of the issue: "public" (visible to all, default) or "private" (restricted to higher-access users). | |
| description | Yes | Detailed issue description (required). Do not create issues without a description. Plain text or Markdown. | |
| custom_fields | No | Custom field values: [{field: {id|name}, value: "<string>"}]. Use get_issue_fields or get_metadata to discover available custom fields per project. | |
| target_version | No | Target fix version — version in which the issue is planned to be resolved. Use get_project_versions to list available version names. | |
| reproducibility | No | How reliably the issue reproduces. Canonical English names: always, sometimes, random, have not tried, unable to reproduce, N/A. Use get_issue_enums to see localized labels. | |
| fixed_in_version | No | Version in which the issue was fixed. Use get_project_versions to list available version names. | |
| steps_to_reproduce | No | Step-by-step instructions to reproduce the issue. Plain text or Markdown. | |
| additional_information | No | Additional context or notes about the issue. Plain text or Markdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are consistent (readOnlyHint=false, idempotentHint=false, destructiveHint=false). Description adds that the tool creates an issue and returns the full object with id, summary, etc. No contradiction.
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?
Well-structured: purpose/return first, then required fields, then workflow, then parameter notes. Every sentence adds value; no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 16 parameters and no output schema, the description covers return values and provides workflow guidance. Slightly missing error handling or failure cases, but sufficient for agent use.
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%, but description adds value by explaining canonical vs localized names for priority/severity, recommending get_issue_enums, and clarifying handler vs handler_id usage.
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 clearly states 'Create a new MantisBT issue' with a specific verb and resource. It distinguishes from sibling tools like update_issue and delete_issue by focusing on creation and describing the returned object.
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 explicit workflow: call get_project_categories first, optionally get_project_versions and find_project_member. Also explains when to use handler vs handler_id, and mentions sensible defaults for optional fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_issueDelete IssueADestructiveIdempotent
Permanently delete a MantisBT issue. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric issue ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by explicitly stating the deletion is irreversible, which aligns with destructiveHint=true but provides extra clarity. It does not contradict 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?
The description is extremely concise (two sentences), front-loading the key information with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one well-documented parameter and clear annotations, the description is complete and sufficient.
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 schema coverage is 100% and the parameter description is clear. The tool description adds no additional semantics beyond what the schema provides, meeting 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?
The description clearly states the action ('permanently delete') and the resource ('MantisBT issue'), distinguishing it from sibling tools like create_issue, update_issue, etc.
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 does not provide any guidance on when to use this tool versus alternatives (e.g., when to delete vs. close an issue). It only describes the action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteDelete NoteADestructiveIdempotent
Permanently delete a note from a MantisBT issue. This action is irreversible — deleted notes cannot be recovered.
Returns a plain-text confirmation message on success. Returns an error if the note does not exist or the current user lacks permission to delete it (MantisBT enforces access control: users can typically only delete their own notes unless they have manager-level access or higher).
Prerequisites: obtain note_id from list_notes or from get_issue (notes[].id); obtain issue_id from the same source.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Numeric note ID to delete — obtain from get_issue (notes[].id) or list_notes | |
| issue_id | Yes | Numeric issue ID that owns the note — use get_issue or list_notes to identify this value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true, readOnlyHint=false, idempotentHint=true), the description adds irreversibility, return value (plain-text confirmation), error conditions (note not found or permission denied), and access control explanation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs plus a prerequisites line. Front-loaded with core action and irreversibility. Every sentence adds information without redundancy or fluff.
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 2 parameters, no output schema, and presence of annotations, the description covers action, return value, error cases, and prerequisites. It is sufficient for an agent to understand usage and expected outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by specifying how to obtain parameter values (from list_notes or get_issue), which provides necessary context beyond schema descriptions.
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 clearly states the action (permanently delete a note), the resource (a note from a MantisBT issue), and emphasizes irreversibility. It distinguishes from sibling tools like add_note, list_notes, and 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?
Provides clear context for when to use (deleting a note) and prerequisites (obtain note_id and issue_id from list_notes or get_issue). Mentions access control limitations but does not explicitly state when not to use or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_tagDetach Tag from IssueAIdempotent
Remove a tag from a MantisBT issue.
Requires tag_detach_own_threshold (default: REPORTER) for own tags, or tag_detach_threshold (default: DEVELOPER) for tags attached by others.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | Numeric tag ID to remove | |
| issue_id | Yes | Numeric issue ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive behavior; the description adds value by explaining the permission model, though it does not mention idempotency or error handling for non-existent tags/issues.
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 fluff. The first sentence immediately states the tool's purpose, and the second adds critical permission details efficiently.
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 tool's simplicity and annotations, the description covers purpose and permissions adequately. Lacks mention of side effects or return value, but idempotency mitigates the need for extensive detail.
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?
Input schema has 100% coverage with clear descriptions for both parameters. The description adds no extra meaning beyond what the schema provides, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state the action ('Remove a tag') and resource ('MantisBT issue'), directly distinguishing it from sibling tools like 'attach_tags' which performs the opposite operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description specifies permission thresholds required for execution, indicating when the tool can be used. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_project_memberFind Project MemberARead-onlyIdempotent
Search for users with access to a MantisBT project by name, display name, or email.
Returns up to limit matching users (default: 10, max: 100). Matching is case-insensitive substring search across name, real_name, and email fields. Omit query to list the first limit users.
Data is served from the local metadata cache when fresh; falls back to a live API call otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 10, max: 100) | |
| query | No | Case-insensitive substring to match against name, real_name, or email | |
| project_id | Yes | Numeric project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark as read-only and idempotent. The description adds caching behavior details, which is a useful behavioral disclosure beyond 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?
Three concise sentences: purpose, query behavior with defaults, caching fallback. No unnecessary 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?
Covers search criteria, case-insensitivity, defaults, caching. Lacks return structure but acceptable for a search tool without 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 coverage is 100%. The description adds meaning by explaining limit's effect and query's case-insensitive substring matching across fields, going beyond schema descriptions.
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 clearly states the action (search for users), the resource (users with access to a MantisBT project), and the search criteria (by name, display name, or email). This distinguishes it from sibling tools like get_project_users.
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 guidance on omitting query to list first limit users, and specifies default and max limit. It does not explicitly mention alternatives but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configGet MantisBT ConfigurationARead-onlyIdempotent
Retrieve one or more MantisBT configuration options.
Common option names:
"status_enum_string" — issue status values and their IDs
"priority_enum_string" — priority values
"severity_enum_string" — severity values
"resolution_enum_string" — resolution values
"reproducibility_enum_string" — reproducibility values
"view_state_enum_string" — view state values
"access_levels_enum_string" — access level values
| Name | Required | Description | Default |
|---|---|---|---|
| options | Yes | Array of configuration option names to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint; description adds context by listing common option names, aiding understanding of what can be retrieved.
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?
Description is very concise: one sentence stating purpose followed by a bulleted list of examples. No extraneous information, perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (single parameter, full schema coverage, no output schema), the description is adequate. It explains the purpose and provides helpful examples, though return format is not described.
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 provides full coverage for the 'options' parameter, but description adds meaning by listing common option names, which helps the agent know what values to pass.
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?
Clearly states it retrieves MantisBT configuration options, with specific verb 'retrieve' and resource 'configuration options'. Provides examples of common option names, distinguishing from sibling tools like get_issue_enums.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives, but the description implies usage for retrieving configuration options. Siblings do not directly overlap, so no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userGet Current UserARead-onlyIdempotent
Retrieve the profile of the user associated with the current API key.
| 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, idempotentHint=true, destructiveHint=false, covering safety and idempotency. The description adds no additional behavioral context (e.g., response format, rate limits, authentication requirements), so it provides minimal value beyond what structured fields already communicate.
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?
Single sentence with no redundancy. Every word is necessary and front-loaded with the verb and object.
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 tool's simplicity (no parameters, no output schema, clear annotations), the description is sufficient. It fully informs the agent of the tool's purpose without missing critical context.
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 has zero parameters (schema coverage 100%), so the baseline is 4. The description does not need to add parameter details, and no additional semantics are required.
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?
Description clearly states the action ('Retrieve') and the resource ('profile of the user associated with the current API key'), making the purpose specific and unambiguous. It distinguishes from siblings like get_issue or get_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the current user's profile is needed, but provides no explicit guidance on when to use versus alternatives (e.g., find_project_member) or any exclusions. No examples or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issueGet IssueARead-onlyIdempotent
Retrieve a single MantisBT issue by its numeric ID. Returns all issue fields including notes, attachments, and relationships (unless "select" is given). Notes are always included — no separate list_notes call needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric issue ID | |
| select | No | Comma-separated list of fields to include in the response (server-side projection, same as list_issues). Significantly reduces response size. Example: "id,summary,status,notes" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds context about return fields (all unless 'select' given) and that notes are always included, which is beyond what annotations provide.
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 redundancy. Front-loaded with the primary purpose. Every sentence adds unique value.
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 tool with 2 parameters and good annotations, the description fully covers what the tool does, what it returns, and key behaviors (notes inclusion, field selection). No 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 coverage is 100%, so baseline is 3. Description adds value by explaining the effect of 'select' (server-side projection) and providing an example, enhancing understanding beyond schema descriptions.
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?
Clearly states 'Retrieve a single MantisBT issue by its numeric ID.' Verb and resource are specific, and the description distinguishes from siblings like list_issues and list_notes.
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 states when to use (to get a single issue) and provides guidance on using the 'select' parameter to reduce response size. Implicitly distinguishes from list_issues and list_notes by noting that notes are always included.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_enumsGet Issue Enum ValuesARead-onlyIdempotent
Return valid ID, name, and (if available) localized label for all issue enum fields.
Use this tool before creating or updating issues to look up the correct value for severity, status, priority, resolution, or reproducibility.
Example response (English installation): { "severity": [{"id": 10, "name": "feature"}, {"id": 50, "name": "minor"}, ...], "status": [{"id": 10, "name": "new"}, {"id": 20, "name": "feedback"}, ...], "priority": [{"id": 10, "name": "none"}, {"id": 30, "name": "normal"}, ...], "resolution": [{"id": 10, "name": "open"}, {"id": 20, "name": "fixed"}, ...], "reproducibility": [{"id": 10, "name": "always"}, {"id": 70, "name": "have not tried"}, ...] }
Example response (localized installation, e.g. German): { "status": [ {"id": 10, "name": "new", "label": "Neu"}, {"id": 20, "name": "feedback", "label": "Feedback"}, {"id": 30, "name": "acknowledged", "label": "Bestätigt"}, ... ], ... }
Fields:
"id" — numeric ID accepted by the API
"name" — localized or canonical name from the MantisBT database
"label" — UI display label (only present when it differs from "name")
"canonical_name" — English canonical name (only present on localized installs)
For create_issue (severity, priority, reproducibility): pass the canonical English name, the localized "name", or the "label" — all are accepted. The server resolves them to the correct ID.
For update_issue: pass either "id" or "name" in the field reference object.
Note: on some installations enum values are customized at the database level. In that case "name" itself may be localized (e.g. "kleinerer Fehler" instead of "minor") and no "label" will be present because there is no separate English original.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) are complemented by detailed behavioral context: optional fields like label and canonical_name, handling of localized installations, and accepted input formats. No contradictions.
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?
Well-structured with purpose, examples, and usage details. Slightly verbose due to examples, but every sentence adds value given the complexity of enum localization.
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, so description fully explains return structure including localization nuances and usage for create/update. Covers customization and database-level changes thoroughly.
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?
Input schema has zero parameters, so baseline is 4. No additional param info 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?
The description clearly states the action: 'Return valid ID, name, and (if available) localized label for all issue enum fields.' It specifies the resource and provides examples, distinguishing it from sibling tools like get_issue_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?
Explicitly recommends using this tool before creating or updating issues to look up correct values, and provides guidance on how to pass values for each operation. Does not explicitly list exclusions but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_fieldsGet Issue FieldsARead-onlyIdempotent
Return all field names that are valid for the "select" parameter of list_issues and get_issue.
Fields are discovered by fetching a sample issue from MantisBT (which reflects the server's active configuration — e.g. whether eta, projection, or profile fields are enabled) and merging the result with fields that MantisBT omits when empty (notes, attachments, relationships, etc.). The result is cached with the same TTL as the metadata cache.
Use this tool before constructing a "select" string to ensure you only request fields that exist on this server.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Optional project ID to scope the sample issue fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the discovery mechanism (fetching a sample issue, merging omitted fields, caching with metadata TTL), which adds substantial behavioral context beyond the annotations (readOnlyHint, idempotentHint). No contradictions.
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 well-structured with three paragraphs, front-loading the core purpose. It is concise but each sentence provides relevant 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?
The description explains what the tool returns (field names), how it works (sample fetch + merge + cache), and usage context. Considering no output schema, it is sufficiently complete for an agent to decide when and 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 input schema has 100% coverage, describing the single optional parameter 'project_id' to scope the sample issue fetch. The description does not add significant parameter detail beyond schema, so a baseline of 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 clearly states that the tool returns field names valid for the 'select' parameter of list_issues and get_issue, distinguishing it from sibling tools by its specific role as a helper for constructing select strings.
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 explicitly advises to use this tool before constructing a 'select' string, ensuring only existing fields are requested. While it doesn't list alternatives, the usage context is clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issuesGet Multiple IssuesARead-onlyIdempotent
Retrieve multiple MantisBT issues by their numeric IDs in a single MCP call. Requests run in parallel (max 5 concurrent). Missing or inaccessible IDs return null at their array position — the call never fails due to individual missing IDs. Response includes "requested", "found", and "failed" counters for quick validation.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of numeric issue IDs to fetch (1–50). null is returned per ID on 404/403/error instead of failing the whole call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent, but the description adds significant behavioral details: parallelism (max 5), null returns for missing IDs, and counters, going beyond 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?
Four sentences with no wasted words, front-loaded with purpose. Every sentence adds value.
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 one parameter, good annotations, and output behavior fully described (parallelism, error handling, counters), the description is complete for usage.
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 description repeats schema info. No additional parameter meaning 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 clearly states it retrieves multiple MantisBT issues by numeric IDs in a single call, distinguishing it from siblings like 'get_issue' (single) and 'list_issues' (without IDs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching specific issues by IDs but lacks explicit when-not or alternatives. Context signals and sibling names provide differentiation, so clarity is high but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mantis_versionGet MantisBT VersionARead-onlyIdempotent
Returns the version of the connected MantisBT installation and optionally compares it against the latest official release on GitHub.
The version is read from the X-Mantis-Version response header sent by every API call. The GitHub comparison requires an outbound HTTPS request to the GitHub API.
| Name | Required | Description | Default |
|---|---|---|---|
| check_latest | No | Whether to fetch the latest release from GitHub and compare (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations. Annotations indicate read-only and idempotent, but the description explains the version source (header) and the optional network call for comparison. This gives the agent insight into potential latency or network 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 two sentences: the first defines the core functionality, the second explains the technical mechanism. No redundant information, perfectly concise.
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 tool's simplicity (one optional parameter, no output schema), the description is nearly complete. It explains the return value (version from header) and the optional comparison. It could explicitly state the return format, but it's adequate.
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 input schema has 100% coverage with a clear description for the only parameter. The tool description reinforces that the 'check_latest' parameter triggers a GitHub API call, adding behavioral context that the schema alone does not provide.
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 clearly states the tool returns the version of the MantisBT installation and optionally compares it to the latest release. The verb 'returns' and specific resource 'version' make the purpose unambiguous. It distinguishes itself from siblings like get_mcp_version and get_config.
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 provides context on how the version is obtained (from the X-Mantis-Version header) and that the comparison requires an outbound GitHub request. This helps the agent understand the tool's dependencies. No explicit 'when not to use' is provided, but the siblings are distinct enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcp_versionGet MCP Server VersionARead-onlyIdempotent
Returns the version of this mantisbt-mcp-server instance.
| 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, idempotentHint=true, and destructiveHint=false. The description does not add any behavioral context beyond stating what it returns. No contradictions, but no additional transparency.
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 sentence that concisely states the tool's purpose. No unnecessary words or information; every element is essential.
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 tool's simplicity (no parameters, rich annotations, no output schema), the description adequately covers what the tool does. An agent can correctly invoke it without additional context.
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 are zero parameters, and schema description coverage is 100% (trivially). The description does not need to add parameter info since none exist. Baseline for 0 parameters 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?
The description clearly states the action ('Returns') and the resource ('version of this mantisbt-mcp-server instance'). It is specific and distinguishes itself from the sibling 'get_mantis_version', which likely returns the MantisBT 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?
No guidance is provided on when to use this tool versus alternatives or exclusions. While the tool is simple, the description does not offer any context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadataGet Cached MetadataARead-onlyIdempotent
Return a compact summary of cached MantisBT metadata: project count, tag count, and per-project counts of users, versions, and categories.
If the cache does not exist or has expired (default TTL: 24 hours), it will automatically sync first. Use sync_metadata to force a refresh. For full lists use: list_projects (projects), get_project_users / get_project_versions / get_project_categories (per-project data), list_tags (tags).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnly, idempotent, and non-destructive. The description adds valuable context: the auto-sync behavior if cache expires, and the default TTL of 24 hours. It does not mention error handling or performance, but the added details go beyond 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?
The description is concise: two sentences and a list of sibling tools. Every sentence adds value without redundancy. It efficiently conveys purpose, caching behavior, and alternatives.
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 zero parameters and no output schema, the description covers what the tool returns, caching behavior, and when to use sibling tools. It is fully sufficient for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100%. Baseline for zero parameters is 4, and the description does not need to add parameter information because none exist.
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 clearly states the tool returns a compact summary of cached MantisBT metadata, listing specific counts (projects, tags, per-project users, versions, categories). It explicitly distinguishes from siblings like get_metadata_full and list_projects by noting that it provides a summary while siblings provide full lists.
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 specifies when to use this tool (for a compact summary) and when to use alternatives: sync_metadata for forced refresh, and various list_* tools for full details. This provides clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadata_fullGet Full Cached MetadataARead-onlyIdempotent
Return the complete raw MantisBT metadata cache: all projects with full fields, and per-project lists of users, versions, categories, plus all tags.
If the cache does not exist or has expired (default TTL: 24 hours), it will automatically sync first. Use sync_metadata to force a refresh. For a lightweight overview use get_metadata instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint) are supplemented with cache behavior details: return cached data, auto-sync if expired, TTL 24 hours. No contradictions.
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 sentences, front-loaded with main purpose, followed by behavior and usage guidance. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, description is complete: specifies what is returned, caching behavior, TTL, and links to alternatives. No output schema needed.
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?
Tool has zero parameters, so schema coverage is 100% by default. Baseline 4 applies as description need not add param details.
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?
Description clearly states it returns the complete raw MantisBT metadata cache including all projects with full fields and per-project lists. It distinguishes from siblings 'get_metadata' (lightweight) and 'sync_metadata' (force refresh).
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 states when to use (when full metadata needed), when not to use (for lightweight use get_metadata), and provides alternative (sync_metadata for forced refresh). Also mentions default TTL of 24 hours and automatic sync on stale cache.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_categoriesGet Project CategoriesARead-onlyIdempotent
List all categories available for a MantisBT project.
Note: The MantisBT API returns global (cross-project) categories with a "[All Projects] " prefix. This tool strips that prefix so the returned names can be used directly when creating issues.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Numeric project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent, non-destructive), the description reveals a key behavior: stripping the '[All Projects] ' prefix from global categories. This adds valuable context not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, front-loaded with the core purpose, and every sentence adds value. No unnecessary 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?
Given simple inputs, annotations, and no output schema, the description adequately covers the tool's behavior. It explains the prefix stripping, but could optionally mention the output format. Still, it is sufficient for an agent to understand usage.
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 parameter 'project_id', with a clear description. The tool description does not add further parameter details, so a baseline score of 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 clearly states the tool's action ('List all categories') and resource ('available for a MantisBT project'). It is specific and distinguishes itself from siblings since no other tool deals with categories.
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 implicitly suggests use before creating issues, but lacks explicit guidance on when to use or not use this tool over alternatives. No exclusion criteria or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_usersGet Project UsersARead-onlyIdempotent
List all users with access to a specific MantisBT project. Returns an array of user objects, each containing id, name (login name), real_name, email, and access_level fields.
Use get_project_users when you need the complete user list for a project — for example, to verify who has access or to build a handler list. For name-based lookup of a single user, prefer find_project_member which supports case-insensitive substring search and is significantly faster on large projects.
Access level IDs: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator.
Prerequisites: obtain project_id from list_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Numeric project ID — use list_projects to discover project IDs | |
| access_level | No | Return only users at or above this access level. Common values: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator. Omit to return all users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds value by detailing output structure (array of user objects with fields) and explaining access level IDs, which supplements the annotations without contradiction.
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?
Efficient and front-loaded: purpose first, then usage guidelines, then additional details. Every sentence serves a purpose with zero 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?
Given no output schema, description fully explains return format and fields. Also covers access level usage and prerequisites. Complete for a 2-parameter, well-annotated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The description reinforces access level values and clarifies project_id source (list_projects). Adds context beyond schema, but schema already does 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 clearly states 'List all users with access to a specific MantisBT project', using specific verb (list), resource (users), and scope (specific project). It also distinguishes from sibling find_project_member by contrasting use cases.
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 states when to use (need complete user list) and when not (name-based lookup, prefer find_project_member). Also provides prerequisite: obtain project_id from list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_versionsGet Project VersionsARead-onlyIdempotent
List all versions defined for a MantisBT project. Returns an array of version objects, each containing id, name, released (boolean), obsolete (boolean), and optionally a date field.
Use the returned version names directly when creating or updating issues via create_issue and update_issue (version, target_version, fixed_in_version fields).
By default, obsolete and inherited parent-project versions are excluded. Set obsolete=true to include deprecated versions; set inherit=true to also return versions from parent projects.
Prerequisites: obtain project_id from list_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| inherit | No | Include versions inherited from parent projects. Default: false. Set to true for sub-projects that share versions with a parent project. | |
| obsolete | No | Include obsolete (deprecated) versions in the response. Default: false. Set to true to see all versions including those no longer actively used. | |
| project_id | Yes | Numeric project ID — use list_projects to discover project IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses default behavior (exclude obsolete and inherited versions) and how to modify with parameters. Annotations already indicate read-only, idempotent, non-destructive. Description adds useful context beyond 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?
Five concise, well-structured sentences that are front-loaded with purpose, followed by output details, usage hints, behavior flags, and prerequisite. No fluff or 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?
Despite no output schema, the description explains return format in detail. Covers all parameters, default behaviors, and prerequisites. Complete for a tool with 3 parameters 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 has 100% description coverage. Description adds value by explaining usage of parameter outputs (version names for issue fields) and prerequisite for project_id, going beyond schema definitions.
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 clearly states it lists all versions for a MantisBT project. It specifies the action and resource, but does not explicitly differentiate from sibling tools like 'get_project_categories' or 'list_projects', though the uniqueness is implied by the version focus.
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 explicit guidance on using returned version names for creating/updating issues, mentions prerequisite (project_id from list_projects), and explains default exclusions and how to include obsolete/inherited versions. Does not explicitly state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filtersList Saved FiltersARead-onlyIdempotent
List all saved MantisBT issue filters accessible to the current user. Filter IDs can be used with list_issues.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint false. The description adds that filters are 'accessible to the current user,' providing additional scoping 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?
Two concise sentences with no unnecessary words; every sentence adds value.
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 no parameters, no output schema, and sufficient annotations, the description completely covers the tool's purpose and usage context.
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?
No parameters present, and schema coverage is 100%. Baseline for zero parameters is 4, and description adds no parameter info as none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it lists all saved MantisBT issue filters accessible to the current user, using a specific verb and resource. It distinguishes from siblings like list_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?
Provides clear context that filter IDs can be used with list_issues, but does not explicitly state when not to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issue_filesList Issue File AttachmentsARead-onlyIdempotent
List all file attachments of a MantisBT issue. Returns an array of attachment objects, each containing id, filename, size in bytes, content_type, and download_url. Returns an empty array if the issue has no attachments.
Use this tool when you need to inspect or enumerate files attached to an issue. To add a new attachment, use upload_file instead. To retrieve full issue details that include attachments alongside other fields, use get_issue instead.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Numeric issue ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds details about the return format (array of attachment objects with specific fields) and behavior when no attachments (empty array). This provides useful context beyond 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?
The description is concise with three sentences. The first sentence immediately states the purpose, and subsequent sentences add usage guidance and return details. Every sentence is purposeful.
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 simplicity of the tool (one parameter, no output schema), the description fully covers: what it does, when to use it, alternatives, and what it returns (including empty case). No 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?
Input schema coverage is 100% with a clear description for the single parameter 'issue_id'. The tool's description does not add any additional information about the parameter, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists issue file attachments, with specific verb and resource. It distinguishes from siblings by mentioning alternative tools for adding attachments (upload_file) and getting full issue details (get_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?
Explicitly states when to use: 'when you need to inspect or enumerate files attached to an issue.' Also provides exclusions: 'To add a new attachment, use upload_file instead. To retrieve full issue details that include attachments alongside other fields, use get_issue instead.' This clearly guides the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issuesList IssuesARead-onlyIdempotent
List MantisBT issues with optional filtering. Returns a paginated list of issues. Use the "select" parameter to limit returned fields and reduce response size significantly.
Note: "assigned_to", "reporter_id", "status", and date filters are applied client-side (the MantisBT REST API does not support these as server-side filters). When any of these filters are active the tool automatically fetches multiple pages internally until enough matching results are found (up to 500 issues scanned). The "page" and "page_size" parameters refer to the resulting filtered list.
Tip for date queries: fetching with select="id,updated_at,created_at" plus a date filter is very compact and efficient.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| sort | No | Sort field (e.g. "last_updated", "id") | |
| select | No | Comma-separated list of fields to include in the response (server-side projection). Significantly reduces response size. Example: "id,summary,status,priority,handler,updated_at" | |
| status | No | Filter issues by status name (e.g. "new", "feedback", "acknowledged", "confirmed", "assigned", "resolved", "closed") or use "open" as shorthand for all statuses with id < 80 (i.e. not yet resolved or closed). Applied client-side after fetching — when combined with pagination, a page may contain fewer results than page_size. | |
| direction | No | Sort direction | |
| filter_id | No | Use a saved MantisBT filter ID | |
| page_size | No | Issues per page (default: 50, max: 50) | |
| project_id | No | Filter by project ID | |
| assigned_to | No | Filter by handler/assignee user ID | |
| reporter_id | No | Filter by reporter user ID | |
| created_after | No | ISO-8601 timestamp — only return issues created after this date (exclusive). Example: "2026-03-01T00:00:00Z" | |
| updated_after | No | ISO-8601 timestamp — only return issues updated after this date (exclusive). Example: "2026-03-25T00:00:00Z" | |
| created_before | No | ISO-8601 timestamp — only return issues created before this date (exclusive). Example: "2026-03-15T00:00:00Z" | |
| updated_before | No | ISO-8601 timestamp — only return issues updated before this date (exclusive). Example: "2026-03-28T00:00:00Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses client-side filtering for certain fields, automatic internal fetching of up to 500 issues, and how pagination works on the filtered list. These details go beyond the annotations and provide critical behavioral transparency.
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 well-structured with a clear main statement and then important notes. It is not overly long but could be slightly more concise without losing key details.
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 14 parameters and no output schema, the description covers pagination, client-side behavior, and filtering tips. It is missing hints about the return format or authentication, but overall it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant context: the 'select' parameter's impact on response size, the client-side filtering for specific fields, and a tip for efficient date queries. This adds value 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 clearly states the tool lists MantisBT issues with optional filtering and returns a paginated list. However, it does not distinguish itself from the sibling tool 'get_issues', which likely has similar functionality.
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 versus alternatives like 'get_issue' or 'get_issues'. Usage context is implied through the description of features but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_languagesList Supported LanguagesARead-onlyIdempotent
List all languages supported by the MantisBT installation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the description adds no behavioral insight beyond what is structured. The description merely restates the action without additional traits like response properties or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no fluff. Every word serves a purpose, and it is immediately understandable.
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 and has no output schema, so the description is functionally complete for its purpose. However, it could mention that the output is a list of language codes or names, which would add context for the agent.
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 has no parameters, so schema description coverage is 100%. The description does not need to add parameter meaning. Baseline 4 applies as no parameter information is required.
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 clearly states 'List all languages supported by the MantisBT installation,' using a specific verb ('List') and resource ('languages'). It is distinct from sibling tools like 'list_projects' or 'list_tags', which focus on different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when needing the set of languages, but no explicit guidance on when to use versus alternatives or when not to use it. Context is clear but lacks exclusionary or situational advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesList Issue NotesARead-onlyIdempotent
List all notes (comments) attached to a MantisBT issue. Note: get_issue already includes notes in its response — use list_notes only when you need notes without fetching the full issue.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Numeric issue ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's addition of 'list all notes' clarifies the scope. No contradictions. Could mention if there is pagination or limits.
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 concise sentences: first states the main purpose, second provides usage guidance. No redundancy or unnecessary 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?
The description covers purpose and usage well for a simple tool. It lacks explicit mention of return format (e.g., list of note objects), but given no output schema, some inference is possible. Still, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter (issue_id) described as 'Numeric issue ID' with exclusiveMinimum 0. The description adds no extra information beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'notes (comments)', and the context 'attached to a MantisBT issue'. It also distinguishes from get_issue, which already includes notes.
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 explicitly advises when to use this tool: 'only when you need notes without fetching the full issue', and mentions an alternative (get_issue). This provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList ProjectsARead-onlyIdempotent
List all MantisBT projects accessible to the current API user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by clarifying that the list is scoped to the current user's permissions, which is behaviorally important. No contradictions with 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?
The description is a single, front-loaded sentence that conveys all necessary information without any wasted words. It is appropriately sized and 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?
Given no parameters, no output schema, and rich annotations, the description is complete for an agent to understand the tool's function. It could optionally mention the return format, but it is not essential. The description meets the needs for a simple list 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?
The input schema has zero parameters, so schema description coverage is 100%. No parameter information is needed in the description. Baseline for 0 parameters is 4, and the description does not add extraneous 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 states 'List all MantisBT projects accessible to the current API user,' which clearly identifies the action (list), resource (projects), and scope (user-accessible). This distinguishes it from sibling tools like list_issues or get_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?
The description implies usage for listing projects visible to the user but provides no explicit guidance on when to use versus alternatives, nor any when-not scenarios. The context of 'accessible to the current API user' offers some contextual hint but no comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList TagsARead-onlyIdempotent
List all tags defined in the MantisBT installation.
The MantisBT REST API exposes a GET /tags endpoint on some installations. If that endpoint is not available, this tool falls back to the local metadata cache populated by sync_metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| page_size | No | Tags per page (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and idempotent. The description adds valuable behavioral context: fallback to local cache if the REST endpoint is unavailable, and dependency on sync_metadata. This goes beyond 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?
Two sentences, front-loaded with the main purpose, and no filler. Every word contributes to understanding the 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?
The description explains fallback and cache dependency, which is helpful. However, it does not mention that results are paginated (implied by parameters) or describe the return format. Given no output schema, a brief note on output would improve completeness.
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 input schema covers both parameters with descriptions (100% coverage). The description adds no additional meaning to the parameters, so baseline score 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 clearly states it lists all tags, matching the tool name and title. It distinguishes from sibling tools like attach_tags and detach_tag by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing all tags but does not provide explicit guidance on when to use this tool versus alternatives like attach_tags or detach_tag. It mentions fallback behavior but no when-to-use or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_monitorRemove Issue MonitorADestructive
Remove a user from the monitor list of a MantisBT issue. The user will no longer receive email notifications for updates to this issue.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Numeric issue ID | |
| username | Yes | Username of the monitor to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Descriptions adds useful behavioral context (email notification effect) beyond the destructiveHint annotation, confirming the tool's impact on monitoring.
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 concise sentences that are front-loaded and contain only essential information without 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 simple tool with two parameters and no output schema, the description sufficiently explains the operation and its effect.
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 covers 100% of parameters with clear descriptions, so the description does not need to add further details; it aligns with 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 clearly states the action (remove a user from the monitor list) and the consequence (no longer receive email notifications), distinguishing it from sibling tools like add_monitor.
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?
While the description is clear, it does not provide explicit guidance on when to use this tool versus alternatives like add_monitor or any prerequisites for removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_relationshipRemove Issue RelationshipADestructive
Remove a relationship from a MantisBT issue.
Use get_issue first to retrieve the relationship IDs. The relationship_id is the numeric id field of a relationship object in the issue's relationships array (not the type ID).
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | The issue ID the relationship belongs to | |
| relationship_id | Yes | The numeric ID of the relationship to remove (from the relationships array in get_issue) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds context: it removes a relationship, and the parameter clarification helps avoid misuse. No contradictions with 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?
Three sentences: first states purpose, second provides prerequisite, third clarifies parameter. No unnecessary words, front-loaded with action. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with no output schema, the description sufficiently covers what it does and how to use it. Missing return value or post-condition description, but these are not critical given the tool's nature.
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%, but the description adds critical clarification: 'the relationship_id is the numeric id field of a relationship object in the issue's relationships array (not the type ID).' This prevents a common confusion and enhances understanding 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 explicitly states 'Remove a relationship from a MantisBT issue,' using a specific verb and resource. It clearly distinguishes this tool from its sibling 'add_relationship' and other issue-related tools.
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 explicit guidance: 'Use get_issue first to retrieve the relationship IDs.' Also clarifies that the relationship_id is the numeric id from the relationships array, not the type ID. Missing when-not-to-use or alternative considerations, but the prerequisite is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_metadataSync Metadata CacheA
Fetch all projects and their associated users, versions, categories, and tags from MantisBT and store them in the local metadata cache.
Tags are fetched via the dedicated GET /tags endpoint when available. On installations where that endpoint is missing (MantisBT < 2.26), tags are collected by scanning all issues across all projects.
This is useful for getting a complete overview of your MantisBT installation. The cache is valid for 24 hours by default (configurable via MANTIS_CACHE_TTL env var). Use this tool to refresh stale data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the tag fetching strategy (dedicated endpoint vs scanning issues) and the configurable cache TTL via an environment variable. Annotations only indicate read/write safety but not these details.
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 well-structured with three clear paragraphs: purpose, technical detail, and usage guidance. It is front-loaded with the main action. Slightly verbose on tag fetching details, but overall concise enough.
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 no output schema and no parameters, the description covers the essential aspects: what it does, how it works (tag handling), and when to use it. It does not describe the return value, but that is acceptable for a side-effect 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?
There are no parameters, so schema coverage is trivially 100%. The description adds no parameter details, but none are needed. With zero parameters, the baseline score 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?
The description clearly states that the tool fetches all projects and associated data (users, versions, categories, tags) from MantisBT and stores them in a local cache. It distinguishes itself from sibling read-only tools like get_metadata and get_metadata_full by focusing on refreshing the cache.
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 explicitly says 'Use this tool to refresh stale data' and explains the caching mechanism (24-hour TTL). It implies when to use, but does not explicitly contrast with alternatives or provide when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_issueUpdate IssueA
Update one or more fields of an existing MantisBT issue using a partial PATCH.
The "fields" object accepts any combination of:
summary (string)
description (string)
steps_to_reproduce (string)
additional_information (string)
status: { name: "new"|"feedback"|"acknowledged"|"confirmed"|"assigned"|"resolved"|"closed" }
resolution: { id: 20 } (20 = fixed/resolved)
handler: { id: } or { name: "" }
priority: { name: "" }
severity: { name: "" }
reproducibility: { name: "" }
category: { name: "" }
version: { name: "" } (affected version)
target_version: { name: "" }
fixed_in_version: { name: "" }
view_state: { name: "public"|"private" }
custom_fields: [{field: {id|name}, value: ""}] (only the listed custom fields are changed, others stay untouched; use get_issue_fields to discover fields)
Important: when resolving an issue, always set BOTH status and resolution to avoid leaving resolution as "open".
Use the optional "note" parameter to append a note in the same call (e.g. the reason for a status change) — no separate add_note call needed. For a note without field changes use add_note.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric issue ID to update | |
| note | No | Optional note text appended after a successful update (e.g. reason for a status change). Replaces a separate add_note call. | |
| fields | Yes | Fields to update (partial update — only provided fields are changed; unknown keys are rejected) | |
| dry_run | No | If true, return the patch payload that would be sent without actually updating the issue. Useful for previewing changes before committing them. | |
| note_view_state | No | Visibility of the appended note: "public" (default) or "private". Only used when "note" is set. | public |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-destructive mutation. Description adds value by explaining partial PATCH behavior and dry_run option. Could mention side effects like notifications, but covers key behavioral traits well.
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?
Well-structured with clear first sentence, bulleted field list, and important notes (resolving, note usage). Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all field types, dry_run, note integration, and view_state. No output schema exists, so return value is not described but that's acceptable. Slightly more detail on side effects could improve completeness.
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%, but description goes beyond by listing all field names with accepted formats (e.g., status with {name:...}, resolution with {id:20}) and explaining custom_fields behavior ('only listed fields changed'). This adds significant meaning.
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 clearly states the verb ('Update'), resource ('existing MantisBT issue'), and method ('partial PATCH'). It distinguishes itself from siblings like create_issue (creates new) and add_note (just adds note) via explicit guidelines.
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 explicit when-to-use (updating fields, optionally with note) and when-not-to-use (use add_note for note without field changes). Also references get_issue_fields for discovering custom fields, offering clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileUpload File AttachmentA
Upload a file as an attachment to a MantisBT issue. Adds the file to the issue without modifying any issue fields or status. Returns the created attachment metadata on success.
Provide exactly one of the two input modes:
file_path (preferred): absolute path to a local file — use this whenever the file exists on disk; the server reads and encodes it automatically; filename is derived from the path. Note: file_path reads from the server's filesystem and is disabled over the HTTP transport unless MANTIS_UPLOAD_DIR is configured — HTTP clients should use content instead.
content: Base64-encoded file content — only use this when the file is not accessible via a path (e.g. in-memory data); filename must be supplied explicitly via the filename parameter
The optional content_type sets the MIME type (e.g. "image/png"); defaults to "application/octet-stream". Use the optional description to annotate the attachment.
Use this tool to attach files such as logs, screenshots, or patches to an existing issue. To list existing attachments, use list_issue_files. To retrieve issue details, use get_issue.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Fallback: Base64-encoded file content — only use when file_path is not available (mutually exclusive with file_path) | |
| filename | No | File name for the attachment (required when using content; overrides the derived name when using file_path) | |
| issue_id | Yes | Numeric issue ID | |
| file_path | No | Preferred: absolute path to the local file to upload — use this whenever the file exists on disk (mutually exclusive with content) | |
| description | No | Optional description for the attachment | |
| content_type | No | MIME type of the file, e.g. "image/png" (default: "application/octet-stream") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutation (readOnlyHint=false) and non-idempotent. The description adds context that the operation does not modify issue fields/status, and explains how file_path is handled server-side. It does not mention error handling or size limits, but overall provides good 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?
The description is well-structured with clear sections: main purpose, two input modes with detailed explanations, optional parameters, and sibling tool references. It is concise yet comprehensive, with no redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 parameters, 1 required, no output schema, and the sibling tools, the description covers purpose, parameter usage alternatives, and behavioral notes. It mentions the return value as 'attachment metadata' but does not detail its structure; however, this is acceptable without an output schema. Prerequisites like issue existence are implied.
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 schema descriptions cover all 6 parameters at 100%. The description goes beyond by explaining the mutual exclusivity of file_path and content, the automatic filename derivation, the default content_type, and the optional description. This adds meaningful guidance for correct usage.
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 clearly states that the tool uploads a file as an attachment to a MantisBT issue without modifying issue fields or status. The verb 'upload' and resource 'file attachment to issue' are explicit, and it distinguishes from siblings like list_issue_files and get_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?
The description provides detailed guidance on when to use file_path vs content, including the preference for file_path and the requirement to use content when the file is in memory. It also mentions the transport limitation for file_path over HTTP and points to alternative tools for listing or retrieving issues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.10.5- Changed
create_issue1 field changed- added
Input schema / properties / custom_fieldsAdded value: +{ + "description": "Custom field values: [{field: {id|name}, value: \"<string>\"}]. Use get_issue_fields or get_metadata to discover available custom fields per project.", + "items": { + "additionalProperties": false, + "properties": { + "field": { + "additionalProperties": false, + "description": "Custom field reference: { id } or { name }", + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "value": { + "description": "Field value as string", + "type": "string" + } + }, + "required": [ + "field" + ], + "type": "object" + }, + "type": "array" +}
- Changed
get_issue1 field changed- added
Input schema / properties / selectAdded value: +{ + "description": "Comma-separated list of fields to include in the response (server-side projection, same as list_issues). Significantly reduces response size. Example: \"id,summary,status,notes\"", + "type": "string" +}
- Changed
update_issue3 fields changed- added
Input schema / properties / fields / properties / custom_fieldsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "field": { + "$ref": "#/properties/fields/properties/status", + "description": "Custom field reference: { id } or { name }" + }, + "value": { + "description": "Field value as string", + "type": "string" + } + }, + "required": [ + "field" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / noteAdded value: +{ + "description": "Optional note text appended after a successful update (e.g. reason for a status change). Replaces a separate add_note call.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / note_view_stateAdded value: +{ + "default": "public", + "description": "Visibility of the appended note: \"public\" (default) or \"private\". Only used when \"note\" is set.", + "enum": [ + "public", + "private" + ], + "type": "string" +}
34 tool updates
v1.10.4- Added
add_monitor - Added
add_note - Added
add_relationship - Added
attach_tags - Added
create_issue - Added
delete_issue - Added
delete_note - Added
detach_tag - Added
find_project_member - Added
get_config - Added
get_current_user - Added
get_issue - Added
get_issue_enums - Added
get_issue_fields - Added
get_issues - Added
get_mantis_version - Added
get_mcp_version - Added
get_metadata - Added
get_metadata_full - Added
get_project_categories - Added
get_project_users - Added
get_project_versions - Added
list_filters - Added
list_issue_files - Added
list_issues - Added
list_languages - Added
list_notes - Added
list_projects - Added
list_tags - Added
remove_monitor - Added
remove_relationship - Added
sync_metadata - Added
update_issue - Added
upload_file
34 tool updates
- Removed
add_monitor - Removed
add_note - Removed
add_relationship - Removed
attach_tags - Removed
create_issue - Removed
delete_issue - Removed
delete_note - Removed
detach_tag - Removed
find_project_member - Removed
get_config - Removed
get_current_user - Removed
get_issue - Removed
get_issue_enums - Removed
get_issue_fields - Removed
get_issues - Removed
get_mantis_version - Removed
get_mcp_version - Removed
get_metadata - Removed
get_metadata_full - Removed
get_project_categories - Removed
get_project_users - Removed
get_project_versions - Removed
list_filters - Removed
list_issue_files - Removed
list_issues - Removed
list_languages - Removed
list_notes - Removed
list_projects - Removed
list_tags - Removed
remove_monitor - Removed
remove_relationship - Removed
sync_metadata - Removed
update_issue - Removed
upload_file
6 tool updates
v1.10.3- Changed
add_monitor2 fields changed- changed
Input schema / properties / issue_id / descriptionPrevious value: -"Numeric issue ID"New value: +"Numeric issue ID — use list_issues or get_issue to obtain issue IDs" - changed
Input schema / properties / username / descriptionPrevious value: -"Username of the user to add as monitor"New value: +"MantisBT login name (not the display name) of the user to add as monitor. Use find_project_member or get_project_users to discover valid login names for a project."
- Changed
add_note3 fields changed- changed
Input schema / properties / issue_id / descriptionPrevious value: -"Numeric issue ID"New value: +"Numeric issue ID — use list_issues or get_issue to obtain issue IDs" - changed
Input schema / properties / text / descriptionPrevious value: -"Note text (supports full UTF-8, markdown will be stored as-is)"New value: +"Note text (minimum 1 character). Full UTF-8 including emoji is supported. Markdown is stored as-is." - changed
Input schema / properties / view_state / descriptionPrevious value: -"Visibility of the note (default: public)"New value: +"Visibility of the note: \"public\" (visible to all, default) or \"private\" (visible only to users with sufficient access level)."
- Changed
create_issue15 fields changed- changed
Input schema / properties / additional_information / descriptionPrevious value: -"Additional information about the issue. Plain text or Markdown."New value: +"Additional context or notes about the issue. Plain text or Markdown." - changed
Input schema / properties / category / descriptionPrevious value: -"Category name (use get_project_categories to list available categories)"New value: +"Category name (required). Use get_project_categories to list available categories for the project." - changed
Input schema / properties / description / descriptionPrevious value: -"Detailed issue description. Required — do not create issues without a description. Plain text or Markdown."New value: +"Detailed issue description (required). Do not create issues without a description. Plain text or Markdown." - changed
Input schema / properties / fixed_in_version / descriptionPrevious value: -"Version name in which the issue was fixed (use get_project_versions to list available versions)"New value: +"Version in which the issue was fixed. Use get_project_versions to list available version names." - changed
Input schema / properties / handler / descriptionPrevious value: -"Username (login name) of the person to assign the issue to. Alternative to handler_id — the server resolves the name to a user ID from the project members. Use get_project_users to see available users."New value: +"MantisBT login name of the assignee. The server resolves the name to a user ID from the project member list. Use find_project_member or get_project_users to look up valid login names." - changed
Input schema / properties / handler_id / descriptionPrevious value: -"User ID of the person to assign the issue to"New value: +"Numeric user ID of the assignee. Alternative to the handler field — use one or the other, not both." - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority: canonical English name (none, low, normal, high, urgent, immediate) or localized label. Default: \"normal\". Use get_issue_enums to see all available values."New value: +"Priority level. Canonical English names: none, low, normal, high, urgent, immediate. Default: \"normal\". Use get_issue_enums to see localized labels." - changed
Input schema / properties / project_id / descriptionPrevious value: -"Project ID the issue belongs to"New value: +"Project ID the issue belongs to — use list_projects to discover project IDs" - changed
Input schema / properties / reproducibility / descriptionPrevious value: -"Reproducibility: canonical English name or localized label (always, sometimes, random, have not tried, unable to reproduce, N/A). Use get_issue_enums to see all available values."New value: +"How reliably the issue reproduces. Canonical English names: always, sometimes, random, have not tried, unable to reproduce, N/A. Use get_issue_enums to see localized labels." - changed
Input schema / properties / severity / descriptionPrevious value: -"Severity: canonical English name (feature, trivial, text, tweak, minor, major, crash, block) or localized label. Default: \"minor\". Use get_issue_enums to see all available values."New value: +"Severity level. Canonical English names: feature, trivial, text, tweak, minor, major, crash, block. Default: \"minor\". Use get_issue_enums to see localized labels." - changed
Input schema / properties / steps_to_reproduce / descriptionPrevious value: -"Steps to reproduce the issue. Plain text or Markdown."New value: +"Step-by-step instructions to reproduce the issue. Plain text or Markdown." - changed
Input schema / properties / summary / descriptionPrevious value: -"Issue summary/title"New value: +"Issue summary/title (required)" - changed
Input schema / properties / target_version / descriptionPrevious value: -"Target version name — version in which the issue is planned to be fixed (use get_project_versions to list available versions)"New value: +"Target fix version — version in which the issue is planned to be resolved. Use get_project_versions to list available version names." - changed
Input schema / properties / version / descriptionPrevious value: -"Affected product version name (use get_project_versions to list available versions)"New value: +"Affected product version name. Use get_project_versions to list available version names for the project." - changed
Input schema / properties / view_state / descriptionPrevious value: -"Visibility of the issue: \"public\" (default) or \"private\""New value: +"Visibility of the issue: \"public\" (visible to all, default) or \"private\" (restricted to higher-access users)."
- Changed
delete_note2 fields changed- changed
Input schema / properties / issue_id / descriptionPrevious value: -"Numeric issue ID that owns the note"New value: +"Numeric issue ID that owns the note — use get_issue or list_notes to identify this value" - changed
Input schema / properties / note_id / descriptionPrevious value: -"Numeric note ID to delete"New value: +"Numeric note ID to delete — obtain from get_issue (notes[].id) or list_notes"
- Changed
get_project_users2 fields changed- changed
Input schema / properties / access_level / descriptionPrevious value: -"Minimum access level filter (e.g. 55 = developer, 90 = manager)"New value: +"Return only users at or above this access level. Common values: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator. Omit to return all users." - changed
Input schema / properties / project_id / descriptionPrevious value: -"Numeric project ID"New value: +"Numeric project ID — use list_projects to discover project IDs"
- Changed
get_project_versions3 fields changed- changed
Input schema / properties / inherit / descriptionPrevious value: -"Include versions inherited from parent projects (default: false)"New value: +"Include versions inherited from parent projects. Default: false. Set to true for sub-projects that share versions with a parent project." - changed
Input schema / properties / obsolete / descriptionPrevious value: -"Include obsolete (deprecated) versions (default: false)"New value: +"Include obsolete (deprecated) versions in the response. Default: false. Set to true to see all versions including those no longer actively used." - changed
Input schema / properties / project_id / descriptionPrevious value: -"Numeric project ID"New value: +"Numeric project ID — use list_projects to discover project IDs"
1 tool update
v1.8.1- Changed
upload_file9 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / contentAdded value: +{ + "description": "Base64-encoded file content (mutually exclusive with file_path)", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / content_typeAdded value: +{ + "description": "MIME type of the file, e.g. \"image/png\" (default: \"application/octet-stream\")", + "type": "string" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "Optional description for the attachment", + "type": "string" +} - added
Input schema / properties / file_pathAdded value: +{ + "description": "Absolute path to the local file to upload (mutually exclusive with content)", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / filenameAdded value: +{ + "description": "File name for the attachment (required when using content; overrides the derived name when using file_path)", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / issue_idAdded value: +{ + "description": "Numeric issue ID", + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / requiredAdded value: +[ + "issue_id" +]
6 tool updates
v1.5.15- Changed
create_issue3 fields changed- changed
Input schema / properties / priority / descriptionPrevious value: -"Priority name — must be a canonical English name: none, low, normal, high, urgent, immediate. Default: \"normal\". Call get_issue_enums to see localized labels."New value: +"Priority: canonical English name (none, low, normal, high, urgent, immediate) or localized label. Default: \"normal\". Use get_issue_enums to see all available values." - changed
Input schema / properties / reproducibility / descriptionPrevious value: -"Reproducibility — must be a canonical English name: always, sometimes, random, have not tried, unable to reproduce, N/A. Call get_issue_enums to see localized labels."New value: +"Reproducibility: canonical English name or localized label (always, sometimes, random, have not tried, unable to reproduce, N/A). Use get_issue_enums to see all available values." - changed
Input schema / properties / severity / descriptionPrevious value: -"Severity name — must be a canonical English name: feature, trivial, text, tweak, minor, major, crash, block. Default: \"minor\". Call get_issue_enums to see localized labels."New value: +"Severity: canonical English name (feature, trivial, text, tweak, minor, major, crash, block) or localized label. Default: \"minor\". Use get_issue_enums to see all available values."
- Added
find_project_member - Added
get_issues - Added
get_metadata_full - Changed
list_issues4 fields changed- added
Input schema / properties / created_afterAdded value: +{ + "description": "ISO-8601 timestamp — only return issues created after this date (exclusive). Example: \"2026-03-01T00:00:00Z\"", + "type": "string" +} - added
Input schema / properties / created_beforeAdded value: +{ + "description": "ISO-8601 timestamp — only return issues created before this date (exclusive). Example: \"2026-03-15T00:00:00Z\"", + "type": "string" +} - added
Input schema / properties / updated_afterAdded value: +{ + "description": "ISO-8601 timestamp — only return issues updated after this date (exclusive). Example: \"2026-03-25T00:00:00Z\"", + "type": "string" +} - added
Input schema / properties / updated_beforeAdded value: +{ + "description": "ISO-8601 timestamp — only return issues updated before this date (exclusive). Example: \"2026-03-28T00:00:00Z\"", + "type": "string" +}
- Changed
update_issue1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "If true, return the patch payload that would be sent without actually updating the issue. Useful for previewing changes before committing them.", + "type": "boolean" +}
1 tool update
v1.5.14- Changed
create_issue7 fields changed- added
Input schema / properties / additional_informationAdded value: +{ + "description": "Additional information about the issue. Plain text or Markdown.", + "type": "string" +} - added
Input schema / properties / fixed_in_versionAdded value: +{ + "description": "Version name in which the issue was fixed (use get_project_versions to list available versions)", + "type": "string" +} - added
Input schema / properties / reproducibilityAdded value: +{ + "description": "Reproducibility — must be a canonical English name: always, sometimes, random, have not tried, unable to reproduce, N/A. Call get_issue_enums to see localized labels.", + "type": "string" +} - added
Input schema / properties / steps_to_reproduceAdded value: +{ + "description": "Steps to reproduce the issue. Plain text or Markdown.", + "type": "string" +} - added
Input schema / properties / target_versionAdded value: +{ + "description": "Target version name — version in which the issue is planned to be fixed (use get_project_versions to list available versions)", + "type": "string" +} - added
Input schema / properties / versionAdded value: +{ + "description": "Affected product version name (use get_project_versions to list available versions)", + "type": "string" +} - added
Input schema / properties / view_stateAdded value: +{ + "description": "Visibility of the issue: \"public\" (default) or \"private\"", + "enum": [ + "public", + "private" + ], + "type": "string" +}
1 tool update
v1.5.13- Changed
create_issue6 fields changed- removed
Input schema / properties / description / defaultRemoved value: -"" - changed
Input schema / properties / description / descriptionPrevious value: -"Detailed issue description"New value: +"Detailed issue description. Required — do not create issues without a description. Plain text or Markdown." - added
Input schema / properties / description / minLengthAdded value: +1 - added
Input schema / properties / priority / defaultAdded value: +"normal" - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority name — must be a canonical English name: none, low, normal, high, urgent, immediate. Call get_issue_enums to see localized labels."New value: +"Priority name — must be a canonical English name: none, low, normal, high, urgent, immediate. Default: \"normal\". Call get_issue_enums to see localized labels." - changed
Input schema / requiredPrevious value: -[ - "summary", - "project_id", - "category" -]New value: +[ + "summary", + "description", + "project_id", + "category" +]
1 tool update
v1.5.9- Changed
create_issue2 fields changed- changed
Input schema / properties / priority / descriptionPrevious value: -"Priority name (e.g. \"normal\", \"high\", \"urgent\", \"immediate\", \"low\", \"none\")"New value: +"Priority name — must be a canonical English name: none, low, normal, high, urgent, immediate. Call get_issue_enums to see localized labels." - changed
Input schema / properties / severity / descriptionPrevious value: -"Severity name (e.g. \"minor\", \"major\", \"crash\", \"block\", \"feature\", \"trivial\", \"text\") — default: \"minor\""New value: +"Severity name — must be a canonical English name: feature, trivial, text, tweak, minor, major, crash, block. Default: \"minor\". Call get_issue_enums to see localized labels."
TDQS
Each tool targets a distinct action or resource. Even closely related tools like list_issues, get_issue, and get_issues have clear differences in scope and usage, with descriptions that explicitly guide when to use each.
All tool names follow the snake_case verb_noun pattern (e.g., add_monitor, create_issue, get_project_users). There are no mixed conventions, and verbs are descriptive, making the naming predictable and intuitive.
34 tools cover a wide range of operations (CRUD for issues, notes, attachments, relationships, tags, monitors, plus metadata, config, and project/user lookups). While on the higher end, the count is justified by the comprehensive scope and no tool feels superfluous.
Core issue lifecycle is well-covered, but notable gaps exist: there is no update_note tool, and search_issues is referenced in add_note's description but absent from the tool list. These omissions can cause confusion or require workarounds.
Maintenance
Related MCP Connectors
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) service that enables integration with Mantis Bug Tracker, allowing users to query and analyze bug tracking data through natural language commands.82910MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with MantisBT bug tracking systems through the REST API. Supports issue management, project access, user information, and note creation with type-safe operations.2-
- AlicenseAqualityDmaintenanceConnect Claude to your Redmine instance to search, browse, create and update issues, manage time entries, and upload/download attachments.51Mozilla Public 2.0
- FlicenseNot gradedqualityCmaintenanceEnables query and management of Zentao bugs, tasks, projects, and iterations directly from MCP-compatible IDEs like Cursor or Claude Desktop.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dpesch/mantisbt-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server