@cyanmycelium/mcp-broker 0.1.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 (78) hide show
  1. package/.mcp-broker.example/README.md +53 -0
  2. package/.mcp-broker.example/config.json +32 -0
  3. package/.mcp-broker.example/grammars/claude/fr.json +7 -0
  4. package/LICENSE +201 -0
  5. package/README.md +253 -0
  6. package/dist/bin.d.ts +2 -0
  7. package/dist/bin.js +208 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/broker/adapters/broker.adapter.info.d.ts +16 -0
  10. package/dist/broker/adapters/broker.adapter.info.js +43 -0
  11. package/dist/broker/adapters/broker.adapter.info.js.map +1 -0
  12. package/dist/broker/adapters/broker.adapter.providers.d.ts +18 -0
  13. package/dist/broker/adapters/broker.adapter.providers.js +61 -0
  14. package/dist/broker/adapters/broker.adapter.providers.js.map +1 -0
  15. package/dist/broker/behaviors/broker.behavior.info.d.ts +15 -0
  16. package/dist/broker/behaviors/broker.behavior.info.js +41 -0
  17. package/dist/broker/behaviors/broker.behavior.info.js.map +1 -0
  18. package/dist/broker/behaviors/broker.behavior.providers.d.ts +19 -0
  19. package/dist/broker/behaviors/broker.behavior.providers.js +69 -0
  20. package/dist/broker/behaviors/broker.behavior.providers.js.map +1 -0
  21. package/dist/broker/broker.context.d.ts +59 -0
  22. package/dist/broker/broker.context.js +2 -0
  23. package/dist/broker/broker.context.js.map +1 -0
  24. package/dist/broker/broker.grammars.d.ts +166 -0
  25. package/dist/broker/broker.grammars.js +258 -0
  26. package/dist/broker/broker.grammars.js.map +1 -0
  27. package/dist/broker/broker.server.d.ts +64 -0
  28. package/dist/broker/broker.server.js +111 -0
  29. package/dist/broker/broker.server.js.map +1 -0
  30. package/dist/broker/grammars/claude/en.json +16 -0
  31. package/dist/broker/grammars/claude/fr.json +16 -0
  32. package/dist/broker/grammars/default/en.json +32 -0
  33. package/dist/broker/grammars/default/fr.json +32 -0
  34. package/dist/broker/grammars/default/zh.json +32 -0
  35. package/dist/broker/index.d.ts +9 -0
  36. package/dist/broker/index.js +7 -0
  37. package/dist/broker/index.js.map +1 -0
  38. package/dist/config.d.ts +101 -0
  39. package/dist/config.js +61 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/index.d.ts +12 -0
  42. package/dist/index.js +11 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/stdio.upstream.d.ts +42 -0
  45. package/dist/stdio.upstream.js +85 -0
  46. package/dist/stdio.upstream.js.map +1 -0
  47. package/dist/version.d.ts +2 -0
  48. package/dist/version.js +9 -0
  49. package/dist/version.js.map +1 -0
  50. package/dist/ws.tunnel.builder.d.ts +133 -0
  51. package/dist/ws.tunnel.builder.js +197 -0
  52. package/dist/ws.tunnel.builder.js.map +1 -0
  53. package/dist/ws.tunnel.d.ts +310 -0
  54. package/dist/ws.tunnel.js +971 -0
  55. package/dist/ws.tunnel.js.map +1 -0
  56. package/package.json +86 -0
  57. package/scripts/copy-assets.mjs +34 -0
  58. package/scripts/gen-cert.mjs +94 -0
  59. package/src/bin.ts +231 -0
  60. package/src/broker/adapters/broker.adapter.info.ts +46 -0
  61. package/src/broker/adapters/broker.adapter.providers.ts +67 -0
  62. package/src/broker/behaviors/broker.behavior.info.ts +46 -0
  63. package/src/broker/behaviors/broker.behavior.providers.ts +82 -0
  64. package/src/broker/broker.context.ts +75 -0
  65. package/src/broker/broker.grammars.ts +336 -0
  66. package/src/broker/broker.server.ts +168 -0
  67. package/src/broker/grammars/claude/en.json +16 -0
  68. package/src/broker/grammars/claude/fr.json +16 -0
  69. package/src/broker/grammars/default/en.json +32 -0
  70. package/src/broker/grammars/default/fr.json +32 -0
  71. package/src/broker/grammars/default/zh.json +32 -0
  72. package/src/broker/index.ts +24 -0
  73. package/src/config.ts +155 -0
  74. package/src/index.ts +26 -0
  75. package/src/stdio.upstream.ts +114 -0
  76. package/src/version.ts +10 -0
  77. package/src/ws.tunnel.builder.ts +214 -0
  78. package/src/ws.tunnel.ts +1269 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.tunnel.js","sourceRoot":"","sources":["../src/ws.tunnel.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "@cyanmycelium/mcp-broker",
