@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,100 @@
1
+ /**
2
+ * OAuth2 Helper Functions
3
+ */
4
+ import { randomUUID, createHmac, createHash } from "node:crypto";
5
+ import { OAUTH_CONFIG } from "./config.js";
6
+ import { tokenStore, clientStore } from "./stores.js";
7
+ // ============================================
8
+ // Client Registration Helpers
9
+ // ============================================
10
+ export function generateClientId() {
11
+ return `client-${randomUUID()}`;
12
+ }
13
+ export function generateClientSecret() {
14
+ return randomUUID() + randomUUID().replace(/-/g, "");
15
+ }
16
+ export function validateClient(clientId, clientSecret) {
17
+ const client = clientStore.get(clientId);
18
+ if (!client) {
19
+ return null;
20
+ }
21
+ if (client.clientSecret !== clientSecret) {
22
+ return null;
23
+ }
24
+ return client;
25
+ }
26
+ export function getClient(clientId) {
27
+ return clientStore.get(clientId) || null;
28
+ }
29
+ // ============================================
30
+ // PKCE Helpers (RFC 7636)
31
+ // ============================================
32
+ export function generateAuthorizationCode() {
33
+ return randomUUID() + randomUUID().replace(/-/g, "");
34
+ }
35
+ export function generateRefreshToken() {
36
+ return "rt_" + randomUUID() + randomUUID().replace(/-/g, "");
37
+ }
38
+ export function base64UrlEncode(buffer) {
39
+ return buffer.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
40
+ }
41
+ export function verifyCodeChallenge(codeVerifier, codeChallenge, method) {
42
+ if (method === "plain") {
43
+ return codeVerifier === codeChallenge;
44
+ }
45
+ // S256: BASE64URL(SHA256(code_verifier))
46
+ const hash = createHash("sha256").update(codeVerifier).digest();
47
+ const computedChallenge = base64UrlEncode(hash);
48
+ return computedChallenge === codeChallenge;
49
+ }
50
+ // ============================================
51
+ // Token Generation & Validation
52
+ // ============================================
53
+ export function generateAccessToken() {
54
+ const token = randomUUID() + "-" + randomUUID();
55
+ const signature = createHmac("sha256", OAUTH_CONFIG.tokenSecret)
56
+ .update(token)
57
+ .digest("hex")
58
+ .substring(0, 16);
59
+ return `${token}.${signature}`;
60
+ }
61
+ export function validateTokenSignature(token) {
62
+ const parts = token.split(".");
63
+ if (parts.length !== 2)
64
+ return false;
65
+ const [tokenBody, providedSignature] = parts;
66
+ const expectedSignature = createHmac("sha256", OAUTH_CONFIG.tokenSecret)
67
+ .update(tokenBody)
68
+ .digest("hex")
69
+ .substring(0, 16);
70
+ return providedSignature === expectedSignature;
71
+ }
72
+ export function createToken(clientId, scope) {
73
+ const now = Date.now();
74
+ const tokenInfo = {
75
+ accessToken: generateAccessToken(),
76
+ clientId,
77
+ createdAt: now,
78
+ expiresAt: now + OAUTH_CONFIG.tokenExpiry * 1000,
79
+ scope,
80
+ };
81
+ tokenStore.set(tokenInfo.accessToken, tokenInfo);
82
+ return tokenInfo;
83
+ }
84
+ export function validateToken(token) {
85
+ // Check signature
86
+ if (!validateTokenSignature(token)) {
87
+ return null;
88
+ }
89
+ // Check if token exists and is not expired
90
+ const tokenInfo = tokenStore.get(token);
91
+ if (!tokenInfo) {
92
+ return null;
93
+ }
94
+ if (Date.now() > tokenInfo.expiresAt) {
95
+ tokenStore.delete(token);
96
+ return null;
97
+ }
98
+ return tokenInfo;
99
+ }
100
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/oauth/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * OAuth2 Module
3
+ *
4
+ * Provides OAuth2 authentication for MCP servers.
5
+ *
6
+ * Usage:
7
+ * import { oauthRouter, requireAuth, OAUTH_CONFIG } from './oauth/index.js';
8
+ *
9
+ * app.use(oauthRouter);
10
+ * app.post('/mcp', requireAuth, handler);
11
+ */
12
+ export { OAUTH_CONFIG } from "./config.js";
13
+ export { requireAuth } from "./middleware.js";
14
+ export { oauthRouter } from "./routes.js";
15
+ export type { TokenInfo, AuthorizationCode, RefreshTokenInfo, RegisteredClient, OAuthConfig, } from "./types.js";
16
+ export type { AuthenticatedRequest } from "./middleware.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * OAuth2 Module
3
+ *
4
+ * Provides OAuth2 authentication for MCP servers.
5
+ *
6
+ * Usage:
7
+ * import { oauthRouter, requireAuth, OAUTH_CONFIG } from './oauth/index.js';
8
+ *
9
+ * app.use(oauthRouter);
10
+ * app.post('/mcp', requireAuth, handler);
11
+ */
12
+ export { OAUTH_CONFIG } from "./config.js";
13
+ export { requireAuth } from "./middleware.js";
14
+ export { oauthRouter } from "./routes.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * OAuth2 Authentication Middleware
3
+ */
4
+ import { Request, Response, NextFunction } from "express";
5
+ import type { TokenInfo } from "./types.js";
6
+ export interface AuthenticatedRequest extends Request {
7
+ tokenInfo: TokenInfo;
8
+ }
9
+ /**
10
+ * Bearer Token Authentication Middleware
11
+ *
12
+ * Validates the Authorization header and attaches tokenInfo to the request.
13
+ */
14
+ export declare function requireAuth(req: Request, res: Response, next: NextFunction): void;
15
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/oauth/middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAuCjF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * OAuth2 Authentication Middleware
3
+ */
4
+ import { validateToken } from "./helpers.js";
5
+ import { oauthLogger } from "../logger.js";
6
+ const log = oauthLogger;
7
+ /**
8
+ * Bearer Token Authentication Middleware
9
+ *
10
+ * Validates the Authorization header and attaches tokenInfo to the request.
11
+ */
12
+ export function requireAuth(req, res, next) {
13
+ const authHeader = req.headers.authorization;
14
+ if (!authHeader) {
15
+ log.debug("Missing Authorization header");
16
+ res.status(401).json({
17
+ error: "unauthorized",
18
+ error_description: "Missing Authorization header. Use Bearer token authentication.",
19
+ });
20
+ return;
21
+ }
22
+ const parts = authHeader.split(" ");
23
+ if (parts.length !== 2 || parts[0].toLowerCase() !== "bearer") {
24
+ log.debug("Invalid Authorization header format");
25
+ res.status(401).json({
26
+ error: "unauthorized",
27
+ error_description: "Invalid Authorization header format. Expected: Bearer <token>",
28
+ });
29
+ return;
30
+ }
31
+ const token = parts[1];
32
+ const tokenInfo = validateToken(token);
33
+ if (!tokenInfo) {
34
+ log.debug("Invalid or expired token");
35
+ res.status(401).json({
36
+ error: "invalid_token",
37
+ error_description: "The access token is invalid or has expired",
38
+ });
39
+ return;
40
+ }
41
+ // Attach token info to request for downstream use
42
+ req.tokenInfo = tokenInfo;
43
+ log.debug({ clientId: tokenInfo.clientId }, "Authenticated request");
44
+ next();
45
+ }
46
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/oauth/middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,GAAG,GAAG,WAAW,CAAC;AAOxB;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACzE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,cAAc;YACrB,iBAAiB,EAAE,gEAAgE;SACpF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC9D,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,cAAc;YACrB,iBAAiB,EAAE,+DAA+D;SACnF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,eAAe;YACtB,iBAAiB,EAAE,4CAA4C;SAChE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,kDAAkD;IACjD,GAA4B,CAAC,SAAS,GAAG,SAAS,CAAC;IAEpD,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACrE,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export { router as oauthRouter };
3
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/oauth/routes.ts"],"names":[],"mappings":"AA8BA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAsjBxB,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC"}