@scupit/mcp-ecosystem 0.1.0 → 0.2.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 (123) hide show
  1. package/README.md +273 -0
  2. package/dist/auth0/management-client.d.ts +6 -1
  3. package/dist/auth0/management-client.d.ts.map +1 -1
  4. package/dist/auth0/management-client.js +56 -20
  5. package/dist/auth0/management-client.js.map +1 -1
  6. package/dist/cli.js +9 -2
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/add-scope.d.ts.map +1 -1
  9. package/dist/commands/add-scope.js +5 -1
  10. package/dist/commands/add-scope.js.map +1 -1
  11. package/dist/commands/env-root-validation.d.ts +3 -0
  12. package/dist/commands/env-root-validation.d.ts.map +1 -0
  13. package/dist/commands/env-root-validation.js +27 -0
  14. package/dist/commands/env-root-validation.js.map +1 -0
  15. package/dist/commands/generate-artifacts.d.ts +1 -1
  16. package/dist/commands/generate-artifacts.d.ts.map +1 -1
  17. package/dist/commands/generate-artifacts.js +49 -75
  18. package/dist/commands/generate-artifacts.js.map +1 -1
  19. package/dist/commands/grant-client.d.ts.map +1 -1
  20. package/dist/commands/grant-client.js +17 -2
  21. package/dist/commands/grant-client.js.map +1 -1
  22. package/dist/commands/reconcile-all.d.ts.map +1 -1
  23. package/dist/commands/reconcile-all.js +9 -0
  24. package/dist/commands/reconcile-all.js.map +1 -1
  25. package/dist/commands/reconcile-client.d.ts +3 -1
  26. package/dist/commands/reconcile-client.d.ts.map +1 -1
  27. package/dist/commands/reconcile-client.js +109 -17
  28. package/dist/commands/reconcile-client.js.map +1 -1
  29. package/dist/commands/reconcile-server.d.ts.map +1 -1
  30. package/dist/commands/reconcile-server.js +49 -20
  31. package/dist/commands/reconcile-server.js.map +1 -1
  32. package/dist/commands/validated-client-cache.d.ts +7 -0
  33. package/dist/commands/validated-client-cache.d.ts.map +1 -0
  34. package/dist/commands/validated-client-cache.js +50 -0
  35. package/dist/commands/validated-client-cache.js.map +1 -0
  36. package/dist/commands/verify-tenant.d.ts.map +1 -1
  37. package/dist/commands/verify-tenant.js +2 -5
  38. package/dist/commands/verify-tenant.js.map +1 -1
  39. package/dist/config/defaults.d.ts +19 -0
  40. package/dist/config/defaults.d.ts.map +1 -0
  41. package/dist/config/defaults.js +49 -0
  42. package/dist/config/defaults.js.map +1 -0
  43. package/dist/config/env-policy.d.ts +7 -0
  44. package/dist/config/env-policy.d.ts.map +1 -0
  45. package/dist/config/env-policy.js +30 -0
  46. package/dist/config/env-policy.js.map +1 -0
  47. package/dist/config/index.d.ts +3 -1
  48. package/dist/config/index.d.ts.map +1 -1
  49. package/dist/config/index.js +3 -1
  50. package/dist/config/index.js.map +1 -1
  51. package/dist/config/loader.d.ts +15 -0
  52. package/dist/config/loader.d.ts.map +1 -1
  53. package/dist/config/loader.js +95 -4
  54. package/dist/config/loader.js.map +1 -1
  55. package/dist/index.d.ts +1 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +2 -2
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp-server/create-server.d.ts +17 -24
  60. package/dist/mcp-server/create-server.d.ts.map +1 -1
  61. package/dist/mcp-server/create-server.js +157 -58
  62. package/dist/mcp-server/create-server.js.map +1 -1
  63. package/dist/mcp-server/http-app.d.ts +24 -0
  64. package/dist/mcp-server/http-app.d.ts.map +1 -0
  65. package/dist/mcp-server/http-app.js +66 -0
  66. package/dist/mcp-server/http-app.js.map +1 -0
  67. package/dist/mcp-server/index.d.ts +4 -2
  68. package/dist/mcp-server/index.d.ts.map +1 -1
  69. package/dist/mcp-server/index.js +1 -1
  70. package/dist/mcp-server/index.js.map +1 -1
  71. package/dist/mcp-server/mcp-configuration.d.ts +35 -0
  72. package/dist/mcp-server/mcp-configuration.d.ts.map +1 -0
  73. package/dist/mcp-server/mcp-configuration.js +2 -0
  74. package/dist/mcp-server/mcp-configuration.js.map +1 -0
  75. package/dist/mcp-server/stdio-mcp.d.ts +17 -0
  76. package/dist/mcp-server/stdio-mcp.d.ts.map +1 -0
  77. package/dist/mcp-server/stdio-mcp.js +28 -0
  78. package/dist/mcp-server/stdio-mcp.js.map +1 -0
  79. package/dist/mcp-server/streamable-http-stateful-mcp.d.ts +22 -0
  80. package/dist/mcp-server/streamable-http-stateful-mcp.d.ts.map +1 -0
  81. package/dist/mcp-server/streamable-http-stateful-mcp.js +105 -0
  82. package/dist/mcp-server/streamable-http-stateful-mcp.js.map +1 -0
  83. package/dist/mcp-server/streamable-http-stateless-mcp.d.ts +20 -0
  84. package/dist/mcp-server/streamable-http-stateless-mcp.d.ts.map +1 -0
  85. package/dist/mcp-server/streamable-http-stateless-mcp.js +58 -0
  86. package/dist/mcp-server/streamable-http-stateless-mcp.js.map +1 -0
  87. package/dist/mcp-server/transport-config.d.ts +80 -0
  88. package/dist/mcp-server/transport-config.d.ts.map +1 -0
  89. package/dist/mcp-server/transport-config.js +2 -0
  90. package/dist/mcp-server/transport-config.js.map +1 -0
  91. package/dist/types/auth0-responses.d.ts +11 -0
  92. package/dist/types/auth0-responses.d.ts.map +1 -1
  93. package/dist/types/client-config.d.ts +6 -24
  94. package/dist/types/client-config.d.ts.map +1 -1
  95. package/dist/types/client-config.js +4 -7
  96. package/dist/types/client-config.js.map +1 -1
  97. package/dist/types/ecosystem-config.d.ts +211 -70
  98. package/dist/types/ecosystem-config.d.ts.map +1 -1
  99. package/dist/types/ecosystem-config.js +33 -21
  100. package/dist/types/ecosystem-config.js.map +1 -1
  101. package/dist/types/index.d.ts +3 -3
  102. package/dist/types/index.d.ts.map +1 -1
  103. package/dist/types/index.js +1 -1
  104. package/dist/types/index.js.map +1 -1
  105. package/dist/types/server-config.js +1 -1
  106. package/dist/types/server-config.js.map +1 -1
  107. package/dist/utils/context.d.ts +6 -5
  108. package/dist/utils/context.d.ts.map +1 -1
  109. package/dist/utils/context.js +43 -7
  110. package/dist/utils/context.js.map +1 -1
  111. package/dist/utils/env-manager.d.ts +113 -0
  112. package/dist/utils/env-manager.d.ts.map +1 -0
  113. package/dist/utils/env-manager.js +509 -0
  114. package/dist/utils/env-manager.js.map +1 -0
  115. package/dist/utils/env-writer.d.ts +23 -0
  116. package/dist/utils/env-writer.d.ts.map +1 -0
  117. package/dist/utils/env-writer.js +131 -0
  118. package/dist/utils/env-writer.js.map +1 -0
  119. package/dist/utils/index.d.ts +1 -0
  120. package/dist/utils/index.d.ts.map +1 -1
  121. package/dist/utils/index.js +1 -0
  122. package/dist/utils/index.js.map +1 -1
  123. package/package.json +8 -6
