Integrate Model Context Protocol servers with your Fastify app.
Supports the Streamable HTTP transport as well as the legacy HTTP+SSE transport.
First, define your MCP server.
function createServer() {
const mcpServer = new McpServer({
name: "...",
version: "...",
});
mcpServer.tool("...");
mcpServer.resource("...");
return mcpServer.server;
}Create a Fastify app and register the plugin.
import { fastify } from "fastify";
import { streamableHttp } from "fastify-mcp";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const app = fastify();
app.register(streamableHttp, {
// Set to `true` if you want a stateful server
stateful: false,
mcpEndpoint: "/mcp",
sessions: new Sessions<StreamableHTTPServerTransport>()
createServer,
});
app.listen({ port: 8080 });See the examples directory for more detailed examples.
# npm
npm install fastify-mcp
# yarn
yarn add fastify-mcpThe official MCP TypeScript SDK does not support managing multiple sessions out of the box, and therefore it's the host server's responsibility to do so.
This package uses an in-memory mapping of each active session against its session ID to manage multiple sessions, as recommended by the MCP SDK examples.
The Sessions class emits the following events:
connected: Emitted when a new session is added.terminated: Emitted when a session is removed.error: Emitted when an asynchronous event handler throws an error.
const sessions = new Sessions<StreamableHTTPServerTransport>();
sessions.on("connected", (sessionId) => {
console.log(`Session ${sessionId} connected`);
});
sessions.on("terminated", (sessionId) => {
console.log(`Session ${sessionId} terminated`);
});Please file an issue if you encounter a problem when using this package. Pull requests for new features or bug fixes are also welcome.