3
+ "version": "0.1.0",
4
+ "description": "WebSocket-based Model Context Protocol broker. Aggregates multiple MCP providers behind a single endpoint with stdio, SSE, and Streamable HTTP client transports.",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "author": "Guillaume Pelletier (CyanMycelium)",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/pandaGaume/mcp-broker.git",
11
+ "directory": "node"
12
+ },
13
+ "homepage": "https://github.com/pandaGaume/mcp-broker#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/pandaGaume/mcp-broker/issues"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "broker",
21
+ "tunnel",
22
+ "websocket",
23
+ "jsonrpc",
24
+ "cyanmycelium"
25
+ ],
26
+ "engines": {
27
+ "node": ">=20.11.0"
28
+ },
29
+ "main": "./dist/index.js",
30
+ "module": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "bin": {
33
+ "mcp-broker": "./dist/bin.js"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "src",
38
+ "scripts",
39
+ ".mcp-broker.example",
40
+ "LICENSE",
41
+ "README.md"
42
+ ],
43
+ "exports": {
44
+ ".": {
45
+ "types": "./dist/index.d.ts",
46
+ "import": "./dist/index.js",
47
+ "default": "./dist/index.js"
48
+ }
49
+ },
50
+ "scripts": {
51
+ "build": "npm run clean && npm run compile && npm run copy:assets",
52
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
53
+ "compile": "tsc -b tsconfig.build.json",
54
+ "copy:assets": "node scripts/copy-assets.mjs",
55
+ "watch": "tsc -b tsconfig.build.json -w",
56
+ "start": "node dist/bin.js",
57
+ "test": "vitest run",
58
+ "test:watch": "vitest",
59
+ "lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
60
+ "lint:fix": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" --fix",
61
+ "format": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
62
+ "format:fix": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
63
+ "gen-cert": "node scripts/gen-cert.mjs",
64
+ "prepublishOnly": "npm run lint && npm run build && npm test"
65
+ },
66
+ "dependencies": {
67
+ "@cyanmycelium/mcp-core": "^0.2.0",
68
+ "open": "^11.0.0",
69
+ "ws": "^8.18.0"
70
+ },
71
+ "devDependencies": {
72
+ "@types/node": "^20.11.0",
73
+ "@types/ws": "^8.5.0",
74
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
75
+ "@typescript-eslint/parser": "^7.0.0",
76
+ "eslint": "^8.57.0",
77
+ "eslint-config-prettier": "^9.1.0",
78
+ "eslint-plugin-prettier": "^5.1.0",
79
+ "prettier": "^3.2.0",
80
+ "rimraf": "~6.0.1",
81
+ "selfsigned": "^2.4.1",
82
+ "tslib": "^2.8.1",
83
+ "typescript": "^5.4.0",
84
+ "vitest": "^1.6.0"
85
+ }
86
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Copies non-TypeScript assets from `src/` to `dist/`.
3
+ *
4
+ * tsc does not copy non-`.ts` files (e.g. `.json`, `.proto`, `.txt`) to the
5
+ * output directory. This script walks the known asset directories and mirrors
6
+ * them under `dist/`, preserving their relative layout so runtime
7
+ * `fileURLToPath(import.meta.url)`-based resolution keeps working.
8
+ *
9
+ * Usage (called from npm scripts):
10
+ * node scripts/copy-assets.mjs
11
+ */
12
+
13
+ import { cpSync, existsSync } from "node:fs";
14
+ import { dirname, join } from "node:path";
15
+ import { fileURLToPath } from "node:url";
16
+
17
+ const here = dirname(fileURLToPath(import.meta.url));
18
+ const root = join(here, "..");
19
+
20
+ const assets = [
21
+ // Broker grammar resources (loaded at runtime by broker.grammars.ts)
22
+ "broker/grammars",
23
+ ];
24
+
25
+ for (const rel of assets) {
26
+ const src = join(root, "src", rel);
27
+ const dst = join(root, "dist", rel);
28
+ if (!existsSync(src)) {
29
+ console.warn(`[copy-assets] skipping missing source: ${src}`);
30
+ continue;
31
+ }
32
+ cpSync(src, dst, { recursive: true });
33
+ console.log(`[copy-assets] copied ${rel}`);
34
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Generates a self-signed TLS certificate for local development.
3
+ *
4
+ * Usage (from the `node/` directory):
5
+ * npm run gen-cert — writes to ../certs/ (repo root)
6
+ * npm run gen-cert -- --out <dir> — writes to a custom directory
7
+ *
8
+ * Outputs:
9
+ * <outDir>/cert.pem — TLS certificate (pass as MCP_BROKER_TLS_CERT)
10
+ * <outDir>/key.pem — Private key (pass as MCP_BROKER_TLS_KEY)
11
+ *
12
+ * The certificate covers: localhost, 127.0.0.1, ::1
13
+ * Validity: 365 days | Key: RSA 2048-bit
14
+ *
15
+ * NOTE: Browsers will show an "untrusted certificate" warning on first visit.
16
+ * Click "Advanced → Proceed". MCP clients (Claude, Inspector) do not care.
17
+ */
18
+
19
+ import { mkdirSync, writeFileSync } from "fs";
20
+ import { resolve, join } from "path";
21
+ import { createRequire } from "module";
22
+
23
+ // selfsigned is a CJS module — use createRequire for a clean import from ESM.
24
+ const require = createRequire(import.meta.url);
25
+ const selfsigned = require("selfsigned");
26
+
27
+ // ---------------------------------------------------------------------------
28
+ // CLI args
29
+ // ---------------------------------------------------------------------------
30
+
31
+ const args = process.argv.slice(2);
32
+ const outIdx = args.indexOf("--out");
33
+ // Default: ../certs (repo root), so the same certs are reusable by future
34
+ // dotnet/ implementation without duplication.
35
+ const defaultOut = "../certs";
36
+ const outDir = resolve(process.cwd(), outIdx !== -1 ? (args[outIdx + 1] ?? defaultOut) : defaultOut);
37
+
38
+ // ---------------------------------------------------------------------------
39
+ // Generate
40
+ // ---------------------------------------------------------------------------
41
+
42
+ console.log();
43
+ console.log("🔐 Generating self-signed certificate for localhost…");
44
+
45
+ const pems = selfsigned.generate(
46
+ [{ name: "commonName", value: "localhost" }],
47
+ {
48
+ days: 365,
49
+ keySize: 2048,
50
+ extensions: [
51
+ {
52
+ name: "subjectAltName",
53
+ altNames: [
54
+ { type: 2, value: "localhost" },
55
+ { type: 7, ip: "127.0.0.1" },
56
+ { type: 7, ip: "::1" },
57
+ ],
58
+ },
59
+ ],
60
+ },
61
+ );
62
+
63
+ // ---------------------------------------------------------------------------
64
+ // Write files
65
+ // ---------------------------------------------------------------------------
66
+
67
+ mkdirSync(outDir, { recursive: true });
68
+
69
+ const certPath = join(outDir, "cert.pem");
70
+ const keyPath = join(outDir, "key.pem");
71
+
72
+ writeFileSync(certPath, pems.cert, "utf8");
73
+ writeFileSync(keyPath, pems.private, "utf8");
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // Banner
77
+ // ---------------------------------------------------------------------------
78
+
79
+ const hr = "─".repeat(64);
80
+
81
+ console.log(`✅ Certificate written:`);
82
+ console.log(` cert → ${certPath}`);
83
+ console.log(` key → ${keyPath}`);
84
+ console.log();
85
+ console.log(` Start the broker with TLS (PowerShell):`);
86
+ console.log(hr);
87
+ console.log(` $env:MCP_BROKER_TLS_CERT="${certPath}"`);
88
+ console.log(` $env:MCP_BROKER_TLS_KEY="${keyPath}"`);
89
+ console.log(` npm start`);
90
+ console.log(hr);
91
+ console.log();
92
+ console.log(`⚠️ Browsers will warn "certificate not trusted" on first visit.`);
93
+ console.log(` Click "Advanced → Proceed to localhost". MCP clients skip this check.`);
94
+ console.log();
package/src/bin.ts ADDED
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone entry-point that starts the mcp-broker WebSocket server.
4
+ *
5
+ * ## Configuration sources (highest priority first)
6
+ *
7
+ * 1. Environment variables (`MCP_BROKER_*`).
8
+ * 2. JSON config file. Resolved in order:
9
+ * a. `MCP_BROKER_CONFIG` env var.
10
+ * b. `./.mcp-broker/config.json` in the current working directory.
11
+ * c. `./mcp-broker.config.json` (legacy, with a deprecation warning).
12
+ * 3. Built-in defaults.
13
+ *
14
+ * ## Path resolution
15
+ *
16
+ * - Env-var paths (`MCP_BROKER_*_DIR`, `MCP_BROKER_TLS_*`) are resolved
17
+ * against `process.cwd()`.
18
+ * - Config-file paths (`tls.cert`, `www.mounts[*].dir`, `stdioUpstreams[*]`)
19
+ * are resolved against the **config file's directory** — so a config in
20
+ * `./.mcp-broker/config.json` referring to `"certs/cert.pem"` points at
21
+ * `./.mcp-broker/certs/cert.pem`. The folder is self-contained.
22
+ *
23
+ * ## Local grammar overrides
24
+ *
25
+ * When `.mcp-broker/grammars/<userAgent>/<locale>.json` files exist next to
26
+ * the config file, they are merged **on top of** the packaged grammars. Lets
27
+ * users customize tool/resource descriptions for their organization without
28
+ * forking the package.
29
+ *
30
+ * ## Environment variables
31
+ *
32
+ * | Variable | Default | Notes |
33
+ * |--------------------------------|----------|--------------------------------------------------------|
34
+ * | MCP_BROKER_CONFIG | (none) | Path to a JSON config file (see above). |
35
+ * | MCP_BROKER_PORT | 3000 | |
36
+ * | MCP_BROKER_HOST | 0.0.0.0 | |
37
+ * | MCP_BROKER_PROVIDER_PATH | /provider| Prefix for provider WS |
38
+ * | MCP_BROKER_CLIENT_PATH | / | Prefix for raw WS clients |
39
+ * | MCP_BROKER_MCP_PATH | /mcp | Suffix for Streamable HTTP transport |
40
+ * | MCP_BROKER_WWW_DIR | (none) | Ergonomic shortcut: mount this directory at "/" |
41
+ * | MCP_BROKER_BUNDLE_DIR | (none) | Ergonomic shortcut: mount this directory at "/bundle" |
42
+ * | MCP_BROKER_OPEN | (unset) | "1" to auto-launch the default browser at the root URL |
43
+ * | MCP_BROKER_TLS_CERT | (none) | Path to a PEM TLS certificate |
44
+ * | MCP_BROKER_TLS_KEY | (none) | Path to a PEM private key |
45
+ * | MCP_BROKER_PROTOCOL | auto | "http" to force plain, "https" to force TLS, otherwise |
46
+ * | | | TLS is enabled iff cert+key are both set |
47
+ * | MCP_BROKER_STDIO_PROVIDER | (none) | When set, stdin/stdout carry JSON-RPC for the named |
48
+ * | | | provider (Claude Desktop bridge). |
49
+ * | MCP_BROKER_LOCALE | en | Locale used for tool descriptions on the `_broker` |
50
+ * | | | slot. ISO 639-1 base; regional variants accepted. |
51
+ */
52
+ import * as fs from "fs";
53
+ import * as path from "path";
54
+ import open from "open";
55
+ import { WsTunnelBuilder } from "./index.js";
56
+ import { loadBrokerConfig } from "./config.js";
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // Configuration
60
+ // ---------------------------------------------------------------------------
61
+
62
+ const { config, baseDir } = loadBrokerConfig();
63
+ const cwd = process.cwd();
64
+
65
+ /**
66
+ * Fills an env var from the config file when the env var is not already set.
67
+ * Used for **non-path** scalars — path-bearing fields are read directly so
68
+ * they can be resolved against `baseDir` (config file's directory) instead
69
+ * of `cwd` (deploy environment).
70
+ */
71
+ function envFromConfig(envName: string, configValue: string | number | boolean | undefined): void {
72
+ if (configValue === undefined || configValue === null) return;
73
+ if (process.env[envName] !== undefined && process.env[envName] !== "") return;
74
+ process.env[envName] = String(configValue);
75
+ }
76
+
77
+ envFromConfig("MCP_BROKER_PORT", config.port);
78
+ envFromConfig("MCP_BROKER_HOST", config.host);
79
+ envFromConfig("MCP_BROKER_PROTOCOL", config.protocol);
80
+ envFromConfig("MCP_BROKER_LOCALE", config.locale);
81
+ envFromConfig("MCP_BROKER_STDIO_PROVIDER", config.stdioProvider);
82
+ envFromConfig("MCP_BROKER_PROVIDER_PATH", config.paths?.provider);
83
+ envFromConfig("MCP_BROKER_CLIENT_PATH", config.paths?.client);
84
+ envFromConfig("MCP_BROKER_MCP_PATH", config.paths?.mcp);
85
+ envFromConfig("MCP_BROKER_OPEN", config.www?.open === true ? "1" : undefined);
86
+
87
+ const stdioProvider = process.env["MCP_BROKER_STDIO_PROVIDER"];
88
+
89
+ // In stdio mode stdout is reserved for JSON-RPC — redirect all console output to stderr.
90
+ if (stdioProvider) {
91
+ const toStderr = (...args: unknown[]) => process.stderr.write(args.join(" ") + "\n");
92
+ console.log = toStderr;
93
+ console.info = toStderr;
94
+ console.warn = toStderr;
95
+ console.error = toStderr;
96
+ }
97
+
98
+ const port = parseInt(process.env["MCP_BROKER_PORT"] ?? "3000", 10);
99
+ const host = process.env["MCP_BROKER_HOST"];
100
+ const providerPath = process.env["MCP_BROKER_PROVIDER_PATH"] ?? "/provider";
101
+ const clientPath = process.env["MCP_BROKER_CLIENT_PATH"] ?? "/";
102
+ const mcpPath = process.env["MCP_BROKER_MCP_PATH"] ?? "/mcp";
103
+ const ssePath = config.paths?.sse ?? "/sse";
104
+
105
+ // ── TLS material ─────────────────────────────────────────────────────────────
106
+ // Env var (relative to cwd) wins over config (relative to baseDir).
107
+ const tlsCertPath = process.env["MCP_BROKER_TLS_CERT"] ? path.resolve(cwd, process.env["MCP_BROKER_TLS_CERT"]) : config.tls?.cert ? path.resolve(baseDir, config.tls.cert) : null;
108
+ const tlsKeyPath = process.env["MCP_BROKER_TLS_KEY"] ? path.resolve(cwd, process.env["MCP_BROKER_TLS_KEY"]) : config.tls?.key ? path.resolve(baseDir, config.tls.key) : null;
109
+
110
+ const protocolOverride = process.env["MCP_BROKER_PROTOCOL"]?.toLowerCase();
111
+ if (protocolOverride !== undefined && protocolOverride !== "http" && protocolOverride !== "https") {
112
+ console.error(`[mcp-broker] Invalid MCP_BROKER_PROTOCOL="${protocolOverride}". Use "http" or "https".`);
113
+ process.exit(1);
114
+ }
115
+ if (protocolOverride === "https" && (!tlsCertPath || !tlsKeyPath)) {
116
+ console.error("[mcp-broker] MCP_BROKER_PROTOCOL=https requires TLS cert+key (via config.tls or MCP_BROKER_TLS_CERT/KEY).");
117
+ process.exit(1);
118
+ }
119
+
120
+ const useTls = protocolOverride === "http" ? false : protocolOverride === "https" ? true : !!(tlsCertPath && tlsKeyPath);
121
+
122
+ // ── Env-var static mount shortcuts (relative to cwd) ─────────────────────────
123
+ const envWwwDir = process.env["MCP_BROKER_WWW_DIR"] ? path.resolve(cwd, process.env["MCP_BROKER_WWW_DIR"]) : null;
124
+ const envBundleDir = process.env["MCP_BROKER_BUNDLE_DIR"] ? path.resolve(cwd, process.env["MCP_BROKER_BUNDLE_DIR"]) : null;
125
+
126
+ // ---------------------------------------------------------------------------
127
+ // Server bootstrap
128
+ // ---------------------------------------------------------------------------
129
+
130
+ async function main(): Promise<void> {
131
+ // Local grammar overrides: when `<baseDir>/grammars/` exists, the broker
132
+ // server merges those JSON files on top of the packaged grammars.
133
+ const localGrammarsDir = path.join(baseDir, "grammars");
134
+ const hasLocalGrammars = fs.existsSync(localGrammarsDir);
135
+
136
+ const builder = new WsTunnelBuilder().withPort(port).withProviderPath(providerPath).withClientPath(clientPath).withMcpPath(mcpPath);
137
+
138
+ if (host) {
139
+ builder.withHost(host);
140
+ }
141
+
142
+ if (useTls) {
143
+ builder.withTlsFiles(tlsCertPath!, tlsKeyPath!);
144
+ }
145
+
146
+ // ── Static mounts ────────────────────────────────────────────────────────
147
+ // First the env-var shortcuts (relative to cwd), then the config `www.mounts`
148
+ // (relative to baseDir). Order matters: /bundle before / so the prefix router
149
+ // can distinguish them. Subsequent registrations contribute additional mounts;
150
+ // longest-prefix match wins at runtime.
151
+ if (envBundleDir && fs.existsSync(envBundleDir)) {
152
+ builder.withStaticMount("/bundle", envBundleDir);
153
+ }
154
+ if (envWwwDir && fs.existsSync(envWwwDir)) {
155
+ builder.withStaticMount("/", envWwwDir);
156
+ }
157
+ if (config.www?.mounts) {
158
+ for (const mount of config.www.mounts) {
159
+ const abs = path.resolve(baseDir, mount.dir);
160
+ if (fs.existsSync(abs)) {
161
+ builder.withStaticMount(mount.urlPrefix, abs);
162
+ } else {
163
+ console.warn(`[mcp-broker] www.mounts entry "${mount.urlPrefix}" → ${abs} skipped (directory not found).`);
164
+ }
165
+ }
166
+ }
167
+
168
+ // ── Stdio upstreams ──────────────────────────────────────────────────────
169
+ if (config.stdioUpstreams) {
170
+ for (const u of config.stdioUpstreams) {
171
+ builder.withStdioUpstream(u.name, u.command, u.args, u.env as NodeJS.ProcessEnv | undefined);
172
+ }
173
+ }
174
+
175
+ if (stdioProvider) {
176
+ builder.withStdioClient(stdioProvider);
177
+ }
178
+
179
+ if (hasLocalGrammars) {
180
+ builder.withBrokerLocalGrammarsDir(localGrammarsDir);
181
+ }
182
+
183
+ const tunnel = builder.build();
184
+ await tunnel.start();
185
+
186
+ // ── Startup banner ──────────────────────────────────────────────────────
187
+ const httpScheme = useTls ? "https" : "http";
188
+ const wsScheme = useTls ? "wss" : "ws";
189
+ const hr = "─".repeat(64);
190
+ const localhost = `${httpScheme}://localhost:${port}`;
191
+ const mcpSuffix = mcpPath.replace(/^\//, "");
192
+ const sseSuffix = ssePath.replace(/^\//, "");
193
+ const hasWwwRoot = !!(envWwwDir && fs.existsSync(envWwwDir)) || (config.www?.mounts ?? []).some((m) => m.urlPrefix === "/");
194
+
195
+ console.log();
196
+ console.log(`⚙️ mcp-broker started${useTls ? " (TLS)" : ""}`);
197
+ console.log(hr);
198
+ console.log(`📡 Provider WebSocket ${wsScheme}://localhost:${port}${providerPath}/<name>`);
199
+ console.log(`🔌 MCP (Streamable HTTP) ${localhost}/<name>/${mcpSuffix}`);
200
+ console.log(`📺 Legacy SSE ${localhost}/<name>/${sseSuffix}`);
201
+ if (hasLocalGrammars) {
202
+ console.log(`🌐 Local grammars ${localGrammarsDir}`);
203
+ }
204
+ console.log(hr);
205
+ console.log(` Press Ctrl+C to stop.`);
206
+ console.log();
207
+
208
+ // Auto-launch browser only if explicitly opted in via MCP_BROKER_OPEN=1
209
+ // AND a mount at "/" is configured.
210
+ if (hasWwwRoot && process.env["MCP_BROKER_OPEN"] === "1") {
211
+ const url = `${localhost}/`;
212
+ console.log(`🚀 Opening browser: ${url}`);
213
+ console.log();
214
+ await open(url);
215
+ }
216
+
217
+ // ── Signal handlers ─────────────────────────────────────────────────────
218
+ const shutdown = async (signal: string): Promise<void> => {
219
+ console.log(`\n⛔ ${signal} received — shutting down…`);
220
+ await tunnel.stop();
221
+ process.exit(0);
222
+ };
223
+
224
+ process.on("SIGINT", () => void shutdown("SIGINT"));
225
+ process.on("SIGTERM", () => void shutdown("SIGTERM"));
226
+ }
227
+
228
+ main().catch((err: unknown) => {
229
+ console.error("[mcp-broker] Fatal error:", err);
230
+ process.exit(1);
231
+ });
@@ -0,0 +1,46 @@
1
+ import { McpAdapterBase, McpToolResults } from "@cyanmycelium/mcp-core";
2
+ import type { McpResourceContent, McpToolResult } from "@cyanmycelium/mcp-core";
3
+ import type { BrokerContext } from "../broker.context.js";
4
+
5
+ /** URI of the static resource backing the `broker_info` snapshot. */
6
+ export const BROKER_INFO_URI = "broker://info";
7
+
8
+ /**
9
+ * Read-only adapter that produces a snapshot of the broker's identity and
10
+ * configuration. Backed by the live {@link BrokerContext}.
11
+ */
12
+ export class BrokerInfoAdapter extends McpAdapterBase {
13
+ constructor(private readonly _context: BrokerContext) {
14
+ super("broker");
15
+ }
16
+
17
+ public async readResourceAsync(uri: string): Promise<McpResourceContent | undefined> {
18
+ if (uri !== BROKER_INFO_URI) return undefined;
19
+ return {
20
+ uri,
21
+ mimeType: "application/json",
22
+ text: JSON.stringify(this._snapshot()),
23
+ };
24
+ }
25
+
26
+ public async executeToolAsync(_uri: string, toolName: string, _args: Record<string, unknown>): Promise<McpToolResult> {
27
+ if (toolName !== "broker_info") {
28
+ return McpToolResults.error(`Unknown tool: ${toolName}`);
29
+ }
30
+ return McpToolResults.json(this._snapshot());
31
+ }
32
+
33
+ private _snapshot() {
34
+ const c = this._context;
35
+ return {
36
+ name: c.name,
37
+ version: c.version,
38
+ startedAt: c.startedAt?.toISOString() ?? null,
39
+ uptimeSeconds: c.uptimeSeconds,
40
+ host: c.host ?? "0.0.0.0",
41
+ port: c.port,
42
+ tls: c.tls,
43
+ paths: c.paths,
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,67 @@
1
+ import { McpAdapterBase, McpToolResults } from "@cyanmycelium/mcp-core";
2
+ import type { McpResourceContent, McpToolResult } from "@cyanmycelium/mcp-core";
3
+ import type { BrokerContext, BrokerProviderInfo } from "../broker.context.js";
4
+
5
+ /** URI of the static resource that lists every provider slot. */
6
+ export const PROVIDERS_URI = "broker://providers";
7
+
8
+ /** RFC 6570 URI template for one specific provider slot. */
9
+ export const PROVIDER_URI_TEMPLATE = "broker://providers/{name}";
10
+
11
+ /**
12
+ * Adapter that exposes the broker's current provider slots, both as a list
13
+ * (read of `broker://providers`) and individually (`broker://providers/<name>`).
14
+ */
15
+ export class BrokerProvidersAdapter extends McpAdapterBase {
16
+ constructor(private readonly _context: BrokerContext) {
17
+ super("broker");
18
+ }
19
+
20
+ public async readResourceAsync(uri: string): Promise<McpResourceContent | undefined> {
21
+ if (uri === PROVIDERS_URI) {
22
+ return {
23
+ uri,
24
+ mimeType: "application/json",
25
+ text: JSON.stringify(this._listSnapshot()),
26
+ };
27
+ }
28
+
29
+ // broker://providers/<name>
30
+ const match = /^broker:\/\/providers\/([^/]+)$/.exec(uri);
31
+ if (match) {
32
+ const name = decodeURIComponent(match[1]);
33
+ const info = this._context.getProviderInfo(name);
34
+ if (!info) return undefined;
35
+ return {
36
+ uri,
37
+ mimeType: "application/json",
38
+ text: JSON.stringify(info),
39
+ };
40
+ }
41
+
42
+ return undefined;
43
+ }
44
+
45
+ public async executeToolAsync(_uri: string, toolName: string, args: Record<string, unknown>): Promise<McpToolResult> {
46
+ switch (toolName) {
47
+ case "providers_list":
48
+ return McpToolResults.json(this._listSnapshot());
49
+
50
+ case "provider_status": {
51
+ const name = typeof args.name === "string" ? args.name : "";
52
+ if (!name) return McpToolResults.error('Missing required argument: "name" (string).');
53
+ const info = this._context.getProviderInfo(name);
54
+ if (!info) return McpToolResults.error(`Unknown provider: "${name}".`);
55
+ return McpToolResults.json(info);
56
+ }
57
+
58
+ default:
59
+ return McpToolResults.error(`Unknown tool: ${toolName}`);
60
+ }
61
+ }
62
+
63
+ private _listSnapshot(): { count: number; providers: BrokerProviderInfo[] } {
64
+ const providers = this._context.getProvidersInfo();
65
+ return { count: providers.length, providers };
66
+ }
67
+ }