toolhome 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/README.zh.md +281 -0
  4. package/dist/server/app.d.ts +16 -0
  5. package/dist/server/app.d.ts.map +1 -0
  6. package/dist/server/app.js +166 -0
  7. package/dist/server/app.js.map +1 -0
  8. package/dist/server/cli/main.d.ts +3 -0
  9. package/dist/server/cli/main.d.ts.map +1 -0
  10. package/dist/server/cli/main.js +587 -0
  11. package/dist/server/cli/main.js.map +1 -0
  12. package/dist/server/cli-plane/allow-list.d.ts +18 -0
  13. package/dist/server/cli-plane/allow-list.d.ts.map +1 -0
  14. package/dist/server/cli-plane/allow-list.js +28 -0
  15. package/dist/server/cli-plane/allow-list.js.map +1 -0
  16. package/dist/server/cli-plane/cli-service.d.ts +41 -0
  17. package/dist/server/cli-plane/cli-service.d.ts.map +1 -0
  18. package/dist/server/cli-plane/cli-service.js +282 -0
  19. package/dist/server/cli-plane/cli-service.js.map +1 -0
  20. package/dist/server/cli-plane/frames.d.ts +26 -0
  21. package/dist/server/cli-plane/frames.d.ts.map +1 -0
  22. package/dist/server/cli-plane/frames.js +12 -0
  23. package/dist/server/cli-plane/frames.js.map +1 -0
  24. package/dist/server/cli-plane/models.d.ts +174 -0
  25. package/dist/server/cli-plane/models.d.ts.map +1 -0
  26. package/dist/server/cli-plane/models.js +169 -0
  27. package/dist/server/cli-plane/models.js.map +1 -0
  28. package/dist/server/cli-plane/routes.d.ts +32 -0
  29. package/dist/server/cli-plane/routes.d.ts.map +1 -0
  30. package/dist/server/cli-plane/routes.js +94 -0
  31. package/dist/server/cli-plane/routes.js.map +1 -0
  32. package/dist/server/cli-plane/runner.d.ts +41 -0
  33. package/dist/server/cli-plane/runner.d.ts.map +1 -0
  34. package/dist/server/cli-plane/runner.js +163 -0
  35. package/dist/server/cli-plane/runner.js.map +1 -0
  36. package/dist/server/cli-plane/status.d.ts +12 -0
  37. package/dist/server/cli-plane/status.d.ts.map +1 -0
  38. package/dist/server/cli-plane/status.js +24 -0
  39. package/dist/server/cli-plane/status.js.map +1 -0
  40. package/dist/server/config/harness-import.d.ts +44 -0
  41. package/dist/server/config/harness-import.d.ts.map +1 -0
  42. package/dist/server/config/harness-import.js +166 -0
  43. package/dist/server/config/harness-import.js.map +1 -0
  44. package/dist/server/config.d.ts +20 -0
  45. package/dist/server/config.d.ts.map +1 -0
  46. package/dist/server/config.js +80 -0
  47. package/dist/server/config.js.map +1 -0
  48. package/dist/server/control/client.d.ts +24 -0
  49. package/dist/server/control/client.d.ts.map +1 -0
  50. package/dist/server/control/client.js +115 -0
  51. package/dist/server/control/client.js.map +1 -0
  52. package/dist/server/control/control-api.d.ts +39 -0
  53. package/dist/server/control/control-api.d.ts.map +1 -0
  54. package/dist/server/control/control-api.js +291 -0
  55. package/dist/server/control/control-api.js.map +1 -0
  56. package/dist/server/control/control-service.d.ts +713 -0
  57. package/dist/server/control/control-service.d.ts.map +1 -0
  58. package/dist/server/control/control-service.js +693 -0
  59. package/dist/server/control/control-service.js.map +1 -0
  60. package/dist/server/control/openapi.d.ts +2 -0
  61. package/dist/server/control/openapi.d.ts.map +1 -0
  62. package/dist/server/control/openapi.js +370 -0
  63. package/dist/server/control/openapi.js.map +1 -0
  64. package/dist/server/data-plane/data-plane.d.ts +20 -0
  65. package/dist/server/data-plane/data-plane.d.ts.map +1 -0
  66. package/dist/server/data-plane/data-plane.js +335 -0
  67. package/dist/server/data-plane/data-plane.js.map +1 -0
  68. package/dist/server/data-plane/gateway-server.d.ts +13 -0
  69. package/dist/server/data-plane/gateway-server.d.ts.map +1 -0
  70. package/dist/server/data-plane/gateway-server.js +796 -0
  71. package/dist/server/data-plane/gateway-server.js.map +1 -0
  72. package/dist/server/data-plane/legacy-session.d.ts +18 -0
  73. package/dist/server/data-plane/legacy-session.d.ts.map +1 -0
  74. package/dist/server/data-plane/legacy-session.js +137 -0
  75. package/dist/server/data-plane/legacy-session.js.map +1 -0
  76. package/dist/server/data-plane/projection.d.ts +18 -0
  77. package/dist/server/data-plane/projection.d.ts.map +1 -0
  78. package/dist/server/data-plane/projection.js +44 -0
  79. package/dist/server/data-plane/projection.js.map +1 -0
  80. package/dist/server/data-plane/registry.d.ts +31 -0
  81. package/dist/server/data-plane/registry.d.ts.map +1 -0
  82. package/dist/server/data-plane/registry.js +129 -0
  83. package/dist/server/data-plane/registry.js.map +1 -0
  84. package/dist/server/data-plane/task-extension.d.ts +7 -0
  85. package/dist/server/data-plane/task-extension.d.ts.map +1 -0
  86. package/dist/server/data-plane/task-extension.js +33 -0
  87. package/dist/server/data-plane/task-extension.js.map +1 -0
  88. package/dist/server/data-plane/virtualization.d.ts +35 -0
  89. package/dist/server/data-plane/virtualization.d.ts.map +1 -0
  90. package/dist/server/data-plane/virtualization.js +228 -0
  91. package/dist/server/data-plane/virtualization.js.map +1 -0
  92. package/dist/server/domain/errors.d.ts +9 -0
  93. package/dist/server/domain/errors.d.ts.map +1 -0
  94. package/dist/server/domain/errors.js +19 -0
  95. package/dist/server/domain/errors.js.map +1 -0
  96. package/dist/server/domain/models.d.ts +720 -0
  97. package/dist/server/domain/models.d.ts.map +1 -0
  98. package/dist/server/domain/models.js +327 -0
  99. package/dist/server/domain/models.js.map +1 -0
  100. package/dist/server/main.d.ts +2 -0
  101. package/dist/server/main.d.ts.map +1 -0
  102. package/dist/server/main.js +37 -0
  103. package/dist/server/main.js.map +1 -0
  104. package/dist/server/manage/management-mcp.d.ts +27 -0
  105. package/dist/server/manage/management-mcp.d.ts.map +1 -0
  106. package/dist/server/manage/management-mcp.js +431 -0
  107. package/dist/server/manage/management-mcp.js.map +1 -0
  108. package/dist/server/market/catalog.d.ts +111 -0
  109. package/dist/server/market/catalog.d.ts.map +1 -0
  110. package/dist/server/market/catalog.js +784 -0
  111. package/dist/server/market/catalog.js.map +1 -0
  112. package/dist/server/market/installers.d.ts +64 -0
  113. package/dist/server/market/installers.d.ts.map +1 -0
  114. package/dist/server/market/installers.js +181 -0
  115. package/dist/server/market/installers.js.map +1 -0
  116. package/dist/server/market/market-service.d.ts +146 -0
  117. package/dist/server/market/market-service.d.ts.map +1 -0
  118. package/dist/server/market/market-service.js +930 -0
  119. package/dist/server/market/market-service.js.map +1 -0
  120. package/dist/server/observability/call-recorder.d.ts +22 -0
  121. package/dist/server/observability/call-recorder.d.ts.map +1 -0
  122. package/dist/server/observability/call-recorder.js +99 -0
  123. package/dist/server/observability/call-recorder.js.map +1 -0
  124. package/dist/server/observability/logger.d.ts +16 -0
  125. package/dist/server/observability/logger.d.ts.map +1 -0
  126. package/dist/server/observability/logger.js +25 -0
  127. package/dist/server/observability/logger.js.map +1 -0
  128. package/dist/server/security/api-keys.d.ts +15 -0
  129. package/dist/server/security/api-keys.d.ts.map +1 -0
  130. package/dist/server/security/api-keys.js +35 -0
  131. package/dist/server/security/api-keys.js.map +1 -0
  132. package/dist/server/security/auth-service.d.ts +26 -0
  133. package/dist/server/security/auth-service.d.ts.map +1 -0
  134. package/dist/server/security/auth-service.js +76 -0
  135. package/dist/server/security/auth-service.js.map +1 -0
  136. package/dist/server/security/control-session.d.ts +9 -0
  137. package/dist/server/security/control-session.d.ts.map +1 -0
  138. package/dist/server/security/control-session.js +51 -0
  139. package/dist/server/security/control-session.js.map +1 -0
  140. package/dist/server/security/credential-materializer.d.ts +20 -0
  141. package/dist/server/security/credential-materializer.d.ts.map +1 -0
  142. package/dist/server/security/credential-materializer.js +82 -0
  143. package/dist/server/security/credential-materializer.js.map +1 -0
  144. package/dist/server/security/cursor-codec.d.ts +13 -0
  145. package/dist/server/security/cursor-codec.d.ts.map +1 -0
  146. package/dist/server/security/cursor-codec.js +43 -0
  147. package/dist/server/security/cursor-codec.js.map +1 -0
  148. package/dist/server/security/oauth-routes.d.ts +21 -0
  149. package/dist/server/security/oauth-routes.d.ts.map +1 -0
  150. package/dist/server/security/oauth-routes.js +100 -0
  151. package/dist/server/security/oauth-routes.js.map +1 -0
  152. package/dist/server/security/oauth-server.d.ts +16 -0
  153. package/dist/server/security/oauth-server.d.ts.map +1 -0
  154. package/dist/server/security/oauth-server.js +544 -0
  155. package/dist/server/security/oauth-server.js.map +1 -0
  156. package/dist/server/security/secret-box.d.ts +7 -0
  157. package/dist/server/security/secret-box.d.ts.map +1 -0
  158. package/dist/server/security/secret-box.js +27 -0
  159. package/dist/server/security/secret-box.js.map +1 -0
  160. package/dist/server/security/secure-action.d.ts +21 -0
  161. package/dist/server/security/secure-action.d.ts.map +1 -0
  162. package/dist/server/security/secure-action.js +69 -0
  163. package/dist/server/security/secure-action.js.map +1 -0
  164. package/dist/server/storage/sqlite-store.d.ts +70 -0
  165. package/dist/server/storage/sqlite-store.d.ts.map +1 -0
  166. package/dist/server/storage/sqlite-store.js +1522 -0
  167. package/dist/server/storage/sqlite-store.js.map +1 -0
  168. package/dist/server/storage/store.d.ts +82 -0
  169. package/dist/server/storage/store.d.ts.map +1 -0
  170. package/dist/server/storage/store.js +2 -0
  171. package/dist/server/storage/store.js.map +1 -0
  172. package/dist/server/upstream/adapter.d.ts +52 -0
  173. package/dist/server/upstream/adapter.d.ts.map +1 -0
  174. package/dist/server/upstream/adapter.js +807 -0
  175. package/dist/server/upstream/adapter.js.map +1 -0
  176. package/dist/server/upstream/credential-resolver.d.ts +14 -0
  177. package/dist/server/upstream/credential-resolver.d.ts.map +1 -0
  178. package/dist/server/upstream/credential-resolver.js +56 -0
  179. package/dist/server/upstream/credential-resolver.js.map +1 -0
  180. package/dist/server/upstream/extension-transport.d.ts +17 -0
  181. package/dist/server/upstream/extension-transport.d.ts.map +1 -0
  182. package/dist/server/upstream/extension-transport.js +207 -0
  183. package/dist/server/upstream/extension-transport.js.map +1 -0
  184. package/dist/server/upstream/manager.d.ts +23 -0
  185. package/dist/server/upstream/manager.d.ts.map +1 -0
  186. package/dist/server/upstream/manager.js +324 -0
  187. package/dist/server/upstream/manager.js.map +1 -0
  188. package/dist/server/upstream/oauth-provider.d.ts +38 -0
  189. package/dist/server/upstream/oauth-provider.d.ts.map +1 -0
  190. package/dist/server/upstream/oauth-provider.js +225 -0
  191. package/dist/server/upstream/oauth-provider.js.map +1 -0
  192. package/dist/server/upstream/oauth-refresh.d.ts +65 -0
  193. package/dist/server/upstream/oauth-refresh.d.ts.map +1 -0
  194. package/dist/server/upstream/oauth-refresh.js +240 -0
  195. package/dist/server/upstream/oauth-refresh.js.map +1 -0
  196. package/dist/server/upstream/oauth-routes.d.ts +17 -0
  197. package/dist/server/upstream/oauth-routes.d.ts.map +1 -0
  198. package/dist/server/upstream/oauth-routes.js +87 -0
  199. package/dist/server/upstream/oauth-routes.js.map +1 -0
  200. package/dist/server/upstream/oauth-service.d.ts +143 -0
  201. package/dist/server/upstream/oauth-service.d.ts.map +1 -0
  202. package/dist/server/upstream/oauth-service.js +217 -0
  203. package/dist/server/upstream/oauth-service.js.map +1 -0
  204. package/dist/server/upstream/stable-json.d.ts +3 -0
  205. package/dist/server/upstream/stable-json.d.ts.map +1 -0
  206. package/dist/server/upstream/stable-json.js +17 -0
  207. package/dist/server/upstream/stable-json.js.map +1 -0
  208. package/package.json +69 -0
  209. package/skills/toolhome/SKILL.md +238 -0
  210. package/skills/toolhome/references/cli-reference.md +242 -0
  211. package/skills/toolhome/references/deployment.md +113 -0
  212. package/skills/toolhome/references/market-guide.md +128 -0
  213. package/skills/toolhome/references/oauth-guide.md +96 -0
  214. package/skills/toolhome/references/troubleshooting.md +133 -0
