@wrongstack/mcp 0.284.1 → 0.286.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/dist/authorization-manager.d.ts +65 -0
- package/dist/authorization-manager.d.ts.map +1 -0
- package/dist/authorization.d.ts +128 -0
- package/dist/authorization.d.ts.map +1 -0
- package/dist/client.d.ts +165 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/constants.d.ts +51 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/content-selection.d.ts +33 -0
- package/dist/content-selection.d.ts.map +1 -0
- package/dist/index.d.ts +15 -665
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3006 -515
- package/dist/index.js.map +7 -1
- package/dist/manage.d.ts +84 -0
- package/dist/manage.d.ts.map +1 -0
- package/dist/manifest-cache.d.ts +31 -0
- package/dist/manifest-cache.d.ts.map +1 -0
- package/dist/operations.d.ts +100 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/protocol.d.ts +91 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/registry.d.ts +224 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/server.d.ts +134 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/test-helpers/mock-server.d.ts +34 -0
- package/dist/test-helpers/mock-server.d.ts.map +1 -0
- package/dist/token-store.d.ts +56 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/tool-schema.d.ts +3 -0
- package/dist/tool-schema.d.ts.map +1 -0
- package/dist/transport.d.ts +161 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/wrap-tool.d.ts +17 -0
- package/dist/wrap-tool.d.ts.map +1 -0
- package/package.json +4 -5
package/dist/manage.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { MCPHealthConfig, MCPServerConfig, Permission } from '@wrongstack/core';
|
|
2
|
+
import type { MCPRegistry } from './registry.js';
|
|
3
|
+
/** Transport values accepted from UI surfaces (UI also offers a bare "http"). */
|
|
4
|
+
type TransportInput = 'stdio' | 'sse' | 'streamable-http' | 'http';
|
|
5
|
+
/** Loosely-typed server input as it arrives from a UI or command surface. */
|
|
6
|
+
export interface McpServerInput {
|
|
7
|
+
name: string;
|
|
8
|
+
transport?: TransportInput | string | undefined;
|
|
9
|
+
description?: string | undefined;
|
|
10
|
+
enabled?: boolean | undefined;
|
|
11
|
+
command?: string | undefined;
|
|
12
|
+
args?: string[] | undefined;
|
|
13
|
+
env?: Record<string, string> | undefined;
|
|
14
|
+
url?: string | undefined;
|
|
15
|
+
headers?: Record<string, string> | undefined;
|
|
16
|
+
allowedTools?: string[] | undefined;
|
|
17
|
+
permission?: Permission | undefined;
|
|
18
|
+
/** Lazy connect — spawn the process only on first tool call (see config). */
|
|
19
|
+
lazy?: boolean | undefined;
|
|
20
|
+
/** Env var names to forward from parent process at spawn time. */
|
|
21
|
+
passthroughEnv?: string[] | undefined;
|
|
22
|
+
/** Operational-health thresholds (optional; omitted means no threshold checks). */
|
|
23
|
+
health?: MCPHealthConfig | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Projected view of one server, merging disk config with live registry state. */
|
|
26
|
+
export interface McpServerInfo {
|
|
27
|
+
name: string;
|
|
28
|
+
transport: MCPServerConfig['transport'];
|
|
29
|
+
description?: string | undefined;
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
/** Raw registry state ('connected' | 'connecting' | … | 'failed'), or 'stopped' when not running. */
|
|
32
|
+
status: string;
|
|
33
|
+
/** Real tool names discovered from the live server (empty when not connected). */
|
|
34
|
+
tools: string[];
|
|
35
|
+
url?: string | undefined;
|
|
36
|
+
command?: string | undefined;
|
|
37
|
+
/** Lazy-connect opt-in (spawn on first tool call). */
|
|
38
|
+
lazy?: boolean | undefined;
|
|
39
|
+
}
|
|
40
|
+
export interface McpOpResult {
|
|
41
|
+
ok: boolean;
|
|
42
|
+
message: string;
|
|
43
|
+
/** The affected server's projected view, when applicable. */
|
|
44
|
+
server?: McpServerInfo | undefined;
|
|
45
|
+
/** Raw registry state after a start/restart attempt. */
|
|
46
|
+
state?: string | undefined;
|
|
47
|
+
/** Real tool names after a start/restart attempt. */
|
|
48
|
+
tools?: string[] | undefined;
|
|
49
|
+
/** Set when a config change persisted but the registry start/stop failed. */
|
|
50
|
+
registryError?: string | undefined;
|
|
51
|
+
}
|
|
52
|
+
export interface McpManageDeps {
|
|
53
|
+
/** Absolute path to the global config.json that owns `mcpServers`. */
|
|
54
|
+
configPath: string;
|
|
55
|
+
/** Live registry for runtime start/stop/restart. */
|
|
56
|
+
registry: MCPRegistry;
|
|
57
|
+
/** Built-in presets (from core `allServers()`), used by name-only `add`. */
|
|
58
|
+
presets?: Record<string, MCPServerConfig> | undefined;
|
|
59
|
+
}
|
|
60
|
+
/** List all configured servers, merged with live registry status + tool names. */
|
|
61
|
+
export declare function listMcp(deps: McpManageDeps): Promise<McpServerInfo[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Add a new server. `input` may be a fully-specified config, or just a `name`
|
|
64
|
+
* matching a known preset (`deps.presets`). Fails if the server already exists.
|
|
65
|
+
* When enabled, the server is started immediately via the registry.
|
|
66
|
+
*/
|
|
67
|
+
export declare function addMcp(input: McpServerInput, deps: McpManageDeps): Promise<McpOpResult>;
|
|
68
|
+
/** Update an existing server's config, then re-apply it to the live registry. */
|
|
69
|
+
export declare function updateMcp(input: McpServerInput, deps: McpManageDeps): Promise<McpOpResult>;
|
|
70
|
+
/** Remove a server from config and stop it if running. */
|
|
71
|
+
export declare function removeMcp(name: string, deps: McpManageDeps): Promise<McpOpResult>;
|
|
72
|
+
/** Enable a server in config and start it. */
|
|
73
|
+
export declare function enableMcp(name: string, deps: McpManageDeps): Promise<McpOpResult>;
|
|
74
|
+
/** Disable a server in config and stop it. */
|
|
75
|
+
export declare function disableMcp(name: string, deps: McpManageDeps): Promise<McpOpResult>;
|
|
76
|
+
/** Restart a running server (or start it from config if registered but stopped). */
|
|
77
|
+
export declare function restartMcp(name: string, deps: McpManageDeps): Promise<McpOpResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Discover a server's tools. Tools are discovered on connect, so this ensures
|
|
80
|
+
* the server is running and returns its live tool list.
|
|
81
|
+
*/
|
|
82
|
+
export declare function discoverMcp(name: string, deps: McpManageDeps): Promise<McpOpResult>;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=manage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../src/manage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { MCPTool } from './client.js';
|
|
2
|
+
import { type MCPPrompt, type MCPResource, type MCPResourceTemplate, type MCPServerMetadata } from './protocol.js';
|
|
3
|
+
export interface MCPCapabilityManifest {
|
|
4
|
+
tools: MCPTool[];
|
|
5
|
+
serverMetadata?: MCPServerMetadata | undefined;
|
|
6
|
+
resources?: MCPResource[] | undefined;
|
|
7
|
+
resourceTemplates?: MCPResourceTemplate[] | undefined;
|
|
8
|
+
prompts?: MCPPrompt[] | undefined;
|
|
9
|
+
}
|
|
10
|
+
/** Stable hash of the fields that define how/where we connect to a server. */
|
|
11
|
+
export declare function manifestConfigHash(cfg: {
|
|
12
|
+
transport: string;
|
|
13
|
+
command?: string | undefined;
|
|
14
|
+
args?: string[] | undefined;
|
|
15
|
+
url?: string | undefined;
|
|
16
|
+
}): string;
|
|
17
|
+
/**
|
|
18
|
+
* Read a server's cached tools. Returns null when there is no cache or when the
|
|
19
|
+
* stored `configHash` no longer matches (server config changed → stale).
|
|
20
|
+
*/
|
|
21
|
+
export declare function readManifest(cacheDir: string, name: string, configHash: string): Promise<MCPTool[] | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Read a complete capability manifest. Legacy tools-only files are accepted and
|
|
24
|
+
* upgraded in memory, so existing lazy caches remain valid.
|
|
25
|
+
*/
|
|
26
|
+
export declare function readCapabilityManifest(cacheDir: string, name: string, configHash: string): Promise<MCPCapabilityManifest | null>;
|
|
27
|
+
/** Persist a server's discovered tools. Best-effort — IO errors are swallowed. */
|
|
28
|
+
export declare function writeManifest(cacheDir: string, name: string, configHash: string, tools: MCPTool[]): Promise<void>;
|
|
29
|
+
/** Persist a complete capability manifest using an atomic replace. */
|
|
30
|
+
export declare function writeCapabilityManifest(cacheDir: string, name: string, configHash: string, manifest: MCPCapabilityManifest): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=manifest-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-cache.d.ts","sourceRoot":"","sources":["../src/manifest-cache.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAKvB,MAAM,eAAe,CAAC;AAYvB,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IACtC,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;CACnC;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,MAAM,CAQT;AAQD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAG3B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CA4BvC;AAED,kFAAkF;AAClF,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,EAAE,GACf,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,sEAAsE;AACtE,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { MCPHealthThresholds } from '@wrongstack/core';
|
|
2
|
+
import type { ConnectionState } from './client.js';
|
|
3
|
+
/** Operator-facing health state. Intentionally separate from transport lifecycle state. */
|
|
4
|
+
export type MCPHealthState = 'disabled' | 'dormant' | 'connecting' | 'healthy' | 'degraded' | 'failed';
|
|
5
|
+
export type MCPFailureKind = 'transport' | 'protocol' | 'tool';
|
|
6
|
+
export type MCPOperationKind = 'connect' | 'reconnect' | 'discover' | 'call' | 'wake' | 'sleep' | 'restart' | 'stop' | 'failure';
|
|
7
|
+
/**
|
|
8
|
+
* Safe lifecycle event. `reason` is a bounded code owned by WrongStack, never
|
|
9
|
+
* a server error message, command, URL, tool name, argument, or token.
|
|
10
|
+
*/
|
|
11
|
+
export interface MCPOperationEvent {
|
|
12
|
+
serverName: string;
|
|
13
|
+
kind: MCPOperationKind;
|
|
14
|
+
at: number;
|
|
15
|
+
connectionState: ConnectionState;
|
|
16
|
+
healthState: MCPHealthState;
|
|
17
|
+
reason?: string | undefined;
|
|
18
|
+
failureKind?: MCPFailureKind | undefined;
|
|
19
|
+
durationMs?: number | undefined;
|
|
20
|
+
}
|
|
21
|
+
export interface MCPLatencySummary {
|
|
22
|
+
count: number;
|
|
23
|
+
lastMs?: number | undefined;
|
|
24
|
+
minMs?: number | undefined;
|
|
25
|
+
maxMs?: number | undefined;
|
|
26
|
+
p50Ms?: number | undefined;
|
|
27
|
+
p95Ms?: number | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface MCPServerOperationalHealth {
|
|
30
|
+
name: string;
|
|
31
|
+
connectionState: ConnectionState;
|
|
32
|
+
healthState: MCPHealthState;
|
|
33
|
+
lastSuccessAt?: number | undefined;
|
|
34
|
+
lastFailureAt?: number | undefined;
|
|
35
|
+
lastFailureKind?: MCPFailureKind | undefined;
|
|
36
|
+
lastReason?: string | undefined;
|
|
37
|
+
consecutiveFailures: number;
|
|
38
|
+
failures: Record<MCPFailureKind, number>;
|
|
39
|
+
reconnectCount: number;
|
|
40
|
+
wakeCount: number;
|
|
41
|
+
sleepCount: number;
|
|
42
|
+
restartCount: number;
|
|
43
|
+
connectionLatency: MCPLatencySummary;
|
|
44
|
+
discoveryLatency: MCPLatencySummary;
|
|
45
|
+
callLatency: MCPLatencySummary;
|
|
46
|
+
inFlightCalls: number;
|
|
47
|
+
peakInFlightCalls: number;
|
|
48
|
+
recentEvents: MCPOperationEvent[];
|
|
49
|
+
/** Last evaluation of configured health thresholds; empty if none configured. */
|
|
50
|
+
healthChecks: MCPHealthCheckResult[];
|
|
51
|
+
}
|
|
52
|
+
/** Result of comparing one operational metric against its configured threshold. */
|
|
53
|
+
export interface MCPHealthCheckResult {
|
|
54
|
+
name: string;
|
|
55
|
+
passed: boolean;
|
|
56
|
+
value?: number | undefined;
|
|
57
|
+
threshold?: number | undefined;
|
|
58
|
+
}
|
|
59
|
+
export type MCPOperationListener = (event: Readonly<MCPOperationEvent>) => void;
|
|
60
|
+
export declare const MCP_OPERATION_LIMITS: Readonly<{
|
|
61
|
+
LATENCY_SAMPLES: 128;
|
|
62
|
+
RECENT_EVENTS: 32;
|
|
63
|
+
REASON_CHARS: 64;
|
|
64
|
+
}>;
|
|
65
|
+
export interface MCPServerOperationState {
|
|
66
|
+
lastSuccessAt?: number | undefined;
|
|
67
|
+
lastFailureAt?: number | undefined;
|
|
68
|
+
lastFailureKind?: MCPFailureKind | undefined;
|
|
69
|
+
lastReason?: string | undefined;
|
|
70
|
+
consecutiveFailures: number;
|
|
71
|
+
failures: Record<MCPFailureKind, number>;
|
|
72
|
+
reconnectCount: number;
|
|
73
|
+
wakeCount: number;
|
|
74
|
+
sleepCount: number;
|
|
75
|
+
restartCount: number;
|
|
76
|
+
connectionSamples: number[];
|
|
77
|
+
discoverySamples: number[];
|
|
78
|
+
callSamples: number[];
|
|
79
|
+
inFlightCalls: number;
|
|
80
|
+
peakInFlightCalls: number;
|
|
81
|
+
recentEvents: MCPOperationEvent[];
|
|
82
|
+
}
|
|
83
|
+
export declare function createMCPServerOperationState(): MCPServerOperationState;
|
|
84
|
+
export declare function healthStateFor(connectionState: ConnectionState, operations: MCPServerOperationState, enabled?: boolean): MCPHealthState;
|
|
85
|
+
/**
|
|
86
|
+
* Compare bounded latency/in-flight samples against configured thresholds.
|
|
87
|
+
* Returns one check per configured threshold. All thresholds are optional;
|
|
88
|
+
* omitted thresholds produce no check and cannot mark a server degraded.
|
|
89
|
+
*/
|
|
90
|
+
export declare function evaluateHealthThresholds(operations: MCPServerOperationState, thresholds: MCPHealthThresholds | undefined): MCPHealthCheckResult[];
|
|
91
|
+
/**
|
|
92
|
+
* Apply threshold checks to a lifecycle-derived health state. Only `healthy`
|
|
93
|
+
* can be downgraded to `degraded`; existing degraded/failed states are kept
|
|
94
|
+
* so the original lifecycle reason remains authoritative.
|
|
95
|
+
*/
|
|
96
|
+
export declare function applyHealthThresholds(state: MCPHealthState, checks: readonly MCPHealthCheckResult[]): MCPHealthState;
|
|
97
|
+
export declare function summarizeLatency(samples: readonly number[]): MCPLatencySummary;
|
|
98
|
+
export declare function pushBounded<T>(target: T[], value: T, limit: number): void;
|
|
99
|
+
export declare function safeOperationReason(reason: string): string;
|
|
100
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** Typed MCP protocol surface for server discovery, resources, and prompts. */
|
|
2
|
+
export interface MCPImplementationInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
title?: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface MCPServerCapabilities {
|
|
8
|
+
tools?: {
|
|
9
|
+
listChanged?: boolean | undefined;
|
|
10
|
+
} | undefined;
|
|
11
|
+
resources?: {
|
|
12
|
+
subscribe?: boolean | undefined;
|
|
13
|
+
listChanged?: boolean | undefined;
|
|
14
|
+
} | undefined;
|
|
15
|
+
prompts?: {
|
|
16
|
+
listChanged?: boolean | undefined;
|
|
17
|
+
} | undefined;
|
|
18
|
+
logging?: Record<string, never> | undefined;
|
|
19
|
+
[capability: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface MCPServerMetadata {
|
|
22
|
+
protocolVersion: string;
|
|
23
|
+
capabilities: MCPServerCapabilities;
|
|
24
|
+
serverInfo: MCPImplementationInfo;
|
|
25
|
+
instructions?: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface MCPResource {
|
|
28
|
+
uri: string;
|
|
29
|
+
name: string;
|
|
30
|
+
title?: string | undefined;
|
|
31
|
+
description?: string | undefined;
|
|
32
|
+
mimeType?: string | undefined;
|
|
33
|
+
size?: number | undefined;
|
|
34
|
+
annotations?: Record<string, unknown> | undefined;
|
|
35
|
+
}
|
|
36
|
+
export interface MCPResourceTemplate {
|
|
37
|
+
uriTemplate: string;
|
|
38
|
+
name: string;
|
|
39
|
+
title?: string | undefined;
|
|
40
|
+
description?: string | undefined;
|
|
41
|
+
mimeType?: string | undefined;
|
|
42
|
+
annotations?: Record<string, unknown> | undefined;
|
|
43
|
+
}
|
|
44
|
+
export interface MCPResourceContents {
|
|
45
|
+
uri: string;
|
|
46
|
+
mimeType?: string | undefined;
|
|
47
|
+
text?: string | undefined;
|
|
48
|
+
blob?: string | undefined;
|
|
49
|
+
}
|
|
50
|
+
export interface MCPPromptArgument {
|
|
51
|
+
name: string;
|
|
52
|
+
description?: string | undefined;
|
|
53
|
+
required?: boolean | undefined;
|
|
54
|
+
}
|
|
55
|
+
export interface MCPPrompt {
|
|
56
|
+
name: string;
|
|
57
|
+
title?: string | undefined;
|
|
58
|
+
description?: string | undefined;
|
|
59
|
+
arguments?: MCPPromptArgument[] | undefined;
|
|
60
|
+
}
|
|
61
|
+
export interface MCPPromptMessage {
|
|
62
|
+
role: 'user' | 'assistant';
|
|
63
|
+
/** Preserve text, image, audio, embedded-resource, and resource-link blocks. */
|
|
64
|
+
content: unknown;
|
|
65
|
+
}
|
|
66
|
+
export interface MCPListResourcesResult {
|
|
67
|
+
resources: MCPResource[];
|
|
68
|
+
nextCursor?: string | undefined;
|
|
69
|
+
}
|
|
70
|
+
export interface MCPListResourceTemplatesResult {
|
|
71
|
+
resourceTemplates: MCPResourceTemplate[];
|
|
72
|
+
nextCursor?: string | undefined;
|
|
73
|
+
}
|
|
74
|
+
export interface MCPReadResourceResult {
|
|
75
|
+
contents: MCPResourceContents[];
|
|
76
|
+
}
|
|
77
|
+
export interface MCPListPromptsResult {
|
|
78
|
+
prompts: MCPPrompt[];
|
|
79
|
+
nextCursor?: string | undefined;
|
|
80
|
+
}
|
|
81
|
+
export interface MCPGetPromptResult {
|
|
82
|
+
description?: string | undefined;
|
|
83
|
+
messages: MCPPromptMessage[];
|
|
84
|
+
}
|
|
85
|
+
export declare function parseServerMetadata(value: unknown): MCPServerMetadata;
|
|
86
|
+
export declare function parseListResourcesResult(value: unknown): MCPListResourcesResult;
|
|
87
|
+
export declare function parseListResourceTemplatesResult(value: unknown): MCPListResourceTemplatesResult;
|
|
88
|
+
export declare function parseReadResourceResult(value: unknown): MCPReadResourceResult;
|
|
89
|
+
export declare function parseListPromptsResult(value: unknown): MCPListPromptsResult;
|
|
90
|
+
export declare function parseGetPromptResult(value: unknown): MCPGetPromptResult;
|
|
91
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import type { EventBus, Logger, MCPServerConfig, ToolRegistry } from '@wrongstack/core';
|
|
2
|
+
import type { MCPAuthorizationProvider } from './authorization.js';
|
|
3
|
+
import type { MCPAuthorizationManager, MCPAuthorizationStartResult, MCPAuthorizationStatus } from './authorization-manager.js';
|
|
4
|
+
import { type ConnectionState, MCPClient } from './client.js';
|
|
5
|
+
import { type MCPInsertionPolicy, type MCPPromptInsertion, type MCPResourceInsertion } from './content-selection.js';
|
|
6
|
+
import { type MCPOperationListener, type MCPServerOperationalHealth } from './operations.js';
|
|
7
|
+
import type { MCPGetPromptResult, MCPPrompt, MCPReadResourceResult, MCPResource, MCPResourceTemplate, MCPServerMetadata } from './protocol.js';
|
|
8
|
+
export interface MCPRegistryOptions {
|
|
9
|
+
toolRegistry: ToolRegistry;
|
|
10
|
+
events: EventBus;
|
|
11
|
+
log: Logger;
|
|
12
|
+
/**
|
|
13
|
+
* Directory for the on-disk tool-manifest cache (lazy-connect). Without it,
|
|
14
|
+
* `lazy` servers cannot register tools cold and fall back to eager connect.
|
|
15
|
+
* Typically `wpaths.cacheDir` (`~/.wrongstack/cache`).
|
|
16
|
+
*/
|
|
17
|
+
cacheDir?: string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Idle window (ms) after which a connected lazy server is auto-stopped and
|
|
20
|
+
* re-woken on the next tool call. 0 disables idle auto-sleep.
|
|
21
|
+
* Default: {@link MCP_CONSTANTS.IDLE.DEFAULT_TIMEOUT_MS}.
|
|
22
|
+
*/
|
|
23
|
+
idleTimeoutMs?: number | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Lazy mode: when true, MCP server tools are NOT registered into the
|
|
26
|
+
* tool registry on connect. They are cached internally and can be
|
|
27
|
+
* activated on demand via `activateServer(name)`. This is used in
|
|
28
|
+
* token-saving mode to avoid bloating the system prompt with 50-100+
|
|
29
|
+
* MCP tool descriptions. The model uses `mcp_control({ action: "activate", server: "..." })`
|
|
30
|
+
* to temporarily enable tools when needed.
|
|
31
|
+
* Default: false.
|
|
32
|
+
*/
|
|
33
|
+
lazyMode?: boolean | undefined;
|
|
34
|
+
/** Resolve host-owned, vault-backed OAuth state for an HTTP server. */
|
|
35
|
+
authorizationProviderFactory?: ((server: Readonly<MCPServerConfig>) => MCPAuthorizationProvider | undefined) | undefined;
|
|
36
|
+
/** Coordinate manual/headless OAuth start, completion, status, and logout. */
|
|
37
|
+
authorizationManager?: MCPAuthorizationManager | undefined;
|
|
38
|
+
}
|
|
39
|
+
export interface MCPRegistryCatalog {
|
|
40
|
+
name: string;
|
|
41
|
+
state: ConnectionState;
|
|
42
|
+
serverMetadata?: MCPServerMetadata | undefined;
|
|
43
|
+
resources?: MCPResource[] | undefined;
|
|
44
|
+
resourceTemplates?: MCPResourceTemplate[] | undefined;
|
|
45
|
+
prompts?: MCPPrompt[] | undefined;
|
|
46
|
+
}
|
|
47
|
+
export declare class MCPRegistry {
|
|
48
|
+
private readonly servers;
|
|
49
|
+
/** Configured-off servers are tracked without creating a transport/client. */
|
|
50
|
+
private readonly disabledServers;
|
|
51
|
+
private readonly toolRegistry;
|
|
52
|
+
private readonly events;
|
|
53
|
+
private readonly log;
|
|
54
|
+
private readonly lazyMode;
|
|
55
|
+
private readonly cacheDir?;
|
|
56
|
+
private readonly idleTimeoutMs;
|
|
57
|
+
private readonly authorizationProviderFactory?;
|
|
58
|
+
private readonly authorizationManager?;
|
|
59
|
+
private readonly operationListeners;
|
|
60
|
+
/** Single shared idle sweep timer (started lazily; unref'd; cleared on stopAll). */
|
|
61
|
+
private idleTimer?;
|
|
62
|
+
constructor(opts: MCPRegistryOptions);
|
|
63
|
+
private requireSlot;
|
|
64
|
+
beginAuthorization(name: string, input: {
|
|
65
|
+
clientId: string;
|
|
66
|
+
redirectUri: string;
|
|
67
|
+
scopes?: readonly string[] | undefined;
|
|
68
|
+
challengeHeader?: string | null | undefined;
|
|
69
|
+
signal?: AbortSignal | undefined;
|
|
70
|
+
}): Promise<MCPAuthorizationStartResult>;
|
|
71
|
+
completeAuthorization(name: string, callbackUrl: string, signal?: AbortSignal | undefined): Promise<MCPAuthorizationStatus>;
|
|
72
|
+
authorizationStatus(name: string): Promise<MCPAuthorizationStatus>;
|
|
73
|
+
disconnectAuthorization(name: string): Promise<boolean>;
|
|
74
|
+
private requireAuthorizationManager;
|
|
75
|
+
private requireHttpServerConfig;
|
|
76
|
+
start(cfg: MCPServerConfig): Promise<void>;
|
|
77
|
+
/** Record an intentionally disabled configuration without opening a transport. */
|
|
78
|
+
markDisabled(cfg: MCPServerConfig): void;
|
|
79
|
+
/** Remove residual operational/configuration state after a management delete. */
|
|
80
|
+
forget(name: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* Boot a lazy server WITHOUT spawning it. If a tool manifest is cached (from a
|
|
83
|
+
* prior connect with matching config), register resolver-backed wrappers and
|
|
84
|
+
* go `dormant` — the process spawns on the first tool call. If there is no
|
|
85
|
+
* cache yet, do a one-time cold discovery connect to learn + cache the tools.
|
|
86
|
+
*/
|
|
87
|
+
private startLazy;
|
|
88
|
+
/**
|
|
89
|
+
* Ensure a lazy server is connected, spawning it on demand. Single-flight:
|
|
90
|
+
* concurrent first-calls share one connect. Resolver wrappers call this.
|
|
91
|
+
*/
|
|
92
|
+
ensureConnected(name: string): Promise<MCPClient>;
|
|
93
|
+
/**
|
|
94
|
+
* Register all cached tools for a given server into the tool registry.
|
|
95
|
+
* No-op if tools are already registered or the server is not connected.
|
|
96
|
+
* The server connection stays alive — this only toggles tool visibility.
|
|
97
|
+
*/
|
|
98
|
+
activateServer(name: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Unregister all tools for a given server from the tool registry.
|
|
101
|
+
* The server connection stays alive — this only toggles tool visibility.
|
|
102
|
+
* Returns the number of tools that were deactivated.
|
|
103
|
+
*/
|
|
104
|
+
deactivateServer(name: string): number;
|
|
105
|
+
/**
|
|
106
|
+
* Check whether a server's tools are currently registered.
|
|
107
|
+
*/
|
|
108
|
+
isActivated(name: string): boolean;
|
|
109
|
+
stop(name: string): Promise<void>;
|
|
110
|
+
restart(name: string): Promise<void>;
|
|
111
|
+
list(): {
|
|
112
|
+
name: string;
|
|
113
|
+
state: ConnectionState;
|
|
114
|
+
toolCount: number;
|
|
115
|
+
tools: string[];
|
|
116
|
+
}[];
|
|
117
|
+
/**
|
|
118
|
+
* Subscribe to payload-free operational signals. Callers must still avoid
|
|
119
|
+
* using `serverName` as an unbounded metric label.
|
|
120
|
+
*/
|
|
121
|
+
onOperation(listener: MCPOperationListener): () => void;
|
|
122
|
+
/** Detailed, defensively-copied operational snapshots for CLI/WebUI/HQ. */
|
|
123
|
+
operationalHealth(): MCPServerOperationalHealth[];
|
|
124
|
+
getCatalog(name: string): MCPRegistryCatalog | undefined;
|
|
125
|
+
listResources(name: string, opts?: {
|
|
126
|
+
refresh?: boolean;
|
|
127
|
+
}): Promise<MCPResource[]>;
|
|
128
|
+
listResourceTemplates(name: string, opts?: {
|
|
129
|
+
refresh?: boolean;
|
|
130
|
+
}): Promise<MCPResourceTemplate[]>;
|
|
131
|
+
readResource(name: string, uri: string): Promise<MCPReadResourceResult>;
|
|
132
|
+
selectResourceForInsertion(name: string, uri: string, policy?: MCPInsertionPolicy | undefined): Promise<MCPResourceInsertion>;
|
|
133
|
+
subscribeResource(name: string, uri: string): Promise<void>;
|
|
134
|
+
unsubscribeResource(name: string, uri: string): Promise<void>;
|
|
135
|
+
listPrompts(name: string, opts?: {
|
|
136
|
+
refresh?: boolean;
|
|
137
|
+
}): Promise<MCPPrompt[]>;
|
|
138
|
+
getPrompt(serverName: string, promptName: string, args?: Record<string, string> | undefined): Promise<MCPGetPromptResult>;
|
|
139
|
+
selectPromptForInsertion(serverName: string, promptName: string, args?: Record<string, string> | undefined, policy?: MCPInsertionPolicy | undefined): Promise<MCPPromptInsertion>;
|
|
140
|
+
/**
|
|
141
|
+
* Resolve the live tool names for a slot — the registered names in normal
|
|
142
|
+
* mode, or the cached lazy-tool names when running in lazy mode (where
|
|
143
|
+
* tools are connected but intentionally not registered).
|
|
144
|
+
*/
|
|
145
|
+
private toolNamesForSlot;
|
|
146
|
+
/**
|
|
147
|
+
* Wrap + register (or cache) a server's tools. Lazy servers get resolver-backed
|
|
148
|
+
* wrappers that spawn the process on first use; eager servers bind the live
|
|
149
|
+
* client directly. Honours token-saving `lazyMode` (cache, don't register) and
|
|
150
|
+
* a register-once guard for lazy resolver wrappers (so a wake/reconnect reuses
|
|
151
|
+
* the existing registrations rather than churning the tool list).
|
|
152
|
+
*/
|
|
153
|
+
private applyTools;
|
|
154
|
+
private discoverCapabilities;
|
|
155
|
+
private persistCapabilityManifest;
|
|
156
|
+
/** Start the shared idle sweep timer once (unref'd so it never holds the process). */
|
|
157
|
+
private ensureIdleSweep;
|
|
158
|
+
/** Auto-sleep connected lazy servers that have been idle past the timeout. */
|
|
159
|
+
private sweepIdle;
|
|
160
|
+
/**
|
|
161
|
+
* Soft stop: close the server process but KEEP its resolver wrappers and
|
|
162
|
+
* cached manifest registered, so the next tool call transparently re-wakes it.
|
|
163
|
+
* Distinct from {@link stop} (full teardown for disable/remove).
|
|
164
|
+
*/
|
|
165
|
+
private sleepIdle;
|
|
166
|
+
/**
|
|
167
|
+
* Catalog of every server ever registered with this registry — includes
|
|
168
|
+
* servers that are stopped, failed, or not yet started.
|
|
169
|
+
* Useful for the `mcp_control` tool to show all known servers without
|
|
170
|
+
* triggering connections.
|
|
171
|
+
*/
|
|
172
|
+
describe(): {
|
|
173
|
+
name: string;
|
|
174
|
+
state: ConnectionState;
|
|
175
|
+
toolCount: number;
|
|
176
|
+
enabled: boolean;
|
|
177
|
+
tools: string[];
|
|
178
|
+
}[];
|
|
179
|
+
stopAll(): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* Health check — returns 'ok' for connected servers, the current state otherwise.
|
|
182
|
+
* For HTTP-based transports this could also ping the server.
|
|
183
|
+
*/
|
|
184
|
+
health(): {
|
|
185
|
+
name: string;
|
|
186
|
+
alive: boolean;
|
|
187
|
+
latencyMs?: number | undefined;
|
|
188
|
+
}[];
|
|
189
|
+
/**
|
|
190
|
+
* L2-C: handle `notifications/tools/list_changed` from the server.
|
|
191
|
+
* Unregister the previous wrapper set, then re-register the fresh
|
|
192
|
+
* tool list. The client has already refreshed its cache before
|
|
193
|
+
* dispatching — we just need to re-wrap and re-register.
|
|
194
|
+
* In lazy mode, only update the internal cache without registering.
|
|
195
|
+
*/
|
|
196
|
+
private readonly onToolsChanged;
|
|
197
|
+
private readonly onResourcesChanged;
|
|
198
|
+
private readonly onPromptsChanged;
|
|
199
|
+
private addCatalogListeners;
|
|
200
|
+
private removeCatalogListeners;
|
|
201
|
+
private readonly onChildExit;
|
|
202
|
+
/** Handles SSE / streamable-http disconnect — same recovery as stdio child exit. */
|
|
203
|
+
private readonly onTransportDisconnect;
|
|
204
|
+
/**
|
|
205
|
+
* L2-B: maximum number of reconnect cycles before staying `failed`.
|
|
206
|
+
* One cycle = one full `attemptConnect` (which itself may try up to 3
|
|
207
|
+
* times). Caps total reconnect storm at ~5 cycles, then the slot
|
|
208
|
+
* needs an explicit `restart()` to re-engage.
|
|
209
|
+
*/
|
|
210
|
+
private static readonly MAX_RECONNECT_CYCLES;
|
|
211
|
+
/** Base delay between cycles, in ms. Real delay adds jitter. */
|
|
212
|
+
private static readonly BASE_RECONNECT_DELAY_MS;
|
|
213
|
+
/** Hard ceiling on the inter-cycle delay so the user doesn't wait minutes. */
|
|
214
|
+
private static readonly MAX_RECONNECT_DELAY_MS;
|
|
215
|
+
private scheduleReconnect;
|
|
216
|
+
private attemptReconnect;
|
|
217
|
+
private recordSuccess;
|
|
218
|
+
private recordFailure;
|
|
219
|
+
private recordOperation;
|
|
220
|
+
/** Keeps private-method unit fixtures from needing to duplicate every slot field. */
|
|
221
|
+
private operationsFor;
|
|
222
|
+
private attemptConnect;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|