@corenel/mcp 0.5.1 → 0.6.1

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.
@@ -1,5 +1,17 @@
1
- import type { AgentTool } from '@corenel/protocol';
1
+ import type { AgentTool, JsonSchema } from '@corenel/protocol';
2
2
  import type { McpRegistry } from './registry';
3
+ /** `McpTool.inputSchema` is `unknown` -- some servers send no schema at all,
4
+ * or something that isn't a JSON Schema object. Never pass that through as
5
+ * `undefined`: an `AgentTool` with no `parameters` is one a model can call
6
+ * with any arguments at all, which is worse than an (accurate) empty one. */
7
+ export declare function toParameters(inputSchema: unknown): JsonSchema;
8
+ /** MCP's `tools/call` result content is `unknown` by the time it reaches
9
+ * here (httpClient.ts passes the JSON-RPC `result.content` through as-is).
10
+ * The common shape per the MCP spec is an array of content blocks
11
+ * (`{ type: 'text', text }` and friends); join the text blocks the way the
12
+ * model expects a tool result to read, and fall back to JSON for anything
13
+ * that isn't that shape rather than losing the payload. */
14
+ export declare function formatContent(content: unknown): string;
3
15
  /** Build one `AgentTool` per registry entry, in the registry's order.
4
16
  *
5
17
  * A server/tool pair whose name can't be safely packed into a wire name
@@ -1 +1 @@
1
- {"version":3,"file":"asAgentTools.d.ts","sourceRoot":"","sources":["../src/asAgentTools.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoC9C;;;;;;;oDAOoD;AACpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,EAAE,CAa/D"}
1
+ {"version":3,"file":"asAgentTools.d.ts","sourceRoot":"","sources":["../src/asAgentTools.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C;;;8EAG8E;AAC9E,wBAAgB,YAAY,CAAC,WAAW,EAAE,OAAO,GAAG,UAAU,CAG7D;AAED;;;;;4DAK4D;AAC5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAWtD;AAED;;;;;;;oDAOoD;AACpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,EAAE,CAa/D"}
@@ -6,7 +6,7 @@ function isPlainObject(v) {
6
6
  * or something that isn't a JSON Schema object. Never pass that through as
7
7
  * `undefined`: an `AgentTool` with no `parameters` is one a model can call
8
8
  * with any arguments at all, which is worse than an (accurate) empty one. */
9
- function toParameters(inputSchema) {
9
+ export function toParameters(inputSchema) {
10
10
  if (isPlainObject(inputSchema))
11
11
  return inputSchema;
12
12
  return { type: 'object', properties: {} };
@@ -17,7 +17,7 @@ function toParameters(inputSchema) {
17
17
  * (`{ type: 'text', text }` and friends); join the text blocks the way the
18
18
  * model expects a tool result to read, and fall back to JSON for anything
19
19
  * that isn't that shape rather than losing the payload. */
20
- function formatContent(content) {
20
+ export function formatContent(content) {
21
21
  if (typeof content === 'string')
22
22
  return content;
23
23
  if (Array.isArray(content)) {
@@ -1 +1 @@
1
- {"version":3,"file":"asAgentTools.js","sourceRoot":"","sources":["../src/asAgentTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asAgentTools.js","sourceRoot":"","sources":["../src/asAgentTools.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type McpCredentialSlot } from './config';
1
2
  import type { McpServer } from './types';
2
3
  /** True when `url` is an https URL on the ORIGIN of one of `bases` and its path
3
4
  * is a hosted-relay path (`.../mcp/hosted/<name>`). Origin, not suffix: a
@@ -31,5 +32,5 @@ export interface AuthProvider {
31
32
  * a stub without a real socket -- production callers (Task 6) pass none and
32
33
  * get the real network.
33
34
  */
34
- export declare function authProviderFor(stateDir: string, server: McpServer, fetchImpl?: typeof fetch, accountToken?: () => Promise<string | null>, relayBases?: () => Promise<readonly string[]>, devApiBases?: readonly string[]): AuthProvider;
35
+ export declare function authProviderFor(stateDir: string, server: McpServer, fetchImpl?: typeof fetch, accountToken?: () => Promise<string | null>, relayBases?: () => Promise<readonly string[]>, devApiBases?: readonly string[], slot?: McpCredentialSlot): AuthProvider;
35
36
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,SAAS,CAAC;AAS7D;;;;;;;;+DAQ+D;AAC/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAUrH;AAOD,MAAM,WAAW,YAAY;IAC3B;;;8EAG0E;IAC1E,OAAO,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACtD;;;mEAG+D;IAC/D,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AASD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,OAAO,KAAa,EAW/B,YAAY,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAoB,EAG7D,UAAU,GAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAkB,EAG7D,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,YAAY,CA0Dd"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAsE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtH,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,SAAS,CAAC;AAS7D;;;;;;;;+DAQ+D;AAC/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAUrH;AAOD,MAAM,WAAW,YAAY;IAC3B;;;8EAG0E;IAC1E,OAAO,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACtD;;;mEAG+D;IAC/D,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AASD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,OAAO,KAAa,EAW/B,YAAY,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAoB,EAG7D,UAAU,GAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAkB,EAG7D,WAAW,GAAE,SAAS,MAAM,EAAO,EAGnC,IAAI,GAAE,iBAA+B,GACpC,YAAY,CAuEd"}
package/dist/auth.js CHANGED
@@ -19,16 +19,16 @@
19
19
  * static header that was just rejected is pure latency, never a fix.
20
20
  *
21
21
  * This module owns the refresh (`oauth/tokens.ts`) and expiry decision, and
22
- * persists a refreshed credential back through `writeMcpCredential` before
22
+ * persists a refreshed credential back through `replaceMcpCredentialIfUnchanged` before
23
23
  * handing out its headers -- Task 6's client must never read or write
24
24
  * auth.json itself, or the two would drift the way daemon.json/auth.json
25
25
  * already drift when two writers touch one file without a merge (see
26
26
  * mcp/config.ts's module comment).
27
27
  */
28
- import { readMcpCredential, writeMcpCredential } from './config.js';
28
+ import { readMcpCredentialFor, replaceMcpCredentialIfUnchanged, SERVER_SLOT } from './config.js';
29
29
  import { discoverAuthMetadata } from './oauth/discovery.js';
30
30
  import { refresh as refreshOAuthToken, isExpired } from './oauth/tokens.js';
31
- import { DEFAULT_API_BASE } from '@corenel/protocol';
31
+ import { DEFAULT_API_BASE, AGENT_CREDENTIAL_MISSING } from '@corenel/protocol';
32
32
  function safeOrigin(url) {
33
33
  try {
34
34
  return new URL(url).origin;
@@ -98,19 +98,32 @@ accountToken = async () => null,
98
98
  relayBases = async () => [],
99
99
  /* The source-run dev profile's API base, when the daemon is on it (see
100
100
  * isCorenelRelayUrl). Empty in a production run. */
101
- devApiBases = []) {
101
+ devApiBases = [],
102
+ /* Whose credential (spec 2026-10-01 Part D). An agent slot reads only that
103
+ * agent's entry and never the server's own. */
104
+ slot = SERVER_SLOT) {
102
105
  async function doRefresh(cred) {
103
106
  if (!cred.refreshToken) {
107
+ /* An agent's sign-in is its owner's to redo; the server-slot command
108
+ * below would sign the DAEMON in, not the agent. */
109
+ if (slot.kind === 'agent') {
110
+ throw new Error(`${AGENT_CREDENTIAL_MISSING}: the agent credential for MCP server "${server.name}" has expired and has no refresh token; the agent's owner must sign the agent in again.`);
111
+ }
104
112
  throw new Error(`"${server.name}" has no refresh token on file -- run: corenel mcp login ${server.name}`);
105
113
  }
106
114
  const meta = await discoverAuthMetadata(cred.authServer, fetchImpl);
107
115
  const refreshed = await refreshOAuthToken(meta, cred, fetchImpl);
108
- await writeMcpCredential(stateDir, server.name, refreshed);
116
+ /* Written only if the stored credential is still the one refreshed: a
117
+ * clear or replace that landed while the refresh was in flight wins, and
118
+ * this refreshed token (of the old credential) is discarded. */
119
+ if (!(await replaceMcpCredentialIfUnchanged(stateDir, server.name, slot, cred, refreshed))) {
120
+ throw new Error(`The credential for MCP server "${server.name}" changed while it was being refreshed; retry the call.`);
121
+ }
109
122
  return refreshed;
110
123
  }
111
124
  return {
112
125
  async headers() {
113
- const cred = await readMcpCredential(stateDir, server.name);
126
+ const cred = await readMcpCredentialFor(stateDir, server.name, slot);
114
127
  /* A HOSTED server may legitimately have no credential yet: the relay is
115
128
  * still reachable with the account token alone, and the upstream 401 is
116
129
  * what carries the WWW-Authenticate that starts the OAuth flow. A direct
@@ -122,6 +135,9 @@ devApiBases = []) {
122
135
  if (server.hosted && !isCorenelRelayUrl(server.url, [DEFAULT_API_BASE, ...(await relayBases())], devApiBases)) {
123
136
  throw new Error(`"${server.name}" is marked hosted but ${safeOrigin(server.url)} is not a Corenel relay; refusing to send the account token there.`);
124
137
  }
138
+ if (!cred && slot.kind === 'agent') {
139
+ throw new Error(`${AGENT_CREDENTIAL_MISSING}: no agent credential is set for MCP server "${server.name}"`);
140
+ }
125
141
  if (!cred && !server.hosted) {
126
142
  throw new Error(`No credential stored for MCP server "${server.name}" -- run: corenel mcp login ${server.name} (or set-header, for a static token).`);
127
143
  }
@@ -138,7 +154,7 @@ devApiBases = []) {
138
154
  return account ? [...moved, { name: 'Authorization', value: `Bearer ${account}` }] : moved;
139
155
  },
140
156
  async onUnauthorized() {
141
- const cred = await readMcpCredential(stateDir, server.name);
157
+ const cred = await readMcpCredentialFor(stateDir, server.name, slot);
142
158
  // Nothing to refresh: no credential at all, or a static header --
143
159
  // retrying a header the server just rejected fixes nothing.
144
160
  if (!cred || cred.kind !== 'oauth')
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -82,4 +82,33 @@ export declare function clearMcpCredential(stateDir: string, server: string): Pr
82
82
  * registered OAuth client. Called whenever a server is removed. */
83
83
  export declare function forgetMcpServerSecrets(stateDir: string, server: string): Promise<void>;
84
84
  export declare function writeMcpCredential(stateDir: string, server: string, cred: McpCredential): Promise<void>;
85
+ /** Whose credential a call uses: the server's own (auth.json `mcp`), or one
86
+ * team agent's (auth.json `agents[accessKey]`, spec 2026-10-01 Part D). An
87
+ * agent slot NEVER falls back to the server's: that would be the daemon's
88
+ * credential acting for the agent. */
89
+ export type McpCredentialSlot = {
90
+ kind: 'server';
91
+ } | {
92
+ kind: 'agent';
93
+ accessKey: string;
94
+ };
95
+ export declare const SERVER_SLOT: McpCredentialSlot;
96
+ export declare function readMcpCredentialFor(stateDir: string, server: string, slot: McpCredentialSlot): Promise<McpCredential | null>;
97
+ export declare function writeMcpCredentialFor(stateDir: string, server: string, slot: McpCredentialSlot, cred: McpCredential): Promise<void>;
98
+ /**
99
+ * Write `next` into `slot`'s credential for `server` ONLY if the stored one is
100
+ * still `expected`, in one read-modify-write (Task 9 review fix round 1).
101
+ *
102
+ * A token refresh reads a credential, goes to the network, and writes the
103
+ * result back. If the owner cleared or replaced the credential meanwhile, an
104
+ * unconditional write would bring the revoked one back and persist it. Returns
105
+ * false, writing nothing, when the slot is empty or holds something else.
106
+ * Reads strictly (docForClear): an unreadable auth.json throws, and a missing
107
+ * or corrupt one holds nothing to replace.
108
+ */
109
+ export declare function replaceMcpCredentialIfUnchanged(stateDir: string, server: string, slot: McpCredentialSlot, expected: McpCredential, next: McpCredential): Promise<boolean>;
110
+ /** Forget one agent's credential for one server. */
111
+ export declare function clearAgentCredential(stateDir: string, accessKey: string, server: string): Promise<void>;
112
+ /** Forget every credential of one agent (the agent was deleted). */
113
+ export declare function clearAgentCredentials(stateDir: string, accessKey: string): Promise<void>;
85
114
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAUxD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAyBzF;AAED;;gDAEgD;AAChD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3F;AAmDD;;;;uBAIuB;AACvB,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAMvG;AAED;;;;;GAKG;AACH,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;yEAEqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;sDAQkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAMzG;AAED;;+DAE+D;AAC/D,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjH;AAED;;gEAEgE;AAChE,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF;AAED;;yDAEyD;AACzD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxF;AAED;oEACoE;AACpE,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5F;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAa7G"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -20,10 +20,11 @@
20
20
  * replacing the whole file instead of merging into it would sign the user
21
21
  * out (or drop an unrelated server's credential) as a side effect of an
22
22
  * MCP write neither operation has any business touching. The other
23
- * direction of that same merge matters too: auth/store.ts's
24
- * `saveCredential` (every sign-in and token refresh) must preserve this
25
- * module's `mcp` section rather than overwrite the whole file with just
26
- * the user's own credential -- see the comment there.
23
+ * direction of that same merge matters too: @corenel/tools-node's
24
+ * `writeLoginCredential` (every sign-in) and `clearAllCredentials`
25
+ * (every sign-out) must preserve this module's `mcp`, `mcpClients` and
26
+ * `agents` sections rather than replace or delete the whole file -- see
27
+ * the comments there.
27
28
  *
28
29
  * 3. readMcpCredential holds a stored entry to the SAME "never partially
29
30
  * applied" standard as readMcpServers: `isUsableCredential` checks the
@@ -31,8 +32,8 @@
31
32
  * half-written credential reads as absent, not as a broken one handed to
32
33
  * a caller.
33
34
  */
34
- import { readFile, writeFile, mkdir, chmod } from 'node:fs/promises';
35
- import { credentialFilePath, credentialDir } from '@corenel/tools-node';
35
+ import { readFile, mkdir } from 'node:fs/promises';
36
+ import { credentialFilePath, credentialDir, writeFilePrivateAtomic, readAuthDocForWrite, backupCorruptAuthDoc, withAuthDocLock } from '@corenel/tools-node';
36
37
  import { readDaemonConfig, readDaemonConfigLayered, writeDaemonConfig } from '@corenel/config';
37
38
  /** True for a value that is a usable {name,url} server entry -- the shape
38
39
  * `readMcpServers` requires of every element it keeps. */
@@ -95,7 +96,12 @@ export async function writeMcpServers(stateDir, servers) {
95
96
  }
96
97
  /** Read auth.json as a bag of top-level keys, never throwing -- a missing or
97
98
  * corrupt file reads as empty, exactly like readDaemonConfig treats
98
- * daemon.json, so a credential lookup can never crash the daemon. */
99
+ * daemon.json, so a credential lookup can never crash the daemon.
100
+ *
101
+ * READ-ONLY callers only. A writer must not use this: taking a file it could
102
+ * not read as empty and writing the document back drops every other section
103
+ * (`mcp`, `mcpClients`, `agents`, the sign-in). Writers use docForWrite or
104
+ * docForClear below. */
99
105
  async function readAuthJson(stateDir) {
100
106
  let raw;
101
107
  try {
@@ -114,6 +120,34 @@ async function readAuthJson(stateDir) {
114
120
  return {};
115
121
  }
116
122
  }
123
+ /** Every read-modify-write of auth.json below runs under this process's
124
+ * auth.json lock (@corenel/tools-node withAuthDocLock, shared with sign-in
125
+ * and sign-out), so two writers never read the same document and the second
126
+ * rename never drops the first one's change. Not re-entrant: a locked body
127
+ * never calls another locked writer. */
128
+ function locked(stateDir, fn) {
129
+ return withAuthDocLock(credentialFilePath(stateDir), fn);
130
+ }
131
+ /** auth.json for a writer that ADDS or REPLACES something: the same read a
132
+ * sign-in does (@corenel/tools-node readAuthDocForWrite). Missing is `{}`; a
133
+ * file that exists but cannot be read throws before anything is written; a
134
+ * corrupt one is backed up to `auth.json.bad-<ms>` and then reads as `{}`. */
135
+ async function docForWrite(stateDir) {
136
+ const path = credentialFilePath(stateDir);
137
+ const read = await readAuthDocForWrite(path, 'save');
138
+ if (read.kind === 'doc')
139
+ return read.doc;
140
+ if (read.kind === 'corrupt')
141
+ await backupCorruptAuthDoc(path, read.bytes);
142
+ return {};
143
+ }
144
+ /** auth.json for a writer that only REMOVES something: null when there is
145
+ * nothing to remove from (missing, or corrupt, which holds nothing usable and
146
+ * is left exactly as it is). Throws on a read error, like docForWrite. */
147
+ async function docForClear(stateDir) {
148
+ const read = await readAuthDocForWrite(credentialFilePath(stateDir), 'save');
149
+ return read.kind === 'doc' ? read.doc : null;
150
+ }
117
151
  function isMcpAuthSection(v) {
118
152
  return typeof v === 'object' && v !== null && !Array.isArray(v);
119
153
  }
@@ -189,84 +223,265 @@ export async function readMcpClient(stateDir, server) {
189
223
  * writeMcpCredential does -- same file, same 0600, same preservation of every
190
224
  * other key including ones this build knows nothing about. */
191
225
  export async function writeMcpClient(stateDir, server, client) {
192
- const doc = await readAuthJson(stateDir);
193
- const prev = doc.mcpClients;
194
- const section = (typeof prev === 'object' && prev !== null && !Array.isArray(prev))
195
- ? { ...prev }
196
- : {};
197
- section[server] = client;
198
- const next = { ...doc, mcpClients: section };
199
- const path = credentialFilePath(stateDir);
200
- await mkdir(credentialDir(stateDir), { recursive: true });
201
- await writeFile(path, `${JSON.stringify(next, null, 2)}
202
- `, { mode: 0o600 });
203
- try {
204
- await chmod(path, 0o600);
205
- }
206
- catch {
207
- /* best effort on platforms without POSIX modes, matching auth/store.ts */
208
- }
226
+ assertServerName(server);
227
+ await locked(stateDir, async () => {
228
+ const doc = await docForWrite(stateDir);
229
+ const prev = doc.mcpClients;
230
+ const section = (typeof prev === 'object' && prev !== null && !Array.isArray(prev))
231
+ ? { ...prev }
232
+ : {};
233
+ section[server] = client;
234
+ await writeAuthJson(stateDir, { ...doc, mcpClients: section });
235
+ });
209
236
  }
210
237
  /** Forget `server`'s registered client, so the next sign-in registers afresh.
211
238
  * Used when a server rejects the stored client_id -- the registration is gone
212
239
  * on their side and keeping it only reproduces the failure. */
213
240
  export async function clearMcpClient(stateDir, server) {
214
- const doc = await readAuthJson(stateDir);
215
- const prev = doc.mcpClients;
216
- if (typeof prev !== 'object' || prev === null || Array.isArray(prev))
217
- return;
218
- const section = { ...prev };
219
- if (!(server in section))
220
- return;
221
- delete section[server];
222
- const path = credentialFilePath(stateDir);
223
- await mkdir(credentialDir(stateDir), { recursive: true });
224
- await writeFile(path, `${JSON.stringify({ ...doc, mcpClients: section }, null, 2)}
225
- `, { mode: 0o600 });
226
- try {
227
- await chmod(path, 0o600);
228
- }
229
- catch { /* as above */ }
241
+ await locked(stateDir, async () => {
242
+ const doc = await docForClear(stateDir);
243
+ if (!doc)
244
+ return;
245
+ const prev = doc.mcpClients;
246
+ if (typeof prev !== 'object' || prev === null || Array.isArray(prev))
247
+ return;
248
+ const section = { ...prev };
249
+ if (!(server in section))
250
+ return;
251
+ delete section[server];
252
+ await writeAuthJson(stateDir, { ...doc, mcpClients: section });
253
+ });
230
254
  }
231
255
  /** Forget `server`'s stored credential. Credentials are keyed by NAME, so a
232
256
  * removed server's credential must go with it: otherwise a later add under
233
257
  * the same name -- pointing anywhere -- inherits it. */
234
258
  export async function clearMcpCredential(stateDir, server) {
235
- const doc = await readAuthJson(stateDir);
236
- if (!isMcpAuthSection(doc.mcp))
237
- return;
238
- const section = { ...doc.mcp };
239
- if (!(server in section))
240
- return;
241
- delete section[server];
242
- const path = credentialFilePath(stateDir);
243
- await mkdir(credentialDir(stateDir), { recursive: true });
244
- await writeFile(path, `${JSON.stringify({ ...doc, mcp: section }, null, 2)}
245
- `, { mode: 0o600 });
246
- try {
247
- await chmod(path, 0o600);
248
- }
249
- catch { /* best effort, as above */ }
259
+ await locked(stateDir, async () => {
260
+ const doc = await docForClear(stateDir);
261
+ if (!doc)
262
+ return;
263
+ if (!isMcpAuthSection(doc.mcp))
264
+ return;
265
+ const section = { ...doc.mcp };
266
+ if (!(server in section))
267
+ return;
268
+ delete section[server];
269
+ await writeAuthJson(stateDir, { ...doc, mcp: section });
270
+ });
250
271
  }
251
272
  /** Everything stored for `server` in auth.json: its credential and its
252
273
  * registered OAuth client. Called whenever a server is removed. */
253
274
  export async function forgetMcpServerSecrets(stateDir, server) {
254
275
  await clearMcpCredential(stateDir, server);
255
276
  await clearMcpClient(stateDir, server);
277
+ await clearServerFromAllAgents(stateDir, server);
256
278
  }
257
279
  export async function writeMcpCredential(stateDir, server, cred) {
258
- const doc = await readAuthJson(stateDir);
259
- const section = isMcpAuthSection(doc.mcp) ? { ...doc.mcp } : {};
260
- section[server] = cred;
261
- const next = { ...doc, mcp: section };
262
- const path = credentialFilePath(stateDir);
280
+ assertServerName(server);
281
+ await locked(stateDir, async () => {
282
+ const doc = await docForWrite(stateDir);
283
+ const section = isMcpAuthSection(doc.mcp) ? { ...doc.mcp } : {};
284
+ section[server] = cred;
285
+ await writeAuthJson(stateDir, { ...doc, mcp: section });
286
+ });
287
+ }
288
+ export const SERVER_SLOT = { kind: 'server' };
289
+ /** Bound on an access key used as a JSON key: it is wire-reachable. */
290
+ const MAX_ACCESS_KEY_LEN = 512;
291
+ /** `__proto__` as a key of a plain object sets its PROTOTYPE instead of an
292
+ * own property, so the write would vanish (JSON.stringify skips it) or, read
293
+ * back, resolve to Object.prototype. Refused wherever a wire-reachable string
294
+ * becomes a key in auth.json. */
295
+ const FORBIDDEN_KEY = '__proto__';
296
+ function assertAccessKey(accessKey) {
297
+ if (typeof accessKey !== 'string' || !accessKey || accessKey.length > MAX_ACCESS_KEY_LEN || accessKey === FORBIDDEN_KEY) {
298
+ throw new Error('invalid agent access key');
299
+ }
300
+ }
301
+ function assertServerName(server) {
302
+ if (typeof server !== 'string' || !server || server === FORBIDDEN_KEY) {
303
+ throw new Error('invalid MCP server name');
304
+ }
305
+ }
306
+ /** auth.json `agents`, or an empty object for absent or malformed. */
307
+ function agentsOf(doc) {
308
+ const s = doc.agents;
309
+ return typeof s === 'object' && s !== null && !Array.isArray(s) ? { ...s } : {};
310
+ }
311
+ /** The ONE auth.json writer in this module: a 0600 temp file beside it,
312
+ * renamed over it (@corenel/tools-node writeFilePrivateAtomic, the same
313
+ * publish a sign-in uses). A truncate-then-fill write is seen half-done by a
314
+ * concurrent reader, and a sign-in reading a torn file to keep these sections
315
+ * would read it as empty. */
316
+ async function writeAuthJson(stateDir, next) {
263
317
  await mkdir(credentialDir(stateDir), { recursive: true });
264
- await writeFile(path, `${JSON.stringify(next, null, 2)}\n`, { mode: 0o600 });
265
318
  try {
266
- await chmod(path, 0o600);
319
+ await writeFilePrivateAtomic(credentialFilePath(stateDir), `${JSON.stringify(next, null, 2)}\n`);
267
320
  }
268
- catch {
269
- /* best effort on platforms without POSIX modes, matching auth/store.ts */
321
+ catch (err) {
322
+ /* Windows refuses a rename over a file another process holds open. The
323
+ * live file is untouched (the temp is cleaned up), so this is a retry,
324
+ * not a loss: say so, and keep the code for anything that branches on it. */
325
+ const code = typeof err === 'object' && err !== null ? err.code : undefined;
326
+ if (code === 'EPERM' || code === 'EBUSY') {
327
+ throw Object.assign(new Error(`auth.json is in use; retry (${code})`), { code });
328
+ }
329
+ throw err;
330
+ }
331
+ }
332
+ export async function readMcpCredentialFor(stateDir, server, slot) {
333
+ if (slot.kind === 'server')
334
+ return readMcpCredential(stateDir, server);
335
+ assertAccessKey(slot.accessKey);
336
+ assertServerName(server);
337
+ const agents = agentsOf(await readAuthJson(stateDir));
338
+ if (!Object.prototype.hasOwnProperty.call(agents, slot.accessKey))
339
+ return null;
340
+ const perAgent = agents[slot.accessKey];
341
+ if (!isMcpAuthSection(perAgent))
342
+ return null;
343
+ if (!Object.prototype.hasOwnProperty.call(perAgent, server))
344
+ return null;
345
+ const cred = perAgent[server];
346
+ return isUsableCredential(cred) ? cred : null;
347
+ }
348
+ export async function writeMcpCredentialFor(stateDir, server, slot, cred) {
349
+ if (slot.kind === 'server')
350
+ return writeMcpCredential(stateDir, server, cred);
351
+ assertAccessKey(slot.accessKey);
352
+ assertServerName(server);
353
+ const key = slot.accessKey;
354
+ await locked(stateDir, async () => {
355
+ const doc = await docForWrite(stateDir);
356
+ const agents = agentsOf(doc);
357
+ const prev = agents[key];
358
+ const perAgent = isMcpAuthSection(prev) ? { ...prev } : {};
359
+ perAgent[server] = cred;
360
+ agents[key] = perAgent;
361
+ await writeAuthJson(stateDir, { ...doc, agents });
362
+ });
363
+ }
364
+ /** True when `stored` is still the credential `expected` was read as: same
365
+ * kind and, for OAuth, the same refresh token (or access token when there is
366
+ * none); for headers, the same header list. */
367
+ function sameCredential(stored, expected) {
368
+ if (stored.kind === 'oauth' && expected.kind === 'oauth') {
369
+ return expected.refreshToken !== undefined
370
+ ? stored.refreshToken === expected.refreshToken
371
+ : stored.refreshToken === undefined && stored.accessToken === expected.accessToken;
372
+ }
373
+ if (stored.kind === 'headers' && expected.kind === 'headers') {
374
+ return JSON.stringify(stored.headers) === JSON.stringify(expected.headers);
375
+ }
376
+ return false;
377
+ }
378
+ /**
379
+ * Write `next` into `slot`'s credential for `server` ONLY if the stored one is
380
+ * still `expected`, in one read-modify-write (Task 9 review fix round 1).
381
+ *
382
+ * A token refresh reads a credential, goes to the network, and writes the
383
+ * result back. If the owner cleared or replaced the credential meanwhile, an
384
+ * unconditional write would bring the revoked one back and persist it. Returns
385
+ * false, writing nothing, when the slot is empty or holds something else.
386
+ * Reads strictly (docForClear): an unreadable auth.json throws, and a missing
387
+ * or corrupt one holds nothing to replace.
388
+ */
389
+ export async function replaceMcpCredentialIfUnchanged(stateDir, server, slot, expected, next) {
390
+ assertServerName(server);
391
+ if (slot.kind === 'agent')
392
+ assertAccessKey(slot.accessKey);
393
+ return locked(stateDir, () => replaceIfUnchangedLocked(stateDir, server, slot, expected, next));
394
+ }
395
+ async function replaceIfUnchangedLocked(stateDir, server, slot, expected, next) {
396
+ const doc = await docForClear(stateDir);
397
+ if (!doc)
398
+ return false;
399
+ if (slot.kind === 'server') {
400
+ if (!isMcpAuthSection(doc.mcp))
401
+ return false;
402
+ const section = { ...doc.mcp };
403
+ if (!Object.prototype.hasOwnProperty.call(section, server))
404
+ return false;
405
+ const stored = section[server];
406
+ if (!isUsableCredential(stored) || !sameCredential(stored, expected))
407
+ return false;
408
+ section[server] = next;
409
+ await writeAuthJson(stateDir, { ...doc, mcp: section });
410
+ return true;
411
+ }
412
+ const agents = agentsOf(doc);
413
+ if (!Object.prototype.hasOwnProperty.call(agents, slot.accessKey))
414
+ return false;
415
+ const prev = agents[slot.accessKey];
416
+ if (!isMcpAuthSection(prev) || !Object.prototype.hasOwnProperty.call(prev, server))
417
+ return false;
418
+ const perAgent = { ...prev };
419
+ const stored = perAgent[server];
420
+ if (!isUsableCredential(stored) || !sameCredential(stored, expected))
421
+ return false;
422
+ perAgent[server] = next;
423
+ agents[slot.accessKey] = perAgent;
424
+ await writeAuthJson(stateDir, { ...doc, agents });
425
+ return true;
426
+ }
427
+ /** Forget one agent's credential for one server. */
428
+ export async function clearAgentCredential(stateDir, accessKey, server) {
429
+ assertAccessKey(accessKey);
430
+ assertServerName(server);
431
+ await locked(stateDir, async () => {
432
+ const doc = await docForClear(stateDir);
433
+ if (!doc)
434
+ return;
435
+ const agents = agentsOf(doc);
436
+ const prev = agents[accessKey];
437
+ if (!isMcpAuthSection(prev) || !Object.prototype.hasOwnProperty.call(prev, server))
438
+ return;
439
+ const perAgent = { ...prev };
440
+ delete perAgent[server];
441
+ if (Object.keys(perAgent).length)
442
+ agents[accessKey] = perAgent;
443
+ else
444
+ delete agents[accessKey];
445
+ await writeAuthJson(stateDir, { ...doc, agents });
446
+ });
447
+ }
448
+ /** Forget every credential of one agent (the agent was deleted). */
449
+ export async function clearAgentCredentials(stateDir, accessKey) {
450
+ assertAccessKey(accessKey);
451
+ await locked(stateDir, async () => {
452
+ const doc = await docForClear(stateDir);
453
+ if (!doc)
454
+ return;
455
+ const agents = agentsOf(doc);
456
+ if (!Object.prototype.hasOwnProperty.call(agents, accessKey))
457
+ return;
458
+ delete agents[accessKey];
459
+ await writeAuthJson(stateDir, { ...doc, agents });
460
+ });
461
+ }
462
+ /** Forget `server` from every agent: a removed server's agent credentials go
463
+ * with it, for the same reason its own credential does. */
464
+ async function clearServerFromAllAgents(stateDir, server) {
465
+ await locked(stateDir, () => clearServerFromAllAgentsLocked(stateDir, server));
466
+ }
467
+ async function clearServerFromAllAgentsLocked(stateDir, server) {
468
+ const doc = await docForClear(stateDir);
469
+ if (!doc)
470
+ return;
471
+ const agents = agentsOf(doc);
472
+ let changed = false;
473
+ for (const [key, prev] of Object.entries(agents)) {
474
+ if (!isMcpAuthSection(prev) || !Object.prototype.hasOwnProperty.call(prev, server))
475
+ continue;
476
+ const perAgent = { ...prev };
477
+ delete perAgent[server];
478
+ if (Object.keys(perAgent).length)
479
+ agents[key] = perAgent;
480
+ else
481
+ delete agents[key];
482
+ changed = true;
270
483
  }
484
+ if (changed)
485
+ await writeAuthJson(stateDir, { ...doc, agents });
271
486
  }
272
487
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,14 +2,17 @@ export type { McpServer, McpCredential, McpHeadersCredential, McpOAuthCredential
2
2
  export type { McpTool } from './httpClient';
3
3
  export { McpHttpClient } from './httpClient';
4
4
  export type { McpRegisteredClient } from './config';
5
- export { readMcpServers, writeMcpServers, readMcpCredential, writeMcpCredential, readMcpClient, writeMcpClient, clearMcpClient, clearMcpCredential, forgetMcpServerSecrets, } from './config';
5
+ export { readMcpServers, writeMcpServers, readMcpCredential, writeMcpCredential, readMcpClient, writeMcpClient, clearMcpClient, clearMcpCredential, forgetMcpServerSecrets, readMcpCredentialFor, writeMcpCredentialFor, replaceMcpCredentialIfUnchanged, clearAgentCredential, clearAgentCredentials, SERVER_SLOT, } from './config';
6
+ export type { McpCredentialSlot } from './config';
6
7
  export type { McpClient, McpClientFactory, McpClientFactoryOptions, ServerReport, ConnectAllOptions } from './registry';
7
- export { McpRegistry, SERVER_CONNECT_TIMEOUT_MS, accountTokenFor, mcpClientFactory } from './registry';
8
+ export { McpRegistry, SERVER_CONNECT_TIMEOUT_MS, accountTokenFor, mcpClientFactory, mcpClientKey } from './registry';
8
9
  export type { McpCallDecision } from './policy';
9
10
  export { mcpCallAllowed } from './policy';
10
11
  export { asAgentTools } from './asAgentTools';
12
+ export { portAgentTools } from './portTools';
11
13
  export { gatedAgentTools } from './gatedAgentTools';
12
14
  export type { AuthProvider } from './auth';
13
15
  export { authProviderFor, isCorenelRelayUrl } from './auth';
14
16
  export { timedFetch, AUTH_REQUEST_TIMEOUT_MS } from './timedFetch';
17
+ export { normalizeMcpUrl } from './url';
15
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClG,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACvG,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClG,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrH,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  export { McpHttpClient } from './httpClient.js';
2
- export { readMcpServers, writeMcpServers, readMcpCredential, writeMcpCredential, readMcpClient, writeMcpClient, clearMcpClient, clearMcpCredential, forgetMcpServerSecrets, } from './config.js';
3
- export { McpRegistry, SERVER_CONNECT_TIMEOUT_MS, accountTokenFor, mcpClientFactory } from './registry.js';
2
+ export { readMcpServers, writeMcpServers, readMcpCredential, writeMcpCredential, readMcpClient, writeMcpClient, clearMcpClient, clearMcpCredential, forgetMcpServerSecrets, readMcpCredentialFor, writeMcpCredentialFor, replaceMcpCredentialIfUnchanged, clearAgentCredential, clearAgentCredentials, SERVER_SLOT, } from './config.js';
3
+ export { McpRegistry, SERVER_CONNECT_TIMEOUT_MS, accountTokenFor, mcpClientFactory, mcpClientKey } from './registry.js';
4
4
  export { mcpCallAllowed } from './policy.js';
5
5
  export { asAgentTools } from './asAgentTools.js';
6
+ export { portAgentTools } from './portTools.js';
6
7
  export { gatedAgentTools } from './gatedAgentTools.js';
7
8
  export { authProviderFor, isCorenelRelayUrl } from './auth.js';
8
9
  export { timedFetch, AUTH_REQUEST_TIMEOUT_MS } from './timedFetch.js';
10
+ export { normalizeMcpUrl } from './url.js';
9
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvG,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,GACZ,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { McpServer } from '../types';
2
+ import { type McpCredentialSlot } from '../config';
2
3
  /** Why a sign-in did not happen, when it did not. */
3
4
  export type McpLoginOutcome = {
4
5
  ok: true;
@@ -36,6 +37,9 @@ export interface McpLoginDeps {
36
37
  * driving a REMOTE daemon can see the address they must open on THAT
37
38
  * machine, since the redirect lands on its loopback and nowhere else. */
38
39
  onAuthUrl?: (url: string) => void;
40
+ /** Where the won credential is stored (spec 2026-10-01 Part D): the server's
41
+ * own (default) or one agent's. The registered OAuth client is shared. */
42
+ slot?: McpCredentialSlot;
39
43
  }
40
44
  export declare function loginToMcpServer(stateDir: string, server: McpServer, deps?: McpLoginDeps): Promise<McpLoginOutcome>;
41
45
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/oauth/login.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAuB1C,qDAAqD;AACrD,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE;AACd,8EAA8E;GAC5E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE;AAC5E,4EAA4E;GAC1E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACtE,gCAAgC;GAC9B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;;;8EAM0E;IAC1E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,eAAe,CAAC,CAiN1B"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/oauth/login.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAqF,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAsBtI,qDAAqD;AACrD,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE;AACd,8EAA8E;GAC5E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE;AAC5E,4EAA4E;GAC1E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACtE,gCAAgC;GAC9B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;;;8EAM0E;IAC1E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;+EAC2E;IAC3E,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,eAAe,CAAC,CAiN1B"}
@@ -1,4 +1,4 @@
1
- import { writeMcpCredential, readMcpClient, writeMcpClient, clearMcpClient } from '../config.js';
1
+ import { writeMcpCredentialFor, readMcpClient, writeMcpClient, clearMcpClient, SERVER_SLOT } from '../config.js';
2
2
  import { discoverAuthServer, discoverAuthMetadata } from './discovery.js';
3
3
  import { registerClient } from './register.js';
4
4
  import { makePkce, makeState, authorizationUrl } from './pkce.js';
@@ -180,7 +180,7 @@ export async function loginToMcpServer(stateDir, server, deps = {}) {
180
180
  resource: discovered.resource,
181
181
  authServer: discovered.authServer,
182
182
  }, fetchImpl, now);
183
- await writeMcpCredential(stateDir, server.name, cred);
183
+ await writeMcpCredentialFor(stateDir, server.name, deps.slot ?? SERVER_SLOT, cred);
184
184
  return { ok: true };
185
185
  }
186
186
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/oauth/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/oauth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentTool, McpToolDecl } from '@corenel/protocol';
2
+ export declare function portAgentTools(decls: readonly McpToolDecl[], log?: (line: string) => void): AgentTool[];
3
+ //# sourceMappingURL=portTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portTools.d.ts","sourceRoot":"","sources":["../src/portTools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,EAAE,CA0BvG"}
@@ -0,0 +1,36 @@
1
+ import { MCP_CALL_FAILED, canEncodeMcpWireName, mcpWireName, parseMcpToolAddress } from '@corenel/protocol';
2
+ import { formatContent, toParameters } from './asAgentTools.js';
3
+ /** The one thing a model is told when a call threw: no detail, which can carry
4
+ * a URL with a token or a state-dir path. The detail goes to `log`. */
5
+ const CALL_FAILED_TEXT = `Error: ${MCP_CALL_FAILED}: the MCP call failed before a result came back; it may or may not have run, so do not repeat it without checking.`;
6
+ export function portAgentTools(decls, log) {
7
+ const out = [];
8
+ for (const d of decls) {
9
+ const parsed = parseMcpToolAddress(d.address);
10
+ if (!parsed || !canEncodeMcpWireName(parsed.server, parsed.tool))
11
+ continue;
12
+ const address = d.address;
13
+ out.push({
14
+ name: mcpWireName(parsed.server, parsed.tool),
15
+ namespace: 'mcp',
16
+ description: d.description?.trim() || `MCP tool "${parsed.tool}" on server "${parsed.server}" (${address}).`,
17
+ parameters: toParameters(d.inputSchema),
18
+ mutates: true,
19
+ async run(args, ctx) {
20
+ if (!ctx.mcp)
21
+ return `Error: ${MCP_CALL_FAILED}: this run has no MCP connection`;
22
+ try {
23
+ const r = await ctx.mcp.call(address, args);
24
+ const text = formatContent(r.content);
25
+ return r.isError ? `Error: ${text}` : text;
26
+ }
27
+ catch (e) {
28
+ log?.(`mcp port call ${address} threw: ${e instanceof Error ? e.message : String(e)}`);
29
+ return CALL_FAILED_TEXT;
30
+ }
31
+ },
32
+ });
33
+ }
34
+ return out;
35
+ }
36
+ //# sourceMappingURL=portTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portTools.js","sourceRoot":"","sources":["../src/portTools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D;wEACwE;AACxE,MAAM,gBAAgB,GAAG,UAAU,eAAe,oHAAoH,CAAC;AAEvK,MAAM,UAAU,cAAc,CAAC,KAA6B,EAAE,GAA4B;IACxF,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;YAC7C,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,aAAa,MAAM,CAAC,IAAI,gBAAgB,MAAM,CAAC,MAAM,MAAM,OAAO,IAAI;YAC5G,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;YACvC,OAAO,EAAE,IAAI;YACb,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG;gBACjB,IAAI,CAAC,GAAG,CAAC,GAAG;oBAAE,OAAO,UAAU,eAAe,kCAAkC,CAAC;gBACjF,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACtC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7C,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,GAAG,EAAE,CAAC,iBAAiB,OAAO,WAAW,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvF,OAAO,gBAAgB,CAAC;gBAC1B,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { McpServer } from './types';
2
2
  import type { McpTool } from './httpClient';
3
+ import { type McpCredentialSlot } from './config';
3
4
  import type { CachedServer } from './cache';
4
5
  /** The subset of `McpHttpClient` the registry needs. Named separately (not
5
6
  * just `McpHttpClient` itself) so a test double can implement it without
@@ -16,7 +17,7 @@ export interface McpClient {
16
17
  * `McpHttpClient` wired to the real `authProviderFor`; a test supplies a
17
18
  * factory that returns a fake and never touches the network or the auth
18
19
  * store. */
19
- export type McpClientFactory = (stateDir: string, server: McpServer) => McpClient;
20
+ export type McpClientFactory = (stateDir: string, server: McpServer, slot?: McpCredentialSlot) => McpClient;
20
21
  /**
21
22
  * The daemon's OWN Corenel account token, or null when it has none.
22
23
  *
@@ -67,6 +68,10 @@ export interface ConnectAllOptions {
67
68
  * until the slowest server finishes. */
68
69
  onServer?: (report: ServerReport) => void;
69
70
  }
71
+ /** The cache key for one server and credential pair (spec 2026-10-01 Part D):
72
+ * a JSON array, `[server]` or `[server, accessKey]`, so no server name or
73
+ * access key can make two different pairs collide. */
74
+ export declare function mcpClientKey(server: string, slot: McpCredentialSlot): string;
70
75
  export declare class McpRegistry {
71
76
  private readonly stateDir;
72
77
  private readonly clientFactory;
@@ -82,6 +87,8 @@ export declare class McpRegistry {
82
87
  private serverOrder;
83
88
  private readonly primed;
84
89
  private readonly connecting;
90
+ private readonly slotted;
91
+ private readonly slotConnecting;
85
92
  constructor(stateDir: string, clientFactory?: McpClientFactory,
86
93
  /** A named config environment (`--env`/`CORENEL_ENV`), when
87
94
  * one is active -- threaded through to every `readMcpServers` call below
@@ -133,6 +140,20 @@ export declare class McpRegistry {
133
140
  content: unknown;
134
141
  isError: boolean;
135
142
  }>;
143
+ /** `server`'s tools as `slot`'s credential sees them. Throws when the
144
+ * server is not configured or cannot be reached with that credential. */
145
+ listAs(server: string, slot: McpCredentialSlot): Promise<McpTool[]>;
146
+ /** Call one tool with `slot`'s credential. The server slot is exactly
147
+ * `call()`; an agent slot never touches the server's own client. */
148
+ callAs(server: string, tool: string, args: unknown, slot: McpCredentialSlot): Promise<{
149
+ content: unknown;
150
+ isError: boolean;
151
+ }>;
152
+ /** Drop every agent-slot client of `accessKey` (credentials changed, or the
153
+ * agent was deleted); the next call connects afresh. In-flight connects are
154
+ * dropped too: one that settles after this is never cached. */
155
+ forgetAgentClients(accessKey: string): void;
156
+ private connectedAs;
136
157
  /** Per-server connection state, for `doctor` (Task 10) to print. A server
137
158
  * with `connected: false` always carries `error` -- there is no code path
138
159
  * that records a failure without a reason, because "no tools" alone tells
@@ -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/registry.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { McpHttpClient } from './httpClient.js';
2
2
  import { authProviderFor } from './auth.js';
3
3
  import { resolveCredential } from '@corenel/config';
4
- import { readMcpServers } from './config.js';
4
+ import { readMcpServers, SERVER_SLOT } from './config.js';
5
5
  import { timedFetch, AUTH_REQUEST_TIMEOUT_MS } from './timedFetch.js';
6
6
  /**
7
7
  * The daemon's OWN Corenel account token, or null when it has none.
@@ -29,12 +29,16 @@ export async function accountTokenFor(stateDir) {
29
29
  * as a hosted relay. `mcpClientFactory()` is exactly the default factory. */
30
30
  export function mcpClientFactory(opts = {}) {
31
31
  const devApiBases = [...(opts.devApiBases ?? [])];
32
- return (stateDir, server) => buildClient(stateDir, server, devApiBases);
32
+ return (stateDir, server, slot = SERVER_SLOT) => buildClient(stateDir, server, devApiBases, slot);
33
33
  }
34
- function defaultClientFactory(stateDir, server) {
35
- return buildClient(stateDir, server, []);
34
+ function defaultClientFactory(stateDir, server, slot = SERVER_SLOT) {
35
+ return buildClient(stateDir, server, [], slot);
36
36
  }
37
- function buildClient(stateDir, server, devApiBases) {
37
+ /* `slot` is whose credential this client authenticates with (spec 2026-10-01
38
+ * Part D). It MUST reach authProviderFor: the daemon builds every client
39
+ * through mcpClientFactory -> here, so a slot dropped on this path would send
40
+ * an agent's calls with the daemon's own credential. */
41
+ function buildClient(stateDir, server, devApiBases, slot) {
38
42
  /* THE FOURTH ARGUMENT IS WHY A HOSTED SERVER WORKS AT ALL, and omitting it
39
43
  * was silent. A relayed server needs TWO credentials: the MCP one in
40
44
  * `X-MCP-Authorization`, and the daemon's own Corenel account token in
@@ -54,7 +58,7 @@ function buildClient(stateDir, server, devApiBases) {
54
58
  * daemon startup indefinitely. Those requests are never legitimately slow.
55
59
  * A tool CALL can be, so the client keeps plain fetch; connect time is bounded
56
60
  * per server by `connectAll` instead. */
57
- return new McpHttpClient(server, authProviderFor(stateDir, server, timedFetch(AUTH_REQUEST_TIMEOUT_MS), () => accountTokenFor(stateDir), () => relayBasesFor(stateDir), devApiBases));
61
+ return new McpHttpClient(server, authProviderFor(stateDir, server, timedFetch(AUTH_REQUEST_TIMEOUT_MS), () => accountTokenFor(stateDir), () => relayBasesFor(stateDir), devApiBases, slot));
58
62
  }
59
63
  /** The API bases whose origin counts as OUR relay for this daemon, beyond
60
64
  * DEFAULT_API_BASE: the one the stored account credential was minted
@@ -73,6 +77,27 @@ async function relayBasesFor(stateDir) {
73
77
  * and the daemon moves on without it. Generous for a cold service; short
74
78
  * enough that a stalled one reads as a failure, not a hang. */
75
79
  export const SERVER_CONNECT_TIMEOUT_MS = 30_000;
80
+ /** The cache key for one server and credential pair (spec 2026-10-01 Part D):
81
+ * a JSON array, `[server]` or `[server, accessKey]`, so no server name or
82
+ * access key can make two different pairs collide. */
83
+ export function mcpClientKey(server, slot) {
84
+ return JSON.stringify(slot.kind === 'server' ? [server] : [server, slot.accessKey]);
85
+ }
86
+ /** The access key an agent-slot cache key was made for. */
87
+ function accessKeyOf(key) {
88
+ const parts = JSON.parse(key);
89
+ return Array.isArray(parts) && parts.length === 2 && typeof parts[1] === 'string' ? parts[1] : undefined;
90
+ }
91
+ /** `p`, or a rejection with `message` once `ms` have passed. The loser keeps
92
+ * running; its result is ignored and can never surface as unhandled. */
93
+ function withDeadline(p, ms, message) {
94
+ let timer;
95
+ const deadline = new Promise((_resolve, reject) => {
96
+ timer = setTimeout(() => reject(new Error(message)), ms);
97
+ });
98
+ p.catch(() => undefined);
99
+ return Promise.race([p, deadline]).finally(() => clearTimeout(timer));
100
+ }
76
101
  export class McpRegistry {
77
102
  stateDir;
78
103
  clientFactory;
@@ -100,6 +125,11 @@ export class McpRegistry {
100
125
  // that land on the same cold server in the same turn share one connection
101
126
  // instead of racing three.
102
127
  connecting = new Map();
128
+ // Agent-slot clients (spec 2026-10-01 Part D), keyed by mcpClientKey. Kept
129
+ // apart from `connected`: those are the daemon's own credential, and the
130
+ // two must never be confused for each other.
131
+ slotted = new Map();
132
+ slotConnecting = new Map();
103
133
  constructor(stateDir, clientFactory = defaultClientFactory,
104
134
  /** A named config environment (`--env`/`CORENEL_ENV`), when
105
135
  * one is active -- threaded through to every `readMcpServers` call below
@@ -274,6 +304,72 @@ export class McpRegistry {
274
304
  }
275
305
  return entry.client.callTool(tool, args);
276
306
  }
307
+ /** `server`'s tools as `slot`'s credential sees them. Throws when the
308
+ * server is not configured or cannot be reached with that credential. */
309
+ async listAs(server, slot) {
310
+ return (await this.connectedAs(server, slot)).tools;
311
+ }
312
+ /** Call one tool with `slot`'s credential. The server slot is exactly
313
+ * `call()`; an agent slot never touches the server's own client. */
314
+ async callAs(server, tool, args, slot) {
315
+ if (slot.kind === 'server')
316
+ return this.call(server, tool, args);
317
+ return (await this.connectedAs(server, slot)).client.callTool(tool, args);
318
+ }
319
+ /** Drop every agent-slot client of `accessKey` (credentials changed, or the
320
+ * agent was deleted); the next call connects afresh. In-flight connects are
321
+ * dropped too: one that settles after this is never cached. */
322
+ forgetAgentClients(accessKey) {
323
+ for (const key of [...this.slotted.keys()])
324
+ if (accessKeyOf(key) === accessKey)
325
+ this.slotted.delete(key);
326
+ for (const key of [...this.slotConnecting.keys()])
327
+ if (accessKeyOf(key) === accessKey)
328
+ this.slotConnecting.delete(key);
329
+ }
330
+ async connectedAs(server, slot) {
331
+ if (slot.kind === 'server') {
332
+ await this.ensureConnected(server);
333
+ const entry = this.connected.get(server);
334
+ if (!entry)
335
+ throw new Error(`MCP server "${server}" is not connected -- run: corenel mcp doctor`);
336
+ return entry;
337
+ }
338
+ const key = mcpClientKey(server, slot);
339
+ const hit = this.slotted.get(key);
340
+ if (hit)
341
+ return hit;
342
+ const inflight = this.slotConnecting.get(key);
343
+ if (inflight)
344
+ return inflight;
345
+ // This attempt's own registration, filled in once the promise exists:
346
+ // the async body below compares against it to tell whether a
347
+ // forgetAgentClients() removed it while the connect was in flight.
348
+ const self = {};
349
+ const current = () => self.attempt !== undefined && this.slotConnecting.get(key) === self.attempt;
350
+ const attempt = (async () => {
351
+ const def = (await readMcpServers(this.stateDir, this.configEnv)).find((s) => s.name === server);
352
+ if (!def)
353
+ throw new Error(`MCP server "${server}" is not configured on this daemon`);
354
+ const client = this.clientFactory(this.stateDir, def, slot);
355
+ const entry = await withDeadline((async () => {
356
+ await client.initialize();
357
+ return { client, tools: await client.listTools() };
358
+ })(), SERVER_CONNECT_TIMEOUT_MS, `MCP server "${server}" timed out after ${SERVER_CONNECT_TIMEOUT_MS / 1000}s`);
359
+ // Cached only while this attempt is still the registered one: a
360
+ // forgetAgentClients() during the connect removed it, and the client
361
+ // it built must not outlive the forget.
362
+ if (current())
363
+ this.slotted.set(key, entry);
364
+ return entry;
365
+ })().finally(() => {
366
+ if (current())
367
+ this.slotConnecting.delete(key);
368
+ });
369
+ self.attempt = attempt;
370
+ this.slotConnecting.set(key, attempt);
371
+ return attempt;
372
+ }
277
373
  /** Per-server connection state, for `doctor` (Task 10) to print. A server
278
374
  * with `connected: false` always carries `error` -- there is no code path
279
375
  * that records a failure without a reason, because "no tools" alone tells
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/url.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function normalizeMcpUrl(url: string): string;
2
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAanD"}
package/dist/url.js ADDED
@@ -0,0 +1,23 @@
1
+ /* The one form an MCP server URL is compared in (spec 2026-10-01 Part D, peer
2
+ * advertising and routing): lowercase scheme and host, no default port, no
3
+ * trailing slash. The result is advertised to the team daemon, so it never
4
+ * carries a credential: username, password, query string and fragment are all
5
+ * omitted. Two servers that differ only by query are therefore the same server.
6
+ * `URL` lowercases scheme and host and drops :80 / :443 for http / https; the
7
+ * path keeps its case because servers may treat it as significant. */
8
+ export function normalizeMcpUrl(url) {
9
+ let u;
10
+ try {
11
+ u = new URL(url);
12
+ }
13
+ catch {
14
+ // Never echo the input: it may carry a password or a token.
15
+ throw new Error('an MCP server URL is not a valid URL');
16
+ }
17
+ if (u.protocol !== 'http:' && u.protocol !== 'https:') {
18
+ throw new Error(`an MCP server URL must be http or https, not "${u.protocol}"`);
19
+ }
20
+ const path = u.pathname.replace(/[/]+$/, '');
21
+ return `${u.protocol}//${u.host}${path}`;
22
+ }
23
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA;;;;;;sEAMsE;AACtE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAM,CAAC;IACX,IAAI,CAAC;QACH,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;AAC3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corenel/mcp",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "license": "Elastic-2.0",
5
5
  "type": "module",
6
6
  "description": "Corenel MCP — a JSON-RPC-over-HTTP MCP client, its registry, OAuth and call policy. Node-only. Shared by the sidecar daemon and the CLI so the two cannot drift.",
@@ -18,10 +18,10 @@
18
18
  "dist"
19
19
  ],
20
20
  "dependencies": {
21
- "@corenel/config": "0.6.2",
22
- "@corenel/protocol": "0.13.0",
23
- "@corenel/harness": "0.14.0",
24
- "@corenel/tools-node": "0.7.2"
21
+ "@corenel/config": "0.7.1",
22
+ "@corenel/protocol": "0.15.0",
23
+ "@corenel/harness": "0.16.0",
24
+ "@corenel/tools-node": "0.8.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^24.13.1",