feat: Excalidraw connection card (Excalidraw+ MCP via API key)#3987
Merged
Conversation
Excalidraw's remote MCPs don't support OAuth (no discovery metadata, 401 without WWW-Authenticate), so this adds a reusable ApiKeyMcpPanel next to the OAuth MCP cards (Krisp, Plaud) for providers gated by a static bearer key, and wires an Excalidraw card to the Excalidraw+ workspace MCP (api.excalidraw.com/api/v1/mcp). The key is validated with an ad-hoc probe before anything is persisted; the value lands in the secret store via the generic /mcp-servers machinery. Disconnect deletes the server and wipes the stored key. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
Adds a featured Excalidraw card to Settings > Connections, wiring the Excalidraw+ workspace MCP (
https://api.excalidraw.com/api/v1/mcp) through the existing generic/mcp-serversmachinery.Answer to "does Excalidraw MCP support OAuth": no. Verified on both hosts:
/.well-known/oauth-protected-resourceis 404 and the 401 carries noWWW-Authenticatechallenge, so the MCP OAuth discovery flow (what powers the Krisp/Plaud cards) cannot work. Excalidraw+ uses a static bearer API key created in workspace settings. So instead of anOAuthMcpPanelcard this introduces a reusableApiKeyMcpPanel: paste key, an ad-hoc probe (POST /mcp-servers/test) validates it against the provider, and only on success is the server persisted (PUT /mcp-servers/:id, key value goes to the secret store, never the JSON config). Disconnect deletes the server and wipes the stored key. The next bearer-key MCP provider is one constant + one case line.Why the Excalidraw+ MCP and not the official no-auth
mcp.excalidraw.com: the official one is an MCP Apps drawing server (itscreate_viewreturnsui://HTML that the app cannot render, and its export tool is app-visibility-only). The Excalidraw+ workspace MCP works headless and gives the agent real context:list_scenes,get_scene_content,search_scene_content,edit_scene_content, collections, workspace tools.Changes
components/settings/connections-section.tsx: newApiKeyMcpPanel(sibling ofOAuthMcpPanel),EXCALIDRAW_MCP_URL, tile + status detection (matched by server URL, same as Krisp/Plaud), panel case, icon, description, try-in-chat promptlib/constants/connections.ts:excalidrawin the Documents categorypublic/images/excalidraw.svg: official brand mark, background rect strippedVerification
bun run buildpassesMCP server returned 401 Unauthorized: Invalid Api Keyand nothing is persisted; the same probe path lists tools fine against a live Excalidraw MCP server🤖 Generated with Claude Code