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.
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; seehttps://opencode.ai/docs/zen) - Blackbox AI — official docs pricing table (
docs.blackbox.ai); authenticatedhttps://api.blackbox.ai/v1/modelswhenBLACKBOX_API_KEYis 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_statsreports the last build time so freshness is transparent. recommend_modelsdefaults toproduction_only=true, returning only models that actually responded over HTTP — set itfalseto also see official downloadable/specialized models, clearly tagged.- Partial-build safety: if the DB was produced by
audit_catalog buildalone (the tiered audit fromfinalize_audit.pynot yet run),get_stats/list_tiersreportaudit_populated: falsewith a clear warning, andrecommend_modelsfalls back to free-endpoint models instead of silently returning an empty list. Runmake catalog(which includesfinalize) 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).
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。