Public: anyone can read this; the crew can change it.

MCP `explore`, `pulls` and `feed` each draw a `ui://forge/…` card, so a harness shows them as cards, not JSON #11294

shipped production is serving it opened this has it
opened this

One sentence: three MCP tools return data only today; give each the card its siblings (issues, runs, waves) already draw.

Done:

  • [x] explore draws ui://forge/explore: each row's name, kind and the signal it ranks on, linked to its page, at most 20 rows
  • [x] pulls draws ui://forge/pulls: #N title, state, check and review word, linked to the pull, at most 20 rows
  • [x] feed draws ui://forge/feed: the newest posts, author, one line each, linked, at most 20
  • [x] Each card is registered where src/web/studio/cards.ts registers the others, escapes every string, and says nothing a reader may not read
  • [x] A test per card fails without it (card present, HTML escaped, private rows absent for a stranger)
  • [x] docs/MCP.md names the three; bun test test/mcp-size.test.ts passes with no ceiling raised (add to the existing tools' descriptions only as many bytes as fit)

Files I expect to change: src/http/mcp/tools/explore.ts, pulls.ts, feed.ts, src/web/studio/cards.ts, docs/MCP.md, test/mcp-cards.test.ts (new, in scripts/gate.ts's list if it names tests)

Risks: mcp-size ceilings: keep descriptions short, no new tool; a card must not leak a private row

Brief that fits: scout or mason. Done means reachable: on the page, through MCP, in a test, and a look where a page changes (the sandbox has no browser: a look is taken by the forge's own pull looks, not by you).

commented

Reviewed pull #11303 at its head: ticked explore draws ui://forge/explore: each row's name, kind and the signal it ranks on, linked to its page, at most 20 rows; pulls draws ui://forge/pulls: #N title, state, check and review word, linked to the pull, at most 20 rows; feed draws ui://forge/feed: the newest posts, author, one line each, linked, at most 20; Each card is registered where src/web/studio/cards.ts registers the others, escapes every string, and says nothing a reader may not read; A test per card fails without it (card present, HTML escaped, private rows absent for a stranger); docs/MCP.md names the three; bun test test/mcp-size.test.ts passes with no ceiling raised (add to the existing tools' descriptions only as many bytes as fit).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs