gitx.do 0.0.1
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 +156 -0
- package/dist/durable-object/object-store.d.ts +113 -0
- package/dist/durable-object/object-store.d.ts.map +1 -0
- package/dist/durable-object/object-store.js +387 -0
- package/dist/durable-object/object-store.js.map +1 -0
- package/dist/durable-object/schema.d.ts +17 -0
- package/dist/durable-object/schema.d.ts.map +1 -0
- package/dist/durable-object/schema.js +43 -0
- package/dist/durable-object/schema.js.map +1 -0
- package/dist/durable-object/wal.d.ts +111 -0
- package/dist/durable-object/wal.d.ts.map +1 -0
- package/dist/durable-object/wal.js +200 -0
- package/dist/durable-object/wal.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/adapter.d.ts +231 -0
- package/dist/mcp/adapter.d.ts.map +1 -0
- package/dist/mcp/adapter.js +502 -0
- package/dist/mcp/adapter.js.map +1 -0
- package/dist/mcp/sandbox.d.ts +261 -0
- package/dist/mcp/sandbox.d.ts.map +1 -0
- package/dist/mcp/sandbox.js +983 -0
- package/dist/mcp/sandbox.js.map +1 -0
- package/dist/mcp/sdk-adapter.d.ts +413 -0
- package/dist/mcp/sdk-adapter.d.ts.map +1 -0
- package/dist/mcp/sdk-adapter.js +672 -0
- package/dist/mcp/sdk-adapter.js.map +1 -0
- package/dist/mcp/tools.d.ts +133 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +1604 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/ops/blame.d.ts +148 -0
- package/dist/ops/blame.d.ts.map +1 -0
- package/dist/ops/blame.js +754 -0
- package/dist/ops/blame.js.map +1 -0
- package/dist/ops/branch.d.ts +215 -0
- package/dist/ops/branch.d.ts.map +1 -0
- package/dist/ops/branch.js +608 -0
- package/dist/ops/branch.js.map +1 -0
- package/dist/ops/commit-traversal.d.ts +209 -0
- package/dist/ops/commit-traversal.d.ts.map +1 -0
- package/dist/ops/commit-traversal.js +755 -0
- package/dist/ops/commit-traversal.js.map +1 -0
- package/dist/ops/commit.d.ts +221 -0
- package/dist/ops/commit.d.ts.map +1 -0
- package/dist/ops/commit.js +606 -0
- package/dist/ops/commit.js.map +1 -0
- package/dist/ops/merge-base.d.ts +223 -0
- package/dist/ops/merge-base.d.ts.map +1 -0
- package/dist/ops/merge-base.js +581 -0
- package/dist/ops/merge-base.js.map +1 -0
- package/dist/ops/merge.d.ts +385 -0
- package/dist/ops/merge.d.ts.map +1 -0
- package/dist/ops/merge.js +1203 -0
- package/dist/ops/merge.js.map +1 -0
- package/dist/ops/tag.d.ts +182 -0
- package/dist/ops/tag.d.ts.map +1 -0
- package/dist/ops/tag.js +608 -0
- package/dist/ops/tag.js.map +1 -0
- package/dist/ops/tree-builder.d.ts +82 -0
- package/dist/ops/tree-builder.d.ts.map +1 -0
- package/dist/ops/tree-builder.js +246 -0
- package/dist/ops/tree-builder.js.map +1 -0
- package/dist/ops/tree-diff.d.ts +243 -0
- package/dist/ops/tree-diff.d.ts.map +1 -0
- package/dist/ops/tree-diff.js +657 -0
- package/dist/ops/tree-diff.js.map +1 -0
- package/dist/pack/delta.d.ts +68 -0
- package/dist/pack/delta.d.ts.map +1 -0
- package/dist/pack/delta.js +343 -0
- package/dist/pack/delta.js.map +1 -0
- package/dist/pack/format.d.ts +84 -0
- package/dist/pack/format.d.ts.map +1 -0
- package/dist/pack/format.js +261 -0
- package/dist/pack/format.js.map +1 -0
- package/dist/pack/full-generation.d.ts +327 -0
- package/dist/pack/full-generation.d.ts.map +1 -0
- package/dist/pack/full-generation.js +1159 -0
- package/dist/pack/full-generation.js.map +1 -0
- package/dist/pack/generation.d.ts +118 -0
- package/dist/pack/generation.d.ts.map +1 -0
- package/dist/pack/generation.js +459 -0
- package/dist/pack/generation.js.map +1 -0
- package/dist/pack/index.d.ts +181 -0
- package/dist/pack/index.d.ts.map +1 -0
- package/dist/pack/index.js +552 -0
- package/dist/pack/index.js.map +1 -0
- package/dist/refs/branch.d.ts +224 -0
- package/dist/refs/branch.d.ts.map +1 -0
- package/dist/refs/branch.js +170 -0
- package/dist/refs/branch.js.map +1 -0
- package/dist/refs/storage.d.ts +208 -0
- package/dist/refs/storage.d.ts.map +1 -0
- package/dist/refs/storage.js +421 -0
- package/dist/refs/storage.js.map +1 -0
- package/dist/refs/tag.d.ts +230 -0
- package/dist/refs/tag.d.ts.map +1 -0
- package/dist/refs/tag.js +188 -0
- package/dist/refs/tag.js.map +1 -0
- package/dist/storage/lru-cache.d.ts +188 -0
- package/dist/storage/lru-cache.d.ts.map +1 -0
- package/dist/storage/lru-cache.js +410 -0
- package/dist/storage/lru-cache.js.map +1 -0
- package/dist/storage/object-index.d.ts +140 -0
- package/dist/storage/object-index.d.ts.map +1 -0
- package/dist/storage/object-index.js +166 -0
- package/dist/storage/object-index.js.map +1 -0
- package/dist/storage/r2-pack.d.ts +394 -0
- package/dist/storage/r2-pack.d.ts.map +1 -0
- package/dist/storage/r2-pack.js +1062 -0
- package/dist/storage/r2-pack.js.map +1 -0
- package/dist/tiered/cdc-pipeline.d.ts +316 -0
- package/dist/tiered/cdc-pipeline.d.ts.map +1 -0
- package/dist/tiered/cdc-pipeline.js +771 -0
- package/dist/tiered/cdc-pipeline.js.map +1 -0
- package/dist/tiered/migration.d.ts +242 -0
- package/dist/tiered/migration.d.ts.map +1 -0
- package/dist/tiered/migration.js +592 -0
- package/dist/tiered/migration.js.map +1 -0
- package/dist/tiered/parquet-writer.d.ts +248 -0
- package/dist/tiered/parquet-writer.d.ts.map +1 -0
- package/dist/tiered/parquet-writer.js +555 -0
- package/dist/tiered/parquet-writer.js.map +1 -0
- package/dist/tiered/read-path.d.ts +141 -0
- package/dist/tiered/read-path.d.ts.map +1 -0
- package/dist/tiered/read-path.js +204 -0
- package/dist/tiered/read-path.js.map +1 -0
- package/dist/types/objects.d.ts +53 -0
- package/dist/types/objects.d.ts.map +1 -0
- package/dist/types/objects.js +291 -0
- package/dist/types/objects.js.map +1 -0
- package/dist/types/storage.d.ts +117 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +8 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/hash.d.ts +31 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +60 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/sha1.d.ts +26 -0
- package/dist/utils/sha1.d.ts.map +1 -0
- package/dist/utils/sha1.js +127 -0
- package/dist/utils/sha1.js.map +1 -0
- package/dist/wire/capabilities.d.ts +236 -0
- package/dist/wire/capabilities.d.ts.map +1 -0
- package/dist/wire/capabilities.js +437 -0
- package/dist/wire/capabilities.js.map +1 -0
- package/dist/wire/pkt-line.d.ts +67 -0
- package/dist/wire/pkt-line.d.ts.map +1 -0
- package/dist/wire/pkt-line.js +145 -0
- package/dist/wire/pkt-line.js.map +1 -0
- package/dist/wire/receive-pack.d.ts +302 -0
- package/dist/wire/receive-pack.d.ts.map +1 -0
- package/dist/wire/receive-pack.js +885 -0
- package/dist/wire/receive-pack.js.map +1 -0
- package/dist/wire/smart-http.d.ts +321 -0
- package/dist/wire/smart-http.d.ts.map +1 -0
- package/dist/wire/smart-http.js +654 -0
- package/dist/wire/smart-http.js.map +1 -0
- package/dist/wire/upload-pack.d.ts +333 -0
- package/dist/wire/upload-pack.d.ts.map +1 -0
- package/dist/wire/upload-pack.js +850 -0
- package/dist/wire/upload-pack.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) SDK Adapter
|
|
3
|
+
*
|
|
4
|
+
* This module provides an adapter that bridges the MCP protocol to git operations,
|
|
5
|
+
* handling request/response, tool registration/invocation, resource listing,
|
|
6
|
+
* and error handling.
|
|
7
|
+
*/
|
|
8
|
+
import { gitTools } from './tools';
|
|
9
|
+
/**
|
|
10
|
+
* JSON-RPC 2.0 error codes and MCP-specific error codes
|
|
11
|
+
*/
|
|
12
|
+
export var MCPErrorCode;
|
|
13
|
+
(function (MCPErrorCode) {
|
|
14
|
+
// JSON-RPC standard error codes
|
|
15
|
+
MCPErrorCode[MCPErrorCode["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
|
|
16
|
+
MCPErrorCode[MCPErrorCode["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
|
|
17
|
+
MCPErrorCode[MCPErrorCode["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
|
|
18
|
+
MCPErrorCode[MCPErrorCode["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
|
|
19
|
+
MCPErrorCode[MCPErrorCode["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
|
|
20
|
+
// MCP-specific error codes (must be < -32000 per JSON-RPC spec)
|
|
21
|
+
MCPErrorCode[MCPErrorCode["RESOURCE_NOT_FOUND"] = -32001] = "RESOURCE_NOT_FOUND";
|
|
22
|
+
// TOOL_NOT_FOUND maps to METHOD_NOT_FOUND as tools are essentially methods
|
|
23
|
+
MCPErrorCode[MCPErrorCode["TOOL_NOT_FOUND"] = -32601] = "TOOL_NOT_FOUND";
|
|
24
|
+
MCPErrorCode[MCPErrorCode["PROMPT_NOT_FOUND"] = -32003] = "PROMPT_NOT_FOUND";
|
|
25
|
+
MCPErrorCode[MCPErrorCode["CAPABILITY_NOT_SUPPORTED"] = -32004] = "CAPABILITY_NOT_SUPPORTED";
|
|
26
|
+
})(MCPErrorCode || (MCPErrorCode = {}));
|
|
27
|
+
/**
|
|
28
|
+
* Custom error class for MCP errors
|
|
29
|
+
*/
|
|
30
|
+
export class MCPError extends Error {
|
|
31
|
+
code;
|
|
32
|
+
data;
|
|
33
|
+
constructor(code, message, data) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.code = code;
|
|
36
|
+
this.data = data;
|
|
37
|
+
this.name = 'MCPError';
|
|
38
|
+
}
|
|
39
|
+
toJSON() {
|
|
40
|
+
const result = {
|
|
41
|
+
code: this.code,
|
|
42
|
+
message: this.message,
|
|
43
|
+
};
|
|
44
|
+
if (this.data !== undefined) {
|
|
45
|
+
result.data = this.data;
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* MCP Adapter class that bridges MCP protocol to git operations
|
|
52
|
+
*/
|
|
53
|
+
export class MCPAdapter {
|
|
54
|
+
config;
|
|
55
|
+
initialized = false;
|
|
56
|
+
tools = new Map();
|
|
57
|
+
resources = new Map();
|
|
58
|
+
prompts = new Map();
|
|
59
|
+
constructor(config) {
|
|
60
|
+
this.config = {
|
|
61
|
+
name: config?.name || 'gitx.do',
|
|
62
|
+
version: config?.version || '1.0.0',
|
|
63
|
+
capabilities: config?.capabilities || ['tools'],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the server configuration
|
|
68
|
+
*/
|
|
69
|
+
getConfig() {
|
|
70
|
+
return { ...this.config };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if adapter has a specific capability
|
|
74
|
+
*/
|
|
75
|
+
hasCapability(capability) {
|
|
76
|
+
return this.config.capabilities.includes(capability);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if the adapter is initialized
|
|
80
|
+
*/
|
|
81
|
+
isInitialized() {
|
|
82
|
+
return this.initialized;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Start the MCP adapter
|
|
86
|
+
*/
|
|
87
|
+
async start() {
|
|
88
|
+
if (this.initialized) {
|
|
89
|
+
throw new Error('MCP adapter is already initialized/started');
|
|
90
|
+
}
|
|
91
|
+
this.initialized = true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Stop the MCP adapter
|
|
95
|
+
*/
|
|
96
|
+
async stop() {
|
|
97
|
+
if (!this.initialized) {
|
|
98
|
+
throw new Error('MCP adapter is not initialized/not started');
|
|
99
|
+
}
|
|
100
|
+
this.initialized = false;
|
|
101
|
+
this.tools.clear();
|
|
102
|
+
this.resources.clear();
|
|
103
|
+
this.prompts.clear();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Register a tool
|
|
107
|
+
*/
|
|
108
|
+
registerTool(toolInfo) {
|
|
109
|
+
if (this.tools.has(toolInfo.name)) {
|
|
110
|
+
throw new Error(`Tool '${toolInfo.name}' is already registered (duplicate)`);
|
|
111
|
+
}
|
|
112
|
+
this.tools.set(toolInfo.name, toolInfo);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Unregister a tool by name
|
|
116
|
+
*/
|
|
117
|
+
unregisterTool(name) {
|
|
118
|
+
if (!this.tools.has(name)) {
|
|
119
|
+
throw new Error(`Tool '${name}' not found (does not exist)`);
|
|
120
|
+
}
|
|
121
|
+
this.tools.delete(name);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* List all registered tools (without handlers)
|
|
125
|
+
*/
|
|
126
|
+
listTools() {
|
|
127
|
+
const result = [];
|
|
128
|
+
for (const tool of this.tools.values()) {
|
|
129
|
+
result.push({
|
|
130
|
+
name: tool.name,
|
|
131
|
+
description: tool.description,
|
|
132
|
+
inputSchema: tool.inputSchema,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get a tool by name (without handler)
|
|
139
|
+
*/
|
|
140
|
+
getTool(name) {
|
|
141
|
+
const tool = this.tools.get(name);
|
|
142
|
+
if (!tool)
|
|
143
|
+
return undefined;
|
|
144
|
+
return {
|
|
145
|
+
name: tool.name,
|
|
146
|
+
description: tool.description,
|
|
147
|
+
inputSchema: tool.inputSchema,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Register all git tools
|
|
152
|
+
*/
|
|
153
|
+
registerGitTools() {
|
|
154
|
+
for (const tool of gitTools) {
|
|
155
|
+
if (!this.tools.has(tool.name)) {
|
|
156
|
+
this.registerTool({
|
|
157
|
+
name: tool.name,
|
|
158
|
+
description: tool.description,
|
|
159
|
+
inputSchema: tool.inputSchema,
|
|
160
|
+
handler: tool.handler,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Register a resource
|
|
167
|
+
*/
|
|
168
|
+
registerResource(resourceInfo) {
|
|
169
|
+
this.resources.set(resourceInfo.uri, resourceInfo);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Register a prompt
|
|
173
|
+
*/
|
|
174
|
+
registerPrompt(promptInfo) {
|
|
175
|
+
this.prompts.set(promptInfo.name, promptInfo);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Handle a raw JSON string request
|
|
179
|
+
*/
|
|
180
|
+
async handleRawRequest(rawRequest) {
|
|
181
|
+
let request;
|
|
182
|
+
try {
|
|
183
|
+
request = JSON.parse(rawRequest);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return {
|
|
187
|
+
jsonrpc: '2.0',
|
|
188
|
+
error: {
|
|
189
|
+
code: MCPErrorCode.PARSE_ERROR,
|
|
190
|
+
message: 'Parse error: Invalid JSON',
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const response = await this.handleRequest(request);
|
|
195
|
+
return response ?? {
|
|
196
|
+
jsonrpc: '2.0',
|
|
197
|
+
error: {
|
|
198
|
+
code: MCPErrorCode.INVALID_REQUEST,
|
|
199
|
+
message: 'Invalid Request: notification without id',
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Handle a batch of requests
|
|
205
|
+
*/
|
|
206
|
+
async handleBatchRequest(requests) {
|
|
207
|
+
const responses = [];
|
|
208
|
+
for (const request of requests) {
|
|
209
|
+
const response = await this.handleRequest(request);
|
|
210
|
+
// Only include responses for requests with id (not notifications)
|
|
211
|
+
if (response !== undefined) {
|
|
212
|
+
responses.push(response);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return responses;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Handle a single MCP request
|
|
219
|
+
*/
|
|
220
|
+
async handleRequest(request) {
|
|
221
|
+
// Handle notifications (no id) - they don't expect a response
|
|
222
|
+
if (request.id === undefined) {
|
|
223
|
+
// Process notification but don't return a response
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
// Validate jsonrpc version
|
|
227
|
+
if (request.jsonrpc !== '2.0') {
|
|
228
|
+
return this.errorResponse(request.id, MCPErrorCode.INVALID_REQUEST, 'Invalid Request: missing or invalid jsonrpc version');
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
// Route to appropriate handler based on method
|
|
232
|
+
switch (request.method) {
|
|
233
|
+
case 'initialize':
|
|
234
|
+
return this.handleInitialize(request);
|
|
235
|
+
case 'tools/list':
|
|
236
|
+
return this.handleToolsList(request);
|
|
237
|
+
case 'tools/call':
|
|
238
|
+
return this.handleToolsCall(request);
|
|
239
|
+
case 'resources/list':
|
|
240
|
+
return this.handleResourcesList(request);
|
|
241
|
+
case 'resources/read':
|
|
242
|
+
return this.handleResourcesRead(request);
|
|
243
|
+
case 'prompts/list':
|
|
244
|
+
return this.handlePromptsList(request);
|
|
245
|
+
case 'prompts/get':
|
|
246
|
+
return this.handlePromptsGet(request);
|
|
247
|
+
default:
|
|
248
|
+
return this.errorResponse(request.id, MCPErrorCode.METHOD_NOT_FOUND, `Method not found: ${request.method}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
if (error instanceof MCPError) {
|
|
253
|
+
return this.errorResponse(request.id, error.code, error.message, error.data);
|
|
254
|
+
}
|
|
255
|
+
return this.errorResponse(request.id, MCPErrorCode.INTERNAL_ERROR, error instanceof Error ? error.message : 'Internal error');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Handle initialize request
|
|
260
|
+
*/
|
|
261
|
+
handleInitialize(request) {
|
|
262
|
+
const params = request.params || {};
|
|
263
|
+
const protocolVersion = params.protocolVersion || '2024-11-05';
|
|
264
|
+
const capabilities = {};
|
|
265
|
+
if (this.hasCapability('tools')) {
|
|
266
|
+
capabilities.tools = {};
|
|
267
|
+
}
|
|
268
|
+
if (this.hasCapability('resources')) {
|
|
269
|
+
capabilities.resources = {};
|
|
270
|
+
}
|
|
271
|
+
if (this.hasCapability('prompts')) {
|
|
272
|
+
capabilities.prompts = {};
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
jsonrpc: '2.0',
|
|
276
|
+
id: request.id,
|
|
277
|
+
result: {
|
|
278
|
+
protocolVersion,
|
|
279
|
+
serverInfo: {
|
|
280
|
+
name: this.config.name,
|
|
281
|
+
version: this.config.version,
|
|
282
|
+
},
|
|
283
|
+
capabilities,
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Handle tools/list request
|
|
289
|
+
*/
|
|
290
|
+
handleToolsList(request) {
|
|
291
|
+
if (!this.hasCapability('tools')) {
|
|
292
|
+
return this.errorResponse(request.id, MCPErrorCode.CAPABILITY_NOT_SUPPORTED, 'Tools capability is not supported');
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
jsonrpc: '2.0',
|
|
296
|
+
id: request.id,
|
|
297
|
+
result: {
|
|
298
|
+
tools: this.listTools(),
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Handle tools/call request
|
|
304
|
+
*/
|
|
305
|
+
async handleToolsCall(request) {
|
|
306
|
+
if (!this.hasCapability('tools')) {
|
|
307
|
+
return this.errorResponse(request.id, MCPErrorCode.CAPABILITY_NOT_SUPPORTED, 'Tools capability is not supported');
|
|
308
|
+
}
|
|
309
|
+
const params = request.params || {};
|
|
310
|
+
const toolName = params.name;
|
|
311
|
+
const toolArgs = (params.arguments || {});
|
|
312
|
+
const tool = this.tools.get(toolName);
|
|
313
|
+
if (!tool) {
|
|
314
|
+
// Use TOOL_NOT_FOUND (which equals METHOD_NOT_FOUND) for non-existent tools
|
|
315
|
+
return this.errorResponse(request.id, MCPErrorCode.TOOL_NOT_FOUND, `Tool '${toolName}' not found (does not exist)`);
|
|
316
|
+
}
|
|
317
|
+
// Validate parameters
|
|
318
|
+
const validation = this.validateToolParams(tool, toolArgs);
|
|
319
|
+
if (!validation.valid) {
|
|
320
|
+
return this.errorResponse(request.id, MCPErrorCode.INVALID_PARAMS, validation.errors.join('; '));
|
|
321
|
+
}
|
|
322
|
+
// Execute tool
|
|
323
|
+
try {
|
|
324
|
+
const result = await tool.handler(toolArgs);
|
|
325
|
+
return {
|
|
326
|
+
jsonrpc: '2.0',
|
|
327
|
+
id: request.id,
|
|
328
|
+
result,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
// Tool execution errors are returned as successful responses with isError flag
|
|
333
|
+
return {
|
|
334
|
+
jsonrpc: '2.0',
|
|
335
|
+
id: request.id,
|
|
336
|
+
result: {
|
|
337
|
+
content: [
|
|
338
|
+
{
|
|
339
|
+
type: 'text',
|
|
340
|
+
text: error instanceof Error ? error.message : String(error),
|
|
341
|
+
},
|
|
342
|
+
],
|
|
343
|
+
isError: true,
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Validate tool parameters against schema
|
|
350
|
+
*/
|
|
351
|
+
validateToolParams(tool, params) {
|
|
352
|
+
const errors = [];
|
|
353
|
+
const schema = tool.inputSchema;
|
|
354
|
+
// Check required parameters
|
|
355
|
+
if (schema.required) {
|
|
356
|
+
for (const requiredParam of schema.required) {
|
|
357
|
+
if (!(requiredParam in params) || params[requiredParam] === undefined) {
|
|
358
|
+
errors.push(`Missing required parameter: ${requiredParam}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// Check parameter types and constraints
|
|
363
|
+
if (schema.properties) {
|
|
364
|
+
for (const [key, value] of Object.entries(params)) {
|
|
365
|
+
const propSchema = schema.properties[key];
|
|
366
|
+
if (!propSchema)
|
|
367
|
+
continue;
|
|
368
|
+
// Type validation
|
|
369
|
+
const expectedType = propSchema.type;
|
|
370
|
+
const valueType = Array.isArray(value) ? 'array' : typeof value;
|
|
371
|
+
if (expectedType && valueType !== expectedType) {
|
|
372
|
+
errors.push(`Parameter '${key}' has invalid type: expected ${expectedType}, got ${valueType}`);
|
|
373
|
+
}
|
|
374
|
+
// Pattern validation for strings
|
|
375
|
+
if (expectedType === 'string' &&
|
|
376
|
+
typeof value === 'string' &&
|
|
377
|
+
propSchema.pattern) {
|
|
378
|
+
const pattern = new RegExp(propSchema.pattern);
|
|
379
|
+
if (!pattern.test(value)) {
|
|
380
|
+
errors.push(`Parameter '${key}' does not match pattern: ${propSchema.pattern}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return { valid: errors.length === 0, errors };
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Handle resources/list request
|
|
389
|
+
*/
|
|
390
|
+
handleResourcesList(request) {
|
|
391
|
+
if (!this.hasCapability('resources')) {
|
|
392
|
+
return this.errorResponse(request.id, MCPErrorCode.CAPABILITY_NOT_SUPPORTED, 'Resources capability is not supported');
|
|
393
|
+
}
|
|
394
|
+
const resources = Array.from(this.resources.values()).map((r) => ({
|
|
395
|
+
uri: r.uri,
|
|
396
|
+
name: r.name,
|
|
397
|
+
mimeType: r.mimeType,
|
|
398
|
+
description: r.description,
|
|
399
|
+
}));
|
|
400
|
+
return {
|
|
401
|
+
jsonrpc: '2.0',
|
|
402
|
+
id: request.id,
|
|
403
|
+
result: { resources },
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Handle resources/read request
|
|
408
|
+
*/
|
|
409
|
+
async handleResourcesRead(request) {
|
|
410
|
+
if (!this.hasCapability('resources')) {
|
|
411
|
+
return this.errorResponse(request.id, MCPErrorCode.CAPABILITY_NOT_SUPPORTED, 'Resources capability is not supported');
|
|
412
|
+
}
|
|
413
|
+
const params = request.params || {};
|
|
414
|
+
const uri = params.uri;
|
|
415
|
+
const resource = this.resources.get(uri);
|
|
416
|
+
if (!resource) {
|
|
417
|
+
return this.errorResponse(request.id, MCPErrorCode.RESOURCE_NOT_FOUND, `Resource not found: ${uri}`);
|
|
418
|
+
}
|
|
419
|
+
let content = '';
|
|
420
|
+
if (resource.handler) {
|
|
421
|
+
const result = await resource.handler();
|
|
422
|
+
content = result.content;
|
|
423
|
+
}
|
|
424
|
+
return {
|
|
425
|
+
jsonrpc: '2.0',
|
|
426
|
+
id: request.id,
|
|
427
|
+
result: {
|
|
428
|
+
contents: [
|
|
429
|
+
{
|
|
430
|
+
uri: resource.uri,
|
|
431
|
+
mimeType: resource.mimeType,
|
|
432
|
+
text: content,
|
|
433
|
+
},
|
|
434
|
+
],
|
|
435
|
+
},
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Handle prompts/list request
|
|
440
|
+
*/
|
|
441
|
+
handlePromptsList(request) {
|
|
442
|
+
if (!this.hasCapability('prompts')) {
|
|
443
|
+
return this.errorResponse(request.id, MCPErrorCode.CAPABILITY_NOT_SUPPORTED, 'Prompts capability is not supported');
|
|
444
|
+
}
|
|
445
|
+
const prompts = Array.from(this.prompts.values()).map((p) => ({
|
|
446
|
+
name: p.name,
|
|
447
|
+
description: p.description,
|
|
448
|
+
arguments: p.arguments,
|
|
449
|
+
}));
|
|
450
|
+
return {
|
|
451
|
+
jsonrpc: '2.0',
|
|
452
|
+
id: request.id,
|
|
453
|
+
result: { prompts },
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Handle prompts/get request
|
|
458
|
+
*/
|
|
459
|
+
async handlePromptsGet(request) {
|
|
460
|
+
if (!this.hasCapability('prompts')) {
|
|
461
|
+
return this.errorResponse(request.id, MCPErrorCode.CAPABILITY_NOT_SUPPORTED, 'Prompts capability is not supported');
|
|
462
|
+
}
|
|
463
|
+
const params = request.params || {};
|
|
464
|
+
const name = params.name;
|
|
465
|
+
const args = (params.arguments || {});
|
|
466
|
+
const prompt = this.prompts.get(name);
|
|
467
|
+
if (!prompt) {
|
|
468
|
+
return this.errorResponse(request.id, MCPErrorCode.PROMPT_NOT_FOUND, `Prompt not found: ${name}`);
|
|
469
|
+
}
|
|
470
|
+
let messages = [];
|
|
471
|
+
if (prompt.handler) {
|
|
472
|
+
const result = await prompt.handler(args);
|
|
473
|
+
messages = result.messages;
|
|
474
|
+
}
|
|
475
|
+
return {
|
|
476
|
+
jsonrpc: '2.0',
|
|
477
|
+
id: request.id,
|
|
478
|
+
result: { messages },
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Create an error response
|
|
483
|
+
*/
|
|
484
|
+
errorResponse(id, code, message, data) {
|
|
485
|
+
const response = {
|
|
486
|
+
jsonrpc: '2.0',
|
|
487
|
+
id,
|
|
488
|
+
error: { code, message },
|
|
489
|
+
};
|
|
490
|
+
if (data !== undefined) {
|
|
491
|
+
response.error.data = data;
|
|
492
|
+
}
|
|
493
|
+
return response;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Factory function to create an MCP adapter
|
|
498
|
+
*/
|
|
499
|
+
export function createMCPAdapter(config) {
|
|
500
|
+
return new MCPAdapter(config);
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/mcp/adapter.ts"],"names":[],"mappings":"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"}
|