@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.
Files changed (45) hide show
  1. package/dist/AddMcpSource-VM3HY26S.js +762 -0
  2. package/dist/AddMcpSource-VM3HY26S.js.map +1 -0
  3. package/dist/EditMcpSource-WELWGRJG.js +259 -0
  4. package/dist/EditMcpSource-WELWGRJG.js.map +1 -0
  5. package/dist/McpSourceSummary-7TDQXLT5.js +85 -0
  6. package/dist/McpSourceSummary-7TDQXLT5.js.map +1 -0
  7. package/dist/api/group.d.ts +109 -17
  8. package/dist/api/index.d.ts +391 -0
  9. package/dist/chunk-2ETJ6LQH.js +239 -0
  10. package/dist/chunk-2ETJ6LQH.js.map +1 -0
  11. package/dist/chunk-OOOH3IO4.js +2194 -0
  12. package/dist/chunk-OOOH3IO4.js.map +1 -0
  13. package/dist/chunk-SKSXXFOA.js +104 -0
  14. package/dist/chunk-SKSXXFOA.js.map +1 -0
  15. package/dist/chunk-Z4CRPOLI.js +186 -0
  16. package/dist/chunk-Z4CRPOLI.js.map +1 -0
  17. package/dist/chunk-ZIRGIRGP.js +115 -0
  18. package/dist/chunk-ZIRGIRGP.js.map +1 -0
  19. package/dist/client.js +51 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/core.js +26 -2
  22. package/dist/index.js +2 -1
  23. package/dist/react/McpRemoteSourceFields.d.ts +18 -0
  24. package/dist/react/McpSourceSummary.d.ts +5 -0
  25. package/dist/react/atoms.d.ts +206 -6
  26. package/dist/react/client.d.ts +113 -16
  27. package/dist/react/index.d.ts +1 -1
  28. package/dist/react/plugin-client.d.ts +9 -2
  29. package/dist/sdk/binding-store.d.ts +106 -1
  30. package/dist/sdk/index.d.ts +1 -1
  31. package/dist/sdk/invoke.d.ts +2 -0
  32. package/dist/sdk/plugin.d.ts +142 -114
  33. package/dist/sdk/probe-shape-real-servers.live.test.d.ts +1 -0
  34. package/dist/sdk/probe-shape.d.ts +17 -3
  35. package/dist/sdk/stored-source.d.ts +9 -6
  36. package/dist/sdk/types.d.ts +138 -13
  37. package/dist/{stdio-connector-KNHLETKM.js → stdio-connector-AA5S6UUJ.js} +1 -1
  38. package/dist/{stdio-connector-KNHLETKM.js.map → stdio-connector-AA5S6UUJ.js.map} +1 -1
  39. package/dist/testing/index.d.ts +1 -0
  40. package/dist/{sdk/test-utils.d.ts → testing/server.d.ts} +0 -6
  41. package/dist/testing.js +51 -0
  42. package/dist/testing.js.map +1 -0
  43. package/package.json +17 -4
  44. package/dist/chunk-C2GNZGFJ.js +0 -1622
  45. 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"]}