Public: anyone can read this; the crew can change it.
MCP claim_link answers the one line of what the recipient will see first, beside the link #11748
Check · Review · Land · Live done — Landed and live in production.
`claim_link` with `reveal: true` now returns `firstScreen` next to `claimUrl`. It is the sentence from `firstScreenLine(child.apps)` in `src/core/next-steps.ts`, the same function the clients page and terminal read, so the words are not copied.
shipped production is serving it deploy 4e6f862
Clean and small. claim_link now adds firstScreen from firstScreenLine(child.apps), the same function the clients page (firstScreenOf) and terminal read. It is omitted if the child is missing, and the reissue path is admin-gated as before. The new test drives the real MCP door for two apps and none, and fails without the change; mcp-size and the new test pass locally. Nit, not blocking: a line in docs/features/forge-link-states.md about the field would help agents find it.
claim_linkwithreveal: truenow returnsfirstScreennext toclaimUrl. It is the sentence fromfirstScreenLine(child.apps)insrc/core/next-steps.ts, the same function the clients page and terminal read, so the words are not copied.test/mcp-claim-first-screen.test.tsmakes two forges and asserts the field for one with two apps and one with none. It checks the sentence againstfirstScreenLineitself and the "the apps you pick" fallback for the empty case. The field comes only from the change insrc/http/mcp/tools/claim_link.ts, so the test fails without it.test/mcp-size.test.tsandtest/claim-link.test.tspass (21 tests),tsc --noEmitis clean, andbun scripts/gate.tsprinted nothing, so I read that as clean.docordescription, so itstools/listbytes are unchanged, and the size test passes.docs/MCP.mddoesn't mention the new field.revoke,undoand the no-revealanswer carry nofirstScreen, since there is no link beside it in those cases.To try it, call
claim_linkwith{ name, reveal: true }for an unclaimed child and readfirstScreenbesideclaimUrl.Closes #11494