@plurnk/plurnk-mcp 1.6.0 → 1.7.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 (60) hide show
  1. package/.env.defaults +6 -4
  2. package/README.md +110 -45
  3. package/SPEC.md +274 -30
  4. package/dist/McpExecutor.d.ts +25 -4
  5. package/dist/McpExecutor.d.ts.map +1 -1
  6. package/dist/McpExecutor.js +105 -31
  7. package/dist/McpExecutor.js.map +1 -1
  8. package/dist/McpResources.d.ts +2 -2
  9. package/dist/McpResources.d.ts.map +1 -1
  10. package/dist/McpResources.js +116 -26
  11. package/dist/McpResources.js.map +1 -1
  12. package/dist/Module.d.ts +30 -5
  13. package/dist/Module.d.ts.map +1 -1
  14. package/dist/Module.js +649 -35
  15. package/dist/Module.js.map +1 -1
  16. package/dist/ToolPresentation.d.ts +5 -0
  17. package/dist/ToolPresentation.d.ts.map +1 -0
  18. package/dist/ToolPresentation.js +134 -0
  19. package/dist/ToolPresentation.js.map +1 -0
  20. package/dist/client.d.ts +25 -7
  21. package/dist/client.d.ts.map +1 -1
  22. package/dist/client.js +478 -85
  23. package/dist/client.js.map +1 -1
  24. package/dist/config.d.ts +7 -13
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +114 -45
  27. package/dist/config.js.map +1 -1
  28. package/dist/extensionChannel.d.ts +25 -0
  29. package/dist/extensionChannel.d.ts.map +1 -0
  30. package/dist/extensionChannel.js +195 -0
  31. package/dist/extensionChannel.js.map +1 -0
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/inputRequired.d.ts +36 -0
  37. package/dist/inputRequired.d.ts.map +1 -0
  38. package/dist/inputRequired.js +171 -0
  39. package/dist/inputRequired.js.map +1 -0
  40. package/dist/oauth.d.ts +28 -0
  41. package/dist/oauth.d.ts.map +1 -0
  42. package/dist/oauth.js +149 -0
  43. package/dist/oauth.js.map +1 -0
  44. package/dist/protocol.d.ts +7 -0
  45. package/dist/protocol.d.ts.map +1 -0
  46. package/dist/protocol.js +7 -0
  47. package/dist/protocol.js.map +1 -0
  48. package/dist/protocolHeaders.d.ts +4 -0
  49. package/dist/protocolHeaders.d.ts.map +1 -0
  50. package/dist/protocolHeaders.js +87 -0
  51. package/dist/protocolHeaders.js.map +1 -0
  52. package/dist/subscriptions.d.ts +15 -0
  53. package/dist/subscriptions.d.ts.map +1 -0
  54. package/dist/subscriptions.js +188 -0
  55. package/dist/subscriptions.js.map +1 -0
  56. package/dist/tasks.d.ts +19 -0
  57. package/dist/tasks.d.ts.map +1 -0
  58. package/dist/tasks.js +334 -0
  59. package/dist/tasks.js.map +1 -0
  60. package/package.json +10 -6
@@ -1,4 +1,5 @@
1
- import { BaseExecutor, ErrorDetail, ERROR_DETAIL_LIMIT, renderJsonResult, Results, } from "@plurnk/plurnk-execs";
1
+ import { BaseExecutor, ErrorDetail, ERROR_DETAIL_LIMIT, renderJsonResult, Results, RuntimeInvocation, } from "@plurnk/plurnk-execs";
2
+ import { toolRegistry as presentTools } from "./ToolPresentation.js";
2
3
  const CHANNEL = "body";
