@n24q02m/mcp-core 1.13.0-beta.2 → 1.13.0-beta.4
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/build/auth/credential-form.d.ts.map +1 -1
- package/build/auth/credential-form.js +10 -0
- package/build/auth/credential-form.js.map +1 -1
- package/build/index.d.ts +2 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -2
- package/build/index.js.map +1 -1
- package/build/lifecycle/lock.d.ts +24 -80
- package/build/lifecycle/lock.d.ts.map +1 -1
- package/build/lifecycle/lock.js +42 -187
- package/build/lifecycle/lock.js.map +1 -1
- package/build/relay/tool-helpers.d.ts +24 -23
- package/build/relay/tool-helpers.d.ts.map +1 -1
- package/build/relay/tool-helpers.js +25 -32
- package/build/relay/tool-helpers.js.map +1 -1
- package/build/storage/config-file.d.ts +1 -1
- package/build/storage/config-file.js +1 -1
- package/build/transport/index.d.ts +1 -2
- package/build/transport/index.d.ts.map +1 -1
- package/build/transport/index.js +1 -2
- package/build/transport/index.js.map +1 -1
- package/build/transport/local-server.d.ts +3 -3
- package/build/transport/local-server.d.ts.map +1 -1
- package/build/transport/local-server.js +6 -10
- package/build/transport/local-server.js.map +1 -1
- package/package.json +1 -1
- package/build/transport/smart-stdio.d.ts +0 -90
- package/build/transport/smart-stdio.d.ts.map +0 -1
- package/build/transport/smart-stdio.js +0 -584
- package/build/transport/smart-stdio.js.map +0 -1
|
@@ -1,35 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Helper to register `config__open_relay` MCP tool —
|
|
2
|
+
* Helper to register `config__open_relay` MCP tool — HTTP-only mode.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the user's browser.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* After the stdio-pure + http-multi-user split, the relay config form is
|
|
5
|
+
* served by the HTTP server itself at ``<PUBLIC_URL>/authorize``. The
|
|
6
|
+
* ``config__open_relay`` tool simply returns that URL and best-effort opens
|
|
7
|
+
* the user's default browser. There is no daemon-bridge discovery, no
|
|
8
|
+
* respawn, and no session deduplication — the HTTP server's own session
|
|
9
|
+
* tracking handles concurrent setup attempts.
|
|
10
|
+
*
|
|
11
|
+
* In stdio mode, the relay form does not exist; the tool returns
|
|
12
|
+
* ``stdio_unsupported`` so plugin code can render a "switch to HTTP mode"
|
|
13
|
+
* message instead of misleading the user with an unreachable URL.
|
|
10
14
|
*/
|
|
11
15
|
export interface OpenRelayResult {
|
|
12
16
|
url: string;
|
|
13
17
|
browserOpened: boolean;
|
|
14
|
-
status: 'configured' | 'unconfigured' | 'expired' | 'session_active';
|
|
18
|
+
status: 'configured' | 'unconfigured' | 'expired' | 'session_active' | 'stdio_unsupported';
|
|
15
19
|
}
|
|
16
|
-
export interface
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
name: string;
|
|
20
|
-
label?: string;
|
|
21
|
-
required?: boolean;
|
|
22
|
-
secret?: boolean;
|
|
23
|
-
[key: string]: unknown;
|
|
24
|
-
}>;
|
|
25
|
-
[key: string]: unknown;
|
|
20
|
+
export interface OpenRelayHandlerOptions {
|
|
21
|
+
serverName: string;
|
|
22
|
+
publicUrl: string | null;
|
|
26
23
|
}
|
|
27
24
|
/**
|
|
28
|
-
* Build the `open_relay` handler closure.
|
|
29
|
-
*
|
|
25
|
+
* Build the `open_relay` handler closure. Tests can call
|
|
26
|
+
* ``buildOpenRelayHandler({ serverName, publicUrl })`` directly without
|
|
30
27
|
* needing a real MCP server instance.
|
|
31
28
|
*/
|
|
32
|
-
export declare function buildOpenRelayHandler(
|
|
29
|
+
export declare function buildOpenRelayHandler(options: OpenRelayHandlerOptions): () => Promise<OpenRelayResult>;
|
|
33
30
|
/**
|
|
34
31
|
* Minimal shape we require from the MCP server instance to register the
|
|
35
32
|
* tool. Both `@modelcontextprotocol/sdk`'s `McpServer.tool` and the
|
|
@@ -49,8 +46,12 @@ export interface ToolRegistrar {
|
|
|
49
46
|
*
|
|
50
47
|
* ```ts
|
|
51
48
|
* import { registerOpenRelayTool } from '@n24q02m/mcp-core'
|
|
52
|
-
* registerOpenRelayTool(mcp, SERVER_NAME,
|
|
49
|
+
* registerOpenRelayTool(mcp, SERVER_NAME, PUBLIC_URL)
|
|
53
50
|
* ```
|
|
51
|
+
*
|
|
52
|
+
* Pass ``null`` for ``publicUrl`` when the server is running in stdio mode;
|
|
53
|
+
* the tool will return ``status: 'stdio_unsupported'`` so the caller can
|
|
54
|
+
* surface a clear "switch to HTTP mode" message.
|
|
54
55
|
*/
|
|
55
|
-
export declare function registerOpenRelayTool(mcp: ToolRegistrar, serverName: string,
|
|
56
|
+
export declare function registerOpenRelayTool(mcp: ToolRegistrar, serverName: string, publicUrl: string | null): void;
|
|
56
57
|
//# sourceMappingURL=tool-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../src/relay/tool-helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../src/relay/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;CAC3F;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAStG;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;CACxG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS5G"}
|
|
@@ -1,42 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Helper to register `config__open_relay` MCP tool —
|
|
2
|
+
* Helper to register `config__open_relay` MCP tool — HTTP-only mode.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the user's browser.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
import { daemonCredState, daemonIsAlive, daemonRelayUrl, daemonRespawn } from '../transport/smart-stdio.js';
|
|
12
|
-
import { tryOpenBrowser } from './browser.js';
|
|
13
|
-
import { isSessionActive } from './session.js';
|
|
14
|
-
/**
|
|
15
|
-
* Per-server session probe.
|
|
4
|
+
* After the stdio-pure + http-multi-user split, the relay config form is
|
|
5
|
+
* served by the HTTP server itself at ``<PUBLIC_URL>/authorize``. The
|
|
6
|
+
* ``config__open_relay`` tool simply returns that URL and best-effort opens
|
|
7
|
+
* the user's default browser. There is no daemon-bridge discovery, no
|
|
8
|
+
* respawn, and no session deduplication — the HTTP server's own session
|
|
9
|
+
* tracking handles concurrent setup attempts.
|
|
16
10
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* future per-server session tracking can implement without refactoring
|
|
21
|
-
* callers.
|
|
11
|
+
* In stdio mode, the relay form does not exist; the tool returns
|
|
12
|
+
* ``stdio_unsupported`` so plugin code can render a "switch to HTTP mode"
|
|
13
|
+
* message instead of misleading the user with an unreachable URL.
|
|
22
14
|
*/
|
|
23
|
-
|
|
24
|
-
return isSessionActive();
|
|
25
|
-
}
|
|
15
|
+
import { tryOpenBrowser } from './browser.js';
|
|
26
16
|
/**
|
|
27
|
-
* Build the `open_relay` handler closure.
|
|
28
|
-
*
|
|
17
|
+
* Build the `open_relay` handler closure. Tests can call
|
|
18
|
+
* ``buildOpenRelayHandler({ serverName, publicUrl })`` directly without
|
|
29
19
|
* needing a real MCP server instance.
|
|
30
20
|
*/
|
|
31
|
-
export function buildOpenRelayHandler(
|
|
21
|
+
export function buildOpenRelayHandler(options) {
|
|
32
22
|
return async function openRelay() {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (isSessionActiveForServer(serverName)) {
|
|
36
|
-
return { url, browserOpened: false, status: 'session_active' };
|
|
23
|
+
if (!options.publicUrl) {
|
|
24
|
+
return { url: '', browserOpened: false, status: 'stdio_unsupported' };
|
|
37
25
|
}
|
|
26
|
+
const url = `${options.publicUrl.replace(/\/$/, '')}/authorize`;
|
|
38
27
|
const opened = await tryOpenBrowser(url);
|
|
39
|
-
return { url, browserOpened: !!opened, status:
|
|
28
|
+
return { url, browserOpened: !!opened, status: 'unconfigured' };
|
|
40
29
|
};
|
|
41
30
|
}
|
|
42
31
|
/**
|
|
@@ -47,11 +36,15 @@ export function buildOpenRelayHandler(serverName, _schema) {
|
|
|
47
36
|
*
|
|
48
37
|
* ```ts
|
|
49
38
|
* import { registerOpenRelayTool } from '@n24q02m/mcp-core'
|
|
50
|
-
* registerOpenRelayTool(mcp, SERVER_NAME,
|
|
39
|
+
* registerOpenRelayTool(mcp, SERVER_NAME, PUBLIC_URL)
|
|
51
40
|
* ```
|
|
41
|
+
*
|
|
42
|
+
* Pass ``null`` for ``publicUrl`` when the server is running in stdio mode;
|
|
43
|
+
* the tool will return ``status: 'stdio_unsupported'`` so the caller can
|
|
44
|
+
* surface a clear "switch to HTTP mode" message.
|
|
52
45
|
*/
|
|
53
|
-
export function registerOpenRelayTool(mcp, serverName,
|
|
54
|
-
const handler = buildOpenRelayHandler(serverName,
|
|
46
|
+
export function registerOpenRelayTool(mcp, serverName, publicUrl) {
|
|
47
|
+
const handler = buildOpenRelayHandler({ serverName, publicUrl });
|
|
55
48
|
mcp.tool({
|
|
56
49
|
name: 'config__open_relay',
|
|
57
50
|
description: `Open the relay configuration form for ${serverName} in the user's browser.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../src/relay/tool-helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../src/relay/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAa7C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IACpE,OAAO,KAAK,UAAU,SAAS;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAA;QACvE,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAA;QAC/D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;QACxC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACjE,CAAC,CAAA;AACH,CAAC;AAWD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAkB,EAAE,UAAkB,EAAE,SAAwB;IACpG,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;IAChE,GAAG,CAAC,IAAI,CACN;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,yCAAyC,UAAU,yBAAyB;KAC1F,EACD,OAAO,CACR,CAAA;AACH,CAAC"}
|
|
@@ -14,7 +14,7 @@ export declare function writeConfig(serverName: string, config: Record<string, s
|
|
|
14
14
|
export declare function deleteConfig(serverName: string): Promise<void>;
|
|
15
15
|
/**
|
|
16
16
|
* Metadata flag set by `markSetupComplete` after a successful relay-form
|
|
17
|
-
* submission (POST /authorize). `
|
|
17
|
+
* submission (POST /authorize). `runHttpServer`/`isSchemaComplete` read this
|
|
18
18
|
* to distinguish "user has submitted the form" from "config.enc has values
|
|
19
19
|
* written by a peer-share or partial bootstrap path". Lives alongside the
|
|
20
20
|
* user's normal credential keys in the same per-server config dict.
|
|
@@ -147,7 +147,7 @@ export async function deleteConfig(serverName) {
|
|
|
147
147
|
}
|
|
148
148
|
/**
|
|
149
149
|
* Metadata flag set by `markSetupComplete` after a successful relay-form
|
|
150
|
-
* submission (POST /authorize). `
|
|
150
|
+
* submission (POST /authorize). `runHttpServer`/`isSchemaComplete` read this
|
|
151
151
|
* to distinguish "user has submitted the form" from "config.enc has values
|
|
152
152
|
* written by a peer-share or partial bootstrap path". Lives alongside the
|
|
153
153
|
* user's normal credential keys in the same per-server config dict.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { type
|
|
1
|
+
export { type HttpServerHandle, type JWTClaims, type RunHttpServerOptions, runHttpServer } from './local-server.js';
|
|
2
2
|
export { type AuthenticatedRequest, OAuthMiddleware, type OAuthMiddlewareOptions } from './oauth-middleware.js';
|
|
3
|
-
export { type ActiveDaemon, getActiveDaemon, runSmartStdioProxy } from './smart-stdio.js';
|
|
4
3
|
export { StreamableHTTPServer, type StreamableHTTPServerOptions } from './streamable-http.js';
|
|
5
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,aAAa,EACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,KAAK,oBAAoB,EACzB,eAAe,EACf,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,EACjC,MAAM,sBAAsB,CAAA"}
|
package/build/transport/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { runHttpServer } from './local-server.js';
|
|
2
2
|
export { OAuthMiddleware } from './oauth-middleware.js';
|
|
3
|
-
export { getActiveDaemon, runSmartStdioProxy } from './smart-stdio.js';
|
|
4
3
|
export { StreamableHTTPServer } from './streamable-http.js';
|
|
5
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,eAAe,EAEhB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,oBAAoB,EAErB,MAAM,sBAAsB,CAAA"}
|
|
@@ -20,7 +20,7 @@ import { type DelegatedOAuthAppOptions } from '../auth/delegated-oauth-app.js';
|
|
|
20
20
|
import { type CredentialsCallback, type StepCallback } from '../auth/local-oauth-app.js';
|
|
21
21
|
/** Decoded JWT claims returned by JWTIssuer.verifyAccessToken. */
|
|
22
22
|
export type JWTClaims = JWTPayload;
|
|
23
|
-
export interface
|
|
23
|
+
export interface RunHttpServerOptions {
|
|
24
24
|
/** Identifier used for JWT iss/aud and credential storage. */
|
|
25
25
|
serverName: string;
|
|
26
26
|
/** If undefined, server has NO auth (e.g., godot). */
|
|
@@ -70,7 +70,7 @@ export interface RunLocalServerOptions {
|
|
|
70
70
|
*/
|
|
71
71
|
authScope?: (claims: JWTClaims, next: () => Promise<void>) => Promise<void>;
|
|
72
72
|
}
|
|
73
|
-
export interface
|
|
73
|
+
export interface HttpServerHandle {
|
|
74
74
|
/** Actual TCP port bound. Non-zero even when ``options.port`` was 0. */
|
|
75
75
|
port: number;
|
|
76
76
|
/** Host bound. */
|
|
@@ -90,5 +90,5 @@ export interface LocalServerHandle {
|
|
|
90
90
|
* - Returns a handle for lifecycle management; the server runs in the
|
|
91
91
|
* background until ``close()`` is called.
|
|
92
92
|
*/
|
|
93
|
-
export declare function
|
|
93
|
+
export declare function runHttpServer(serverFactory: () => McpServer, options: RunHttpServerOptions): Promise<HttpServerHandle>;
|
|
94
94
|
//# sourceMappingURL=local-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-server.d.ts","sourceRoot":"","sources":["../../src/transport/local-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAA;AAOnC,kEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG,UAAU,CAAA;AAElC,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"local-server.d.ts","sourceRoot":"","sources":["../../src/transport/local-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAA;AAOnC,kEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG,UAAU,CAAA;AAElC,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,YAAY,GAAG,WAAW,CAAC,CAAA;IAC3E,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;IACxC,gEAAgE;IAChE,eAAe,CAAC,EAAE,YAAY,CAAA;IAC9B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EACd,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC,GAChD,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC,CAAA;IACxG;;;OAGG;IACH,wBAAwB,CAAC,EAAE,CACzB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAC7D,MAAM,CAAA;IACX;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,SAAS,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAqQ3B"}
|
|
@@ -38,7 +38,7 @@ import { readConfig } from '../storage/config-file.js';
|
|
|
38
38
|
* - Returns a handle for lifecycle management; the server runs in the
|
|
39
39
|
* background until ``close()`` is called.
|
|
40
40
|
*/
|
|
41
|
-
export async function
|
|
41
|
+
export async function runHttpServer(serverFactory, options) {
|
|
42
42
|
const host = options.host ?? '127.0.0.1';
|
|
43
43
|
const wantedPort = options.port ?? 0;
|
|
44
44
|
let oauthApp = null;
|
|
@@ -177,11 +177,10 @@ export async function runLocalServer(serverFactory, options) {
|
|
|
177
177
|
const actualPort = addr.port;
|
|
178
178
|
// Sweep stale locks for our server name BEFORE writing our own. Without
|
|
179
179
|
// this, abnormal-exit residue (Windows OOM, taskkill, signal) can pile up
|
|
180
|
-
// dozens of `<server>-<port>.lock` files
|
|
181
|
-
// — see 2026-04-28 wet-mcp 11-stale-lock incident.
|
|
180
|
+
// dozens of `<server>-<port>.lock` files — see 2026-04-28 wet-mcp 11-stale-lock incident.
|
|
182
181
|
const swept = sweepStaleLocks(options.serverName);
|
|
183
182
|
if (swept > 0) {
|
|
184
|
-
console.error(`[
|
|
183
|
+
console.error(`[runHttpServer] cleaned ${swept} stale lock(s) for ${options.serverName}`);
|
|
185
184
|
}
|
|
186
185
|
const proxyToken = jwtIssuer ? await jwtIssuer.issueAccessToken('proxy', 31536000) : '';
|
|
187
186
|
const lockDirPath = path.join(os.homedir(), '.config', 'mcp', 'locks');
|
|
@@ -194,12 +193,9 @@ export async function runLocalServer(serverFactory, options) {
|
|
|
194
193
|
lockRefreshInterval.unref();
|
|
195
194
|
}
|
|
196
195
|
// Auto-open the credential form in the user's browser when no creds exist
|
|
197
|
-
// yet.
|
|
198
|
-
//
|
|
199
|
-
//
|
|
200
|
-
// browser-open path. We open the root URL ("/") which auto-bootstraps PKCE
|
|
201
|
-
// and redirects to /authorize with valid params; opening /authorize directly
|
|
202
|
-
// returns invalid_request because it requires client_id/redirect_uri/state/
|
|
196
|
+
// yet. We open the root URL ("/") which auto-bootstraps PKCE and redirects
|
|
197
|
+
// to /authorize with valid params; opening /authorize directly returns
|
|
198
|
+
// invalid_request because it requires client_id/redirect_uri/state/
|
|
203
199
|
// code_challenge. See `local-oauth-app.ts` root handler docstring.
|
|
204
200
|
// Best-effort: any failure surfaces via tryOpenBrowser's ASCII fallback banner.
|
|
205
201
|
if (oauthApp) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-server.js","sourceRoot":"","sources":["../../src/transport/local-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAA;AAEhG,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAGjC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAGlG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EACL,uBAAuB,EAGxB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,mBAAmB,EAGpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAmEtD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"local-server.js","sourceRoot":"","sources":["../../src/transport/local-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Return the relay form URL for the alive daemon of `serverName`.
|
|
3
|
-
*
|
|
4
|
-
* Walks the per-user lock directory, parses the first `<server>-*.lock`
|
|
5
|
-
* that contains valid 4/5/6-line metadata, and returns the daemon's root
|
|
6
|
-
* URL `http://127.0.0.1:<port>/`. The daemon's `local_oauth_app` serves a
|
|
7
|
-
* 302 from `/` to `/authorize?...` with a fresh PKCE challenge.
|
|
8
|
-
*
|
|
9
|
-
* Throws when no parseable lock file exists for the server. Callers that
|
|
10
|
-
* prefer a soft signal should call `daemonIsAlive` first.
|
|
11
|
-
*/
|
|
12
|
-
export declare function daemonRelayUrl(serverName: string): string;
|
|
13
|
-
/**
|
|
14
|
-
* Return `true` when at least one parseable lock file for `serverName`
|
|
15
|
-
* references a process the OS reports as alive. Used by the Bridge when
|
|
16
|
-
* deciding whether `need_setup` envelopes should bridge to a live daemon
|
|
17
|
-
* or trigger an auto-respawn.
|
|
18
|
-
*/
|
|
19
|
-
export declare function daemonIsAlive(serverName: string): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Return the latest known `credState` for `serverName`. Reads the first
|
|
22
|
-
* parseable lock file and returns its 5th line. Returns `"unconfigured"`
|
|
23
|
-
* if no lock exists, so callers can branch safely on a single string
|
|
24
|
-
* without nullable handling.
|
|
25
|
-
*/
|
|
26
|
-
export declare function daemonCredState(serverName: string): string;
|
|
27
|
-
/**
|
|
28
|
-
* Bridge auto-respawn (D8, Task 1.12).
|
|
29
|
-
*
|
|
30
|
-
* When a tool call fails because the daemon backing a transparent bridge
|
|
31
|
-
* has died, the Bridge spawns a fresh daemon and retries -- but only once
|
|
32
|
-
* per `tool_call_id`, so a pathological caller can't infinite-loop the
|
|
33
|
-
* spawn path. ``BridgeAutoRespawn`` tracks the per-call cap; the helper
|
|
34
|
-
* functions below perform the actual spawn + wait-ready dance.
|
|
35
|
-
*/
|
|
36
|
-
export declare const MAX_RESPAWN_PER_CALL_ID = 1;
|
|
37
|
-
/**
|
|
38
|
-
* Per-bridge tracker capping respawn attempts per `tool_call_id`.
|
|
39
|
-
*
|
|
40
|
-
* A bridge instance keeps one of these for the lifetime of an MCP session.
|
|
41
|
-
* Each unique id is allowed exactly `MAX_RESPAWN_PER_CALL_ID` respawn
|
|
42
|
-
* attempt; subsequent attempts within `RESPAWN_TRACK_TTL_MS` are rejected
|
|
43
|
-
* so a buggy caller can't spawn-storm the daemon. Entries older than the
|
|
44
|
-
* TTL are dropped on read so the table doesn't grow without bound.
|
|
45
|
-
*/
|
|
46
|
-
export declare class BridgeAutoRespawn {
|
|
47
|
-
private respawned;
|
|
48
|
-
canRespawn(callId: string): boolean;
|
|
49
|
-
markRespawned(callId: string): void;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Async respawn entry point. Production code should prefer this -- it
|
|
53
|
-
* waits for the daemon to come back up before resolving with the relay URL.
|
|
54
|
-
*/
|
|
55
|
-
export declare function daemonRespawnAsync(serverName: string): Promise<string>;
|
|
56
|
-
/**
|
|
57
|
-
* Synchronous respawn for callers that match the core-py signature.
|
|
58
|
-
*
|
|
59
|
-
* If a daemon is already alive we return its URL immediately. Otherwise we
|
|
60
|
-
* fire-and-forget the spawn and return an empty string -- the caller is
|
|
61
|
-
* expected to poll via `daemonIsAlive` / `daemonRelayUrl` (or use
|
|
62
|
-
* `daemonRespawnAsync` for the awaitable flow).
|
|
63
|
-
*/
|
|
64
|
-
export declare function daemonRespawn(serverName: string): string;
|
|
65
|
-
export interface ActiveDaemon {
|
|
66
|
-
port: number;
|
|
67
|
-
token: string;
|
|
68
|
-
}
|
|
69
|
-
export declare function getActiveDaemon(serverName: string): Promise<ActiveDaemon | null>;
|
|
70
|
-
/**
|
|
71
|
-
* Forward a single JSON-RPC message from daemon stdout to bridge stdout.
|
|
72
|
-
*
|
|
73
|
-
* Extracted from the inline write calls in `runSmartStdioProxy` so the
|
|
74
|
-
* forwarding behaviour can be unit-tested independently (D19). The helper
|
|
75
|
-
* is a dumb pipe — it passes every frame through unchanged, including
|
|
76
|
-
* `notifications/tools/list_changed` server-initiated notifications.
|
|
77
|
-
*
|
|
78
|
-
* Synchronous by design: the `writer` call is synchronous and making this
|
|
79
|
-
* function `async` only converts EPIPE throws into unhandled promise
|
|
80
|
-
* rejections (I1 fix). EPIPE is caught here and causes a clean exit, because
|
|
81
|
-
* EPIPE on `process.stdout` means the MCP client closed its stdin and the
|
|
82
|
-
* proxy should terminate gracefully.
|
|
83
|
-
*/
|
|
84
|
-
export declare function forwardDaemonMessageToBridge(message: string, writer: (s: string) => void): void;
|
|
85
|
-
export interface RunSmartStdioProxyOptions {
|
|
86
|
-
startupTimeout?: number;
|
|
87
|
-
env?: Record<string, string | undefined>;
|
|
88
|
-
}
|
|
89
|
-
export declare function runSmartStdioProxy(serverName: string, daemonCmd: string[], options?: RunSmartStdioProxyOptions): Promise<number>;
|
|
90
|
-
//# sourceMappingURL=smart-stdio.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smart-stdio.d.ts","sourceRoot":"","sources":["../../src/transport/smart-stdio.ts"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAazD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAyB1D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAGxC;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAA4B;IAE7C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAUnC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGpC;AAgCD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAiBD,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmCtF;AAmGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAS/F;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,MAAM,CAAC,CA6PjB"}
|