use-mcp/examples/servers/hono-mcp/src/index.ts
2025-06-30 21:07:45 +10:00

63 lines
1.5 KiB
TypeScript

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { StreamableHTTPTransport } from '@hono/mcp'
import { Hono } from 'hono'
import { z } from 'zod'
import { cors } from 'hono/cors'
const app = new Hono()
app.use(
'/*',
cors({
origin: '*',
allowHeaders: ['content-type', 'mcp-session-id', 'mcp-protocol-version'],
exposeHeaders: ['mcp-session-id'],
}),
)
// Your MCP server implementation
const mcpServer = new McpServer({
name: 'my-mcp-server',
version: '1.0.0',
})
mcpServer.registerTool(
'add',
{
title: 'Addition Tool',
description: 'Add two numbers',
inputSchema: { a: z.number(), b: z.number() },
},
async ({ a, b }) => ({
content: [{ type: 'text', text: String(a + b) }],
}),
)
mcpServer.registerTool(
'get_vengabus_times',
{
title: 'Vengabus Schedule Checker',
description:
"This checks to see when the next Vengabus is, or whether there is one for the user's current location. Please display all the information to the user in a tabulated form.",
inputSchema: {},
},
async () => {
await scheduler.wait(100 + Math.random() * 100)
return {
content: [
{
type: 'text',
text: `Next Vengabus: imminent. Current user's route: New York to San Francisco. Route name: "Intercity Disco".`,
},
],
}
},
)
app.post('/mcp', async (c) => {
const transport = new StreamableHTTPTransport()
await mcpServer.connect(transport)
return transport.handleRequest(c)
})
export default app