3
4
  export const runtimeDecl = (name) => ({
4
5
  name,
@@ -6,27 +7,39 @@ export const runtimeDecl = (name) => ({
6
7
  invocation: {
7
8
  body: { role: "JSON arguments", required: false },
8
9
  target: { role: "MCP tool", required: true, kind: "literal" },
9
- example: { target: "tool_name", body: '{"argument":"value"}' },
10
+ example: { target: "tool_name" },
10
11
  },
11
- documentation: `# ${name}
12
-
13
- This configured MCP server is available as an executable tool family and an
14
- addressable resource family.
15
-
16
- \`\`\`plurnk
17
- ## READ0 (${name}:///)\n\n## EXEC0 [${name}] (tool_name)\n{"argument":"value"}
18
- \`\`\`
19
-
20
- READ returns the live catalog. Tool arguments are one JSON object. Tool results
21
- are written to the operation's \`body\` channel.
22
- `,
12
+ documentation: "",
23
13
  });
24
14
  const message = (error) => error instanceof Error ? error.message : String(error);
15
+ const progressNotice = (runtime, tool, progress) => ({
16
+ source: `exec:${runtime}`,
17
+ kind: "mcp_progress",
18
+ level: "info",
19
+ message: progress.message ?? (progress.total === undefined
20
+ ? `MCP tool '${tool}' progressed to ${progress.progress}.`
21
+ : `MCP tool '${tool}' progressed to ${progress.progress}/${progress.total}.`),
22
+ tool,
23
+ progress: progress.progress,
24
+ ...(progress.total === undefined ? {} : { total: progress.total }),
25
+ });
25
26
  export default class McpExecutor extends BaseExecutor {
26
27
  #connection;
27
- constructor(metadata, connection) {
28
+ #tools;
29
+ #read;
30
+ #registry = null;
31
+ #catalog = null;
32
+ constructor(metadata, connection, policy = {}) {
28
33
  super(metadata);
29
34
  this.#connection = connection;
35
+ this.#tools = policy.tools ?? null;
36
+ this.#read = new Set(policy.read ?? []);
37
+ }
38
+ get manifest() {
39
+ return {
40
+ ...super.manifest,
41
+ example: `## FIND0 (${this.runtime}:///resources/**)`,
42
+ };
30
43
  }
31
44
  get channels() {
32
45
  return {
@@ -36,9 +49,50 @@ export default class McpExecutor extends BaseExecutor {
36
49
  };
37
50
  }
38
51
  effect(target) {
39
- if (target === null || target.length === 0)
40
- return "read";
41
- return this.#connection.readOnly(target) ? "read" : "host";
52
+ if (target === null || !this.#enabledTargets().has(target)) {
53
+ throw new Error(`MCP effect classification received unregistered target '${target ?? ""}' on '${this.runtime}'.`);
54
+ }
55
+ return this.#read.has(target) ? "read" : "host";
56
+ }
57
+ #selectTools(tools) {
58
+ const available = new Set(tools.map((tool) => tool.name));
59
+ if (available.size !== tools.length) {
60
+ throw new Error(`MCP server '${this.runtime}' returned duplicate tool names.`);
61
+ }
62
+ const configured = this.#tools ?? [];
63
+ for (const name of configured) {
64
+ if (!available.has(name)) {
65
+ throw new Error(`Configured MCP tool '${name}' is absent from server '${this.runtime}'.`);
66
+ }
67
+ }
68
+ const selected = this.#tools === null
69
+ ? tools
70
+ : tools.filter((tool) => this.#tools?.includes(tool.name));
71
+ const enabled = new Set(selected.map((tool) => tool.name));
72
+ for (const name of this.#read) {
73
+ if (!enabled.has(name)) {
74
+ throw new Error(`Read-classified MCP tool '${name}' is not enabled on server '${this.runtime}'.`);
75
+ }
76
+ }
77
+ return selected;
78
+ }
79
+ #enabledTargets() {
80
+ if (this.#registry === null) {
81
+ throw new Error(`MCP tool registry for '${this.runtime}' was read before availability was established.`);
82
+ }
83
+ return new Set(this.#registry.tools.map((tool) => tool.target));
84
+ }
85
+ toolRegistry() {
86
+ if (this.#registry === null) {
87
+ throw new Error(`MCP tool registry for '${this.runtime}' was read before availability was established.`);
88
+ }
89
+ return this.#registry;
90
+ }
91
+ get catalog() {
92
+ if (this.#catalog === null) {
93
+ throw new Error(`MCP catalog for '${this.runtime}' was read before availability was established.`);
94
+ }
95
+ return this.#catalog;
42
96
  }
43
97
  async probe(signal) {
44
98
  const detailLimit = ErrorDetail.configuredLimit();
@@ -49,16 +103,7 @@ export default class McpExecutor extends BaseExecutor {
49
103
  };
50
104
  }
51
105
  try {
52
- const catalog = await this.#connection.catalog(signal);
53
- return {
54
- available: true,
55
- detail: [
56
- `MCP ${catalog.protocolVersion}`,
57
- `${catalog.tools.length} tools`,
58
- `${catalog.resources.length} resources`,
59
- `${catalog.prompts.length} prompts`,
60
- ].join("; "),
61
- };
106
+ return await this.requireAvailable(signal);
62
107
  }
63
108
  catch (error) {
64
109
  return {
@@ -67,7 +112,25 @@ export default class McpExecutor extends BaseExecutor {
67
112
  };
68
113
  }
69
114
  }
70
- async run({ runtime, body, target, signal, write, setState, }) {
115
+ async requireAvailable(signal) {
116
+ if (ErrorDetail.configuredLimit() === null) {
117
+ throw new Error(`${ERROR_DETAIL_LIMIT} must be set to a non-negative integer.`);
118
+ }
119
+ const catalog = await this.#connection.catalog(signal);
120
+ const selected = this.#selectTools(catalog.tools);
121
+ this.#registry = RuntimeInvocation.assertToolRegistry(presentTools(this.runtime, selected), "@plurnk/plurnk-mcp", this.runtime);
122
+ this.#catalog = catalog;
123
+ return {
124
+ available: true,
125
+ detail: [
126
+ `MCP ${catalog.protocolVersion}`,
127
+ `${catalog.tools.length} tools`,
128
+ `${catalog.resources.length} resources`,
129
+ `${catalog.prompts.length} prompts`,
130
+ ].join("; "),
131
+ };
132
+ }
133
+ async run({ runtime, body, target, signal, write, setState, emit, interact, }) {
71
134
  const fail = (code, status, detail, extensions) => {
72
135
  setState(CHANNEL, "errored");
73
136
  return Results.failure("executor:mcp", code, status, detail, {}, {
@@ -84,7 +147,14 @@ export default class McpExecutor extends BaseExecutor {
84
147
  const input = body.trim();
85
148
  if (target === null || target.length === 0) {
86
149
  return fail("tool-required", 400, `MCP executor '${runtime}' requires a tool target.`, {
87
- recovery: `READ ${runtime}:/// for the live catalog, then target one listed tool.`,
150
+ recovery: "Select a target listed for this executor in Registered Tools.",
151
+ retryable: false,
152
+ });
153
+ }
154
+ if (!this.#enabledTargets().has(target)) {
155
+ return fail("tool-not-enabled", 404, `MCP tool '${target}' is not enabled on '${runtime}'.`, {
156
+ tool: target,
157
+ recovery: "Select a target listed for this executor in Registered Tools.",
88
158
  retryable: false,
89
159
  });
90
160
  }
@@ -106,7 +176,11 @@ export default class McpExecutor extends BaseExecutor {
106
176
  }
107
177
  }
108
178
  try {
109
- const result = await this.#connection.callTool(target, args, signal);
179
+ const tool = this.#catalog?.tools.find((candidate) => candidate.name === target);
180
+ if (tool === undefined) {
181
+ throw new Error(`MCP tool '${target}' is absent from the prepared catalog.`);
182
+ }
183
+ const result = await this.#connection.callTool(target, args, signal, (progress) => emit(progressNotice(runtime, target, progress)), interact, tool);
110
184
  write(CHANNEL, renderJsonResult(result), "application/json");
111
185
  if (result.isError === true) {
112
186
  return fail("tool-reported-error", 502, `MCP tool '${target}' on '${runtime}' reported an error.`, {
@@ -1 +1 @@
1
- {"version":3,"file":"McpExecutor.js","sourceRoot":"","sources":["../src/McpExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"McpExecutor.js","sourceRoot":"","sources":["../src/McpExecutor.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { type EntryFindResult, type FindStatement, type RepresentationPreparationRequest, type RepresentationPreparationResult, type SchemeCtx } from "@plurnk/plurnk-schemes";
2
- import ServerConnection from "./client.ts";
2
+ import ServerConnection, { type ServerCatalog } from "./client.ts";
3
3
  export default class McpResources {
4
4
  #private;
5
- constructor(server: string, connection: ServerConnection);
5
+ constructor(server: string, connection: ServerConnection, catalog: ServerCatalog);
6
6
  claims(pathname: string): boolean;
7
7
  prepareRepresentation(request: RepresentationPreparationRequest, ctx: SchemeCtx): Promise<RepresentationPreparationResult>;
8
8
  find(statement: FindStatement, ctx: SchemeCtx): Promise<EntryFindResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"McpResources.d.ts","sourceRoot":"","sources":["../src/McpResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,SAAS,EACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAsF3C,MAAM,CAAC,OAAO,OAAO,YAAY;;IAI7B,YAAY,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAGvD;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIhC;IAgEK,qBAAqB,CACvB,OAAO,EAAE,gCAAgC,EACzC,GAAG,EAAE,SAAS,GACf,OAAO,CAAC,+BAA+B,CAAC,CA0B1C;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB7E;CACJ"}
1
+ {"version":3,"file":"McpResources.d.ts","sourceRoot":"","sources":["../src/McpResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,eAAe,EAGpB,KAAK,aAAa,EAClB,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,SAAS,EAEjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,gBAAgB,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAoInE,MAAM,CAAC,OAAO,OAAO,YAAY;;IAK7B,YAAY,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAI/E;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMhC;IAkIK,qBAAqB,CACvB,OAAO,EAAE,gCAAgC,EACzC,GAAG,EAAE,SAAS,GACf,OAAO,CAAC,+BAA+B,CAAC,CA+B1C;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAiB7E;CACJ"}
@@ -2,11 +2,30 @@ import { Results, } from "@plurnk/plurnk-schemes";
2
2
  const ROOT = "/";
3
3
  const RESOURCES = "/resources";
4
4
  const RESOURCE_PREFIX = `${RESOURCES}/`;
5
+ const PROMPTS = "/prompts";
6
+ const PROMPT_PREFIX = `${PROMPTS}/`;
5
7
  const RESOURCE_KIND = "mcp-resource";
6
8
  const CATALOG_KIND = "mcp-resource-catalog";
9
+ const PROMPT_KIND = "mcp-prompt";
7
10
  class ResourceAddressError extends Error {
8
11
  }
12
+ class EntryOperationFailure extends Error {
13
+ result;
14
+ constructor(result) {
15
+ super(result.problem?.detail ?? `Entry operation failed with status ${result.status}.`, {
16
+ cause: result.problem,
17
+ });
18
+ this.result = result;
19
+ }
20
+ }
21
+ const requireEntrySuccess = (result) => {
22
+ const exact = Results.assert(result);
23
+ if (Results.isErrorStatus(exact.status))
24
+ throw new EntryOperationFailure(exact);
25
+ return exact;
26
+ };
9
27
  const resourcePath = (uri) => `${RESOURCE_PREFIX}${encodeURIComponent(uri)}`;
28
+ const promptPath = (name) => `${PROMPT_PREFIX}${encodeURIComponent(name)}`;
10
29
  const preparationFailure = (server, code, status, detail, extensions) => Results.failure("scheme:mcp", code, status, detail, {}, {
11
30
  server,
12
31
  stage: "mcp-resource",
@@ -16,8 +35,8 @@ const findFailure = (server, code, status, detail, extensions) => Results.failur
16
35
  content: null,
17
36
  mimetype: null,
18
37
  results: [],
19
- itemsTokenTotal: 0,
20
- returnedItemsTokenTotal: 0,
38
+ itemsWeightTotal: 0,
39
+ returnedItemsWeightTotal: 0,
21
40
  matchingPathCount: 0,
22
41
  matchLocationCount: 0,
23
42
  }, {
@@ -25,6 +44,21 @@ const findFailure = (server, code, status, detail, extensions) => Results.failur
25
44
  stage: "mcp-resource",
26
45
  ...extensions,
27
46
  });
47
+ const preparationEntryFailure = (failure) => Results.assertRepresentationPreparation({
48
+ status: failure.result.status,
49
+ problem: failure.result.problem,
50
+ });
51
+ const findEntryFailure = (failure) => Results.assert({
52
+ status: failure.result.status,
53
+ problem: failure.result.problem,
54
+ content: null,
55
+ mimetype: null,
56
+ results: [],
57
+ itemsWeightTotal: 0,
58
+ returnedItemsWeightTotal: 0,
59
+ matchingPathCount: 0,
60
+ matchLocationCount: 0,
61
+ });
28
62
  const resourceBody = (result) => {
29
63
  if (result.contents.length === 1 && "text" in result.contents[0]) {
30
64
  const value = result.contents[0];
@@ -50,40 +84,88 @@ const catalogEntry = (content, kind) => ({
50
84
  export default class McpResources {
51
85
  #server;
52
86
  #connection;
53
- constructor(server, connection) {
87
+ #catalog;
88
+ constructor(server, connection, catalog) {
54
89
  this.#server = server;
55
90
  this.#connection = connection;
91
+ this.#catalog = catalog;
56
92
  }
57
93
  claims(pathname) {
58
94
  return pathname === ROOT
59
95
  || pathname === RESOURCES
60
- || pathname.startsWith(RESOURCE_PREFIX);
96
+ || pathname.startsWith(RESOURCE_PREFIX)
97
+ || pathname === PROMPTS
98
+ || pathname.startsWith(PROMPT_PREFIX);
61
99
  }
62
100
  async #materializeCatalog(ctx) {
63
- const catalog = await this.#connection.catalog(ctx.signal);
64
- await ctx.entries.write(ROOT, catalogEntry(JSON.stringify({
65
- ...catalog,
66
- resources: catalog.resources.map((resource) => ({
67
- ...resource,
68
- address: `${this.#server}://${resourcePath(resource.uri)}`,
69
- })),
70
- }), "mcp-catalog"));
71
- await ctx.entries.write(RESOURCES, catalogEntry(JSON.stringify({
72
- resources: catalog.resources.map((resource) => ({
73
- ...resource,
74
- address: `${this.#server}://${resourcePath(resource.uri)}`,
75
- })),
76
- resourceTemplates: catalog.resourceTemplates,
77
- }), "mcp-resource-index"));
78
- await Promise.all(catalog.resources.map(async (resource) => {
101
+ const resources = this.#catalog.resources.map((resource) => ({
102
+ ...resource,
103
+ address: `${this.#server}://${resourcePath(resource.uri)}`,
104
+ }));
105
+ const prompts = this.#catalog.prompts.map((prompt) => ({
106
+ ...prompt,
107
+ address: `${this.#server}://${promptPath(prompt.name)}`,
108
+ }));
109
+ requireEntrySuccess(await ctx.entries.write(ROOT, catalogEntry(JSON.stringify({
110
+ resources,
111
+ resourceTemplates: this.#catalog.resourceTemplates,
112
+ prompts,
113
+ }), "mcp-resource-index")));
114
+ requireEntrySuccess(await ctx.entries.write(RESOURCES, catalogEntry(JSON.stringify({
115
+ resources,
116
+ resourceTemplates: this.#catalog.resourceTemplates,
117
+ }), "mcp-resource-index")));
118
+ requireEntrySuccess(await ctx.entries.write(PROMPTS, catalogEntry(JSON.stringify({ prompts }), "mcp-prompt-index")));
119
+ await Promise.all(this.#catalog.resources.map(async (resource) => {
79
120
  const pathname = resourcePath(resource.uri);
80
- const existing = await ctx.entries.read(pathname);
121
+ const existing = requireEntrySuccess(await ctx.entries.read(pathname));
81
122
  if (existing.entry?.attributes?.kind === RESOURCE_KIND)
82
123
  return;
83
- await ctx.entries.write(pathname, catalogEntry(JSON.stringify({
124
+ requireEntrySuccess(await ctx.entries.write(pathname, catalogEntry(JSON.stringify({
84
125
  ...resource,
85
126
  address: `${this.#server}://${pathname}`,
86
- }), CATALOG_KIND));
127
+ }), CATALOG_KIND)));
128
+ }));
129
+ await Promise.all(this.#catalog.prompts.map(async (prompt) => {
130
+ const pathname = promptPath(prompt.name);
131
+ const existing = requireEntrySuccess(await ctx.entries.read(pathname));
132
+ if (existing.entry?.attributes?.kind === PROMPT_KIND)
133
+ return;
134
+ requireEntrySuccess(await ctx.entries.write(pathname, catalogEntry(JSON.stringify({
135
+ ...prompt,
136
+ address: `${this.#server}://${pathname}`,
137
+ }), "mcp-prompt-catalog")));
138
+ }));
139
+ }
140
+ async #materializePrompt(request, ctx) {
141
+ const encoded = request.pathname.slice(PROMPT_PREFIX.length);
142
+ if (encoded.length === 0 || encoded.includes("/")) {
143
+ throw new ResourceAddressError(`Invalid MCP prompt address '${request.pathname}'.`);
144
+ }
145
+ let name;
146
+ try {
147
+ name = decodeURIComponent(encoded);
148
+ }
149
+ catch (cause) {
150
+ throw new ResourceAddressError(`Invalid encoded MCP prompt address '${request.pathname}'.`, { cause });
151
+ }
152
+ const search = new URLSearchParams(request.target.kind === "url" ? request.target.query ?? "" : "");
153
+ const args = {};
154
+ for (const [key, value] of search) {
155
+ if (Object.hasOwn(args, key)) {
156
+ throw new ResourceAddressError(`MCP prompt argument '${key}' occurs more than once.`);
157
+ }
158
+ args[key] = value;
159
+ }
160
+ const result = await this.#connection.getPrompt(name, Object.keys(args).length === 0 ? undefined : args, ctx.signal, (interaction) => ctx.interactions.request(interaction));
161
+ requireEntrySuccess(await ctx.entries.write(request.pathname, {
162
+ channels: {
163
+ body: {
164
+ content: JSON.stringify(result),
165
+ mimetype: "application/json",
166
+ },
167
+ },
168
+ attributes: { kind: PROMPT_KIND },
87
169
  }));
88
170
  }
89
171
  async #materializeResource(pathname, ctx) {
@@ -98,8 +180,8 @@ export default class McpResources {
98
180
  catch (cause) {
99
181
  throw new ResourceAddressError(`Invalid encoded MCP resource address '${pathname}'.`, { cause });
100
182
  }
101
- const body = resourceBody(await this.#connection.readResource(uri, ctx.signal));
102
- await ctx.entries.write(pathname, {
183
+ const body = resourceBody(await this.#connection.readResource(uri, ctx.signal, (interaction) => ctx.interactions.request(interaction)));
184
+ requireEntrySuccess(await ctx.entries.write(pathname, {
103
185
  channels: {
104
186
  body: {
105
187
  content: body.content,
@@ -107,7 +189,7 @@ export default class McpResources {
107
189
  },
108
190
  },
109
191
  attributes: { kind: RESOURCE_KIND },
110
- });
192
+ }));
111
193
  }
112
194
  async prepareRepresentation(request, ctx) {
113
195
  const pathname = request.pathname;
@@ -117,12 +199,18 @@ export default class McpResources {
117
199
  if (exactResource) {
118
200
  await this.#materializeResource(pathname, ctx);
119
201
  }
202
+ else if (pathname.startsWith(PROMPT_PREFIX) && !/[*?[\]{}]/.test(pathname)) {
203
+ await this.#materializePrompt(request, ctx);
204
+ }
120
205
  else {
121
206
  await this.#materializeCatalog(ctx);
122
207
  }
123
208
  return { status: 200 };
124
209
  }
125
210
  catch (error) {
211
+ if (error instanceof EntryOperationFailure) {
212
+ return preparationEntryFailure(error);
213
+ }
126
214
  const invalidAddress = error instanceof ResourceAddressError;
127
215
  return preparationFailure(this.#server, invalidAddress ? "resource-address-invalid" : "resource-read-failed", invalidAddress ? 400 : 502, invalidAddress
128
216
  ? `The requested MCP resource address for '${this.#server}' is invalid.`
@@ -138,6 +226,8 @@ export default class McpResources {
138
226
  return await ctx.entries.operations.find(statement);
139
227
  }
140
228
  catch (error) {
229
+ if (error instanceof EntryOperationFailure)
230
+ return findEntryFailure(error);
141
231
  return findFailure(this.#server, "resource-find-failed", 502, `MCP server '${this.#server}' could not list its resources.`, {
142
232
  diagnostic: error instanceof Error ? error.message : String(error),
143
233
  retryable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"McpResources.js","sourceRoot":"","sources":["../src/McpResources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"McpResources.js","sourceRoot":"","sources":["../src/McpResources.ts"],"names":[],"mappings":"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"}
package/dist/Module.d.ts CHANGED
@@ -6,18 +6,43 @@ interface RuntimeSchemeFacet {
6
6
  prepareRepresentation?(request: RepresentationPreparationRequest, ctx: SchemeCtx): Promise<RepresentationPreparationResult>;
7
7
  find?(statement: FindStatement, ctx: SchemeCtx): Promise<SchemeResult>;
8
8
  }
9
+ interface RuntimeRegistration {
10
+ readonly namespaceOwner: string;
11
+ readonly decl: RuntimeDecl;
12
+ readonly executor: McpExecutor;
13
+ readonly availability: RuntimeAvailability;
14
+ readonly scheme?: RuntimeSchemeFacet;
15
+ }
16
+ type ModuleActionContext = {
17
+ readonly scope: "worldless";
18
+ } | {
19
+ readonly scope: "workspace";
20
+ readonly workspaceId: number;
21
+ };
9
22
  interface ModuleSetupSeam {
10
- registerRuntime(registration: {
23
+ registerModuleAction(registration: {
24
+ readonly name: string;
25
+ readonly scope: "worldless" | "workspace";
26
+ readonly handler: (params: Readonly<Record<string, unknown>>, context: ModuleActionContext) => unknown | Promise<unknown>;
27
+ }): void;
28
+ registerWorkspaceCapabilityProvider(namespaceOwner: string, provider: {
29
+ hydrate(workspaceId: number): void | Promise<void>;
30
+ }): void;
31
+ readWorkspaceModuleState(workspaceId: number, namespaceOwner: string): Promise<unknown | null>;
32
+ replaceWorkspaceCapabilities(replacement: {
33
+ readonly workspaceId: number;
11
34
  readonly namespaceOwner: string;
12
- readonly decl: RuntimeDecl;
13
- readonly executor: McpExecutor;
14
- readonly availability: RuntimeAvailability;
15
- readonly scheme?: RuntimeSchemeFacet;
35
+ readonly state: unknown | null;
36
+ readonly runtimes: readonly RuntimeRegistration[];
16
37
  }): Promise<void>;
17
38
  }
18
39
  export interface ModuleOptions {
19
40
  readonly env?: NodeJS.ProcessEnv;
20
41
  }
42
+ interface ClosableConnection {
43
+ close(): Promise<void>;
44
+ }
45
+ export declare const closeConnections: (connections: readonly ClosableConnection[]) => Promise<void>;
21
46
  export default class Module {
22
47
  #private;
23
48
  static init(options?: ModuleOptions): Module;
@@ -1 +1 @@
1
- {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../src/Module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,WAAW,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACR,aAAa,EACb,gCAAgC,EAChC,+BAA+B,EAC/B,SAAS,EACT,YAAY,EACf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,WAA4B,MAAM,kBAAkB,CAAC;AAG5D,UAAU,kBAAkB;IACxB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,qBAAqB,CAAC,CAClB,OAAO,EAAE,gCAAgC,EACzC,GAAG,EAAE,SAAS,GACf,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1E;AAED,UAAU,eAAe;IACrB,eAAe,CAAC,YAAY,EAAE;QAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;QAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;KACxC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACpC;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;;IAIvB,MAAM,CAAC,IAAI,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAE/C;IAED,OAAO,eAEN;IAEK,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3B;CACJ"}
1
+ {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../src/Module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,WAAW,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACR,aAAa,EACb,gCAAgC,EAChC,+BAA+B,EAC/B,SAAS,EACT,YAAY,EACf,MAAM,wBAAwB,CAAC;AAahC,OAAO,WAA4B,MAAM,kBAAkB,CAAC;AAO5D,UAAU,kBAAkB;IACxB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,qBAAqB,CAAC,CAClB,OAAO,EAAE,gCAAgC,EACzC,GAAG,EAAE,SAAS,GACf,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1E;AAED,UAAU,mBAAmB;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,KAAK,mBAAmB,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,UAAU,eAAe;IACrB,oBAAoB,CAAC,YAAY,EAAE;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAAC;QAC1C,QAAQ,CAAC,OAAO,EAAE,CACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,OAAO,EAAE,mBAAmB,KAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACnC,GAAG,IAAI,CAAC;IACT,mCAAmC,CAC/B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE;QAAE,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GACjE,IAAI,CAAC;IACR,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC/F,4BAA4B,CAAC,WAAW,EAAE;QACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;KACrD,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAsDD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACpC;AAED,UAAU,kBAAkB;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAgGD,eAAO,MAAM,gBAAgB,gBACZ,SAAS,kBAAkB,EAAE,KAC3C,OAAO,CAAC,IAAI,CAUd,CAAC;AA2FF,MAAM,CAAC,OAAO,OAAO,MAAM;;IAUvB,MAAM,CAAC,IAAI,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAE/C;IAED,OAAO,eAKN;IAEK,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhD;IAmmBK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAe3B;CACJ"}