Skip to main content
Glama

Remove Issue Relationship

remove_relationship
Destructive

Delete a relationship from a MantisBT issue by specifying the issue ID and relationship ID obtained from get_issue.

Instructions

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).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
issue_idYesThe issue ID the relationship belongs to
relationship_idYesThe numeric ID of the relationship to remove (from the relationships array in get_issue)

Implementation Reference

  • The implementation of the `remove_relationship` tool. It registers the tool with the MCP server, defines its input schema (issue_id and relationship_id), and performs a DELETE request to the MantisBT API.
      server.registerTool(
        'remove_relationship',
        {
          title: 'Remove Issue Relationship',
          description: `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).`,
          inputSchema: z.object({
            issue_id: z.coerce.number().int().positive().describe('The issue ID the relationship belongs to'),
            relationship_id: z.coerce.number().int().positive().describe('The numeric ID of the relationship to remove (from the relationships array in get_issue)'),
          }),
          annotations: {
            readOnlyHint: false,
            destructiveHint: true,
            idempotentHint: false,
          },
        },
        async ({ issue_id, relationship_id }) => {
          try {
            await client.delete<unknown>(`issues/${issue_id}/relationships/${relationship_id}`);
            return {
              content: [{ type: 'text', text: JSON.stringify({ success: true }, null, 2) }],
            };
          } catch (error) {
            const msg = error instanceof Error ? error.message : String(error);
            return { content: [{ type: 'text', text: errorText(msg) }], isError: true };
          }
        }
      );
Behavior4/5

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

Annotations already declare destructiveHint=true, but the description adds crucial behavioral context: the requirement to fetch data via get_issue first, and the specific clarification that relationship_id refers to the numeric id field in the relationships array, not the type ID. This prevents a likely implementation error.

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

Conciseness5/5

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

Two sentences with zero waste. The first states the action, the second provides essential workflow and parameter clarification. Every word earns its place and the guidance is front-loaded.

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

Completeness4/5

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

For a two-parameter destructive operation with simple types and no output schema, the description is complete. It covers safety (via annotations), workflow prerequisites, and parameter semantics. Could mention reversibility, but not required for this complexity level.

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

Parameters4/5

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

While the schema has 100% description coverage, the description adds semantic value by clarifying that relationship_id is 'not the type ID'—a critical distinction that prevents confusion between the relationship instance ID and the relationship category/type identifier.

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

Purpose5/5

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

The description states a specific verb ('Remove') and resource ('relationship from a MantisBT issue') that clearly distinguishes this tool from siblings like delete_issue (removes the whole issue), remove_monitor (removes a monitor), and add_relationship (creates rather than removes).

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

Usage Guidelines4/5

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

Provides explicit workflow guidance ('Use get_issue first to retrieve the relationship IDs') that establishes a prerequisite usage pattern. It also warns against a common error (confusing relationship_id with type ID), though it could explicitly mention add_relationship as the inverse operation.

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

Install Server

Other Tools

Latest Blog Posts

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