@@ -1,7 +1,8 @@
1
1
  import { readFile, readdir, stat } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
- import { config as loadDotenv } from "dotenv";
4
- import { EcosystemConfigSchema, ClientDescriptorSchema, ClientConfigSchema, ServerConfigSchema, } from "../types/index.js";
3
+ import { EcosystemFileSchema, ClientDescriptorSchema, ClientConfigSchema, ServerConfigSchema, } from "../types/index.js";
4
+ import { ECOSYSTEM_ENV, AUTH0_ENV, DEFAULT_ECOSYSTEM_NAME, DEFAULT_API_SETTINGS, DEFAULT_SCOPE_PROFILES, DEFAULT_CLIENT_PROFILES, } from "./defaults.js";
5
+ import { getEnvPlaceholder, isPlaceholderEnvValue } from "./env-policy.js";
5
6
  async function readJson(filePath) {
6
7
  const raw = await readFile(filePath, "utf-8");
7
8
  return JSON.parse(raw);
@@ -24,11 +25,16 @@ async function fileExists(filePath) {
24
25
  return false;
25
26
  }
26
27
  }
28
+ /**
29
+ * Reads the slim ecosystem-configuration.json, merges in hardcoded defaults
30
+ * and environment variables, and returns a fully-resolved EcosystemConfig
31
+ * alongside all descriptor, client, and server configs.
32
+ */
27
33
  export async function loadAllConfig(rootDir) {
28
- loadDotenv({ path: join(rootDir, ".env") });
29
34
  const ecosystemPath = join(rootDir, "ecosystem-configuration.json");
30
35
  const ecosystemRaw = await readJson(ecosystemPath);
31
- const ecosystem = EcosystemConfigSchema.parse(ecosystemRaw);
36
+ const fileConfig = EcosystemFileSchema.parse(ecosystemRaw);
37
+ const ecosystem = resolveEcosystemConfig(fileConfig);
32
38
  const clientDescriptors = new Map();
33
39
  const descriptorsDir = join(rootDir, "client-descriptors");
34
40
  if (await directoryExists(descriptorsDir)) {
@@ -85,6 +91,71 @@ export async function loadAllConfig(rootDir) {
85
91
  validateCrossReferences(ecosystem, clientDescriptors, clientConfigs, serverConfigs);
86
92
  return { ecosystem, clientDescriptors, clientConfigs, serverConfigs };
87
93
  }
94
+ /**
95
+ * Merges the slim file config with hardcoded defaults and env vars
96
+ * to produce a fully-resolved EcosystemConfig.
97
+ *
98
+ * Auth0 tenant domain is read lazily (may not be set yet if the user
99
+ * is only running generate-artifacts). We store whatever is available;
100
+ * the Auth0 client constructor validates when it actually needs them.
101
+ */
102
+ function resolveEcosystemConfig(file) {
103
+ const baseDomain = process.env[ECOSYSTEM_ENV.baseDomain] ?? "";
104
+ const tenantDomain = process.env[AUTH0_ENV.tenantDomain] ?? "";
105
+ const userApi = file.defaults?.api ?? {};
106
+ const userScopeProfiles = file.defaults?.scope_profiles ?? {};
107
+ const userClientProfiles = file.defaults?.client_profiles ?? {};
108
+ return {
109
+ ecosystem_name: file.ecosystem_name ?? DEFAULT_ECOSYSTEM_NAME,
110
+ domain: {
111
+ base_domain: baseDomain,
112
+ server_host_pattern: file.domain.server_host_pattern,
113
+ },
114
+ auth0: {
115
+ tenant_domain: tenantDomain,
116
+ management_audience: tenantDomain
117
+ ? `https://${tenantDomain}/api/v2/`
118
+ : "",
119
+ },
120
+ defaults: {
121
+ api: {
122
+ signing_alg: userApi.signing_alg ?? DEFAULT_API_SETTINGS.signing_alg,
123
+ token_dialect: userApi.token_dialect ?? DEFAULT_API_SETTINGS.token_dialect,
124
+ user_access_policy: userApi.user_access_policy ??
125
+ DEFAULT_API_SETTINGS.user_access_policy,
126
+ client_access_policy: userApi.client_access_policy ??
127
+ DEFAULT_API_SETTINGS.client_access_policy,
128
+ },
129
+ scope_profiles: { ...DEFAULT_SCOPE_PROFILES, ...userScopeProfiles },
130
+ client_profiles: { ...DEFAULT_CLIENT_PROFILES, ...userClientProfiles },
131
+ },
132
+ client_groups: file.client_groups,
133
+ };
134
+ }
135
+ export function assertRequiredEcosystemEnv(ecosystem, options) {
136
+ const missing = [];
137
+ collectRequiredEnvIssue(missing, ECOSYSTEM_ENV.baseDomain, ecosystem.domain.base_domain, options.requireBaseDomain, "Used to derive server hostnames, resource URIs, and MCP endpoints.", "your-base-domain.com");
138
+ collectRequiredEnvIssue(missing, AUTH0_ENV.tenantDomain, ecosystem.auth0.tenant_domain, options.requireTenantDomain, "Used to derive the Auth0 issuer, JWKS URI, and management audience.", "your-tenant.auth0.com");
139
+ if (missing.length === 0)
140
+ return;
141
+ const plural = missing.length > 1 ? "variables" : "variable";
142
+ const examples = missing.map((entry) => ` ${entry.key}=${entry.example}`);
143
+ const reasons = missing.map((entry) => ` ${entry.key}: ${entry.reason}`);
144
+ throw new Error(`Missing required environment ${plural} to ${options.context}\n\n` +
145
+ `${reasons.join("\n")}\n\n` +
146
+ ` Set them in your ecosystem .env file or shell environment:\n` +
147
+ `${examples.join("\n")}\n\n` +
148
+ ` To bootstrap a root .env template, run:\n` +
149
+ ` mcp-ecosystem generate-artifacts`);
150
+ }
151
+ export function resolveUserAccessPolicy(ecosystem, server) {
152
+ return (server.access_policy?.user ??
153
+ ecosystem.defaults.api.user_access_policy);
154
+ }
155
+ export function resolveClientAccessPolicy(ecosystem, server) {
156
+ return (server.access_policy?.client ??
157
+ ecosystem.defaults.api.client_access_policy);
158
+ }
88
159
  function validateCrossReferences(ecosystem, descriptors, clients, servers) {
89
160
  for (const [key, client] of clients) {
90
161
  if (client.descriptor && !descriptors.has(client.descriptor)) {
@@ -178,4 +249,24 @@ export function resolveGrantTargets(ecosystem, server, clientConfigs) {
178
249
  function resolveClientProfile(ecosystem, client) {
179
250
  return ecosystem.defaults.client_profiles?.[client.profile];
180
251
  }
252
+ function collectRequiredEnvIssue(issues, key, value, required, missingReason, example) {
253
+ if (!required)
254
+ return;
255
+ if (!value.trim()) {
256
+ issues.push({
257
+ key,
258
+ example,
259
+ reason: missingReason,
260
+ });
261
+ return;
262
+ }
263
+ if (isPlaceholderEnvValue(key, value)) {
264
+ issues.push({
265
+ key,
266
+ example,
267
+ reason: `Still set to the template placeholder "${getEnvPlaceholder(key)}". ` +
268
+ "Replace it with your real deployment value before continuing.",
269
+ });
270
+ }
271
+ }
181
272
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { EcosystemConfig, ClientProfile, AccessMode, GrantStrategy, TokenEndpointAuthMethod, UserAccessPolicy, ClientAccessPolicy, ClientProfileDefinition, ClientDescriptor, ReusePolicy, ClientConfig, ServerConfig, Auth0Application, Auth0Api, Auth0ClientGrant, Auth0TenantSettings, } from "./types/index.js";
2
- export { loadAllConfig, deriveHostname, deriveCanonicalResourceUri, deriveMcpEndpoint, deriveProtectedResourceMetadataUrl, resolveScopes, resolveGrantTargets, } from "./config/index.js";
2
+ export { loadAllConfig, deriveHostname, deriveCanonicalResourceUri, deriveMcpEndpoint, deriveProtectedResourceMetadataUrl, resolveScopes, resolveGrantTargets, AUTH0_ENV, DEFAULT_API_SETTINGS, DEFAULT_SCOPE_PROFILES, DEFAULT_CLIENT_PROFILES, } from "./config/index.js";
3
3
  export type { LoadedConfig, ResolvedGrantTarget } from "./config/index.js";
4
4
  export { Auth0ManagementClient, Auth0ApiError } from "./auth0/index.js";
5
5
  export type { Auth0ManagementClientOptions } from "./auth0/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kCAAkC,EAClC,aAAa,EACb,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,cAAc,EACd,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kCAAkC,EAClC,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,cAAc,EACd,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- // Public API: config loading and derivation
2
- export { loadAllConfig, deriveHostname, deriveCanonicalResourceUri, deriveMcpEndpoint, deriveProtectedResourceMetadataUrl, resolveScopes, resolveGrantTargets, } from "./config/index.js";
1
+ // Public API: config loading, derivation, and defaults
2
+ export { loadAllConfig, deriveHostname, deriveCanonicalResourceUri, deriveMcpEndpoint, deriveProtectedResourceMetadataUrl, resolveScopes, resolveGrantTargets, AUTH0_ENV, DEFAULT_API_SETTINGS, DEFAULT_SCOPE_PROFILES, DEFAULT_CLIENT_PROFILES, } from "./config/index.js";
3
3
  // Public API: Auth0 management client
4
4
  export { Auth0ManagementClient, Auth0ApiError } from "./auth0/index.js";
5
5
  // Public API: MCP runtime helpers
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,4CAA4C;AAC5C,OAAO,EACL,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kCAAkC,EAClC,aAAa,EACb,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAG3B,sCAAsC;AACtC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxE,kCAAkC;AAClC,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,cAAc,EACd,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,uDAAuD;AACvD,OAAO,EACL,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kCAAkC,EAClC,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,sCAAsC;AACtC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxE,kCAAkC;AAClC,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,cAAc,EACd,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAC"}
@@ -1,5 +1,4 @@
1
- import express from "express";
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import type { McpConfiguration, CreateMcpServerOptions } from "./mcp-configuration.js";
3
2
  export interface RuntimeConfig {
4
3
  server: {
5
4
  name: string;
@@ -17,28 +16,22 @@ export interface RuntimeConfig {
17
16
  scopes: string[];
18
17
  }
19
18
  /**
20
- * Load the generated runtime config from an MCP server's directory.
21
- * Reads `runtime-config.generated.json` produced by `mcp-ecosystem generate-artifacts`.
22
- */
23
- export declare function loadRuntimeConfig(mcpDir: string): RuntimeConfig;
24
- export interface CreateMcpHttpServerOptions {
25
- /** Override the MCP server version string. Defaults to "0.1.0". */
26
- version?: string;
27
- }
28
- /**
29
- * Create an Express app wired up with:
30
- * - Protected Resource Metadata at `/.well-known/oauth-protected-resource`
31
- * - Health check at `/health`
32
- * - MCP Streamable HTTP transport at `/mcp`
19
+ * Create an MCP server configured with the given transport.
33
20
  *
34
- * Returns the Express app and the McpServer instance for tool/resource registration.
35
- */
36
- export declare function createMcpHttpServer(config: RuntimeConfig, options?: CreateMcpHttpServerOptions): {
37
- app: import("express-serve-static-core").Express;
38
- mcpServer: McpServer;
39
- };
40
- /**
41
- * Start listening on the given port with a startup banner.
21
+ * Derives the {@link RuntimeConfig} automatically from the ecosystem and
22
+ * server configuration files. Pass `import.meta.url` from the calling module
23
+ * so the factory can locate the `mcp-configuration.json` for this server.
24
+ *
25
+ * Usage:
26
+ * ```ts
27
+ * const mcp = await createMcpServer(import.meta.url, {
28
+ * transport: { type: "streamable-http-stateless", port: 3001, auth: { enabled: false } },
29
+ * });
30
+ *
31
+ * mcp.mcpServer.registerTool("my-tool", { ... }, async (args) => { ... });
32
+ *
33
+ * await mcp.begin();
34
+ * ```
42
35
  */
43
- export declare function startServer(app: express.Express, config: RuntimeConfig, port: number): void;
36
+ export declare function createMcpServer(importMetaUrl: string, options?: CreateMcpServerOptions): Promise<McpConfiguration>;
44
37
  //# sourceMappingURL=create-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server/create-server.ts"],"names":[],"mappings":"AAEA,OAAO,OAAwC,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,+BAA+B,EAAE,MAAM,CAAC;KACzC,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAI/D;AAED,MAAM,WAAW,0BAA0B;IACzC,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,0BAA0B;;;EA+CrC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACX,IAAI,CAUN"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server/create-server.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGvF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,+BAA+B,EAAE,MAAM,CAAC;KACzC,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgHD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAmC3B"}
@@ -1,73 +1,172 @@
1
- import { readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- import express from "express";
1
+ import { stat } from "node:fs/promises";
2
+ import { join, basename, dirname } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
5
+ import { loadAllConfig, assertRequiredEcosystemEnv, ECOSYSTEM_ENV, AUTH0_ENV, isProjectEnvDisallowedKey, isServerExcludedEnvKey, deriveHostname, deriveCanonicalResourceUri, deriveMcpEndpoint, deriveProtectedResourceMetadataUrl, resolveScopes, } from "../config/index.js";
6
+ import { EnvManager } from "../utils/env-manager.js";
7
+ async function loadServerConfig(mcpDir, options) {
8
+ const rootDir = await findEcosystemRoot(mcpDir);
9
+ const slug = basename(mcpDir);
10
+ await loadEnvFiles(mcpDir, rootDir);
11
+ const { ecosystem, serverConfigs } = await loadAllConfig(rootDir);
12
+ assertRequiredEcosystemEnv(ecosystem, {
13
+ context: options.requireTenantDomain
14
+ ? "run an authenticated MCP server"
15
+ : "run an MCP server",
16
+ requireBaseDomain: true,
17
+ requireTenantDomain: options.requireTenantDomain,
18
+ });
19
+ const server = serverConfigs.get(slug);
20
+ if (!server) {
21
+ throw new Error(`No mcp-configuration.json found for slug "${slug}" under ${rootDir}`);
22
+ }
23
+ const hostname = deriveHostname(ecosystem, slug);
24
+ const resourceUri = deriveCanonicalResourceUri(ecosystem, slug);
25
+ const mcpEndpoint = deriveMcpEndpoint(ecosystem, slug);
26
+ const metadataUrl = deriveProtectedResourceMetadataUrl(ecosystem, slug);
27
+ const scopes = resolveScopes(ecosystem, server);
28
+ const issuerDomain = ecosystem.auth0.tenant_domain || "__SET_AUTH0_TENANT_DOMAIN__";
29
+ return {
30
+ server: {
31
+ name: server.name,
32
+ slug,
33
+ hostname,
34
+ resource_uri: resourceUri,
35
+ mcp_endpoint: mcpEndpoint,
36
+ },
37
+ auth: {
38
+ issuer: `https://${issuerDomain}/`,
39
+ audience: resourceUri,
40
+ jwks_uri: `https://${issuerDomain}/.well-known/jwks.json`,
41
+ protected_resource_metadata_url: metadataUrl,
42
+ },
43
+ scopes,
44
+ };
45
+ }
46
+ async function findEcosystemRoot(startDir) {
47
+ let dir = startDir;
48
+ const root = dirname(dir) === dir ? dir : undefined;
49
+ while (true) {
50
+ try {
51
+ const s = await stat(join(dir, "ecosystem-configuration.json"));
52
+ if (s.isFile())
53
+ return dir;
54
+ }
55
+ catch { /* not here, keep walking */ }
56
+ const parent = dirname(dir);
57
+ if (parent === dir || parent === root) {
58
+ throw new Error(`Could not find ecosystem-configuration.json in any parent of ${startDir}`);
59
+ }
60
+ dir = parent;
61
+ }
62
+ }
6
63
  /**
7
- * Load the generated runtime config from an MCP server's directory.
8
- * Reads `runtime-config.generated.json` produced by `mcp-ecosystem generate-artifacts`.
64
+ * Load `.env` files into `process.env` before config resolution.
65
+ *
66
+ * Precedence (highest → lowest):
67
+ * 1. Shell environment (already in process.env, never overwritten)
68
+ * 2. MCP implementation dir `.env` (optional, for per-server overrides like PORT)
69
+ * 3. Ecosystem root dir `.env` (optional, provides ECOSYSTEM_BASE_DOMAIN, AUTH0_*, etc.)
70
+ * 4. Hardcoded defaults in resolveEcosystemConfig
71
+ *
72
+ * `populateProcessEnv()` skips keys that are already set, so loading order
73
+ * determines precedence: most-specific first.
74
+ *
75
+ * Per-server `.env` files may only define server-local overrides (for example
76
+ * `PORT`). Shared ecosystem/Auth0 values must live in the ecosystem root `.env`
77
+ * or the shell environment.
9
78
  */
10
- export function loadRuntimeConfig(mcpDir) {
11
- const configPath = join(mcpDir, "runtime-config.generated.json");
12
- const raw = readFileSync(configPath, "utf-8");
13
- return JSON.parse(raw);
79
+ async function loadEnvFiles(mcpDir, rootDir) {
80
+ const rootEnvPath = join(rootDir, ".env");
81
+ scrubServerProcessEnv();
82
+ if (mcpDir !== rootDir) {
83
+ const mcpEnv = await EnvManager.load(mcpDir);
84
+ const mcpEnvPath = join(mcpDir, ".env");
85
+ assertNoRootOnlyVarsInProjectEnv(mcpEnv, mcpEnvPath, rootEnvPath);
86
+ mcpEnv.populateProcessEnv((key) => !isProjectEnvDisallowedKey(key));
87
+ }
88
+ const rootEnv = await EnvManager.load(rootDir);
89
+ rootEnv.populateProcessEnv((key) => !isServerExcludedEnvKey(key));
90
+ }
91
+ function scrubServerProcessEnv() {
92
+ for (const key of Object.keys(process.env)) {
93
+ if (isServerExcludedEnvKey(key)) {
94
+ delete process.env[key];
95
+ }
96
+ }
14
97
  }
98
+ const DEFAULT_TRANSPORT = { type: "streamable-http-stateless" };
15
99
  /**
16
- * Create an Express app wired up with:
17
- * - Protected Resource Metadata at `/.well-known/oauth-protected-resource`
18
- * - Health check at `/health`
19
- * - MCP Streamable HTTP transport at `/mcp`
100
+ * Create an MCP server configured with the given transport.
101
+ *
102
+ * Derives the {@link RuntimeConfig} automatically from the ecosystem and
103
+ * server configuration files. Pass `import.meta.url` from the calling module
104
+ * so the factory can locate the `mcp-configuration.json` for this server.
105
+ *
106
+ * Usage:
107
+ * ```ts
108
+ * const mcp = await createMcpServer(import.meta.url, {
109
+ * transport: { type: "streamable-http-stateless", port: 3001, auth: { enabled: false } },
110
+ * });
20
111
  *
21
- * Returns the Express app and the McpServer instance for tool/resource registration.
112
+ * mcp.mcpServer.registerTool("my-tool", { ... }, async (args) => { ... });
113
+ *
114
+ * await mcp.begin();
115
+ * ```
22
116
  */
23
- export function createMcpHttpServer(config, options) {
24
- const app = express();
25
- app.use(express.json());
26
- app.get("/.well-known/oauth-protected-resource", (_req, res) => {
27
- res.setHeader("Content-Type", "application/json");
28
- res.setHeader("Cache-Control", "public, max-age=3600");
29
- res.json({
30
- resource: config.server.resource_uri,
31
- authorization_servers: [config.auth.issuer],
32
- scopes_supported: config.scopes,
33
- bearer_methods_supported: ["header"],
34
- });
35
- });
36
- app.get("/health", (_req, res) => {
37
- res.json({ status: "ok", server: config.server.name });
38
- });
117
+ export async function createMcpServer(importMetaUrl, options) {
118
+ const mcpDir = dirname(fileURLToPath(importMetaUrl));
119
+ const transport = options?.transport ?? DEFAULT_TRANSPORT;
120
+ const requireTenantDomain = transport.type !== "stdio" &&
121
+ ("auth" in transport ? transport.auth?.enabled !== false : false);
122
+ const config = await loadServerConfig(mcpDir, { requireTenantDomain });
39
123
  const mcpServer = new McpServer({
40
124
  name: config.server.name,
41
125
  version: options?.version ?? "0.1.0",
42
126
  });
43
- app.post("/mcp", async (req, res) => {
44
- const transport = new StreamableHTTPServerTransport({
45
- sessionIdGenerator: undefined,
46
- });
47
- res.on("close", () => {
48
- transport.close().catch(() => { });
49
- });
50
- await mcpServer.connect(transport);
51
- await transport.handleRequest(req, res, req.body);
52
- });
53
- app.get("/mcp", (_req, res) => {
54
- res.status(405).json({ error: "Method not allowed. Use POST for MCP requests." });
55
- });
56
- app.delete("/mcp", (_req, res) => {
57
- res.status(405).json({ error: "Method not allowed." });
58
- });
59
- return { app, mcpServer };
127
+ switch (transport.type) {
128
+ case "streamable-http-stateless": {
129
+ const { StreamableHttpStatelessMcp } = await import("./streamable-http-stateless-mcp.js");
130
+ return new StreamableHttpStatelessMcp(mcpServer, config, transport);
131
+ }
132
+ case "streamable-http-stateful": {
133
+ const { StreamableHttpStatefulMcp } = await import("./streamable-http-stateful-mcp.js");
134
+ return new StreamableHttpStatefulMcp(mcpServer, config, transport);
135
+ }
136
+ case "stdio": {
137
+ const { StdioMcp } = await import("./stdio-mcp.js");
138
+ return new StdioMcp(mcpServer, config);
139
+ }
140
+ default: {
141
+ const _exhaustive = transport;
142
+ throw new Error(`Unknown transport type: ${_exhaustive.type}`);
143
+ }
144
+ }
60
145
  }
61
- /**
62
- * Start listening on the given port with a startup banner.
63
- */
64
- export function startServer(app, config, port) {
65
- app.listen(port, () => {
66
- console.log(`\n ${config.server.name}`);
67
- console.log(` Listening on http://127.0.0.1:${port}`);
68
- console.log(` MCP endpoint: http://127.0.0.1:${port}/mcp`);
69
- console.log(` Protected Resource Metadata: http://127.0.0.1:${port}/.well-known/oauth-protected-resource`);
70
- console.log(` Health: http://127.0.0.1:${port}/health\n`);
146
+ function assertNoRootOnlyVarsInProjectEnv(env, projectEnvPath, rootEnvPath) {
147
+ const disallowedEntries = [...env.entries()].filter(([key]) => isProjectEnvDisallowedKey(key));
148
+ if (disallowedEntries.length === 0)
149
+ return;
150
+ const entries = disallowedEntries.map(([key, value]) => ` ${formatAssignmentForDisplay(key, value)}`);
151
+ const reasons = disallowedEntries.map(([key]) => {
152
+ if (key === ECOSYSTEM_ENV.baseDomain) {
153
+ return ` ${key}: shared ecosystem setting; it must be defined once at the ecosystem root.`;
154
+ }
155
+ if (key === AUTH0_ENV.tenantDomain) {
156
+ return ` ${key}: shared Auth0 tenant setting; it must be defined once at the ecosystem root.`;
157
+ }
158
+ return ` ${key}: sensitive or shared Auth0 credential; it belongs in the ecosystem root .env, not a per-server .env.`;
71
159
  });
160
+ throw new Error(`Invalid variables in per-server .env at ${projectEnvPath}\n\n` +
161
+ ` These variables belong in the ecosystem root .env at:\n` +
162
+ ` ${rootEnvPath}\n\n` +
163
+ `${reasons.join("\n")}\n\n` +
164
+ ` Move these assignments to the root .env and remove them from the per-server file:\n` +
165
+ `${entries.join("\n")}\n\n` +
166
+ ` Per-server .env files should only contain server-local overrides such as:\n` +
167
+ ` PORT=3001`);
168
+ }
169
+ function formatAssignmentForDisplay(key, value) {
170
+ return key.includes("_SECRET") ? `${key}=********` : `${key}=${value}`;
72
171
  }
73
172
  //# sourceMappingURL=create-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/mcp-server/create-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/mcp-server/create-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import express from "express";
2
+ import type { RuntimeConfig } from "./create-server.js";
3
+ export interface HttpAppContext {
4
+ app: express.Express;
5
+ authEnabled: boolean;
6
+ }
7
+ /**
8
+ * Build an Express app with the shared infrastructure that all HTTP-based
9
+ * MCP transports need:
10
+ *
11
+ * - JSON body parsing
12
+ * - Protected Resource Metadata at `/.well-known/oauth-protected-resource`
13
+ * - Health check at `/health`
14
+ * - Auth middleware on `/mcp` (when enabled)
15
+ *
16
+ * The caller is responsible for attaching the transport-specific POST/GET/DELETE
17
+ * handlers for `/mcp` to the returned `app`.
18
+ */
19
+ export declare function buildHttpApp(config: RuntimeConfig, authEnabled: boolean): HttpAppContext;
20
+ /**
21
+ * Log a startup banner for an HTTP-based MCP server.
22
+ */
23
+ export declare function logHttpBanner(config: RuntimeConfig, port: number, authEnabled: boolean): void;
24
+ //# sourceMappingURL=http-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-app.d.ts","sourceRoot":"","sources":["../../src/mcp-server/http-app.ts"],"names":[],"mappings":"AAAA,OAAO,OAIN,MAAM,SAAS,CAAC;AAMjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,OAAO,GACnB,cAAc,CAyChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,GACnB,IAAI,CAYN"}
@@ -0,0 +1,66 @@
1
+ import express from "express";
2
+ import { createAuthMiddleware, } from "../mcp-runtime/auth-middleware.js";
3
+ import { send401Challenge } from "../mcp-runtime/www-authenticate.js";
4
+ /**
5
+ * Build an Express app with the shared infrastructure that all HTTP-based
6
+ * MCP transports need:
7
+ *
8
+ * - JSON body parsing
9
+ * - Protected Resource Metadata at `/.well-known/oauth-protected-resource`
10
+ * - Health check at `/health`
11
+ * - Auth middleware on `/mcp` (when enabled)
12
+ *
13
+ * The caller is responsible for attaching the transport-specific POST/GET/DELETE
14
+ * handlers for `/mcp` to the returned `app`.
15
+ */
16
+ export function buildHttpApp(config, authEnabled) {
17
+ const app = express();
18
+ app.use(express.json());
19
+ app.get("/.well-known/oauth-protected-resource", (_req, res) => {
20
+ res.setHeader("Cache-Control", "public, max-age=3600");
21
+ res.json({
22
+ resource: config.server.resource_uri,
23
+ authorization_servers: [config.auth.issuer],
24
+ scopes_supported: config.scopes,
25
+ bearer_methods_supported: ["header"],
26
+ });
27
+ });
28
+ app.get("/health", (_req, res) => {
29
+ res.json({ status: "ok", server: config.server.name });
30
+ });
31
+ if (authEnabled) {
32
+ const authOptions = {
33
+ resourceUri: config.server.resource_uri,
34
+ resourceMetadataUrl: config.auth.protected_resource_metadata_url,
35
+ issuer: config.auth.issuer,
36
+ audience: config.auth.audience,
37
+ jwksUri: config.auth.jwks_uri,
38
+ };
39
+ const authMiddleware = createAuthMiddleware(authOptions);
40
+ app.use("/mcp", (req, res, next) => {
41
+ authMiddleware(req, res, next).catch((err) => {
42
+ send401Challenge(res, {
43
+ resourceMetadataUrl: config.auth.protected_resource_metadata_url,
44
+ error: "invalid_token",
45
+ errorDescription: err instanceof Error ? err.message : "Authentication failed",
46
+ });
47
+ });
48
+ });
49
+ }
50
+ return { app, authEnabled };
51
+ }
52
+ /**
53
+ * Log a startup banner for an HTTP-based MCP server.
54
+ */
55
+ export function logHttpBanner(config, port, authEnabled) {
56
+ console.log(`\n ${config.server.name}`);
57
+ console.log(` Listening on http://127.0.0.1:${port}`);
58
+ console.log(` MCP endpoint: http://127.0.0.1:${port}/mcp`);
59
+ console.log(` Protected Resource Metadata: http://127.0.0.1:${port}/.well-known/oauth-protected-resource`);
60
+ console.log(` Health: http://127.0.0.1:${port}/health`);
61
+ if (!authEnabled) {
62
+ console.log(` WARNING: Auth is DISABLED. Do not use in production.`);
63
+ }
64
+ console.log();
65
+ }
66
+ //# sourceMappingURL=http-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-app.js","sourceRoot":"","sources":["../../src/mcp-server/http-app.ts"],"names":[],"mappings":"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"}