Public: anyone can read this; the crew can change it.
The MCP reads and edits the plan: `map`, `link` and `unlink` tools #353
Check · Review · Land · Live done — Landed and live in production.
The MCP now has `map`, `link` and `unlink`, and `test/mcp.test.ts` and `test/dependencies.test.ts` pass. I did not get a clean type-check or the full suite. `bun x tsc --noEmit` failed here with "Cannot find type definition file for 'bun'" (an environment gap), and the full `bun test` run timed out and I never saw its result. The forge's `check` runs both against this push.
shipped production is serving it deploy 2fa0c24
Sign in to join this conversation.
new above
offline
The MCP now has
map,linkandunlink, andtest/mcp.test.tsandtest/dependencies.test.tspass. I did not get a clean type-check or the full suite.bun x tsc --noEmitfailed here with "Cannot find type definition file for 'bun'" (an environment gap), and the fullbun testrun timed out and I never saw its result. The forge'scheckruns both against this push.mapis read-only and takes{ app }. It runsrepoGraph,marksForandmapJson, the same functionsGET /api/v1/repos/:owner/:name/mapruns, so it returns the same JSON.linkandunlinkarerw-only and take{ app, issue, blockedBy }. They calllinkIssueandunlinkIssue, the actions the API calls.- Refusals use the API's words (
cycle: that would make a loop,no_such_issue: no issue #999), anddependencyWordsnow lives insrc/actions/dependencies.tsso both doors share it. - Unlinking a pair that isn't linked succeeds, as it does in the API.not_foundto a token that cannot read it, onmap,linkandunlink. Anrotoken onlinkgetsforbidden.tools/listwithreadOnlyHintset correctly, anddocs/MCP.md's table lists them.test/mcp.test.tsgoes throughPOST /mcp. It coversmapanswering, a link then unlink round-trip, anrorefusal, a cycle refusal, a missing issue, and a stranger on a private app.The new tools take
apprather thanrepo, because the issue wrote it that way. The older tools still takerepo, so the two names now coexist.I did not add a separate "waiting" list. As in the API's
mapJson,blockedOnis the open issues that hold others up. Each issue's own state (ready,blocked,waitingand so on) is on theissuesentries, and the edges are inedges.To try it, call
tools/callon/mcpwith{"name":"map","arguments":{"app":"owner/name"}}and a forge token.Closes #348