LSD MCP Template
by bracesproul
README.md
# LSD MCP Template
Template for exposing one or more FastMCP servers from a LangGraph Server custom HTTP route. It is set up for LangSmith Deployments and serves MCP over Streamable HTTP.
The default MCP endpoint is:
```text
/mcp
```
This template intentionally does not include custom auth. Add auth separately if your deployment needs it.
## What's Included
- Minimal LangGraph health graph so LangGraph Server boots normally.
- Custom Starlette app mounted through `langgraph.json`.
- Lazy MCP app construction so importing the graph server does not build your MCP server.
- Configurable MCP server registry in `src/lsd_mcp_template/mcp_config.py`.
- One example tool: `math_add(x: int, y: int)`.
## Local Development
```bash
uv sync --group dev
make dev
```
The local MCP endpoint will be available at:
```text
http://127.0.0.1:1424/mcp
```
Run tests with:
```bash
make test
```
## Defining Your MCP Server
Edit `src/lsd_mcp_template/server.py` and replace the example tool with your own tools:
```python
from fastmcp import FastMCP
def build_server() -> FastMCP:
mcp = FastMCP("My MCP Server")
@mcp.tool(name="my_tool")
def my_tool(value: str) -> str:
return value
return mcp
```
To expose multiple MCP servers, add more specs in `src/lsd_mcp_template/mcp_config.py`:
```python
MCP_SERVER_SPECS = (
MCPServerSpec(
name="default",
path="/mcp",
factory="lsd_mcp_template.server:build_server",
),
MCPServerSpec(
name="other",
path="/other-mcp",
factory="lsd_mcp_template.other_server:build_server",
),
)
```
Each factory must return a `fastmcp.FastMCP` instance.
## Deploy
Use this directory as the repository root for the LangSmith Deployment. The deployment entrypoints are already declared in `langgraph.json`:
- Graph: `./src/lsd_mcp_template/graph.py:graph`
- Custom HTTP app: `./src/lsd_mcp_template/webapp.py:app`
Set any environment variables your custom tools need in the deployment configuration. The example `math_add` tool does not require environment variables.
Optional:
```bash
export MCP_STATELESS_HTTP=true
```
When set, the custom route creates the FastMCP Streamable HTTP app in stateless mode.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues