Operators & builders

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 contains api., / rewrites to the connector index.
  • Local: set NEXT_PUBLIC_CATALOG_URL and NEXT_PUBLIC_API_URL (both http://localhost:3000 in .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_localdevmuse_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.

Submit to create a stub PaperSend job.

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/summaries

ShipSignal 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/parcels

Add a connector module

  1. Add typed metadata in packages/registry.
  2. Create connectors/{slug} with REST, MCP, and OpenAPI.
  3. Register the handlers in lib/gateway.ts.
  4. Fill out SUBMISSION.md with 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.