@superblocksteam/sdk-api 0.0.14 → 0.0.15-mcp.2

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.
Files changed (49) hide show
  1. package/README.md +1 -0
  2. package/dist/index.d.ts +3 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/integrations/base/request-body.d.ts +1 -0
  7. package/dist/integrations/base/request-body.d.ts.map +1 -1
  8. package/dist/integrations/base/request-body.js +4 -4
  9. package/dist/integrations/base/request-body.js.map +1 -1
  10. package/dist/integrations/declarations.d.ts +10 -0
  11. package/dist/integrations/declarations.d.ts.map +1 -1
  12. package/dist/integrations/declarations.js +9 -0
  13. package/dist/integrations/declarations.js.map +1 -1
  14. package/dist/integrations/index.d.ts +3 -1
  15. package/dist/integrations/index.d.ts.map +1 -1
  16. package/dist/integrations/index.js +2 -1
  17. package/dist/integrations/index.js.map +1 -1
  18. package/dist/integrations/mcpintegration/client.d.ts +71 -0
  19. package/dist/integrations/mcpintegration/client.d.ts.map +1 -0
  20. package/dist/integrations/mcpintegration/client.js +353 -0
  21. package/dist/integrations/mcpintegration/client.js.map +1 -0
  22. package/dist/integrations/mcpintegration/client.test.d.ts +17 -0
  23. package/dist/integrations/mcpintegration/client.test.d.ts.map +1 -0
  24. package/dist/integrations/mcpintegration/client.test.js +432 -0
  25. package/dist/integrations/mcpintegration/client.test.js.map +1 -0
  26. package/dist/integrations/mcpintegration/index.d.ts +8 -0
  27. package/dist/integrations/mcpintegration/index.d.ts.map +1 -0
  28. package/dist/integrations/mcpintegration/index.js +7 -0
  29. package/dist/integrations/mcpintegration/index.js.map +1 -0
  30. package/dist/integrations/mcpintegration/types.d.ts +164 -0
  31. package/dist/integrations/mcpintegration/types.d.ts.map +1 -0
  32. package/dist/integrations/mcpintegration/types.js +9 -0
  33. package/dist/integrations/mcpintegration/types.js.map +1 -0
  34. package/dist/integrations/registry.d.ts +1 -0
  35. package/dist/integrations/registry.d.ts.map +1 -1
  36. package/dist/integrations/registry.js +5 -0
  37. package/dist/integrations/registry.js.map +1 -1
  38. package/package.json +2 -2
  39. package/src/index.ts +12 -0
  40. package/src/integrations/base/request-body.ts +7 -4
  41. package/src/integrations/declarations.ts +16 -0
  42. package/src/integrations/index.ts +14 -0
  43. package/src/integrations/mcpintegration/README.md +149 -0
  44. package/src/integrations/mcpintegration/client.test.ts +588 -0
  45. package/src/integrations/mcpintegration/client.ts +544 -0
  46. package/src/integrations/mcpintegration/docs.manifest.json +5 -0
  47. package/src/integrations/mcpintegration/index.ts +16 -0
  48. package/src/integrations/mcpintegration/types.ts +185 -0
  49. package/src/integrations/registry.ts +6 -0
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Tests for McpClientImpl.
3
+ *
4
+ * Validates:
5
+ * - callTool() builds the MCP step request: a tools/call JSON-RPC request
6
+ * with a params object, a per-call id, optional headers as Property
7
+ * entries, and the label as trace metadata.
8
+ * - The session the plugin returns is sent back as headers on later calls
9
+ * and on later tools/list pages, and never reaches API code.
10
+ * - callTool() returns the CallToolResult without a schema, validates
11
+ * structuredContent or the first text block with one, and maps isError
12
+ * results to IntegrationError.
13
+ * - listTools() follows nextCursor, rejects malformed entries, and gives up
14
+ * on a repeated cursor or too many pages.
15
+ */
16
+ import { describe, it, expect, expectTypeOf, vi } from "vitest";
17
+ import { z } from "zod";
18
+ import { RestApiValidationError } from "../../errors.js";
19
+ import { IntegrationError } from "../../runtime/errors.js";
20
+ import { McpClientImpl, McpToolUnavailableError } from "./client.js";
21
+ const TEST_CONFIG = {
22
+ id: "mcpintegration-test-id",
23
+ name: "Test MCP",
24
+ pluginId: "mcpintegration",
25
+ configuration: {},
26
+ };
27
+ function createClient(...results) {
28
+ const executeQuery = vi.fn();
29
+ for (const result of results) {
30
+ executeQuery.mockResolvedValueOnce(result);
31
+ }
32
+ const client = new McpClientImpl(TEST_CONFIG, executeQuery);
33
+ return { client, executeQuery };
34
+ }
35
+ function textResult(text, extra = {}) {
36
+ return { content: [{ type: "text", text }], ...extra };
37
+ }
38
+ function toolsPage(names, nextCursor) {
39
+ return {
40
+ tools: names.map((name) => ({ name, inputSchema: { type: "object" } })),
41
+ ...(nextCursor ? { nextCursor } : {}),
42
+ };
43
+ }
44
+ const StepHeadersSchema = z
45
+ .object({
46
+ headers: z
47
+ .array(z.object({ key: z.string(), value: z.string() }))
48
+ .optional(),
49
+ })
50
+ .passthrough();
51
+ function headersOf(call) {
52
+ const { headers } = StepHeadersSchema.parse(call[0]);
53
+ return headers
54
+ ? Object.fromEntries(headers.map((h) => [h.key, h.value]))
55
+ : undefined;
56
+ }
57
+ function integrationError(error) {
58
+ if (!(error instanceof IntegrationError)) {
59
+ throw error;
60
+ }
61
+ return error;
62
+ }
63
+ describe("McpClientImpl", () => {
64
+ describe("callTool()", () => {
65
+ it("sends proxied tool arguments as cloneable data", async () => {
66
+ const { client, executeQuery } = createClient(textResult("ok"));
67
+ await client.callTool("echo", new Proxy({ message: "hi" }, {}));
68
+ const [request] = executeQuery.mock.calls[0];
69
+ expect(structuredClone(request).request.params.arguments).toEqual({
70
+ message: "hi",
71
+ });
72
+ });
73
+ it("rejects circular tool arguments with an IntegrationError", async () => {
74
+ const { client, executeQuery } = createClient();
75
+ const args = {};
76
+ args.self = args;
77
+ const error = await client
78
+ .callTool("echo", args)
79
+ .catch((e) => e);
80
+ expect(integrationError(error).details).toMatchObject({
81
+ cause: 'Tool "echo" arguments are not JSON-serializable: the arguments object contains a circular reference',
82
+ });
83
+ expect(executeQuery).not.toHaveBeenCalled();
84
+ });
85
+ it("builds a tools/call request with params, headers, and label", async () => {
86
+ const { client, executeQuery } = createClient(textResult("ok"), textResult("ok"));
87
+ await client.callTool("echo", { message: "hi" }, { label: "Echo it", headers: { "Mcp-Param-Org": "acme" } });
88
+ await client.callTool("echo");
89
+ const [firstRequest, firstBindings, firstMetadata] = executeQuery.mock.calls[0];
90
+ expect(firstRequest.request.method).toBe("tools/call");
91
+ expect(firstRequest.request.params).toEqual({
92
+ name: "echo",
93
+ arguments: { message: "hi" },
94
+ });
95
+ expect(firstRequest.headers).toEqual([
96
+ { key: "Mcp-Param-Org", value: "acme" },
97
+ ]);
98
+ expect(firstRequest.clientCapabilities).toBeUndefined();
99
+ expect(firstBindings).toBeUndefined();
100
+ expect(firstMetadata).toEqual({ label: "Echo it" });
101
+ const [secondRequest, , secondMetadata] = executeQuery.mock.calls[1];
102
+ expect(secondRequest.request.params).toEqual({
103
+ name: "echo",
104
+ arguments: {},
105
+ });
106
+ expect(secondRequest).not.toHaveProperty("headers");
107
+ expect(secondMetadata).toBeUndefined();
108
+ expect(secondRequest.request.id).not.toEqual(firstRequest.request.id);
109
+ });
110
+ it("types the return as T with a schema and CallToolResult without", () => {
111
+ // Wrapped in arrows so the overloads resolve at compile time without
112
+ // invoking callTool (an unawaited call would reject and leak).
113
+ const { client } = createClient();
114
+ const viaInterface = client;
115
+ const schema = z.object({ count: z.number() });
116
+ expectTypeOf(() => viaInterface.callTool("echo", {}, { schema })).returns.resolves.toEqualTypeOf();
117
+ expectTypeOf(() => viaInterface.callTool("echo")).returns.resolves.toEqualTypeOf();
118
+ expectTypeOf(() => client.callTool("echo", {}, { schema })).returns.resolves.toEqualTypeOf();
119
+ expectTypeOf(() => client.callTool("echo")).returns.resolves.toEqualTypeOf();
120
+ expectTypeOf(() => client.callTool("echo", {}, { label: "x" })).returns.resolves.toEqualTypeOf();
121
+ });
122
+ it("rejects a schema passed inside the tool arguments before sending", async () => {
123
+ const { client, executeQuery } = createClient();
124
+ await expect(client.callTool("echo", { schema: z.string() })).rejects.toBeInstanceOf(TypeError);
125
+ expect(executeQuery).not.toHaveBeenCalled();
126
+ });
127
+ it("returns the CallToolResult without a schema, minus the plugin's session fields", async () => {
128
+ const { client } = createClient(textResult('{"a":1}', {
129
+ structuredContent: { a: 1 },
130
+ _meta: { trace: "t1" },
131
+ resultType: "string",
132
+ sessionId: "s-1",
133
+ protocolVersion: "2025-06-18",
134
+ }));
135
+ const result = await client.callTool("echo", {});
136
+ expect(result).toEqual({
137
+ content: [{ type: "text", text: '{"a":1}' }],
138
+ structuredContent: { a: 1 },
139
+ _meta: { trace: "t1" },
140
+ resultType: "string",
141
+ });
142
+ expect(result).not.toHaveProperty("sessionId");
143
+ expect(result).not.toHaveProperty("protocolVersion");
144
+ });
145
+ it("sends the session the plugin returned back on later calls unless the caller sets one", async () => {
146
+ const { client, executeQuery } = createClient(textResult("one", { sessionId: "s-1", protocolVersion: "2025-06-18" }), textResult("two"), textResult("three"), textResult("four", { sessionId: "s-2" }), textResult("five"));
147
+ await client.callTool("a");
148
+ await client.callTool("b");
149
+ await client.callTool("c", {}, { headers: { "mcp-session-id": "mine" } });
150
+ await client.callTool("d");
151
+ await client.callTool("e");
152
+ expect(headersOf(executeQuery.mock.calls[0])).toBeUndefined();
153
+ expect(headersOf(executeQuery.mock.calls[1])).toEqual({
154
+ "Mcp-Session-Id": "s-1",
155
+ "MCP-Protocol-Version": "2025-06-18",
156
+ });
157
+ expect(headersOf(executeQuery.mock.calls[2])).toEqual({
158
+ "mcp-session-id": "mine",
159
+ });
160
+ expect(headersOf(executeQuery.mock.calls[4])).toEqual({
161
+ "Mcp-Session-Id": "s-2",
162
+ });
163
+ });
164
+ it("validates structuredContent over text when both are present", async () => {
165
+ const { client } = createClient(textResult('{"a":"text wins"}', { structuredContent: { a: "struct" } }));
166
+ const result = await client.callTool("echo", undefined, {
167
+ schema: z.object({ a: z.string() }),
168
+ });
169
+ expect(result).toEqual({ a: "struct" });
170
+ });
171
+ it("falls through to the text block when structuredContent is null", async () => {
172
+ const { client } = createClient(textResult('{"a":"from text"}', { structuredContent: null }));
173
+ const result = await client.callTool("echo", undefined, {
174
+ schema: z.object({ a: z.string() }),
175
+ });
176
+ expect(result).toEqual({ a: "from text" });
177
+ });
178
+ it("validates the first text block parsed as JSON when there is no structuredContent", async () => {
179
+ const { client } = createClient({
180
+ content: [
181
+ { type: "image", data: "...", mimeType: "image/png" },
182
+ { type: "text", text: '{"count":2}' },
183
+ { type: "text", text: '{"count":"ignored"}' },
184
+ ],
185
+ });
186
+ const result = await client.callTool("echo", undefined, {
187
+ schema: z.object({ count: z.number() }),
188
+ });
189
+ expect(result).toEqual({ count: 2 });
190
+ });
191
+ it("validates non-JSON text as a plain string", async () => {
192
+ const { client } = createClient(textResult("hello world"));
193
+ const result = await client.callTool("echo", undefined, {
194
+ schema: z.string(),
195
+ });
196
+ expect(result).toBe("hello world");
197
+ });
198
+ it("keeps JSON-looking text as a string when the schema wants a string", async () => {
199
+ const { client } = createClient(textResult("12345"), textResult("12345"));
200
+ const asString = await client.callTool("echo", undefined, {
201
+ schema: z.string(),
202
+ });
203
+ const asNumber = await client.callTool("echo", undefined, {
204
+ schema: z.number(),
205
+ });
206
+ expect(asString).toBe("12345");
207
+ expect(asNumber).toBe(12345);
208
+ });
209
+ it("throws RestApiValidationError when the result does not match the schema", async () => {
210
+ const { client } = createClient(textResult('{"count":"two"}'));
211
+ await expect(client.callTool("echo", undefined, {
212
+ schema: z.object({ count: z.number() }),
213
+ })).rejects.toBeInstanceOf(RestApiValidationError);
214
+ });
215
+ it("throws IntegrationError when a schema is given but the result has nothing to validate", async () => {
216
+ const { client } = createClient({
217
+ content: [{ type: "image", data: "...", mimeType: "image/png" }],
218
+ });
219
+ const error = await client
220
+ .callTool("echo", undefined, { schema: z.string() })
221
+ .catch((e) => e);
222
+ expect(error).toBeInstanceOf(IntegrationError);
223
+ expect(integrationError(error).details).toMatchObject({
224
+ cause: expect.stringContaining('Tool "echo"'),
225
+ });
226
+ });
227
+ it("throws IntegrationError naming the tool and carrying the result when isError is set", async () => {
228
+ const { client } = createClient({
229
+ content: [
230
+ { type: "text", text: "rate limited" },
231
+ { type: "image", data: "...", mimeType: "image/png" },
232
+ { type: "text", text: "retry later" },
233
+ ],
234
+ isError: true,
235
+ });
236
+ const error = await client
237
+ .callTool("echo", {}, { schema: z.string() })
238
+ .catch((e) => e);
239
+ expect(error).toBeInstanceOf(IntegrationError);
240
+ expect(integrationError(error).operation).toBe("callTool");
241
+ expect(integrationError(error).details).toMatchObject({
242
+ cause: {
243
+ tool: "echo",
244
+ message: 'Tool "echo" failed: rate limited\nretry later',
245
+ result: { isError: true, content: expect.any(Array) },
246
+ },
247
+ });
248
+ const details = z
249
+ .object({
250
+ cause: z.object({
251
+ result: z.object({ content: z.array(z.unknown()) }),
252
+ }),
253
+ })
254
+ .parse(integrationError(error).details);
255
+ expect(details.cause.result.content).toHaveLength(3);
256
+ });
257
+ it("throws IntegrationError when the response is not a CallToolResult", async () => {
258
+ const { client } = createClient({ tools: [] });
259
+ await expect(client.callTool("echo")).rejects.toBeInstanceOf(IntegrationError);
260
+ });
261
+ it("wraps executeQuery failures in IntegrationError", async () => {
262
+ const executeQuery = vi.fn().mockRejectedValue(new Error("boom"));
263
+ const client = new McpClientImpl(TEST_CONFIG, executeQuery);
264
+ const error = await client.callTool("echo").catch((e) => e);
265
+ expect(error).toBeInstanceOf(IntegrationError);
266
+ expect(integrationError(error).details).toMatchObject({
267
+ operation: "callTool",
268
+ cause: new Error("boom"),
269
+ });
270
+ });
271
+ it.each([
272
+ "MCP server returned error -32602 for tools/call: MCP error -32602: Tool create_issue not found",
273
+ "MCP server returned error -32602 for tools/call: Unknown tool: create_issue",
274
+ "MCP server returned error -32601 for tools/call: MCP error -32601: Unknown tool: create_issue",
275
+ ])("throws McpToolUnavailableError when the server rejects the tool: %s", async (message) => {
276
+ const executeQuery = vi.fn().mockRejectedValue(new Error(message));
277
+ const client = new McpClientImpl(TEST_CONFIG, executeQuery);
278
+ const error = await client
279
+ .callTool("create_issue")
280
+ .catch((e) => e);
281
+ expect(error).toBeInstanceOf(McpToolUnavailableError);
282
+ expect(error).toBeInstanceOf(IntegrationError);
283
+ expect(error).toMatchObject({
284
+ name: "McpToolUnavailableError",
285
+ message: expect.stringContaining("create_issue"),
286
+ toolName: "create_issue",
287
+ integrationName: "Test MCP",
288
+ });
289
+ expect(error).toHaveProperty("message", expect.stringContaining("Test MCP"));
290
+ });
291
+ it("throws McpToolUnavailableError when an isError result names an unknown tool", async () => {
292
+ const { client } = createClient(textResult("Unknown tool: create_issue", { isError: true }));
293
+ const error = await client
294
+ .callTool("create_issue")
295
+ .catch((e) => e);
296
+ expect(error).toBeInstanceOf(McpToolUnavailableError);
297
+ expect(integrationError(error).details).toMatchObject({
298
+ cause: {
299
+ tool: "create_issue",
300
+ message: "Unknown tool: create_issue",
301
+ result: { isError: true, content: expect.any(Array) },
302
+ },
303
+ });
304
+ });
305
+ it.each([
306
+ "Tool execution failed: issue not found",
307
+ "Unknown tool: other_tool",
308
+ "Unknown tool: get_issue-v2",
309
+ "Unknown tool: get_issue.v2",
310
+ ])("keeps an isError result that does not name the called tool as IntegrationError: %s", async (text) => {
311
+ const { client } = createClient(textResult(text, { isError: true }));
312
+ const error = await client
313
+ .callTool("get_issue")
314
+ .catch((e) => e);
315
+ expect(error).toBeInstanceOf(IntegrationError);
316
+ expect(error).not.toBeInstanceOf(McpToolUnavailableError);
317
+ });
318
+ it.each([
319
+ [
320
+ "create_issue",
321
+ "MCP server returned error -32602 for tools/call: Invalid arguments for tool create_issue",
322
+ ],
323
+ [
324
+ "create_issue",
325
+ "MCP server returned error -32603 for tools/call: Unknown tool: create_issue",
326
+ ],
327
+ [
328
+ "search.v2",
329
+ "MCP server returned error -32602 for tools/call: Unknown tool: search_v2",
330
+ ],
331
+ ])("keeps other tools/call errors for %s as IntegrationError: %s", async (tool, message) => {
332
+ const executeQuery = vi.fn().mockRejectedValue(new Error(message));
333
+ const client = new McpClientImpl(TEST_CONFIG, executeQuery);
334
+ const error = await client.callTool(tool).catch((e) => e);
335
+ expect(error).toBeInstanceOf(IntegrationError);
336
+ expect(error).not.toBeInstanceOf(McpToolUnavailableError);
337
+ });
338
+ it("keeps a listTools failure with unknown-tool wording as IntegrationError", async () => {
339
+ const executeQuery = vi
340
+ .fn()
341
+ .mockRejectedValue(new Error("MCP server returned error -32602 for tools/call: Unknown tool: x"));
342
+ const client = new McpClientImpl(TEST_CONFIG, executeQuery);
343
+ const error = await client.listTools().catch((e) => e);
344
+ expect(error).toBeInstanceOf(IntegrationError);
345
+ expect(error).not.toBeInstanceOf(McpToolUnavailableError);
346
+ });
347
+ });
348
+ describe("listTools()", () => {
349
+ it("follows nextCursor, concatenates every page, and reuses the session from page 1", async () => {
350
+ const { client, executeQuery } = createClient({ ...toolsPage(["a"], "c1"), sessionId: "s-1" }, toolsPage(["b"], "c2"), toolsPage(["c"]));
351
+ const tools = await client.listTools({ headers: { "X-Org": "acme" } });
352
+ expect(tools.map((t) => t.name)).toEqual(["a", "b", "c"]);
353
+ expect(executeQuery).toHaveBeenCalledTimes(3);
354
+ const params = executeQuery.mock.calls.map((call) => call[0].request.params);
355
+ expect(params).toEqual([{}, { cursor: "c1" }, { cursor: "c2" }]);
356
+ for (const call of executeQuery.mock.calls) {
357
+ expect(call[0].request.method).toBe("tools/list");
358
+ }
359
+ expect(headersOf(executeQuery.mock.calls[0])).toEqual({
360
+ "X-Org": "acme",
361
+ });
362
+ expect(headersOf(executeQuery.mock.calls[1])).toEqual({
363
+ "Mcp-Session-Id": "s-1",
364
+ "X-Org": "acme",
365
+ });
366
+ });
367
+ it("throws IntegrationError when the server repeats a cursor", async () => {
368
+ const { client, executeQuery } = createClient(toolsPage([], "loop"), toolsPage([], "loop"));
369
+ await expect(client.listTools()).rejects.toBeInstanceOf(IntegrationError);
370
+ expect(executeQuery).toHaveBeenCalledTimes(2);
371
+ });
372
+ it("gives up after 50 pages of fresh cursors", async () => {
373
+ let page = 0;
374
+ const executeQuery = vi
375
+ .fn()
376
+ .mockImplementation(async () => toolsPage([`t${page}`], `c${++page}`));
377
+ const client = new McpClientImpl(TEST_CONFIG, executeQuery);
378
+ const error = await client.listTools().catch((e) => e);
379
+ expect(error).toBeInstanceOf(IntegrationError);
380
+ expect(integrationError(error).details).toMatchObject({
381
+ cause: expect.stringContaining("50 pages"),
382
+ });
383
+ expect(executeQuery).toHaveBeenCalledTimes(50);
384
+ });
385
+ it("treats optional fields sent as null like absent ones", async () => {
386
+ const { client } = createClient({
387
+ tools: [
388
+ {
389
+ name: "a",
390
+ description: null,
391
+ title: null,
392
+ inputSchema: { type: "object", properties: null, required: null },
393
+ annotations: null,
394
+ _meta: null,
395
+ },
396
+ ],
397
+ nextCursor: null,
398
+ }, {
399
+ content: [
400
+ { type: "text", text: "ok" },
401
+ { type: "image", text: null },
402
+ ],
403
+ structuredContent: null,
404
+ isError: null,
405
+ _meta: null,
406
+ sessionId: null,
407
+ protocolVersion: null,
408
+ });
409
+ const tools = await client.listTools();
410
+ const result = await client.callTool("a");
411
+ expect(tools).toEqual([{ name: "a", inputSchema: { type: "object" } }]);
412
+ expect(result).toEqual({
413
+ content: [{ type: "text", text: "ok" }, { type: "image" }],
414
+ });
415
+ });
416
+ it("throws IntegrationError when a tool entry is malformed", async () => {
417
+ const { client } = createClient({
418
+ tools: [{ name: "ok", inputSchema: { type: "object" } }, { name: 42 }],
419
+ });
420
+ const error = await client.listTools().catch((e) => e);
421
+ expect(error).toBeInstanceOf(IntegrationError);
422
+ expect(integrationError(error).details).toMatchObject({
423
+ cause: expect.stringContaining("tools.1.name"),
424
+ });
425
+ });
426
+ it("throws IntegrationError when the response has no tools array", async () => {
427
+ const { client } = createClient(textResult("not a list"));
428
+ await expect(client.listTools()).rejects.toBeInstanceOf(IntegrationError);
429
+ });
430
+ });
431
+ });
432
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/integrations/mcpintegration/client.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Server integration client.
3
+ *
4
+ * @module
5
+ */
6
+ export type { McpClient, McpCallToolOptions, McpRequestOptions, CallToolResult, McpContentBlock, Tool, ToolAnnotations, } from "./types.js";
7
+ export { McpClientImpl, McpToolUnavailableError } from "./client.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/mcpintegration/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,IAAI,EACJ,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Server integration client.
3
+ *
4
+ * @module
5
+ */
6
+ export { McpClientImpl, McpToolUnavailableError } from "./client.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/mcpintegration/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * MCP Server client types.
3
+ *
4
+ * An MCP Server integration points at a remote Model Context Protocol server.
5
+ * The client exposes the tools surface of that server: list the tools it
6
+ * advertises and call one of them. Resources and prompts are not exposed yet.
7
+ */
8
+ import type { z } from "zod";
9
+ import type { BaseIntegrationClient } from "../../types.js";
10
+ /**
11
+ * One block of a tool result's `content` array.
12
+ *
13
+ * MCP defines text, image, audio, resource link and embedded resource blocks.
14
+ * Only `type` is guaranteed; the remaining fields depend on the block type.
15
+ */
16
+ export interface McpContentBlock {
17
+ type: string;
18
+ /** Present on `text` blocks. */
19
+ text?: string;
20
+ [key: string]: unknown;
21
+ }
22
+ /**
23
+ * The result of a `tools/call` request, as returned by the MCP server.
24
+ */
25
+ export interface CallToolResult {
26
+ /** Unstructured result blocks. */
27
+ content: McpContentBlock[];
28
+ /** Structured result, present when the tool declares an output schema. */
29
+ structuredContent?: Record<string, unknown>;
30
+ /** True when the tool itself failed; `content` then carries the error text. */
31
+ isError?: boolean;
32
+ _meta?: Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Behavioral hints a server attaches to a tool. All hints are advisory.
36
+ */
37
+ export interface ToolAnnotations {
38
+ title?: string;
39
+ readOnlyHint?: boolean;
40
+ destructiveHint?: boolean;
41
+ idempotentHint?: boolean;
42
+ openWorldHint?: boolean;
43
+ [key: string]: unknown;
44
+ }
45
+ /**
46
+ * One tool advertised by the MCP server through `tools/list`.
47
+ */
48
+ export interface Tool {
49
+ name: string;
50
+ title?: string;
51
+ description?: string;
52
+ /** JSON Schema describing the tool's `arguments` object. */
53
+ inputSchema: {
54
+ type: "object";
55
+ properties?: Record<string, unknown>;
56
+ required?: string[];
57
+ [key: string]: unknown;
58
+ };
59
+ /** JSON Schema describing `structuredContent`, when the tool declares one. */
60
+ outputSchema?: Record<string, unknown>;
61
+ annotations?: ToolAnnotations;
62
+ _meta?: Record<string, unknown>;
63
+ }
64
+ /**
65
+ * Options shared by every MCP request.
66
+ *
67
+ * **Security:** `label` is trace metadata and may be stored in logs; do not put
68
+ * secrets in it. Headers are sent to the MCP server as-is.
69
+ */
70
+ export interface McpRequestOptions {
71
+ /** Short human-readable label shown in the Trace View for this call. */
72
+ label?: string;
73
+ /**
74
+ * Extra HTTP headers for this request, on top of the headers configured on
75
+ * the integration. Use this for per-call values such as `Mcp-Param-*`.
76
+ */
77
+ headers?: Record<string, string>;
78
+ }
79
+ /**
80
+ * Options for {@link McpClient.callTool}. Always the third argument: a schema
81
+ * placed inside `args` is rejected with a `TypeError` instead of being sent to
82
+ * the server as tool arguments.
83
+ */
84
+ export interface McpCallToolOptions<T = unknown> extends McpRequestOptions {
85
+ /**
86
+ * Zod schema for the tool result. When given, the call returns the validated
87
+ * value instead of the `CallToolResult`. The value validated is
88
+ * `structuredContent` when the server returns an object; otherwise the first
89
+ * `text` block. Text that is JSON is validated as the parsed value first and
90
+ * as the raw string second, so a string schema still accepts text such as
91
+ * "12345". Text that is not JSON is validated as a string.
92
+ */
93
+ schema?: z.ZodSchema<T>;
94
+ }
95
+ /**
96
+ * MCP Server client for listing and calling tools.
97
+ *
98
+ * When the server needs an MCP session (handshake-era servers), the plugin
99
+ * opens one on the first call and the client sends it back on every later
100
+ * call of the same API run, so the handshake runs once per client instance.
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * const mcp = ctx.integrations.github;
105
+ *
106
+ * // Discover the server's tools
107
+ * const tools = await mcp.listTools();
108
+ *
109
+ * // Call a tool and get the raw CallToolResult
110
+ * const raw = await mcp.callTool("search_issues", { query: "is:open" });
111
+ *
112
+ * // Call a tool and validate the result
113
+ * const issues = await mcp.callTool(
114
+ * "search_issues",
115
+ * { query: "is:open" },
116
+ * { schema: z.object({ items: z.array(IssueSchema) }) },
117
+ * );
118
+ * ```
119
+ */
120
+ export interface McpClient extends BaseIntegrationClient {
121
+ /**
122
+ * Call a tool and validate its result against `schema`.
123
+ *
124
+ * @param name - Tool name as advertised by `tools/list`
125
+ * @param args - Tool arguments; sent as `{}` when omitted
126
+ * @param options - Request options with a required `schema`
127
+ * @returns The validated result
128
+ * @throws IntegrationError when the server reports `isError: true`
129
+ * @throws RestApiValidationError when the result does not match `schema`
130
+ */
131
+ callTool<T>(name: string, args: Record<string, unknown> | undefined, options: McpCallToolOptions<T> & {
132
+ schema: z.ZodSchema<T>;
133
+ }): Promise<T>;
134
+ /**
135
+ * Call a tool and return the server's `CallToolResult`, with the plugin's
136
+ * session bookkeeping fields removed and a `null` `structuredContent`
137
+ * normalized to absent.
138
+ *
139
+ * @param name - Tool name as advertised by `tools/list`
140
+ * @param args - Tool arguments; sent as `{}` when omitted
141
+ * @param options - Request options
142
+ * @returns The `CallToolResult`
143
+ * @throws IntegrationError when the server reports `isError: true`; the
144
+ * error's `details.cause` carries the tool name, the text and the result
145
+ */
146
+ callTool(name: string, args?: Record<string, unknown>, options?: McpRequestOptions): Promise<CallToolResult>;
147
+ /**
148
+ * Call a tool. Returns the validated value when `options.schema` is set,
149
+ * otherwise the `CallToolResult`.
150
+ */
151
+ callTool<T>(name: string, args?: Record<string, unknown>, options?: McpCallToolOptions<T>): Promise<CallToolResult | T>;
152
+ /**
153
+ * List every tool the server advertises.
154
+ *
155
+ * Follows `nextCursor` until the server stops paginating, so the returned
156
+ * array is the complete catalog. Gives up with an `IntegrationError` after
157
+ * 50 pages or when a cursor repeats.
158
+ *
159
+ * @param options - Request options
160
+ * @returns All tools, in server order
161
+ */
162
+ listTools(options?: McpRequestOptions): Promise<Tool[]>;
163
+ }
164
+ //# sourceMappingURL=types.d.ts.map