From a3e256502347f9b7dad2567172adb059f0870cb4 Mon Sep 17 00:00:00 2001 From: Kobi Kadosh Date: Sun, 16 Aug 2026 01:06:54 -0700 Subject: [PATCH] feat(mcp): add Nimble to MCP registry Adds Nimble (web search, SERP, and site extraction) to the curated MCP server discovery list, alongside the other Search category entries (Brave Search, Exa, Tavily). Uses the documented streamable HTTP MCP endpoint (https://mcp.nimbleway.com/mcp); the legacy /sse endpoint referenced in older docs now returns 410 Gone. --- litellm/proxy/mcp_registry.json | 13 ++++++++++ .../mcp_server/test_mcp_discovery.py | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/litellm/proxy/mcp_registry.json b/litellm/proxy/mcp_registry.json index 70e81f127c9..1f1d4a272a2 100644 --- a/litellm/proxy/mcp_registry.json +++ b/litellm/proxy/mcp_registry.json @@ -269,6 +269,19 @@ {"name": "EXA_API_KEY", "description": "Exa API Key", "secret": true} ] }, + { + "name": "nimble", + "title": "Nimble", + "description": "Web search, SERP, and site extraction data for AI agents", + "icon_url": "https://avatars.githubusercontent.com/u/94446617?v=4", + "category": "Search", + "registry_url": null, + "transport": "http", + "url": "https://mcp.nimbleway.com/mcp", + "env_vars": [ + {"name": "NIMBLE_API_KEY", "description": "Nimble API Key", "secret": true} + ] + }, { "name": "tavily", "title": "Tavily", diff --git a/tests/unit/proxy/_experimental/mcp_server/test_mcp_discovery.py b/tests/unit/proxy/_experimental/mcp_server/test_mcp_discovery.py index d35cb7234dc..f37bd87d69a 100644 --- a/tests/unit/proxy/_experimental/mcp_server/test_mcp_discovery.py +++ b/tests/unit/proxy/_experimental/mcp_server/test_mcp_discovery.py @@ -91,6 +91,30 @@ class TestMCPRegistryFile: assert linear["url"] == "https://mcp.linear.app/mcp" assert "/sse" not in linear["url"] + def test_nimble_uses_streamable_http_with_api_key(self, registry_path): + """Nimble should expose its authenticated streamable HTTP endpoint.""" + with open(registry_path, "r") as f: + data = json.load(f) + + nimble = next(s for s in data["servers"] if s["name"] == "nimble") + assert nimble == { + "name": "nimble", + "title": "Nimble", + "description": "Web search, SERP, and site extraction data for AI agents", + "icon_url": "https://avatars.githubusercontent.com/u/94446617?v=4", + "category": "Search", + "registry_url": None, + "transport": "http", + "url": "https://mcp.nimbleway.com/mcp", + "env_vars": [ + { + "name": "NIMBLE_API_KEY", + "description": "Nimble API Key", + "secret": True, + } + ], + } + 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: