How the gateway works
One Next.js deploy serves the catalog at muse.telep.io and the API at api.muse.telep.io. Preview and local use a single host: catalog at /, API at /v1, /mcp, and /health.
Hosts
- Production catalog:
https://muse.telep.io - Production API:
https://api.muse.telep.io— if the Host header containsapi.,/rewrites to the connector index. - Local: set
NEXT_PUBLIC_CATALOG_URLandNEXT_PUBLIC_API_URL(bothhttp://localhost:3000in.env.example).
Path scheme
GET https://api.muse.telep.io/health
GET https://api.muse.telep.io/v1
GET https://api.muse.telep.io/v1/openapi.json
GET https://api.muse.telep.io/v1/{slug}
POST https://api.muse.telep.io/v1/{slug}/...
POST https://api.muse.telep.io/mcp/{slug}Auth
Write routes and job reads require Authorization: Bearer <key>. Keys look like muse_sk_demo_localdev — muse_sk_{demo|test|live}_{token}. Configure them in MUSE_API_KEYS. Missing keys on writes return 401.
PaperSend stub
POST /v1/paper-send/jobs records an in-memory draft. It does not print or mail. The live PaperSend app still owns PDF rasterization and the mail provider. MCP tools: create_mail_job, get_job, list_jobs at https://api.muse.telep.io/mcp/paper-send. The try-it form posts to this origin so local, preview, and production catalog hosts all work without CORS gymnastics.
Sumvid stub
POST /v1/sumvid/summaries records an in-memory stub from a YouTube URL. It does not fetch captions and does not call a paid summarizer. MCP tools: summarize_youtube, get_summary, get_account at https://api.muse.telep.io/mcp/sumvid.
curl -H "Authorization: Bearer muse_sk_demo_localdev" \
-H "Content-Type: application/json" \
-d '{"youtubeUrl":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}' \
https://api.muse.telep.io/v1/sumvid/summariesShipSignal stub
POST /v1/shipsignal/parcels records an in-memory stub from a tracking number. The timeline is hashed from that number; no UPS, USPS, FedEx, or DHL API is called. MCP tools: track_package, list_parcels, refresh_parcel, watch_parcel, unwatch_parcel, get_account at https://api.muse.telep.io/mcp/shipsignal.
curl -H "Authorization: Bearer muse_sk_demo_localdev" \
-H "Content-Type: application/json" \
-d '{"trackingNumber":"1Z999AA10123456784"}' \
https://api.muse.telep.io/v1/shipsignal/parcelsAdd a connector module
- Add typed metadata in
packages/registry. - Create
connectors/{slug}with REST, MCP, and OpenAPI. - Register the handlers in
lib/gateway.ts. - Fill out
SUBMISSION.mdwith gateway URLs before sending Meta the listing.
Users still apply at muse.ai/platform. This repo is Telep’s catalog and edge, not Meta’s directory.