@cat-factory/server 0.222.2 → 0.223.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 (62) hide show
  1. package/dist/agents/ContainerAgentExecutor.d.ts +9 -12
  2. package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -1
  3. package/dist/agents/ContainerAgentExecutor.js +7 -24
  4. package/dist/agents/ContainerAgentExecutor.js.map +1 -1
  5. package/dist/agents/mcpOAuthClientSecret.d.ts +27 -0
  6. package/dist/agents/mcpOAuthClientSecret.d.ts.map +1 -0
  7. package/dist/agents/mcpOAuthClientSecret.js +46 -0
  8. package/dist/agents/mcpOAuthClientSecret.js.map +1 -0
  9. package/dist/agents/mcpOAuthTokenSource.d.ts +55 -0
  10. package/dist/agents/mcpOAuthTokenSource.d.ts.map +1 -0
  11. package/dist/agents/mcpOAuthTokenSource.js +60 -0
  12. package/dist/agents/mcpOAuthTokenSource.js.map +1 -0
  13. package/dist/agents/toolServers.d.ts +55 -1
  14. package/dist/agents/toolServers.d.ts.map +1 -1
  15. package/dist/agents/toolServers.js +132 -4
  16. package/dist/agents/toolServers.js.map +1 -1
  17. package/dist/app.d.ts.map +1 -1
  18. package/dist/app.js +11 -0
  19. package/dist/app.js.map +1 -1
  20. package/dist/config/problems.d.ts +5 -0
  21. package/dist/config/problems.d.ts.map +1 -1
  22. package/dist/config/problems.js +5 -0
  23. package/dist/config/problems.js.map +1 -1
  24. package/dist/http/env.d.ts +26 -1
  25. package/dist/http/env.d.ts.map +1 -1
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +7 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/modules/publicApi/PublicDebugController.d.ts.map +1 -1
  31. package/dist/modules/publicApi/PublicDebugController.js +5 -0
  32. package/dist/modules/publicApi/PublicDebugController.js.map +1 -1
  33. package/dist/modules/toolServers/McpOAuthCompletionController.d.ts +4 -0
  34. package/dist/modules/toolServers/McpOAuthCompletionController.d.ts.map +1 -0
  35. package/dist/modules/toolServers/McpOAuthCompletionController.js +125 -0
  36. package/dist/modules/toolServers/McpOAuthCompletionController.js.map +1 -0
  37. package/dist/modules/toolServers/ToolServerController.d.ts.map +1 -1
  38. package/dist/modules/toolServers/ToolServerController.js +80 -4
  39. package/dist/modules/toolServers/ToolServerController.js.map +1 -1
  40. package/dist/modules/toolServers/declaredToolServers.d.ts +15 -1
  41. package/dist/modules/toolServers/declaredToolServers.d.ts.map +1 -1
  42. package/dist/modules/toolServers/declaredToolServers.js +22 -2
  43. package/dist/modules/toolServers/declaredToolServers.js.map +1 -1
  44. package/dist/modules/toolServers/mcpOAuthRedirect.d.ts +27 -0
  45. package/dist/modules/toolServers/mcpOAuthRedirect.d.ts.map +1 -0
  46. package/dist/modules/toolServers/mcpOAuthRedirect.js +35 -0
  47. package/dist/modules/toolServers/mcpOAuthRedirect.js.map +1 -0
  48. package/dist/modules/toolServers/probeToolServer.d.ts +8 -1
  49. package/dist/modules/toolServers/probeToolServer.d.ts.map +1 -1
  50. package/dist/modules/toolServers/probeToolServer.js +51 -1
  51. package/dist/modules/toolServers/probeToolServer.js.map +1 -1
  52. package/dist/modules/workspaces/WorkspaceMemberController.d.ts.map +1 -1
  53. package/dist/modules/workspaces/WorkspaceMemberController.js +3 -3
  54. package/dist/modules/workspaces/WorkspaceMemberController.js.map +1 -1
  55. package/dist/persistence/rpc-allowlist.d.ts.map +1 -1
  56. package/dist/persistence/rpc-allowlist.js +16 -0
  57. package/dist/persistence/rpc-allowlist.js.map +1 -1
  58. package/dist/telemetry/machineTelemetryRead.d.ts +8 -3
  59. package/dist/telemetry/machineTelemetryRead.d.ts.map +1 -1
  60. package/dist/telemetry/machineTelemetryRead.js +6 -1
  61. package/dist/telemetry/machineTelemetryRead.js.map +1 -1
  62. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"PublicDebugController.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicDebugController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PublicDebugController.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicDebugController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { AppEnv } from '../../http/env.js';
