Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:BerriAI Litellm MCP Registry

From Leeroopedia

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

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment