{"id":51222356,"url":"https://github.com/tempoxyz/mpp-discovery-mcp","last_synced_at":"2026-06-28T08:03:50.093Z","repository":{"id":365357784,"uuid":"1271733378","full_name":"tempoxyz/mpp-discovery-mcp","owner":"tempoxyz","description":"Read-only MCP server for MPP service discovery","archived":false,"fork":false,"pushed_at":"2026-06-17T01:55:59.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T03:21:21.383Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://mpp-discovery-mcp.tempo-dev.workers.dev/mcp","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tempoxyz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-17T00:54:34.000Z","updated_at":"2026-06-17T01:56:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tempoxyz/mpp-discovery-mcp","commit_stats":null,"previous_names":["tempoxyz/mpp-discovery-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tempoxyz/mpp-discovery-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fmpp-discovery-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fmpp-discovery-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fmpp-discovery-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fmpp-discovery-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tempoxyz","download_url":"https://codeload.github.com/tempoxyz/mpp-discovery-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fmpp-discovery-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34881388,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-28T08:03:49.303Z","updated_at":"2026-06-28T08:03:50.086Z","avatar_url":"https://github.com/tempoxyz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mpp-discovery-mcp\n\nRead-only Cloudflare Worker MCP server for the MPP service discovery catalog.\n\nDeployed endpoint:\n\n```text\nhttps://mpp-discovery-mcp.tempo-dev.workers.dev/mcp\n```\n\nServer card:\n\n```text\nhttps://mpp-discovery-mcp.tempo-dev.workers.dev/.well-known/mcp.json\n```\n\n## Data source\n\nThe Worker reads `GET https://mpp.dev/api/services`, which returns:\n\n```ts\n{ version: number, services: Service[] }\n```\n\nOffers are read from `service.endpoints[].payment`. The Worker does not fetch\nper-service `/openapi.json` files while refreshing the catalog.\n\nDiscovery is advisory. The runtime `402 Challenge` from the target paid API is\nauthoritative.\n\n## Refresh model\n\n- KV binding: `MPP_CATALOG_CACHE`\n- Cache key: `mpp:services:v1`\n- Hourly cron: `0 * * * *`\n- Requests use fresh KV data when it is less than one hour old.\n- If KV data is stale, requests serve the last-good cached catalog and refresh\n  in the background.\n- If `mpp.dev` is unreachable during cron refresh, the Worker logs the failure\n  and keeps the last-good KV value.\n- There is no public write, sync, registration, payment, or auth path.\n\n## Tools\n\nAll tool responses include `structuredContent`, an `outputSchema`, and a text\nsummary. Discovery is advisory; the runtime `402 Challenge` from the target\npaid API remains authoritative.\n\n- `list_services(limit?, offset?)` -\u003e paginated `id`, `name`, `url`,\n  `categories`, `integration`, `status`, `description`; default `limit` is 50\n  and max is 200\n- `search_services(query?, category?, method?, integration?, status?, limit?,\n  offset?)` -\u003e paginated substring search over name, description, and tags plus\n  exact filters; `category`, `integration`, and `status` are validated against\n  the registry enums and invalid values return an MCP tool error\n- `get_service(id_or_name)` -\u003e full `Service`\n- `get_offers(service, route?)` -\u003e endpoint payment offers from\n  `endpoints[].payment`\n- `get_openapi(service, raw?)` -\u003e validated OpenAPI data from\n  `service.docs.openapi`, `${service.url}/openapi.json`,\n  `service.docs.apiReference`, or a registry-derived endpoint view. Fetched\n  candidates must use HTTPS, return HTTP 200 JSON, and be OpenAPI-shaped\n  (`openapi` string or `paths` object); HTML, non-OpenAPI JSON, redirects beyond\n  3 hops, oversized fetches, and network failures fall back gracefully. The\n  default response is a summary with `openapiVersion`, `info.title/version`,\n  `x-service-info`, and `paths[]` entries containing `method`, `path`,\n  `summary`, and payment offers from `x-payment-info`. Set `raw: true` to\n  request the full fetched document when it is under the 256 KiB raw response\n  cap; larger raw requests return the summary plus a note and source URL.\n\n## MCP client config\n\nFor clients that accept a remote streamable HTTP MCP URL:\n\n```json\n{\n  \"mcpServers\": {\n    \"mpp-discovery\": {\n      \"url\": \"https://mpp-discovery-mcp.tempo-dev.workers.dev/mcp\"\n    }\n  }\n}\n```\n\nFor clients that need a local stdio bridge:\n\n```json\n{\n  \"mcpServers\": {\n    \"mpp-discovery\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https://mpp-discovery-mcp.tempo-dev.workers.dev/mcp\"\n      ]\n    }\n  }\n}\n```\n\n## Development\n\n```bash\npnpm install\npnpm gen:types\npnpm test\npnpm check:types\npnpm dev\n```\n\nDeploys are pinned to the Tempo Development Cloudflare account:\n\n```text\nTempo Development Resources / 0a39052b0a32ba8c8444345fe21b7595\n```\n\nDeploy:\n\n```bash\npnpm deploy\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftempoxyz%2Fmpp-discovery-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftempoxyz%2Fmpp-discovery-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftempoxyz%2Fmpp-discovery-mcp/lists"}