@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.
- package/.mcp-broker.example/README.md +53 -0
- package/.mcp-broker.example/config.json +32 -0
- package/.mcp-broker.example/grammars/claude/fr.json +7 -0
- package/LICENSE +201 -0
- package/README.md +253 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +208 -0
- package/dist/bin.js.map +1 -0
- package/dist/broker/adapters/broker.adapter.info.d.ts +16 -0
- package/dist/broker/adapters/broker.adapter.info.js +43 -0
- package/dist/broker/adapters/broker.adapter.info.js.map +1 -0
- package/dist/broker/adapters/broker.adapter.providers.d.ts +18 -0
- package/dist/broker/adapters/broker.adapter.providers.js +61 -0
- package/dist/broker/adapters/broker.adapter.providers.js.map +1 -0
- package/dist/broker/behaviors/broker.behavior.info.d.ts +15 -0
- package/dist/broker/behaviors/broker.behavior.info.js +41 -0
- package/dist/broker/behaviors/broker.behavior.info.js.map +1 -0
- package/dist/broker/behaviors/broker.behavior.providers.d.ts +19 -0
- package/dist/broker/behaviors/broker.behavior.providers.js +69 -0
- package/dist/broker/behaviors/broker.behavior.providers.js.map +1 -0
- package/dist/broker/broker.context.d.ts +59 -0
- package/dist/broker/broker.context.js +2 -0
- package/dist/broker/broker.context.js.map +1 -0
- package/dist/broker/broker.grammars.d.ts +166 -0
- package/dist/broker/broker.grammars.js +258 -0
- package/dist/broker/broker.grammars.js.map +1 -0
- package/dist/broker/broker.server.d.ts +64 -0
- package/dist/broker/broker.server.js +111 -0
- package/dist/broker/broker.server.js.map +1 -0
- package/dist/broker/grammars/claude/en.json +16 -0
- package/dist/broker/grammars/claude/fr.json +16 -0
- package/dist/broker/grammars/default/en.json +32 -0
- package/dist/broker/grammars/default/fr.json +32 -0
- package/dist/broker/grammars/default/zh.json +32 -0
- package/dist/broker/index.d.ts +9 -0
- package/dist/broker/index.js +7 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/config.d.ts +101 -0
- package/dist/config.js +61 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/stdio.upstream.d.ts +42 -0
- package/dist/stdio.upstream.js +85 -0
- package/dist/stdio.upstream.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +9 -0
- package/dist/version.js.map +1 -0
- package/dist/ws.tunnel.builder.d.ts +133 -0
- package/dist/ws.tunnel.builder.js +197 -0
- package/dist/ws.tunnel.builder.js.map +1 -0
- package/dist/ws.tunnel.d.ts +310 -0
- package/dist/ws.tunnel.js +971 -0
- package/dist/ws.tunnel.js.map +1 -0
- package/package.json +86 -0
- package/scripts/copy-assets.mjs +34 -0
- package/scripts/gen-cert.mjs +94 -0
- package/src/bin.ts +231 -0
- package/src/broker/adapters/broker.adapter.info.ts +46 -0
- package/src/broker/adapters/broker.adapter.providers.ts +67 -0
- package/src/broker/behaviors/broker.behavior.info.ts +46 -0
- package/src/broker/behaviors/broker.behavior.providers.ts +82 -0
- package/src/broker/broker.context.ts +75 -0
- package/src/broker/broker.grammars.ts +336 -0
- package/src/broker/broker.server.ts +168 -0
- package/src/broker/grammars/claude/en.json +16 -0
- package/src/broker/grammars/claude/fr.json +16 -0
- package/src/broker/grammars/default/en.json +32 -0
- package/src/broker/grammars/default/fr.json +32 -0
- package/src/broker/grammars/default/zh.json +32 -0
- package/src/broker/index.ts +24 -0
- package/src/config.ts +155 -0
- package/src/index.ts +26 -0
- package/src/stdio.upstream.ts +114 -0
- package/src/version.ts +10 -0
- package/src/ws.tunnel.builder.ts +214 -0
- 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
|
+
}
|