@desplega.ai/agent-swarm 1.129.0 → 1.131.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.
- package/README.md +2 -2
- package/dist/{actions-kfv2dawe.js → actions-w53mbns9.js} +11 -11
- package/dist/{anthropic-messages-3xgme8my.js → anthropic-messages-rjmd2e7n.js} +5 -5
- package/dist/{app-q8vjk6e8.js → app-m9gwqsqv.js} +8 -8
- package/dist/{artifact-hg4t1nx7.js → artifact-jysj3wrg.js} +2 -2
- package/dist/{assistant-g037r345.js → assistant-bp65m6f3.js} +13 -13
- package/dist/{azure-openai-responses-xa4sh9f6.js → azure-openai-responses-c0yjmbfd.js} +8 -5
- package/dist/{boot-reembed-18pzsrxa.js → boot-reembed-62p0at2k.js} +6 -6
- package/dist/{boot-reembed-wpks2cj8.js → boot-reembed-xmfp6wdh.js} +7 -7
- package/dist/{boot-scrub-logs-n7szd57r.js → boot-scrub-logs-rr8q2dms.js} +5 -5
- package/dist/{claude-adapter-qz4r0ajt.js → claude-adapter-2y47mrkd.js} +9 -9
- package/dist/{cli-mhjnbgb6.js → cli-0rcyq6d9.js} +450 -186
- package/dist/{cli-ttkmehy0.js → cli-2q72qz2s.js} +274 -25
- package/dist/{cli-gztgc3hz.js → cli-2wadx7p2.js} +2 -2
- package/dist/cli-3fj60etf.js +153 -0
- package/dist/{cli-7ecgm5v0.js → cli-3kf51j15.js} +1 -1
- package/dist/{cli-vgexpfsr.js → cli-57khth04.js} +6 -3
- package/dist/{cli-2mbe7vk0.js → cli-5dsbcjjw.js} +1 -1
- package/dist/{cli-etr62zy6.js → cli-5kx36evn.js} +2 -2
- package/dist/{cli-v2tr6amf.js → cli-5n6e5yfn.js} +30 -8
- package/dist/{cli-hx02s9zq.js → cli-5v4rw6yd.js} +2 -2
- package/dist/{cli-v37yr6mf.js → cli-5ze9rv97.js} +4 -4
- package/dist/{cli-ch7t5v7n.js → cli-6map995v.js} +9 -4
- package/dist/{cli-h0457a67.js → cli-70xqj0z3.js} +3 -3
- package/dist/{cli-kk4f9r17.js → cli-72q8m8gk.js} +8 -6
- package/dist/{cli-7padk69a.js → cli-78xwvkhj.js} +2 -2
- package/dist/{cli-dxtxacy7.js → cli-9dr5qzc0.js} +45 -8
- package/dist/{cli-17zxdgsq.js → cli-a40rnf71.js} +6 -6
- package/dist/{cli-t53vnnxz.js → cli-a4jzdpa3.js} +2514 -1055
- package/dist/{cli-w10fkrf1.js → cli-akdvwc9v.js} +354 -115
- package/dist/{cli-1qkk5er0.js → cli-bmze986d.js} +1 -1
- package/dist/{cli-ga12dc1d.js → cli-bqw0mt1n.js} +3 -3
- package/dist/{cli-0sf92efp.js → cli-cdeg08wx.js} +1 -1
- package/dist/{cli-a8ynhkyj.js → cli-cvgjwnh1.js} +17 -15
- package/dist/{cli-9fxg3v5m.js → cli-d2tfkcga.js} +4 -4
- package/dist/{cli-nhcd7x43.js → cli-d3x3x1c9.js} +2 -2
- package/dist/{cli-6nh2qxvh.js → cli-darcwax3.js} +1 -1
- package/dist/{cli-yjbgmysx.js → cli-e7ckcg4v.js} +12 -12
- package/dist/{cli-4n2gcjpd.js → cli-efxfnq6q.js} +4 -3
- package/dist/{cli-z9xqqhfk.js → cli-er3a4bb0.js} +1 -1
- package/dist/{cli-xg2eezyv.js → cli-f1am9szv.js} +1 -1
- package/dist/{cli-xy4cwsm9.js → cli-fywms69x.js} +1 -1
- package/dist/{cli-33jj76y8.js → cli-g6b8x1h8.js} +1 -1
- package/dist/{cli-epsvdckx.js → cli-gm9cbhbq.js} +20 -10
- package/dist/{cli-rkndnn90.js → cli-k9qkf1hw.js} +6 -4
- package/dist/{cli-zejvt395.js → cli-kh3ba2zf.js} +1 -1
- package/dist/{cli-gb25p1h2.js → cli-nm5gtp1x.js} +2 -2
- package/dist/{cli-akxnpx17.js → cli-pm6xbh84.js} +1829 -1629
- package/dist/{cli-2k0ztbfp.js → cli-psh3c4va.js} +1 -1
- package/dist/{cli-39vgrsep.js → cli-qv61hp37.js} +2 -2
- package/dist/{cli-hv2fndhm.js → cli-r6kqqbj0.js} +6 -4
- package/dist/{cli-1y1cm570.js → cli-rzbpmxdr.js} +1 -1
- package/dist/{cli-mmrk00vp.js → cli-t1xze5qh.js} +1 -1
- package/dist/{cli-g252a9ky.js → cli-t55yw3a1.js} +2 -2
- package/dist/{cli-7bz8dzqa.js → cli-t76vw5db.js} +1184 -1522
- package/dist/{cli-4n4mdv21.js → cli-xpxde7rm.js} +7 -3
- package/dist/{cli-fpaa5k2q.js → cli-yw8vghx2.js} +54 -18
- package/dist/cli-zsspvvm2.js +490 -0
- package/dist/cli.js +27 -25
- package/dist/{codex-adapter-7v6t7ff6.js → codex-adapter-d24q75wk.js} +7 -7
- package/dist/{codex-hook-amndawyb.js → codex-hook-hq54t9ft.js} +2 -2
- package/dist/{codex-session-runner-e7j4khe2.js → codex-session-runner-g50vcsex.js} +7 -7
- package/dist/{commands-ex0k5tbf.js → commands-c3nrc5hg.js} +5 -5
- package/dist/{db-df7jatfc.js → db-nt7fg3tw.js} +5 -5
- package/dist/{google-generative-ai-y42hnw9p.js → google-generative-ai-hysrd8qx.js} +7 -5
- package/dist/{google-vertex-4sg66gb6.js → google-vertex-p5arrga0.js} +7 -5
- package/dist/{handlers-1j2cfqt2.js → handlers-fkr6swat.js} +13 -13
- package/dist/{hook-nx9a0mj3.js → hook-77wpvnjc.js} +7 -7
- package/dist/{hook-w6yaf6sy.js → hook-g019yehy.js} +8 -8
- package/dist/{http-4tz5h8wg.js → http-jewj0syk.js} +2993 -716
- package/dist/{index-0bpkzb09.js → index-070v4eyb.js} +3 -3
- package/dist/{index-0s67qv7h.js → index-6gm5he8h.js} +11 -11
- package/dist/{index-35gtv6gj.js → index-7n2xpbd4.js} +310 -40
- package/dist/{index-ker3gccb.js → index-9znhar3x.js} +4 -4
- package/dist/{index-5n2c8yay.js → index-hase6zbe.js} +2 -2
- package/dist/{index-kcf3tm9h.js → index-hfvggd0z.js} +12 -12
- package/dist/{index-7c0jqna0.js → index-hp1kdbjj.js} +13 -13
- package/dist/{keepalive-3j4a9168.js → keepalive-j0fjvqfd.js} +7 -7
- package/dist/{lead-6kpevymb.js → lead-1n8x30xe.js} +33 -33
- package/dist/{maintenance-m1k82ean.js → maintenance-gvev11sa.js} +7 -7
- package/dist/{mistral-conversations-bjkdfb6z.js → mistral-conversations-81fwav0j.js} +6 -6
- package/dist/{oauth-refresh-sweep-881k8e4q.js → oauth-refresh-sweep-s9ecsvh0.js} +6 -6
- package/dist/{onboard-c0ykffjn.js → onboard-pvm5b38w.js} +2 -2
- package/dist/{openai-codex-responses-xetseqvt.js → openai-codex-responses-5g27pd6f.js} +43 -23
- package/dist/{openai-completions-5r2g5axa.js → openai-completions-3vkmfz2a.js} +55 -11
- package/dist/{openai-responses-ce67hd23.js → openai-responses-dg4t7j7a.js} +8 -5
- package/dist/{openrouter-images-pzfp22jb.js → openrouter-images-g3gm8931.js} +1 -1
- package/dist/{otel-impl-sqagjerv.js → otel-impl-p6jvgd9c.js} +6 -4
- package/dist/{otel-3mp81ppd.js → otel-nqa12wf3.js} +2 -2
- package/dist/{pi-mono-adapter-k584k16g.js → pi-mono-adapter-t091s27g.js} +17117 -7517
- package/dist/{pricing-refresh-y82whbf9.js → pricing-refresh-k49rcyed.js} +7 -7
- package/dist/{rbac-roles-nvkqmzyd.js → rbac-roles-30pspvy7.js} +7 -7
- package/dist/{rbac-roles-4ht8gegc.js → rbac-roles-cr80g96t.js} +6 -6
- package/dist/{render-v2-wvqdgvvp.js → render-v2-xm457ng1.js} +8 -8
- package/dist/{seed-pricing-fy3rxhde.js → seed-pricing-yhpv35fr.js} +6 -6
- package/dist/{setup-ak5cnc6f.js → setup-nytnmwwr.js} +2 -2
- package/dist/{worker-d8769q8a.js → worker-msytr2cw.js} +33 -33
- package/openapi.json +34039 -11036
- package/package.json +8 -6
- package/src/apps/definition.ts +368 -26
- package/src/apps/row-store.ts +66 -10
- package/src/apps/schema-migrate.ts +95 -1
- package/src/apps/store.ts +13 -4
- package/src/apps/sync-run-as.ts +18 -0
- package/src/apps/sync.ts +934 -0
- package/src/apps/version.ts +16 -2
- package/src/assets/key.ts +8 -1
- package/src/be/asset-key-audit.ts +3 -1
- package/src/be/db-queries/mcp-oauth.ts +297 -24
- package/src/be/db.ts +42 -1
- package/src/be/migrations/129_asset_keys_apps_scripts.sql +161 -0
- package/src/be/scripts/db.ts +5 -2
- package/src/be/scripts/typecheck.ts +1 -0
- package/src/be/seed-scripts/catalog/app-sync-run.ts +32 -0
- package/src/be/seed-scripts/catalog/github-issues-pull.ts +102 -0
- package/src/be/seed-scripts/index.ts +18 -0
- package/src/be/seed-skills/index.ts +7 -0
- package/src/http/active-sessions.ts +26 -18
- package/src/http/agents.ts +94 -27
- package/src/http/api-keys.ts +91 -17
- package/src/http/approval-requests.ts +87 -10
- package/src/http/apps.ts +361 -53
- package/src/http/assets.ts +165 -31
- package/src/http/budgets.ts +7 -5
- package/src/http/codex-oauth-keep-warm.ts +21 -3
- package/src/http/config.ts +46 -16
- package/src/http/context.ts +33 -6
- package/src/http/ecosystem.ts +20 -6
- package/src/http/events.ts +24 -9
- package/src/http/favorites.ts +20 -6
- package/src/http/fs.ts +60 -17
- package/src/http/heartbeat.ts +18 -4
- package/src/http/inbox-state.ts +12 -6
- package/src/http/integrations.ts +25 -5
- package/src/http/kv.ts +36 -15
- package/src/http/mcp-bridge.ts +5 -1
- package/src/http/mcp-oauth.ts +332 -17
- package/src/http/mcp-servers.ts +56 -18
- package/src/http/memory.ts +282 -29
- package/src/http/metrics.ts +80 -17
- package/src/http/oauth-callback.ts +10 -4
- package/src/http/oauth-generic.ts +5 -1
- package/src/http/oauth-locks.ts +6 -3
- package/src/http/openapi.ts +57 -9
- package/src/http/page-proxy.ts +25 -5
- package/src/http/pages-public.ts +37 -20
- package/src/http/pages.ts +93 -28
- package/src/http/poll.ts +89 -5
- package/src/http/pricing.ts +9 -6
- package/src/http/prompt-templates.ts +85 -21
- package/src/http/route-def.ts +67 -4
- package/src/http/schedules.ts +63 -14
- package/src/http/script-connection-proxy.ts +30 -4
- package/src/http/script-connections.ts +393 -43
- package/src/http/script-runs.ts +73 -19
- package/src/http/scripts.ts +257 -39
- package/src/http/session-data.ts +87 -14
- package/src/http/sessions.ts +80 -5
- package/src/http/skills.ts +115 -35
- package/src/http/stats.ts +94 -13
- package/src/http/task-templates.ts +6 -4
- package/src/http/tasks.ts +230 -61
- package/src/http/trackers/jira.ts +90 -30
- package/src/http/trackers/linear.ts +46 -12
- package/src/http/users.ts +162 -25
- package/src/http/utils.ts +12 -2
- package/src/http/webhooks.ts +30 -16
- package/src/http/workflow-events.ts +18 -5
- package/src/http/workflows.ts +128 -39
- package/src/http/x.ts +37 -6
- package/src/oauth/ensure-mcp-token.ts +16 -1
- package/src/oauth/mcp-wrapper.ts +281 -26
- package/src/providers/pi-mono-adapter.ts +1 -1
- package/src/scripts-runtime/credential-broker/README.md +1 -1
- package/src/scripts-runtime/credential-broker/fetch-patch.ts +12 -2
- package/src/scripts-runtime/sdk-allowlist.ts +1 -0
- package/src/scripts-runtime/stdlib/fetch.ts +6 -0
- package/src/scripts-runtime/types/stdlib.d.ts +1 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +1 -0
- package/src/server.ts +2 -0
- package/src/tests/apps-rbac.test.ts +110 -0
- package/src/tests/apps-spike2.test.ts +4 -1
- package/src/tests/apps-sync-engine.test.ts +2540 -0
- package/src/tests/apps-sync.test.ts +1627 -0
- package/src/tests/asset-key-api.test.ts +48 -2
- package/src/tests/asset-key-invariants.test.ts +92 -0
- package/src/tests/asset-key-migration.test.ts +174 -8
- package/src/tests/asset-key-normalization.test.ts +2 -0
- package/src/tests/credential-broker.test.ts +27 -2
- package/src/tests/mcp-oauth-dcr-reuse.test.ts +743 -0
- package/src/tests/mcp-oauth-ensure-token.test.ts +45 -0
- package/src/tests/mcp-oauth-manual-client.test.ts +135 -2
- package/src/tests/mcp-oauth-queries.test.ts +153 -0
- package/src/tests/mcp-oauth-wrapper.test.ts +432 -0
- package/src/tests/memory-http-recall-gating.test.ts +2 -0
- package/src/tests/openapi-response-contract.test.ts +138 -0
- package/src/tests/rbac-admission-e2e.test.ts +68 -0
- package/src/tests/script-connections.test.ts +3 -0
- package/src/tests/scripts-runtime-fetch.test.ts +121 -0
- package/src/tests/scripts-runtime-secret-egress.test.ts +4 -2
- package/src/tests/seed-scripts.test.ts +2 -2
- package/src/tests/swarm-tool-result-gate.test.ts +32 -0
- package/src/tests/task-working-dir.test.ts +8 -4
- package/src/tests/whoami-route.test.ts +127 -0
- package/src/tests/workflow-engine-v2.test.ts +80 -7
- package/src/tests/workflow-swarm-script.test.ts +104 -0
- package/src/tools/app-get.ts +10 -2
- package/src/tools/app-rollback.ts +1 -0
- package/src/tools/app-sync.ts +112 -0
- package/src/tools/script-common.ts +20 -0
- package/src/tools/tool-config.ts +2 -1
- package/src/tools/utils.ts +11 -0
- package/src/tools/workflows/create-workflow.ts +4 -1
- package/src/types.ts +1394 -1206
- package/src/utils/template.ts +8 -1
- package/src/utils/zod-openapi.ts +11 -0
- package/src/workflows/engine.ts +27 -4
- package/src/workflows/executors/swarm-script.ts +28 -0
- package/src/workflows/retry-poller.ts +19 -2
- package/templates/skills/apps/content.md +94 -5
- package/templates/skills/asset-namespaces/content.md +2 -2
- package/templates/skills/scheduled-task-resilience/SKILL.md +102 -0
- package/templates/skills/scheduled-task-resilience/config.json +14 -0
- package/templates/skills/scheduled-task-resilience/content.md +97 -0
- package/dist/cli-7wmybrt5.js +0 -115
- package/dist/cli-d91pvmq1.js +0 -14
package/src/http/mcp-servers.ts
CHANGED
|
@@ -23,9 +23,23 @@ import {
|
|
|
23
23
|
type RbacPrincipal,
|
|
24
24
|
type RbacResource,
|
|
25
25
|
} from "../rbac";
|
|
26
|
+
import { AgentMcpServerSchema, McpServerSchema, McpServerWithInstallInfoSchema } from "../types";
|
|
26
27
|
import { getRequestAuth } from "../utils/request-auth-context";
|
|
27
28
|
import { route } from "./route-def";
|
|
28
|
-
import {
|
|
29
|
+
import { jsonError } from "./utils";
|
|
30
|
+
|
|
31
|
+
// ─── Response Schemas ────────────────────────────────────────────────────────
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* `getAgentMcpServers` response shape. When `?resolveSecrets=true`, each
|
|
35
|
+
* server is additionally decorated with resolved env/header values and any
|
|
36
|
+
* OAuth resolution error — see the `resolveSecrets` branch in the handler.
|
|
37
|
+
*/
|
|
38
|
+
const McpServerWithOptionalSecretsSchema = McpServerWithInstallInfoSchema.extend({
|
|
39
|
+
resolvedEnv: z.record(z.string(), z.string()).optional(),
|
|
40
|
+
resolvedHeaders: z.record(z.string(), z.string()).optional(),
|
|
41
|
+
authError: z.string().nullable().optional(),
|
|
42
|
+
});
|
|
29
43
|
|
|
30
44
|
// ─── Route Definitions ───────────────────────────────────────────────────────
|
|
31
45
|
|
|
@@ -44,7 +58,10 @@ const listMcpServersRoute = route({
|
|
|
44
58
|
search: z.string().optional(),
|
|
45
59
|
}),
|
|
46
60
|
responses: {
|
|
47
|
-
200: {
|
|
61
|
+
200: {
|
|
62
|
+
description: "MCP server list",
|
|
63
|
+
schema: z.object({ servers: z.array(McpServerSchema), total: z.number() }),
|
|
64
|
+
},
|
|
48
65
|
},
|
|
49
66
|
});
|
|
50
67
|
|
|
@@ -57,7 +74,7 @@ const getMcpServerRoute = route({
|
|
|
57
74
|
auth: { apiKey: true },
|
|
58
75
|
params: z.object({ id: z.string() }),
|
|
59
76
|
responses: {
|
|
60
|
-
200: { description: "MCP server details" },
|
|
77
|
+
200: { description: "MCP server details", schema: McpServerSchema },
|
|
61
78
|
404: { description: "MCP server not found" },
|
|
62
79
|
},
|
|
63
80
|
});
|
|
@@ -83,7 +100,7 @@ const createMcpServerRoute = route({
|
|
|
83
100
|
headerConfigKeys: z.string().optional(),
|
|
84
101
|
}),
|
|
85
102
|
responses: {
|
|
86
|
-
201: { description: "MCP server created" },
|
|
103
|
+
201: { description: "MCP server created", schema: z.object({ server: McpServerSchema }) },
|
|
87
104
|
400: { description: "Validation error" },
|
|
88
105
|
},
|
|
89
106
|
rbac: { permission: "mcp-server.create.swarm" },
|
|
@@ -99,7 +116,7 @@ const updateMcpServerRoute = route({
|
|
|
99
116
|
params: z.object({ id: z.string() }),
|
|
100
117
|
body: z.record(z.string(), z.unknown()),
|
|
101
118
|
responses: {
|
|
102
|
-
200: { description: "MCP server updated" },
|
|
119
|
+
200: { description: "MCP server updated", schema: z.object({ server: McpServerSchema }) },
|
|
103
120
|
404: { description: "MCP server not found" },
|
|
104
121
|
},
|
|
105
122
|
rbac: { permission: "mcp-server.update.any" },
|
|
@@ -114,7 +131,13 @@ const deleteMcpServerRoute = route({
|
|
|
114
131
|
auth: { apiKey: true },
|
|
115
132
|
params: z.object({ id: z.string() }),
|
|
116
133
|
responses: {
|
|
117
|
-
200: {
|
|
134
|
+
200: {
|
|
135
|
+
description: "MCP server deleted",
|
|
136
|
+
schema: z.object({
|
|
137
|
+
success: z.boolean(),
|
|
138
|
+
deletedScriptConnectionCount: z.number(),
|
|
139
|
+
}),
|
|
140
|
+
},
|
|
118
141
|
404: { description: "MCP server not found" },
|
|
119
142
|
},
|
|
120
143
|
rbac: { permission: "mcp-server.delete.any" },
|
|
@@ -132,7 +155,10 @@ const installMcpServerRoute = route({
|
|
|
132
155
|
agentId: z.string(),
|
|
133
156
|
}),
|
|
134
157
|
responses: {
|
|
135
|
-
200: {
|
|
158
|
+
200: {
|
|
159
|
+
description: "MCP server installed",
|
|
160
|
+
schema: z.object({ agentMcpServer: AgentMcpServerSchema }),
|
|
161
|
+
},
|
|
136
162
|
404: { description: "MCP server not found" },
|
|
137
163
|
},
|
|
138
164
|
rbac: { permission: "mcp-server.install.any" },
|
|
@@ -147,7 +173,10 @@ const uninstallMcpServerRoute = route({
|
|
|
147
173
|
auth: { apiKey: true },
|
|
148
174
|
params: z.object({ id: z.string(), agentId: z.string() }),
|
|
149
175
|
responses: {
|
|
150
|
-
200: {
|
|
176
|
+
200: {
|
|
177
|
+
description: "MCP server uninstalled",
|
|
178
|
+
schema: z.object({ success: z.boolean() }),
|
|
179
|
+
},
|
|
151
180
|
},
|
|
152
181
|
rbac: { permission: "mcp-server.uninstall.any" },
|
|
153
182
|
});
|
|
@@ -164,7 +193,13 @@ const getAgentMcpServersRoute = route({
|
|
|
164
193
|
resolveSecrets: z.string().optional(),
|
|
165
194
|
}),
|
|
166
195
|
responses: {
|
|
167
|
-
200: {
|
|
196
|
+
200: {
|
|
197
|
+
description: "Agent MCP servers list",
|
|
198
|
+
schema: z.object({
|
|
199
|
+
servers: z.array(McpServerWithOptionalSecretsSchema),
|
|
200
|
+
total: z.number(),
|
|
201
|
+
}),
|
|
202
|
+
},
|
|
168
203
|
},
|
|
169
204
|
});
|
|
170
205
|
|
|
@@ -356,9 +391,12 @@ export async function handleMcpServers(
|
|
|
356
391
|
}),
|
|
357
392
|
);
|
|
358
393
|
|
|
359
|
-
|
|
394
|
+
getAgentMcpServersRoute.respond(res, 200, {
|
|
395
|
+
servers: serversWithSecrets,
|
|
396
|
+
total: serversWithSecrets.length,
|
|
397
|
+
});
|
|
360
398
|
} else {
|
|
361
|
-
|
|
399
|
+
getAgentMcpServersRoute.respond(res, 200, { servers, total: servers.length });
|
|
362
400
|
}
|
|
363
401
|
return true;
|
|
364
402
|
}
|
|
@@ -376,7 +414,7 @@ export async function handleMcpServers(
|
|
|
376
414
|
|
|
377
415
|
try {
|
|
378
416
|
const agentMcpServer = installMcpServer(parsed.body.agentId, parsed.params.id);
|
|
379
|
-
|
|
417
|
+
installMcpServerRoute.respond(res, 200, { agentMcpServer });
|
|
380
418
|
} catch (err) {
|
|
381
419
|
jsonError(res, err instanceof Error ? err.message : "Install failed", 400);
|
|
382
420
|
}
|
|
@@ -389,7 +427,7 @@ export async function handleMcpServers(
|
|
|
389
427
|
if (!parsed) return true;
|
|
390
428
|
|
|
391
429
|
const removed = uninstallMcpServer(parsed.params.agentId, parsed.params.id);
|
|
392
|
-
|
|
430
|
+
uninstallMcpServerRoute.respond(res, 200, { success: removed });
|
|
393
431
|
return true;
|
|
394
432
|
}
|
|
395
433
|
|
|
@@ -406,7 +444,7 @@ export async function handleMcpServers(
|
|
|
406
444
|
search: parsed.query.search,
|
|
407
445
|
});
|
|
408
446
|
|
|
409
|
-
|
|
447
|
+
listMcpServersRoute.respond(res, 200, { servers, total: servers.length });
|
|
410
448
|
return true;
|
|
411
449
|
}
|
|
412
450
|
|
|
@@ -420,7 +458,7 @@ export async function handleMcpServers(
|
|
|
420
458
|
jsonError(res, "MCP server not found", 404);
|
|
421
459
|
return true;
|
|
422
460
|
}
|
|
423
|
-
|
|
461
|
+
getMcpServerRoute.respond(res, 200, server);
|
|
424
462
|
return true;
|
|
425
463
|
}
|
|
426
464
|
|
|
@@ -460,7 +498,7 @@ export async function handleMcpServers(
|
|
|
460
498
|
envConfigKeys: parsed.body.envConfigKeys,
|
|
461
499
|
headerConfigKeys: parsed.body.headerConfigKeys,
|
|
462
500
|
});
|
|
463
|
-
|
|
501
|
+
createMcpServerRoute.respond(res, 201, { server });
|
|
464
502
|
} catch (err) {
|
|
465
503
|
jsonError(res, err instanceof Error ? err.message : "Create failed", 400);
|
|
466
504
|
}
|
|
@@ -519,7 +557,7 @@ export async function handleMcpServers(
|
|
|
519
557
|
jsonError(res, "MCP server not found", 404);
|
|
520
558
|
return true;
|
|
521
559
|
}
|
|
522
|
-
|
|
560
|
+
updateMcpServerRoute.respond(res, 200, { server });
|
|
523
561
|
return true;
|
|
524
562
|
}
|
|
525
563
|
|
|
@@ -533,7 +571,7 @@ export async function handleMcpServers(
|
|
|
533
571
|
jsonError(res, "MCP server not found", 404);
|
|
534
572
|
return true;
|
|
535
573
|
}
|
|
536
|
-
|
|
574
|
+
deleteMcpServerRoute.respond(res, 200, {
|
|
537
575
|
success: true,
|
|
538
576
|
deletedScriptConnectionCount: result.deletedScriptConnectionCount,
|
|
539
577
|
});
|