AI Model Catalog MCP Server

AI Model Catalog MCP Server

Provides a live, audited catalog of AI models from NVIDIA NIM, OpenRouter, Nous Portal, and other providers, enabling search, retrieval, and usage examples via MCP tools and resources.

Category
Visit Server

README

AI Model Catalog MCP Server — NVIDIA NIM + Multi-Provider

An MCP (Model Context Protocol) server that gives any MCP client (Claude Desktop / Claude Code, Cursor, IDEs) a live, audited catalog of AI models:

  • NVIDIA NIM — canonical source https://build.nvidia.com/models; fetched without an API key, deprecated models excluded, OpenAPI/templates resolved, cURL + Node.js + Python examples generated, tiered verification evidence stored. The hosted NIM catalog is 100% free to call with an NVIDIA API key.
  • OpenRouter — https://openrouter.ai/api/v1/models (official API)
  • Nous Portal — https://inference-api.nousresearch.com/v1/models (official API)
  • opencode Zen — https://models.dev/api.json (opencode's official catalog; see https://opencode.ai/docs/zen)
  • Blackbox AI — official docs pricing table (docs.blackbox.ai); authenticated https://api.blackbox.ai/v1/models when BLACKBOX_API_KEY is set
  • Vercel AI Gateway — https://ai-gateway.vercel.sh/v1/models (official API)

FREE_ONLY mode

.env (tracked, no secrets) ships with:

FREE_ONLY=yes

With FREE_ONLY=yes, every provider listing — MCP tools, MCP resources, and HTTP routes — only surfaces free models. Paid models cannot be listed or looked up directly (server-side enforcement, not client-side filtering). NVIDIA NIM is exempt because its hosted catalog is 100% free to call. Free detection per provider uses each official source: :free/-free id suffixes and zero prompt+completion pricing (OpenRouter/Nous/Vercel), zero/absent cost (opencode Zen), and "Free" pricing rows (Blackbox docs).

API keys never go into .env — put them in .env.local (gitignored) or real environment variables. See .env.example.

Quick start (install.sh)

./install.sh --install    # venv + deps + tests + build catalog + start services
./install.sh --status     # service state, ports, catalog counts
./install.sh --restart    # restart both services
./install.sh --update     # refresh catalog data, then --restart to serve it
./install.sh --logs       # tail service logs
./install.sh --systemd    # systemd units (auto-start on boot, auto-restart)
./install.sh --stop / --uninstall

Ports live in .env (tracked): MCP_PORT=9100 (MCP + dashboard), PORT=8787 (JSON API), HOST=127.0.0.1. Real env vars always win; put secrets only in .env.local.

MCP server (primary interface)

make install          # deps
make catalog          # build the NIM + provider catalog (key-less)
make mcp              # stdio (Claude Desktop / Claude Code)
make mcp-http         # Streamable HTTP + dashboard on 127.0.0.1:9100
#   http://127.0.0.1:9100/mcp        MCP protocol endpoint (Streamable HTTP)
#   http://127.0.0.1:9100/dashboard  live HTML dashboard (also served at /)
#   http://127.0.0.1:9100/health     liveness probe
#   http://127.0.0.1:9100/ready      readiness probe

Claude Desktop / Code config (.mcp.json is included in the repo):

{
  "mcpServers": {
    "nim-catalog": {
      "command": "python",
      "args": ["mcp_server.py", "--database", "data/active_nvidia_nim.sqlite3"]
    }
  }
}

Tools: search_models, get_model, get_usage_example, get_endpoints, recommend_models, get_stats, list_tiers, list_publishers (NVIDIA NIM) + list_providers, search_provider_models, get_provider_model (multi-provider).

Production deployment

Version 2.0.0 — enterprise-grade serving, stdlib-only hardening:

docker compose up -d                 # API :8787 + MCP HTTP :9100 (hardened containers)
docker compose run --rm refresher    # scheduled catalog rebuild
Feature How
Liveness / readiness GET /health / GET /ready (DB present and populated)
Prometheus metrics GET /metrics — requests, latency histogram, catalog gauges
Bearer auth CATALOG_API_TOKEN=… (probes stay open)
Rate limiting RATE_LIMIT_RPM=300 (429 + Retry-After; 0 disables)
Structured logs JSON access logs to stderr (CATALOG_LOG=off to silence)
Graceful shutdown SIGTERM/SIGINT finishes in-flight requests
Security headers nosniff, DENY, CSP, no-store on every response

Operations guide: docs/OPERATIONS.md · Security policy: SECURITY.md · Release notes: CHANGELOG.md

Dashboard

make dashboard generates exports/dashboard.html — a self-contained (no-CDN) HTML dashboard with KPIs, NIM verification tiers/modalities/ publishers/transports, per-provider totals vs free with fetch health, a searchable free-model explorer, a searchable NIM model explorer, and a data-quality panel mirroring validate_project.py. The HTTP service serves it live at GET /dashboard (also /):

make service   # then open http://127.0.0.1:8787/dashboard

Resources: nim://stats, nim://models, nim://tiers, nim://models/{publisher}/{slug}[/{language}], providers://catalog, providers://{provider}/models.

Current audited result

Counts drift as providers add/remove models; the numbers below are from the last audited run (2026-07-28). Re-run make catalog for fresh numbers — the /stats endpoint and exports/tiered-audit.json always reflect your local DB.

  • NVIDIA NIM: Build index 139 → active non-deprecated 124 (57 free-hosted · 96 downloadable · 36 partner)
  • OpenRouter: 341 models (18 free) · Nous Portal: 289 (5 free) · opencode Zen: 85 (24 free) · Blackbox AI: 47 (2 free) · Vercel AI Gateway: 307 (3 free)
  • Live inference verification requires NVIDIA_API_KEY (make verify); gateway reconciliation requires the same key (python ingest_gateway.py).

data/active_nvidia_nim.sqlite3 contains all active official models, the multi-provider catalog (provider_models), and audit evidence. exports/verified-working.sqlite3 contains only latest live-verified hosted models.

Gateway /v1/models reconciliation

export NVIDIA_API_KEY='nvapi-...'
python ingest_gateway.py --database data/active_nvidia_nim.sqlite3 --output exports
python export_unified.py --database data/active_nvidia_nim.sqlite3 --output unified-output

The gateway response currently exposes only four fields: id, object, created, and owned_by. The database preserves all of them in gateway_models, maps aliases to current Build entries, keeps gateway-only IDs, and enriches mapped records with Build OpenAPI/templates/docs. Query the all_model_inventory view for the full union.

Build without API key

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python audit_catalog.py --database data/active_nvidia_nim.sqlite3 build
python providers.py --database data/active_nvidia_nim.sqlite3 --output exports
python audit_catalog.py --database data/active_nvidia_nim.sqlite3 export --output exports
python finalize_audit.py --database data/active_nvidia_nim.sqlite3 --output exports

Optional live verification

export NVIDIA_API_KEY='nvapi-...'
python audit_catalog.py --database data/active_nvidia_nim.sqlite3 verify --rpm 20 --timeout 120

The live-test loop runs under the RPM cap, so a full pass can take a while. To resume an interrupted run (skip models already tested, no re-spent credit):

python audit_catalog.py --database data/active_nvidia_nim.sqlite3 verify --resume --rpm 20 --timeout 120

One Build catalog ID:

python audit_catalog.py --database data/active_nvidia_nim.sqlite3 verify \
  --model z-ai/glm-5.2 --rpm 20 --timeout 120

Automated update

chmod +x bin/update-catalog.sh
NIM_VERIFY=0 bin/update-catalog.sh

Set NIM_VERIFY=1 only when live tests and credit use are intended.

The same pipeline is available as Make targets (make help for the full list):

make install      # pip install -r requirements.txt -r requirements-dev.txt -r requirements-mcp.txt
make test         # pytest unit suite (no network/API key needed)
make lint         # ruff lint gate (same as CI)
make catalog      # full key-less pipeline: build -> providers -> upstreams -> finalize -> export -> unified -> validate
make providers    # refresh only the multi-provider catalogs
make dashboard    # regenerate exports/dashboard.html
make service      # read-only catalog HTTP API on 127.0.0.1:8787
make mcp          # MCP server over stdio (Claude Desktop / Claude Code)
make mcp-http     # MCP server + dashboard over Streamable HTTP on 127.0.0.1:9100
make image        # build the catalog_service Docker image
make ci-local     # reproduce the CI key-less pipeline locally

Testing

tests/ is a fast, deterministic pytest suite (no network, no API key) that pins the data-correctness invariants: model-ID validation/de-dup, page classification, served-id selection, smoke-payload construction, upstream joining, and deprecation date semantics. Run with make test.

Continuous integration

.github/workflows/ci.yml runs the unit tests, then the key-less pipeline (build → upstreams → finalize → export → unified → validate) on every push/PR and daily, so the build.nvidia.com contract and the pipeline runtime stay healthy. No API key is required for CI; live verification stays opt-in via NIM_VERIFY=1 locally or bin/build-strict.sh with an NVIDIA_API_KEY.

Deployment

catalog_service.py ships as a read-only HTTP API. The included Dockerfile serves a pre-built catalog over the API (non-root, healthchecked):

make catalog                                   # build data/active_nvidia_nim.sqlite3 first
docker build -t nvidia-nim-catalog .
docker run -p 8787:8787 -v "$PWD/data:/app/data:ro" nvidia-nim-catalog

MCP server

mcp_server.py exposes the catalog as a Model Context Protocol server, so MCP clients (Claude Desktop, Claude Code, Cursor, IDEs) can discover models, read served IDs/endpoints, and get runnable cURL/Node.js examples on demand — no copy-pasting from build.nvidia.com. It is a read-only adapter over the same shared query layer (catalog_queries.py) as the HTTP API, so both transports behave identically. Build the catalog first (make catalog), then run the server.