3
+ export declare function mcpOAuthCompletionController(): Hono<AppEnv>;
4
+ //# sourceMappingURL=McpOAuthCompletionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpOAuthCompletionController.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/McpOAuthCompletionController.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAmC/C,wBAAgB,4BAA4B,IAAI,IAAI,CAAC,MAAM,CAAC,CA4C3D"}
@@ -0,0 +1,125 @@
1
+ import { completeToolServerOAuthContract } from '@cat-factory/contracts';
2
+ import { ForbiddenError, UnauthorizedError, ValidationError } from '@cat-factory/kernel';
3
+ import { buildHonoRoute } from '@toad-contracts/hono';
4
+ import { Hono } from 'hono';
5
+ import { resolveOAuthClientSecret } from '../../agents/mcpOAuthClientSecret.js';
6
+ import { requireCapability } from '../../http/guards.js';
7
+ import { requestLogger } from '../../http/requestLogging.js';
8
+ import { loadWorkspaceAccess } from '../../http/workspaceAccess.js';
9
+ import { resolveDeclaredToolServers } from './declaredToolServers.js';
10
+ // ---------------------------------------------------------------------------
11
+ // Finishing an OAuth grant against a remote MCP tool server.
12
+ //
13
+ // The vendor's redirect does NOT land here. It lands on the SPA, which re-presents the `code` and
14
+ // `state` over the authenticated API, and that indirection is the entire security design rather
15
+ // than a convenience:
16
+ //
17
+ // A redirect URI is one fixed string a third party has on file, so a route receiving it directly
18
+ // is reached by a top-level browser navigation the vendor triggers. Sessions in this product are
19
+ // BEARER TOKENS, which such a navigation cannot carry, so that route sees no user on every request
20
+ // — on an auth-enabled deployment exactly as in dev-open. Any "the caller is who started the flow"
21
+ // or "the caller still holds secrets.manage" check written there is unreachable code that reads
22
+ // like protection, and it would additionally have to be exempted from the default-deny session gate
23
+ // to be reachable at all. Routing the two values back through the SPA is what turns both checks
24
+ // into things that actually run.
25
+ //
26
+ // So this route is ordinary session-gated API, and it is mounted at the ROOT because the board is
27
+ // sealed into the state rather than carried in the path — the same shape `/user-secrets` has. Three
28
+ // things gate it, each of which now genuinely executes:
29
+ //
30
+ // 1. the SESSION, via the shared default-deny gate (`mountAuthGate`), so an absent user here
31
+ // means auth is not configured at all rather than a caller who simply has no token;
32
+ // 2. the sealed `state`, which only this deployment can mint and open, carries the workspace, the
33
+ // server and the PKCE verifier, and expires;
34
+ // 3. the workspace PERMISSION, re-resolved at the moment the token is stored. A grant takes
35
+ // minutes of human time and `secrets.manage` can be revoked inside that window, so the start
36
+ // route's gate is not evidence about now.
37
+ // ---------------------------------------------------------------------------
38
+ export function mcpOAuthCompletionController() {
39
+ const app = new Hono();
40
+ buildHonoRoute(app, completeToolServerOAuthContract, async (c) => {
41
+ const container = c.get('container');
42
+ const logger = requestLogger(c);
43
+ const oauthService = requireCapability(container.mcpOAuth, 'Tool-server OAuth is not configured');
44
+ const { code, state } = c.req.valid('json');
45
+ const request = await oauthService.readAuthorizationRequest(state);
46
+ if (!request) {
47
+ logger.warn('mcp oauth completion carried no usable state');
48
+ throw new UnauthorizedError('This authorization request is invalid or has expired');
49
+ }
50
+ await assertMayCompleteGrant(c, request);
51
+ // Re-resolved from the registry rather than sealed into the state: the CLIENT is deployment
52
+ // code, so a deployment that fixed a wrong client id between the redirect and the completion
53
+ // should exchange with the corrected one. What is pinned in the state is the endpoint and the
54
+ // verifier, which are properties of the request the operator actually consented to.
55
+ const declared = resolveDeclaredToolServers(container.agentKindRegistry).get(request.serverId);
56
+ const oauth = declared?.definition.oauth;
57
+ if (!oauth) {
58
+ throw new ValidationError(`Tool server '${request.serverId}' no longer declares OAuth, so this grant cannot be ` +
59
+ `completed.`, { reason: 'tool_server_without_oauth' });
60
+ }
61
+ const clientSecret = await resolveClientSecret(c, request.workspaceId, request.serverId, oauth);
62
+ await oauthService.completeAuthorization(request, {
63
+ code,
64
+ clientId: oauth.clientId,
65
+ ...(clientSecret ? { clientSecret } : {}),
66
+ });
67
+ return c.json({ serverId: request.serverId, workspaceId: request.workspaceId }, 200);
68
+ });
69
+ return app;
70
+ }
71
+ /**
72
+ * The two checks a completion is worth having a session for.
73
+ *
74
+ * A `null` user is dev-open and allows everything, the same reading `requirePermission` takes and
75
+ * not a second policy. It is SOUND here only because the route sits behind the default-deny gate:
76
+ * with auth enabled, a request with no valid session never reaches the handler, so an absent user
77
+ * means auth is genuinely unconfigured. (That is precisely what a public redirect target could not
78
+ * say, which is why this flow does not have one.)
79
+ */
80
+ async function assertMayCompleteGrant(c, request) {
81
+ const user = c.get('user');
82
+ if (!user)
83
+ return;
84
+ // Without this binding, getting an admin to open an attacker's authorization link would plant the
85
+ // ATTACKER's vendor account as the board's connection: the classic OAuth login-CSRF turned inside
86
+ // out. The state is sealed, so only someone who could already start a flow on this board can mint
87
+ // one, and this closes the case where such a value is captured and replayed by someone else.
88
+ if (request.userId && request.userId !== user.id) {
89
+ requestLogger(c).warn('mcp oauth completion attempted by a different user than the one who started it', { workspaceId: request.workspaceId, toolServerId: request.serverId });
90
+ throw new UnauthorizedError('This authorization request was started by someone else');
91
+ }
92
+ // Resolved through the ONE shared resolution the workspace gate uses. It cannot be the gate
93
+ // itself: the board is sealed into the state rather than named in the path, so there is no
94
+ // `:workspaceId` segment to bind to.
95
+ const access = await loadWorkspaceAccess(c.get('container'), request.workspaceId, user.id);
96
+ if (!access?.allowed || !access.permissions.has('secrets.manage')) {
97
+ throw new ForbiddenError('This action requires the secrets.manage permission', {
98
+ permission: 'secrets.manage',
99
+ });
100
+ }
101
+ }
102
+ /**
103
+ * The OAuth client secret for the exchange, through the SAME shared resolution the dispatch path
104
+ * uses — including its reserved-key floor, which is exactly why this is not a local lookup: a
105
+ * floor enforced at one of two call sites is not a floor.
106
+ *
107
+ * A declared-but-unresolvable secret REFUSES the completion with a 422 rather than exchanging as a
108
+ * public client. The operator is standing in front of this: telling them the client secret is
109
+ * missing is a fix they can make, where a vendor's `invalid_client` a second later is not.
110
+ */
111
+ async function resolveClientSecret(c, workspaceId, serverId, oauth) {
112
+ const container = c.get('container');
113
+ const resolved = await resolveOAuthClientSecret({
114
+ workspaceId,
115
+ serverId,
116
+ oauth,
117
+ ...(container.toolSecretResolver ? { resolveToolSecrets: container.toolSecretResolver } : {}),
118
+ logger: requestLogger(c),
119
+ });
120
+ if (!resolved.ok) {
121
+ throw new ValidationError(resolved.error, { reason: 'oauth_client_secret_unavailable' });
122
+ }
123
+ return resolved.value;
124
+ }
125
+ //# sourceMappingURL=McpOAuthCompletionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpOAuthCompletionController.js","sourceRoot":"","sources":["../../../src/modules/toolServers/McpOAuthCompletionController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolServerController.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/ToolServerController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAO/C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAsCnD"}
1
+ {"version":3,"file":"ToolServerController.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/ToolServerController.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAS/C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAuGnD"}
@@ -1,11 +1,15 @@
1
- import { listToolServersContract, probeToolServerContract } from '@cat-factory/contracts';
1
+ import { disconnectToolServerOAuthContract, listToolServersContract, probeToolServerContract, startToolServerOAuthContract, } from '@cat-factory/contracts';
2
+ import { NotFoundError, ValidationError } from '@cat-factory/kernel';
2
3
  import { buildHonoRoute } from '@toad-contracts/hono';
3
4
  import { Hono } from 'hono';
5
+ import { createMcpOAuthTokenSource } from '../../agents/mcpOAuthTokenSource.js';
6
+ import { requireCapability } from '../../http/guards.js';
4
7
  import { requireWorkspacePermissionIncludingReads } from '../../http/workspaceAccess.js';
5
8
  import { param } from '../../http/params.js';
6
9
  import { requestLogger } from '../../http/requestLogging.js';
7
- import { collectDeclaredToolServers } from './declaredToolServers.js';
10
+ import { collectDeclaredToolServers, resolveDeclaredToolServers } from './declaredToolServers.js';
8
11
  import { probeToolServer } from './probeToolServer.js';
12
+ import { requireMcpOAuthRedirectUrl } from './mcpOAuthRedirect.js';
9
13
  /**
10
14
  * TOOL SERVER (MCP) OPERABILITY: what this deployment declared, and whether one of them answers.
11
15
  *
@@ -33,9 +37,21 @@ export function toolServerController() {
33
37
  const gate = requireWorkspacePermissionIncludingReads('secrets.manage');
34
38
  app.use('/tool-servers', gate);
35
39
  app.use('/tool-servers/*', gate);
36
- buildHonoRoute(app, listToolServersContract, (c) => {
40
+ buildHonoRoute(app, listToolServersContract, async (c) => {
37
41
  const container = c.get('container');
38
- return c.json({ servers: collectDeclaredToolServers({ agentKindRegistry: container.agentKindRegistry }) }, 200);
42
+ // ONE read of the workspace's grants for the whole inventory, indexed by server id — the
43
+ // declarations are the deployment's entire registry, so a per-row lookup here would be an N+1
44
+ // over it. Absent store ⇒ an empty map, and each OAuth declaration renders as not connected,
45
+ // which is the true state of a deployment that cannot keep a grant.
46
+ const grants = container.mcpOAuth
47
+ ? await container.mcpOAuth.listStatuses(param(c, 'workspaceId'))
48
+ : new Map();
49
+ return c.json({
50
+ servers: collectDeclaredToolServers({
51
+ agentKindRegistry: container.agentKindRegistry,
52
+ oauthGrants: grants,
53
+ }),
54
+ }, 200);
39
55
  });
40
56
  buildHonoRoute(app, probeToolServerContract, async (c) => {
41
57
  const container = c.get('container');
@@ -49,9 +65,69 @@ export function toolServerController() {
49
65
  ...(container.toolSecretResolver
50
66
  ? { resolveToolSecrets: container.toolSecretResolver }
51
67
  : {}),
68
+ // The same token source a dispatch mints with, so an OAuth server's verdict is about this
69
+ // board's grant rather than about an unauthenticated request nobody makes.
70
+ ...(container.mcpOAuth
71
+ ? {
72
+ resolveToolServerOAuth: createMcpOAuthTokenSource({
73
+ oauth: container.mcpOAuth,
74
+ ...(container.toolSecretResolver
75
+ ? { resolveToolSecrets: container.toolSecretResolver }
76
+ : {}),
77
+ logger: requestLogger(c),
78
+ }),
79
+ }
80
+ : {}),
52
81
  logger: requestLogger(c),
53
82
  }), 200);
54
83
  });
84
+ // Begin an interactive grant. Everything that can refuse does so BEFORE a browser leaves the
85
+ // app: an id nothing declares (404), a server that does not authenticate with OAuth or does so
86
+ // with the machine grant (422), a deployment with no grant store or no registered redirect URL
87
+ // (503). A refusal after the redirect would land on a vendor's error page instead.
88
+ buildHonoRoute(app, startToolServerOAuthContract, async (c) => {
89
+ const container = c.get('container');
90
+ const oauthService = requireCapability(container.mcpOAuth, 'Tool-server OAuth is not configured: this deployment has no encryption key, so it has ' +
91
+ 'nowhere to keep a grant.');
92
+ const definition = requireOAuthServer(container.agentKindRegistry, c.req.valid('param').id);
93
+ return c.json(await oauthService.startAuthorization({
94
+ workspaceId: param(c, 'workspaceId'),
95
+ serverId: definition.id,
96
+ serverUrl: definition.url,
97
+ oauth: definition.oauth,
98
+ userId: c.get('user')?.id ?? null,
99
+ redirectUri: requireMcpOAuthRedirectUrl(container),
100
+ }), 200);
101
+ });
102
+ buildHonoRoute(app, disconnectToolServerOAuthContract, async (c) => {
103
+ const container = c.get('container');
104
+ const oauthService = requireCapability(container.mcpOAuth, 'Tool-server OAuth is not configured: this deployment has no encryption key, so it has ' +
105
+ 'nowhere to keep a grant.');
106
+ // The id is NOT re-checked against a live declaration. A grant outlives the declaration that
107
+ // created it (a deployment retires a server, or renames it in a refactor), and the row is then
108
+ // a live vendor token nobody can reach — so the one action that removes it must not be gated
109
+ // on the registry still naming it.
110
+ await oauthService.disconnect(param(c, 'workspaceId'), c.req.valid('param').id);
111
+ return c.body(null, 204);
112
+ });
55
113
  return app;
56
114
  }
115
+ /**
116
+ * The declared server behind an id, narrowed to one that can actually be granted.
117
+ *
118
+ * Both refusals are the operator's to act on and neither is the same as the other: an id nothing
119
+ * declares means the deployment changed under the panel they are looking at (404), while a server
120
+ * that declares no OAuth — or declares it on a transport with no request to authorise — means the
121
+ * button was rendered for a row it does not apply to (422, with a `reason` the SPA translates).
122
+ */
123
+ function requireOAuthServer(registry, serverId) {
124
+ const declared = resolveDeclaredToolServers(registry).get(serverId);
125
+ if (!declared)
126
+ throw new NotFoundError('Tool server', serverId);
127
+ const { oauth, transport, id } = declared.definition;
128
+ if (!oauth || transport.kind !== 'http') {
129
+ throw new ValidationError(`Tool server '${serverId}' does not authenticate with OAuth, so there is nothing to grant.`, { reason: 'tool_server_without_oauth' });
130
+ }
131
+ return { id, url: transport.url, oauth };
132
+ }
57
133
  //# sourceMappingURL=ToolServerController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolServerController.js","sourceRoot":"","sources":["../../../src/modules/toolServers/ToolServerController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,wCAAwC,EAAE,MAAM,+BAA+B,CAAA;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,+FAA+F;IAC/F,iGAAiG;IACjG,iGAAiG;IACjG,2EAA2E;IAC3E,MAAM,IAAI,GAAG,wCAAwC,CAAC,gBAAgB,CAAC,CAAA;IACvE,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;IAEhC,cAAc,CAAC,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,OAAO,EAAE,0BAA0B,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAC3F,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,OAAO,CAAC,CAAC,IAAI,CACX,MAAM,eAAe,CAAC;YACpB,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;YAC9C,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;YACpC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;YACjC,6FAA6F;YAC7F,0FAA0F;YAC1F,sCAAsC;YACtC,GAAG,CAAC,SAAS,CAAC,kBAAkB;gBAC9B,CAAC,CAAC,EAAE,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,EAAE;gBACtD,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;SACzB,CAAC,EACF,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"ToolServerController.js","sourceRoot":"","sources":["../../../src/modules/toolServers/ToolServerController.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,22 @@
1
1
  import type { AgentKind, McpServerDefinition } from '@cat-factory/kernel';
2
2
  import type { AgentKindRegistry } from '@cat-factory/agents';
3
- import type { ToolServerNotProbeableReason, ToolServerView } from '@cat-factory/contracts';
3
+ import type { ToolServerNotProbeableReason, ToolServerOAuthStatus, ToolServerView } from '@cat-factory/contracts';
4
+ /**
5
+ * The non-secret half of a stored grant, as `McpOAuthService.listStatuses` returns it: everything
6
+ * `ToolServerOAuthStatus` holds except the two fields the DECLARATION decides (`grant`) and this
7
+ * projection derives (`connected`).
8
+ */
9
+ export type StoredOAuthGrants = ReadonlyMap<string, Omit<ToolServerOAuthStatus, 'grant' | 'connected'>>;
4
10
  export interface CollectDeclaredToolServersInput {
5
11
  agentKindRegistry: AgentKindRegistry;
12
+ /**
13
+ * This workspace's grants, keyed by server id — read ONCE for the whole inventory rather than
14
+ * per row, because the rows are the deployment's entire registry.
15
+ *
16
+ * Omitted ⇒ no grant store is wired, and every OAuth declaration renders as not connected, which
17
+ * is the true state of a deployment that has nowhere to keep a grant.
18
+ */
19
+ oauthGrants?: StoredOAuthGrants;
6
20
  }
