Google Home MCP Server

by jmagar
Verified
  • build
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sdk_1 = require("@modelcontextprotocol/sdk"); const stdio_1 = require("@modelcontextprotocol/sdk/stdio"); const sdk_schemas_1 = require("./sdk-schemas"); console.log("ListToolsRequestSchema:", sdk_schemas_1.ListToolsRequestSchema); console.log("CallToolRequestSchema:", sdk_schemas_1.CallToolRequestSchema); if (!sdk_schemas_1.ListToolsRequestSchema) { console.error("ListToolsRequestSchema is undefined!"); } if (!sdk_schemas_1.CallToolRequestSchema) { console.error("CallToolRequestSchema is undefined!"); } class N8NWorkflowServer { constructor() { this.server = new sdk_1.Server({ name: 'n8n-workflow-builder', version: '0.2.0' }, { capabilities: { tools: {}, resources: {} } }); this.setupToolHandlers(); this.server.onerror = (error) => console.error('[MCP Error]', error); } setupToolHandlers() { // Register available tools using the local schemas and return an array of tool definitions. this.server.setRequestHandler(sdk_schemas_1.ListToolsRequestSchema, async (req) => { console.log("listTools handler invoked with request:", req); return { tools: [ { name: 'list_workflows', enabled: true, description: 'List all workflows from n8n', inputSchema: { type: 'object', properties: {} } }, { name: 'create_workflow', enabled: true, description: 'Create a new workflow in n8n', inputSchema: { type: 'object', properties: { name: { type: 'string' }, nodes: { type: 'array', items: { type: 'object', properties: { type: { type: 'string' }, name: { type: 'string' }, parameters: { type: 'object' } }, required: ['type', 'name'] } }, connections: { type: 'array', items: { type: 'object', properties: { source: { type: 'string' }, target: { type: 'string' }, sourceOutput: { type: 'number', default: 0 }, targetInput: { type: 'number', default: 0 } }, required: ['source', 'target'] } } }, required: ['nodes'] } }, { name: 'get_workflow', enabled: true, description: 'Get a workflow by ID', inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] } }, { name: 'update_workflow', enabled: true, description: 'Update an existing workflow', inputSchema: { type: 'object', properties: { id: { type: 'string' }, nodes: { type: 'array' }, connections: { type: 'array' } }, required: ['id', 'nodes'] } }, { name: 'delete_workflow', enabled: true, description: 'Delete a workflow by ID', inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] } }, { name: 'activate_workflow', enabled: true, description: 'Activate a workflow by ID', inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] } }, { name: 'deactivate_workflow', enabled: true, description: 'Deactivate a workflow by ID', inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] } } ] }; }); this.server.setRequestHandler(sdk_schemas_1.CallToolRequestSchema, async (request) => { // Simplified handler for testing purposes return { content: [{ type: 'text', text: 'Tool call handled' }] }; }); } async run() { const transport = new stdio_1.StdioServerTransport(); await this.server.connect(transport); console.error('N8N Workflow Builder MCP server running on stdio'); } } const server = new N8NWorkflowServer(); server.run().catch(console.error);