@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.
- package/README.md +273 -0
- package/dist/auth0/management-client.d.ts +6 -1
- package/dist/auth0/management-client.d.ts.map +1 -1
- package/dist/auth0/management-client.js +56 -20
- package/dist/auth0/management-client.js.map +1 -1
- package/dist/cli.js +9 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/add-scope.d.ts.map +1 -1
- package/dist/commands/add-scope.js +5 -1
- package/dist/commands/add-scope.js.map +1 -1
- package/dist/commands/env-root-validation.d.ts +3 -0
- package/dist/commands/env-root-validation.d.ts.map +1 -0
- package/dist/commands/env-root-validation.js +27 -0
- package/dist/commands/env-root-validation.js.map +1 -0
- package/dist/commands/generate-artifacts.d.ts +1 -1
- package/dist/commands/generate-artifacts.d.ts.map +1 -1
- package/dist/commands/generate-artifacts.js +49 -75
- package/dist/commands/generate-artifacts.js.map +1 -1
- package/dist/commands/grant-client.d.ts.map +1 -1
- package/dist/commands/grant-client.js +17 -2
- package/dist/commands/grant-client.js.map +1 -1
- package/dist/commands/reconcile-all.d.ts.map +1 -1
- package/dist/commands/reconcile-all.js +9 -0
- package/dist/commands/reconcile-all.js.map +1 -1
- package/dist/commands/reconcile-client.d.ts +3 -1
- package/dist/commands/reconcile-client.d.ts.map +1 -1
- package/dist/commands/reconcile-client.js +109 -17
- package/dist/commands/reconcile-client.js.map +1 -1
- package/dist/commands/reconcile-server.d.ts.map +1 -1
- package/dist/commands/reconcile-server.js +49 -20
- package/dist/commands/reconcile-server.js.map +1 -1
- package/dist/commands/validated-client-cache.d.ts +7 -0
- package/dist/commands/validated-client-cache.d.ts.map +1 -0
- package/dist/commands/validated-client-cache.js +50 -0
- package/dist/commands/validated-client-cache.js.map +1 -0
- package/dist/commands/verify-tenant.d.ts.map +1 -1
- package/dist/commands/verify-tenant.js +2 -5
- package/dist/commands/verify-tenant.js.map +1 -1
- package/dist/config/defaults.d.ts +19 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +49 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/env-policy.d.ts +7 -0
- package/dist/config/env-policy.d.ts.map +1 -0
- package/dist/config/env-policy.js +30 -0
- package/dist/config/env-policy.js.map +1 -0
- package/dist/config/index.d.ts +3 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +15 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +95 -4
- package/dist/config/loader.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/create-server.d.ts +17 -24
- package/dist/mcp-server/create-server.d.ts.map +1 -1
- package/dist/mcp-server/create-server.js +157 -58
- package/dist/mcp-server/create-server.js.map +1 -1
- package/dist/mcp-server/http-app.d.ts +24 -0
- package/dist/mcp-server/http-app.d.ts.map +1 -0
- package/dist/mcp-server/http-app.js +66 -0
- package/dist/mcp-server/http-app.js.map +1 -0
- package/dist/mcp-server/index.d.ts +4 -2
- package/dist/mcp-server/index.d.ts.map +1 -1
- package/dist/mcp-server/index.js +1 -1
- package/dist/mcp-server/index.js.map +1 -1
- package/dist/mcp-server/mcp-configuration.d.ts +35 -0
- package/dist/mcp-server/mcp-configuration.d.ts.map +1 -0
- package/dist/mcp-server/mcp-configuration.js +2 -0
- package/dist/mcp-server/mcp-configuration.js.map +1 -0
- package/dist/mcp-server/stdio-mcp.d.ts +17 -0
- package/dist/mcp-server/stdio-mcp.d.ts.map +1 -0
- package/dist/mcp-server/stdio-mcp.js +28 -0
- package/dist/mcp-server/stdio-mcp.js.map +1 -0
- package/dist/mcp-server/streamable-http-stateful-mcp.d.ts +22 -0
- package/dist/mcp-server/streamable-http-stateful-mcp.d.ts.map +1 -0
- package/dist/mcp-server/streamable-http-stateful-mcp.js +105 -0
- package/dist/mcp-server/streamable-http-stateful-mcp.js.map +1 -0
- package/dist/mcp-server/streamable-http-stateless-mcp.d.ts +20 -0
- package/dist/mcp-server/streamable-http-stateless-mcp.d.ts.map +1 -0
- package/dist/mcp-server/streamable-http-stateless-mcp.js +58 -0
- package/dist/mcp-server/streamable-http-stateless-mcp.js.map +1 -0
- package/dist/mcp-server/transport-config.d.ts +80 -0
- package/dist/mcp-server/transport-config.d.ts.map +1 -0
- package/dist/mcp-server/transport-config.js +2 -0
- package/dist/mcp-server/transport-config.js.map +1 -0
- package/dist/types/auth0-responses.d.ts +11 -0
- package/dist/types/auth0-responses.d.ts.map +1 -1
- package/dist/types/client-config.d.ts +6 -24
- package/dist/types/client-config.d.ts.map +1 -1
- package/dist/types/client-config.js +4 -7
- package/dist/types/client-config.js.map +1 -1
- package/dist/types/ecosystem-config.d.ts +211 -70
- package/dist/types/ecosystem-config.d.ts.map +1 -1
- package/dist/types/ecosystem-config.js +33 -21
- package/dist/types/ecosystem-config.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/server-config.js +1 -1
- package/dist/types/server-config.js.map +1 -1
- package/dist/utils/context.d.ts +6 -5
- package/dist/utils/context.d.ts.map +1 -1
- package/dist/utils/context.js +43 -7
- package/dist/utils/context.js.map +1 -1
- package/dist/utils/env-manager.d.ts +113 -0
- package/dist/utils/env-manager.d.ts.map +1 -0
- package/dist/utils/env-manager.js +509 -0
- package/dist/utils/env-manager.js.map +1 -0
- package/dist/utils/env-writer.d.ts +23 -0
- package/dist/utils/env-writer.d.ts.map +1 -0
- package/dist/utils/env-writer.js +131 -0
- package/dist/utils/env-writer.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +8 -6
package/dist/config/loader.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFile, readdir, stat } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*
|
|
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
|
|
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":"
|
|
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 {
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import
|
|
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 {
|
|
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
|
|
8
|
-
*
|
|
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
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
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
|
-
*
|
|
112
|
+
* mcp.mcpServer.registerTool("my-tool", { ... }, async (args) => { ... });
|
|
113
|
+
*
|
|
114
|
+
* await mcp.begin();
|
|
115
|
+
* ```
|
|
22
116
|
*/
|
|
23
|
-
export function
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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":"AAAA,OAAO,EAAE,
|
|
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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"}
|