@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,37 @@
1
+ /**
2
+ * Unified Streamable HTTP Transport Server
3
+ *
4
+ * This module provides a configurable Streamable HTTP transport that can
5
+ * optionally enable OAuth2 authentication.
6
+ *
7
+ * Usage:
8
+ * // As a module:
9
+ * import { startStreamableHttpServer } from './streamableHttpServer.js';
10
+ * startStreamableHttpServer({ useAuth: true });
11
+ *
12
+ * // From command line (via index.ts):
13
+ * node dist/index.js streamableHttp # No auth
14
+ * node dist/index.js streamableHttp --auth # With OAuth2
15
+ */
16
+ export interface StreamableHttpServerOptions {
17
+ /**
18
+ * Enable OAuth2 authentication for MCP endpoints.
19
+ * When true, clients must provide a valid Bearer token.
20
+ * @default false
21
+ */
22
+ useAuth?: boolean;
23
+ /**
24
+ * Port to listen on.
25
+ * @default process.env.PORT || 3001
26
+ */
27
+ port?: number;
28
+ }
29
+ /**
30
+ * Parse command line arguments for streamableHttp options.
31
+ */
32
+ export declare function parseStreamableHttpArgs(args: string[]): StreamableHttpServerOptions;
33
+ /**
34
+ * Starts the Streamable HTTP server with optional OAuth2 authentication.
35
+ */
36
+ export declare function startStreamableHttpServer(options?: StreamableHttpServerOptions): Promise<void>;
37
+ //# sourceMappingURL=streamableHttpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamableHttpServer.d.ts","sourceRoot":"","sources":["../../src/transports/streamableHttpServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,2BAA2B,CAMnF;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,IAAI,CAAC,CAmPf"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Unified Streamable HTTP Transport Server
3
+ *
4
+ * This module provides a configurable Streamable HTTP transport that can
5
+ * optionally enable OAuth2 authentication.
6
+ *
7
+ * Usage:
8
+ * // As a module:
9
+ * import { startStreamableHttpServer } from './streamableHttpServer.js';
10
+ * startStreamableHttpServer({ useAuth: true });
11
+ *
12
+ * // From command line (via index.ts):
13
+ * node dist/index.js streamableHttp # No auth
14
+ * node dist/index.js streamableHttp --auth # With OAuth2
15
+ */
16
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
17
+ import { InMemoryEventStore } from "@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js";
18
+ import express from "express";
19
+ import { createServer } from "../server/index.js";
20
+ import { randomUUID } from "node:crypto";
21
+ import cors from "cors";
22
+ import { transportLogger } from "../logger.js";
23
+ /**
24
+ * Parse command line arguments for streamableHttp options.
25
+ */
26
+ export function parseStreamableHttpArgs(args) {
27
+ const useAuth = args.includes("--auth");
28
+ const portArg = args.find((arg) => arg.startsWith("--port="));
29
+ const port = portArg ? parseInt(portArg.split("=")[1], 10) : undefined;
30
+ return { useAuth, port };
31
+ }
32
+ /**
33
+ * Starts the Streamable HTTP server with optional OAuth2 authentication.
34
+ */
35
+ export async function startStreamableHttpServer(options = {}) {
36
+ const { useAuth = false, port = parseInt(process.env.PORT || "3001", 10) } = options;
37
+ const transportName = useAuth ? "streamableHttpWithAuth" : "streamableHttp";
38
+ const log = transportLogger.child({ transport: transportName });
39
+ log.info({ useAuth }, "Starting Streamable HTTP server...");
40
+ const app = express();
41
+ // CORS configuration
42
+ app.use(cors({
43
+ origin: "*", // use "*" with caution in production
44
+ methods: "GET,POST,DELETE",
45
+ preflightContinue: false,
46
+ optionsSuccessStatus: 204,
47
+ exposedHeaders: ["mcp-session-id", "last-event-id", "mcp-protocol-version"],
48
+ }));
49
+ // Conditionally add OAuth routes and middleware
50
+ let authMiddleware = (_req, _res, next) => next(); // No-op by default
51
+ let oauthConfig;
52
+ if (useAuth) {
53
+ // Dynamically import OAuth module only when needed
54
+ const { oauthRouter, requireAuth, OAUTH_CONFIG } = await import("../oauth/index.js");
55
+ // Mount OAuth routes
56
+ app.use(oauthRouter);
57
+ // Use the requireAuth middleware
58
+ authMiddleware = requireAuth;
59
+ oauthConfig = {
60
+ clientId: OAUTH_CONFIG.clientId,
61
+ clientSecret: OAUTH_CONFIG.clientSecret,
62
+ };
63
+ log.info("OAuth2 authentication enabled");
64
+ }
65
+ // Session transport store
66
+ const transports = new Map();
67
+ // ============================================
68
+ // MCP Endpoints
69
+ // ============================================
70
+ app.post("/mcp", authMiddleware, async (req, res) => {
71
+ log.debug("Received MCP POST request");
72
+ try {
73
+ const sessionId = req.headers["mcp-session-id"];
74
+ let transport;
75
+ if (sessionId && transports.has(sessionId)) {
76
+ // Reuse existing transport
77
+ transport = transports.get(sessionId);
78
+ }
79
+ else if (!sessionId) {
80
+ // New session initialization
81
+ const { server, cleanup, startNotificationIntervals } = createServer();
82
+ const eventStore = new InMemoryEventStore();
83
+ // Generate session ID upfront so we can store the transport immediately
84
+ const newSessionId = randomUUID();
85
+ transport = new StreamableHTTPServerTransport({
86
+ sessionIdGenerator: () => newSessionId,
87
+ eventStore,
88
+ onsessioninitialized: (sid) => {
89
+ log.info({ sessionId: sid }, "Session initialized callback");
90
+ },
91
+ });
92
+ // Store transport immediately with the known session ID
93
+ transports.set(newSessionId, transport);
94
+ log.info({ sessionId: newSessionId }, "Transport stored in session map");
95
+ server.server.onclose = async () => {
96
+ const sid = transport.sessionId;
97
+ if (sid && transports.has(sid)) {
98
+ log.info({ sessionId: sid }, "Transport closed");
99
+ transports.delete(sid);
100
+ await cleanup();
101
+ }
102
+ };
103
+ await server.connect(transport);
104
+ await transport.handleRequest(req, res);
105
+ startNotificationIntervals(transport.sessionId);
106
+ return;
107
+ }
108
+ else {
109
+ // Session ID provided but not found
110
+ log.warn({
111
+ sessionId,
112
+ hasSession: transports.has(sessionId),
113
+ activeSessions: Array.from(transports.keys()),
114
+ }, "POST /mcp - Session ID provided but not found");
115
+ res.status(400).json({
116
+ jsonrpc: "2.0",
117
+ error: {
118
+ code: -32000,
119
+ message: `Bad Request: Session ID '${sessionId}' not found on server`,
120
+ },
121
+ id: req?.body?.id,
122
+ });
123
+ return;
124
+ }
125
+ await transport.handleRequest(req, res);
126
+ }
127
+ catch (error) {
128
+ log.error({ err: error }, "Error handling MCP request");
129
+ if (!res.headersSent) {
130
+ res.status(500).json({
131
+ jsonrpc: "2.0",
132
+ error: {
133
+ code: -32603,
134
+ message: "Internal server error",
135
+ },
136
+ id: req?.body?.id,
137
+ });
138
+ }
139
+ }
140
+ });
141
+ app.get("/mcp", authMiddleware, async (req, res) => {
142
+ log.debug("Received MCP GET request");
143
+ const sessionId = req.headers["mcp-session-id"];
144
+ if (!sessionId || !transports.has(sessionId)) {
145
+ log.warn({
146
+ sessionId: sessionId || "(not provided)",
147
+ hasSession: sessionId ? transports.has(sessionId) : false,
148
+ activeSessions: Array.from(transports.keys()),
149
+ }, "GET /mcp - Invalid or missing session ID");
150
+ res.status(400).json({
151
+ jsonrpc: "2.0",
152
+ error: {
153
+ code: -32000,
154
+ message: `Bad Request: No valid session ID provided. Got: ${sessionId || "(none)"}`,
155
+ },
156
+ id: req?.body?.id,
157
+ });
158
+ return;
159
+ }
160
+ const lastEventId = req.headers["last-event-id"];
161
+ if (lastEventId) {
162
+ log.debug({ sessionId, lastEventId }, "Client reconnecting");
163
+ }
164
+ else {
165
+ log.debug({ sessionId }, "Establishing new SSE stream");
166
+ }
167
+ const transport = transports.get(sessionId);
168
+ await transport.handleRequest(req, res);
169
+ });
170
+ app.delete("/mcp", authMiddleware, async (req, res) => {
171
+ const sessionId = req.headers["mcp-session-id"];
172
+ if (!sessionId || !transports.has(sessionId)) {
173
+ res.status(400).json({
174
+ jsonrpc: "2.0",
175
+ error: {
176
+ code: -32000,
177
+ message: "Bad Request: No valid session ID provided",
178
+ },
179
+ id: req?.body?.id,
180
+ });
181
+ return;
182
+ }
183
+ log.info({ sessionId }, "Received session termination request");
184
+ try {
185
+ const transport = transports.get(sessionId);
186
+ await transport.handleRequest(req, res);
187
+ }
188
+ catch (error) {
189
+ log.error({ err: error, sessionId }, "Error handling session termination");
190
+ if (!res.headersSent) {
191
+ res.status(500).json({
192
+ jsonrpc: "2.0",
193
+ error: {
194
+ code: -32603,
195
+ message: "Error handling session termination",
196
+ },
197
+ id: req?.body?.id,
198
+ });
199
+ }
200
+ }
201
+ });
202
+ // ============================================
203
+ // Start Server
204
+ // ============================================
205
+ app.listen(port, () => {
206
+ const serverInfo = {
207
+ port,
208
+ mcp: {
209
+ endpoint: "/mcp",
210
+ authentication: useAuth ? "Bearer token required" : "None",
211
+ },
212
+ };
213
+ if (useAuth && oauthConfig) {
214
+ serverInfo.wellKnown = "/.well-known/oauth-authorization-server";
215
+ serverInfo.oauth = {
216
+ registerEndpoint: "/oauth/register",
217
+ tokenEndpoint: "/oauth/token",
218
+ introspectEndpoint: "/oauth/introspect",
219
+ revokeEndpoint: "/oauth/revoke",
220
+ };
221
+ serverInfo.testCredentials = oauthConfig;
222
+ }
223
+ log.info(serverInfo, `MCP Streamable HTTP Server${useAuth ? " with OAuth2" : ""} started`);
224
+ });
225
+ // Handle server shutdown
226
+ process.on("SIGINT", async () => {
227
+ log.info("Shutting down server...");
228
+ for (const sessionId of transports.keys()) {
229
+ try {
230
+ log.debug({ sessionId }, "Closing transport");
231
+ await transports.get(sessionId).close();
232
+ transports.delete(sessionId);
233
+ }
234
+ catch (error) {
235
+ log.error({ err: error, sessionId }, "Error closing transport");
236
+ }
237
+ }
238
+ log.info("Server shutdown complete");
239
+ process.exit(0);
240
+ });
241
+ }
242
+ //# sourceMappingURL=streamableHttpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamableHttpServer.js","sourceRoot":"","sources":["../../src/transports/streamableHttpServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AACrG,OAAO,OAA8C,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAiB/C;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAuC,EAAE;IAEzC,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;IAErF,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC5E,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAEhE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,oCAAoC,CAAC,CAAC;IAE5D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,qBAAqB;IACrB,GAAG,CAAC,GAAG,CACL,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,qCAAqC;QAClD,OAAO,EAAE,iBAAiB;QAC1B,iBAAiB,EAAE,KAAK;QACxB,oBAAoB,EAAE,GAAG;QACzB,cAAc,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,sBAAsB,CAAC;KAC5E,CAAC,CACH,CAAC;IAEF,gDAAgD;IAChD,IAAI,cAAc,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,mBAAmB;IACtF,IAAI,WAAmE,CAAC;IAExE,IAAI,OAAO,EAAE,CAAC;QACZ,mDAAmD;QACnD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAErF,qBAAqB;QACrB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAErB,iCAAiC;QACjC,cAAc,GAAG,WAAW,CAAC;QAC7B,WAAW,GAAG;YACZ,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,YAAY,EAAE,YAAY,CAAC,YAAY;SACxC,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5C,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAA+C,IAAI,GAAG,EAAE,CAAC;IAEzE,+CAA+C;IAC/C,gBAAgB;IAChB,+CAA+C;IAE/C,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACrE,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YACtE,IAAI,SAAwC,CAAC;YAE7C,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3C,2BAA2B;gBAC3B,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YACzC,CAAC;iBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtB,6BAA6B;gBAC7B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,YAAY,EAAE,CAAC;gBAEvE,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;gBAE5C,wEAAwE;gBACxE,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;gBAElC,SAAS,GAAG,IAAI,6BAA6B,CAAC;oBAC5C,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY;oBACtC,UAAU;oBACV,oBAAoB,EAAE,CAAC,GAAW,EAAE,EAAE;wBACpC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;oBAC/D,CAAC;iBACF,CAAC,CAAC;gBAEH,wDAAwD;gBACxD,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBACxC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,iCAAiC,CAAC,CAAC;gBAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;oBACjC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;oBAChC,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;wBACjD,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACvB,MAAM,OAAO,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxC,0BAA0B,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,GAAG,CAAC,IAAI,CACN;oBACE,SAAS;oBACT,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;oBACrC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;iBAC9C,EACD,+CAA+C,CAChD,CAAC;gBACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,CAAC,KAAK;wBACZ,OAAO,EAAE,4BAA4B,SAAS,uBAAuB;qBACtE;oBACD,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;iBAClB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,CAAC,KAAK;wBACZ,OAAO,EAAE,uBAAuB;qBACjC;oBACD,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACpE,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;QAEtE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,IAAI,CACN;gBACE,SAAS,EAAE,SAAS,IAAI,gBAAgB;gBACxC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;gBACzD,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;aAC9C,EACD,0CAA0C,CAC3C,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,mDAAmD,SAAS,IAAI,QAAQ,EAAE;iBACpF;gBACD,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;aAClB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAuB,CAAC;QACvE,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,6BAA6B,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,SAAU,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACvE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;QAEtE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,2CAA2C;iBACrD;gBACD,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;aAClB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,sCAAsC,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,SAAU,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,oCAAoC,CAAC,CAAC;YAC3E,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,CAAC,KAAK;wBACZ,OAAO,EAAE,oCAAoC;qBAC9C;oBACD,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,eAAe;IACf,+CAA+C;IAE/C,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACpB,MAAM,UAAU,GAA4B;YAC1C,IAAI;YACJ,GAAG,EAAE;gBACH,QAAQ,EAAE,MAAM;gBAChB,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM;aAC3D;SACF,CAAC;QAEF,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;YAC3B,UAAU,CAAC,SAAS,GAAG,yCAAyC,CAAC;YACjE,UAAU,CAAC,KAAK,GAAG;gBACjB,gBAAgB,EAAE,iBAAiB;gBACnC,aAAa,EAAE,cAAc;gBAC7B,kBAAkB,EAAE,mBAAmB;gBACvC,cAAc,EAAE,eAAe;aAChC,CAAC;YACF,UAAU,CAAC,eAAe,GAAG,WAAW,CAAC;QAC3C,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,6BAA6B,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEpC,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBAC9C,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,KAAK,EAAE,CAAC;gBACzC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,yBAAyB,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@postman/test-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP Server for E2E testing of the Postman MCP Client",
5
+ "license": "UNLICENSED",
6
+ "author": "Postman Labs <mail@postmanlabs.com>",
7
+ "homepage": "https://github.com/postman-eng/test-mcp-server/blob/main/README.md",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+ssh://git@github.com/postman-eng/test-mcp-server.git"
11
+ },
12
+ "type": "module",
13
+ "bin": {
14
+ "test-mcp-server": "dist/index.js"
15
+ },
16
+ "engines": {
17
+ "node": ">=22.17.1"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc && shx cp instructions.md dist/ && shx chmod +x dist/*.js",
24
+ "clean": "shx rm -rf dist *.tsbuildinfo",
25
+ "clean:all": "shx rm -rf dist node_modules *.tsbuildinfo *.log logs",
26
+ "lint": "eslint src/ e2e/",
27
+ "lint:fix": "eslint src/ e2e/ --fix",
28
+ "format": "prettier --write src/",
29
+ "format:check": "prettier --check src/",
30
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
31
+ "precommit": "npm run format &&npm run lint && npm run typecheck && npm run test",
32
+ "start": "node dist/index.js",
33
+ "start:stdio": "node dist/index.js stdio",
34
+ "start:sse": "node dist/index.js sse",
35
+ "start:streamableHttp": "node dist/index.js streamableHttp",
36
+ "start:streamableHttp:auth": "node dist/index.js streamableHttp --auth",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:unit": "vitest run --dir src",
40
+ "test:e2e": "vitest run --dir e2e",
41
+ "test:coverage": "vitest run --coverage"
42
+ },
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.25.1",
45
+ "cors": "^2.8.5",
46
+ "express": "^5.2.1",
47
+ "jszip": "^3.10.1",
48
+ "pino": "^10.1.0",
49
+ "pino-pretty": "^13.1.3",
50
+ "zod": "^4.2.1"
51
+ },
52
+ "devDependencies": {
53
+ "@eslint/js": "^9.17.0",
54
+ "@types/cors": "^2.8.19",
55
+ "@types/express": "^5.0.6",
56
+ "@types/node": "^22.17.1",
57
+ "@types/supertest": "^6.0.3",
58
+ "eslint": "^9.17.0",
59
+ "prettier": "^3.4.2",
60
+ "shx": "^0.4.0",
61
+ "supertest": "^7.1.4",
62
+ "typescript": "^5.6.2",
63
+ "typescript-eslint": "^8.18.1",
64
+ "vitest": "^4.0.16"
65
+ },
66
+ "main": "dist/index.js",
67
+ "keywords": [
68
+ "mcp",
69
+ "test",
70
+ "server"
71
+ ],
72
+ "types": "./dist/index.d.ts",
73
+ "bugs": {
74
+ "url": "https://github.com/postman-eng/test-mcp-server/issues"
75
+ }
76
+ }