@executor-js/plugin-mcp 0.1.0 → 0.2.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.
- package/dist/AddMcpSource-VM3HY26S.js +762 -0
- package/dist/AddMcpSource-VM3HY26S.js.map +1 -0
- package/dist/EditMcpSource-WELWGRJG.js +259 -0
- package/dist/EditMcpSource-WELWGRJG.js.map +1 -0
- package/dist/McpSourceSummary-7TDQXLT5.js +85 -0
- package/dist/McpSourceSummary-7TDQXLT5.js.map +1 -0
- package/dist/api/group.d.ts +109 -17
- package/dist/api/index.d.ts +391 -0
- package/dist/chunk-2ETJ6LQH.js +239 -0
- package/dist/chunk-2ETJ6LQH.js.map +1 -0
- package/dist/chunk-OOOH3IO4.js +2194 -0
- package/dist/chunk-OOOH3IO4.js.map +1 -0
- package/dist/chunk-SKSXXFOA.js +104 -0
- package/dist/chunk-SKSXXFOA.js.map +1 -0
- package/dist/chunk-Z4CRPOLI.js +186 -0
- package/dist/chunk-Z4CRPOLI.js.map +1 -0
- package/dist/chunk-ZIRGIRGP.js +115 -0
- package/dist/chunk-ZIRGIRGP.js.map +1 -0
- package/dist/client.js +51 -0
- package/dist/client.js.map +1 -0
- package/dist/core.js +26 -2
- package/dist/index.js +2 -1
- package/dist/react/McpRemoteSourceFields.d.ts +18 -0
- package/dist/react/McpSourceSummary.d.ts +5 -0
- package/dist/react/atoms.d.ts +206 -6
- package/dist/react/client.d.ts +113 -16
- package/dist/react/index.d.ts +1 -1
- package/dist/react/plugin-client.d.ts +9 -2
- package/dist/sdk/binding-store.d.ts +106 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/invoke.d.ts +2 -0
- package/dist/sdk/plugin.d.ts +142 -114
- package/dist/sdk/probe-shape-real-servers.live.test.d.ts +1 -0
- package/dist/sdk/probe-shape.d.ts +17 -3
- package/dist/sdk/stored-source.d.ts +9 -6
- package/dist/sdk/types.d.ts +138 -13
- package/dist/{stdio-connector-KNHLETKM.js → stdio-connector-AA5S6UUJ.js} +1 -1
- package/dist/{stdio-connector-KNHLETKM.js.map → stdio-connector-AA5S6UUJ.js.map} +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/{sdk/test-utils.d.ts → testing/server.d.ts} +0 -6
- package/dist/testing.js +51 -0
- package/dist/testing.js.map +1 -0
- package/package.json +17 -4
- package/dist/chunk-C2GNZGFJ.js +0 -1622
- package/dist/chunk-C2GNZGFJ.js.map +0 -1
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import {
|
|
2
|
+
McpConnectionAuthInput,
|
|
3
|
+
McpConnectionError,
|
|
4
|
+
McpCredentialInput,
|
|
5
|
+
McpSourceBindingInputSchema,
|
|
6
|
+
McpSourceBindingRef,
|
|
7
|
+
McpStoredSourceData,
|
|
8
|
+
McpToolDiscoveryError
|
|
9
|
+
} from "./chunk-Z4CRPOLI.js";
|
|
10
|
+
|
|
11
|
+
// src/react/atoms.ts
|
|
12
|
+
import * as Atom from "effect/unstable/reactivity/Atom";
|
|
13
|
+
import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
|
|
14
|
+
import { sourcesOptimisticAtom } from "@executor-js/react/api/atoms";
|
|
15
|
+
import { ReactivityKey } from "@executor-js/react/api/reactivity-keys";
|
|
16
|
+
|
|
17
|
+
// src/react/client.ts
|
|
18
|
+
import { createPluginAtomClient } from "@executor-js/sdk/client";
|
|
19
|
+
import { getBaseUrl } from "@executor-js/react/api/base-url";
|
|
20
|
+
|
|
21
|
+
// src/api/group.ts
|
|
22
|
+
import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
|
|
23
|
+
import { Schema as Schema2 } from "effect";
|
|
24
|
+
import { InternalError, ScopeId as ScopeId2, SecretBackedMap } from "@executor-js/sdk/core";
|
|
25
|
+
|
|
26
|
+
// src/sdk/stored-source.ts
|
|
27
|
+
import { Schema } from "effect";
|
|
28
|
+
import { ScopeId } from "@executor-js/sdk/core";
|
|
29
|
+
var McpStoredSourceSchema = class extends Schema.Class("McpStoredSource")({
|
|
30
|
+
namespace: Schema.String,
|
|
31
|
+
scope: ScopeId,
|
|
32
|
+
name: Schema.String,
|
|
33
|
+
config: McpStoredSourceData
|
|
34
|
+
}) {
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// src/api/group.ts
|
|
38
|
+
var ScopeParams = { scopeId: ScopeId2 };
|
|
39
|
+
var SourceParams = { scopeId: ScopeId2, namespace: Schema2.String };
|
|
40
|
+
var SourceBindingParams = {
|
|
41
|
+
scopeId: ScopeId2,
|
|
42
|
+
namespace: Schema2.String,
|
|
43
|
+
sourceScopeId: ScopeId2
|
|
44
|
+
};
|
|
45
|
+
var AuthPayload = McpConnectionAuthInput;
|
|
46
|
+
var StringMap = Schema2.Record(Schema2.String, Schema2.String);
|
|
47
|
+
var AddRemoteSourcePayload = Schema2.Struct({
|
|
48
|
+
targetScope: ScopeId2,
|
|
49
|
+
transport: Schema2.Literal("remote"),
|
|
50
|
+
name: Schema2.String,
|
|
51
|
+
endpoint: Schema2.String,
|
|
52
|
+
remoteTransport: Schema2.optional(Schema2.Literals(["streamable-http", "sse", "auto"])),
|
|
53
|
+
namespace: Schema2.optional(Schema2.String),
|
|
54
|
+
queryParams: Schema2.optional(Schema2.Record(Schema2.String, McpCredentialInput)),
|
|
55
|
+
headers: Schema2.optional(Schema2.Record(Schema2.String, McpCredentialInput)),
|
|
56
|
+
auth: Schema2.optional(AuthPayload),
|
|
57
|
+
credentialTargetScope: Schema2.optional(ScopeId2)
|
|
58
|
+
});
|
|
59
|
+
var AddStdioSourcePayload = Schema2.Struct({
|
|
60
|
+
targetScope: ScopeId2,
|
|
61
|
+
transport: Schema2.Literal("stdio"),
|
|
62
|
+
name: Schema2.String,
|
|
63
|
+
command: Schema2.String,
|
|
64
|
+
args: Schema2.optional(Schema2.Array(Schema2.String)),
|
|
65
|
+
env: Schema2.optional(StringMap),
|
|
66
|
+
cwd: Schema2.optional(Schema2.String),
|
|
67
|
+
namespace: Schema2.optional(Schema2.String)
|
|
68
|
+
});
|
|
69
|
+
var AddSourcePayload = Schema2.Union([AddRemoteSourcePayload, AddStdioSourcePayload]);
|
|
70
|
+
var UpdateSourcePayload = Schema2.Struct({
|
|
71
|
+
sourceScope: ScopeId2,
|
|
72
|
+
name: Schema2.optional(Schema2.String),
|
|
73
|
+
endpoint: Schema2.optional(Schema2.String),
|
|
74
|
+
headers: Schema2.optional(Schema2.Record(Schema2.String, McpCredentialInput)),
|
|
75
|
+
queryParams: Schema2.optional(Schema2.Record(Schema2.String, McpCredentialInput)),
|
|
76
|
+
credentialTargetScope: Schema2.optional(ScopeId2),
|
|
77
|
+
auth: Schema2.optional(AuthPayload)
|
|
78
|
+
});
|
|
79
|
+
var UpdateSourceResponse = Schema2.Struct({
|
|
80
|
+
updated: Schema2.Boolean
|
|
81
|
+
});
|
|
82
|
+
var ProbeEndpointPayload = Schema2.Struct({
|
|
83
|
+
endpoint: Schema2.String,
|
|
84
|
+
headers: Schema2.optional(SecretBackedMap),
|
|
85
|
+
queryParams: Schema2.optional(SecretBackedMap)
|
|
86
|
+
});
|
|
87
|
+
var ProbeEndpointResponse = Schema2.Struct({
|
|
88
|
+
connected: Schema2.Boolean,
|
|
89
|
+
requiresOAuth: Schema2.Boolean,
|
|
90
|
+
supportsDynamicRegistration: Schema2.Boolean,
|
|
91
|
+
name: Schema2.String,
|
|
92
|
+
namespace: Schema2.String,
|
|
93
|
+
toolCount: Schema2.NullOr(Schema2.Number),
|
|
94
|
+
serverName: Schema2.NullOr(Schema2.String)
|
|
95
|
+
});
|
|
96
|
+
var NamespacePayload = Schema2.Struct({
|
|
97
|
+
namespace: Schema2.String
|
|
98
|
+
});
|
|
99
|
+
var RemoveBindingPayload = Schema2.Struct({
|
|
100
|
+
sourceId: Schema2.String,
|
|
101
|
+
sourceScope: ScopeId2,
|
|
102
|
+
slot: Schema2.String,
|
|
103
|
+
scope: ScopeId2
|
|
104
|
+
});
|
|
105
|
+
var AddSourceResponse = Schema2.Struct({
|
|
106
|
+
toolCount: Schema2.Number,
|
|
107
|
+
namespace: Schema2.String
|
|
108
|
+
});
|
|
109
|
+
var RefreshSourceResponse = Schema2.Struct({
|
|
110
|
+
toolCount: Schema2.Number
|
|
111
|
+
});
|
|
112
|
+
var RemoveSourceResponse = Schema2.Struct({
|
|
113
|
+
removed: Schema2.Boolean
|
|
114
|
+
});
|
|
115
|
+
var McpGroup = HttpApiGroup.make("mcp").add(
|
|
116
|
+
HttpApiEndpoint.post("probeEndpoint", "/scopes/:scopeId/mcp/probe", {
|
|
117
|
+
params: ScopeParams,
|
|
118
|
+
payload: ProbeEndpointPayload,
|
|
119
|
+
success: ProbeEndpointResponse,
|
|
120
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
121
|
+
})
|
|
122
|
+
).add(
|
|
123
|
+
HttpApiEndpoint.post("addSource", "/scopes/:scopeId/mcp/sources", {
|
|
124
|
+
params: ScopeParams,
|
|
125
|
+
payload: AddSourcePayload,
|
|
126
|
+
success: AddSourceResponse,
|
|
127
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
128
|
+
})
|
|
129
|
+
).add(
|
|
130
|
+
HttpApiEndpoint.post("removeSource", "/scopes/:scopeId/mcp/sources/remove", {
|
|
131
|
+
params: ScopeParams,
|
|
132
|
+
payload: NamespacePayload,
|
|
133
|
+
success: RemoveSourceResponse,
|
|
134
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
135
|
+
})
|
|
136
|
+
).add(
|
|
137
|
+
HttpApiEndpoint.post("refreshSource", "/scopes/:scopeId/mcp/sources/refresh", {
|
|
138
|
+
params: ScopeParams,
|
|
139
|
+
payload: NamespacePayload,
|
|
140
|
+
success: RefreshSourceResponse,
|
|
141
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
142
|
+
})
|
|
143
|
+
).add(
|
|
144
|
+
HttpApiEndpoint.get("getSource", "/scopes/:scopeId/mcp/sources/:namespace", {
|
|
145
|
+
params: SourceParams,
|
|
146
|
+
success: Schema2.NullOr(McpStoredSourceSchema),
|
|
147
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
148
|
+
})
|
|
149
|
+
).add(
|
|
150
|
+
HttpApiEndpoint.patch("updateSource", "/scopes/:scopeId/mcp/sources/:namespace", {
|
|
151
|
+
params: SourceParams,
|
|
152
|
+
payload: UpdateSourcePayload,
|
|
153
|
+
success: UpdateSourceResponse,
|
|
154
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
155
|
+
})
|
|
156
|
+
).add(
|
|
157
|
+
HttpApiEndpoint.get(
|
|
158
|
+
"listSourceBindings",
|
|
159
|
+
"/scopes/:scopeId/mcp/sources/:namespace/base/:sourceScopeId/bindings",
|
|
160
|
+
{
|
|
161
|
+
params: SourceBindingParams,
|
|
162
|
+
success: Schema2.Array(McpSourceBindingRef),
|
|
163
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
).add(
|
|
167
|
+
HttpApiEndpoint.post("setSourceBinding", "/scopes/:scopeId/mcp/source-bindings", {
|
|
168
|
+
params: ScopeParams,
|
|
169
|
+
payload: McpSourceBindingInputSchema,
|
|
170
|
+
success: McpSourceBindingRef,
|
|
171
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
172
|
+
})
|
|
173
|
+
).add(
|
|
174
|
+
HttpApiEndpoint.post("removeSourceBinding", "/scopes/:scopeId/mcp/source-bindings/remove", {
|
|
175
|
+
params: ScopeParams,
|
|
176
|
+
payload: RemoveBindingPayload,
|
|
177
|
+
success: Schema2.Struct({ removed: Schema2.Boolean }),
|
|
178
|
+
error: [InternalError, McpConnectionError, McpToolDiscoveryError]
|
|
179
|
+
})
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
// src/react/client.ts
|
|
183
|
+
var McpClient = createPluginAtomClient(McpGroup, {
|
|
184
|
+
baseUrl: getBaseUrl
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// src/react/atoms.ts
|
|
188
|
+
var mcpSourceAtom = (scopeId, namespace) => McpClient.query("mcp", "getSource", {
|
|
189
|
+
params: { scopeId, namespace },
|
|
190
|
+
timeToLive: "15 seconds",
|
|
191
|
+
reactivityKeys: [ReactivityKey.sources, ReactivityKey.tools]
|
|
192
|
+
});
|
|
193
|
+
var mcpSourceBindingsAtom = (scopeId, namespace, sourceScopeId) => McpClient.query("mcp", "listSourceBindings", {
|
|
194
|
+
params: { scopeId, namespace, sourceScopeId },
|
|
195
|
+
timeToLive: "15 seconds",
|
|
196
|
+
reactivityKeys: [ReactivityKey.sources, ReactivityKey.secrets, ReactivityKey.connections]
|
|
197
|
+
});
|
|
198
|
+
var probeMcpEndpoint = McpClient.mutation("mcp", "probeEndpoint");
|
|
199
|
+
var addMcpSource = McpClient.mutation("mcp", "addSource");
|
|
200
|
+
var addMcpSourceOptimistic = Atom.family(
|
|
201
|
+
(scopeId) => sourcesOptimisticAtom(scopeId).pipe(
|
|
202
|
+
Atom.optimisticFn({
|
|
203
|
+
reducer: (current, arg) => AsyncResult.map(current, (rows) => {
|
|
204
|
+
const id = arg.payload.namespace ?? `pending-${Math.random().toString(36).slice(2)}`;
|
|
205
|
+
const source = {
|
|
206
|
+
id,
|
|
207
|
+
scopeId: arg.payload.targetScope,
|
|
208
|
+
kind: "mcp",
|
|
209
|
+
pluginId: "mcp",
|
|
210
|
+
name: arg.payload.name ?? id,
|
|
211
|
+
...arg.payload.transport === "remote" ? { url: arg.payload.endpoint } : {},
|
|
212
|
+
canRemove: false,
|
|
213
|
+
canRefresh: false,
|
|
214
|
+
canEdit: false,
|
|
215
|
+
runtime: false
|
|
216
|
+
};
|
|
217
|
+
return [source, ...rows.filter((row) => row.id !== id)].sort(
|
|
218
|
+
(a, b) => a.name.localeCompare(b.name)
|
|
219
|
+
);
|
|
220
|
+
}),
|
|
221
|
+
fn: addMcpSource
|
|
222
|
+
})
|
|
223
|
+
)
|
|
224
|
+
);
|
|
225
|
+
var removeMcpSource = McpClient.mutation("mcp", "removeSource");
|
|
226
|
+
var refreshMcpSource = McpClient.mutation("mcp", "refreshSource");
|
|
227
|
+
var updateMcpSource = McpClient.mutation("mcp", "updateSource");
|
|
228
|
+
var setMcpSourceBinding = McpClient.mutation("mcp", "setSourceBinding");
|
|
229
|
+
var removeMcpSourceBinding = McpClient.mutation("mcp", "removeSourceBinding");
|
|
230
|
+
|
|
231
|
+
export {
|
|
232
|
+
mcpSourceAtom,
|
|
233
|
+
mcpSourceBindingsAtom,
|
|
234
|
+
probeMcpEndpoint,
|
|
235
|
+
addMcpSourceOptimistic,
|
|
236
|
+
updateMcpSource,
|
|
237
|
+
setMcpSourceBinding
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=chunk-2ETJ6LQH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/atoms.ts","../src/react/client.ts","../src/api/group.ts","../src/sdk/stored-source.ts"],"sourcesContent":["import type { ScopeId } from \"@executor-js/sdk/core\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\";\nimport { sourcesOptimisticAtom } from \"@executor-js/react/api/atoms\";\nimport { ReactivityKey } from \"@executor-js/react/api/reactivity-keys\";\nimport { McpClient } from \"./client\";\n\n// ---------------------------------------------------------------------------\n// Query atoms\n// ---------------------------------------------------------------------------\n\nexport const mcpSourceAtom = (scopeId: ScopeId, namespace: string) =>\n McpClient.query(\"mcp\", \"getSource\", {\n params: { scopeId, namespace },\n timeToLive: \"15 seconds\",\n reactivityKeys: [ReactivityKey.sources, ReactivityKey.tools],\n });\n\nexport const mcpSourceBindingsAtom = (\n scopeId: ScopeId,\n namespace: string,\n sourceScopeId: ScopeId,\n) =>\n McpClient.query(\"mcp\", \"listSourceBindings\", {\n params: { scopeId, namespace, sourceScopeId },\n timeToLive: \"15 seconds\",\n reactivityKeys: [ReactivityKey.sources, ReactivityKey.secrets, ReactivityKey.connections],\n });\n\n// ---------------------------------------------------------------------------\n// Mutation atoms\n// ---------------------------------------------------------------------------\n\nexport const probeMcpEndpoint = McpClient.mutation(\"mcp\", \"probeEndpoint\");\nexport const addMcpSource = McpClient.mutation(\"mcp\", \"addSource\");\nexport const addMcpSourceOptimistic = Atom.family((scopeId: ScopeId) =>\n sourcesOptimisticAtom(scopeId).pipe(\n Atom.optimisticFn({\n reducer: (current, arg) =>\n AsyncResult.map(current, (rows) => {\n const id = arg.payload.namespace ?? `pending-${Math.random().toString(36).slice(2)}`;\n const source = {\n id,\n scopeId: arg.payload.targetScope,\n kind: \"mcp\",\n pluginId: \"mcp\",\n name: arg.payload.name ?? id,\n ...(arg.payload.transport === \"remote\" ? { url: arg.payload.endpoint } : {}),\n canRemove: false,\n canRefresh: false,\n canEdit: false,\n runtime: false,\n };\n return [source, ...rows.filter((row) => row.id !== id)].sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n }),\n fn: addMcpSource,\n }),\n ),\n);\nexport const removeMcpSource = McpClient.mutation(\"mcp\", \"removeSource\");\nexport const refreshMcpSource = McpClient.mutation(\"mcp\", \"refreshSource\");\nexport const updateMcpSource = McpClient.mutation(\"mcp\", \"updateSource\");\nexport const setMcpSourceBinding = McpClient.mutation(\"mcp\", \"setSourceBinding\");\nexport const removeMcpSourceBinding = McpClient.mutation(\"mcp\", \"removeSourceBinding\");\n","import { createPluginAtomClient } from \"@executor-js/sdk/client\";\nimport { getBaseUrl } from \"@executor-js/react/api/base-url\";\nimport { McpGroup } from \"../api/group\";\n\nexport const McpClient = createPluginAtomClient(McpGroup, {\n baseUrl: getBaseUrl,\n});\n","import { HttpApiEndpoint, HttpApiGroup } from \"effect/unstable/httpapi\";\nimport { Schema } from \"effect\";\nimport { InternalError, ScopeId, SecretBackedMap } from \"@executor-js/sdk/core\";\n\nimport { McpConnectionError, McpToolDiscoveryError } from \"../sdk/errors\";\nimport { McpStoredSourceSchema } from \"../sdk/stored-source\";\nimport {\n McpConnectionAuthInput,\n McpCredentialInput,\n McpSourceBindingInputSchema,\n McpSourceBindingRef,\n} from \"../sdk/types\";\n\n// ---------------------------------------------------------------------------\n// Params\n// ---------------------------------------------------------------------------\n\nconst ScopeParams = { scopeId: ScopeId };\nconst SourceParams = { scopeId: ScopeId, namespace: Schema.String };\nconst SourceBindingParams = {\n scopeId: ScopeId,\n namespace: Schema.String,\n sourceScopeId: ScopeId,\n};\n\n// ---------------------------------------------------------------------------\n// Auth payload (only for remote)\n// ---------------------------------------------------------------------------\n\nconst AuthPayload = McpConnectionAuthInput;\n\nconst StringMap = Schema.Record(Schema.String, Schema.String);\n// ---------------------------------------------------------------------------\n// Add source — discriminated union on transport\n// ---------------------------------------------------------------------------\n\nconst AddRemoteSourcePayload = Schema.Struct({\n targetScope: ScopeId,\n transport: Schema.Literal(\"remote\"),\n name: Schema.String,\n endpoint: Schema.String,\n remoteTransport: Schema.optional(Schema.Literals([\"streamable-http\", \"sse\", \"auto\"])),\n namespace: Schema.optional(Schema.String),\n queryParams: Schema.optional(Schema.Record(Schema.String, McpCredentialInput)),\n headers: Schema.optional(Schema.Record(Schema.String, McpCredentialInput)),\n auth: Schema.optional(AuthPayload),\n credentialTargetScope: Schema.optional(ScopeId),\n});\n\nconst AddStdioSourcePayload = Schema.Struct({\n targetScope: ScopeId,\n transport: Schema.Literal(\"stdio\"),\n name: Schema.String,\n command: Schema.String,\n args: Schema.optional(Schema.Array(Schema.String)),\n env: Schema.optional(StringMap),\n cwd: Schema.optional(Schema.String),\n namespace: Schema.optional(Schema.String),\n});\n\nconst AddSourcePayload = Schema.Union([AddRemoteSourcePayload, AddStdioSourcePayload]);\n\n// ---------------------------------------------------------------------------\n// Other payloads\n// ---------------------------------------------------------------------------\n\nconst UpdateSourcePayload = Schema.Struct({\n sourceScope: ScopeId,\n name: Schema.optional(Schema.String),\n endpoint: Schema.optional(Schema.String),\n headers: Schema.optional(Schema.Record(Schema.String, McpCredentialInput)),\n queryParams: Schema.optional(Schema.Record(Schema.String, McpCredentialInput)),\n credentialTargetScope: Schema.optional(ScopeId),\n auth: Schema.optional(AuthPayload),\n});\n\nconst UpdateSourceResponse = Schema.Struct({\n updated: Schema.Boolean,\n});\n\nconst ProbeEndpointPayload = Schema.Struct({\n endpoint: Schema.String,\n headers: Schema.optional(SecretBackedMap),\n queryParams: Schema.optional(SecretBackedMap),\n});\n\nconst ProbeEndpointResponse = Schema.Struct({\n connected: Schema.Boolean,\n requiresOAuth: Schema.Boolean,\n supportsDynamicRegistration: Schema.Boolean,\n name: Schema.String,\n namespace: Schema.String,\n toolCount: Schema.NullOr(Schema.Number),\n serverName: Schema.NullOr(Schema.String),\n});\n\nconst NamespacePayload = Schema.Struct({\n namespace: Schema.String,\n});\n\nconst RemoveBindingPayload = Schema.Struct({\n sourceId: Schema.String,\n sourceScope: ScopeId,\n slot: Schema.String,\n scope: ScopeId,\n});\n\n// ---------------------------------------------------------------------------\n// Responses\n// ---------------------------------------------------------------------------\n\nconst AddSourceResponse = Schema.Struct({\n toolCount: Schema.Number,\n namespace: Schema.String,\n});\n\nconst RefreshSourceResponse = Schema.Struct({\n toolCount: Schema.Number,\n});\n\nconst RemoveSourceResponse = Schema.Struct({\n removed: Schema.Boolean,\n});\n\n// ---------------------------------------------------------------------------\n// Group\n//\n// Plugin SDK errors (McpOAuthError etc.) are declared once at the group\n// level via `.addError(...)` — every endpoint inherits them. The errors\n// themselves carry their HTTP status via `HttpApiSchema.annotations`\n// in errors.ts, so handlers just `return yield* ext.foo(...)` and the\n// schema encodes whatever it gets.\n//\n// 5xx is handled at the API level: `CoreExecutorApi.addError(InternalError)`\n// adds a single shared opaque-by-schema 500 surface to every endpoint in\n// the entire API. Defects are captured + downgraded to it by an\n// HttpApiBuilder middleware (see apps/cloud/src/observability.ts).\n// No per-handler wrapping, no per-plugin InternalError.\n// ---------------------------------------------------------------------------\n\nexport const McpGroup = HttpApiGroup.make(\"mcp\")\n .add(\n HttpApiEndpoint.post(\"probeEndpoint\", \"/scopes/:scopeId/mcp/probe\", {\n params: ScopeParams,\n payload: ProbeEndpointPayload,\n success: ProbeEndpointResponse,\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.post(\"addSource\", \"/scopes/:scopeId/mcp/sources\", {\n params: ScopeParams,\n payload: AddSourcePayload,\n success: AddSourceResponse,\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.post(\"removeSource\", \"/scopes/:scopeId/mcp/sources/remove\", {\n params: ScopeParams,\n payload: NamespacePayload,\n success: RemoveSourceResponse,\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.post(\"refreshSource\", \"/scopes/:scopeId/mcp/sources/refresh\", {\n params: ScopeParams,\n payload: NamespacePayload,\n success: RefreshSourceResponse,\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.get(\"getSource\", \"/scopes/:scopeId/mcp/sources/:namespace\", {\n params: SourceParams,\n success: Schema.NullOr(McpStoredSourceSchema),\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.patch(\"updateSource\", \"/scopes/:scopeId/mcp/sources/:namespace\", {\n params: SourceParams,\n payload: UpdateSourcePayload,\n success: UpdateSourceResponse,\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.get(\n \"listSourceBindings\",\n \"/scopes/:scopeId/mcp/sources/:namespace/base/:sourceScopeId/bindings\",\n {\n params: SourceBindingParams,\n success: Schema.Array(McpSourceBindingRef),\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n },\n ),\n )\n .add(\n HttpApiEndpoint.post(\"setSourceBinding\", \"/scopes/:scopeId/mcp/source-bindings\", {\n params: ScopeParams,\n payload: McpSourceBindingInputSchema,\n success: McpSourceBindingRef,\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n )\n .add(\n HttpApiEndpoint.post(\"removeSourceBinding\", \"/scopes/:scopeId/mcp/source-bindings/remove\", {\n params: ScopeParams,\n payload: RemoveBindingPayload,\n success: Schema.Struct({ removed: Schema.Boolean }),\n error: [InternalError, McpConnectionError, McpToolDiscoveryError],\n }),\n );\n// Errors declared once at the group level — every endpoint inherits.\n// Plugin domain errors carry their own HttpApiSchema status (4xx);\n// `InternalError` is the shared opaque 500 translated at the HTTP\n// edge by `withCapture`. We only list errors an MCP *group*\n// endpoint can surface: `McpInvocationError` is thrown inside\n// `invokeTool` which is reached via the core `tools.invoke`\n// endpoint, not any MCP-group endpoint, so it doesn't belong here.\n// OAuth errors live on the shared `/oauth/*` group in `@executor-js/api`\n// now — the MCP group only declares its own plugin-domain errors.\n","import { Schema } from \"effect\";\nimport { ScopeId } from \"@executor-js/sdk/core\";\n\nimport { McpStoredSourceData } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Stored source — the shape persisted by the binding store and exposed\n// via the getSource HTTP endpoint.\n// ---------------------------------------------------------------------------\n\nexport class McpStoredSourceSchema extends Schema.Class<McpStoredSourceSchema>(\"McpStoredSource\")({\n namespace: Schema.String,\n scope: ScopeId,\n name: Schema.String,\n config: McpStoredSourceData,\n}) {}\n\nexport type McpStoredSourceSchemaType = typeof McpStoredSourceSchema.Type;\n"],"mappings":"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","names":["Schema","ScopeId","ScopeId","Schema"]}
|