Skip to content

Add streamable HTTP starlette example to Python SDK docs #1111

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -838,10 +838,35 @@ The streamable HTTP transport supports:

### Mounting to an Existing ASGI Server

> **Note**: SSE transport is being superseded by [Streamable HTTP transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http).

By default, SSE servers are mounted at `/sse` and Streamable HTTP servers are mounted at `/mcp`. You can customize these paths using the methods described below.

#### Streamable HTTP servers

The following example shows how to use `streamable_http_app()`, a method that returns a `Starlette` application object.
You can then append additional routes to that application as needed.

```
from starlette.routing import Route

mcp = FastMCP("My App")

app = mcp.streamable_http_app()
# Additional non-MCP routes can be added like so:
# app.router.routes.append(Route("/", endpoint=other_route_function))
```

To customize the route from the default of "/mcp", either specify the `streamable_http_path` option for the `FastMCP` constructor,
or set `FASTMCP_STREAMABLE_HTTP_PATH` environment variable.

Note that in Starlette and FastAPI (which is based on Starlette), the "/mcp" route will redirect to "/mcp/",
so you may need to use "/mcp/" when pointing MCP clients at your servers.

For more information on mounting applications in Starlette, see the [Starlette documentation](https://www.starlette.io/routing/#submounting-routes).

#### SSE servers

> **Note**: SSE transport is being superseded by [Streamable HTTP transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http).

You can mount the SSE server to an existing ASGI server using the `sse_app` method. This allows you to integrate the SSE server with other ASGI applications.

```python
Expand Down
Loading