diff --git a/litellm/proxy/mcp_registry.json b/litellm/proxy/mcp_registry.json index 70e81f127c9..7a3755edb69 100644 --- a/litellm/proxy/mcp_registry.json +++ b/litellm/proxy/mcp_registry.json @@ -269,6 +269,17 @@ {"name": "EXA_API_KEY", "description": "Exa API Key", "secret": true} ] }, + { + "name": "parallel_search", + "title": "Parallel Search", + "description": "AI-optimized web search and extraction for agents", + "icon_url": "https://assets.parallel.ai/dark-parallel-avatar-270.png", + "category": "Search", + "registry_url": null, + "transport": "http", + "url": "https://search.parallel.ai/mcp", + "env_vars": [] + }, { "name": "tavily", "title": "Tavily", diff --git a/tests/unit/proxy/mcp_server/test_mcp_discovery.py b/tests/unit/proxy/mcp_server/test_mcp_discovery.py index 35fc7440f99..42ec86a24d8 100644 --- a/tests/unit/proxy/mcp_server/test_mcp_discovery.py +++ b/tests/unit/proxy/mcp_server/test_mcp_discovery.py @@ -89,6 +89,25 @@ class TestMCPRegistryFile: assert linear["url"] == "https://mcp.linear.app/mcp" assert "/sse" not in linear["url"] + def test_parallel_search_uses_anonymous_streamable_http(self, registry_path: str) -> None: + with open(registry_path, "r") as f: + data: Final = json.load(f) + + parallel_search: Final = next( + server for server in data["servers"] if server["name"] == "parallel_search" + ) + assert parallel_search == { + "name": "parallel_search", + "title": "Parallel Search", + "description": "AI-optimized web search and extraction for agents", + "icon_url": "https://assets.parallel.ai/dark-parallel-avatar-270.png", + "category": "Search", + "registry_url": None, + "transport": "http", + "url": "https://search.parallel.ai/mcp", + "env_vars": [], + } + def test_well_known_servers_present(self, registry_path): """Ensure key well-known MCPs are in the registry.""" with open(registry_path, "r") as f: