[extensions] Fix Claude Desktop connector compatibility#38
Open
matthallett1 wants to merge 14 commits intomainfrom
Open
[extensions] Fix Claude Desktop connector compatibility#38matthallett1 wants to merge 14 commits intomainfrom
matthallett1 wants to merge 14 commits intomainfrom
Conversation
…ltering - Canonical OB1 MCP server with 4 tools: capture_thought, search_thoughts, list_thoughts, thought_stats - Source filtering on search_thoughts, list_thoughts, thought_stats (optional source param) - Auth via x-brain-key header and ?key= query param against MCP_ACCESS_KEY - deno.json with pinned canonical dependency versions - Update .gitignore to track Edge Function source files while ignoring Supabase temp/config Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replaced custom monkeyrun Edge Function with OB1 canonical MCP server. 4 tools (capture_thought, search_thoughts, list_thoughts, thought_stats), source filtering on 3 tools, auth via query param and header. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Supabase Edge Functions pass the function name as part of the request
path (e.g., /professional-crm/mcp), but all extensions used explicit
routes like app.post("/mcp") which only matches /mcp. This caused every
extension to return 404 when deployed.
Changed to wildcard routing (app.post("*"), app.get("*")) to match
regardless of path prefix, consistent with the core open-brain-mcp
server pattern.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
z.record(z.any()) in the details parameter breaks with Zod 4.x and MCP SDK 1.24.3 (_zod property error). Changed to z.string() accepting a JSON string, which is compatible and functionally equivalent since the JSONB column accepts string input. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Local deployment copies of the 4 extension MCP servers with fixes applied: edge runtime import, wildcard routing for Supabase path handling, and z.record compatibility fix for household-knowledge. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deployment-ready copies with edge runtime import and wildcard routing fix applied. All 6 OB1 extensions now deployed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Same wildcard routing fix as the other 4 extensions — Supabase passes the function name in the request path. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
server.tool() wraps params in z.object() internally. Passing a z.object() schema double-wraps it, producing empty parameter schemas. Changed all 8 tool registrations to pass schema.shape instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tool handlers returned raw strings instead of MCP content objects
({ content: [{ type: "text", text: "..." }] }). Added wrap() helper
to all 8 tool registrations with error handling.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
OB1 pattern: users copy from extensions/ and deploy themselves. Removed supabase/functions/ from tracking — these are local deployment copies, not part of the repo standard. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove .planning/ files from tracking (already gitignored), fix broken link to nonexistent recurring-tasks primitive, add numbered step list to source-filtering README for review check compliance. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Desktop's custom connector system doesn't send the Accept: application/json, text/event-stream header that @hono/mcp StreamableHTTPTransport requires. This patches incoming requests to inject the header when missing. Fixes #33 Co-Authored-By: Claude Opus 4.6 (1M context) <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
Acceptheader mismatch that prevents Claude Desktop custom connectors from connecting to OB1 MCP edge functionsindex.tsfiles with a request rewrite that injectsAccept: application/json, text/event-streamwhen missingRoot cause
Claude Desktop's custom connector system sends POST requests without the
Accept: text/event-streamheader. TheStreamableHTTPTransportfrom@hono/mcp@0.1.1rejects these requests before they reach auth or tool code.Fix
Construct a new
Requestwith the missing header patched in (Deno's incoming request headers are immutable, so simple.set()doesn't work).Test plan
curlwithout Accept header — initialize, tools/list, and tools/call all succeedFixes #33
🤖 Generated with Claude Code