Skip to content

Commit da09910

Browse files
committed
apply refactoring
1 parent e06a2de commit da09910

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

src/mcp/server/fastmcp/server.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -958,10 +958,13 @@ async def get_prompt(self, name: str, arguments: dict[str, Any] | None = None) -
958958
"""Get a prompt by name with arguments."""
959959
try:
960960
prompt = self._prompt_manager.get_prompt(name)
961-
messages = await self._prompt_manager.render_prompt(name, arguments)
962-
961+
if not prompt:
962+
raise ValueError(f"Unknown prompt: {name}")
963+
964+
messages = await prompt.render(arguments)
965+
963966
return GetPromptResult(
964-
description=getattr(prompt, "description", None),
967+
description=prompt.description,
965968
messages=pydantic_core.to_jsonable_python(messages),
966969
)
967970
except Exception as e:

tests/server/fastmcp/test_server.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,33 @@ def fn(name: str) -> str:
995995
result = await client.get_prompt("fn", {"name": "World"})
996996
assert result.description == "Test prompt description"
997997

998+
@pytest.mark.anyio
999+
async def test_get_prompt_without_description(self):
1000+
"""Test getting a prompt without description returns None."""
1001+
mcp = FastMCP()
1002+
1003+
@mcp.prompt() # No description provided
1004+
def fn(name: str) -> str:
1005+
return f"Hello, {name}!"
1006+
1007+
async with client_session(mcp._mcp_server) as client:
1008+
result = await client.get_prompt("fn", {"name": "World"})
1009+
assert result.description is None
1010+
1011+
@pytest.mark.anyio
1012+
async def test_get_prompt_with_docstring_description(self):
1013+
"""Test prompt uses docstring as description when not explicitly provided."""
1014+
mcp = FastMCP()
1015+
1016+
@mcp.prompt()
1017+
def fn(name: str) -> str:
1018+
"""This is the function docstring."""
1019+
return f"Hello, {name}!"
1020+
1021+
async with client_session(mcp._mcp_server) as client:
1022+
result = await client.get_prompt("fn", {"name": "World"})
1023+
assert result.description == "This is the function docstring."
1024+
9981025
@pytest.mark.anyio
9991026
async def test_get_prompt_with_resource(self):
10001027
"""Test getting a prompt that returns resource content."""

0 commit comments

Comments
 (0)