@procedures/mcp-dev-tools 0.15.1 → 0.17.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/CHANGELOG.md +42 -0
- package/README.md +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/host.d.ts +1 -19
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +7 -45
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/host.ts +7 -54
- package/src/index.ts +1 -3
package/dist/host.d.ts
CHANGED
|
@@ -45,16 +45,8 @@ export interface DevToolsHost {
|
|
|
45
45
|
/** The MCP host: `mcp.start()` starts its face (stdio, or Streamable HTTP with `config.http`). */
|
|
46
46
|
mcp: McpHost;
|
|
47
47
|
}
|
|
48
|
-
/** The options of `createDevToolsHost()`. */
|
|
49
|
-
export interface DevToolsHostOptions {
|
|
50
|
-
/**
|
|
51
|
-
* True: the HTTP face has no listener of its own, and the caller mounts `mcp.handleHttp` on a
|
|
52
|
-
* listener. `runDevToolsServer()` gives true. The default is false, the listener of the face.
|
|
53
|
-
*/
|
|
54
|
-
mountHttp?: boolean | undefined;
|
|
55
|
-
}
|
|
56
48
|
/** This function builds the host. It starts no transport. */
|
|
57
|
-
export declare function createDevToolsHost(config?: McpServerConfig
|
|
49
|
+
export declare function createDevToolsHost(config?: McpServerConfig): Promise<DevToolsHost>;
|
|
58
50
|
/** A dev-tools server that runs under `run()`: the host, its service, the lifecycle and the URL of HTTP. */
|
|
59
51
|
export interface RunningDevToolsServer {
|
|
60
52
|
readonly host: DevToolsHost;
|
|
@@ -76,14 +68,4 @@ export interface RunningDevToolsServer {
|
|
|
76
68
|
* After a startup that failed, `life.errors` tells why, and the process exits with the code 1.
|
|
77
69
|
*/
|
|
78
70
|
export declare function runDevToolsServer(config?: McpServerConfig, run?: RunOptions): Promise<RunningDevToolsServer>;
|
|
79
|
-
/**
|
|
80
|
-
* This function starts the dev-tools MCP server over stdio, or over Streamable HTTP with
|
|
81
|
-
* `config.http` (roadmap R26). Over stdio, stdout carries the protocol, so `console.log` goes to
|
|
82
|
-
* stderr from here on (BUGS-2026-07 Bug5). The stdio server stops when the client closes its
|
|
83
|
-
* input: `host.mcp.closed` then resolves.
|
|
84
|
-
*
|
|
85
|
-
* @deprecated Use `runDevToolsServer()`: it runs the server under `run()` of the service, with a
|
|
86
|
-
* listener of the service for HTTP. The next MINOR removes this function (CLI-11).
|
|
87
|
-
*/
|
|
88
|
-
export declare function startDevToolsServer(config?: McpServerConfig): Promise<DevToolsHost>;
|
|
89
71
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAEL,eAAe,EAGf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,OAAO,EAEb,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAgC,KAAK,SAAS,EAAgB,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE1I,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ/D,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpF;AAaD,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,kGAAkG;IAClG,GAAG,EAAE,OAAO,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAEL,eAAe,EAGf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,OAAO,EAEb,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAgC,KAAK,SAAS,EAAgB,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE1I,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ/D,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpF;AAaD,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,kGAAkG;IAClG,GAAG,EAAE,OAAO,CAAC;CACd;AAWD,6DAA6D;AAC7D,wBAAsB,kBAAkB,CAAC,MAAM,GAAE,eAA8B,GAAG,OAAO,CAAC,YAAY,CAAC,CAmCtG;AASD,4GAA4G;AAC5G,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,GAAE,eAA8B,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiChI"}
|
package/dist/host.js
CHANGED
|
@@ -55,24 +55,16 @@ async function loadBundlesGlobally(bundles) {
|
|
|
55
55
|
return { modules: [], surfaces, global: true };
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
|
-
* The face of the configuration: Streamable HTTP with `config.http`, else stdio.
|
|
59
|
-
*
|
|
58
|
+
* The face of the configuration: Streamable HTTP with `config.http`, else stdio. The HTTP face has
|
|
59
|
+
* no listener of its own: the listener of the service answers for it (CLI-11).
|
|
60
60
|
*/
|
|
61
|
-
function facesOf(config
|
|
61
|
+
function facesOf(config) {
|
|
62
62
|
if (!config.http)
|
|
63
63
|
return { stdio: true };
|
|
64
|
-
|
|
65
|
-
return { http: { mount: true, ...(config.http.token ? { token: config.http.token } : {}) } };
|
|
66
|
-
return {
|
|
67
|
-
http: {
|
|
68
|
-
port: config.http.port,
|
|
69
|
-
...(config.http.host ? { host: config.http.host } : {}),
|
|
70
|
-
...(config.http.token ? { token: config.http.token } : {}),
|
|
71
|
-
},
|
|
72
|
-
};
|
|
64
|
+
return { http: { ...(config.http.token ? { token: config.http.token } : {}) } };
|
|
73
65
|
}
|
|
74
66
|
/** This function builds the host. It starts no transport. */
|
|
75
|
-
export async function createDevToolsHost(config = loadConfig()
|
|
67
|
+
export async function createDevToolsHost(config = loadConfig()) {
|
|
76
68
|
const loaded = await loadBundles(config.bundles);
|
|
77
69
|
const registry = loaded.global ? PROCEDURE_REGISTRY : createRegistry(...loaded.modules);
|
|
78
70
|
// MCP_FS_ROOT (roadmap R33): each procedure of the registry keeps its paths in the root, also
|
|
@@ -97,7 +89,7 @@ export async function createDevToolsHost(config = loadConfig(), options = {}) {
|
|
|
97
89
|
name: config.serverName,
|
|
98
90
|
version: config.serverVersion,
|
|
99
91
|
debug: config.debug,
|
|
100
|
-
faces: facesOf(config
|
|
92
|
+
faces: facesOf(config),
|
|
101
93
|
});
|
|
102
94
|
return {
|
|
103
95
|
registry,
|
|
@@ -130,7 +122,7 @@ export async function runDevToolsServer(config = loadConfig(), run) {
|
|
|
130
122
|
redirectConsoleToStderr();
|
|
131
123
|
if (config.debug)
|
|
132
124
|
console.error("[mcp-server] Starting with config:", JSON.stringify(config, null, 2));
|
|
133
|
-
const host = await createDevToolsHost(config
|
|
125
|
+
const host = await createDevToolsHost(config);
|
|
134
126
|
const profile = config.http ? localDev : ephemeral;
|
|
135
127
|
const svc = host.mcp.declare(service("mcp-dev-tools").profile(profile));
|
|
136
128
|
// A profile without policies leaves them to the service (as runProcedureHost does)
|
|
@@ -162,34 +154,4 @@ export async function runDevToolsServer(config = loadConfig(), run) {
|
|
|
162
154
|
}
|
|
163
155
|
return { host, service: svc, life, ...(url ? { url } : {}) };
|
|
164
156
|
}
|
|
165
|
-
/**
|
|
166
|
-
* This function starts the dev-tools MCP server over stdio, or over Streamable HTTP with
|
|
167
|
-
* `config.http` (roadmap R26). Over stdio, stdout carries the protocol, so `console.log` goes to
|
|
168
|
-
* stderr from here on (BUGS-2026-07 Bug5). The stdio server stops when the client closes its
|
|
169
|
-
* input: `host.mcp.closed` then resolves.
|
|
170
|
-
*
|
|
171
|
-
* @deprecated Use `runDevToolsServer()`: it runs the server under `run()` of the service, with a
|
|
172
|
-
* listener of the service for HTTP. The next MINOR removes this function (CLI-11).
|
|
173
|
-
*/
|
|
174
|
-
export async function startDevToolsServer(config = loadConfig()) {
|
|
175
|
-
// Defense-in-depth for the stdio transport: a stray console.log (from a procedure handler, a
|
|
176
|
-
// dependency or a bundle that loads) would corrupt the protocol. The MCP SDK writes its frames
|
|
177
|
-
// with process.stdout.write, so it is not affected.
|
|
178
|
-
redirectConsoleToStderr();
|
|
179
|
-
if (config.debug) {
|
|
180
|
-
console.error("[mcp-server] Starting with config:", JSON.stringify(config, null, 2));
|
|
181
|
-
}
|
|
182
|
-
const host = await createDevToolsHost(config);
|
|
183
|
-
await host.mcp.start();
|
|
184
|
-
const face = host.mcp.state().faces[0];
|
|
185
|
-
if (config.debug) {
|
|
186
|
-
console.error(`[mcp-server] Started with ${face?.toolCount ?? 0} tools`);
|
|
187
|
-
}
|
|
188
|
-
if (host.fsRoot !== undefined)
|
|
189
|
-
console.error(`[mcp-server] Each tool refuses a path outside ${host.fsRoot}. Refused under the root: ${String(host.refusedUnderRoot)}`);
|
|
190
|
-
const url = face?.url;
|
|
191
|
-
if (url)
|
|
192
|
-
console.error(`[mcp-server] Streamable HTTP at ${url}${config.http?.token ? " (send Authorization: Bearer <token>)" : ""}`);
|
|
193
|
-
return host;
|
|
194
|
-
}
|
|
195
157
|
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,wBAAwB,GAKzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,uBAAuB,GAIxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAsE,MAAM,wBAAwB,CAAC;AAC1I,OAAO,EAAE,aAAa,EAAsC,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAkBjD,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA0B;IAC1D,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,OAA4B,CAAC;QACjC,IAAI,CAAC;YACH,sEAAsE;YACtE,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,CAAwB,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,mBAAmB,CAAC,OAA0B;IAC3D,qGAAqG;IACrG,wBAAwB,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,CAAwB,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAgBD;;;GAGG;AACH,SAAS,OAAO,CAAC,MAAuB
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Ready-to-use MCP server exposing the procedure ecosystem to Claude. Importing this entry
|
|
5
5
|
* starts nothing: `runDevToolsServer()` runs the server under `run()` of the service (as
|
|
6
6
|
* `dist/server.js` and `mark mcp` do), and `createDevToolsHost()` builds the host without a
|
|
7
|
-
* transport.
|
|
7
|
+
* transport.
|
|
8
8
|
*/
|
|
9
9
|
export { loadConfig, type McpServerConfig } from "./config.js";
|
|
10
|
-
export { createDevToolsHost, runDevToolsServer,
|
|
10
|
+
export { createDevToolsHost, runDevToolsServer, loadBundles, type DevToolsHost, type LoadedBundles, type RunningDevToolsServer, } from "./host.js";
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Ready-to-use MCP server exposing the procedure ecosystem to Claude. Importing this entry
|
|
5
5
|
* starts nothing: `runDevToolsServer()` runs the server under `run()` of the service (as
|
|
6
6
|
* `dist/server.js` and `mark mcp` do), and `createDevToolsHost()` builds the host without a
|
|
7
|
-
* transport.
|
|
7
|
+
* transport.
|
|
8
8
|
*/
|
|
9
9
|
export { loadConfig } from "./config.js";
|
|
10
|
-
export { createDevToolsHost, runDevToolsServer,
|
|
10
|
+
export { createDevToolsHost, runDevToolsServer, loadBundles, } from "./host.js";
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GAIZ,MAAM,WAAW,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@procedures/mcp-dev-tools",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.17.0",
|
|
5
5
|
"description": "A ready-to-use MCP server for Claude Code and Claude Desktop: 91 developer tools (docker, mongo, sqlite, cue, vitest, workspace) with a strict call policy.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mcp",
|
|
@@ -54,11 +54,11 @@
|
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@mark1russell7/service": "^0.5.2",
|
|
57
|
-
"@procedures/bundle-mcp": "0.
|
|
58
|
-
"@procedures/client": "0.
|
|
59
|
-
"@procedures/compiler": "0.
|
|
60
|
-
"@procedures/fs": "0.
|
|
61
|
-
"@procedures/mcp-server": "0.
|
|
57
|
+
"@procedures/bundle-mcp": "0.17.0",
|
|
58
|
+
"@procedures/client": "0.17.0",
|
|
59
|
+
"@procedures/compiler": "0.17.0",
|
|
60
|
+
"@procedures/fs": "0.17.0",
|
|
61
|
+
"@procedures/mcp-server": "0.17.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@mark1russell7/cue": "^1.0.0",
|
package/src/host.ts
CHANGED
|
@@ -103,32 +103,16 @@ export interface DevToolsHost {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
|
-
* The face of the configuration: Streamable HTTP with `config.http`, else stdio.
|
|
107
|
-
*
|
|
106
|
+
* The face of the configuration: Streamable HTTP with `config.http`, else stdio. The HTTP face has
|
|
107
|
+
* no listener of its own: the listener of the service answers for it (CLI-11).
|
|
108
108
|
*/
|
|
109
|
-
function facesOf(config: McpServerConfig
|
|
109
|
+
function facesOf(config: McpServerConfig): McpHostFaces {
|
|
110
110
|
if (!config.http) return { stdio: true };
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
http: {
|
|
114
|
-
port: config.http.port,
|
|
115
|
-
...(config.http.host ? { host: config.http.host } : {}),
|
|
116
|
-
...(config.http.token ? { token: config.http.token } : {}),
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/** The options of `createDevToolsHost()`. */
|
|
122
|
-
export interface DevToolsHostOptions {
|
|
123
|
-
/**
|
|
124
|
-
* True: the HTTP face has no listener of its own, and the caller mounts `mcp.handleHttp` on a
|
|
125
|
-
* listener. `runDevToolsServer()` gives true. The default is false, the listener of the face.
|
|
126
|
-
*/
|
|
127
|
-
mountHttp?: boolean | undefined;
|
|
111
|
+
return { http: { ...(config.http.token ? { token: config.http.token } : {}) } };
|
|
128
112
|
}
|
|
129
113
|
|
|
130
114
|
/** This function builds the host. It starts no transport. */
|
|
131
|
-
export async function createDevToolsHost(config: McpServerConfig = loadConfig()
|
|
115
|
+
export async function createDevToolsHost(config: McpServerConfig = loadConfig()): Promise<DevToolsHost> {
|
|
132
116
|
const loaded = await loadBundles(config.bundles);
|
|
133
117
|
const registry = loaded.global ? PROCEDURE_REGISTRY : createRegistry(...loaded.modules);
|
|
134
118
|
// MCP_FS_ROOT (roadmap R33): each procedure of the registry keeps its paths in the root, also
|
|
@@ -153,7 +137,7 @@ export async function createDevToolsHost(config: McpServerConfig = loadConfig(),
|
|
|
153
137
|
name: config.serverName,
|
|
154
138
|
version: config.serverVersion,
|
|
155
139
|
debug: config.debug,
|
|
156
|
-
faces: facesOf(config
|
|
140
|
+
faces: facesOf(config),
|
|
157
141
|
});
|
|
158
142
|
return {
|
|
159
143
|
registry,
|
|
@@ -198,7 +182,7 @@ export async function runDevToolsServer(config: McpServerConfig = loadConfig(),
|
|
|
198
182
|
redirectConsoleToStderr();
|
|
199
183
|
if (config.debug) console.error("[mcp-server] Starting with config:", JSON.stringify(config, null, 2));
|
|
200
184
|
|
|
201
|
-
const host = await createDevToolsHost(config
|
|
185
|
+
const host = await createDevToolsHost(config);
|
|
202
186
|
const profile: Profile = config.http ? localDev : ephemeral;
|
|
203
187
|
const svc = host.mcp.declare(service("mcp-dev-tools").profile(profile));
|
|
204
188
|
// A profile without policies leaves them to the service (as runProcedureHost does)
|
|
@@ -227,34 +211,3 @@ export async function runDevToolsServer(config: McpServerConfig = loadConfig(),
|
|
|
227
211
|
}
|
|
228
212
|
return { host, service: svc, life, ...(url ? { url } : {}) };
|
|
229
213
|
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* This function starts the dev-tools MCP server over stdio, or over Streamable HTTP with
|
|
233
|
-
* `config.http` (roadmap R26). Over stdio, stdout carries the protocol, so `console.log` goes to
|
|
234
|
-
* stderr from here on (BUGS-2026-07 Bug5). The stdio server stops when the client closes its
|
|
235
|
-
* input: `host.mcp.closed` then resolves.
|
|
236
|
-
*
|
|
237
|
-
* @deprecated Use `runDevToolsServer()`: it runs the server under `run()` of the service, with a
|
|
238
|
-
* listener of the service for HTTP. The next MINOR removes this function (CLI-11).
|
|
239
|
-
*/
|
|
240
|
-
export async function startDevToolsServer(config: McpServerConfig = loadConfig()): Promise<DevToolsHost> {
|
|
241
|
-
// Defense-in-depth for the stdio transport: a stray console.log (from a procedure handler, a
|
|
242
|
-
// dependency or a bundle that loads) would corrupt the protocol. The MCP SDK writes its frames
|
|
243
|
-
// with process.stdout.write, so it is not affected.
|
|
244
|
-
redirectConsoleToStderr();
|
|
245
|
-
if (config.debug) {
|
|
246
|
-
console.error("[mcp-server] Starting with config:", JSON.stringify(config, null, 2));
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
const host = await createDevToolsHost(config);
|
|
250
|
-
await host.mcp.start();
|
|
251
|
-
const face = host.mcp.state().faces[0];
|
|
252
|
-
|
|
253
|
-
if (config.debug) {
|
|
254
|
-
console.error(`[mcp-server] Started with ${face?.toolCount ?? 0} tools`);
|
|
255
|
-
}
|
|
256
|
-
if (host.fsRoot !== undefined) console.error(`[mcp-server] Each tool refuses a path outside ${host.fsRoot}. Refused under the root: ${String(host.refusedUnderRoot)}`);
|
|
257
|
-
const url = face?.url;
|
|
258
|
-
if (url) console.error(`[mcp-server] Streamable HTTP at ${url}${config.http?.token ? " (send Authorization: Bearer <token>)" : ""}`);
|
|
259
|
-
return host;
|
|
260
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -4,17 +4,15 @@
|
|
|
4
4
|
* Ready-to-use MCP server exposing the procedure ecosystem to Claude. Importing this entry
|
|
5
5
|
* starts nothing: `runDevToolsServer()` runs the server under `run()` of the service (as
|
|
6
6
|
* `dist/server.js` and `mark mcp` do), and `createDevToolsHost()` builds the host without a
|
|
7
|
-
* transport.
|
|
7
|
+
* transport.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
export { loadConfig, type McpServerConfig } from "./config.js";
|
|
11
11
|
export {
|
|
12
12
|
createDevToolsHost,
|
|
13
13
|
runDevToolsServer,
|
|
14
|
-
startDevToolsServer,
|
|
15
14
|
loadBundles,
|
|
16
15
|
type DevToolsHost,
|
|
17
|
-
type DevToolsHostOptions,
|
|
18
16
|
type LoadedBundles,
|
|
19
17
|
type RunningDevToolsServer,
|
|
20
18
|
} from "./host.js";
|