@dsh-cc/mcp-client 0.5.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.
Files changed (49) hide show
  1. package/LICENSE +201 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +149 -0
  4. package/README.zh.md +150 -0
  5. package/lib/auth.d.ts +66 -0
  6. package/lib/auth.d.ts.map +1 -0
  7. package/lib/auth.js +121 -0
  8. package/lib/auth.js.map +1 -0
  9. package/lib/connection.d.ts +98 -0
  10. package/lib/connection.d.ts.map +1 -0
  11. package/lib/connection.js +409 -0
  12. package/lib/connection.js.map +1 -0
  13. package/lib/defer.d.ts +39 -0
  14. package/lib/defer.d.ts.map +1 -0
  15. package/lib/defer.js +40 -0
  16. package/lib/defer.js.map +1 -0
  17. package/lib/index.d.ts +129 -0
  18. package/lib/index.d.ts.map +1 -0
  19. package/lib/index.js +198 -0
  20. package/lib/index.js.map +1 -0
  21. package/lib/invariant.d.ts +16 -0
  22. package/lib/invariant.d.ts.map +1 -0
  23. package/lib/invariant.js +22 -0
  24. package/lib/invariant.js.map +1 -0
  25. package/lib/prompts.d.ts +44 -0
  26. package/lib/prompts.d.ts.map +1 -0
  27. package/lib/prompts.js +166 -0
  28. package/lib/prompts.js.map +1 -0
  29. package/lib/registry.d.ts +94 -0
  30. package/lib/registry.d.ts.map +1 -0
  31. package/lib/registry.js +101 -0
  32. package/lib/registry.js.map +1 -0
  33. package/lib/resources.d.ts +42 -0
  34. package/lib/resources.d.ts.map +1 -0
  35. package/lib/resources.js +136 -0
  36. package/lib/resources.js.map +1 -0
  37. package/lib/stdio-stderr.d.ts +66 -0
  38. package/lib/stdio-stderr.d.ts.map +1 -0
  39. package/lib/stdio-stderr.js +187 -0
  40. package/lib/stdio-stderr.js.map +1 -0
  41. package/lib/tools.d.ts +161 -0
  42. package/lib/tools.d.ts.map +1 -0
  43. package/lib/tools.js +373 -0
  44. package/lib/tools.js.map +1 -0
  45. package/lib/transport.d.ts +50 -0
  46. package/lib/transport.d.ts.map +1 -0
  47. package/lib/transport.js +79 -0
  48. package/lib/transport.js.map +1 -0
  49. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
