@cogitator-ai/mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/adapter/tool-adapter.d.ts +85 -0
- package/dist/adapter/tool-adapter.d.ts.map +1 -0
- package/dist/adapter/tool-adapter.js +239 -0
- package/dist/adapter/tool-adapter.js.map +1 -0
- package/dist/client/mcp-client.d.ts +117 -0
- package/dist/client/mcp-client.d.ts.map +1 -0
- package/dist/client/mcp-client.js +276 -0
- package/dist/client/mcp-client.js.map +1 -0
- package/dist/client/transports.d.ts +46 -0
- package/dist/client/transports.d.ts.map +1 -0
- package/dist/client/transports.js +49 -0
- package/dist/client/transports.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +94 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +250 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/types.d.ts +111 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client
|
|
3
|
+
*
|
|
4
|
+
* Connects to external MCP servers and provides access to their tools,
|
|
5
|
+
* resources, and prompts.
|
|
6
|
+
*/
|
|
7
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
8
|
+
import { createStdioTransport, createHttpTransport } from './transports';
|
|
9
|
+
import { mcpToCogitator } from '../adapter/tool-adapter';
|
|
10
|
+
/**
|
|
11
|
+
* MCP Client for connecting to external MCP servers
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Connect to a filesystem MCP server
|
|
16
|
+
* const client = await MCPClient.connect({
|
|
17
|
+
* transport: 'stdio',
|
|
18
|
+
* command: 'npx',
|
|
19
|
+
* args: ['-y', '@anthropic/mcp-server-filesystem', '/allowed/path'],
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Get available tools as Cogitator tools
|
|
23
|
+
* const tools = await client.getTools();
|
|
24
|
+
*
|
|
25
|
+
* // Use them with an agent
|
|
26
|
+
* const agent = new Agent({
|
|
27
|
+
* tools: [...tools],
|
|
28
|
+
* ...
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* // Don't forget to disconnect
|
|
32
|
+
* await client.close();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class MCPClient {
|
|
36
|
+
client;
|
|
37
|
+
transport;
|
|
38
|
+
connected = false;
|
|
39
|
+
serverCapabilities = {};
|
|
40
|
+
constructor(client, transport) {
|
|
41
|
+
this.client = client;
|
|
42
|
+
this.transport = transport;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Connect to an MCP server
|
|
46
|
+
*/
|
|
47
|
+
static async connect(config) {
|
|
48
|
+
const client = new Client({
|
|
49
|
+
name: config.clientName ?? 'cogitator-mcp-client',
|
|
50
|
+
version: config.clientVersion ?? '1.0.0',
|
|
51
|
+
});
|
|
52
|
+
const transport = MCPClient.createTransport(config);
|
|
53
|
+
const mcpClient = new MCPClient(client, transport);
|
|
54
|
+
await mcpClient.initialize(config.timeout);
|
|
55
|
+
return mcpClient;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create transport based on configuration
|
|
59
|
+
*/
|
|
60
|
+
static createTransport(config) {
|
|
61
|
+
switch (config.transport) {
|
|
62
|
+
case 'stdio':
|
|
63
|
+
if (!config.command) {
|
|
64
|
+
throw new Error('Command is required for stdio transport');
|
|
65
|
+
}
|
|
66
|
+
return createStdioTransport({
|
|
67
|
+
command: config.command,
|
|
68
|
+
args: config.args,
|
|
69
|
+
env: config.env,
|
|
70
|
+
});
|
|
71
|
+
case 'http':
|
|
72
|
+
case 'sse':
|
|
73
|
+
if (!config.url) {
|
|
74
|
+
throw new Error('URL is required for HTTP transport');
|
|
75
|
+
}
|
|
76
|
+
return createHttpTransport({
|
|
77
|
+
url: config.url,
|
|
78
|
+
});
|
|
79
|
+
default:
|
|
80
|
+
throw new Error(`Unknown transport type: ${config.transport}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Initialize connection and capabilities
|
|
85
|
+
*/
|
|
86
|
+
async initialize(timeout) {
|
|
87
|
+
const timeoutPromise = timeout
|
|
88
|
+
? new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), timeout))
|
|
89
|
+
: null;
|
|
90
|
+
const connectPromise = this.client.connect(this.transport);
|
|
91
|
+
if (timeoutPromise) {
|
|
92
|
+
await Promise.race([connectPromise, timeoutPromise]);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
await connectPromise;
|
|
96
|
+
}
|
|
97
|
+
this.connected = true;
|
|
98
|
+
const serverInfo = this.client.getServerCapabilities();
|
|
99
|
+
this.serverCapabilities = {
|
|
100
|
+
tools: !!serverInfo?.tools,
|
|
101
|
+
resources: !!serverInfo?.resources,
|
|
102
|
+
prompts: !!serverInfo?.prompts,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if connected to server
|
|
107
|
+
*/
|
|
108
|
+
isConnected() {
|
|
109
|
+
return this.connected;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get server capabilities
|
|
113
|
+
*/
|
|
114
|
+
getCapabilities() {
|
|
115
|
+
return { ...this.serverCapabilities };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* List available tools from the MCP server
|
|
119
|
+
*/
|
|
120
|
+
async listToolDefinitions() {
|
|
121
|
+
if (!this.serverCapabilities.tools) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const result = await this.client.listTools();
|
|
125
|
+
return result.tools.map((tool) => ({
|
|
126
|
+
name: tool.name,
|
|
127
|
+
description: tool.description ?? '',
|
|
128
|
+
inputSchema: tool.inputSchema,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get MCP tools as Cogitator Tool instances
|
|
133
|
+
*
|
|
134
|
+
* These tools can be directly used with Cogitator agents.
|
|
135
|
+
*/
|
|
136
|
+
async getTools() {
|
|
137
|
+
const definitions = await this.listToolDefinitions();
|
|
138
|
+
return definitions.map((def) => mcpToCogitator(def, this));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Call a tool on the MCP server
|
|
142
|
+
*/
|
|
143
|
+
async callTool(name, args) {
|
|
144
|
+
const result = await this.client.callTool({
|
|
145
|
+
name,
|
|
146
|
+
arguments: args,
|
|
147
|
+
});
|
|
148
|
+
const content = result.content;
|
|
149
|
+
if (content && Array.isArray(content) && content.length > 0) {
|
|
150
|
+
const firstContent = content[0];
|
|
151
|
+
if (firstContent.type === 'text') {
|
|
152
|
+
try {
|
|
153
|
+
return JSON.parse(firstContent.text);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return firstContent.text;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return firstContent;
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* List available resources from the MCP server
|
|
165
|
+
*/
|
|
166
|
+
async listResources() {
|
|
167
|
+
if (!this.serverCapabilities.resources) {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
const result = await this.client.listResources();
|
|
171
|
+
return result.resources.map((resource) => ({
|
|
172
|
+
uri: resource.uri,
|
|
173
|
+
name: resource.name,
|
|
174
|
+
description: resource.description,
|
|
175
|
+
mimeType: resource.mimeType,
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Read a resource from the MCP server
|
|
180
|
+
*/
|
|
181
|
+
async readResource(uri) {
|
|
182
|
+
const result = await this.client.readResource({ uri });
|
|
183
|
+
if (result.contents && result.contents.length > 0) {
|
|
184
|
+
const content = result.contents[0];
|
|
185
|
+
return {
|
|
186
|
+
uri: content.uri,
|
|
187
|
+
mimeType: content.mimeType,
|
|
188
|
+
text: 'text' in content ? content.text : undefined,
|
|
189
|
+
blob: 'blob' in content ? content.blob : undefined,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return { uri };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* List available prompts from the MCP server
|
|
196
|
+
*/
|
|
197
|
+
async listPrompts() {
|
|
198
|
+
if (!this.serverCapabilities.prompts) {
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
const result = await this.client.listPrompts();
|
|
202
|
+
return result.prompts.map((prompt) => ({
|
|
203
|
+
name: prompt.name,
|
|
204
|
+
description: prompt.description,
|
|
205
|
+
arguments: prompt.arguments?.map((arg) => ({
|
|
206
|
+
name: arg.name,
|
|
207
|
+
description: arg.description,
|
|
208
|
+
required: arg.required,
|
|
209
|
+
})),
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get a prompt from the MCP server
|
|
214
|
+
*/
|
|
215
|
+
async getPrompt(name, args) {
|
|
216
|
+
const result = await this.client.getPrompt({
|
|
217
|
+
name,
|
|
218
|
+
arguments: args,
|
|
219
|
+
});
|
|
220
|
+
return result.messages.map((msg) => {
|
|
221
|
+
const content = msg.content;
|
|
222
|
+
return {
|
|
223
|
+
role: msg.role,
|
|
224
|
+
content: {
|
|
225
|
+
type: content.type,
|
|
226
|
+
text: content.type === 'text' ? content.text : undefined,
|
|
227
|
+
data: content.type === 'image' ? content.data : undefined,
|
|
228
|
+
mimeType: content.type === 'image' ? content.mimeType : undefined,
|
|
229
|
+
resource: content.type === 'resource'
|
|
230
|
+
? {
|
|
231
|
+
uri: content.resource.uri,
|
|
232
|
+
text: 'text' in content.resource ? content.resource.text : undefined,
|
|
233
|
+
blob: 'blob' in content.resource ? content.resource.blob : undefined,
|
|
234
|
+
}
|
|
235
|
+
: undefined,
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Close the connection to the MCP server
|
|
242
|
+
*/
|
|
243
|
+
async close() {
|
|
244
|
+
if (this.connected) {
|
|
245
|
+
await this.client.close();
|
|
246
|
+
this.connected = false;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Helper function to connect to an MCP server and get tools in one step
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```typescript
|
|
255
|
+
* const { tools, cleanup } = await connectMCPServer({
|
|
256
|
+
* transport: 'stdio',
|
|
257
|
+
* command: 'npx',
|
|
258
|
+
* args: ['-y', '@anthropic/mcp-server-filesystem', '/path'],
|
|
259
|
+
* });
|
|
260
|
+
*
|
|
261
|
+
* const agent = new Agent({ tools });
|
|
262
|
+
*
|
|
263
|
+
* // When done
|
|
264
|
+
* await cleanup();
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
export async function connectMCPServer(config) {
|
|
268
|
+
const client = await MCPClient.connect(config);
|
|
269
|
+
const tools = await client.getTools();
|
|
270
|
+
return {
|
|
271
|
+
client,
|
|
272
|
+
tools,
|
|
273
|
+
cleanup: () => client.close(),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/client/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AASzE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,SAAS;IACZ,MAAM,CAAS;IACf,SAAS,CAAY;IACrB,SAAS,GAAG,KAAK,CAAC;IAClB,kBAAkB,GAItB,EAAE,CAAC;IAEP,YAAoB,MAAc,EAAE,SAAoB;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAuB;QAC1C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,sBAAsB;YACjD,OAAO,EAAE,MAAM,CAAC,aAAa,IAAI,OAAO;SACzC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEnD,MAAM,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAAC,MAAuB;QACpD,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC;YACzB,KAAK,OAAO;gBACV,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO,oBAAoB,CAAC;oBAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;iBAChB,CAAC,CAAC;YAEL,KAAK,MAAM,CAAC;YACZ,KAAK,KAAK;gBACR,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO,mBAAmB,CAAC;oBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;iBAChB,CAAC,CAAC;YAEL;gBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,OAAgB;QACvC,MAAM,cAAc,GAAG,OAAO;YAC5B,CAAC,CAAC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,CACnE;YACH,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACvD,IAAI,CAAC,kBAAkB,GAAG;YACxB,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK;YAC1B,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS;YAClC,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO;SAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAE7C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,WAAW,EAAE,IAAI,CAAC,WAA+C;SAClE,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACrD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA6B;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACxC,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,YAAY,CAAC,IAAI,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAEjD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACzC,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAEvD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO;gBACL,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAClD,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aACnD,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAE/C,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,IAA6B;QAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACzC,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO,CAAC,IAAqC;oBACnD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;oBACxD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;oBACzD,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBACjE,QAAQ,EACN,OAAO,CAAC,IAAI,KAAK,UAAU;wBACzB,CAAC,CAAC;4BACE,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;4BACzB,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;4BACpE,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;yBACrE;wBACH,CAAC,CAAC,SAAS;iBAChB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAuB;IAK5D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IAEtC,OAAO;QACL,MAAM;QACN,KAAK;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Transport Wrappers
|
|
3
|
+
*
|
|
4
|
+
* Provides factory functions for creating MCP transports.
|
|
5
|
+
*/
|
|
6
|
+
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
7
|
+
export interface StdioTransportConfig {
|
|
8
|
+
/** Command to execute */
|
|
9
|
+
command: string;
|
|
10
|
+
/** Command arguments */
|
|
11
|
+
args?: string[];
|
|
12
|
+
/** Environment variables */
|
|
13
|
+
env?: Record<string, string>;
|
|
14
|
+
/** Working directory */
|
|
15
|
+
cwd?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface HttpTransportConfig {
|
|
18
|
+
/** Server URL */
|
|
19
|
+
url: string;
|
|
20
|
+
/** Custom headers */
|
|
21
|
+
headers?: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a stdio transport for connecting to a local MCP server process
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const transport = createStdioTransport({
|
|
29
|
+
* command: 'npx',
|
|
30
|
+
* args: ['-y', '@anthropic/mcp-server-filesystem', '/path/to/allowed/dir'],
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function createStdioTransport(config: StdioTransportConfig): Transport;
|
|
35
|
+
/**
|
|
36
|
+
* Create an HTTP transport for connecting to a remote MCP server
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const transport = createHttpTransport({
|
|
41
|
+
* url: 'http://localhost:3000/mcp',
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function createHttpTransport(config: HttpTransportConfig): Transport;
|
|
46
|
+
//# sourceMappingURL=transports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../../src/client/transports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACnC,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IAEZ,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAiB5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAE1E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Transport Wrappers
|
|
3
|
+
*
|
|
4
|
+
* Provides factory functions for creating MCP transports.
|
|
5
|
+
*/
|
|
6
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
7
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create a stdio transport for connecting to a local MCP server process
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const transport = createStdioTransport({
|
|
14
|
+
* command: 'npx',
|
|
15
|
+
* args: ['-y', '@anthropic/mcp-server-filesystem', '/path/to/allowed/dir'],
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function createStdioTransport(config) {
|
|
20
|
+
let env;
|
|
21
|
+
if (config.env) {
|
|
22
|
+
env = { ...config.env };
|
|
23
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
24
|
+
if (value !== undefined && !(key in env)) {
|
|
25
|
+
env[key] = value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return new StdioClientTransport({
|
|
30
|
+
command: config.command,
|
|
31
|
+
args: config.args,
|
|
32
|
+
env,
|
|
33
|
+
cwd: config.cwd,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create an HTTP transport for connecting to a remote MCP server
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const transport = createHttpTransport({
|
|
42
|
+
* url: 'http://localhost:3000/mcp',
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function createHttpTransport(config) {
|
|
47
|
+
return new StreamableHTTPClientTransport(new URL(config.url));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=transports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transports.js","sourceRoot":"","sources":["../../src/client/transports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAyBnG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,IAAI,GAAuC,CAAC;IAC5C,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,oBAAoB,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG;QACH,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAC7D,OAAO,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/mcp - MCP (Model Context Protocol) Integration
|
|
3
|
+
*
|
|
4
|
+
* This package provides full MCP support for Cogitator:
|
|
5
|
+
* - MCPClient: Connect to external MCP servers and use their tools
|
|
6
|
+
* - MCPServer: Expose Cogitator tools as an MCP server
|
|
7
|
+
* - Tool Adapter: Convert between Cogitator and MCP tool formats
|
|
8
|
+
*/
|
|
9
|
+
export { MCPClient } from './client/mcp-client';
|
|
10
|
+
export { createStdioTransport, createHttpTransport } from './client/transports';
|
|
11
|
+
export { MCPServer } from './server/mcp-server';
|
|
12
|
+
export { cogitatorToMCP, mcpToCogitator, wrapMCPTools, zodToJsonSchema, jsonSchemaToZod, } from './adapter/tool-adapter';
|
|
13
|
+
export type { MCPClientConfig, MCPServerConfig, MCPTransportType, MCPResource, MCPResourceContent, MCPPrompt, MCPPromptArgument, MCPPromptMessage, MCPToolDefinition, MCPToolCallResult, MCPToolContent, ToolAdapterOptions, ConvertedTools, } from './types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/mcp - MCP (Model Context Protocol) Integration
|
|
3
|
+
*
|
|
4
|
+
* This package provides full MCP support for Cogitator:
|
|
5
|
+
* - MCPClient: Connect to external MCP servers and use their tools
|
|
6
|
+
* - MCPServer: Expose Cogitator tools as an MCP server
|
|
7
|
+
* - Tool Adapter: Convert between Cogitator and MCP tool formats
|
|
8
|
+
*/
|
|
9
|
+
export { MCPClient } from './client/mcp-client';
|
|
10
|
+
export { createStdioTransport, createHttpTransport } from './client/transports';
|
|
11
|
+
export { MCPServer } from './server/mcp-server';
|
|
12
|
+
export { cogitatorToMCP, mcpToCogitator, wrapMCPTools, zodToJsonSchema, jsonSchemaToZod, } from './adapter/tool-adapter';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Exposes Cogitator tools as an MCP server that can be used by
|
|
5
|
+
* other MCP clients (e.g., Claude Desktop, other AI assistants).
|
|
6
|
+
*/
|
|
7
|
+
import type { Tool } from '@cogitator-ai/types';
|
|
8
|
+
import type { MCPServerConfig } from '../types';
|
|
9
|
+
/**
|
|
10
|
+
* MCP Server for exposing Cogitator tools
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Create server with tools
|
|
15
|
+
* const server = new MCPServer({
|
|
16
|
+
* name: 'my-cogitator-server',
|
|
17
|
+
* version: '1.0.0',
|
|
18
|
+
* transport: 'stdio',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Register tools
|
|
22
|
+
* server.registerTool(calculatorTool);
|
|
23
|
+
* server.registerTool(fileReadTool);
|
|
24
|
+
* server.registerTools([searchTool, weatherTool]);
|
|
25
|
+
*
|
|
26
|
+
* // Start serving
|
|
27
|
+
* await server.start();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class MCPServer {
|
|
31
|
+
private server;
|
|
32
|
+
private config;
|
|
33
|
+
private tools;
|
|
34
|
+
private started;
|
|
35
|
+
constructor(config: MCPServerConfig);
|
|
36
|
+
/**
|
|
37
|
+
* Register a single Cogitator tool
|
|
38
|
+
*/
|
|
39
|
+
registerTool(tool: Tool): void;
|
|
40
|
+
/**
|
|
41
|
+
* Register multiple Cogitator tools
|
|
42
|
+
*/
|
|
43
|
+
registerTools(tools: Tool[]): void;
|
|
44
|
+
/**
|
|
45
|
+
* Unregister a tool by name
|
|
46
|
+
*/
|
|
47
|
+
unregisterTool(name: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get list of registered tool names
|
|
50
|
+
*/
|
|
51
|
+
getRegisteredTools(): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Register a tool with the MCP server
|
|
54
|
+
*/
|
|
55
|
+
private registerMCPTool;
|
|
56
|
+
/**
|
|
57
|
+
* Build the input schema for MCP tool registration
|
|
58
|
+
*/
|
|
59
|
+
private buildInputSchema;
|
|
60
|
+
/**
|
|
61
|
+
* Execute a tool and return MCP-formatted result
|
|
62
|
+
*/
|
|
63
|
+
private executeTool;
|
|
64
|
+
/**
|
|
65
|
+
* Start the MCP server
|
|
66
|
+
*/
|
|
67
|
+
start(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Start HTTP server for MCP
|
|
70
|
+
*/
|
|
71
|
+
private startHttpServer;
|
|
72
|
+
/**
|
|
73
|
+
* Stop the server
|
|
74
|
+
*/
|
|
75
|
+
stop(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Check if server is running
|
|
78
|
+
*/
|
|
79
|
+
isRunning(): boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create and start an MCP server with the given tools
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* await serveMCPTools([calculator, datetime], {
|
|
87
|
+
* name: 'my-tools',
|
|
88
|
+
* version: '1.0.0',
|
|
89
|
+
* transport: 'stdio',
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function serveMCPTools(tools: Tool[], config: MCPServerConfig): Promise<MCPServer>;
|
|
94
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAShD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,eAAe;IAQnC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAS9B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAMlC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;YACW,WAAW;IAsDzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B;;OAEG;YACW,eAAe;IAkD7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,SAAS,CAAC,CAKpB"}
|