mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-01-30 06:22:04 +00:00
96 lines
3.1 KiB
JavaScript
96 lines
3.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.MCPClient = void 0;
|
|
const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
|
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
|
|
const websocket_js_1 = require("@modelcontextprotocol/sdk/client/websocket.js");
|
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
class MCPClient {
|
|
constructor(config) {
|
|
this.connected = false;
|
|
this.config = config;
|
|
this.client = new index_js_1.Client({
|
|
name: 'n8n-mcp-client',
|
|
version: '1.0.0',
|
|
}, {
|
|
capabilities: {},
|
|
});
|
|
}
|
|
async connect() {
|
|
if (this.connected) {
|
|
return;
|
|
}
|
|
let transport;
|
|
switch (this.config.connectionType) {
|
|
case 'websocket':
|
|
const wsUrl = this.config.serverUrl.replace(/^http/, 'ws');
|
|
transport = new websocket_js_1.WebSocketClientTransport(new URL(wsUrl));
|
|
break;
|
|
case 'stdio':
|
|
const [command, ...args] = this.config.serverUrl.split(' ');
|
|
transport = new stdio_js_1.StdioClientTransport({
|
|
command,
|
|
args,
|
|
});
|
|
break;
|
|
default:
|
|
throw new Error(`HTTP transport is not yet supported for MCP clients`);
|
|
}
|
|
await this.client.connect(transport);
|
|
this.connected = true;
|
|
}
|
|
async disconnect() {
|
|
if (this.connected) {
|
|
await this.client.close();
|
|
this.connected = false;
|
|
}
|
|
}
|
|
async listTools() {
|
|
await this.ensureConnected();
|
|
return await this.client.request({ method: 'tools/list' }, types_js_1.ListToolsResultSchema);
|
|
}
|
|
async callTool(name, args) {
|
|
await this.ensureConnected();
|
|
return await this.client.request({
|
|
method: 'tools/call',
|
|
params: {
|
|
name,
|
|
arguments: args,
|
|
},
|
|
}, types_js_1.CallToolResultSchema);
|
|
}
|
|
async listResources() {
|
|
await this.ensureConnected();
|
|
return await this.client.request({ method: 'resources/list' }, types_js_1.ListResourcesResultSchema);
|
|
}
|
|
async readResource(uri) {
|
|
await this.ensureConnected();
|
|
return await this.client.request({
|
|
method: 'resources/read',
|
|
params: {
|
|
uri,
|
|
},
|
|
}, types_js_1.ReadResourceResultSchema);
|
|
}
|
|
async listPrompts() {
|
|
await this.ensureConnected();
|
|
return await this.client.request({ method: 'prompts/list' }, types_js_1.ListPromptsResultSchema);
|
|
}
|
|
async getPrompt(name, args) {
|
|
await this.ensureConnected();
|
|
return await this.client.request({
|
|
method: 'prompts/get',
|
|
params: {
|
|
name,
|
|
arguments: args,
|
|
},
|
|
}, types_js_1.GetPromptResultSchema);
|
|
}
|
|
async ensureConnected() {
|
|
if (!this.connected) {
|
|
await this.connect();
|
|
}
|
|
}
|
|
}
|
|
exports.MCPClient = MCPClient;
|
|
//# sourceMappingURL=mcp-client.js.map
|