@@ -0,0 +1,431 @@
1
+ import { CallToolRequestParamsSchema } from '@modelcontextprotocol/core';
2
+ import { ProtocolError, ProtocolErrorCode, Server, createMcpHandler, } from '@modelcontextprotocol/server';
3
+ import { z } from 'zod';
4
+ import { AppError } from '../domain/errors.js';
5
+ import { bearerToken } from '../security/auth-service.js';
6
+ const serverIdSchema = z.object({ server_id: z.uuid() });
7
+ const enableSchema = serverIdSchema.extend({ enabled: z.boolean() });
8
+ const marketInstallSchema = z.object({
9
+ entry_id: z.string().min(1),
10
+ values: z.record(z.string(), z.string()).optional().default({}),
11
+ });
12
+ const visibilitySchema = z.object({
13
+ server_id: z.uuid(),
14
+ tool: z.string().min(1),
15
+ visibility: z.enum(['inherit', 'visible', 'hidden']),
16
+ });
17
+ const searchSchema = z.object({ query: z.string().optional() });
18
+ const callsSchema = z.object({
19
+ limit: z.number().int().min(1).max(500).optional().default(50),
20
+ server_id: z.uuid().optional(),
21
+ status: z.string().optional(),
22
+ });
23
+ function ok(value) {
24
+ return {
25
+ content: [{ type: 'text', text: JSON.stringify(value) }],
26
+ structuredContent: { ok: true, ...value },
27
+ };
28
+ }
29
+ function fail(error) {
30
+ const appError = error instanceof AppError ? error : null;
31
+ const message = error instanceof Error ? error.message : String(error);
32
+ const code = appError?.code ?? 'internal_error';
33
+ return {
34
+ content: [{ type: 'text', text: message }],
35
+ structuredContent: { ok: false, error: code, message },
36
+ };
37
+ }
38
+ /**
39
+ * The Management MCP is the control plane's MCP surface. It reuses the shared
40
+ * domain services directly (never internal HTTP) and is served at /manage/mcp,
41
+ * outside the /mcp aggregate. Only control keys are accepted; the aggregate
42
+ * endpoint never contains these tools.
43
+ */
44
+ export class ManagementMCP {
45
+ #service;
46
+ #market;
47
+ #store;
48
+ #auth;
49
+ #recorder;
50
+ #publicUrl;
51
+ #handler;
52
+ #server;
53
+ constructor(options) {
54
+ this.#service = options.service;
55
+ this.#market = options.market;
56
+ this.#store = options.store;
57
+ this.#auth = options.auth;
58
+ this.#recorder = options.recorder;
59
+ this.#publicUrl = options.publicUrl;
60
+ this.#server = this.#createServer();
61
+ this.#handler = createMcpHandler(() => this.#server, { legacy: 'reject' });
62
+ }
63
+ async serve(request) {
64
+ const token = bearerToken(request);
65
+ if (!token) {
66
+ return jsonResponse({ error: { code: 'unauthorized', message: 'Control credential required' } }, 401);
67
+ }
68
+ let principal;
69
+ try {
70
+ principal = this.#auth.authenticate('control', token);
71
+ }
72
+ catch {
73
+ // Both invalid credentials and MCP access keys land here: access keys
74
+ // must never reach the management surface.
75
+ return jsonResponse({ error: { code: 'unauthorized', message: 'Control credential required' } }, 401);
76
+ }
77
+ const contentType = request.headers.get('content-type') ?? '';
78
+ let parsedBody;
79
+ if (contentType.includes('application/json')) {
80
+ parsedBody = await request.clone().json();
81
+ }
82
+ const authInfo = this.#auth.toMcpAuthInfo(principal, token, new URL('/manage/mcp', this.#publicUrl));
83
+ return this.#handler.fetch(request, { authInfo, parsedBody });
84
+ }
85
+ async close() {
86
+ await this.#handler.close();
87
+ }
88
+ #createServer() {
89
+ const server = new Server({ name: 'toolhome-management', version: '0.1.0', title: 'ToolHome Management' }, {
90
+ capabilities: { tools: {} },
91
+ instructions: 'Manage a ToolHome instance: inspect servers, search the market, read tool visibility and call history, and run reversible operations (enable/disable/refresh/restart, market install, tool visibility). Secrets are never accepted through tool arguments — installs that need them return a one-time action URL to complete in the web console.',
92
+ });
93
+ server.setRequestHandler('tools/list', async () => ({ tools: this.#tools() }));
94
+ server.setRequestHandler('tools/call', { params: CallToolRequestParamsSchema, result: z.any() }, async (request, context) => this.#dispatch(request.name, request.arguments ?? {}, context));
95
+ return server;
96
+ }
97
+ #tools() {
98
+ return [
99
+ {
100
+ name: 'home_status',
101
+ description: 'Instance, server, credential and health summary plus management endpoint',
102
+ inputSchema: { type: 'object', properties: {} },
103
+ },
104
+ {
105
+ name: 'server_list',
106
+ description: 'List servers with runtime status',
107
+ inputSchema: { type: 'object', properties: {} },
108
+ },
109
+ {
110
+ name: 'server_get',
111
+ description: 'Get a single server, runtime status, tool count and last error',
112
+ inputSchema: {
113
+ type: 'object',
114
+ properties: { server_id: { type: 'string' } },
115
+ required: ['server_id'],
116
+ },
117
+ },
118
+ {
119
+ name: 'market_search',
120
+ description: 'Search the curated market catalog with install state',
121
+ inputSchema: {
122
+ type: 'object',
123
+ properties: { query: { type: 'string' } },
124
+ },
125
+ },
126
+ {
127
+ name: 'tool_list',
128
+ description: 'List a server\'s tools with effective aggregate visibility',
129
+ inputSchema: {
130
+ type: 'object',
131
+ properties: { server_id: { type: 'string' } },
132
+ required: ['server_id'],
133
+ },
134
+ },
135
+ {
136
+ name: 'calls_query',
137
+ description: 'Query metadata-only tool call records',
138
+ inputSchema: {
139
+ type: 'object',
140
+ properties: {
141
+ limit: { type: 'integer' },
142
+ server_id: { type: 'string' },
143
+ status: { type: 'string' },
144
+ },
145
+ },
146
+ },
147
+ {
148
+ name: 'server_set_enabled',
149
+ description: 'Enable or disable a server (idempotent)',
150
+ inputSchema: {
151
+ type: 'object',
152
+ properties: { server_id: { type: 'string' }, enabled: { type: 'boolean' } },
153
+ required: ['server_id', 'enabled'],
154
+ },
155
+ },
156
+ {
157
+ name: 'server_refresh',
158
+ description: 'Re-discover a server\'s capabilities',
159
+ inputSchema: {
160
+ type: 'object',
161
+ properties: { server_id: { type: 'string' } },
162
+ required: ['server_id'],
163
+ },
164
+ },
165
+ {
166
+ name: 'server_restart',
167
+ description: 'Restart a home-hosted server or reconnect a remote one',
168
+ inputSchema: {
169
+ type: 'object',
170
+ properties: { server_id: { type: 'string' } },
171
+ required: ['server_id'],
172
+ },
173
+ },
174
+ {
175
+ name: 'market_install',
176
+ description: 'Install a curated market entry; returns a one-time action URL when a secret is required',
177
+ inputSchema: {
178
+ type: 'object',
179
+ properties: {
180
+ entry_id: { type: 'string' },
181
+ values: { type: 'object', additionalProperties: { type: 'string' } },
182
+ },
183
+ required: ['entry_id'],
184
+ },
185
+ },
186
+ {
187
+ name: 'tool_set_visibility',
188
+ description: 'Set a tool\'s aggregate visibility (inherit/visible/hidden)',
189
+ inputSchema: {
190
+ type: 'object',
191
+ properties: {
192
+ server_id: { type: 'string' },
193
+ tool: { type: 'string' },
194
+ visibility: { type: 'string', enum: ['inherit', 'visible', 'hidden'] },
195
+ },
196
+ required: ['server_id', 'tool', 'visibility'],
197
+ },
198
+ },
199
+ ];
200
+ }
201
+ async #dispatch(name, arguments_, context) {
202
+ switch (name) {
203
+ case 'home_status':
204
+ return this.#homeStatus();
205
+ case 'server_list':
206
+ return this.#serverList();
207
+ case 'server_get':
208
+ return this.#serverGet(serverIdSchema.parse(arguments_));
209
+ case 'market_search':
210
+ return this.#marketSearch(searchSchema.parse(arguments_));
211
+ case 'tool_list':
212
+ return this.#toolList(serverIdSchema.parse(arguments_));
213
+ case 'calls_query':
214
+ return this.#calls(callsSchema.parse(arguments_));
215
+ case 'server_set_enabled':
216
+ return this.#serverSetEnabled(enableSchema.parse(arguments_), context);
217
+ case 'server_refresh':
218
+ return this.#serverRefresh(serverIdSchema.parse(arguments_), context);
219
+ case 'server_restart':
220
+ return this.#serverRestart(serverIdSchema.parse(arguments_), context);
221
+ case 'market_install':
222
+ return this.#marketInstall(marketInstallSchema.parse(arguments_), context);
223
+ case 'tool_set_visibility':
224
+ return this.#toolSetVisibility(visibilitySchema.parse(arguments_), context);
225
+ default:
226
+ throw new ProtocolError(ProtocolErrorCode.MethodNotFound, `Unknown tool: ${name}`);
227
+ }
228
+ }
229
+ #homeStatus() {
230
+ try {
231
+ const overview = this.#service.overview();
232
+ return ok({
233
+ overview,
234
+ managementEndpoint: new URL('/manage/mcp', this.#publicUrl).toString(),
235
+ });
236
+ }
237
+ catch (error) {
238
+ return fail(error);
239
+ }
240
+ }
241
+ #serverList() {
242
+ try {
243
+ const servers = this.#service.listServers().map((server) => ({
244
+ id: server.id,
245
+ slug: server.slug,
246
+ name: server.name,
247
+ kind: server.kind,
248
+ enabled: server.enabled,
249
+ status: server.runtime?.status ?? 'unknown',
250
+ lastError: server.runtime?.lastError ?? null,
251
+ }));
252
+ return ok({ servers });
253
+ }
254
+ catch (error) {
255
+ return fail(error);
256
+ }
257
+ }
258
+ #serverGet({ server_id }) {
259
+ try {
260
+ const server = this.#service.getServer(server_id);
261
+ const snapshot = this.#store.getSnapshot(server_id);
262
+ return ok({
263
+ server: {
264
+ id: server.id,
265
+ slug: server.slug,
266
+ name: server.name,
267
+ kind: server.kind,
268
+ enabled: server.enabled,
269
+ status: server.runtime?.status ?? 'unknown',
270
+ lastError: server.runtime?.lastError ?? null,
271
+ toolCount: snapshot?.tools.length ?? 0,
272
+ },
273
+ });
274
+ }
275
+ catch (error) {
276
+ return fail(error);
277
+ }
278
+ }
279
+ #marketSearch({ query }) {
280
+ try {
281
+ const needle = query?.trim().toLowerCase() ?? '';
282
+ const entries = this.#market
283
+ .list()
284
+ .filter((entry) => needle === '' ||
285
+ entry.name.toLowerCase().includes(needle) ||
286
+ entry.id.includes(needle) ||
287
+ entry.category.includes(needle))
288
+ .map((entry) => ({
289
+ id: entry.id,
290
+ name: entry.name,
291
+ category: entry.category,
292
+ kind: entry.kind,
293
+ installed: entry.installed,
294
+ version: entry.version ?? null,
295
+ requiresSecrets: entry.requires.some((requirement) => requirement.secret),
296
+ }));
297
+ return ok({ entries });
298
+ }
299
+ catch (error) {
300
+ return fail(error);
301
+ }
302
+ }
303
+ #toolList({ server_id }) {
304
+ try {
305
+ const projection = this.#service.getProjection(server_id);
306
+ return ok({ tools: projection.tools });
307
+ }
308
+ catch (error) {
309
+ return fail(error);
310
+ }
311
+ }
312
+ #calls(params) {
313
+ try {
314
+ const result = this.#store.listToolCalls({
315
+ limit: params.limit,
316
+ offset: 0,
317
+ serverId: params.server_id,
318
+ status: params.status,
319
+ });
320
+ return ok({ calls: result });
321
+ }
322
+ catch (error) {
323
+ return fail(error);
324
+ }
325
+ }
326
+ async #serverSetEnabled(params, context) {
327
+ const startedAt = new Date();
328
+ try {
329
+ const server = this.#service.getServer(params.server_id);
330
+ const result = server.enabled === params.enabled
331
+ ? { id: server.id, enabled: server.enabled, unchanged: true }
332
+ : params.enabled
333
+ ? await this.#service.enableServer(params.server_id)
334
+ : await this.#service.disableServer(params.server_id);
335
+ this.#record(context, 'server_set_enabled', params.server_id, startedAt, true);
336
+ return ok({ serverId: params.server_id, enabled: params.enabled, result });
337
+ }
338
+ catch (error) {
339
+ this.#record(context, 'server_set_enabled', params.server_id, startedAt, false, error);
340
+ return fail(error);
341
+ }
342
+ }
343
+ async #serverRefresh(params, context) {
344
+ const startedAt = new Date();
345
+ try {
346
+ await this.#service.refreshServer(params.server_id);
347
+ this.#record(context, 'server_refresh', params.server_id, startedAt, true);
348
+ return ok({ serverId: params.server_id, refreshed: true });
349
+ }
350
+ catch (error) {
351
+ this.#record(context, 'server_refresh', params.server_id, startedAt, false, error);
352
+ return fail(error);
353
+ }
354
+ }
355
+ async #serverRestart(params, context) {
356
+ const startedAt = new Date();
357
+ try {
358
+ await this.#service.restartServer(params.server_id);
359
+ this.#record(context, 'server_restart', params.server_id, startedAt, true);
360
+ return ok({ serverId: params.server_id, restarted: true });
361
+ }
362
+ catch (error) {
363
+ this.#record(context, 'server_restart', params.server_id, startedAt, false, error);
364
+ return fail(error);
365
+ }
366
+ }
367
+ async #marketInstall(params, context) {
368
+ const startedAt = new Date();
369
+ const principalId = context.http?.authInfo?.clientId ?? 'anonymous';
370
+ try {
371
+ const result = await this.#market.install(params.entry_id, params.values, principalId);
372
+ this.#record(context, 'market_install', null, startedAt, true);
373
+ return ok({ jobId: result.jobId, status: result.status, actionUrl: result.actionUrl });
374
+ }
375
+ catch (error) {
376
+ this.#record(context, 'market_install', null, startedAt, false, error);
377
+ return fail(error);
378
+ }
379
+ }
380
+ async #toolSetVisibility(params, context) {
381
+ const startedAt = new Date();
382
+ try {
383
+ const current = this.#service.getProjection(params.server_id);
384
+ const effective = params.visibility === 'inherit'
385
+ ? null
386
+ : params.visibility;
387
+ const override = current.overrides[params.tool] ?? null;
388
+ const unchanged = override === effective;
389
+ if (!unchanged) {
390
+ this.#service.setProjection(params.server_id, {
391
+ overrides: [{ tool: params.tool, visibility: params.visibility }],
392
+ });
393
+ }
394
+ this.#record(context, 'tool_set_visibility', params.server_id, startedAt, true);
395
+ return ok({
396
+ serverId: params.server_id,
397
+ tool: params.tool,
398
+ visibility: params.visibility,
399
+ unchanged,
400
+ });
401
+ }
402
+ catch (error) {
403
+ this.#record(context, 'tool_set_visibility', params.server_id, startedAt, false, error);
404
+ return fail(error);
405
+ }
406
+ }
407
+ #record(context, toolName, serverId, startedAt, success, error) {
408
+ const completedAt = new Date();
409
+ const draft = {
410
+ endpointType: 'management',
411
+ principalKind: 'control_key',
412
+ principalId: context.http?.authInfo?.clientId ?? 'anonymous',
413
+ serverId,
414
+ exposedToolName: toolName,
415
+ upstreamToolName: toolName,
416
+ status: success ? 'success' : 'protocol_error',
417
+ errorType: success ? null : (error instanceof AppError ? error.code : 'management_error'),
418
+ startedAt: startedAt.toISOString(),
419
+ completedAt: completedAt.toISOString(),
420
+ durationMs: Math.max(0, completedAt.getTime() - startedAt.getTime()),
421
+ };
422
+ this.#recorder.record(draft);
423
+ }
424
+ }
425
+ function jsonResponse(value, status) {
426
+ return new Response(JSON.stringify(value), {
427
+ status,
428
+ headers: { 'content-type': 'application/json', 'cache-control': 'no-store' },
429
+ });
430
+ }
431
+ //# sourceMappingURL=management-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management-mcp.js","sourceRoot":"","sources":["../../../src/manage/management-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ export interface MarketRequirement {
2
+ name: string;
3
+ description: string;
4
+ secret?: boolean;
5
+ required?: boolean;
6
+ }
7
+ export type CredentialSpec = {
8
+ type: 'oauth';
9
+ } | {
10
+ type: 'env';
11
+ } | {
12
+ type: 'bearer';
13
+ tokenKey: string;
14
+ } | {
15
+ type: 'api-key';
16
+ headerName: string;
17
+ valueKey: string;
18
+ } | {
19
+ type: 'headers';
20
+ headers: {
21
+ name: string;
22
+ valueKey?: string;
23
+ value?: string;
24
+ }[];
25
+ };
26
+ export interface MarketEntry {
27
+ id: string;
28
+ name: string;
29
+ description: string;
30
+ category: string;
31
+ /** Hosting plane: MCP servers (default) or hosted CLIs */
32
+ plane?: 'mcp' | 'cli';
33
+ kind: 'home-stdio' | 'remote' | 'uvx' | 'docker' | 'cli-binary' | 'cli-image';
34
+ package?: string;
35
+ bin?: string;
36
+ /** Pinned exact artifact version (npm `@x.y.z`, uvx `==x.y.z`); installs never drift with latest */
37
+ version?: string;
38
+ /** Declarative installation recipe hidden behind the platform product entry. */
39
+ installer?: {
40
+ type: 'npm';
41
+ package: string;
42
+ bin: string;
43
+ version?: string;
44
+ } | {
45
+ type: 'go';
46
+ module: string;
47
+ bin: string;
48
+ version?: string;
49
+ } | {
50
+ type: 'github-release';
51
+ repository: string;
52
+ tag: string;
53
+ asset: string;
54
+ url: string;
55
+ bin: string;
56
+ archive?: 'tar.gz' | 'zip';
57
+ } | {
58
+ type: 'uvx';
59
+ package: string;
60
+ bin: string;
61
+ version?: string;
62
+ with?: string[];
63
+ } | {
64
+ type: 'docker';
65
+ image: string;
66
+ entrypoint?: string | null;
67
+ dockerfile?: string;
68
+ };
69
+ /** Docker image to run via `docker run --rm -i` (kind: docker); the host socket must be mounted */
70
+ image?: string;
71
+ /** Inline Dockerfile used to build the image when it is not present and not pullable */
72
+ dockerfile?: string;
73
+ url?: string;
74
+ /** Extra dependencies pinned into the uv tool env (e.g. ["mcp<2"]) to work around upstream breaks */
75
+ uvWith?: string[];
76
+ /** Executed argv prefix baked into every MCP stdio exec (after the binary). */
77
+ argsTemplate?: string[];
78
+ /** Explicit argv rules required for hosted CLI execution. */
79
+ allowList?: {
80
+ allow: string[][];
81
+ deny: string[][];
82
+ };
83
+ /** Platform identity shown in the CLI plane and used for shared auth metadata. */
84
+ platform?: string;
85
+ /** Maps CLI environment names to credential payload sources. */
86
+ credentialBindings?: Record<string, string>;
87
+ /** Declarative runtime bootstrap for hosted CLI containers. */
88
+ cliRuntime?: {
89
+ authStrategy?: 'none' | 'azure-service-principal' | 'tailscale-auth-key';
90
+ containerVolumes?: {
91
+ source: string;
92
+ target: string;
93
+ readOnly?: boolean;
94
+ }[];
95
+ };
96
+ credential: CredentialSpec;
97
+ requires: MarketRequirement[];
98
+ /** Optional Docker entrypoint used when the image does not declare its CLI binary. */
99
+ entrypoint?: string;
100
+ /** Status probe argv for the installed CLI (runs with this entry's command/entrypoint). */
101
+ probe?: {
102
+ command: string;
103
+ args: string[];
104
+ };
105
+ /** Per-exec timeout ceiling applied to the installed CLI record (default 120s). */
106
+ execTimeoutMs?: number;
107
+ docs?: string;
108
+ }
109
+ export declare function entryPlane(entry: MarketEntry): 'mcp' | 'cli';
110
+ export declare const marketCatalog: MarketEntry[];
111
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/market/catalog.ts"],"names":[],"mappings":"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"}