@postman/test-mcp-server 1.0.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.
Files changed (127) hide show
  1. package/README.md +478 -0
  2. package/dist/index.d.ts +13 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +50 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/instructions.md +24 -0
  7. package/dist/logger.d.ts +8 -0
  8. package/dist/logger.d.ts.map +1 -0
  9. package/dist/logger.js +27 -0
  10. package/dist/logger.js.map +1 -0
  11. package/dist/oauth/config.d.ts +6 -0
  12. package/dist/oauth/config.d.ts.map +1 -0
  13. package/dist/oauth/config.js +13 -0
  14. package/dist/oauth/config.js.map +1 -0
  15. package/dist/oauth/helpers.d.ts +17 -0
  16. package/dist/oauth/helpers.d.ts.map +1 -0
  17. package/dist/oauth/helpers.js +100 -0
  18. package/dist/oauth/helpers.js.map +1 -0
  19. package/dist/oauth/index.d.ts +17 -0
  20. package/dist/oauth/index.d.ts.map +1 -0
  21. package/dist/oauth/index.js +15 -0
  22. package/dist/oauth/index.js.map +1 -0
  23. package/dist/oauth/middleware.d.ts +15 -0
  24. package/dist/oauth/middleware.d.ts.map +1 -0
  25. package/dist/oauth/middleware.js +46 -0
  26. package/dist/oauth/middleware.js.map +1 -0
  27. package/dist/oauth/routes.d.ts +3 -0
  28. package/dist/oauth/routes.d.ts.map +1 -0
  29. package/dist/oauth/routes.js +476 -0
  30. package/dist/oauth/routes.js.map +1 -0
  31. package/dist/oauth/stores.d.ts +6 -0
  32. package/dist/oauth/stores.d.ts.map +1 -0
  33. package/dist/oauth/stores.js +20 -0
  34. package/dist/oauth/stores.js.map +1 -0
  35. package/dist/oauth/types.d.ts +46 -0
  36. package/dist/oauth/types.d.ts.map +1 -0
  37. package/dist/oauth/types.js +5 -0
  38. package/dist/oauth/types.js.map +1 -0
  39. package/dist/prompts/index.d.ts +99 -0
  40. package/dist/prompts/index.d.ts.map +1 -0
  41. package/dist/prompts/index.js +135 -0
  42. package/dist/prompts/index.js.map +1 -0
  43. package/dist/resources/index.d.ts +70 -0
  44. package/dist/resources/index.d.ts.map +1 -0
  45. package/dist/resources/index.js +79 -0
  46. package/dist/resources/index.js.map +1 -0
  47. package/dist/server/index.d.ts +11 -0
  48. package/dist/server/index.d.ts.map +1 -0
  49. package/dist/server/index.js +234 -0
  50. package/dist/server/index.js.map +1 -0
  51. package/dist/tools/constants.d.ts +5 -0
  52. package/dist/tools/constants.d.ts.map +1 -0
  53. package/dist/tools/constants.js +5 -0
  54. package/dist/tools/constants.js.map +1 -0
  55. package/dist/tools/definitions/add.d.ts +10 -0
  56. package/dist/tools/definitions/add.d.ts.map +1 -0
  57. package/dist/tools/definitions/add.js +24 -0
  58. package/dist/tools/definitions/add.js.map +1 -0
  59. package/dist/tools/definitions/annotatedMessage.d.ts +14 -0
  60. package/dist/tools/definitions/annotatedMessage.d.ts.map +1 -0
  61. package/dist/tools/definitions/annotatedMessage.js +63 -0
  62. package/dist/tools/definitions/annotatedMessage.js.map +1 -0
  63. package/dist/tools/definitions/echo.d.ts +9 -0
  64. package/dist/tools/definitions/echo.d.ts.map +1 -0
  65. package/dist/tools/definitions/echo.js +17 -0
  66. package/dist/tools/definitions/echo.js.map +1 -0
  67. package/dist/tools/definitions/elicitation.d.ts +8 -0
  68. package/dist/tools/definitions/elicitation.d.ts.map +1 -0
  69. package/dist/tools/definitions/elicitation.js +175 -0
  70. package/dist/tools/definitions/elicitation.js.map +1 -0
  71. package/dist/tools/definitions/getResourceLinks.d.ts +9 -0
  72. package/dist/tools/definitions/getResourceLinks.d.ts.map +1 -0
  73. package/dist/tools/definitions/getResourceLinks.js +31 -0
  74. package/dist/tools/definitions/getResourceLinks.js.map +1 -0
  75. package/dist/tools/definitions/getResourceReference.d.ts +9 -0
  76. package/dist/tools/definitions/getResourceReference.d.ts.map +1 -0
  77. package/dist/tools/definitions/getResourceReference.js +36 -0
  78. package/dist/tools/definitions/getResourceReference.js.map +1 -0
  79. package/dist/tools/definitions/getTinyImage.d.ts +7 -0
  80. package/dist/tools/definitions/getTinyImage.d.ts.map +1 -0
  81. package/dist/tools/definitions/getTinyImage.js +30 -0
  82. package/dist/tools/definitions/getTinyImage.js.map +1 -0
  83. package/dist/tools/definitions/listRoots.d.ts +8 -0
  84. package/dist/tools/definitions/listRoots.d.ts.map +1 -0
  85. package/dist/tools/definitions/listRoots.js +54 -0
  86. package/dist/tools/definitions/listRoots.js.map +1 -0
  87. package/dist/tools/definitions/longRunningOperation.d.ts +10 -0
  88. package/dist/tools/definitions/longRunningOperation.d.ts.map +1 -0
  89. package/dist/tools/definitions/longRunningOperation.js +39 -0
  90. package/dist/tools/definitions/longRunningOperation.js.map +1 -0
  91. package/dist/tools/definitions/printEnv.d.ts +7 -0
  92. package/dist/tools/definitions/printEnv.d.ts.map +1 -0
  93. package/dist/tools/definitions/printEnv.js +19 -0
  94. package/dist/tools/definitions/printEnv.js.map +1 -0
  95. package/dist/tools/definitions/sampleLlm.d.ts +10 -0
  96. package/dist/tools/definitions/sampleLlm.d.ts.map +1 -0
  97. package/dist/tools/definitions/sampleLlm.js +48 -0
  98. package/dist/tools/definitions/sampleLlm.js.map +1 -0
  99. package/dist/tools/definitions/structuredContent.d.ts +14 -0
  100. package/dist/tools/definitions/structuredContent.d.ts.map +1 -0
  101. package/dist/tools/definitions/structuredContent.js +29 -0
  102. package/dist/tools/definitions/structuredContent.js.map +1 -0
  103. package/dist/tools/definitions/zipResources.d.ts +9 -0
  104. package/dist/tools/definitions/zipResources.d.ts.map +1 -0
  105. package/dist/tools/definitions/zipResources.js +41 -0
  106. package/dist/tools/definitions/zipResources.js.map +1 -0
  107. package/dist/tools/index.d.ts +19 -0
  108. package/dist/tools/index.d.ts.map +1 -0
  109. package/dist/tools/index.js +71 -0
  110. package/dist/tools/index.js.map +1 -0
  111. package/dist/tools/types.d.ts +28 -0
  112. package/dist/tools/types.d.ts.map +1 -0
  113. package/dist/tools/types.js +2 -0
  114. package/dist/tools/types.js.map +1 -0
  115. package/dist/transports/sse.d.ts +2 -0
  116. package/dist/transports/sse.d.ts.map +1 -0
  117. package/dist/transports/sse.js +56 -0
  118. package/dist/transports/sse.js.map +1 -0
  119. package/dist/transports/stdio.d.ts +3 -0
  120. package/dist/transports/stdio.d.ts.map +1 -0
  121. package/dist/transports/stdio.js +28 -0
  122. package/dist/transports/stdio.js.map +1 -0
  123. package/dist/transports/streamableHttpServer.d.ts +37 -0
  124. package/dist/transports/streamableHttpServer.d.ts.map +1 -0
  125. package/dist/transports/streamableHttpServer.js +242 -0
  126. package/dist/transports/streamableHttpServer.js.map +1 -0
  127. package/package.json +76 -0
