MCPcopy Index your code
hub / github.com/modelcontextprotocol/python-sdk / test_resource_title

Function test_resource_title

tests/server/mcpserver/test_title.py:122–191  ·  view source on GitHub ↗

Test that resource titles work correctly.

()

Source from the content-addressed store, hash-verified

120
121@pytest.mark.anyio
122async def test_resource_title():
123 """Test that resource titles work correctly."""
124 mcp = MCPServer(name="ResourceTitleServer")
125
126 # Static resource without title
127 def get_basic_data() -> str: # pragma: no cover
128 return "Basic data"
129
130 basic_resource = FunctionResource(
131 uri="resource://basic",
132 name="basic_resource",
133 description="Basic resource",
134 fn=get_basic_data,
135 )
136 mcp.add_resource(basic_resource)
137
138 # Static resource with title
139 def get_titled_data() -> str: # pragma: no cover
140 return "Titled data"
141
142 titled_resource = FunctionResource(
143 uri="resource://titled",
144 name="titled_resource",
145 title="User-Friendly Resource",
146 description="Resource with title",
147 fn=get_titled_data,
148 )
149 mcp.add_resource(titled_resource)
150
151 # Dynamic resource without title
152 @mcp.resource("resource://dynamic/{id}")
153 def dynamic_resource(id: str) -> str: # pragma: no cover
154 return f"Data for {id}"
155
156 # Dynamic resource with title (when supported)
157 @mcp.resource("resource://titled-dynamic/{id}", title="Dynamic Data")
158 def titled_dynamic_resource(id: str) -> str: # pragma: no cover
159 return f"Data for {id}"
160
161 # Start server and connect client
162 async with Client(mcp) as client:
163 # List resources
164 resources_result = await client.list_resources()
165 resources = {str(res.uri): res for res in resources_result.resources}
166
167 # Verify basic resource uses name
168 assert "resource://basic" in resources
169 basic = resources["resource://basic"]
170 assert basic.title is None
171 assert basic.name == "basic_resource"
172
173 # Verify resource with title
174 assert "resource://titled" in resources
175 titled = resources["resource://titled"]
176 assert titled.title == "User-Friendly Resource"
177
178 # List resource templates
179 templates_result = await client.list_resource_templates()

Callers

nothing calls this directly

Calls 6

add_resourceMethod · 0.95
MCPServerClass · 0.90
FunctionResourceClass · 0.90
ClientClass · 0.90
list_resourcesMethod · 0.45

Tested by

no test coverage detected