Implementation:BerriAI Litellm MCP Registry
Template:Implementation metadata
Overview
Description
The litellm/proxy/mcp_registry.json file is a curated catalog of well-known MCP (Model Context Protocol) servers that can be added to a LiteLLM Proxy deployment. The registry powers the MCP Server Discovery UI in the proxy dashboard, providing a browsable grid of pre-configured server options across categories like Developer Tools, Databases, Communication, Productivity, Cloud, and more.
Each server entry includes connection details (transport type, URL or command), required environment variables, and display metadata (icons, descriptions, categories). The registry supports three transport types: HTTP (streamable HTTP), SSE (Server-Sent Events), and stdio (command-line process).
Usage
The file is loaded by the _load_mcp_registry() function in litellm/proxy/management_endpoints/mcp_management_endpoints.py. It is cached in memory after first read and served via the GET /mcp/discover endpoint. Only proxy administrators can access this endpoint.
# Loading path:
_MCP_REGISTRY_PATH = os.path.join(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
"mcp_registry.json",
)
# Cached after first load
_mcp_registry_cache: Optional[Dict[str, Any]] = None
Data Schema
Top-Level Structure
{
"servers": [
{
"name": "github",
"title": "GitHub",
"description": "Manage repos, issues, PRs, and workflows...",
"icon_url": "https://cdn.simpleicons.org/github",
"category": "Developer Tools",
"registry_url": "https://registry.modelcontextprotocol.io/servers/...",
"transport": "http",
"url": "https://api.githubcopilot.com/mcp/",
"env_vars": [
{"name": "GITHUB_PERSONAL_ACCESS_TOKEN", "description": "...", "secret": true}
]
},
...
]
}
Schema Fields
Server Entry Object
| Field | Type | Required | Description |
|---|---|---|---|
name |
String | Yes | Unique slug identifier (e.g., "github", "postgresql", "slack")
|
title |
String | Yes | Human-readable display name (e.g., "GitHub", "PostgreSQL")
|
description |
String | Yes | Brief description of the server's capabilities |
icon_url |
String | Yes | URL to the server's icon image (typically from cdn.simpleicons.org)
|
category |
String | Yes | Category for UI grouping and filtering |
registry_url |
String/null | Yes | URL to the official MCP registry entry, or null if not registered
|
transport |
String | Yes | Connection type: "http", "sse", or "stdio"
|
url |
String | Conditional | Server endpoint URL (required for http and sse transports)
|
command |
String | Conditional | Command to run (required for stdio transport, e.g., "npx", "uvx")
|
args |
Array[String] | Conditional | Command arguments (required for stdio transport)
|
env_vars |
Array[Object] | Yes | Required environment variables for the server |
Environment Variable Object
| Field | Type | Description |
|---|---|---|
name |
String | Environment variable name (e.g., "GITHUB_PERSONAL_ACCESS_TOKEN")
|
description |
String | Human-readable description of what the variable is for |
secret |
Boolean | Whether the value should be treated as a secret (masked in UI) |
Transport Types
| Transport | Connection Fields | Description |
|---|---|---|
http |
url |
Streamable HTTP connection to a remote MCP server |
sse |
url |
Server-Sent Events connection to a remote MCP server |
stdio |
command, args |
Local process spawned via command execution |
Categories
The registry organizes servers into the following categories:
| Category | Example Servers |
|---|---|
| Developer Tools | GitHub, GitLab, Atlassian (Jira & Confluence), Linear, Sentry |
| Communication | Slack, Discord, Twilio |
| Databases | PostgreSQL, SQLite, MySQL, MongoDB, Redis, Snowflake, Supabase |
| Productivity | Notion, Google Drive |
| Web & Browser | Playwright, Browserbase |
| Cloud | AWS, Cloudflare |
| System | Filesystem, Docker |
| Finance | Stripe |
| E-Commerce | Shopify |
Registered Servers
The registry contains entries for the following servers (non-exhaustive):
| Server | Transport | Notable Env Vars |
|---|---|---|
| GitHub | http | GITHUB_PERSONAL_ACCESS_TOKEN
|
| GitLab | http | GITLAB_PERSONAL_ACCESS_TOKEN
|
| Atlassian | sse | (none -- uses OAuth) |
| Linear | sse | (none -- uses OAuth) |
| Sentry | stdio | SENTRY_ACCESS_TOKEN
|
| Slack | stdio | SLACK_BOT_TOKEN, SLACK_TEAM_ID
|
| Discord | stdio | DISCORD_BOT_TOKEN
|
| PostgreSQL | stdio | POSTGRES_CONNECTION_STRING
|
| SQLite | stdio | SQLITE_DB_PATH
|
| MySQL | stdio | MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE
|
| MongoDB | stdio | MONGODB_CONNECTION_STRING
|
| Redis | stdio | REDIS_URL
|
| Snowflake | stdio | SNOWFLAKE_ACCOUNT, SNOWFLAKE_USER, SNOWFLAKE_PASSWORD
|
| Notion | sse | (none -- uses OAuth) |
| Stripe | http | (none -- uses OAuth) |
| AWS | stdio | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION
|
| Cloudflare | sse | (none -- uses OAuth) |
Usage Examples
How the Discovery Endpoint Works
# From litellm/proxy/management_endpoints/mcp_management_endpoints.py:
@router.get("/discover",
description="Returns a curated list of well-known MCP servers for discovery UI")
async def discover_mcp_servers(
query: Optional[str] = Query(None, description="Search filter"),
category: Optional[str] = Query(None, description="Filter by category"),
...
):
"""Used by the UI to show a discovery grid when adding new MCP servers."""
registry = _load_mcp_registry()
servers = registry.get("servers", [])
# Apply query filter (searches name, title, description)
if query:
query_lower = query.lower()
servers = [
s for s in servers
if query_lower in s.get("name", "").lower()
or query_lower in s.get("title", "").lower()
or query_lower in s.get("description", "").lower()
]
# Apply category filter
if category:
servers = [s for s in servers if s.get("category", "") == category]
# Extract unique categories for filter sidebar
categories = sorted(set(s.get("category", "") for s in all_servers))
return {"servers": servers, "categories": categories, ...}
How MCP Registry Data is Used for Semantic Filtering
The registry is also used by the semantic tool filter to build a router for MCP tool discovery:
# From litellm/proxy/_experimental/mcp_server/semantic_tool_filter.py:
async def build_router_from_mcp_registry(self) -> None:
"""Build a semantic router from the MCP registry server entries."""
...
Related Pages
- Provider Endpoints Support - Provider capability matrix for LLM endpoints
- Callback Configs - Callback integration configuration