@wrongstack/mcp 0.285.0 → 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/manage.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { MCPServerConfig, Permission } from '@wrongstack/core';
1
+ import type { MCPHealthConfig, MCPServerConfig, Permission } from '@wrongstack/core';
2
2
  import type { MCPRegistry } from './registry.js';
3
3
  /** Transport values accepted from UI surfaces (UI also offers a bare "http"). */
4
4
  type TransportInput = 'stdio' | 'sse' | 'streamable-http' | 'http';
@@ -19,6 +19,8 @@ export interface McpServerInput {
19
19
  lazy?: boolean | undefined;
20
20
  /** Env var names to forward from parent process at spawn time. */
21
21
  passthroughEnv?: string[] | undefined;
22
+ /** Operational-health thresholds (optional; omitted means no threshold checks). */
23
+ health?: MCPHealthConfig | undefined;
22
24
  }
23
25
  /** Projected view of one server, merging disk config with live registry state. */
24
26
  export interface McpServerInfo {
@@ -1 +1 @@
1
- {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../src/manage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../src/manage.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,12 @@
1
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
+ }
2
10
  /** Stable hash of the fields that define how/where we connect to a server. */
3
11
  export declare function manifestConfigHash(cfg: {
4
12
  transport: string;
@@ -11,6 +19,13 @@ export declare function manifestConfigHash(cfg: {
11
19
  * stored `configHash` no longer matches (server config changed → stale).
12
20
  */
13
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>;
14
27
  /** Persist a server's discovered tools. Best-effort — IO errors are swallowed. */
15
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>;
16
31
  //# sourceMappingURL=manifest-cache.d.ts.map
@@ -1 +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;AAO3C,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,CAS3B;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,CAWf"}
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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"}
@@ -1,5 +1,10 @@
1
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';
2
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';
3
8
  export interface MCPRegistryOptions {
4
9
  toolRegistry: ToolRegistry;
5
10
  events: EventBus;
@@ -26,19 +31,53 @@ export interface MCPRegistryOptions {
26
31
  * Default: false.
27
32
  */
28
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;
29
46
  }
30
47
  export declare class MCPRegistry {
31
48
  private readonly servers;
49
+ /** Configured-off servers are tracked without creating a transport/client. */
50
+ private readonly disabledServers;
32
51
  private readonly toolRegistry;
33
52
  private readonly events;
34
53
  private readonly log;
35
54
  private readonly lazyMode;
36
55
  private readonly cacheDir?;
37
56
  private readonly idleTimeoutMs;
57
+ private readonly authorizationProviderFactory?;
58
+ private readonly authorizationManager?;
59
+ private readonly operationListeners;
38
60
  /** Single shared idle sweep timer (started lazily; unref'd; cleared on stopAll). */
39
61
  private idleTimer?;
40
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;
41
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;
42
81
  /**
43
82
  * Boot a lazy server WITHOUT spawning it. If a tool manifest is cached (from a
44
83
  * prior connect with matching config), register resolver-backed wrappers and
@@ -75,6 +114,29 @@ export declare class MCPRegistry {
75
114
  toolCount: number;
76
115
  tools: string[];
77
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>;
78
140
  /**
79
141
  * Resolve the live tool names for a slot — the registered names in normal
80
142
  * mode, or the cached lazy-tool names when running in lazy mode (where
@@ -89,6 +151,8 @@ export declare class MCPRegistry {
89
151
  * the existing registrations rather than churning the tool list).
90
152
  */
91
153
  private applyTools;
154
+ private discoverCapabilities;
155
+ private persistCapabilityManifest;
92
156
  /** Start the shared idle sweep timer once (unref'd so it never holds the process). */
93
157
  private ensureIdleSweep;
94
158
  /** Auto-sleep connected lazy servers that have been idle past the timeout. */
@@ -130,6 +194,10 @@ export declare class MCPRegistry {
130
194
  * In lazy mode, only update the internal cache without registering.
131
195
  */
132
196
  private readonly onToolsChanged;
197
+ private readonly onResourcesChanged;
198
+ private readonly onPromptsChanged;
199
+ private addCatalogListeners;
200
+ private removeCatalogListeners;
133
201
  private readonly onChildExit;
134
202
  /** Handles SSE / streamable-http disconnect — same recovery as stdio child exit. */
135
203
  private readonly onTransportDisconnect;
@@ -146,6 +214,11 @@ export declare class MCPRegistry {
146
214
  private static readonly MAX_RECONNECT_DELAY_MS;
147
215
  private scheduleReconnect;
148
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;
149
222
  private attemptConnect;
150
223
  }
151
224
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { MCPPromptArgument, MCPPromptMessage, MCPResourceContents } from './protocol.js';
1
2
  /**
2
3
  * Server-side MCP. The mirror image of `MCPClient`: instead of consuming a
3
4
  * remote MCP server, this lets WrongStack *be* an MCP server — exposing its
@@ -29,6 +30,24 @@ export interface MCPServerToolHost {
29
30
  listTools(): MCPServerTool[] | Promise<MCPServerTool[]>;
30
31
  callTool(name: string, args: Record<string, unknown>): Promise<MCPServerCallResult>;
31
32
  }
33
+ export interface MCPServerResource {
34
+ uri: string;
35
+ name: string;
36
+ title?: string | undefined;
37
+ description?: string | undefined;
38
+ mimeType?: string | undefined;
39
+ size?: number | undefined;
40
+ contents: MCPResourceContents[];
41
+ }
42
+ export interface MCPServerPrompt {
43
+ name: string;
44
+ title?: string | undefined;
45
+ description?: string | undefined;
46
+ arguments?: MCPPromptArgument[] | undefined;
47
+ /** Static rich messages, or a text template using {{argument}} placeholders. */
48
+ messages?: MCPPromptMessage[] | undefined;
49
+ template?: string | undefined;
50
+ }
32
51
  export interface MCPServerLogger {
33
52
  warn?(msg: string): void;
34
53
  info?(msg: string): void;
@@ -41,11 +60,17 @@ export interface MCPServerOptions {
41
60
  version: string;
42
61
  };
43
62
  logger?: MCPServerLogger | undefined;
63
+ /** Explicit allowlist only; omitted means this server exposes no resources. */
64
+ resources?: MCPServerResource[] | undefined;
65
+ /** Explicit allowlist only; omitted means this server exposes no prompts. */
66
+ prompts?: MCPServerPrompt[] | undefined;
44
67
  }
45
68
  export declare class MCPServer {
46
69
  private readonly host;
47
70
  private readonly serverInfo;
48
71
  private readonly logger?;
72
+ private readonly resources;
73
+ private readonly prompts;
49
74
  constructor(opts: MCPServerOptions);
50
75
  /**
51
76
  * Handle one raw JSON-RPC line. Returns the response JSON string for
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { MCPServerConfig, SecretVault } from '@wrongstack/core';
2
+ import { type MCPAuthorizationChallenge, type MCPAuthorizationContext, type MCPAuthorizationProvider, type MCPAuthorizationServerMetadata, type MCPTokenSet } from './authorization.js';
3
+ export interface MCPStoredAuthorization {
4
+ serverName: string;
5
+ resource: string;
6
+ clientId: string;
7
+ authorizationServer: MCPAuthorizationServerMetadata;
8
+ tokenSet: MCPTokenSet;
9
+ updatedAt: string;
10
+ }
11
+ export interface MCPAuthorizationStateEvent {
12
+ serverName: string;
13
+ state: 'authorized' | 'refreshed' | 'reauth_required' | 'removed';
14
+ resource: string;
15
+ expiresAt?: number | undefined;
16
+ scopes?: string[] | undefined;
17
+ }
18
+ export interface MCPRefreshingAuthorizationProviderOptions {
19
+ serverName: string;
20
+ resource: string;
21
+ store: MCPVaultTokenStore;
22
+ refreshSkewMs?: number | undefined;
23
+ onStateChange?: ((event: MCPAuthorizationStateEvent) => void) | undefined;
24
+ }
25
+ export interface MCPVaultProviderFactoryOptions {
26
+ store: MCPVaultTokenStore;
27
+ refreshSkewMs?: number | undefined;
28
+ onStateChange?: ((event: MCPAuthorizationStateEvent) => void) | undefined;
29
+ }
30
+ export declare class MCPVaultTokenStore {
31
+ private readonly filePath;
32
+ private readonly vault;
33
+ constructor(filePath: string, vault: SecretVault);
34
+ load(serverName: string, resource: string): Promise<MCPStoredAuthorization | undefined>;
35
+ save(value: MCPStoredAuthorization): Promise<void>;
36
+ remove(serverName: string, resource: string): Promise<boolean>;
37
+ private readFile;
38
+ private writeFile;
39
+ private encryptEntry;
40
+ private decryptEntry;
41
+ }
42
+ export declare class MCPRefreshingAuthorizationProvider implements MCPAuthorizationProvider {
43
+ private readonly options;
44
+ private refreshPromise?;
45
+ private readonly resource;
46
+ private readonly refreshSkewMs;
47
+ constructor(options: MCPRefreshingAuthorizationProviderOptions);
48
+ getAccessToken(context: MCPAuthorizationContext): Promise<MCPTokenSet | undefined>;
49
+ handleUnauthorized(challenge: MCPAuthorizationChallenge, context: MCPAuthorizationContext): Promise<boolean>;
50
+ private refresh;
51
+ private refreshInner;
52
+ private assertContext;
53
+ private emit;
54
+ }
55
+ export declare function createVaultBackedMcpAuthorizationProviderFactory(options: MCPVaultProviderFactoryOptions): (server: Readonly<MCPServerConfig>) => MCPAuthorizationProvider | undefined;
56
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,WAAW,EAGjB,MAAM,oBAAoB,CAAC;AAO5B,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,8BAA8B,CAAC;IACpD,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqBD,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,yCAAyC;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3E;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3E;AAED,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFxB,YACmB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EACjC;IAEE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAU5F;IAEK,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAavD;IAEK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWnE;YAEa,QAAQ;YAmBR,SAAS;IASvB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,YAAY;CAwBrB;AAED,qBAAa,kCAAmC,YAAW,wBAAwB;IAKrE,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,cAAc,CAAC,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,YAA6B,OAAO,EAAE,yCAAyC,EAG9E;IAEK,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAiBvF;IAEK,kBAAkB,CACtB,SAAS,EAAE,yBAAyB,EACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CASlB;IAED,OAAO,CAAC,OAAO;YAWD,YAAY;IA0B1B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,IAAI;CASb;AAED,wBAAgB,gDAAgD,CAC9D,OAAO,EAAE,8BAA8B,GACtC,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,wBAAwB,GAAG,SAAS,CAmB7E"}
@@ -1,5 +1,7 @@
1
1
  import * as https from 'node:https';
2
+ import { type MCPAuthorizationProvider } from './authorization.js';
2
3
  import type { ConnectionState, JsonRpcResponse, MCPTool, ToolCallResult } from './client.js';
4
+ import { type MCPServerMetadata } from './protocol.js';
3
5
  export type JsonRpcResult = {
4
6
  jsonrpc: string;
5
7
  id?: number | undefined;
@@ -16,6 +18,7 @@ export interface HttpTransportOptions {
16
18
  headers?: Record<string, string> | undefined;
17
19
  startupTimeoutMs?: number | undefined;
18
20
  requestTimeoutMs?: number | undefined;
21
+ authorizationProvider?: MCPAuthorizationProvider | undefined;
19
22
  /**
20
23
  * Per-request TLS configuration. When set, an https.Agent is created
21
24
  * and passed to fetch via the `dispatch` option. This avoids globally
@@ -51,14 +54,7 @@ export declare class SSEReader {
51
54
  private dispatch;
52
55
  reset(): void;
53
56
  }
54
- /**
55
- * Extract JSON-RPC envelopes from a streamable-http response body. Handles BOTH
56
- * plain NDJSON (one JSON object per line) AND SSE framing
57
- * (`event: message\ndata: {...}` blocks) — modern MCP servers (e.g. Context7)
58
- * reply with `text/event-stream` even on a single POST, so the data must be
59
- * un-prefixed before parsing. Multi-line `data:` values within one event are
60
- * joined per the SSE spec.
61
- */
57
+ /** Extract only response envelopes; notifications and server requests are not responses. */
62
58
  export declare function extractJsonRpcResults(text: string): JsonRpcResult[];
63
59
  /**
64
60
  * Fields and methods shared by all HTTP-based MCP transports.
@@ -70,22 +66,35 @@ export declare abstract class BaseHTTPTransport {
70
66
  protected readonly headers: Record<string, string>;
71
67
  protected readonly timeout: number;
72
68
  protected readonly requestTimeout: number;
69
+ protected readonly name: string;
70
+ protected readonly authorizationProvider?: MCPAuthorizationProvider | undefined;
71
+ protected readonly authorizationResource: string;
73
72
  /** Per-request TLS agent — created once from HttpTransportOptions.tls */
74
73
  protected readonly tlsAgent?: https.Agent | undefined;
75
74
  protected readonly tools: MCPTool[];
75
+ protected serverMetadata?: MCPServerMetadata | undefined;
76
76
  protected abortController?: AbortController | undefined;
77
77
  protected readonly disconnectHandlers: Array<() => void>;
78
78
  protected readonly toolsChangedListeners: Set<(tools: MCPTool[]) => void>;
79
+ protected readonly resourcesChangedListeners: Set<() => void>;
80
+ protected readonly promptsChangedListeners: Set<() => void>;
81
+ protected protocolVersion?: string | undefined;
79
82
  constructor(opts: HttpTransportOptions, transportName: string);
80
83
  getState(): ConnectionState;
84
+ protected fetchWithAuthorization(input: string, init: RequestInit, signal?: AbortSignal | undefined): Promise<Response>;
81
85
  listTools(): MCPTool[];
86
+ getServerMetadata(): MCPServerMetadata | undefined;
82
87
  onDisconnect(cb: () => void): () => void;
83
88
  onToolsChanged(cb: (tools: MCPTool[]) => void): () => void;
89
+ onResourcesChanged(cb: () => void): () => void;
90
+ onPromptsChanged(cb: () => void): () => void;
84
91
  /**
85
92
  * Fire all disconnect handlers. Subclasses call this when the connection
86
93
  * drops so the registry can schedule reconnects.
87
94
  */
88
95
  protected notifyDisconnect(): void;
96
+ protected notifyResourcesChanged(): void;
97
+ protected notifyPromptsChanged(): void;
89
98
  /**
90
99
  * Apply the pinned TLS agent (if configured) to a `RequestInit` object.
91
100
  * Uses `HttpDispatcher` from `@wrongstack/core`'s dispatcher-types shim,
@@ -120,7 +129,9 @@ export declare class SSETransport extends BaseHTTPTransport {
120
129
  signal?: AbortSignal | undefined;
121
130
  }): Promise<ToolCallResult>;
122
131
  /** Generic JSON-RPC request — used by MCPClient.request() for SSE transports. */
123
- request(method: string, params: unknown, timeoutMs?: number): Promise<JsonRpcResponse>;
132
+ request(method: string, params: unknown, timeoutMs?: number, opts?: {
133
+ signal?: AbortSignal | undefined;
134
+ }): Promise<JsonRpcResponse>;
124
135
  close(): Promise<void>;
125
136
  }
126
137
  /**
@@ -133,10 +144,15 @@ export declare class StreamableHTTPTransport extends BaseHTTPTransport {
133
144
  private sessionId?;
134
145
  constructor(opts: HttpTransportOptions);
135
146
  protected genId(): number;
147
+ private consumeResponseText;
148
+ private handleNotification;
149
+ private refreshTools;
136
150
  connect(): Promise<void>;
137
151
  private postRaw;
138
152
  /** Generic JSON-RPC request — used by MCPClient.request() for SSE/streamable-http transports. */
139
- request(method: string, params: unknown, timeoutMs?: number): Promise<JsonRpcResponse>;
153
+ request(method: string, params: unknown, timeoutMs?: number, opts?: {
154
+ signal?: AbortSignal | undefined;
155
+ }): Promise<JsonRpcResponse>;
140
156
  callTool(name: string, input: unknown, opts?: {
141
157
  signal?: AbortSignal | undefined;
142
158
  }): Promise<ToolCallResult>;