package/lib/defer.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Optional ToolSearch deferral for MCP listed tools.
3
+ *
4
+ * Duck-typed so `src/` never imports `@dsh-cc/tool-search` — the
5
+ * package is a test-only devDependency; production stays pluggable.
6
+ *
7
+ * @module
8
+ */
9
+ import type { Context } from '@deepseek-ai/cordis';
10
+ import type { ToolDefinition } from '@dsh-cc/tools';
11
+ /**
12
+ * Listed-tool count above which a server's deferrable tools register deferred
13
+ * (searchable via ToolSearch, invisible until activated) rather than eagerly.
14
+ */
15
+ export declare const DEFAULT_DEFER_TOOL_THRESHOLD = 8;
16
+ /** The optional `ctx.toolSearch` seam this bridge defers through. */
17
+ export interface ToolSearchSeam {
18
+ registerDeferred(reg: {
19
+ name: string;
20
+ description: string;
21
+ searchHint?: string;
22
+ activate: () => () => void;
23
+ }): () => void;
24
+ }
25
+ /** Resolve the optional toolSearch seam, or undefined when not mounted. */
26
+ export declare function toolSearchSeam(ctx: Context): ToolSearchSeam | undefined;
27
+ /**
28
+ * Publish one listed tool: deferred through ToolSearch, or eager
29
+ * `ctx.tools.register`. Deferred publishing detects a live foreign
30
+ * registration up front because `reserve` cannot see one.
31
+ */
32
+ export declare function publishListedTool(ctx: Context, opts: {
33
+ serverName: string;
34
+ }, publicName: string, entry: {
35
+ definition: ToolDefinition;
36
+ rawName: string;
37
+ alwaysLoad: boolean;
38
+ }, seam: ToolSearchSeam | undefined, deferServer: boolean): () => void;
39
+ //# sourceMappingURL=defer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.d.ts","sourceRoot":"","sources":["../src/defer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAE7C,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,GAAG,EAAE;QACpB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,MAAM,IAAI,CAAA;KAC3B,GAAG,MAAM,IAAI,CAAA;CACf;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,EAC3E,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,WAAW,EAAE,OAAO,GACnB,MAAM,IAAI,CAaZ"}
package/lib/defer.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Optional ToolSearch deferral for MCP listed tools.
3
+ *
4
+ * Duck-typed so `src/` never imports `@dsh-cc/tool-search` — the
5
+ * package is a test-only devDependency; production stays pluggable.
6
+ *
7
+ * @module
8
+ */
9
+ /**
10
+ * Listed-tool count above which a server's deferrable tools register deferred
11
+ * (searchable via ToolSearch, invisible until activated) rather than eagerly.
12
+ */
13
+ export const DEFAULT_DEFER_TOOL_THRESHOLD = 8;
14
+ /** Resolve the optional toolSearch seam, or undefined when not mounted. */
15
+ export function toolSearchSeam(ctx) {
16
+ const seam = ctx.get('toolSearch');
17
+ if (seam === undefined || typeof seam.registerDeferred !== 'function')
18
+ return undefined;
19
+ return seam;
20
+ }
21
+ /**
22
+ * Publish one listed tool: deferred through ToolSearch, or eager
23
+ * `ctx.tools.register`. Deferred publishing detects a live foreign
24
+ * registration up front because `reserve` cannot see one.
25
+ */
26
+ export function publishListedTool(ctx, opts, publicName, entry, seam, deferServer) {
27
+ if (deferServer && !entry.alwaysLoad) {
28
+ if (ctx.tools.get(publicName) !== undefined) {
29
+ throw new Error(`mcp-client(${opts.serverName}): tool name "${publicName}" is already registered`);
30
+ }
31
+ return seam.registerDeferred({
32
+ name: publicName,
33
+ description: entry.definition.description,
34
+ searchHint: `${opts.serverName} ${entry.rawName.replaceAll('_', ' ')} ${entry.rawName}`,
35
+ activate: () => ctx.tools.register(entry.definition),
36
+ });
37
+ }
38
+ return ctx.tools.register(entry.definition);
39
+ }
40
+ //# sourceMappingURL=defer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.js","sourceRoot":"","sources":["../src/defer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAY7C,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAA+B,CAAA;IAChE,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,UAAU;QAAE,OAAO,SAAS,CAAA;IACvF,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAY,EACZ,IAA4B,EAC5B,UAAkB,EAClB,KAA2E,EAC3E,IAAgC,EAChC,WAAoB;IAEpB,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,UAAU,iBAAiB,UAAU,yBAAyB,CAAC,CAAA;QACpG,CAAC;QACD,OAAO,IAAK,CAAC,gBAAgB,CAAC;YAC5B,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW;YACzC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACvF,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;SACrD,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AAC7C,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,129 @@
1
+ /**
2
+ * MCP client bridge plugin: connects to an external MCP server and registers
3
+ * its tools on `ctx.tools` under server-qualified public names
4
+ * (`mcp__<serverName>__<rawName>`). Each plugin instance connects to one MCP
5
+ * server; load multiple instances in `cordis.yml` for multiple servers.
6
+ *
7
+ * Namespace plugin (named exports, no default export). Lifecycle is
8
+ * effect-scoped: disposal disconnects from the server, unregisters all tools,
9
+ * and releases the `serverName` namespace reservation. HMR hot-swaps by
10
+ * disposing the old instance and creating a new one; identical `serverName`
11
+ * reproduces identical public tool names.
12
+ *
13
+ * @module @dsh-cc/mcp-client
14
+ */
15
+ import type { Context } from '@deepseek-ai/cordis';
16
+ import z from '@deepseek-ai/schemastery';
17
+ import type { ReconnectConfig } from './connection.ts';
18
+ import type { OAuthConfig } from './auth.ts';
19
+ export type { McpResult } from './tools.ts';
20
+ export type { ReconnectConfig, ResolvedReconnectPolicy, ConnectionHandle } from './connection.ts';
21
+ export type { OAuthConfig } from './auth.ts';
22
+ export { McpConnectionsService } from './registry.ts';
23
+ export type { McpConnectionState, McpConnectionEntry, McpConnectionControl } from './registry.ts';
24
+ /** Cordis plugin name used by loader diagnostics. */
25
+ export declare const name = "mcp-client";
26
+ /** Services required by this plugin. */
27
+ export declare const inject: string[];
28
+ /** Config for connecting to an MCP server via a spawned child process over stdio. */
29
+ export interface StdioConfig {
30
+ /** Selects child-process stdio transport. */
31
+ transport: 'stdio';
32
+ /**
33
+ * Stable local namespace for this server's model-facing tool names
34
+ * (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
35
+ * unique across live mcp-client instances.
36
+ */
37
+ serverName: string;
38
+ /** Executable used to start the server. */
39
+ command: string;
40
+ /** Arguments passed directly, without shell interpolation. */
41
+ args: string[];
42
+ /** Extra env vars merged on top of scrubbed ambient env. */
43
+ env: Record<string, string>;
44
+ /** Working directory for the child process. */
45
+ cwd: string;
46
+ /** Per-tool-call timeout in milliseconds. */
47
+ toolCallTimeoutMs: number;
48
+ /** Fail plugin activation when the initial connection or tool synchronization fails. */
49
+ failOnStartupError: boolean;
50
+ /**
51
+ * Return from `apply` without awaiting the initial connect: the handshake
52
+ * and tool discovery settle in the background. Ignored (fully blocking)
53
+ * when `failOnStartupError` is true.
54
+ */
55
+ deferStartupConnect?: boolean;
56
+ /** Automatic reconnect policy after a lost connection; omission uses the defaults. */
57
+ reconnect?: ReconnectConfig;
58
+ }
59
+ /** Config for connecting to an MCP server over Streamable HTTP (SSE). */
60
+ export interface StreamableHttpConfig {
61
+ /** Selects Streamable HTTP transport. */
62
+ transport: 'streamable-http';
63
+ /**
64
+ * Stable local namespace for this server's model-facing tool names
65
+ * (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
66
+ * unique across live mcp-client instances.
67
+ */
68
+ serverName: string;
69
+ /** MCP endpoint URL. */
70
+ url: string;
71
+ /** Additional headers attached to MCP requests. */
72
+ headers: Record<string, string>;
73
+ /** Optional OAuth flow; wires a credentials-backed client provider. */
74
+ oauth?: OAuthConfig;
75
+ /** Per-tool-call timeout in milliseconds. */
76
+ toolCallTimeoutMs: number;
77
+ /** Fail plugin activation when the initial connection or tool synchronization fails. */
78
+ failOnStartupError: boolean;
79
+ /**
80
+ * Return from `apply` without awaiting the initial connect: the handshake
81
+ * and tool discovery settle in the background. Ignored (fully blocking)
82
+ * when `failOnStartupError` is true.
83
+ */
84
+ deferStartupConnect?: boolean;
85
+ /** Automatic reconnect policy after a lost connection; omission uses the defaults. */
86
+ reconnect?: ReconnectConfig;
87
+ }
88
+ /** Config for connecting to an MCP server over legacy HTTP + SSE. */
89
+ export interface SseConfig {
90
+ /** Selects the SSE transport. */
91
+ transport: 'sse';
92
+ /**
93
+ * Stable local namespace for this server's model-facing tool names
94
+ * (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
95
+ * unique across live mcp-client instances.
96
+ */
97
+ serverName: string;
98
+ /** MCP SSE endpoint URL. */
99
+ url: string;
100
+ /** Additional headers attached to MCP requests. */
101
+ headers: Record<string, string>;
102
+ /** Optional OAuth flow; wires a credentials-backed client provider. */
103
+ oauth?: OAuthConfig;
104
+ /** Per-tool-call timeout in milliseconds. */
105
+ toolCallTimeoutMs: number;
106
+ /** Fail plugin activation when the initial connection or tool synchronization fails. */
107
+ failOnStartupError: boolean;
108
+ /**
109
+ * Return from `apply` without awaiting the initial connect: the handshake
110
+ * and tool discovery settle in the background. Ignored (fully blocking)
111
+ * when `failOnStartupError` is true.
112
+ */
113
+ deferStartupConnect?: boolean;
114
+ /** Automatic reconnect policy after a lost connection; omission uses the defaults. */
115
+ reconnect?: ReconnectConfig;
116
+ }
117
+ /** Configuration for one stdio, Streamable HTTP, or SSE MCP server. */
118
+ export type Config = StdioConfig | StreamableHttpConfig | SseConfig;
119
+ export declare const Config: z<Config>;
120
+ /**
121
+ * Connect one MCP server and publish its initial tool generation before activation.
122
+ * This entry remains explicitly `async`: Cordis treats a prototype-bearing
123
+ * ordinary function as a constructor, whose returned Promise is not startup work.
124
+ * @param ctx - plugin context carrying the tool registry.
125
+ * @param config - resolved transport and server namespace configuration.
126
+ * @returns startup readiness after connection and initial tool discovery settle.
127
+ */
128
+ export declare function apply(ctx: Context, config: Config): Promise<void>;
129
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAGxC,OAAO,KAAK,EAAuC,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAK5C,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACjG,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEjG,qDAAqD;AACrD,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC,wCAAwC;AACxC,eAAO,MAAM,MAAM,UAAY,CAAA;AAkB/B,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,CAAA;IACzB,wFAAwF;IACxF,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,sFAAsF;IACtF,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,SAAS,EAAE,iBAAiB,CAAA;IAC5B;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,uEAAuE;IACvE,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,CAAA;IACzB,wFAAwF;IACxF,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,sFAAsF;IACtF,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,SAAS,EAAE,KAAK,CAAA;IAChB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,uEAAuE;IACvE,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,CAAA;IACzB,wFAAwF;IACxF,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,sFAAsF;IACtF,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,uEAAuE;AACvE,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,oBAAoB,GAAG,SAAS,CAAA;AAenE,eAAO,MAAM,MAAM,EAmCF,CAAC,CAAC,MAAM,CAAC,CAAA;AAI1B;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHvE"}
package/lib/index.js ADDED
@@ -0,0 +1,198 @@
1
+ /**
2
+ * MCP client bridge plugin: connects to an external MCP server and registers
3
+ * its tools on `ctx.tools` under server-qualified public names
4
+ * (`mcp__<serverName>__<rawName>`). Each plugin instance connects to one MCP
5
+ * server; load multiple instances in `cordis.yml` for multiple servers.
6
+ *
7
+ * Namespace plugin (named exports, no default export). Lifecycle is
8
+ * effect-scoped: disposal disconnects from the server, unregisters all tools,
9
+ * and releases the `serverName` namespace reservation. HMR hot-swaps by
10
+ * disposing the old instance and creating a new one; identical `serverName`
11
+ * reproduces identical public tool names.
12
+ *
13
+ * @module @dsh-cc/mcp-client
14
+ */
15
+ import z from '@deepseek-ai/schemastery';
16
+ import { MAX_TIMER_DELAY_MS } from '@deepseek-ai/dsh-timeout';
17
+ import { RECONNECT_DEFAULTS, resolveReconnectPolicy, startConnection } from "./connection.js";
18
+ import { McpConnectionsService } from "./registry.js";
19
+ export { McpConnectionsService } from "./registry.js";
20
+ /** Cordis plugin name used by loader diagnostics. */
21
+ export const name = 'mcp-client';
22
+ /** Services required by this plugin. */
23
+ export const inject = ['tools'];
24
+ /** Default timeout for individual MCP tool calls (ms). */
25
+ const DEFAULT_TOOL_CALL_TIMEOUT_MS = 60_000;
26
+ /** Valid `serverName`, kept below the public tool-name budget. */
27
+ const SERVER_NAME_PATTERN = /^[A-Za-z0-9_-]{1,32}$/;
28
+ /**
29
+ * Live `serverName` reservations per app, keyed off `ctx.root` (multiple apps
30
+ * in one process — tests — must not see each other's names). A duplicate
31
+ * namespace is a configuration error surfaced at plugin load, never silent
32
+ * shadowing.
33
+ */
34
+ const activeServerNames = new WeakMap();
35
+ const Reconnect = z.object({
36
+ enabled: z.boolean().default(RECONNECT_DEFAULTS.enabled),
37
+ initialDelayMs: z.number().min(1).max(MAX_TIMER_DELAY_MS).default(RECONNECT_DEFAULTS.initialDelayMs),
38
+ maxDelayMs: z.number().min(1).max(MAX_TIMER_DELAY_MS).default(RECONNECT_DEFAULTS.maxDelayMs),
39
+ maxAttempts: z.number().step(1).min(1).max(Number.MAX_SAFE_INTEGER).default(RECONNECT_DEFAULTS.maxAttempts),
40
+ });
41
+ const OAuth = z.object({
42
+ redirectUrl: z.string().required(false),
43
+ clientName: z.string().required(false),
44
+ credentialPrefix: z.string().required(false),
45
+ });
46
+ export const Config = z.union([
47
+ z.object({
48
+ transport: z.const('stdio'),
49
+ serverName: z.string().required().pattern(SERVER_NAME_PATTERN),
50
+ command: z.string().required(),
51
+ args: z.array(String).default([]),
52
+ env: z.dict(String).default({}),
53
+ cwd: z.string().default(''),
54
+ toolCallTimeoutMs: z.number().default(DEFAULT_TOOL_CALL_TIMEOUT_MS),
55
+ failOnStartupError: z.boolean().default(false),
56
+ deferStartupConnect: z.boolean().default(false),
57
+ reconnect: Reconnect,
58
+ }),
59
+ z.object({
60
+ transport: z.const('streamable-http'),
61
+ serverName: z.string().required().pattern(SERVER_NAME_PATTERN),
62
+ url: z.string().required(),
63
+ headers: z.dict(String).default({}),
64
+ oauth: OAuth.required(false),
65
+ toolCallTimeoutMs: z.number().default(DEFAULT_TOOL_CALL_TIMEOUT_MS),
66
+ failOnStartupError: z.boolean().default(false),
67
+ deferStartupConnect: z.boolean().default(false),
68
+ reconnect: Reconnect,
69
+ }),
70
+ z.object({
71
+ transport: z.const('sse'),
72
+ serverName: z.string().required().pattern(SERVER_NAME_PATTERN),
73
+ url: z.string().required(),
74
+ headers: z.dict(String).default({}),
75
+ oauth: OAuth.required(false),
76
+ toolCallTimeoutMs: z.number().default(DEFAULT_TOOL_CALL_TIMEOUT_MS),
77
+ failOnStartupError: z.boolean().default(false),
78
+ deferStartupConnect: z.boolean().default(false),
79
+ reconnect: Reconnect,
80
+ }),
81
+ ]);
82
+ // ---- Plugin apply ----
83
+ /**
84
+ * Connect one MCP server and publish its initial tool generation before activation.
85
+ * This entry remains explicitly `async`: Cordis treats a prototype-bearing
86
+ * ordinary function as a constructor, whose returned Promise is not startup work.
87
+ * @param ctx - plugin context carrying the tool registry.
88
+ * @param config - resolved transport and server namespace configuration.
89
+ * @returns startup readiness after connection and initial tool discovery settle.
90
+ */
91
+ export async function apply(ctx, config) {
92
+ // Fail loud at load: reconnect misconfiguration (including programmatic
93
+ // construction that bypassed Schemastery) rejects THIS instance before any
94
+ // effect registers.
95
+ const reconnect = resolveReconnectPolicy(config.reconnect, `mcp-client(${config.serverName}): reconnect`);
96
+ // Reserve the namespace next: a duplicate `serverName` fails THIS instance
97
+ // at load with an actionable error and leaves the earlier instance intact.
98
+ ctx.effect(() => {
99
+ let names = activeServerNames.get(ctx.root);
100
+ if (!names) {
101
+ names = new Set();
102
+ activeServerNames.set(ctx.root, names);
103
+ }
104
+ if (names.has(config.serverName)) {
105
+ throw new Error(`mcp-client: serverName "${config.serverName}" is already in use by another mcp-client instance — pick a unique serverName in cordis.yml`);
106
+ }
107
+ names.add(config.serverName);
108
+ return () => void names.delete(config.serverName);
109
+ }, 'mcp-client.serverName');
110
+ // The MCP registry is an optional seam: provide one when the scope lacks it,
111
+ // otherwise reuse the shared instance so every mcp-client under one scope
112
+ // reports into a single service. Standalone (no consumer) still connects.
113
+ let registry = ctx.get('mcpConnections');
114
+ if (registry === undefined) {
115
+ registry = new McpConnectionsService(ctx);
116
+ }
117
+ const authRequired = config.transport !== 'stdio' && config.oauth !== undefined;
118
+ // The supervisor owns the client/transport generations, the reconnect
119
+ // loop, and the live tool registrations; disposal stops reconnection,
120
+ // quiesces in-flight work, and unregisters the current generation.
121
+ let current;
122
+ /** Dispose whatever supervisor is live (idempotent; used by disconnect & teardown). */
123
+ async function disposeConnection() {
124
+ const handle = current;
125
+ current = undefined;
126
+ if (handle)
127
+ await handle.dispose();
128
+ }
129
+ /**
130
+ * Establish a fresh connection: dispose any prior supervisor, kick off a new
131
+ * one, and settle the startup/blocking outcome. Reports state transitions to
132
+ * the registry and refreshes the tool count on success.
133
+ */
134
+ async function connect() {
135
+ await disposeConnection();
136
+ registry.report(config.serverName, 'connecting');
137
+ const handle = startConnection(ctx, config, reconnect);
138
+ current = handle;
139
+ const outcome = await handle.ready;
140
+ // Settle guard: a deferred continuation whose supervisor was already
141
+ // replaced (a newer connect) or disposed (the effect teardown unregistered
142
+ // the entry) must not write into the registry after the fact.
143
+ if (current !== handle)
144
+ return outcome;
145
+ if (outcome.error !== undefined) {
146
+ registry.report(config.serverName, 'error', { error: String(outcome.error) });
147
+ }
148
+ else {
149
+ registry.report(config.serverName, 'ready');
150
+ registry.setToolCount(config.serverName, handle.toolCount());
151
+ registry.setToolBreakdown(config.serverName, handle.toolBreakdown());
152
+ }
153
+ return outcome;
154
+ }
155
+ const control = {
156
+ async disconnect() {
157
+ await disposeConnection();
158
+ registry.report(config.serverName, 'disconnected');
159
+ },
160
+ async reconnect() {
161
+ const outcome = await connect();
162
+ if (outcome.error !== undefined)
163
+ throw outcome.error;
164
+ },
165
+ };
166
+ registry.register(config.serverName, control, authRequired);
167
+ ctx.effect(() => {
168
+ return async () => {
169
+ await disposeConnection();
170
+ registry.unregister(config.serverName);
171
+ };
172
+ }, 'mcp-client.connection');
173
+ // Block plugin activation on the initial connection + tool discovery so
174
+ // Cordis consumers observe the tools immediately after the fiber activates.
175
+ // When failOnStartupError is true, a failed initial attempt rejects the
176
+ // fiber (Cordis rolls it back); otherwise the error is logged and the
177
+ // supervisor enters its reconnect loop.
178
+ //
179
+ // With `deferStartupConnect`, activation returns right after the namespace
180
+ // reservation and registry.register above; the connect is kicked un-awaited
181
+ // and its settle continuation (guarded in `connect`) updates the registry
182
+ // and tools. `failOnStartupError` wins: deferral is ignored so the entire
183
+ // startup-options path stays blocking — that flag also flips the initial
184
+ // sync's `registrationFailure` to 'throw' (connection.ts), so a partial
185
+ // deferral would produce a fiber rollback nobody awaits.
186
+ if (config.deferStartupConnect === true && !config.failOnStartupError) {
187
+ // An unhandled rejection would kill the Node process; contain it loudly.
188
+ void connect().catch((error) => {
189
+ ctx.logger.warn(`mcp-client(${config.serverName}): deferred initial connect failed: ${String(error)}`);
190
+ });
191
+ return;
192
+ }
193
+ const outcome = await connect();
194
+ if (outcome.error !== undefined && config.failOnStartupError) {
195
+ throw new Error(`mcp-client(${config.serverName}): initial connection or tool synchronization failed`, { cause: outcome.error });
196
+ }
197
+ }
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Package-owned invariant companion for `@dsh-cc/mcp-client`.
3
+ * @module @dsh-cc/mcp-client/invariant
4
+ */
5
+ import type { Context } from '@deepseek-ai/cordis';
6
+ /** Cordis companion plugin name. */
7
+ export declare const name = "mcp-client-invariant";
8
+ /** Service required before the companion can reserve package ownership. */
9
+ export declare const inject: string[];
10
+ /**
11
+ * Register this package's invariant companion.
12
+ * @param ctx - Cordis context carrying the invariant service.
13
+ * @returns the installed registration's disposer after setup succeeds.
14
+ */
15
+ export declare const apply: (ctx: Context) => Promise<() => void>;
16
+ //# sourceMappingURL=invariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../src/invariant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,oCAAoC;AACpC,eAAO,MAAM,IAAI,yBAAyB,CAAA;AAC1C,2EAA2E;AAC3E,eAAO,MAAM,MAAM,UAAiB,CAAA;AAQpC;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,OAAO,KAAG,OAAO,CAAC,MAAM,IAAI,CACU,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Package-owned invariant companion for `@dsh-cc/mcp-client`.
3
+ * @module @dsh-cc/mcp-client/invariant
4
+ */
5
+ const PACKAGE_NAME = '@dsh-cc/mcp-client';
6
+ /** Cordis companion plugin name. */
7
+ export const name = 'mcp-client-invariant';
8
+ /** Service required before the companion can reserve package ownership. */
9
+ export const inject = ['invariants'];
10
+ /**
11
+ * No runtime invariant: MCP generations contribute through the tool registry, but the bridge
12
+ * exposes no independent server-to-tool snapshot after an asynchronous resync.
13
+ */
14
+ const install = () => { };
15
+ /**
16
+ * Register this package's invariant companion.
17
+ * @param ctx - Cordis context carrying the invariant service.
18
+ * @returns the installed registration's disposer after setup succeeds.
19
+ */
20
+ export const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
21
+ /* jscpd:ignore-end */
22
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.js","sourceRoot":"","sources":["../src/invariant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAEzC,oCAAoC;AACpC,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CAAA;AAC1C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,CAAA;AAEpC;;;GAGG;AACH,MAAM,OAAO,GAAuB,GAAG,EAAE,GAAE,CAAC,CAAA;AAE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAuB,EAAE,CACzD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;AACjE,sBAAsB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Prompt bridge: exposes an MCP server's `prompts` capability to the model as
3
+ * discoverable skills on the `ctx.skills` registry, one runtime skill per MCP
4
+ * prompt, when the server declares the capability.
5
+ *
6
+ * The harness's skill registry enforces a lowercase-kebab name grammar
7
+ * (`[a-z0-9]+(?:-[a-z0-9]+)*`), which `mcp__<server>__<prompt>` (with its
8
+ * double underscores) cannot satisfy. Names are therefore mapped to kebab-case
9
+ * (`mcp-<server>-<prompt>`); see {@link promptSkillName}. The body is the
10
+ * prompt's rendered text (or, for prompts that require arguments, the argument
11
+ * contract) — plain prose only. MCP-sourced skills must never embed or invoke
12
+ * shell; the body is always inert text.
13
+ *
14
+ * @module
15
+ */
16
+ import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
17
+ import type { Context } from '@deepseek-ai/cordis';
18
+ /** Registered skill disposers for one prompt generation. */
19
+ export type PromptDisposers = Map<string, () => void>;
20
+ /**
21
+ * Map an MCP prompt identity to a registry-valid skill name. The registry's
22
+ * grammar rejects underscores, so the `mcp__<server>__<prompt>` shape becomes
23
+ * lowercase kebab-case: non-alphanumeric runs collapse to single dashes, and a
24
+ * leading `mcp` prefix is guaranteed. Distinct identities may rarely collapse;
25
+ * the first registration wins and later duplicates log a registry warning.
26
+ *
27
+ * @param serverName - MCP server namespace.
28
+ * @param promptName - the MCP prompt's own name.
29
+ * @returns a valid lowercase-kebab skill name.
30
+ */
31
+ export declare function promptSkillName(serverName: string, promptName: string): string;
32
+ /**
33
+ * Register one skill per MCP prompt for a server on `ctx.skills`. Runs only
34
+ * when the server declared the `prompts` capability. Registering requires the
35
+ * `ctx.skills` service; when it is absent this is a no-op (the harness offers
36
+ * no prompt surface for that server).
37
+ *
38
+ * @param client - connected MCP client used to load prompt bodies.
39
+ * @param ctx - Cordis context; `ctx.skills` is read optionally.
40
+ * @param serverName - server namespace used to derive skill names.
41
+ * @returns disposers for every registered skill (never rejects).
42
+ */
43
+ export declare function syncPrompts(client: Client, ctx: Context, serverName: string): Promise<PromptDisposers>;
44
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAKvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,4DAA4D;AAC5D,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAA;AAErD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK9E;AAwFD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAuC1B"}