Skip to content

[MCP] feat(samples): add the Kanban board showcase for agent and MCP App communication - #3226

Draft
josemontespg wants to merge 1 commit into
catalogs-example-mcp-app-order-summaryfrom
catalogs-example-kanban
Draft

josemontespg wants to merge 1 commit into
catalogs-example-mcp-app-order-summaryfrom
catalogs-example-kanban

Conversation

@josemontespg

@josemontespg josemontespg commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Adds a Kanban board sample under samples/community/mcp/a2ui-kanban/ that connects a Node MCP server, a Python ADK + A2A agent, and a Lit chat host through @a2ui/catalog-mcp.

The sample exercises four communication paths around the McpApp component: the agent mutates the board via MCP server tools and pushes /kanban/board updates to the app (updateDataModel to ui/notifications/data-model-update); the app publishes selection, filter, and column WIP state to /kanban/modelContext (ui/update-model-context) so the agent can answer questions about the live view; card drags write /kanban/board (ui/notifications/data-model-change) so sibling Text counters recompute client-side without an agent turn; and card drops (tools/call + ui/message) and split requests (ui/message) dispatch a2ui.mcpAppMessage actions that the chat host forwards to the agent.

Live demo: http://josemontesp.c.googlers.com:5173/

Changes

  • samples/community/mcp/a2ui-kanban/mcp-server/: Streamable HTTP MCP server exposing list_board, move_task, create_task, assign_task, and open_board, plus the @modelcontextprotocol/ext-apps board UI bundled into the ui://kanban/board resource (text/html;profile=mcp-app) and unit/HTTP tests.
  • samples/community/mcp/a2ui-kanban/agent/: Python ADK + A2A agent (and a deterministic KANBAN_AGENT=scripted fallback for tests and keyless runs) that connects to the MCP server and emits A2UI v1.0 surface and data-model messages, with pytest coverage.
  • samples/community/mcp/a2ui-kanban/client/: Lit chat host registering basicCatalog and mcpCatalog, connecting callMcpTool to the MCP server, deriving /kanban/summary/* from /kanban/board for sibling Text components, and testing all four channels with Vitest and Playwright E2E tests.
  • samples/community/mcp/a2ui-kanban/README.md, samples/community/README.md, samples/community/package.json, samples/community/yarn.lock: Three-terminal setup instructions, walkthrough storyline, and community workspace registration.
  • docs/public/guides/mcp-apps-in-a2ui.md: Adds the Kanban showcase as Sample 3.

Verification

  • Ran yarn test in samples/community/mcp/a2ui-kanban/mcp-server (13 node:test server/tool tests + 20 Vitest app tests passing), yarn test in samples/community/mcp/a2ui-kanban/client (9 Vitest host tests passing), yarn test:e2e in samples/community/mcp/a2ui-kanban/client (6 Playwright E2E CUJ + WCAG AA contrast tests passing), and uv run pytest in samples/community/mcp/a2ui-kanban/agent (11 tests passing).
  • Built a2ui-kanban-mcp-server and a2ui-kanban-client from samples/community, ran uv sync --no-install-project, verified formatting and license headers, and ran the three services end-to-end (http://josemontesp.c.googlers.com:5173/); full community_code.yml workflow runs in CI.

Related to #3157

@github-project-automation github-project-automation Bot moved this to Todo in A2UI Oct 15, 2026
@josemontespg
josemontespg added this pull request to stack #3227 October 15, 2026 00:10

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new Kanban Board Showcase sample application, demonstrating bidirectional communication between a Python agent, a sandboxed MCP App, and sibling A2UI components. The feedback focuses on enhancing the robustness and error handling of the newly added code. Key recommendations include wrapping server tool calls in try-catch blocks to safely roll back optimistic UI updates on failure, and adding defensive type checks in the agent executor, MCP client, and chat host to prevent potential runtime crashes from malformed or unexpected data payloads.

Comment thread samples/community/mcp/a2ui-kanban/mcp-server/app/board.ts Outdated
Comment thread samples/community/mcp/a2ui-kanban/agent/agent_executor.py
Comment thread samples/community/mcp/a2ui-kanban/agent/kanban_mcp.py Outdated
Comment thread samples/community/mcp/a2ui-kanban/agent/kanban_mcp.py
Comment thread samples/community/mcp/a2ui-kanban/client/src/host.ts
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch from 569c4d2 to 55b0ec8 Compare October 15, 2026 00:23
Comment thread samples/community/mcp/a2ui-kanban/mcp-server/app/render.ts
Comment thread samples/community/mcp/a2ui-kanban/client/src/summary.ts Outdated
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch 8 times, most recently from 8a22333 to 9c6fafd Compare October 15, 2026 23:04
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch 5 times, most recently from 0d4a556 to 57c49f6 Compare October 19, 2026 22:38
Comment thread samples/community/mcp/a2ui-kanban/client/e2e/kanban.spec.ts
Comment thread samples/community/mcp/a2ui-kanban/client/e2e/kanban.spec.ts Outdated
Comment thread samples/community/mcp/a2ui-kanban/client/e2e/kanban.spec.ts
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch from 57c49f6 to 81118b3 Compare October 19, 2026 23:17
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch from 81118b3 to 69d9f23 Compare October 19, 2026 23:49
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch from 69d9f23 to ae22cd3 Compare October 19, 2026 23:59
@josemontespg
josemontespg force-pushed the catalogs-example-kanban branch from ae22cd3 to 299b98b Compare October 20, 2026 00:09

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant