Repository navigation
feat(mcp): live collection board as an MCP App (TASK-4465) - #2520
Merged
Merged
Conversation
…ion forms show does (TASK-4465) Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…row (TASK-4465) parseBoard and parseChanges keep only well-formed rows from a tool result; boardItemFrom turns a pad_item answer into the board row it replaces, without its content. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
Status columns from pad_board show, live deltas from pad_board changes while fullscreen and visible, a Refresh control otherwise, and a per-item status select that writes through pad_item update with expected_seq. No item content, no markup rendering, every call through the bridge. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…e (TASK-4465) Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…tly (TASK-4465) Collections whose slugs differ only by a trailing s no longer mix in a board's deltas. Show still accepts singular forms and returns the canonical slug, which the view passes back to changes. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
The Apps surface appends a line saying pad_board is an additional read-only resource x action tool, thirteen tools in total. The stdio instructions are unchanged. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…n unseen item (TASK-4465) A truncated board or one with unplaced items cannot know which column total an item it does not display was counted in, so needsResync sends such a delta to a fresh show instead of applyChanges. A complete board keeps applying deltas. The unplaced-id tracking is gone: an unknown id on an incomplete board now resyncs. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
removed_ids now holds only rows that could have been on the board: this collection's deletions and parent-filter misses, and moved-out tombstones (which do not name their source). Live rows in other collections go to departed_ids; the view drops any it shows and never re-runs show for them, so unrelated updates no longer resync an incomplete board. A truncated item that moves away leaves its column total one too high until the next show, as documented in docs/mcp.md. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…rs (TASK-4465) Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…y five minutes (TASK-4465) Also lists the MCP App directory embed and its board read in the web census allow file. Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…s the MCP App bundle check (TASK-4465) Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
…r (TASK-4465) Claude-Session: https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a live board view to the MCP Apps surface, following the item card (#2519).
What changes
pad_board, registered only on the remote HTTP/mcpserver with MCP Apps on (PAD_MCP_APPS, default on). Stdio is unchanged.show {workspace, collection, parent?}: status columns in schema order with terminal and abandoned flags, a compact per-item projection (no content, no fields blob), at most 300 open items plus 20 per terminal column,truncated, per-columntotal,unplaced, and the index endpoint's owncursorandaccess_epoch.changes {workspace, collection, parent?, since, access_epoch}: reads/items-changesand returnsupserts,removed_ids(deleted, moved out, other collection, other parent), the endpoint's cursor and epoch, andresyncon an epoch change or a full page./collections,/items-indexand/items-changesroutes through the dispatcher's authed request path. Those endpoints, their cursor logic and their visibility filtering are unchanged. A hidden collection and a missing one get the same not_found.ui://pad/boardresource (text/html;profile=mcp-app, preferred display mode fullscreen). The board HTML is read from an embedded directory, so builds that only create the item card placeholder still compile.web/src/mcp-app/Board.svelte): columns with status changes viapad_item updatewithexpected_seq(optimistic move, revert and reload on conflict). It pollspad_board changesevery 10s only while fullscreen and visible, backs off to 120s on rate limits, re-runs show on resync, and offers Refresh inline. No HTML injection, no links out, no item content shown.Pad item card,Pad board) and in its page title.ToolSurfaceVersion0.113 to 0.114 (additive tool).Tests
TestPadBoard_ShowColumns,ShowCaps,ChangesUpsertRemove,RestrictedCursorNoLeak,HiddenVsMissingIdentical,AllowListRefusal,ReadOnly,ParentFilterAndSlugForms,TestMCPApps_BoardRegistration; route parity, read-only and chat-arm census tests now cover the app catalog.pad_board.Board.svelte.test.ts(18),board.test.ts, bridge tests.https://claude.ai/code/session_01Pa22hHJcmfKEzExwaXJX7T