Skip to content

Add provider catalog with curated entries and live registry probing#27

Merged
BillJr99 merged 1 commit into
mainfrom
claude/wizard-button-descriptions-a6mfup
Jun 13, 2026
Merged

Add provider catalog with curated entries and live registry probing#27
BillJr99 merged 1 commit into
mainfrom
claude/wizard-button-descriptions-a6mfup

Conversation

@BillJr99

Copy link
Copy Markdown
Owner

Summary

Adds a browseable provider catalog feature that lets users discover and configure known MCP servers and REST/OpenAPI APIs with one click. The catalog combines a curated offline list with optional live probing of external registries (MCP registry, Smithery, APIs.guru).

Key Changes

  • New catalog.py module: Framework-free catalog implementation with:

    • Curated entry loading from frontend/catalog.json
    • Live registry adapters for MCP registry, Smithery, and APIs.guru
    • Per-source caching (900s TTL by default) and error isolation
    • Entry normalization and deduplication (curated entries win ties)
    • Configurable via MCPPROXY_CATALOG_LIVE, MCPPROXY_CATALOG_TTL, MCPPROXY_CATALOG_TIMEOUT, and MCPPROXY_CATALOG_MAX_PER_SOURCE environment variables
  • New /api/catalog endpoint: Returns merged catalog with optional live probing

    • ?live=true enables external registry queries
    • ?source=mcp_registry,apis_guru narrows which registries to probe
    • Always returns curated list even if all live sources fail
    • Failures reported in errors map rather than raising
  • Curated catalog JSON (frontend/catalog.json): 10 hand-picked entries including:

    • MCP servers: Asana, Linear, Notion, Sentry, Stripe, DeepWiki, Hugging Face
    • REST/OpenAPI APIs: Swagger Petstore, Stripe REST API, APIs.guru directory
  • UI enhancements:

    • New "🗂 Browse" button in navbar opens catalog modal
    • Search by name/description, filter by type (MCP vs REST/OpenAPI)
    • Toggle to enable live registry probing
    • Each provider card shows source and links to configure via wizard
    • Added "Best for…" hints to all provider type cards in the wizard
    • CSS styling for catalog modal and hint text
  • Test coverage:

    • Unit tests for normalization, curated loading, error isolation, and deduplication
    • Integration tests for offline and live catalog endpoints
    • Fixture to reset cache between tests

Implementation Details

  • Live registry calls use httpx.AsyncClient with concurrent fetching via asyncio.gather() for per-source error isolation
  • Entries are normalized to enforce http(s) URLs only and required fields per kind
  • Deduplication by (kind, url|openapi_url) with curated entries always winning
  • Browser-side search/filter is client-side only; no server-side filtering
  • Catalog modal integrates with existing wizard via wzSelectType() with prefill callbacks
  • All environment gates and timeouts are configurable for locked-down deployments

https://claude.ai/code/session_01QT1BPZBCsSJCsZU465nQdj

Wizard mode cards now carry a plain-language "Best for…" sentence with
concrete examples so it's clear which mode fits which kind of service
(remote MCP vs package vs repository vs REST vs code).

Add a "🗂 Browse" catalog to the web UI: a searchable list of known MCP
servers and REST/OpenAPI APIs that deep-links into the New Provider wizard
with the URL or OpenAPI spec pre-filled, then runs the existing
introspection flow. The catalog is hybrid — a curated list bundled at
frontend/catalog.json (offline-safe default) plus optional live probing of
the MCP registry, Smithery, and APIs.guru behind a flag. Live sources are
fetched concurrently with per-source error isolation and a short cache; the
endpoint only ever contacts a fixed allowlist of registry hosts and never
fetches an entry's own URL.

- catalog.py: curated loader, live source adapters, TTL cache, build_catalog
- frontend/app.py: navbar button, catalog modal + JS, GET /api/catalog,
  "Best for…" card copy; wzSelectType gains an optional prefill callback
- frontend/catalog.json: curated entries
- Dockerfile: ship catalog.py
- tests: test_catalog.py + catalog UI/endpoint coverage in test_frontend.py
- README: document the catalog and MCPPROXY_CATALOG_* knobs
@BillJr99 BillJr99 merged commit eebee19 into main Jun 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants