Skip to main content
Glama

Add a link from this issue to another

link_issues

Add a link from this issue to another.

Board-core also writes the inverse link on the target issue (blocks ↔ blocked_by, duplicates ↔ duplicated_by, clones ↔ cloned_by, relates ↔ relates) — in the target's own project when it is another one. id (spec D131) is an issue key of THIS project or of another project of the SAME company (KJ-120): you must be able to open both projects, else 403 link_target_forbidden (details.project_key) — do not retry, tell the user who can. Cross-company links do not exist. type: delivers (goals, deals) takes a release instead: id = KEY/R-n (list_releases of that project gives R-n), the release must exist (404 release_not_found) and no inverse is written — the goal or deal is delivered by that release; delivers with an issue key, or any other type with KEY/R-n, is a 400. Afterwards get_issue shows the target live in linked[] (title, status or release state and progress) and rollup fields (computed) follow.

WRITE: version = from your latest read (get_issue, list_comments, list_sprints, get_doc, read_file). 409 version_conflict (details.current, details.current_version): re-read, re-apply your change, retry — never overwrite blindly; when the changes disagree, ask the user.

Input Schema

NameRequiredDescriptionDefault
idYesAn issue key of this project or of another project of the company (D131 (1); you must open both, else 403 link_target_forbidden), or `KEY/R-n` with type `delivers`.
typeYesLink types, stored on the source issue. board-core keeps the inverse on the target in step: blocks↔blocked_by, duplicates↔duplicated_by, clones↔cloned_by, relates↔relates. `delivers` (D131 (1)) points at a release (`id` = releaseRef `KEY/R-n`, same company) — the goal or deal is delivered by that release; no inverse is written (releases are not issues).
reasonNoSpec D144: why you make this change (≤ 200 characters). Optional, but give it when you act as an agent account — it is shown in the agent's run log ("moved KJ-12 To Do → In Progress because <reason>"). board-mcp records it in `agent.run`; board-core / board-files accept it and ignore it (it never changes the file, the version or the history).
versionYesOptimistic-lock version of the file; +1 on every write. Every write must send the version it read.
issue_keyYesIssue key `{PROJECT}-{n}`, e.g. `KJ-101`.
project_keyYesProject key, e.g. `KJ`. 2–10 chars, uppercase letters and digits, starts with a letter.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / reason
      Added value: +{
      +  "description": "Spec D144: why you make this change (≤ 200 characters). Optional, but give it when you act as an agent account — it is shown in the agent's run log (\"moved KJ-12 To Do → In Progress because <reason>\"). board-mcp records it in `agent.run`; board-core / board-files accept it and ignore it (it never changes the file, the version or the history).",
      +  "maxLength": 200,
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond annotations by explaining that the inverse link is written on the target issue, including cross-project targets, and that `delivers` writes no inverse. It also discloses error behavior (403 link_target_forbidden, 404 release_not_found, 400, 409 version_conflict) and the post-condition visible via get_issue.

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

Conciseness4/5

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

Front-loaded with the primary action, then dense but purposeful sections on inverse links, `delivers`, errors, and version conflict handling. It is long and dense as a single block, but nearly every sentence carries operational meaning; headings or bullets could improve scanability.

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

Completeness5/5

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

For a non-idempotent write tool with no output schema, the description covers the critical gaps: inverse-link side effects, cross-project permission boundaries, `delivers` release semantics, error handling, version-conflict recovery, and how the result is later observed via get_issue.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds substantial semantic value: `id` accepts either an issue key or `KEY/R-n` depending on `type`, `version` must come from the latest read, and `reason` is optional but recommended for agent accounts. These are behavioral constraints the schema alone does not fully convey.

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

Purpose5/5

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

States a precise verb and resource: "Add a link from this issue to another." The description immediately adds scope: cross-project constraints, inverse-link behavior, and the `delivers` special case, so an agent knows exactly which operation this performs versus unlink_issues or other write tools.

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 strong conditional guidance: `id` must be in this project or another project of the same company, cross-company links do not exist, `delivers` requires `KEY/R-n` instead of an issue key, and mismatch is a 400. It does not explicitly name alternatives like `unlink_issues`, which keeps it from a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources