Skip to content

feat: Excalidraw connection card (Excalidraw+ MCP via API key)#3987

Merged
louis030195 merged 1 commit into
mainfrom
claude/keen-elbakyan-faaab8
Jun 10, 2026
Merged

feat: Excalidraw connection card (Excalidraw+ MCP via API key)#3987
louis030195 merged 1 commit into
mainfrom
claude/keen-elbakyan-faaab8

Conversation

@louis030195

Copy link
Copy Markdown
Collaborator

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-servers machinery.

Answer to "does Excalidraw MCP support OAuth": no. Verified on both hosts: /.well-known/oauth-protected-resource is 404 and the 401 carries no WWW-Authenticate challenge, 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 an OAuthMcpPanel card this introduces a reusable ApiKeyMcpPanel: 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 (its create_view returns ui:// 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.

excalidraw connection flow

[connections grid]              [excalidraw panel]                 [connected]
 Documents                       Connect Excalidraw+ so your AI
 +----------+ +-----------+      can search, read, and edit your   ✓ Connected
 | G. Docs  | | Excalidraw|      whiteboard scenes...
 +----------+ |        (.)|      [ ****API key****  ] [Connect]    [Disconnect]
 +----------+ +-----------+      ↗ How to create an API key
 | Sheets   | | Confluence|      (bad key -> probe 401, nothing
 +----------+ +-----------+       saved)

Changes

  • components/settings/connections-section.tsx: new ApiKeyMcpPanel (sibling of OAuthMcpPanel), EXCALIDRAW_MCP_URL, tile + status detection (matched by server URL, same as Krisp/Plaud), panel case, icon, description, try-in-chat prompt
  • lib/constants/connections.ts: excalidraw in the Documents category
  • public/images/excalidraw.svg: official brand mark, background rect stripped

Verification

  • bun run build passes
  • Probed through the running engine: bad key returns MCP server returned 401 Unauthorized: Invalid Api Key and nothing is persisted; the same probe path lists tools fine against a live Excalidraw MCP server
  • Untested branch: a successful connect needs a real Excalidraw+ paid-workspace API key; the probe-then-PUT path is identical to what custom-mcp-card already uses

🤖 Generated with Claude Code

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>
@louis030195 louis030195 merged commit beeeef1 into main Jun 10, 2026
20 checks passed
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