@ttoss/http-server-mcp
v0.3.1
Published
Model Context Protocol (MCP) server integration for @ttoss/http-server
Readme
@ttoss/http-server-mcp
Model Context Protocol (MCP) server integration for @ttoss/http-server.
Installation
pnpm add @ttoss/http-server-mcpQuick Start
import { App, bodyParser, cors } from '@ttoss/http-server';
import {
createMcpRouter,
Server as McpServer,
z,
} from '@ttoss/http-server-mcp';
// Create MCP server
const mcpServer = new McpServer({
name: 'my-mcp-server',
version: '1.0.0',
});
// Register tools
mcpServer.registerTool(
'get-weather',
{
description: 'Get weather information for a location',
inputSchema: {
location: z.string().describe('City name'),
},
},
async ({ location }) => ({
content: [
{
type: 'text',
text: `Weather in ${location}: Sunny, 72°F`,
},
],
})
);
// Create HTTP server
const app = new App();
app.use(cors());
app.use(bodyParser());
// Mount MCP router
const mcpRouter = createMcpRouter(mcpServer);
app.use(mcpRouter.routes());
app.listen(3000, () => {
console.log('MCP server running on http://localhost:3000/mcp');
});API Reference
createMcpRouter(server, options?)
Creates a Koa router configured to handle MCP protocol requests.
Parameters:
server(McpServer) - MCP server instance with registered tools and resourcesoptions(McpRouterOptions) - Optional configurationpath(string) - HTTP path for MCP endpoint (default:'/mcp')sessionIdGenerator(() => string) - Session ID generator for stateful servers (default:undefinedfor stateless)
Returns: Router - Koa router instance
Examples
Basic Tool
import { Server as McpServer, z } from '@ttoss/http-server-mcp';
const server = new McpServer({
name: 'calculator',
version: '1.0.0',
});
server.registerTool(
'add',
{
description: 'Add two numbers',
inputSchema: {
a: z.number().describe('First number'),
b: z.number().describe('Second number'),
},
},
async ({ a, b }) => ({
content: [
{
type: 'text',
text: `${a} + ${b} = ${a + b}`,
},
],
})
);Multiple Tools
server.registerTool(
'multiply',
{
description: 'Multiply two numbers',
inputSchema: {
a: z.number(),
b: z.number(),
},
},
async ({ a, b }) => ({
content: [{ type: 'text', text: String(a * b) }],
})
);
server.registerTool(
'divide',
{
description: 'Divide two numbers',
inputSchema: {
a: z.number(),
b: z.number(),
},
},
async ({ a, b }) => {
if (b === 0) {
throw new Error('Division by zero');
}
return {
content: [{ type: 'text', text: String(a / b) }],
};
}
);Custom Path
const router = createMcpRouter(server, {
path: '/api/mcp',
});Resources
server.resource(
'config://app',
'Application configuration',
'application/json',
async () => ({
contents: [
{
uri: 'config://app',
mimeType: 'application/json',
text: JSON.stringify({ version: '1.0.0', env: 'production' }),
},
],
})
);With CORS and Multiple Endpoints
import { App, bodyParser, cors, Router } from '@ttoss/http-server';
import { createMcpRouter } from '@ttoss/http-server-mcp';
const app = new App();
app.use(cors());
app.use(bodyParser());
// Health check endpoint
const healthRouter = new Router();
healthRouter.get('/health', (ctx) => {
ctx.body = { status: 'ok' };
});
// MCP endpoint
const mcpRouter = createMcpRouter(mcpServer);
app.use(healthRouter.routes());
app.use(mcpRouter.routes());
app.listen(3000);Protocol Details
This package implements the Model Context Protocol over HTTP using JSON responses (no SSE streaming). It uses the StreamableHTTPServerTransport from the MCP SDK with enableJsonResponse: true and adapts Koa's context-based middleware to work with the MCP SDK's Node.js request/response expectations.
Supported HTTP methods:
POST /mcp- Send JSON-RPC requests/notificationsDELETE /mcp- Terminate session (optional)
Related Packages
- @ttoss/http-server - HTTP server foundation
- @modelcontextprotocol/sdk - MCP SDK
