@pegma/knowledge-base-mcp 0.0.0-stage → 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 -2
- package/dist/dispatcher.d.ts +7 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/dispatcher.js +155 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +75 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +14 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +28 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +17 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +313 -0
- package/dist/mcp.js.map +1 -0
- package/dist/schemas.d.ts +363 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +416 -0
- package/dist/schemas.js.map +1 -0
- package/dist/transport-common.d.ts +57 -0
- package/dist/transport-common.d.ts.map +1 -0
- package/dist/transport-common.js +411 -0
- package/dist/transport-common.js.map +1 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +45 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -4
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ToolSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { CfWorkerJsonSchemaValidator } from "@modelcontextprotocol/sdk/validation/cfworker";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { createKnowledgeAgentErrorResponse, mapKnowledgeAgentError, } from "./errors.js";
|
|
7
|
+
import { knowledgeAgentInputSchemas, snapshotKnowledgeAgentJson, } from "./schemas.js";
|
|
8
|
+
import { authorizeKnowledgeAgentRequest, knowledgeAgentJsonResponse, knowledgeAgentRequestMatches, knowledgeAgentTransportError, readKnowledgeAgentJsonRequest, secureKnowledgeAgentResponse, validateKnowledgeAgentTransportOptions, } from "./transport-common.js";
|
|
9
|
+
import { knowledgeAgentOperations, knowledgeAgentToolNames, } from "./types.js";
|
|
10
|
+
const requestId = z.union([
|
|
11
|
+
z.string().max(128),
|
|
12
|
+
z.number().int().min(Number.MIN_SAFE_INTEGER).max(Number.MAX_SAFE_INTEGER),
|
|
13
|
+
]);
|
|
14
|
+
const empty = z.object({}).strict();
|
|
15
|
+
const metadata = z.object({ progressToken: requestId.optional() }).strict();
|
|
16
|
+
const basicParams = z.object({ _meta: metadata.optional() }).strict();
|
|
17
|
+
const featureMap = z.record(z.string().max(128), z.record(z.string().max(128), z.unknown()));
|
|
18
|
+
// Client capabilities are descriptive, never an authorization source. Accept
|
|
19
|
+
// the pinned protocol vocabulary without enabling any corresponding server API.
|
|
20
|
+
const clientCapabilities = z
|
|
21
|
+
.object({
|
|
22
|
+
experimental: featureMap.optional(),
|
|
23
|
+
extensions: featureMap.optional(),
|
|
24
|
+
sampling: z
|
|
25
|
+
.object({ context: empty.optional(), tools: empty.optional() })
|
|
26
|
+
.strict()
|
|
27
|
+
.optional(),
|
|
28
|
+
elicitation: z
|
|
29
|
+
.object({
|
|
30
|
+
form: z
|
|
31
|
+
.object({ applyDefaults: z.boolean().optional() })
|
|
32
|
+
.strict()
|
|
33
|
+
.optional(),
|
|
34
|
+
url: empty.optional(),
|
|
35
|
+
})
|
|
36
|
+
.strict()
|
|
37
|
+
.optional(),
|
|
38
|
+
roots: z
|
|
39
|
+
.object({ listChanged: z.boolean().optional() })
|
|
40
|
+
.strict()
|
|
41
|
+
.optional(),
|
|
42
|
+
tasks: z
|
|
43
|
+
.object({
|
|
44
|
+
list: empty.optional(),
|
|
45
|
+
cancel: empty.optional(),
|
|
46
|
+
requests: z
|
|
47
|
+
.object({
|
|
48
|
+
sampling: z
|
|
49
|
+
.object({ createMessage: empty.optional() })
|
|
50
|
+
.strict()
|
|
51
|
+
.optional(),
|
|
52
|
+
elicitation: z
|
|
53
|
+
.object({ create: empty.optional() })
|
|
54
|
+
.strict()
|
|
55
|
+
.optional(),
|
|
56
|
+
})
|
|
57
|
+
.strict()
|
|
58
|
+
.optional(),
|
|
59
|
+
})
|
|
60
|
+
.strict()
|
|
61
|
+
.optional(),
|
|
62
|
+
})
|
|
63
|
+
.strict();
|
|
64
|
+
const clientInfo = z
|
|
65
|
+
.object({
|
|
66
|
+
name: z.string().min(1).max(256),
|
|
67
|
+
version: z.string().min(1).max(128),
|
|
68
|
+
title: z.string().max(256).optional(),
|
|
69
|
+
description: z.string().max(1_024).optional(),
|
|
70
|
+
websiteUrl: z.string().max(2_048).optional(),
|
|
71
|
+
icons: z
|
|
72
|
+
.array(z
|
|
73
|
+
.object({
|
|
74
|
+
src: z.string().max(2_048),
|
|
75
|
+
mimeType: z.string().max(128).optional(),
|
|
76
|
+
sizes: z.array(z.string().max(32)).max(16).optional(),
|
|
77
|
+
theme: z.enum(["light", "dark"]).optional(),
|
|
78
|
+
})
|
|
79
|
+
.strict())
|
|
80
|
+
.max(16)
|
|
81
|
+
.optional(),
|
|
82
|
+
})
|
|
83
|
+
.strict();
|
|
84
|
+
const base = { jsonrpc: z.literal("2.0"), id: requestId };
|
|
85
|
+
const rpcHeader = z
|
|
86
|
+
.object({
|
|
87
|
+
...base,
|
|
88
|
+
method: z.string().min(1).max(128),
|
|
89
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
90
|
+
})
|
|
91
|
+
.strict();
|
|
92
|
+
const methods = new Set([
|
|
93
|
+
"initialize",
|
|
94
|
+
"ping",
|
|
95
|
+
"tools/list",
|
|
96
|
+
"tools/call",
|
|
97
|
+
"notifications/initialized",
|
|
98
|
+
]);
|
|
99
|
+
const cancelledParams = basicParams.extend({
|
|
100
|
+
requestId,
|
|
101
|
+
reason: z.string().max(1_024).optional(),
|
|
102
|
+
});
|
|
103
|
+
// Idless envelopes use only SDK notification handlers, even for a tool method.
|
|
104
|
+
// Unknown notifications are ignored; cancellation is best-effort and stateless.
|
|
105
|
+
const rpcNotification = z
|
|
106
|
+
.object({
|
|
107
|
+
jsonrpc: z.literal("2.0"),
|
|
108
|
+
method: z.string().min(1).max(128),
|
|
109
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
110
|
+
})
|
|
111
|
+
.strict()
|
|
112
|
+
.refine((notification) => {
|
|
113
|
+
if (notification.method === "notifications/initialized")
|
|
114
|
+
return (notification.params === undefined ||
|
|
115
|
+
basicParams.safeParse(notification.params).success);
|
|
116
|
+
if (notification.method === "notifications/cancelled")
|
|
117
|
+
return cancelledParams.safeParse(notification.params).success;
|
|
118
|
+
return true;
|
|
119
|
+
});
|
|
120
|
+
const rpcRequest = z.union([
|
|
121
|
+
z
|
|
122
|
+
.object({
|
|
123
|
+
...base,
|
|
124
|
+
method: z.literal("initialize"),
|
|
125
|
+
params: basicParams.extend({
|
|
126
|
+
protocolVersion: z.string().min(1).max(64),
|
|
127
|
+
capabilities: clientCapabilities,
|
|
128
|
+
clientInfo,
|
|
129
|
+
}),
|
|
130
|
+
})
|
|
131
|
+
.strict(),
|
|
132
|
+
z
|
|
133
|
+
.object({
|
|
134
|
+
...base,
|
|
135
|
+
method: z.literal("ping"),
|
|
136
|
+
params: basicParams.optional(),
|
|
137
|
+
})
|
|
138
|
+
.strict(),
|
|
139
|
+
z
|
|
140
|
+
.object({
|
|
141
|
+
...base,
|
|
142
|
+
method: z.literal("tools/list"),
|
|
143
|
+
params: basicParams.optional(),
|
|
144
|
+
})
|
|
145
|
+
.strict(),
|
|
146
|
+
z
|
|
147
|
+
.object({
|
|
148
|
+
...base,
|
|
149
|
+
method: z.literal("tools/call"),
|
|
150
|
+
params: basicParams.extend({
|
|
151
|
+
name: z.string().min(1).max(256),
|
|
152
|
+
arguments: z.record(z.string(), z.unknown()).optional(),
|
|
153
|
+
}),
|
|
154
|
+
})
|
|
155
|
+
.strict(),
|
|
156
|
+
rpcNotification,
|
|
157
|
+
]);
|
|
158
|
+
const descriptions = {
|
|
159
|
+
getDraft: "Read an authorized knowledge draft.",
|
|
160
|
+
createDraft: "Create a knowledge draft using a replay-safe command identifier.",
|
|
161
|
+
updateDraft: "Update a knowledge draft at its expected application generation.",
|
|
162
|
+
getValidationRequirements: "Read current validation requirements for a draft.",
|
|
163
|
+
submitEvidence: "Submit evidence with a host-verifiable receipt for an exact revision.",
|
|
164
|
+
};
|
|
165
|
+
const tools = knowledgeAgentOperations.map((operation) => ToolSchema.parse({
|
|
166
|
+
name: knowledgeAgentToolNames[operation],
|
|
167
|
+
description: descriptions[operation],
|
|
168
|
+
inputSchema: z.toJSONSchema(knowledgeAgentInputSchemas[operation], {
|
|
169
|
+
unrepresentable: "any",
|
|
170
|
+
}),
|
|
171
|
+
annotations: {
|
|
172
|
+
readOnlyHint: operation === "getDraft" || operation === "getValidationRequirements",
|
|
173
|
+
destructiveHint: false,
|
|
174
|
+
openWorldHint: false,
|
|
175
|
+
},
|
|
176
|
+
}));
|
|
177
|
+
function operationForTool(name) {
|
|
178
|
+
return (knowledgeAgentOperations.find((operation) => knowledgeAgentToolNames[operation] === name) ?? null);
|
|
179
|
+
}
|
|
180
|
+
function toolResult(response) {
|
|
181
|
+
return {
|
|
182
|
+
content: [{ type: "text", text: JSON.stringify(response) }],
|
|
183
|
+
isError: "error" in response,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function protocolError(id, code = -32600) {
|
|
187
|
+
const message = code === -32601
|
|
188
|
+
? "MCP method is unavailable."
|
|
189
|
+
: code === -32603
|
|
190
|
+
? "MCP service is unavailable."
|
|
191
|
+
: code === -32000
|
|
192
|
+
? "MCP response exceeds capacity."
|
|
193
|
+
: "Invalid MCP request.";
|
|
194
|
+
return {
|
|
195
|
+
jsonrpc: "2.0",
|
|
196
|
+
id,
|
|
197
|
+
error: { code, message },
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Stateless, JSON-response Streamable HTTP. Every request resolves fresh host
|
|
202
|
+
* authority and owns a short-lived SDK server; no session or credential is cached.
|
|
203
|
+
*/
|
|
204
|
+
export function createKnowledgeAgentMcp(options) {
|
|
205
|
+
const configuration = validateKnowledgeAgentTransportOptions(options, options.mcpUrl, "mcp");
|
|
206
|
+
const dispatcher = options.dispatcher;
|
|
207
|
+
// The logical response is identical to HTTP. JSON text inside JSON-RPC can
|
|
208
|
+
// double its escaping; bounded framing must not reject a complete valid guide.
|
|
209
|
+
const wireBudget = dispatcher.limits.maxResponseBytes * 2 + 4_096;
|
|
210
|
+
return Object.freeze({
|
|
211
|
+
async handle(request) {
|
|
212
|
+
if (!knowledgeAgentRequestMatches(request, configuration))
|
|
213
|
+
return null;
|
|
214
|
+
const identity = await authorizeKnowledgeAgentRequest(request, configuration);
|
|
215
|
+
if (identity instanceof Response)
|
|
216
|
+
return identity;
|
|
217
|
+
if (request.method !== "POST")
|
|
218
|
+
return knowledgeAgentTransportError("method_not_allowed", request, configuration);
|
|
219
|
+
const parsed = await readKnowledgeAgentJsonRequest(request, dispatcher.limits);
|
|
220
|
+
if (parsed instanceof Response)
|
|
221
|
+
return secureKnowledgeAgentResponse(parsed, request, configuration);
|
|
222
|
+
const json = (value, status) => knowledgeAgentJsonResponse(value, status, wireBudget, request, configuration);
|
|
223
|
+
let snapshot;
|
|
224
|
+
try {
|
|
225
|
+
snapshot = snapshotKnowledgeAgentJson(parsed.value, dispatcher.limits);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return knowledgeAgentTransportError(mapKnowledgeAgentError(error).code === "capacity"
|
|
229
|
+
? "capacity"
|
|
230
|
+
: "invalid_request", request, configuration);
|
|
231
|
+
}
|
|
232
|
+
const validated = rpcRequest.safeParse(snapshot);
|
|
233
|
+
if (!validated.success) {
|
|
234
|
+
const header = rpcHeader.safeParse(snapshot);
|
|
235
|
+
if (header.success && !methods.has(header.data.method))
|
|
236
|
+
return json(protocolError(header.data.id, -32601), 200);
|
|
237
|
+
return json(protocolError(header.success ? header.data.id : null), 400);
|
|
238
|
+
}
|
|
239
|
+
const rpc = validated.data;
|
|
240
|
+
const id = "id" in rpc ? rpc.id : null;
|
|
241
|
+
const transport = new WebStandardStreamableHTTPServerTransport({
|
|
242
|
+
enableJsonResponse: true,
|
|
243
|
+
// An omitted generator is the SDK's explicit stateless mode.
|
|
244
|
+
maxRequestBodySize: dispatcher.limits.maxRequestBytes,
|
|
245
|
+
});
|
|
246
|
+
const server = new Server({ name: "@pegma/knowledge-base-mcp", version: "0.1.0" }, {
|
|
247
|
+
capabilities: { tools: {} },
|
|
248
|
+
// Workers prohibit the runtime code generation used by SDK-default AJV.
|
|
249
|
+
jsonSchemaValidator: new CfWorkerJsonSchemaValidator(),
|
|
250
|
+
});
|
|
251
|
+
server.setRequestHandler(ListToolsRequestSchema, () => ({ tools }));
|
|
252
|
+
server.setRequestHandler(CallToolRequestSchema, async (call) => {
|
|
253
|
+
const operation = operationForTool(call.params.name);
|
|
254
|
+
if (operation === null)
|
|
255
|
+
return toolResult(createKnowledgeAgentErrorResponse("invalid_request"));
|
|
256
|
+
try {
|
|
257
|
+
return toolResult(await dispatcher.dispatch(identity, {
|
|
258
|
+
apiVersion: "1",
|
|
259
|
+
operation,
|
|
260
|
+
input: call.params.arguments,
|
|
261
|
+
}));
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
return toolResult(createKnowledgeAgentErrorResponse("unavailable", operation));
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
try {
|
|
268
|
+
await server.connect(transport);
|
|
269
|
+
// In the pinned SDK, JSON mode resolves only after the asynchronous
|
|
270
|
+
// request handler has sent its complete result. Buffer before close.
|
|
271
|
+
const response = await transport.handleRequest(request, {
|
|
272
|
+
parsedBody: rpc,
|
|
273
|
+
});
|
|
274
|
+
const bytes = await response.arrayBuffer();
|
|
275
|
+
if (bytes.byteLength > wireBudget) {
|
|
276
|
+
if ("id" in rpc && rpc.method === "tools/call")
|
|
277
|
+
return json({
|
|
278
|
+
jsonrpc: "2.0",
|
|
279
|
+
id,
|
|
280
|
+
result: toolResult(createKnowledgeAgentErrorResponse("capacity", operationForTool(rpc.params.name))),
|
|
281
|
+
}, 200);
|
|
282
|
+
return json(protocolError(id, -32000), 413);
|
|
283
|
+
}
|
|
284
|
+
if (response.status === 202)
|
|
285
|
+
return secureKnowledgeAgentResponse(new Response(null, { status: 202 }), request, configuration);
|
|
286
|
+
const value = JSON.parse(new TextDecoder().decode(bytes));
|
|
287
|
+
if (response.status !== 200 ||
|
|
288
|
+
(value !== null && typeof value === "object" && "error" in value))
|
|
289
|
+
return json(protocolError(id), response.status === 200 ? 200 : response.status);
|
|
290
|
+
return json(value, 200);
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return json(protocolError(id, -32603), 503);
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
// Server.close owns transport cleanup. Await it after the JSON body is
|
|
297
|
+
// complete, including for failures and initialized notifications.
|
|
298
|
+
try {
|
|
299
|
+
await server.close();
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
try {
|
|
303
|
+
await transport.close();
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// Cleanup failures never replace the bounded public response.
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|