mcp-server.js•2.46 kB
#!/usr/bin/env node
/**
* MCP Server Implementation for Phys-MCP
*/
async function startMCPServer() {
try {
console.error('🔧 Loading MCP SDK...');
// Import MCP SDK components
const { Server } = await import('@modelcontextprotocol/sdk/server/index.js');
const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
const { ListToolsRequestSchema, CallToolRequestSchema } = await import('@modelcontextprotocol/sdk/types.js');
console.error('🔧 Creating MCP server instance...');
// Create a new MCP server instance
const server = new Server({
name: "phys-mcp",
version: "0.1.0",
description: "Physics MCP Server with CAS, Plot, and NLI capabilities"
});
// Set up request handlers
console.error('🔧 Setting up request handlers...');
// List available tools
server.setRequestHandler(ListToolsRequestSchema, async () => {
console.error('📋 Listing available tools...');
return {
tools: [
{
name: "ping",
description: "Simple ping-pong endpoint for testing",
parameters: {
type: "object",
properties: {
message: {
type: "string",
description: "Message to echo back"
}
}
}
}
]
};
});
// Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => {
console.error(`🛠️ Handling tool call: ${request.params.name}`);
if (request.params.name === 'ping') {
return { content: [{ type: 'text', text: request.params.parameters?.message || 'pong' }] };
}
throw new Error(`Unknown tool: ${request.params.name}`);
});
// Set up transport
console.error('🔌 Setting up stdio transport...');
const transport = new StdioServerTransport();
// Start the server
console.error('🚀 Starting MCP server...');
await server.connect(transport);
console.error('✅ MCP server is ready and listening for connections');
} catch (error) {
console.error('❌ Failed to start MCP server:');
console.error('Error details:', error.message);
if (error.stack) {
console.error('Stack trace:', error.stack);
}
process.exit(1);
}
}
// Start the server
startMCPServer();