server.ts•1.78 kB
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js'
import pkg from '../package.json' with { type: 'json' }
import { getUserInfoHandler, getUserInfoTool } from './tools/example.tool.js'
import 'dot-env' // Add this line to load .env file
interface ServerOptions {
isDebug: boolean
}
export function startServer(options: ServerOptions) {
const { isDebug } = options
if (isDebug) {
console.error('DEBUG MODE ENABLED')
}
const server = new Server(
{
name: pkg.name,
version: pkg.version,
},
{
capabilities: {
tools: {},
},
},
)
server.setRequestHandler(ListToolsRequestSchema, async (request) => {
if (isDebug) {
console.error(
'Received ListToolsRequest:',
JSON.stringify(request, null, 2),
)
}
return {
tools: [getUserInfoTool],
}
})
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (isDebug) {
console.error(
'Received CallToolRequest:',
JSON.stringify(request, null, 2),
)
}
if (request.params.name === getUserInfoTool.name) {
return getUserInfoHandler(request.params.arguments)
}
return {
content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],
isError: true,
}
})
async function run() {
const transport = new StdioServerTransport()
await server.connect(transport)
console.error('MCP Server running on stdio')
}
run().catch((error) => {
console.error('Fatal error running server:', error)
process.exit(1)
})
}