7
21
  /** One declared server: the definition this surface answers for, and the kinds that reach it. */
8
22
  export interface DeclaredToolServer {
@@ -1 +1 @@
1
- {"version":3,"file":"declaredToolServers.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/declaredToolServers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAOzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAa1F,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAED,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAA;IAC/B,UAAU,EAAE,SAAS,EAAE,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAejC;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,cAAc,EAAE,CAIlB;AA2CD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,mBAAmB,GAC9B,4BAA4B,GAAG,SAAS,CAS1C"}
1
+ {"version":3,"file":"declaredToolServers.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/declaredToolServers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAOzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACf,MAAM,wBAAwB,CAAA;AAa/B;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,CACzC,MAAM,EACN,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,WAAW,CAAC,CACnD,CAAA;AAED,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EAAE,iBAAiB,CAAA;IACpC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAA;IAC/B,UAAU,EAAE,SAAS,EAAE,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAejC;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,cAAc,EAAE,CAMlB;AAsED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,mBAAmB,GAC9B,4BAA4B,GAAG,SAAS,CAS1C"}
@@ -43,11 +43,11 @@ export function resolveDeclaredToolServers(registry) {
43
43
  /** Every declared tool server, projected non-secretly and sorted by id. */
44
44
  export function collectDeclaredToolServers(input) {
45
45
  return [...resolveDeclaredToolServers(input.agentKindRegistry).values()]
46
- .map((declared) => toView(declared.definition, declared.declaredBy))
46
+ .map((declared) => toView(declared.definition, declared.declaredBy, input.oauthGrants ?? new Map()))
47
47
  .sort((a, b) => a.id.localeCompare(b.id));
48
48
  }
49
49
  /** Project one definition into its non-secret operator-facing view. */
50
- function toView(definition, declaredBy) {
50
+ function toView(definition, declaredBy, grants) {
51
51
  const notProbeable = notProbeableReason(definition);
52
52
  return {
53
53
  id: definition.id,
@@ -65,10 +65,30 @@ function toView(definition, declaredBy) {
65
65
  required: secret.required !== false,
66
66
  ...(secret.usage ? { usage: secret.usage } : {}),
67
67
  })),
68
+ ...oauthStatus(definition, grants),
68
69
  probeable: notProbeable === undefined,
69
70
  ...(notProbeable ? { notProbeableReason: notProbeable } : {}),
70
71
  };
71
72
  }
73
+ /**
74
+ * The OAuth half of a row: the declaration's grant type, joined to whether THIS workspace holds a
75
+ * grant for it.
76
+ *
77
+ * Absent for a server that declares no OAuth, which is what keeps the Connect affordance off every
78
+ * row it does not apply to. `connected` is derived from the presence of a stored grant rather than
79
+ * stored as a flag, so a disconnect that removed the row cannot leave a row claiming otherwise.
80
+ */
81
+ function oauthStatus(definition, grants) {
82
+ const oauth = definition.oauth;
83
+ if (!oauth)
84
+ return {};
85
+ const stored = grants.get(definition.id);
86
+ // The stored half is spread FIRST so the two derived fields cannot be overwritten by it. The
87
+ // summary is a JSON blob parsed back out of a row, so its shape is a claim rather than a
88
+ // guarantee, and a drifted one must not be able to say a server is `connected` when no row was
89
+ // read or to rename the grant the DECLARATION states.
90
+ return { oauth: { ...stored, grant: oauth.grant, connected: Boolean(stored) } };
91
+ }
72
92
  /**
73
93
  * What the declaration points at, for recognition on the surface.
74
94
  *
@@ -1 +1 @@
1
- {"version":3,"file":"declaredToolServers.js","sourceRoot":"","sources":["../../../src/modules/toolServers/declaredToolServers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"declaredToolServers.js","sourceRoot":"","sources":["../../../src/modules/toolServers/declaredToolServers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ServerContainer } from '../../http/env.js';
2
+ /**
3
+ * The path in the SPA that a vendor's authorization server redirects an operator's browser to.
4
+ *
5
+ * A page in the APP rather than a route on this backend, and that is a security decision rather
6
+ * than a routing preference. A redirect target is reached by a third-party browser navigation,
7
+ * which carries no bearer token, so a backend route receiving it could never tell who was
8
+ * completing the grant; the page re-presents the vendor's `code` and `state` over the authenticated
9
+ * API instead (`completeToolServerOAuthContract`), where the session, the user binding and the
10
+ * `secrets.manage` re-check all apply. Exported for the docs and tests that must state the exact
11
+ * string an operator registers at the vendor.
12
+ */
13
+ export declare const MCP_OAUTH_CALLBACK_PATH = "/mcp-oauth-callback";
14
+ /**
15
+ * The configured redirect URL, or the refusal that names what to configure.
16
+ *
17
+ * Deliberately not derived from the incoming request. The value has to match, to the byte, what
18
+ * the deployment registered as its OAuth client's redirect URI, and a `Host`-derived string is a
19
+ * different value behind every proxy, preview URL and private hostname a deployment sits behind —
20
+ * so deriving it turns a one-time configuration step into an exchange that fails at the vendor
21
+ * with `redirect_uri_mismatch`, which names nothing on this side.
22
+ *
23
+ * A 503 with its own `reason` rather than a generic unavailability, because the deployment IS
24
+ * otherwise wired: the store exists, the declaration is sound, and one variable is missing.
25
+ */
26
+ export declare function requireMcpOAuthRedirectUrl(container: ServerContainer): string;
27
+ //# sourceMappingURL=mcpOAuthRedirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpOAuthRedirect.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/mcpOAuthRedirect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAE5D;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAW7E"}
@@ -0,0 +1,35 @@
1
+ import { UnavailableError } from '@cat-factory/kernel';
2
+ /**
3
+ * The path in the SPA that a vendor's authorization server redirects an operator's browser to.
4
+ *
5
+ * A page in the APP rather than a route on this backend, and that is a security decision rather
6
+ * than a routing preference. A redirect target is reached by a third-party browser navigation,
7
+ * which carries no bearer token, so a backend route receiving it could never tell who was
8
+ * completing the grant; the page re-presents the vendor's `code` and `state` over the authenticated
9
+ * API instead (`completeToolServerOAuthContract`), where the session, the user binding and the
10
+ * `secrets.manage` re-check all apply. Exported for the docs and tests that must state the exact
11
+ * string an operator registers at the vendor.
12
+ */
13
+ export const MCP_OAUTH_CALLBACK_PATH = '/mcp-oauth-callback';
14
+ /**
15
+ * The configured redirect URL, or the refusal that names what to configure.
16
+ *
17
+ * Deliberately not derived from the incoming request. The value has to match, to the byte, what
18
+ * the deployment registered as its OAuth client's redirect URI, and a `Host`-derived string is a
19
+ * different value behind every proxy, preview URL and private hostname a deployment sits behind —
20
+ * so deriving it turns a one-time configuration step into an exchange that fails at the vendor
21
+ * with `redirect_uri_mismatch`, which names nothing on this side.
22
+ *
23
+ * A 503 with its own `reason` rather than a generic unavailability, because the deployment IS
24
+ * otherwise wired: the store exists, the declaration is sound, and one variable is missing.
25
+ */
26
+ export function requireMcpOAuthRedirectUrl(container) {
27
+ const url = container.mcpOAuthRedirectUrl?.trim();
28
+ if (!url) {
29
+ throw new UnavailableError('Tool-server OAuth needs a redirect URL. Set MCP_OAUTH_REDIRECT_URL to this deployment’s ' +
30
+ `public app URL followed by ${MCP_OAUTH_CALLBACK_PATH}, and register the same value as ` +
31
+ 'the OAuth client’s redirect URI at the vendor.', 'mcp_oauth_redirect_url_not_configured');
32
+ }
33
+ return url;
34
+ }
35
+ //# sourceMappingURL=mcpOAuthRedirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpOAuthRedirect.js","sourceRoot":"","sources":["../../../src/modules/toolServers/mcpOAuthRedirect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGtD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAA;AAE5D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAA0B;IACnE,MAAM,GAAG,GAAG,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAA;IACjD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,gBAAgB,CACxB,0FAA0F;YACxF,8BAA8B,uBAAuB,mCAAmC;YACxF,gDAAgD,EAClD,uCAAuC,CACxC,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Logger, ToolSecretResolver } from '@cat-factory/kernel';
1
+ import type { Logger, McpOAuthTokenSource, ToolSecretResolver } from '@cat-factory/kernel';
2
2
  import type { ToolServerProbeResult } from '@cat-factory/contracts';
3
3
  import type { AgentKindRegistry } from '@cat-factory/agents';
4
4
  import { type McpProbeDeps } from './mcpProbe.js';
@@ -14,6 +14,13 @@ export interface ProbeToolServerInput {
14
14
  * path already applies to the same state.
15
15
  */
16
16
  resolveToolSecrets?: ToolSecretResolver;
17
+ /**
18
+ * The facade's OAuth token source — the SAME one a dispatch mints an `Authorization` header
19
+ * with. Absent ⇒ the deployment has no grant store, and a server declaring OAuth is reported as
20
+ * `oauth_not_connected` rather than probed unauthenticated, which would report a working server
21
+ * as a 401 and send the operator to the wrong fix.
22
+ */
23
+ resolveToolServerOAuth?: McpOAuthTokenSource;
17
24
  logger?: Logger;
18
25
  /** Injected for tests; forwarded to the protocol client. */
19
26
  probe?: McpProbeDeps;
@@ -1 +1 @@
1
- {"version":3,"file":"probeToolServer.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/probeToolServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAGN,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,eAAe,CAAA;AAuBrE,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8CjG"}
1
+ {"version":3,"file":"probeToolServer.d.ts","sourceRoot":"","sources":["../../../src/modules/toolServers/probeToolServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EAGnB,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG5D,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,eAAe,CAAA;AAuBrE,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAA;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqDjG"}
@@ -1,6 +1,7 @@
1
1
  import { NotFoundError, isValidMcpToolName, noopLogger, runBestEffort } from '@cat-factory/kernel';
2
2
  import { isReservedPlatformEnvKey, reservedEnvKeyMessage } from '@cat-factory/contracts';
3
3
  import { MCP_PROBE_TOOL_NAME_CAP } from '@cat-factory/contracts';
4
+ import { mergeHeaders } from '../../agents/toolServers.js';
4
5
  import { notProbeableReason, resolveDeclaredToolServers } from './declaredToolServers.js';
5
6
  import { probeMcpHttpServer } from './mcpProbe.js';
6
7
  /**
@@ -25,13 +26,21 @@ export async function probeToolServer(input) {
25
26
  const credentials = await resolveCredentials(input, definition);
26
27
  if (!credentials.ok)
27
28
  return { serverId, ...credentials.failure };
29
+ const granted = await resolveOAuthHeader(input, definition, definition.transport.url);
30
+ if (!granted.ok)
31
+ return { serverId, ...granted.failure };
28
32
  const outcome = await probeMcpHttpServer({
29
33
  url: definition.transport.url,
30
34
  // The declaration's own headers and the RESOLVED CREDENTIAL stay apart, because the protocol
31
35
  // client treats them differently at a redirect: a hop off the declared origin is refused while
32
36
  // a credential is riding, and a non-secret `x-tenant` is no reason to refuse anything.
33
37
  headers: { ...definition.transport.headers },
34
- credentialHeaders: credentials.headers,
38
+ // The granted token joins the CREDENTIAL side, not the declaration's own headers: it is the
39
+ // secret a cross-origin redirect must not carry, which is the whole reason the probe keeps
40
+ // the two apart. Last, so it wins a header a static credential also names — the same
41
+ // precedence the dispatch applies (through the same case-insensitive merge, so the probe
42
+ // cannot report on a header pair the dispatch would collapse), and boot warns about it.
43
+ credentialHeaders: mergeHeaders(credentials.headers, granted.headers),
35
44
  }, input.probe);
36
45
  if (outcome.status !== 'ok') {
37
46
  input.logger?.warn('tool server probe failed', {
@@ -96,6 +105,47 @@ function checkAllowedTools(definition, tools, toolsComplete) {
96
105
  },
97
106
  };
98
107
  }
108
+ /**
109
+ * Mint the access token an OAuth-declaring server needs, as the header its declaration named.
110
+ *
111
+ * The two failure statuses are the probe's whole value here. `oauth_not_connected` says nobody has
112
+ * granted this board access, which is a Connect button rather than anything about the endpoint;
113
+ * `oauth_token_failed` says a grant IS on file and produced nothing, which is a revocation, an
114
+ * expiry, or an authorization server having a bad day. Probing anyway and reporting the 401 would
115
+ * collapse both into "your credential is wrong", the one diagnosis that is false in both cases.
116
+ */
117
+ async function resolveOAuthHeader(input, definition, serverUrl) {
118
+ const oauth = definition.oauth;
119
+ if (!oauth)
120
+ return { ok: true, headers: {} };
121
+ const source = input.resolveToolServerOAuth;
122
+ if (!source) {
123
+ return {
124
+ ok: false,
125
+ failure: {
126
+ status: 'oauth_not_connected',
127
+ error: 'This deployment has no encryption key, so it has nowhere to keep an OAuth grant and ' +
128
+ 'no run can authenticate against this server either.',
129
+ },
130
+ };
131
+ }
132
+ const result = await source.accessToken({
133
+ workspaceId: input.workspaceId,
134
+ serverId: definition.id,
135
+ serverUrl,
136
+ oauth,
137
+ });
138
+ if (result.status === 'ok')
139
+ return { ok: true, headers: { [result.header]: result.value } };
140
+ if (result.status === 'not_connected')
141
+ return { ok: false, failure: { status: 'oauth_not_connected' } };
142
+ input.logger?.warn('tool server probe could not obtain an oauth token', {
143
+ toolServerId: definition.id,
144
+ workspaceId: input.workspaceId,
145
+ detail: result.error,
146
+ });
147
+ return { ok: false, failure: { status: 'oauth_token_failed', error: result.error } };
148
+ }
99
149
  /**
100
150
  * Resolve the declared credentials into request headers, or report why the probe cannot proceed.
101
151
  *