42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import pytest
|
|
|
|
from mcp import types
|
|
from mcp.server.fastmcp import FastMCP
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_resource_templates():
|
|
# Create an MCP server
|
|
mcp = FastMCP("Demo")
|
|
|
|
# Add a dynamic greeting resource
|
|
@mcp.resource("greeting://{name}")
|
|
def get_greeting(name: str) -> str: # pragma: no cover
|
|
"""Get a personalized greeting"""
|
|
return f"Hello, {name}!"
|
|
|
|
@mcp.resource("users://{user_id}/profile")
|
|
def get_user_profile(user_id: str) -> str: # pragma: no cover
|
|
"""Dynamic user data"""
|
|
return f"Profile data for user {user_id}"
|
|
|
|
# Get the list of resource templates using the underlying server
|
|
# Note: list_resource_templates() returns a decorator that wraps the handler
|
|
# The handler returns a ServerResult with a ListResourceTemplatesResult inside
|
|
result = await mcp._mcp_server.request_handlers[types.ListResourceTemplatesRequest](
|
|
types.ListResourceTemplatesRequest(params=None)
|
|
)
|
|
assert isinstance(result, types.ListResourceTemplatesResult)
|
|
templates = result.resource_templates
|
|
|
|
# Verify we get both templates back
|
|
assert len(templates) == 2
|
|
|
|
# Verify template details
|
|
greeting_template = next(t for t in templates if t.name == "get_greeting") # pragma: no cover
|
|
assert greeting_template.uri_template == "greeting://{name}"
|
|
assert greeting_template.description == "Get a personalized greeting"
|
|
|
|
profile_template = next(t for t in templates if t.name == "get_user_profile") # pragma: no cover
|
|
assert profile_template.uri_template == "users://{user_id}/profile"
|
|
assert profile_template.description == "Dynamic user data"
|