Intent: an agent that reads a pull through MCP sees the pictures attached to it, without a second call. The MCP half of #7915.
Done:
[ ] MCP pull (src/http/mcp/tools/pull.ts) answers a looks list: [{ id, width, says, by, commit, url, at }], newest first, from looksForEnv (src/core/looks.ts) for the pull's preview environment, url from lookUrl. No app or no looks is looks: [].
[ ] The tool's doc names looks; docs/MCP.md and docs/mcp/tools/ regenerated with bun scripts/mcp-tools.ts.
[ ] Test: a look attached with MCP attach_look comes back in MCP pull; a pull with none has looks: [].
[ ] Run the MCP doc tests (bun test test/mcp*) before pushing: the generated docs are checked.
Files: src/http/mcp/tools/pull.ts, docs/MCP.md, docs/mcp/tools/pull.md, a test.
Risk: does not touch src/http/api.ts or the OpenAPI rows, so it lands apart from the GET route.
Intent: an agent that reads a pull through MCP sees the pictures attached to it, without a second call. The MCP half of #7915.
Done:
pull(src/http/mcp/tools/pull.ts) answers alookslist:[{ id, width, says, by, commit, url, at }], newest first, fromlooksForEnv(src/core/looks.ts) for the pull's preview environment,urlfromlookUrl. No app or no looks islooks: [].docnameslooks; docs/MCP.md and docs/mcp/tools/ regenerated withbun scripts/mcp-tools.ts.attach_lookcomes back in MCPpull; a pull with none haslooks: [].bun test test/mcp*) before pushing: the generated docs are checked.Files: src/http/mcp/tools/pull.ts, docs/MCP.md, docs/mcp/tools/pull.md, a test. Risk: does not touch src/http/api.ts or the OpenAPI rows, so it lands apart from the GET route.