# QA: MCP Apps — LangGraph (Python) ## Prerequisites - Demo is deployed and accessible at `/demos/mcp-apps` on the dashboard host - Agent backend is healthy; `OPENAI_API_KEY` is set on Railway; `LANGGRAPH_DEPLOYMENT_URL` points at a LangGraph deployment exposing the `mcp_apps` graph (registered as agent name `mcp-apps` — see `src/app/api/copilotkit-mcp-apps/route.ts`) - MCP server target: the public Excalidraw MCP app at `https://mcp.excalidraw.com` (override via `MCP_SERVER_URL`). Pinned `serverId: "excalidraw"` so URL changes don't silently break persisted activities - Note: the demo source contains no `data-testid` attributes and registers no custom activity renderer — CopilotKit's built-in `MCPAppsActivityRenderer` handles the sandboxed iframe automatically. Checks below rely on verbatim visible text, network traffic, and the iframe DOM ## Test Steps ### 1. Basic Functionality - [ ] Navigate to `/demos/mcp-apps`; verify the page renders within 3s and a single `CopilotChat` pane is centered (max-width ~896px, rounded-2xl, full-height) - [ ] Verify the chat is wired to `runtimeUrl="/api/copilotkit-mcp-apps"` and `agent="mcp-apps"` (DevTools → Network: sending a message hits that endpoint) - [ ] Verify both suggestion pills are visible with verbatim titles: - "Draw a flowchart" - "Sketch a system diagram" - [ ] Send "Hello" and verify an assistant text response appears within 10s (no MCP activity iframe for plain text) ### 2. Feature-Specific Checks #### MCP Server Connection (runtime `mcpApps.servers`) - [ ] Send the first flow-chart prompt; in DevTools → Network, verify the POST to `/api/copilotkit-mcp-apps` succeeds (status 200) and the server-side runtime resolves tools from `https://mcp.excalidraw.com` (watch the server logs for the MCP Apps middleware attaching the Excalidraw tool set — notably `create_view`) - [ ] Verify no console errors mentioning the MCP server URL, auth, or tool-schema parse failures #### MCP Tool Invocation (`create_view`) - [ ] Click "Draw a flowchart"; within 60s verify the agent calls the `create_view` MCP tool exactly ONCE (per `SYSTEM_PROMPT` in `src/agents/mcp_apps_agent.py`: "Call `create_view` ONCE with 3-5 elements total") — confirm via DevTools → Network stream or backend logs - [ ] Verify the tool payload contains 3-5 Excalidraw elements (shapes + arrows + optional title text), each with a unique string `id`, and ends with ONE `cameraUpdate` sized `600x450` or `800x600` #### Activity Renderer (built-in `MCPAppsActivityRenderer`) - [ ] Within 60s of the tool call, verify a sandboxed `