@@ -0,0 +1,54 @@
1
+ import { z, toJSONSchema } from "zod";
2
+ export const name = "listRoots";
3
+ export const schema = z.object({});
4
+ export const definition = {
5
+ name,
6
+ description: "Lists the current MCP roots provided by the client. Demonstrates the roots protocol capability even though this server doesn't access files.",
7
+ inputSchema: toJSONSchema(schema),
8
+ };
9
+ // Flag to indicate this tool requires client roots capability
10
+ export const requiresClientCapability = "roots";
11
+ export const handler = async (args, _extra, context) => {
12
+ schema.parse(args);
13
+ if (!context.clientSupportsRoots) {
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: "The MCP client does not support the roots protocol.\n\n" +
19
+ "This means the server cannot access information about the client's workspace directories or file system roots.",
20
+ },
21
+ ],
22
+ };
23
+ }
24
+ if (context.currentRoots.length === 0) {
25
+ return {
26
+ content: [
27
+ {
28
+ type: "text",
29
+ text: "The client supports roots but no roots are currently configured.\n\n" +
30
+ "This could mean:\n" +
31
+ "1. The client hasn't provided any roots yet\n" +
32
+ "2. The client provided an empty roots list\n" +
33
+ "3. The roots configuration is still being loaded",
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ const rootsList = context.currentRoots
39
+ .map((root, index) => {
40
+ return `${index + 1}. ${root.name || "Unnamed Root"}\n URI: ${root.uri}`;
41
+ })
42
+ .join("\n\n");
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: `Current MCP Roots (${context.currentRoots.length} total):\n\n${rootsList}\n\n` +
48
+ "Note: This server demonstrates the roots protocol capability but doesn't actually access files. " +
49
+ "The roots are provided by the MCP client and can be used by servers that need file system access.",
50
+ },
51
+ ],
52
+ };
53
+ };
54
+ //# sourceMappingURL=listRoots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listRoots.js","sourceRoot":"","sources":["../../../src/tools/definitions/listRoots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAGtC,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI;IACJ,WAAW,EACT,8IAA8I;IAChJ,WAAW,EAAE,YAAY,CAAC,MAAM,CAAc;CAC/C,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAgB,CAAC;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAClE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EACF,yDAAyD;wBACzD,gHAAgH;iBACnH;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EACF,sEAAsE;wBACtE,oBAAoB;wBACpB,+CAA+C;wBAC/C,8CAA8C;wBAC9C,kDAAkD;iBACrD;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY;SACnC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,OAAO,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,cAAc,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7E,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EACF,sBAAsB,OAAO,CAAC,YAAY,CAAC,MAAM,eAAe,SAAS,MAAM;oBAC/E,kGAAkG;oBAClG,mGAAmG;aACtG;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ import type { ToolDefinition, ToolHandler } from "../types.js";
3
+ export declare const name = "longRunningOperation";
4
+ export declare const schema: z.ZodObject<{
5
+ duration: z.ZodDefault<z.ZodNumber>;
6
+ steps: z.ZodDefault<z.ZodNumber>;
7
+ }, z.core.$strip>;
8
+ export declare const definition: ToolDefinition;
9
+ export declare const handler: ToolHandler;
10
+ //# sourceMappingURL=longRunningOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"longRunningOperation.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/longRunningOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,IAAI,yBAAyB,CAAC;AAE3C,eAAO,MAAM,MAAM;;;iBAGjB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,cAIxB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAgCrB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { z, toJSONSchema } from "zod";
2
+ export const name = "longRunningOperation";
3
+ export const schema = z.object({
4
+ duration: z.number().default(10).describe("Duration of the operation in seconds"),
5
+ steps: z.number().default(5).describe("Number of steps in the operation"),
6
+ });
7
+ export const definition = {
8
+ name,
9
+ description: "Demonstrates a long running operation with progress updates",
10
+ inputSchema: toJSONSchema(schema),
11
+ };
12
+ export const handler = async (args, extra, context) => {
13
+ const validatedArgs = schema.parse(args);
14
+ const { duration, steps } = validatedArgs;
15
+ const stepDuration = duration / steps;
16
+ const progressToken = args?._meta?.progressToken;
17
+ for (let i = 1; i < steps + 1; i++) {
18
+ await new Promise((resolve) => setTimeout(resolve, stepDuration * 1000));
19
+ if (progressToken !== undefined) {
20
+ await context.server.notification({
21
+ method: "notifications/progress",
22
+ params: {
23
+ progress: i,
24
+ total: steps,
25
+ progressToken,
26
+ },
27
+ }, { relatedRequestId: extra.requestId });
28
+ }
29
+ }
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: `Long running operation completed. Duration: ${duration} seconds, Steps: ${steps}.`,
35
+ },
36
+ ],
37
+ };
38
+ };
39
+ //# sourceMappingURL=longRunningOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"longRunningOperation.js","sourceRoot":"","sources":["../../../src/tools/definitions/longRunningOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAGtC,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CAAC;AAE3C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI;IACJ,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE,YAAY,CAAC,MAAM,CAAc;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACjE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;IAC1C,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,aAAa,GAAI,IAA+C,EAAE,KAAK,EAAE,aAAa,CAAC;IAE7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;QAEzE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,OAAO,CAAC,MAAM,CAAC,YAAY,CAC/B;gBACE,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE,KAAK;oBACZ,aAAa;iBACd;aACF,EACD,EAAE,gBAAgB,EAAE,KAAK,CAAC,SAAS,EAAE,CACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,+CAA+C,QAAQ,oBAAoB,KAAK,GAAG;aAC1F;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ import type { ToolDefinition, ToolHandler } from "../types.js";
3
+ export declare const name = "printEnv";
4
+ export declare const schema: z.ZodObject<{}, z.core.$strip>;
5
+ export declare const definition: ToolDefinition;
6
+ export declare const handler: ToolHandler;
7
+ //# sourceMappingURL=printEnv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printEnv.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/printEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,IAAI,aAAa,CAAC;AAE/B,eAAO,MAAM,MAAM,gCAAe,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,cAIxB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WASrB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z, toJSONSchema } from "zod";
2
+ export const name = "printEnv";
3
+ export const schema = z.object({});
4
+ export const definition = {
5
+ name,
6
+ description: "Prints all environment variables, helpful for debugging MCP server configuration",
7
+ inputSchema: toJSONSchema(schema),
8
+ };
9
+ export const handler = async () => {
10
+ return {
11
+ content: [
12
+ {
13
+ type: "text",
14
+ text: JSON.stringify(process.env, null, 2),
15
+ },
16
+ ],
17
+ };
18
+ };
19
+ //# sourceMappingURL=printEnv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printEnv.js","sourceRoot":"","sources":["../../../src/tools/definitions/printEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAGtC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI;IACJ,WAAW,EAAE,kFAAkF;IAC/F,WAAW,EAAE,YAAY,CAAC,MAAM,CAAc;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,IAAI,EAAE;IAC7C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3C;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ import type { ToolDefinition, ToolHandler } from "../types.js";
3
+ export declare const name = "sampleLLM";
4
+ export declare const schema: z.ZodObject<{
5
+ prompt: z.ZodString;
6
+ maxTokens: z.ZodDefault<z.ZodNumber>;
7
+ }, z.core.$strip>;
8
+ export declare const definition: ToolDefinition;
9
+ export declare const handler: ToolHandler;
10
+ //# sourceMappingURL=sampleLlm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampleLlm.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/sampleLlm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AAKtC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,IAAI,cAAc,CAAC;AAEhC,eAAO,MAAM,MAAM;;;iBAGjB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,cAIxB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAuCrB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { z, toJSONSchema } from "zod";
2
+ import { CreateMessageResultSchema, } from "@modelcontextprotocol/sdk/types.js";
3
+ export const name = "sampleLLM";
4
+ export const schema = z.object({
5
+ prompt: z.string().describe("The prompt to send to the LLM"),
6
+ maxTokens: z.number().default(100).describe("Maximum number of tokens to generate"),
7
+ });
8
+ export const definition = {
9
+ name,
10
+ description: "Samples from an LLM using MCP's sampling feature",
11
+ inputSchema: toJSONSchema(schema),
12
+ };
13
+ export const handler = async (args, extra) => {
14
+ const validatedArgs = schema.parse(args);
15
+ const { prompt, maxTokens } = validatedArgs;
16
+ const request = {
17
+ method: "sampling/createMessage",
18
+ params: {
19
+ messages: [
20
+ {
21
+ role: "user",
22
+ content: {
23
+ type: "text",
24
+ text: `Resource ${name} context: ${prompt}`,
25
+ },
26
+ },
27
+ ],
28
+ systemPrompt: "You are a helpful test server.",
29
+ maxTokens,
30
+ temperature: 0.7,
31
+ includeContext: "thisServer",
32
+ },
33
+ };
34
+ const result = await extra.sendRequest(request, CreateMessageResultSchema);
35
+ return {
36
+ content: [
37
+ {
38
+ type: "text",
39
+ text: `LLM sampling result: ${Array.isArray(result.content)
40
+ ? result.content.map((c) => (c.type === "text" ? c.text : JSON.stringify(c))).join("")
41
+ : result.content.type === "text"
42
+ ? result.content.text
43
+ : JSON.stringify(result.content)}`,
44
+ },
45
+ ],
46
+ };
47
+ };
48
+ //# sourceMappingURL=sampleLlm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampleLlm.js","sourceRoot":"","sources":["../../../src/tools/definitions/sampleLlm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAEL,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAG5C,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI;IACJ,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE,YAAY,CAAC,MAAM,CAAc;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACxD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAE5C,MAAM,OAAO,GAAyB;QACpC,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,YAAY,IAAI,aAAa,MAAM,EAAE;qBAC5C;iBACF;aACF;YACD,YAAY,EAAE,gCAAgC;YAC9C,SAAS;YACT,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,YAAY;SAC7B;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAE3E,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,wBACJ,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC3B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;wBAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;wBACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CACrC,EAAE;aACH;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ import type { ToolDefinition, ToolHandler } from "../types.js";
3
+ export declare const name = "structuredContent";
4
+ export declare const inputSchema: z.ZodObject<{
5
+ location: z.ZodString;
6
+ }, z.core.$strip>;
7
+ export declare const outputSchema: z.ZodObject<{
8
+ temperature: z.ZodNumber;
9
+ conditions: z.ZodString;
10
+ humidity: z.ZodNumber;
11
+ }, z.core.$strip>;
12
+ export declare const definition: ToolDefinition;
13
+ export declare const handler: ToolHandler;
14
+ //# sourceMappingURL=structuredContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredContent.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/structuredContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AAEtF,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,WAAW;;iBAEtB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;iBAIvB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,cAKxB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAarB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { z, toJSONSchema } from "zod";
2
+ export const name = "structuredContent";
3
+ export const inputSchema = z.object({
4
+ location: z.string().trim().min(1).describe("City name or zip code"),
5
+ });
6
+ export const outputSchema = z.object({
7
+ temperature: z.number().describe("Temperature in celsius"),
8
+ conditions: z.string().describe("Weather conditions description"),
9
+ humidity: z.number().describe("Humidity percentage"),
10
+ });
11
+ export const definition = {
12
+ name,
13
+ description: "Returns structured content along with an output schema for client data validation",
14
+ inputSchema: toJSONSchema(inputSchema),
15
+ outputSchema: toJSONSchema(outputSchema),
16
+ };
17
+ export const handler = async (args) => {
18
+ inputSchema.parse(args);
19
+ const weather = {
20
+ temperature: 22.5,
21
+ conditions: "Partly cloudy",
22
+ humidity: 65,
23
+ };
24
+ return {
25
+ content: [{ type: "text", text: JSON.stringify(weather) }],
26
+ structuredContent: weather,
27
+ };
28
+ };
29
+ //# sourceMappingURL=structuredContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredContent.js","sourceRoot":"","sources":["../../../src/tools/definitions/structuredContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAGtC,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI;IACJ,WAAW,EAAE,mFAAmF;IAChG,WAAW,EAAE,YAAY,CAAC,WAAW,CAAc;IACnD,YAAY,EAAE,YAAY,CAAC,YAAY,CAAe;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,IAAI,EAAE,EAAE;IACjD,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,eAAe;QAC3B,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,iBAAiB,EAAE,OAAO;KAC3B,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ import type { ToolDefinition, ToolHandler } from "../types.js";
3
+ export declare const name = "zip";
4
+ export declare const schema: z.ZodObject<{
5
+ files: z.ZodRecord<z.ZodString, z.ZodString>;
6
+ }, z.core.$strip>;
7
+ export declare const definition: ToolDefinition;
8
+ export declare const handler: ToolHandler;
9
+ //# sourceMappingURL=zipResources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipResources.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/zipResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,IAAI,QAAQ,CAAC;AAE1B,eAAO,MAAM,MAAM;;iBAIjB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,cAKxB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WA+BrB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { z, toJSONSchema } from "zod";
2
+ import JSZip from "jszip";
3
+ export const name = "zip";
4
+ export const schema = z.object({
5
+ files: z
6
+ .record(z.string(), z.string().url().describe("URL of the file to include in the zip"))
7
+ .describe("Mapping of file names to URLs to include in the zip"),
8
+ });
9
+ export const definition = {
10
+ name,
11
+ description: "Compresses the provided resource files (mapping of name to URI, which can be a data URI) to a zip file, which it returns as a data URI resource link.",
12
+ inputSchema: toJSONSchema(schema),
13
+ };
14
+ export const handler = async (args) => {
15
+ const { files } = schema.parse(args);
16
+ const zip = new JSZip();
17
+ for (const [fileName, fileUrl] of Object.entries(files)) {
18
+ try {
19
+ const response = await fetch(fileUrl);
20
+ if (!response.ok) {
21
+ throw new Error(`Failed to fetch ${fileUrl}: ${response.statusText}`);
22
+ }
23
+ const arrayBuffer = await response.arrayBuffer();
24
+ zip.file(fileName, arrayBuffer);
25
+ }
26
+ catch (error) {
27
+ throw new Error(`Error fetching file ${fileUrl}: ${error instanceof Error ? error.message : String(error)}`);
28
+ }
29
+ }
30
+ const uri = `data:application/zip;base64,${await zip.generateAsync({ type: "base64" })}`;
31
+ return {
32
+ content: [
33
+ {
34
+ type: "resource_link",
35
+ mimeType: "application/zip",
36
+ uri,
37
+ },
38
+ ],
39
+ };
40
+ };
41
+ //# sourceMappingURL=zipResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipResources.js","sourceRoot":"","sources":["../../../src/tools/definitions/zipResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC;SACL,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;SACtF,QAAQ,CAAC,qDAAqD,CAAC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI;IACJ,WAAW,EACT,uJAAuJ;IACzJ,WAAW,EAAE,YAAY,CAAC,MAAM,CAAc;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,IAAI,EAAE,EAAE;IACjD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IAExB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,+BAA+B,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAEzF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE,iBAAiB;gBAC3B,GAAG;aACJ;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { ToolHandlerContext, ToolHandlerExtra } from "./types.js";
3
+ export type { ToolHandlerContext } from "./types.js";
4
+ export { MCP_TINY_IMAGE } from "./constants.js";
5
+ /**
6
+ * Get all available tools based on client capabilities
7
+ */
8
+ export declare function getTools(clientCapabilities: {
9
+ roots?: boolean;
10
+ elicitation?: boolean;
11
+ }): Tool[];
12
+ /**
13
+ * Handle tool calls by dispatching to the appropriate handler
14
+ */
15
+ export declare function handleToolCall(name: string, args: Record<string, unknown> | undefined, extra: ToolHandlerExtra, context: ToolHandlerContext): Promise<{
16
+ content: unknown[];
17
+ structuredContent?: unknown;
18
+ }>;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAA+B,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkBpG,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAkChD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,kBAAkB,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,EAAE,CAa/F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAQ9D"}
@@ -0,0 +1,71 @@
1
+ // Import all tool definitions
2
+ import * as echo from "./definitions/echo.js";
3
+ import * as add from "./definitions/add.js";
4
+ import * as longRunningOperation from "./definitions/longRunningOperation.js";
5
+ import * as printEnv from "./definitions/printEnv.js";
6
+ import * as sampleLlm from "./definitions/sampleLlm.js";
7
+ import * as getTinyImage from "./definitions/getTinyImage.js";
8
+ import * as annotatedMessage from "./definitions/annotatedMessage.js";
9
+ import * as getResourceReference from "./definitions/getResourceReference.js";
10
+ import * as getResourceLinks from "./definitions/getResourceLinks.js";
11
+ import * as structuredContent from "./definitions/structuredContent.js";
12
+ import * as zipResources from "./definitions/zipResources.js";
13
+ import * as listRoots from "./definitions/listRoots.js";
14
+ import * as elicitation from "./definitions/elicitation.js";
15
+ // Re-export constants
16
+ export { MCP_TINY_IMAGE } from "./constants.js";
17
+ // Tool registry - maps tool names to their handlers
18
+ const toolRegistry = new Map([
19
+ [echo.name, echo.handler],
20
+ [add.name, add.handler],
21
+ [longRunningOperation.name, longRunningOperation.handler],
22
+ [printEnv.name, printEnv.handler],
23
+ [sampleLlm.name, sampleLlm.handler],
24
+ [getTinyImage.name, getTinyImage.handler],
25
+ [annotatedMessage.name, annotatedMessage.handler],
26
+ [getResourceReference.name, getResourceReference.handler],
27
+ [getResourceLinks.name, getResourceLinks.handler],
28
+ [structuredContent.name, structuredContent.handler],
29
+ [zipResources.name, zipResources.handler],
30
+ [listRoots.name, listRoots.handler],
31
+ [elicitation.name, elicitation.handler],
32
+ ]);
33
+ // Base tools that are always available
34
+ const baseToolDefinitions = [
35
+ echo.definition,
36
+ add.definition,
37
+ longRunningOperation.definition,
38
+ printEnv.definition,
39
+ sampleLlm.definition,
40
+ getTinyImage.definition,
41
+ annotatedMessage.definition,
42
+ getResourceReference.definition,
43
+ getResourceLinks.definition,
44
+ structuredContent.definition,
45
+ zipResources.definition,
46
+ ];
47
+ /**
48
+ * Get all available tools based on client capabilities
49
+ */
50
+ export function getTools(clientCapabilities) {
51
+ const tools = [...baseToolDefinitions];
52
+ // Add conditional tools based on client capabilities
53
+ if (clientCapabilities.roots) {
54
+ tools.push(listRoots.definition);
55
+ }
56
+ if (clientCapabilities.elicitation) {
57
+ tools.push(elicitation.definition);
58
+ }
59
+ return tools;
60
+ }
61
+ /**
62
+ * Handle tool calls by dispatching to the appropriate handler
63
+ */
64
+ export async function handleToolCall(name, args, extra, context) {
65
+ const handler = toolRegistry.get(name);
66
+ if (!handler) {
67
+ throw new Error(`Unknown tool: ${name}`);
68
+ }
69
+ return handler(args, extra, context);
70
+ }
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import type { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
3
+ import type { Resource, ServerNotification, ServerRequest, Tool } from "@modelcontextprotocol/sdk/types.js";
4
+ export type ToolInput = Tool["inputSchema"];
5
+ export type ToolOutput = Tool["outputSchema"];
6
+ export interface ToolHandlerContext {
7
+ server: Server;
8
+ allResources: Resource[];
9
+ currentRoots: {
10
+ uri: string;
11
+ name?: string;
12
+ }[];
13
+ clientSupportsRoots: boolean;
14
+ sessionId?: string;
15
+ }
16
+ export type ToolHandlerExtra = RequestHandlerExtra<ServerRequest, ServerNotification>;
17
+ export type ToolResult = {
18
+ content: unknown[];
19
+ structuredContent?: unknown;
20
+ };
21
+ export interface ToolDefinition {
22
+ name: string;
23
+ description: string;
24
+ inputSchema: ToolInput;
25
+ outputSchema?: ToolOutput;
26
+ }
27
+ export type ToolHandler = (args: Record<string, unknown> | undefined, extra: ToolHandlerExtra, context: ToolHandlerContext) => Promise<ToolResult>;
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,IAAI,EACL,MAAM,oCAAoC,CAAC;AAE5C,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,QAAQ,EAAE,CAAC;IACzB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAEtF,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
2
+ import express from "express";
3
+ import { createServer } from "../server/index.js";
4
+ import cors from "cors";
5
+ import { transportLogger } from "../logger.js";
6
+ const log = transportLogger.child({ transport: "sse" });
7
+ log.info("Starting SSE server...");
8
+ const app = express();
9
+ app.use(cors({
10
+ origin: "*", // use "*" with caution in production
11
+ methods: "GET,POST",
12
+ preflightContinue: false,
13
+ optionsSuccessStatus: 204,
14
+ })); // Enable CORS for all routes so Inspector can connect
15
+ const transports = new Map();
16
+ app.get("/sse", async (req, res) => {
17
+ let transport;
18
+ const { server, cleanup, startNotificationIntervals } = createServer();
19
+ if (req?.query?.sessionId) {
20
+ const sessionId = req?.query?.sessionId;
21
+ transport = transports.get(sessionId);
22
+ log.warn({ sessionId: transport.sessionId }, "Client reconnecting - this shouldn't happen when client has a sessionId");
23
+ }
24
+ else {
25
+ // Create and store transport for new session
26
+ transport = new SSEServerTransport("/message", res);
27
+ transports.set(transport.sessionId, transport);
28
+ // Connect server to transport
29
+ await server.connect(transport);
30
+ log.info({ sessionId: transport.sessionId }, "Client connected");
31
+ // Start notification intervals after client connects
32
+ startNotificationIntervals(transport.sessionId);
33
+ // Handle close of connection
34
+ server.server.onclose = async () => {
35
+ log.info({ sessionId: transport.sessionId }, "Client disconnected");
36
+ transports.delete(transport.sessionId);
37
+ await cleanup();
38
+ };
39
+ }
40
+ });
41
+ app.post("/message", async (req, res) => {
42
+ const sessionId = req?.query?.sessionId;
43
+ const transport = transports.get(sessionId);
44
+ if (transport) {
45
+ log.debug({ sessionId }, "Client message received");
46
+ await transport.handlePostMessage(req, res);
47
+ }
48
+ else {
49
+ log.warn({ sessionId }, "No transport found for sessionId");
50
+ }
51
+ });
52
+ const PORT = process.env.PORT || 3001;
53
+ app.listen(PORT, () => {
54
+ log.info({ port: PORT }, "SSE server is running");
55
+ });
56
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { createServer } from "../server/index.js";
4
+ import { transportLogger } from "../logger.js";
5
+ const log = transportLogger.child({ transport: "stdio" });
6
+ log.info("Starting default (STDIO) server...");
7
+ async function main() {
8
+ const transport = new StdioServerTransport();
9
+ const { server, cleanup, startNotificationIntervals } = createServer();
10
+ // Cleanup when client disconnects
11
+ server.server.onclose = async () => {
12
+ log.info("Client disconnected, cleaning up");
13
+ await cleanup();
14
+ process.exit(0);
15
+ };
16
+ await server.connect(transport);
17
+ startNotificationIntervals();
18
+ // Cleanup on exit
19
+ process.on("SIGINT", async () => {
20
+ log.info("Received SIGINT, shutting down");
21
+ await server.close();
22
+ });
23
+ }
24
+ main().catch((error) => {
25
+ log.error({ err: error }, "Server error");
26
+ process.exit(1);
27
+ });
28
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAE1D,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,YAAY,EAAE,CAAC;IAEvE,kCAAkC;IAClC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;QACjC,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC7C,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,0BAA0B,EAAE,CAAC;IAE7B,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}