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:
/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
uv sync --group dev
make dev
The local MCP endpoint will be available at:
http://127.0.0.1:1424/mcp
Run tests with:
make test
Defining Your MCP Server
Edit src/lsd_mcp_template/server.py and replace the example tool with your own tools:
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:
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:
export MCP_STATELESS_HTTP=true
When set, the custom route creates the FastMCP Streamable HTTP app in stateless mode.