Fix 404 links in v1 README to renamed example files (#2822)

Co-authored-by: Max Isbey <224885523+maxisbey@users.noreply.github.com>
This commit is contained in:
Jerome 2026-06-12 15:05:20 +01:00 • committed by GitHub
commit cf110e3214
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -183,7 +183,7 @@ if __name__ == "__main__":
mcp.run(transport="streamable-http") mcp.run(transport="streamable-http")
``` ```
_Full example: [examples/snippets/servers/fastmcp_quickstart.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/fastmcp_quickstart.py)_ _Full example: [examples/snippets/servers/fastmcp_quickstart.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/fastmcp_quickstart.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
You can install this server in [Claude Code](https://docs.claude.com/en/docs/claude-code/mcp) and interact with it right away. First, run the server: You can install this server in [Claude Code](https://docs.claude.com/en/docs/claude-code/mcp) and interact with it right away. First, run the server:
@ -282,7 +282,7 @@ def query_db(ctx: Context[ServerSession, AppContext]) -> str:
return db.query() return db.query()
``` ```
_Full example: [examples/snippets/servers/lifespan_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lifespan_example.py)_ _Full example: [examples/snippets/servers/lifespan_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/lifespan_example.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Resources ### Resources
@ -313,7 +313,7 @@ def get_settings() -> str:
}""" }"""
``` ```
_Full example: [examples/snippets/servers/basic_resource.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/basic_resource.py)_ _Full example: [examples/snippets/servers/basic_resource.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/basic_resource.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Tools ### Tools
@ -340,7 +340,7 @@ def get_weather(city: str, unit: str = "celsius") -> str:
return f"Weather in {city}: 22degrees{unit[0].upper()}" return f"Weather in {city}: 22degrees{unit[0].upper()}"
``` ```
_Full example: [examples/snippets/servers/basic_tool.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/basic_tool.py)_ _Full example: [examples/snippets/servers/basic_tool.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/basic_tool.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
Tools can optionally receive a Context object by including a parameter with the `Context` type annotation. This context is automatically injected by the FastMCP framework and provides access to MCP capabilities: Tools can optionally receive a Context object by including a parameter with the `Context` type annotation. This context is automatically injected by the FastMCP framework and provides access to MCP capabilities:
@ -370,7 +370,7 @@ async def long_running_task(task_name: str, ctx: Context[ServerSession, None], s
return f"Task '{task_name}' completed" return f"Task '{task_name}' completed"
``` ```
_Full example: [examples/snippets/servers/tool_progress.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/tool_progress.py)_ _Full example: [examples/snippets/servers/tool_progress.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/tool_progress.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
#### Structured Output #### Structured Output
@ -455,7 +455,7 @@ def empty_result_tool() -> CallToolResult:
return CallToolResult(content=[]) return CallToolResult(content=[])
``` ```
_Full example: [examples/snippets/servers/direct_call_tool_result.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/direct_call_tool_result.py)_ _Full example: [examples/snippets/servers/direct_call_tool_result.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/direct_call_tool_result.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
**Important:** `CallToolResult` must always be returned (no `Optional` or `Union`). For empty results, use `CallToolResult(content=[])`. For optional simple types, use `str | None` without `CallToolResult`. **Important:** `CallToolResult` must always be returned (no `Optional` or `Union`). For empty results, use `CallToolResult(content=[])`. For optional simple types, use `str | None` without `CallToolResult`.
@ -561,7 +561,7 @@ def get_temperature(city: str) -> float:
# Returns: {"result": 22.5} # Returns: {"result": 22.5}
``` ```
_Full example: [examples/snippets/servers/structured_output.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/structured_output.py)_ _Full example: [examples/snippets/servers/structured_output.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/structured_output.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Prompts ### Prompts
@ -590,7 +590,7 @@ def debug_error(error: str) -> list[base.Message]:
] ]
``` ```
_Full example: [examples/snippets/servers/basic_prompt.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/basic_prompt.py)_ _Full example: [examples/snippets/servers/basic_prompt.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/basic_prompt.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Icons ### Icons
@ -626,7 +626,7 @@ def my_resource():
return "content" return "content"
``` ```
_Full example: [examples/fastmcp/icons_demo.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/fastmcp/icons_demo.py)_ _Full example: [examples/fastmcp/icons_demo.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/fastmcp/icons_demo.py)_
### Images ### Images
@ -651,7 +651,7 @@ def create_thumbnail(image_path: str) -> Image:
return Image(data=img.tobytes(), format="png") return Image(data=img.tobytes(), format="png")
``` ```
_Full example: [examples/snippets/servers/images.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/images.py)_ _Full example: [examples/snippets/servers/images.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/images.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Context ### Context
@ -718,7 +718,7 @@ async def long_running_task(task_name: str, ctx: Context[ServerSession, None], s
return f"Task '{task_name}' completed" return f"Task '{task_name}' completed"
``` ```
_Full example: [examples/snippets/servers/tool_progress.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/tool_progress.py)_ _Full example: [examples/snippets/servers/tool_progress.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/tool_progress.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Completions ### Completions
@ -809,7 +809,7 @@ if __name__ == "__main__":
main() main()
``` ```
_Full example: [examples/snippets/clients/completion_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/completion_client.py)_ _Full example: [examples/snippets/clients/completion_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/clients/completion_client.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Elicitation ### Elicitation
@ -918,7 +918,7 @@ async def connect_service(service_name: str, ctx: Context[ServerSession, None])
) )
``` ```
_Full example: [examples/snippets/servers/elicitation.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/elicitation.py)_ _Full example: [examples/snippets/servers/elicitation.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/elicitation.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
Elicitation schemas support default values for all field types. Default values are automatically included in the JSON schema sent to clients, allowing them to pre-populate forms. Elicitation schemas support default values for all field types. Default values are automatically included in the JSON schema sent to clients, allowing them to pre-populate forms.
@ -963,7 +963,7 @@ async def generate_poem(topic: str, ctx: Context[ServerSession, None]) -> str:
return str(result.content) return str(result.content)
``` ```
_Full example: [examples/snippets/servers/sampling.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/sampling.py)_ _Full example: [examples/snippets/servers/sampling.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/sampling.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Logging and Notifications ### Logging and Notifications
@ -993,7 +993,7 @@ async def process_data(data: str, ctx: Context[ServerSession, None]) -> str:
return f"Processed: {data}" return f"Processed: {data}"
``` ```
_Full example: [examples/snippets/servers/notifications.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/notifications.py)_ _Full example: [examples/snippets/servers/notifications.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/notifications.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Authentication ### Authentication
@ -1055,7 +1055,7 @@ if __name__ == "__main__":
mcp.run(transport="streamable-http") mcp.run(transport="streamable-http")
``` ```
_Full example: [examples/snippets/servers/oauth_server.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/oauth_server.py)_ _Full example: [examples/snippets/servers/oauth_server.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/oauth_server.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
For a complete example with separate Authorization Server and Resource Server implementations, see [`examples/servers/simple-auth/`](examples/servers/simple-auth/). For a complete example with separate Authorization Server and Resource Server implementations, see [`examples/servers/simple-auth/`](examples/servers/simple-auth/).
@ -1161,7 +1161,7 @@ def query_with_config(query: str, ctx: Context) -> str:
return str(result) return str(result)
``` ```
_Full lifespan example: [examples/snippets/servers/lifespan_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lifespan_example.py)_ _Full lifespan example: [examples/snippets/servers/lifespan_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/lifespan_example.py)_
## Running Your Server ## Running Your Server
@ -1229,7 +1229,7 @@ if __name__ == "__main__":
main() main()
``` ```
_Full example: [examples/snippets/servers/direct_execution.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/direct_execution.py)_ _Full example: [examples/snippets/servers/direct_execution.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/direct_execution.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
Run it with: Run it with:
@ -1278,7 +1278,7 @@ if __name__ == "__main__":
mcp.run(transport="streamable-http") mcp.run(transport="streamable-http")
``` ```
_Full example: [examples/snippets/servers/streamable_config.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_config.py)_ _Full example: [examples/snippets/servers/streamable_config.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/streamable_config.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
You can mount multiple FastMCP servers in a Starlette application: You can mount multiple FastMCP servers in a Starlette application:
@ -1341,7 +1341,7 @@ app = Starlette(
# math_mcp.settings.streamable_http_path = "/" # math_mcp.settings.streamable_http_path = "/"
``` ```
_Full example: [examples/snippets/servers/streamable_starlette_mount.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_starlette_mount.py)_ _Full example: [examples/snippets/servers/streamable_starlette_mount.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/streamable_starlette_mount.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
For low level server with Streamable HTTP implementations, see: For low level server with Streamable HTTP implementations, see:
@ -1436,7 +1436,7 @@ app = Starlette(
) )
``` ```
_Full example: [examples/snippets/servers/streamable_http_basic_mounting.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_http_basic_mounting.py)_ _Full example: [examples/snippets/servers/streamable_http_basic_mounting.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/streamable_http_basic_mounting.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
##### Host-based routing ##### Host-based routing
@ -1483,7 +1483,7 @@ app = Starlette(
) )
``` ```
_Full example: [examples/snippets/servers/streamable_http_host_mounting.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_http_host_mounting.py)_ _Full example: [examples/snippets/servers/streamable_http_host_mounting.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/streamable_http_host_mounting.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
##### Multiple servers with path configuration ##### Multiple servers with path configuration
@ -1546,7 +1546,7 @@ app = Starlette(
) )
``` ```
_Full example: [examples/snippets/servers/streamable_http_multiple_servers.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_http_multiple_servers.py)_ _Full example: [examples/snippets/servers/streamable_http_multiple_servers.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/streamable_http_multiple_servers.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
##### Path configuration at initialization ##### Path configuration at initialization
@ -1588,7 +1588,7 @@ app = Starlette(
) )
``` ```
_Full example: [examples/snippets/servers/streamable_http_path_config.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_http_path_config.py)_ _Full example: [examples/snippets/servers/streamable_http_path_config.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/streamable_http_path_config.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
#### SSE servers #### SSE servers
@ -1769,7 +1769,7 @@ if __name__ == "__main__":
asyncio.run(run()) asyncio.run(run())
``` ```
_Full example: [examples/snippets/servers/lowlevel/lifespan.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lowlevel/lifespan.py)_ _Full example: [examples/snippets/servers/lowlevel/lifespan.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/lowlevel/lifespan.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
The lifespan API provides: The lifespan API provides:
@ -1848,7 +1848,7 @@ if __name__ == "__main__":
asyncio.run(run()) asyncio.run(run())
``` ```
_Full example: [examples/snippets/servers/lowlevel/basic.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lowlevel/basic.py)_ _Full example: [examples/snippets/servers/lowlevel/basic.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/lowlevel/basic.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
Caution: The `uv run mcp run` and `uv run mcp dev` tool doesn't support low-level server. Caution: The `uv run mcp run` and `uv run mcp dev` tool doesn't support low-level server.
@ -1944,7 +1944,7 @@ if __name__ == "__main__":
asyncio.run(run()) asyncio.run(run())
``` ```
_Full example: [examples/snippets/servers/lowlevel/structured_output.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lowlevel/structured_output.py)_ _Full example: [examples/snippets/servers/lowlevel/structured_output.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/lowlevel/structured_output.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
Tools can return data in four ways: Tools can return data in four ways:
@ -2029,7 +2029,7 @@ if __name__ == "__main__":
asyncio.run(run()) asyncio.run(run())
``` ```
_Full example: [examples/snippets/servers/lowlevel/direct_call_tool_result.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lowlevel/direct_call_tool_result.py)_ _Full example: [examples/snippets/servers/lowlevel/direct_call_tool_result.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/lowlevel/direct_call_tool_result.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
**Note:** When returning `CallToolResult`, you bypass the automatic content/structured conversion. You must construct the complete response yourself. **Note:** When returning `CallToolResult`, you bypass the automatic content/structured conversion. You must construct the complete response yourself.
@ -2082,7 +2082,7 @@ async def list_resources_paginated(request: types.ListResourcesRequest) -> types
return types.ListResourcesResult(resources=page_items, nextCursor=next_cursor) return types.ListResourcesResult(resources=page_items, nextCursor=next_cursor)
``` ```
_Full example: [examples/snippets/servers/pagination_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/pagination_example.py)_ _Full example: [examples/snippets/servers/pagination_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/servers/pagination_example.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
#### Client-side Consumption #### Client-side Consumption
@ -2132,7 +2132,7 @@ if __name__ == "__main__":
asyncio.run(list_all_resources()) asyncio.run(list_all_resources())
``` ```
_Full example: [examples/snippets/clients/pagination_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/pagination_client.py)_ _Full example: [examples/snippets/clients/pagination_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/clients/pagination_client.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
#### Key Points #### Key Points
@ -2235,7 +2235,7 @@ if __name__ == "__main__":
main() main()
``` ```
_Full example: [examples/snippets/clients/stdio_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/stdio_client.py)_ _Full example: [examples/snippets/clients/stdio_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/clients/stdio_client.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
Clients can also connect using [Streamable HTTP transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http): Clients can also connect using [Streamable HTTP transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http):
@ -2273,7 +2273,7 @@ if __name__ == "__main__":
asyncio.run(main()) asyncio.run(main())
``` ```
_Full example: [examples/snippets/clients/streamable_basic.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/streamable_basic.py)_ _Full example: [examples/snippets/clients/streamable_basic.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/clients/streamable_basic.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
### Client Display Utilities ### Client Display Utilities
@ -2351,7 +2351,7 @@ if __name__ == "__main__":
main() main()
``` ```
_Full example: [examples/snippets/clients/display_utilities.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/display_utilities.py)_ _Full example: [examples/snippets/clients/display_utilities.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/clients/display_utilities.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
The `get_display_name()` function implements the proper precedence rules for displaying names: The `get_display_name()` function implements the proper precedence rules for displaying names:
@ -2458,7 +2458,7 @@ if __name__ == "__main__":
run() run()
``` ```
_Full example: [examples/snippets/clients/oauth_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/oauth_client.py)_ _Full example: [examples/snippets/clients/oauth_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/v1.x/examples/snippets/clients/oauth_client.py)_
<!-- /snippet-source --> <!-- /snippet-source -->
For a complete working example, see [`examples/clients/simple-auth-client/`](examples/clients/simple-auth-client/). For a complete working example, see [`examples/clients/simple-auth-client/`](examples/clients/simple-auth-client/).