@mcsherrylabs/pi-meerkat 0.6.0 → 0.7.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.
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ // One user-facing stdio registration. Setup emits JSON but never edits a client registration.
3
+ import { fileURLToPath } from "node:url";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { applyRegistryConfig, loadFacadeConfig, saveFacadeConfig } from "./mcp-config.js";
6
+ import { createMeerkatFacade } from "./mcp-facade.js";
7
+ const HELP = `meerkat-mcp [--config /absolute/operator.json]
8
+
9
+ Without --config, initialize and the six registry reads remain usable from existing
10
+ MEERKAT_URL / EVOLVER_CHAIN_ID / APP_NODE_ID inputs; tools/list is explicitly degraded.
11
+ There is no project-file lookup or default authority configuration.
12
+
13
+ Explicit trusted operator setup (config must not already exist):
14
+ meerkat-mcp setup --config /absolute/operator.json
15
+ --node-url http(s)://node:port --content-url http(s)://content:port
16
+ --identity NAME --key-path /absolute/existing.key --key-type ed25519|bls
17
+ --tls-insecure true|false [--ca-file /absolute/ca.pem]
18
+ --meerkat-url http(s)://registry:port --chain-id 64-lowercase-hex
19
+ --node-id NAME --channel CHANNEL
20
+
21
+ Setup validates explicit inputs, checks existing key/CA references without reading
22
+ key bytes, writes a private 0600 config, and prints ONE mcpServers.meerkat stdio
23
+ registration using this installed entrypoint. Apply that registration yourself.
24
+ No key creation, claims, installer, node startup, or existing registration changes.
25
+ `;
26
+ function flags(args, allowed) {
27
+ const parsed = {};
28
+ for (let index = 0; index < args.length; index += 2) {
29
+ const name = args[index];
30
+ const value = args[index + 1];
31
+ if (!allowed.includes(name) || value === undefined || value.startsWith("--") || parsed[name] !== undefined)
32
+ throw new Error(`Unknown, duplicate, or incomplete option '${name}'. Use --help.`);
33
+ parsed[name] = value;
34
+ }
35
+ return parsed;
36
+ }
37
+ function required(values, name) {
38
+ const value = values[name];
39
+ if (!value)
40
+ throw new Error(`Missing explicit ${name}. Use --help.`);
41
+ return value;
42
+ }
43
+ export async function main(args = process.argv.slice(2)) {
44
+ if (args.length === 1 && (args[0] === "--help" || args[0] === "-h")) {
45
+ process.stdout.write(HELP);
46
+ return;
47
+ }
48
+ if (args[0] === "setup") {
49
+ const values = flags(args.slice(1), ["--config", "--node-url", "--content-url", "--identity", "--key-path", "--key-type",
50
+ "--tls-insecure", "--ca-file", "--meerkat-url", "--chain-id", "--node-id", "--channel"]);
51
+ const configPath = required(values, "--config");
52
+ const insecure = required(values, "--tls-insecure");
53
+ if (insecure !== "true" && insecure !== "false")
54
+ throw new Error("--tls-insecure must explicitly be true or false");
55
+ await saveFacadeConfig(configPath, {
56
+ version: 1, url: required(values, "--node-url"), identity: required(values, "--identity"),
57
+ tls: { insecure: insecure === "true", ...(values["--ca-file"] === undefined ? {} : { caFile: values["--ca-file"] }) },
58
+ meerkat: { contentUrl: required(values, "--content-url"), keyPath: required(values, "--key-path"), keyType: required(values, "--key-type"),
59
+ registryUrl: required(values, "--meerkat-url"), chainId: required(values, "--chain-id"),
60
+ nodeId: required(values, "--node-id"), channel: required(values, "--channel") },
61
+ });
62
+ process.stdout.write(JSON.stringify({ mcpServers: { meerkat: { command: process.execPath,
63
+ args: [fileURLToPath(import.meta.url), "--config", configPath] } } }, null, 2) + "\n");
64
+ return;
65
+ }
66
+ const values = flags(args, ["--config"]);
67
+ const config = values["--config"] ? await loadFacadeConfig(values["--config"]) : undefined;
68
+ if (config)
69
+ applyRegistryConfig(config);
70
+ const facade = createMeerkatFacade({ config });
71
+ const transport = new StdioServerTransport();
72
+ let finish;
73
+ const stopped = new Promise(resolve => { finish = resolve; });
74
+ let shuttingDown;
75
+ const shutdown = () => shuttingDown ??= (async () => {
76
+ try {
77
+ await facade.close();
78
+ }
79
+ finally {
80
+ finish();
81
+ }
82
+ })();
83
+ const stop = () => { void shutdown().catch(error => { console.error(`meerkat-mcp: cleanup failed: ${String(error)}`); process.exitCode = 1; }); };
84
+ process.once("SIGINT", stop);
85
+ process.once("SIGTERM", stop);
86
+ process.stdin.once("end", stop);
87
+ process.stdin.once("close", stop);
88
+ process.stdin.once("error", stop);
89
+ process.stdout.once("error", stop);
90
+ const onclose = facade.server.onclose;
91
+ facade.server.onclose = () => { onclose?.(); stop(); };
92
+ try {
93
+ await facade.server.connect(transport);
94
+ if (process.stdin.readableEnded || process.stdin.destroyed)
95
+ stop();
96
+ await stopped;
97
+ await shuttingDown;
98
+ }
99
+ finally {
100
+ await shutdown();
101
+ process.off("SIGINT", stop);
102
+ process.off("SIGTERM", stop);
103
+ process.stdin.off("end", stop);
104
+ process.stdin.off("close", stop);
105
+ process.stdin.off("error", stop);
106
+ process.stdout.off("error", stop);
107
+ }
108
+ }
109
+ // The bin is the executable boundary, not a source-checkout or unversioned package launcher.
110
+ await main().catch(error => { console.error(`meerkat-mcp: ${error instanceof Error ? error.message : String(error)}`); process.exitCode = 1; });
111
+ //# sourceMappingURL=mcp-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-cli.js","sourceRoot":"","sources":["../src/mcp-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface FacadeConfig {
2
+ readonly version: 1;
3
+ readonly url: string;
4
+ readonly identity: string;
5
+ readonly tls: {
6
+ readonly insecure: boolean;
7
+ readonly caFile?: string;
8
+ };
9
+ readonly meerkat: {
10
+ readonly contentUrl: string;
11
+ readonly keyPath: string;
12
+ readonly keyType: "ed25519" | "bls";
13
+ readonly registryUrl: string;
14
+ readonly chainId: string;
15
+ readonly nodeId: string;
16
+ readonly channel: string;
17
+ };
18
+ }
19
+ export declare function parseFacadeConfig(value: unknown): FacadeConfig;
20
+ /** Open exactly the operator-selected file; no cwd/home/project precedence or environment authority. */
21
+ export declare function loadFacadeConfig(path: string): Promise<FacadeConfig>;
22
+ /** Exclusive creation prevents accidental authority replacement. Check existence, never open the key. */
23
+ export declare function saveFacadeConfig(path: string, raw: unknown): Promise<FacadeConfig>;
24
+ /** Only these OS conveniences survive. Inherited signing/optional-capability and Node injection env do not. */
25
+ export declare function upstreamEnvironment(config: FacadeConfig, env?: NodeJS.ProcessEnv): Record<string, string>;
26
+ /** Registry reads retain their original implementation; only trusted process-start inputs bind them. */
27
+ export declare function applyRegistryConfig(config: FacadeConfig): void;
28
+ //# sourceMappingURL=mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,KAAK,CAAC;QACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAyBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAkB9D;AAED,wGAAwG;AACxG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAU1E;AAED,yGAAyG;AACzG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CASxF;AAED,+GAA+G;AAC/G,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMtH;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAM9D"}
@@ -0,0 +1,104 @@
1
+ // Operator-owned launch configuration only. Never consult a project file or read key bytes.
2
+ import { constants } from "node:fs";
3
+ import { open, stat } from "node:fs/promises";
4
+ import { isAbsolute } from "node:path";
5
+ function object(value, name, keys) {
6
+ if (!value || typeof value !== "object" || Array.isArray(value))
7
+ throw new Error(`${name} must be an object`);
8
+ const record = value;
9
+ if (Object.keys(record).some(k => !keys.includes(k)))
10
+ throw new Error(`${name} contains unknown fields`);
11
+ return record;
12
+ }
13
+ function text(value, name) {
14
+ if (typeof value !== "string" || !value.trim() || value !== value.trim() || /[\u0000-\u001f\u007f]/.test(value))
15
+ throw new Error(`${name} must be a nonempty string without surrounding whitespace or controls`);
16
+ return value;
17
+ }
18
+ function absolute(value, name) {
19
+ const path = text(value, name);
20
+ if (!isAbsolute(path))
21
+ throw new Error(`${name} must be an absolute path`);
22
+ return path;
23
+ }
24
+ function origin(value, name) {
25
+ const url = new URL(text(value, name));
26
+ if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.pathname !== "/" || url.search || url.hash)
27
+ throw new Error(`${name} must be an HTTP(S) origin without credentials, path, query or fragment`);
28
+ return url.origin;
29
+ }
30
+ export function parseFacadeConfig(value) {
31
+ const r = object(value, "config", ["version", "url", "identity", "tls", "meerkat"]);
32
+ if (r.version !== 1)
33
+ throw new Error("config.version must be 1");
34
+ const tls = object(r.tls, "tls", ["insecure", "caFile"]);
35
+ if (typeof tls.insecure !== "boolean")
36
+ throw new Error("tls.insecure must explicitly be true or false");
37
+ const m = object(r.meerkat, "meerkat", ["contentUrl", "keyPath", "keyType", "registryUrl", "chainId", "nodeId", "channel"]);
38
+ if (m.keyType !== "ed25519" && m.keyType !== "bls")
39
+ throw new Error("meerkat.keyType must be ed25519 or bls");
40
+ const chainId = text(m.chainId, "meerkat.chainId");
41
+ if (!/^[0-9a-f]{64}$/.test(chainId))
42
+ throw new Error("meerkat.chainId must be 64 lowercase hex characters");
43
+ return Object.freeze({
44
+ version: 1, url: origin(r.url, "url"), identity: text(r.identity, "identity"),
45
+ tls: Object.freeze({ insecure: tls.insecure, ...(tls.caFile === undefined ? {} : { caFile: absolute(tls.caFile, "tls.caFile") }) }),
46
+ meerkat: Object.freeze({
47
+ contentUrl: origin(m.contentUrl, "meerkat.contentUrl"), keyPath: absolute(m.keyPath, "meerkat.keyPath"), keyType: m.keyType,
48
+ registryUrl: origin(m.registryUrl, "meerkat.registryUrl"), chainId,
49
+ nodeId: text(m.nodeId, "meerkat.nodeId"), channel: text(m.channel, "meerkat.channel"),
50
+ }),
51
+ });
52
+ }
53
+ /** Open exactly the operator-selected file; no cwd/home/project precedence or environment authority. */
54
+ export async function loadFacadeConfig(path) {
55
+ absolute(path, "--config");
56
+ const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
57
+ try {
58
+ const info = await handle.stat();
59
+ if (!info.isFile() || info.size > 64 * 1024)
60
+ throw new Error("config must be a regular file of at most 64 KiB");
61
+ if (typeof process.getuid === "function" && (info.uid !== process.getuid() || (info.mode & 0o022) !== 0))
62
+ throw new Error("config must belong to the launching operator and must not be group/world writable");
63
+ return parseFacadeConfig(JSON.parse(await handle.readFile("utf8")));
64
+ }
65
+ finally {
66
+ await handle.close();
67
+ }
68
+ }
69
+ /** Exclusive creation prevents accidental authority replacement. Check existence, never open the key. */
70
+ export async function saveFacadeConfig(path, raw) {
71
+ absolute(path, "--config");
72
+ const config = parseFacadeConfig(raw);
73
+ if (!(await stat(config.meerkat.keyPath)).isFile())
74
+ throw new Error("key reference must name an existing regular file");
75
+ if (config.tls.caFile && !(await stat(config.tls.caFile)).isFile())
76
+ throw new Error("CA reference must name an existing regular file");
77
+ const handle = await open(path, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600);
78
+ try {
79
+ await handle.writeFile(JSON.stringify(config, null, 2) + "\n", "utf8");
80
+ await handle.sync();
81
+ }
82
+ finally {
83
+ await handle.close();
84
+ }
85
+ return config;
86
+ }
87
+ /** Only these OS conveniences survive. Inherited signing/optional-capability and Node injection env do not. */
88
+ export function upstreamEnvironment(config, env = process.env) {
89
+ const result = {};
90
+ for (const key of ["PATH", "HOME", "USERPROFILE", "SYSTEMROOT", "WINDIR", "TMPDIR", "TEMP", "TMP", "LANG"])
91
+ if (env[key] !== undefined)
92
+ result[key] = env[key];
93
+ return { ...result, EVOLVER_MCP_TRANSPORT: "stdio", EVOLVER_KEY_PATH: config.meerkat.keyPath,
94
+ EVOLVER_KEY_TYPE: config.meerkat.keyType, EVOLVER_CONTENT_URL: config.meerkat.contentUrl };
95
+ }
96
+ /** Registry reads retain their original implementation; only trusted process-start inputs bind them. */
97
+ export function applyRegistryConfig(config) {
98
+ process.env.MEERKAT_URL = config.meerkat.registryUrl;
99
+ process.env.EVOLVER_CHAIN_ID = config.meerkat.chainId;
100
+ process.env.APP_NODE_ID = config.meerkat.nodeId;
101
+ process.env.REGISTRY_CHANNEL = config.meerkat.channel;
102
+ // Preserve the existing REGISTRY_URL rename refusal instead of silently reviving that alias.
103
+ }
104
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import type { FacadeConfig } from "./mcp-config.js";
3
+ import type { UpstreamSession } from "./mcp-upstream.js";
4
+ export interface FacadeOptions {
5
+ readonly config?: FacadeConfig;
6
+ /** Dependency injection for protocol fixtures; the shipped CLI always uses OwnedUpstream. */
7
+ readonly upstreamFactory?: () => UpstreamSession;
8
+ readonly diagnostic?: (message: string) => void;
9
+ readonly announceOptions?: {
10
+ afterSign?: (txId: string) => Promise<void>;
11
+ timeoutMs?: number;
12
+ };
13
+ }
14
+ export interface MeerkatFacade {
15
+ readonly server: Server;
16
+ close(): Promise<void>;
17
+ }
18
+ export declare function createMeerkatFacade(options?: FacadeOptions): MeerkatFacade;
19
+ export declare const createFacade: typeof createMeerkatFacade;
20
+ //# sourceMappingURL=mcp-facade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-facade.d.ts","sourceRoot":"","sources":["../src/mcp-facade.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,eAAe,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,eAAe,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AACD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,CAiK9E;AAED,eAAO,MAAM,YAAY,4BAAsB,CAAC"}
@@ -0,0 +1,200 @@
1
+ // Tool-only MCP facade. A catalog is routing authority only after complete discovery succeeds.
2
+ import { createRequire } from "node:module";
3
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
+ import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError } from "@modelcontextprotocol/sdk/types.js";
5
+ import { createTools } from "./tools.js";
6
+ import { announceViaMcp } from "./mcp-announce.js";
7
+ import { OwnedUpstream, UPSTREAM_START_TIMEOUT_MS } from "./mcp-upstream.js";
8
+ export function createMeerkatFacade(options = {}) {
9
+ const diagnose = options.diagnostic ?? (message => console.error(`meerkat-mcp: ${message}`));
10
+ const { version } = createRequire(import.meta.url)("../package.json");
11
+ const server = new Server({ name: "meerkat", version }, { capabilities: { tools: { listChanged: true } } });
12
+ let upstream;
13
+ let routes = new Map();
14
+ let healthy = false;
15
+ let unavailable = "Upstream unavailable: no trusted operator configuration; run meerkat-mcp setup.";
16
+ let closed = false;
17
+ let revision = 0;
18
+ let refreshing;
19
+ let refreshAgain = false;
20
+ let closing;
21
+ // Existing registry/ProcessorClient reads have their own finite deadlines, but no caller
22
+ // cancellation API. Await them at shutdown too rather than claiming their sockets are gone.
23
+ const active = new Set();
24
+ const lifetime = new AbortController();
25
+ const channel = options.config?.meerkat.channel ?? process.env.REGISTRY_CHANNEL?.trim() ?? "ce.meerkat.announcements";
26
+ const tools = createTools(async (signal, request) => {
27
+ // This invocation captures exactly one session; no proxy can reconnect between sign/submit.
28
+ if (!healthy)
29
+ await refresh(signal);
30
+ signal.throwIfAborted();
31
+ const session = upstream;
32
+ if (!healthy || !session?.isOpen())
33
+ return { kind: "error", stage: "preflight", message: `meerkat_announce refused. ${unavailable}` };
34
+ return announceViaMcp(session, request, { ...options.announceOptions, channel, signal });
35
+ }, () => channel);
36
+ const local = new Map(tools.map(tool => [tool.name, tool]));
37
+ const localDefinitions = tools.map(tool => ({ name: tool.name, description: tool.description,
38
+ inputSchema: tool.parameters }));
39
+ function listResult() {
40
+ return healthy
41
+ ? { tools: [...routes.values(), ...localDefinitions] }
42
+ : { tools: localDefinitions, _meta: { "io.meerkat/upstream": { status: "unavailable", degraded: true, diagnostic: unavailable } } };
43
+ }
44
+ function invalidate(message) {
45
+ revision++;
46
+ healthy = false;
47
+ routes = new Map();
48
+ unavailable = message;
49
+ }
50
+ async function notify() {
51
+ if (!closed) {
52
+ try {
53
+ await server.notification({ method: "notifications/tools/list_changed" });
54
+ }
55
+ catch { /* A downstream close is handled by the process owner. */ }
56
+ }
57
+ }
58
+ function changed() {
59
+ invalidate("Upstream unavailable: catalog changed; complete refresh required.");
60
+ if (refreshing)
61
+ refreshAgain = true;
62
+ else
63
+ void refresh().then(notify);
64
+ }
65
+ async function discover(signal) {
66
+ // Ordinary refresh is speculative: retain the last complete healthy routing snapshot
67
+ // until atomic replacement. Failures, actual list changes and session loss invalidate it.
68
+ const bound = AbortSignal.any([lifetime.signal, AbortSignal.timeout(UPSTREAM_START_TIMEOUT_MS), ...(signal ? [signal] : [])]);
69
+ const generation = revision;
70
+ let current = upstream;
71
+ try {
72
+ bound.throwIfAborted();
73
+ if (!current?.isOpen()) {
74
+ if (current)
75
+ await current.close();
76
+ if (!options.upstreamFactory && !options.config)
77
+ throw new Error("no trusted operator configuration; run meerkat-mcp setup");
78
+ current = options.upstreamFactory?.() ?? new OwnedUpstream(options.config);
79
+ upstream = current;
80
+ const selected = current;
81
+ selected.onListChanged = changed;
82
+ selected.onClosed = () => {
83
+ if (upstream !== selected || closed)
84
+ return;
85
+ invalidate("Upstream unavailable: owned session closed; interrupted writes will not be resumed or replayed.");
86
+ void notify();
87
+ };
88
+ await selected.connect(bound);
89
+ }
90
+ const discovered = new Map();
91
+ const cursors = new Set();
92
+ let cursor;
93
+ do {
94
+ bound.throwIfAborted();
95
+ const page = await current.listTools(cursor, bound);
96
+ for (const tool of page.tools) {
97
+ if (local.has(tool.name) || discovered.has(tool.name))
98
+ throw new Error(`Tool name collision: ${tool.name}`);
99
+ discovered.set(tool.name, tool);
100
+ }
101
+ cursor = page.nextCursor;
102
+ if (cursor !== undefined) {
103
+ if (cursors.has(cursor))
104
+ throw new Error("Upstream tools/list repeated a pagination cursor");
105
+ cursors.add(cursor);
106
+ }
107
+ } while (cursor !== undefined);
108
+ bound.throwIfAborted();
109
+ if (!current.isOpen() || generation !== revision)
110
+ throw new Error("upstream session or catalog changed during discovery");
111
+ routes = discovered;
112
+ healthy = true;
113
+ }
114
+ catch (error) {
115
+ invalidate(`Upstream unavailable: ${error instanceof Error ? error.message : String(error)}. Local-only degraded catalog; writes are not replayed.`);
116
+ diagnose(unavailable);
117
+ // Retire the failed session. Only a later explicit discovery may establish a fresh one.
118
+ if (upstream === current)
119
+ upstream = undefined;
120
+ await current?.close();
121
+ }
122
+ return listResult();
123
+ }
124
+ function refresh(signal) {
125
+ if (closed)
126
+ return Promise.resolve(listResult());
127
+ if (!refreshing) {
128
+ refreshing = discover(signal).finally(() => {
129
+ refreshing = undefined;
130
+ if (refreshAgain && !closed) {
131
+ refreshAgain = false;
132
+ void refresh().then(notify);
133
+ }
134
+ });
135
+ }
136
+ return refreshing;
137
+ }
138
+ server.setRequestHandler(ListToolsRequestSchema, async (_request, extra) => {
139
+ const wasHealthy = healthy;
140
+ const result = await refresh(extra.signal);
141
+ extra.signal.throwIfAborted();
142
+ if (!wasHealthy && healthy)
143
+ void notify();
144
+ return result;
145
+ });
146
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
147
+ const running = (async () => {
148
+ extra.signal.throwIfAborted();
149
+ const { name } = request.params;
150
+ const tool = local.get(name);
151
+ if (tool)
152
+ return localResult(await tool.run(extra.signal, request.params.arguments ?? {}));
153
+ if (!healthy || !routes.has(name) || !upstream?.isOpen())
154
+ throw new McpError(ErrorCode.InvalidParams, `Unknown or undiscovered tool '${name}'.${healthy ? "" : ` ${unavailable}`}`);
155
+ // Forward supported request/result fields intact. No owned orchestration parsing or retries.
156
+ return upstream.callToolRequest(request.params, extra.signal);
157
+ })();
158
+ active.add(running);
159
+ try {
160
+ return await running;
161
+ }
162
+ finally {
163
+ active.delete(running);
164
+ }
165
+ });
166
+ function localResult(result) {
167
+ const kind = result && typeof result === "object" ? result.kind : undefined;
168
+ return { content: [{ type: "text", text: JSON.stringify(result) }],
169
+ ...(kind === "error" || kind === "unknown" || kind === "refused" || kind === "misconfigured" || kind === "unreachable" ? { isError: true } : {}) };
170
+ }
171
+ function close() {
172
+ if (closing)
173
+ return closing;
174
+ closed = true;
175
+ lifetime.abort();
176
+ invalidate("Upstream unavailable: facade closed.");
177
+ return closing = (async () => {
178
+ try {
179
+ await refreshing;
180
+ }
181
+ finally {
182
+ try {
183
+ await upstream?.close();
184
+ }
185
+ finally {
186
+ try {
187
+ await server.close();
188
+ }
189
+ finally {
190
+ await Promise.allSettled([...active]);
191
+ }
192
+ }
193
+ }
194
+ })();
195
+ }
196
+ server.onclose = () => { void close().catch(error => diagnose(`Cleanup failed: ${String(error)}`)); };
197
+ return { server, close };
198
+ }
199
+ export const createFacade = createMeerkatFacade;
200
+ //# sourceMappingURL=mcp-facade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-facade.js","sourceRoot":"","sources":["../src/mcp-facade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { CallToolRequest, CallToolResult, ListToolsResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { FacadeConfig } from "./mcp-config.js";
3
+ export declare const EVOLVER_MCP_VERSION = "0.15.0";
4
+ export declare const UPSTREAM_START_TIMEOUT_MS = 15000;
5
+ export declare const UPSTREAM_CALL_TIMEOUT_MS = 60000;
6
+ /** Resolve package metadata through this installed dependency tree, never PATH/global/npx/source. */
7
+ export declare function resolveUpstreamBin(): Promise<string>;
8
+ export interface UpstreamSession {
9
+ connect(signal?: AbortSignal): Promise<void>;
10
+ listTools(cursor?: string, signal?: AbortSignal): Promise<ListToolsResult>;
11
+ callTool(name: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<CallToolResult>;
12
+ callToolRequest(params: CallToolRequest["params"], signal?: AbortSignal): Promise<CallToolResult>;
13
+ isOpen(): boolean;
14
+ supportsListChanged(): boolean;
15
+ onListChanged?: () => void;
16
+ onClosed?: () => void;
17
+ close(): Promise<void>;
18
+ }
19
+ export declare class OwnedUpstream implements UpstreamSession {
20
+ private readonly config;
21
+ private client?;
22
+ private transport?;
23
+ private open;
24
+ private closing?;
25
+ private connecting?;
26
+ private disposed?;
27
+ private snapshotDirectory?;
28
+ private readonly startupAbort;
29
+ onListChanged?: () => void;
30
+ onClosed?: () => void;
31
+ constructor(config: FacadeConfig);
32
+ connect(signal?: AbortSignal): Promise<void>;
33
+ private start;
34
+ isOpen(): boolean;
35
+ supportsListChanged(): boolean;
36
+ listTools(cursor?: string, signal?: AbortSignal): Promise<ListToolsResult>;
37
+ callTool(name: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<CallToolResult>;
38
+ callToolRequest(params: CallToolRequest["params"], signal?: AbortSignal): Promise<CallToolResult>;
39
+ close(): Promise<void>;
40
+ private dispose;
41
+ }
42
+ //# sourceMappingURL=mcp-upstream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-upstream.d.ts","sourceRoot":"","sources":["../src/mcp-upstream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,qGAAqG;AACrG,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgB1D;AAuBD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACrG,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClG,MAAM,IAAI,OAAO,CAAC;IAClB,mBAAmB,IAAI,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,aAAc,YAAW,eAAe;IAWvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVnC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAA8B;IAChD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;gBACO,MAAM,EAAE,YAAY;IAEjD,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAK9B,KAAK;IA8BnB,MAAM,IAAI,OAAO;IACjB,mBAAmB,IAAI,OAAO;IACxB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAMhF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAG9F,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IASvG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,OAAO,CAAC,OAAO;CAUhB"}