@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,99 @@
1
+ import { Resource } from "@modelcontextprotocol/sdk/types.js";
2
+ /**
3
+ * Prompt Names Enum
4
+ * Add new prompt names here when creating new prompts
5
+ */
6
+ export declare enum PromptName {
7
+ SIMPLE = "simple_prompt",
8
+ COMPLEX = "complex_prompt",
9
+ RESOURCE = "resource_prompt"
10
+ }
11
+ export declare const EXAMPLE_COMPLETIONS: {
12
+ style: string[];
13
+ temperature: string[];
14
+ resourceId: string[];
15
+ };
16
+ export declare function getPrompts(): ({
17
+ name: PromptName;
18
+ description: string;
19
+ arguments?: undefined;
20
+ } | {
21
+ name: PromptName;
22
+ description: string;
23
+ arguments: {
24
+ name: string;
25
+ description: string;
26
+ required: boolean;
27
+ }[];
28
+ })[];
29
+ /**
30
+ * Get a specific prompt by name
31
+ */
32
+ export declare function getPrompt(name: string, args: Record<string, string> | undefined, allResources: Resource[]): {
33
+ messages: ({
34
+ role: string;
35
+ content: {
36
+ type: string;
37
+ text: string;
38
+ data?: undefined;
39
+ mimeType?: undefined;
40
+ };
41
+ } | {
42
+ role: string;
43
+ content: {
44
+ type: string;
45
+ data: string;
46
+ mimeType: string;
47
+ text?: undefined;
48
+ };
49
+ })[];
50
+ } | {
51
+ messages: ({
52
+ role: string;
53
+ content: {
54
+ type: string;
55
+ text: string;
56
+ resource?: undefined;
57
+ };
58
+ } | {
59
+ role: string;
60
+ content: {
61
+ type: string;
62
+ resource: {
63
+ uri: string;
64
+ name: string;
65
+ description?: string | undefined;
66
+ mimeType?: string | undefined;
67
+ annotations?: {
68
+ audience?: ("user" | "assistant")[] | undefined;
69
+ priority?: number | undefined;
70
+ lastModified?: string | undefined;
71
+ } | undefined;
72
+ _meta?: {
73
+ [x: string]: unknown;
74
+ } | undefined;
75
+ icons?: {
76
+ src: string;
77
+ mimeType?: string | undefined;
78
+ sizes?: string[] | undefined;
79
+ theme?: "light" | "dark" | undefined;
80
+ }[] | undefined;
81
+ title?: string | undefined;
82
+ };
83
+ text?: undefined;
84
+ };
85
+ })[];
86
+ };
87
+ /**
88
+ * Handle completion requests for prompts
89
+ */
90
+ export declare function handlePromptCompletion(argumentName: string, value: string): {
91
+ values: never[];
92
+ hasMore?: undefined;
93
+ total?: undefined;
94
+ } | {
95
+ values: string[];
96
+ hasMore: boolean;
97
+ total: number;
98
+ };
99
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAG9D;;;GAGG;AACH,oBAAY,UAAU;IACpB,MAAM,kBAAkB;IACxB,OAAO,mBAAmB;IAC1B,QAAQ,oBAAoB;CAC7B;AAED,eAAO,MAAM,mBAAmB;;;;CAI/B,CAAC;AAEF,wBAAgB,UAAU;;;;;;;;;;;;KAkCzB;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACxC,YAAY,EAAE,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6EzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;;;;;EAMzE"}
@@ -0,0 +1,135 @@
1
+ import { MCP_TINY_IMAGE } from "../tools/constants.js";
2
+ /**
3
+ * Prompt Names Enum
4
+ * Add new prompt names here when creating new prompts
5
+ */
6
+ export var PromptName;
7
+ (function (PromptName) {
8
+ PromptName["SIMPLE"] = "simple_prompt";
9
+ PromptName["COMPLEX"] = "complex_prompt";
10
+ PromptName["RESOURCE"] = "resource_prompt";
11
+ })(PromptName || (PromptName = {}));
12
+ export const EXAMPLE_COMPLETIONS = {
13
+ style: ["casual", "formal", "technical", "friendly"],
14
+ temperature: ["0", "0.5", "0.7", "1.0"],
15
+ resourceId: ["1", "2", "3", "4", "5"],
16
+ };
17
+ export function getPrompts() {
18
+ return [
19
+ {
20
+ name: PromptName.SIMPLE,
21
+ description: "A prompt without arguments",
22
+ },
23
+ {
24
+ name: PromptName.COMPLEX,
25
+ description: "A prompt with arguments",
26
+ arguments: [
27
+ {
28
+ name: "temperature",
29
+ description: "Temperature setting",
30
+ required: true,
31
+ },
32
+ {
33
+ name: "style",
34
+ description: "Output style",
35
+ required: false,
36
+ },
37
+ ],
38
+ },
39
+ {
40
+ name: PromptName.RESOURCE,
41
+ description: "A prompt that includes an embedded resource reference",
42
+ arguments: [
43
+ {
44
+ name: "resourceId",
45
+ description: "Resource ID to include (1-100)",
46
+ required: true,
47
+ },
48
+ ],
49
+ },
50
+ ];
51
+ }
52
+ /**
53
+ * Get a specific prompt by name
54
+ */
55
+ export function getPrompt(name, args, allResources) {
56
+ if (name === PromptName.SIMPLE) {
57
+ return {
58
+ messages: [
59
+ {
60
+ role: "user",
61
+ content: {
62
+ type: "text",
63
+ text: "This is a simple prompt without arguments.",
64
+ },
65
+ },
66
+ ],
67
+ };
68
+ }
69
+ if (name === PromptName.COMPLEX) {
70
+ return {
71
+ messages: [
72
+ {
73
+ role: "user",
74
+ content: {
75
+ type: "text",
76
+ text: `This is a complex prompt with arguments: temperature=${args?.temperature}, style=${args?.style}`,
77
+ },
78
+ },
79
+ {
80
+ role: "assistant",
81
+ content: {
82
+ type: "text",
83
+ text: "I understand. You've provided a complex prompt with temperature and style arguments. How would you like me to proceed?",
84
+ },
85
+ },
86
+ {
87
+ role: "user",
88
+ content: {
89
+ type: "image",
90
+ data: MCP_TINY_IMAGE,
91
+ mimeType: "image/png",
92
+ },
93
+ },
94
+ ],
95
+ };
96
+ }
97
+ if (name === PromptName.RESOURCE) {
98
+ const resourceId = parseInt(args?.resourceId, 10);
99
+ if (isNaN(resourceId) || resourceId < 1 || resourceId > 100) {
100
+ throw new Error(`Invalid resourceId: ${args?.resourceId}. Must be a number between 1 and 100.`);
101
+ }
102
+ const resourceIndex = resourceId - 1;
103
+ const resource = allResources[resourceIndex];
104
+ return {
105
+ messages: [
106
+ {
107
+ role: "user",
108
+ content: {
109
+ type: "text",
110
+ text: `This prompt includes Resource ${resourceId}. Please analyze the following resource:`,
111
+ },
112
+ },
113
+ {
114
+ role: "user",
115
+ content: {
116
+ type: "resource",
117
+ resource: resource,
118
+ },
119
+ },
120
+ ],
121
+ };
122
+ }
123
+ throw new Error(`Unknown prompt: ${name}`);
124
+ }
125
+ /**
126
+ * Handle completion requests for prompts
127
+ */
128
+ export function handlePromptCompletion(argumentName, value) {
129
+ const completions = EXAMPLE_COMPLETIONS[argumentName];
130
+ if (!completions)
131
+ return { values: [] };
132
+ const values = completions.filter((v) => v.startsWith(value));
133
+ return { values, hasMore: false, total: values.length };
134
+ }
135
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { Resource } from "@modelcontextprotocol/sdk/types.js";
2
+ /**
3
+ * Generate all static resources
4
+ * Add new resource generators here to extend capabilities
5
+ */
6
+ export declare function createAllResources(): Resource[];
7
+ export declare function listResources(allResources: Resource[], cursor?: string): {
8
+ resources: {
9
+ uri: string;
10
+ name: string;
11
+ description?: string | undefined;
12
+ mimeType?: string | undefined;
13
+ annotations?: {
14
+ audience?: ("user" | "assistant")[] | undefined;
15
+ priority?: number | undefined;
16
+ lastModified?: string | undefined;
17
+ } | undefined;
18
+ _meta?: {
19
+ [x: string]: unknown;
20
+ } | undefined;
21
+ icons?: {
22
+ src: string;
23
+ mimeType?: string | undefined;
24
+ sizes?: string[] | undefined;
25
+ theme?: "light" | "dark" | undefined;
26
+ }[] | undefined;
27
+ title?: string | undefined;
28
+ }[];
29
+ nextCursor: string | undefined;
30
+ };
31
+ export declare function getResourceTemplates(): {
32
+ resourceTemplates: {
33
+ uriTemplate: string;
34
+ name: string;
35
+ description: string;
36
+ }[];
37
+ };
38
+ export declare function readResource(allResources: Resource[], uri: string): {
39
+ contents: {
40
+ uri: string;
41
+ name: string;
42
+ description?: string | undefined;
43
+ mimeType?: string | undefined;
44
+ annotations?: {
45
+ audience?: ("user" | "assistant")[] | undefined;
46
+ priority?: number | undefined;
47
+ lastModified?: string | undefined;
48
+ } | undefined;
49
+ _meta?: {
50
+ [x: string]: unknown;
51
+ } | undefined;
52
+ icons?: {
53
+ src: string;
54
+ mimeType?: string | undefined;
55
+ sizes?: string[] | undefined;
56
+ theme?: "light" | "dark" | undefined;
57
+ }[] | undefined;
58
+ title?: string | undefined;
59
+ }[];
60
+ };
61
+ export declare function handleResourceCompletion(uri: string, value: string): {
62
+ values: never[];
63
+ hasMore?: undefined;
64
+ total?: undefined;
65
+ } | {
66
+ values: string[];
67
+ hasMore: boolean;
68
+ total: number;
69
+ };
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,EAAE,CAoB/C;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;EAsBtE;AAED,wBAAgB,oBAAoB;;;;;;EAUnC;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;EAYjE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;;;;;EAQlE"}
@@ -0,0 +1,79 @@
1
+ const PAGE_SIZE = 10;
2
+ /**
3
+ * Generate all static resources
4
+ * Add new resource generators here to extend capabilities
5
+ */
6
+ export function createAllResources() {
7
+ return Array.from({ length: 100 }, (_, i) => {
8
+ const uri = `test://static/resource/${i + 1}`;
9
+ if (i % 2 === 0) {
10
+ return {
11
+ uri,
12
+ name: `Resource ${i + 1}`,
13
+ mimeType: "text/plain",
14
+ text: `Resource ${i + 1}: This is a plaintext resource`,
15
+ };
16
+ }
17
+ else {
18
+ const buffer = Buffer.from(`Resource ${i + 1}: This is a base64 blob`);
19
+ return {
20
+ uri,
21
+ name: `Resource ${i + 1}`,
22
+ mimeType: "application/octet-stream",
23
+ blob: buffer.toString("base64"),
24
+ };
25
+ }
26
+ });
27
+ }
28
+ export function listResources(allResources, cursor) {
29
+ let startIndex = 0;
30
+ if (cursor) {
31
+ const decodedCursor = parseInt(atob(cursor), 10);
32
+ if (!isNaN(decodedCursor)) {
33
+ startIndex = decodedCursor;
34
+ }
35
+ }
36
+ const endIndex = Math.min(startIndex + PAGE_SIZE, allResources.length);
37
+ const resources = allResources.slice(startIndex, endIndex);
38
+ let nextCursor;
39
+ if (endIndex < allResources.length) {
40
+ nextCursor = btoa(endIndex.toString());
41
+ }
42
+ return {
43
+ resources,
44
+ nextCursor,
45
+ };
46
+ }
47
+ export function getResourceTemplates() {
48
+ return {
49
+ resourceTemplates: [
50
+ {
51
+ uriTemplate: "test://static/resource/{id}",
52
+ name: "Static Resource",
53
+ description: "A static resource with a numeric ID",
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ export function readResource(allResources, uri) {
59
+ if (uri.startsWith("test://static/resource/")) {
60
+ const index = parseInt(uri.split("/").pop() ?? "", 10) - 1;
61
+ if (index >= 0 && index < allResources.length) {
62
+ const resource = allResources[index];
63
+ return {
64
+ contents: [resource],
65
+ };
66
+ }
67
+ }
68
+ throw new Error(`Unknown resource: ${uri}`);
69
+ }
70
+ export function handleResourceCompletion(uri, value) {
71
+ const resourceId = uri.split("/").pop();
72
+ if (!resourceId)
73
+ return { values: [] };
74
+ // Filter resource IDs that start with the input value
75
+ const exampleIds = ["1", "2", "3", "4", "5"];
76
+ const values = exampleIds.filter((id) => id.startsWith(value));
77
+ return { values, hasMore: false, total: values.length };
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Create and configure the MCP server
4
+ * This is the main entry point for server creation
5
+ */
6
+ export declare const createServer: () => {
7
+ server: McpServer;
8
+ cleanup: () => Promise<void>;
9
+ startNotificationIntervals: (sid?: string | undefined) => void;
10
+ };
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmDpE;;;GAGG;AACH,eAAO,MAAM,YAAY;;;uCAqCmB,MAAM,GAAG,SAAS;CAwN7D,CAAC"}
@@ -0,0 +1,234 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { CallToolRequestSchema, CompleteRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, RootsListChangedNotificationSchema, SubscribeRequestSchema, UnsubscribeRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
3
+ import { readFileSync } from "fs";
4
+ import { fileURLToPath } from "url";
5
+ import { dirname, join } from "path";
6
+ // Import modular capabilities
7
+ import { getTools, handleToolCall } from "../tools/index.js";
8
+ import { getPrompts, getPrompt, handlePromptCompletion } from "../prompts/index.js";
9
+ import { createAllResources, listResources, getResourceTemplates, readResource, handleResourceCompletion, } from "../resources/index.js";
10
+ import { serverLogger } from "../logger.js";
11
+ const log = serverLogger;
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = dirname(__filename);
14
+ // Load instructions from file (look in multiple possible locations)
15
+ let instructions;
16
+ try {
17
+ instructions = readFileSync(join(__dirname, "../../instructions.md"), "utf-8");
18
+ }
19
+ catch {
20
+ try {
21
+ instructions = readFileSync(join(__dirname, "../instructions.md"), "utf-8");
22
+ }
23
+ catch {
24
+ instructions =
25
+ "MCP Everything Server - A demonstration server showcasing all MCP capabilities.";
26
+ }
27
+ }
28
+ /**
29
+ * Create and configure the MCP server
30
+ * This is the main entry point for server creation
31
+ */
32
+ export const createServer = () => {
33
+ const mcpServer = new McpServer({
34
+ name: "example-servers/everything",
35
+ version: "1.0.0",
36
+ }, {
37
+ capabilities: {
38
+ prompts: {},
39
+ resources: { subscribe: true },
40
+ tools: {},
41
+ logging: {},
42
+ completions: {},
43
+ },
44
+ instructions,
45
+ });
46
+ // Access the underlying Server for low-level request handlers
47
+ const server = mcpServer.server;
48
+ // Initialize resources
49
+ const allResources = createAllResources();
50
+ // State management
51
+ const subscriptions = new Set();
52
+ let subsUpdateInterval;
53
+ let stdErrUpdateInterval;
54
+ let logsUpdateInterval;
55
+ let clientCapabilities;
56
+ // Roots state management
57
+ let currentRoots = [];
58
+ let clientSupportsRoots = false;
59
+ let sessionId;
60
+ // Function to start notification intervals when a client connects
61
+ const startNotificationIntervals = (sid) => {
62
+ sessionId = sid;
63
+ if (!subsUpdateInterval) {
64
+ subsUpdateInterval = setInterval(() => {
65
+ for (const uri of subscriptions) {
66
+ server.notification({
67
+ method: "notifications/resources/updated",
68
+ params: { uri },
69
+ });
70
+ }
71
+ }, 10000);
72
+ }
73
+ const maybeAppendSessionId = sessionId ? ` - SessionId ${sessionId}` : "";
74
+ const messages = [
75
+ { level: "debug", data: `Debug-level message${maybeAppendSessionId}` },
76
+ { level: "info", data: `Info-level message${maybeAppendSessionId}` },
77
+ { level: "notice", data: `Notice-level message${maybeAppendSessionId}` },
78
+ { level: "warning", data: `Warning-level message${maybeAppendSessionId}` },
79
+ { level: "error", data: `Error-level message${maybeAppendSessionId}` },
80
+ { level: "critical", data: `Critical-level message${maybeAppendSessionId}` },
81
+ { level: "alert", data: `Alert level-message${maybeAppendSessionId}` },
82
+ { level: "emergency", data: `Emergency-level message${maybeAppendSessionId}` },
83
+ ];
84
+ if (!logsUpdateInterval) {
85
+ log.debug("Starting logs update interval");
86
+ logsUpdateInterval = setInterval(async () => {
87
+ await server.sendLoggingMessage(messages[Math.floor(Math.random() * messages.length)], sessionId);
88
+ }, 15000);
89
+ }
90
+ };
91
+ // ============================================
92
+ // Resource Handlers
93
+ // ============================================
94
+ server.setRequestHandler(ListResourcesRequestSchema, async (request) => {
95
+ return listResources(allResources, request.params?.cursor);
96
+ });
97
+ server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {
98
+ return getResourceTemplates();
99
+ });
100
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
101
+ return readResource(allResources, request.params.uri);
102
+ });
103
+ server.setRequestHandler(SubscribeRequestSchema, async (request) => {
104
+ const { uri } = request.params;
105
+ subscriptions.add(uri);
106
+ return {};
107
+ });
108
+ server.setRequestHandler(UnsubscribeRequestSchema, async (request) => {
109
+ subscriptions.delete(request.params.uri);
110
+ return {};
111
+ });
112
+ // ============================================
113
+ // Prompt Handlers
114
+ // ============================================
115
+ server.setRequestHandler(ListPromptsRequestSchema, async () => {
116
+ return { prompts: getPrompts() };
117
+ });
118
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
119
+ const { name, arguments: args } = request.params;
120
+ return getPrompt(name, args, allResources);
121
+ });
122
+ // ============================================
123
+ // Tool Handlers
124
+ // ============================================
125
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
126
+ return {
127
+ tools: getTools({
128
+ roots: clientCapabilities?.roots !== undefined,
129
+ elicitation: clientCapabilities?.elicitation !== undefined,
130
+ }),
131
+ };
132
+ });
133
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
134
+ const { name, arguments: args } = request.params;
135
+ const context = {
136
+ server,
137
+ allResources,
138
+ currentRoots,
139
+ clientSupportsRoots,
140
+ sessionId,
141
+ };
142
+ return handleToolCall(name, args, extra, context);
143
+ });
144
+ // ============================================
145
+ // Completion Handler
146
+ // ============================================
147
+ server.setRequestHandler(CompleteRequestSchema, async (request) => {
148
+ const { ref, argument } = request.params;
149
+ if (ref.type === "ref/resource") {
150
+ return { completion: handleResourceCompletion(ref.uri, argument.value) };
151
+ }
152
+ if (ref.type === "ref/prompt") {
153
+ return { completion: handlePromptCompletion(argument.name, argument.value) };
154
+ }
155
+ throw new Error(`Unknown reference type`);
156
+ });
157
+ // ============================================
158
+ // Roots Protocol Handlers
159
+ // ============================================
160
+ server.setNotificationHandler(RootsListChangedNotificationSchema, async () => {
161
+ try {
162
+ // Request the updated roots list from the client
163
+ const response = await server.listRoots();
164
+ if (response && "roots" in response) {
165
+ currentRoots = response.roots;
166
+ // Log the roots update for demonstration
167
+ await server.sendLoggingMessage({
168
+ level: "info",
169
+ logger: "test-mcp-server",
170
+ data: `Roots updated: ${currentRoots.length} root(s) received from client`,
171
+ }, sessionId);
172
+ }
173
+ }
174
+ catch (error) {
175
+ await server.sendLoggingMessage({
176
+ level: "error",
177
+ logger: "test-mcp-server",
178
+ data: `Failed to request roots from client: ${error instanceof Error ? error.message : String(error)}`,
179
+ }, sessionId);
180
+ }
181
+ });
182
+ // Handle post-initialization setup for roots
183
+ server.oninitialized = async () => {
184
+ clientCapabilities = server.getClientCapabilities();
185
+ if (clientCapabilities?.roots) {
186
+ clientSupportsRoots = true;
187
+ try {
188
+ const response = await server.listRoots();
189
+ if (response && "roots" in response) {
190
+ currentRoots = response.roots;
191
+ await server.sendLoggingMessage({
192
+ level: "info",
193
+ logger: "test-mcp-server",
194
+ data: `Initial roots received: ${currentRoots.length} root(s) from client`,
195
+ }, sessionId);
196
+ }
197
+ else {
198
+ await server.sendLoggingMessage({
199
+ level: "warning",
200
+ logger: "test-mcp-server",
201
+ data: "Client returned no roots set",
202
+ }, sessionId);
203
+ }
204
+ }
205
+ catch (error) {
206
+ await server.sendLoggingMessage({
207
+ level: "error",
208
+ logger: "test-mcp-server",
209
+ data: `Failed to request initial roots from client: ${error instanceof Error ? error.message : String(error)}`,
210
+ }, sessionId);
211
+ }
212
+ }
213
+ else {
214
+ await server.sendLoggingMessage({
215
+ level: "info",
216
+ logger: "test-mcp-server",
217
+ data: "Client does not support MCP roots protocol",
218
+ }, sessionId);
219
+ }
220
+ };
221
+ // ============================================
222
+ // Cleanup
223
+ // ============================================
224
+ const cleanup = async () => {
225
+ if (subsUpdateInterval)
226
+ clearInterval(subsUpdateInterval);
227
+ if (logsUpdateInterval)
228
+ clearInterval(logsUpdateInterval);
229
+ if (stdErrUpdateInterval)
230
+ clearInterval(stdErrUpdateInterval);
231
+ };
232
+ return { server: mcpServer, cleanup, startNotificationIntervals };
233
+ };
234
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}