Skip to content

Commit 187e616

Browse files
sync: fix: keep MCP server cards aligned with registered tools (#735)
Synced from monorepo directory: wan
1 parent ee99c6d commit 187e616

3 files changed

Lines changed: 32 additions & 27 deletions

File tree

core/server_card.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Build public server cards from the registered MCP tools."""
2+
3+
from typing import Any
4+
5+
6+
def registered_tool_cards(mcp: Any) -> list[dict[str, str]]:
7+
"""Return a stable public view of the registered tools."""
8+
tools = sorted(mcp._tool_manager.list_tools(), key=lambda tool: tool.name)
9+
return [{"name": tool.name, "description": tool.description or ""} for tool in tools]

main.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
from core.config import settings
2020
from core.server import mcp
21+
from core.server_card import registered_tool_cards
2122

2223
# Configure logging
2324
logging.basicConfig(
@@ -163,33 +164,7 @@ async def server_card(_request: Request) -> JSONResponse:
163164
{
164165
"serverInfo": {"name": "MCP Wan"},
165166
"authentication": {"required": True, "schemes": ["bearer"]},
166-
"tools": [
167-
{
168-
"name": "wan_generate_video",
169-
"description": "Generate video from text",
170-
},
171-
{
172-
"name": "wan_generate_video_from_image",
173-
"description": "Generate video from image",
174-
},
175-
{"name": "wan_get_task", "description": "Query task status"},
176-
{
177-
"name": "wan_get_tasks_batch",
178-
"description": "Query multiple tasks",
179-
},
180-
{
181-
"name": "wan_list_models",
182-
"description": "List available models",
183-
},
184-
{
185-
"name": "wan_list_resolutions",
186-
"description": "List available resolutions",
187-
},
188-
{
189-
"name": "wan_list_actions",
190-
"description": "List available actions",
191-
},
192-
],
167+
"tools": registered_tool_cards(mcp),
193168
"prompts": [
194169
{
195170
"name": "wan_video_generation_guide",

tests/test_server_card.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""Server-card tools must match the MCP registry exactly."""
2+
3+
from pathlib import Path
4+
5+
import tools # noqa: F401, I001
6+
from core.server import mcp
7+
from core.server_card import registered_tool_cards
8+
9+
10+
def test_server_card_tools_match_registered_tools():
11+
registered = {tool.name for tool in mcp._tool_manager.list_tools()}
12+
advertised = {tool["name"] for tool in registered_tool_cards(mcp)}
13+
14+
assert advertised == registered
15+
assert len(advertised) == len(registered_tool_cards(mcp))
16+
17+
18+
def test_http_server_card_uses_registered_tools():
19+
source = (Path(__file__).parents[1] / "main.py").read_text()
20+
21+
assert '"tools": registered_tool_cards(mcp)' in source

0 commit comments

Comments
 (0)