GemSuite-MCP
by PV-Bhat
Verified
#!/usr/bin/env node
// Use CommonJS requires for better compatibility in Docker environments
const { Server } = require('@modelcontextprotocol/sdk/server');
const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio');
const { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError } = require('@modelcontextprotocol/sdk/types');
// Initialize server
const server = new Server(
{
name: 'gemsuite-mcp-server',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
}
);
// Define simple example tool
const TOOL_NAMES = {
TEST: 'test_tool'
};
// Set up tool handlers
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: TOOL_NAMES.TEST,
description: 'A simple test tool that demonstrates GemSuite MCP is working',
inputSchema: {
type: 'object',
properties: {
message: {
type: 'string',
description: 'A message to echo back'
}
},
required: ['message'],
},
}
],
}));
// Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => {
try {
if (request.params.name === TOOL_NAMES.TEST) {
const message = request.params.arguments?.message || 'No message provided';
return {
content: [
{
type: 'text',
text: `Echo: ${message}`
}
]
};
}
throw new McpError(
ErrorCode.MethodNotFound,
`Unknown tool: ${request.params.name}`
);
} catch (error) {
console.error(`Error in tool handler:`, error);
if (error instanceof McpError) {
throw error;
}
return {
content: [
{
type: 'text',
text: `Error: ${error.message || 'Unknown error'}`
}
],
isError: true
};
}
});
// Error handling
server.onerror = (error) => console.error('[MCP Error]', error);
process.on('SIGINT', async () => {
await server.close();
process.exit(0);
});
// Start server
async function run() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('GemSuite MCP simple server running on stdio');
}
run().catch(error => {
console.error('Fatal error starting server:', error);
process.exit(1);
});