You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Work spec for a follow-up session. The MCP is fully built in code but not serving in production, and several adjacent pieces are staged in open PRs. This issue is the ordered checklist to finish it.
Background — what's already merged to main
This session merged, verified green (lint + 716 app tests + 58 admin tests + builds):
The MCP server code (worker/) is complete: dual-era protocol (legacy + 2026-07-28 beta), titles/annotations, input and output schemas, structured content, server.json. claude plugin validate passes on both manifests.
1. 🔴 Deploy the Worker — make events.mukoko.com/mcp actually live (highest priority)
Current state:POST https://events.mukoko.com/mcp returns the Next.js app HTML with an x-vercel-id header — i.e. the request falls through to Vercel because the Cloudflare Worker route is not intercepting /mcp/*. nhimbe.com/mcp also (correctly) does not serve the MCP.
Do:
Ensure the events.mukoko.com DNS record on the mukoko.com Cloudflare zone is Proxied (orange cloud) in front of Vercel (see worker/README.md → "DNS / routing").
Deploy the Worker: cd worker && npx wrangler deploy --env production (needs Cloudflare auth / CLOUDFLARE_API_TOKEN). wrangler.toml already registers only the events.mukoko.com/mcp + /mcp/* routes.
Verify live:
curl https://events.mukoko.com/mcp -X POST -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Expect the 5 tools with title, annotations, inputSchema, outputSchema — not app HTML / an x-vercel-id header.
Confirm nhimbe.com/mcp still does not serve the MCP (hard rule: single MCP domain).
2. Publish to the MCP registry
worker/server.json (name com.mukoko/nhimbe-events) is ready. Publish per worker/README.md → "MCP registry": verify the com.mukoko DNS namespace via a TXT record on mukoko.com, mcp-publisher login dns --domain mukoko.com, then cd worker && mcp-publisher publish.
Keep version in server.json and worker/package.json in lockstep on each release.
3. Land the two open PRs (staged, off an older main — rebase first)
feat(seo): dual-domain support — one canonical origin (events.mukoko.com) #92 — dual-domain (events.mukoko.com + nhimbe.com, canonical = events.mukoko.com). Rebase onto main, merge. Then the ops follow-ups (not code): add both domains to the Vercel project; register both /callback URLs in WorkOS; set NEXT_PUBLIC_SITE_URL=https://events.mukoko.com (prod + preview).
feat(search): hybrid vector⊕full-text retrieval (RRF) with graceful fallback #93 — hybrid search (vector ⊕ full-text RRF with graceful fallback). Rebase onto main, merge. Then the platform DB asks in docs/search-platform-requests.md: create event_vector_index on events.eventEmbeddings (768-dim cosine + city/category filters) and events_text_index (Atlas Search) on events.events; later upgrade the cluster to 8.1 for native $rankFusion + evaluate automated (Voyage) embeddings.
4. Split MCP and admin into their own repos
Both are extraction-ready (self-contained, share no code with the app beyond HTTP APIs).
nyuchi/mukoko-events-mcp ← move worker/ (+ the plugins/, .claude-plugin/marketplace.json, connectors/, and top-level skills/ distribution surfaces, or decide which travel with it). Update repository/source fields in worker/package.json, worker/server.json, plugin.json, marketplace.json. Remove the worker jobs from this repo's ci.yml and add a deploy workflow in the new repo.
nyuchi/mukoko-events-admin ← move admin/. It's currently a hoisted npm workspace member that imports the root src/* via @/* tsconfig paths — extraction needs those shared modules vendored or published, so plan that dependency break before moving. Give it its own Vercel project wiring (already documented in admin/README.md).
SSR-first sweep: these pages are "use client" and could be server-rendered for the SSR-first goal — evaluate/convert where they don't need client state: /search, /my-events, /calendar, /profile. (Core browse surfaces — home, /discover, /events, /events/[id] — are already SSR.)
MongoDB "repeated things": a duplicate-data concern was raised but not pinpointed. Swept collections (campfire.conversations, events.events, identity.persons, entity.entities) were clean; needs the specific collection/screen to investigate.
Guardrails
Single MCP domain: the MCP is served only at events.mukoko.com/mcp, never nhimbe.com/mcp. The app stays dual-domain; the MCP does not.
Worker owns no data: every tool calls the app's public HTTP API; the app is the single trust boundary (WorkOS bearer verified in src/lib/auth/workos-token.ts).
Repo house style: claude/<topic> branches, draft PRs, squash-merge.
Work spec for a follow-up session. The MCP is fully built in code but not serving in production, and several adjacent pieces are staged in open PRs. This issue is the ordered checklist to finish it.
Background — what's already merged to
mainThis session merged, verified green (lint + 716 app tests + 58 admin tests + builds):
events.mukoko.com/mcponly) + tooltitle/annotations+worker/server.jsonregistry declarationskills/mukoko-events-discovery,skills/mukoko-events-hosting)outputSchema+structuredContenton all 5 tools) +worker/made a self-contained, extraction-ready workspaceplugins/mukoko-events/) + repo marketplace (.claude-plugin/marketplace.json) + ChatGPT connector (connectors/chatgpt/)The MCP server code (
worker/) is complete: dual-era protocol (legacy + 2026-07-28 beta), titles/annotations, input and output schemas, structured content,server.json.claude plugin validatepasses on both manifests.1. 🔴 Deploy the Worker — make
events.mukoko.com/mcpactually live (highest priority)Current state:
POST https://events.mukoko.com/mcpreturns the Next.js app HTML with anx-vercel-idheader — i.e. the request falls through to Vercel because the Cloudflare Worker route is not intercepting/mcp/*.nhimbe.com/mcpalso (correctly) does not serve the MCP.Do:
events.mukoko.comDNS record on themukoko.comCloudflare zone is Proxied (orange cloud) in front of Vercel (seeworker/README.md→ "DNS / routing").cd worker && npx wrangler deploy --env production(needs Cloudflare auth /CLOUDFLARE_API_TOKEN).wrangler.tomlalready registers only theevents.mukoko.com/mcp+/mcp/*routes.title,annotations,inputSchema,outputSchema— not app HTML / anx-vercel-idheader.nhimbe.com/mcpstill does not serve the MCP (hard rule: single MCP domain).2. Publish to the MCP registry
worker/server.json(namecom.mukoko/nhimbe-events) is ready. Publish perworker/README.md→ "MCP registry": verify thecom.mukokoDNS namespace via a TXT record onmukoko.com,mcp-publisher login dns --domain mukoko.com, thencd worker && mcp-publisher publish.versioninserver.jsonandworker/package.jsonin lockstep on each release.3. Land the two open PRs (staged, off an older
main— rebase first)events.mukoko.com+nhimbe.com, canonical =events.mukoko.com). Rebase ontomain, merge. Then the ops follow-ups (not code): add both domains to the Vercel project; register both/callbackURLs in WorkOS; setNEXT_PUBLIC_SITE_URL=https://events.mukoko.com(prod + preview).main, merge. Then the platform DB asks indocs/search-platform-requests.md: createevent_vector_indexonevents.eventEmbeddings(768-dim cosine +city/categoryfilters) andevents_text_index(Atlas Search) onevents.events; later upgrade the cluster to 8.1 for native$rankFusion+ evaluate automated (Voyage) embeddings.4. Split MCP and admin into their own repos
Both are extraction-ready (self-contained, share no code with the app beyond HTTP APIs).
nyuchi/mukoko-events-mcp← moveworker/(+ theplugins/,.claude-plugin/marketplace.json,connectors/, and top-levelskills/distribution surfaces, or decide which travel with it). Updaterepository/sourcefields inworker/package.json,worker/server.json,plugin.json,marketplace.json. Remove the worker jobs from this repo'sci.ymland add a deploy workflow in the new repo.nyuchi/mukoko-events-admin← moveadmin/. It's currently a hoisted npm workspace member that imports the rootsrc/*via@/*tsconfig paths — extraction needs those shared modules vendored or published, so plan that dependency break before moving. Give it its own Vercel project wiring (already documented inadmin/README.md).5. Follow-ups / smaller items
searchEventsActionto the lighterautocompleteEventsActionfor snappier per-keystroke results (src/components/layout/header.tsx)."use client"and could be server-rendered for the SSR-first goal — evaluate/convert where they don't need client state:/search,/my-events,/calendar,/profile. (Core browse surfaces — home,/discover,/events,/events/[id]— are already SSR.)Guardrails
events.mukoko.com/mcp, nevernhimbe.com/mcp. The app stays dual-domain; the MCP does not.src/lib/auth/workos-token.ts).claude/<topic>branches, draft PRs, squash-merge.🤖 Generated with Claude Code