Install the MCP dependency (extra):

pip install -r requirements-mcp.txt   # adds the `mcp` SDK

Run (the server reads data/active_nvidia_nim.sqlite3 read-only):

make mcp           # stdio transport (default; for Claude Desktop / Claude Code)
make mcp-http      # Streamable HTTP transport on http://127.0.0.1:8788
# or explicitly:
python mcp_server.py --database data/active_nvidia_nim.sqlite3                      # stdio
python mcp_server.py --database data/active_nvidia_nim.sqlite3 --transport http --port 8788

Connect from Claude Desktop (stdio)

Add an entry to claude_desktop_config.json (Settings → Developer → Edit Config). Use the absolute path to the repo and (if needed) the absolute path to your Python interpreter:

{
  "mcpServers": {
    "nim-catalog": {
      "command": "python",
      "args": ["/absolute/path/to/nvidia-nim_model_fetcher/mcp_server.py",
               "--database", "/absolute/path/to/nvidia-nim_model_fetcher/data/active_nvidia_nim.sqlite3"]
    }
  }
}

Connect from Claude Code (.mcp.json in the project root)

{
  "mcpServers": {
    "nim-catalog": {
      "command": "python",
      "args": ["mcp_server.py", "--database", "data/active_nvidia_nim.sqlite3"]
    }
  }
}

Inspect interactively

mcp dev mcp_server.py        # opens the MCP Inspector UI

What the server exposes

Tools (the assistant calls these):

Tool Description
search_models Search by text/modality/tier; filters for working_only/free_only.
get_model Full detail: served_id, operations, endpoints, examples.
get_usage_example Runnable cURL / Node.js code for a model.
get_endpoints Every endpoint with host, transport, and auth requirement.
recommend_models Steers to live_inference_verified models for production.
get_stats Catalog counts, per-tier breakdown, last build time.
list_tiers Verification tiers with counts and guarantees.

Resources (URI-addressable): nim://stats, nim://models, nim://tiers, nim://models/{publisher}/{slug} (full model), and nim://models/{publisher}/{slug}/{language} (a code example). The catalog id is publisher/slug; because it contains a slash, the template splits it into two segments — e.g. nim://models/meta/llama-3.1-8b-instruct/curl.

Prompt: use_nim_model(catalog_id, task) returns a ready-to-run integration plan.

Notes

  • The server is read-only; it never writes and never runs the build pipeline. Refresh the catalog by rebuilding the DB on a schedule (make catalog / CI). get_stats reports the last build time so freshness is transparent.
  • recommend_models defaults to production_only=true, returning only models that actually responded over HTTP — set it false to also see official downloadable/specialized models, clearly tagged.
  • Partial-build safety: if the DB was produced by audit_catalog build alone (the tiered audit from finalize_audit.py not yet run), get_stats/list_tiers report audit_populated: false with a clear warning, and recommend_models falls back to free-endpoint models instead of silently returning an empty list. Run make catalog (which includes finalize) for full tiered data.
  • A missing database returns a clear startup error rather than failing silently.

For a complete strict rebuild, including the gateway and gRPC stages:

chmod +x bin/build-strict.sh
NIM_RPM=20 bin/build-strict.sh

The strict pipeline now runs Build discovery, authenticated gateway ingestion and gateway-only tests, Build free-endpoint inference tests, gRPC/NVCF health audit, upstream audit, final audit, unified export, and strict export. Gateway-only records remain visible in the unified inventory but enter strict output only after a real inference pass.

Verification policy

  • live_inference_verified: received HTTP 2xx and eligible for working DB.
  • official_contract_downloadable: active official NIM, but requires local NVIDIA GPU/container deployment.
  • official_contract_specialized_transport: official Build/API contract verified; live testing needs gRPC, media, private access, or special infrastructure.
  • live_test_failed: timeout/404/5xx; retained in audit but excluded from working.

Every model has cURL and Node.js records. For gRPC/private/custom transports, records explicitly state the official alternative instead of fabricating an HTTP request.

Upstream endpoint audit

python audit_upstreams.py --database data/active_nvidia_nim.sqlite3 --output exports

The audit cross-checks stored endpoints against each model's Build OpenAPI servers, resolved code templates, Build guides, and official NVIDIA docs. Supported upstream families include:

  • integrate.api.nvidia.com — hosted LLM/chat/embedding and selected APIs;
  • ai.api.nvidia.com — legacy/specialized VLM, retrieval, Cosmos, and AV APIs;
  • health.api.nvidia.com — BioNeMo/biology APIs;
  • optimize.api.nvidia.com — optimization APIs such as cuOpt;
  • climate.api.nvidia.com — climate/weather APIs;
  • grpc.nvcf.nvidia.com:443 — hosted NVCF gRPC requiring API key and function ID;
  • localhost — self-hosted NIM management/inference endpoints.

exports/upstream-audit.* records the result. A Build URL with documentation-only means NVIDIA publishes no fixed public upstream (for example private/early-access or internally brokered playgrounds).

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured