@plurnk/plurnk-mcp 1.17.0 → 1.19.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 (49) hide show
  1. package/.env.defaults +11 -5
  2. package/README.md +14 -7
  3. package/SPEC.md +189 -58
  4. package/dist/ContentProjection.d.ts +11 -0
  5. package/dist/ContentProjection.d.ts.map +1 -0
  6. package/dist/ContentProjection.js +24 -0
  7. package/dist/ContentProjection.js.map +1 -0
  8. package/dist/McpExecutor.d.ts +1 -1
  9. package/dist/McpExecutor.d.ts.map +1 -1
  10. package/dist/McpExecutor.js +43 -51
  11. package/dist/McpExecutor.js.map +1 -1
  12. package/dist/McpResources.d.ts.map +1 -1
  13. package/dist/McpResources.js +27 -5
  14. package/dist/McpResources.js.map +1 -1
  15. package/dist/Module.d.ts +7 -2
  16. package/dist/Module.d.ts.map +1 -1
  17. package/dist/Module.js +92 -29
  18. package/dist/Module.js.map +1 -1
  19. package/dist/Summary.d.ts +3 -0
  20. package/dist/Summary.d.ts.map +1 -0
  21. package/dist/Summary.js +15 -0
  22. package/dist/Summary.js.map +1 -0
  23. package/dist/ToolPresentation.d.ts.map +1 -1
  24. package/dist/ToolPresentation.js +3 -23
  25. package/dist/ToolPresentation.js.map +1 -1
  26. package/dist/capabilityMatrix.js +37 -37
  27. package/dist/capabilityMatrix.js.map +1 -1
  28. package/dist/client.d.ts +3 -0
  29. package/dist/client.d.ts.map +1 -1
  30. package/dist/client.js +114 -60
  31. package/dist/client.js.map +1 -1
  32. package/dist/config.d.ts +6 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +54 -33
  35. package/dist/config.js.map +1 -1
  36. package/dist/inputRequired.d.ts +5 -2
  37. package/dist/inputRequired.d.ts.map +1 -1
  38. package/dist/inputRequired.js +31 -8
  39. package/dist/inputRequired.js.map +1 -1
  40. package/dist/mcp-watchdog.mjs +3 -2
  41. package/dist/subscriptions.d.ts +4 -2
  42. package/dist/subscriptions.d.ts.map +1 -1
  43. package/dist/subscriptions.js +27 -12
  44. package/dist/subscriptions.js.map +1 -1
  45. package/dist/tasks.d.ts.map +1 -1
  46. package/dist/tasks.js +11 -13
  47. package/dist/tasks.js.map +1 -1
  48. package/docs/mcp.md +37 -13
  49. package/package.json +7 -7
package/.env.defaults CHANGED
@@ -1,11 +1,16 @@
1
- # @plurnk/plurnk-mcp — Worker MCP attachments.
1
+ # @plurnk/plurnk-mcp — workspace MCP servers.
2
2
  # Alias blocks make servers available; ENABLED selects initial attachments.
3
- # A Worker can add/enable/disable/remove attachments through its Functionality controls.
3
+ # An empty alias target masks its definition, companions and ENABLED/EXPANDED selections.
4
+ # Workers manage the shared servers through the mcp Functionality controls.
4
5
 
5
- # Connection and protocol-discovery deadline, positive ms.
6
+ # Connection deadline and complete catalog/list-walk deadline, positive ms each.
6
7
  PLURNK_MCP_CONNECT_TIMEOUT=30000
7
- # Individual operation deadline, positive ms; caller cancellation still applies.
8
+ # Whole-operation deadline including client input, positive ms; caller cancellation still applies.
8
9
  PLURNK_MCP_REQUEST_TIMEOUT=86400000
10
+ # First delay before the adapter retries a dropped subscription or a failed catalog refresh, positive ms; it doubles per attempt.
11
+ PLURNK_MCP_RETRY_FLOOR_MS=250
12
+ # Ceiling of that doubling delay, positive ms, at least the floor.
13
+ PLURNK_MCP_RETRY_CEILING_MS=5000
9
14
  # Initially enabled aliases, JSON array; [] = none.
10
15
  PLURNK_MCP_ENABLED=[]
11
16
  # Expand these servers' tool lists in turn 0; otherwise show one row per server.
@@ -19,7 +24,8 @@ PLURNK_MCP_ENABLED=[]
19
24
 
20
25
  # --- stdio target ---
21
26
  # One exact executable (not a shell command); ARGS is a literal JSON array.
22
- # CWD is optional; ENV overlays the subprocess environment, resolving ${NAME} references.
27
+ # CWD defaults to per-workspace server state under XDG_STATE_HOME (normally ~/.local/state).
28
+ # Explicit CWD is honored; ENV overlays the subprocess environment, resolving ${NAME} references.
23
29
  # PLURNK_MCP_browser=node
24
30
  # PLURNK_MCP_browser_ARGS=["/absolute/path/to/browser-server.mjs"]
25
31
  # PLURNK_MCP_browser_CWD=/absolute/working/directory
package/README.md CHANGED
@@ -60,10 +60,10 @@ published by the coordinator and the two continuations by this module:
60
60
  | `workspace.mcp.oauth.complete` | `alias`, complete `callbackUrl` |
61
61
  | `workspace.mcp.complete` | `server`, completion `ref` and `argument`; optional `context` |
62
62
 
63
- The model manages the same family through ```` ```mcp (list|discover|add|enable|disable|remove) ````.
63
+ The model manages the same family through ````` ````mcp (list|discover|add|enable|disable|remove) `````.
64
64
 
65
65
  Tool discovery uses ordinary `FIND (worker:///_plurnk/tools/*.md)` and READ.
66
- Each server's document lists enabled EXEC calls with required-field previews
66
+ Each server's document lists enabled tool calls with required-field previews
67
67
  and links to full input schemas under `tools/<server>/<encoded-tool>.md`.
68
68
  The manager uses the same layout under `plurnk/mcp.md` and `plurnk/mcp/`;
69
69
  schema documents preserve descriptions and constraints without adding them to
@@ -78,15 +78,15 @@ can provide the executable while one project's `.env` supplies its identity:
78
78
 
79
79
  ```text
80
80
  # $XDG_CONFIG_HOME/plurnk/.env, read by the service
81
- PLURNK_MCP_GITEA=/usr/local/bin/possumtech-gitea-mcp
81
+ PLURNK_MCP_project=/opt/mcp/current-server
82
82
  PLURNK_MCP_ENABLED=[]
83
83
 
84
84
  # <project>/.env, read by the client
85
- PLURNK_MCP_GITEA_ARGS=["plurnk_pk"]
85
+ PLURNK_MCP_project_ARGS=["--stdio","--project","example"]
86
86
  ```
87
87
 
88
88
  The client carries its raw declarations while listing and enabling. Listing is
89
- inert. `/mcp enable gitea` (or `plurnk mcp enable gitea` in a bound conversation)
89
+ inert. `/mcp enable project` (or `plurnk mcp enable project` in a bound conversation)
90
90
  composes service, durable workspace, client, and optional command-file fields
91
91
  in that order, prepares the connection, then persists the complete unexpanded
92
92
  workspace definition. Arrays and maps replace rather than append or merge.
@@ -98,7 +98,7 @@ the same workspace alias requires explicit removal before replacement.
98
98
  Web discovery is an ordinary MCP attachment ({§web-search-retrieval}); the demo
99
99
  tier exercises search through a documented fixture rather than an owned
100
100
  runtime. Two service-owned definitions are permitted to participate in demos
101
- of MCP and model behavior — Gitea (above) and Brave Search:
101
+ of MCP and model behavior — Gitea and Brave Search:
102
102
 
103
103
  ```text
104
104
  # $XDG_CONFIG_HOME/plurnk/.env, read by the service — demo fixtures; never default-enabled
@@ -152,6 +152,13 @@ whitespace. Arguments are a JSON array; the module never parses or invokes a
152
152
  shell command. `${NAME}` references resolve from the daemon's inherited
153
153
  environment only while preparing a connection.
154
154
 
155
+ Without `CWD`, a local server uses its own workspace directory under
156
+ `$XDG_STATE_HOME/plurnk` (normally `~/.local/state/plurnk`), not the daemon's
157
+ launch directory. State survives reconnects and disable/remove; discovery
158
+ scratch is removed after its probe closes. Use absolute project paths or an
159
+ explicit `CWD` for servers that operate on a project. This default does not
160
+ confine arbitrary subprocess writes.
161
+
155
162
  `PLURNK_MCP_<server>_TOOLS` is an optional JSON array of exact names. Absence
156
163
  enables every listed server tool; an array enables exactly those names; `[]`
157
164
  enables none. `PLURNK_MCP_<server>_READ` is an exact enabled-tool subset whose
@@ -166,7 +173,7 @@ Portable timeouts and complete examples live in [`.env.defaults`](./.env.default
166
173
  | MCP surface | Plurnk surface |
167
174
  |---|---|
168
175
  | Server tools | `worker:///_plurnk/tools/<server>.md` family summary |
169
- | Enabled tool | Exact `worker:///_plurnk/tools/<server>/<encoded-tool>.md` document and ```` ```server (tool) ```` |
176
+ | Enabled tool | Exact `worker:///_plurnk/tools/<server>/<encoded-tool>.json` document and ````` ````server (tool) ````` |
170
177
  | Resource catalog | `server:///` or `server:///resources` |
171
178
  | Resource | `server:///resources/<encoded-uri>` through ordinary `FIND` and `READ` |
172
179
  | Prompt catalog | `server:///prompts` |
package/SPEC.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Plurnk MCP host specification
2
2
 
3
- ## §mcp-role Host boundary
3
+ ## Host boundary
4
4
 
5
5
  `@plurnk/plurnk-mcp` is an MCP **host/client** that projects trusted remote
6
6
  servers into Plurnk. It does not implement an MCP server or authorization
@@ -34,8 +34,8 @@ per-connection and absent from a legacy peer.
34
34
  ## §mcp-core-matrix Core capability matrix
35
35
 
36
36
  The accountable capability matrix lives in `capabilityMatrix.ts`
37
- ({§mcp-capability-matrix}); this section states the core surface contract the
38
- matrix rows cite.
37
+ ({§mcp-capability-matrix}). This table describes the pinned revision;
38
+ {§mcp-authority} owns the SDK-negotiated older-peer surface.
39
39
 
40
40
  | Surface | Upstream contract | Plurnk host disposition |
41
41
  |---|---|---|
@@ -64,6 +64,28 @@ Pagination, caching, and the cap remain the SDK's; a converging server's pages a
64
64
  before. This is a host guard over an upstream behavior, not a second paginator; the upstream
65
65
  report is #601's to file.
66
66
 
67
+ §mcp-catalog-deadline `PLURNK_MCP_CONNECT_TIMEOUT` bounds connection setup and,
68
+ separately, each complete catalog/list walk, including parallel collections and
69
+ all pagination. Failure cancels unfinished sibling lists; it never publishes a
70
+ partial catalog. Caller cancellation and connection shutdown still apply.
71
+ Tool calls, resource reads, prompt retrieval, and their client-input waits retain
72
+ `PLURNK_MCP_REQUEST_TIMEOUT`; discovery does not borrow that operation allowance.
73
+
74
+ §mcp-retry-pacing Every retry the adapter schedules on its own — reopening a dropped
75
+ subscription, refreshing a catalog a server announced as changed — waits
76
+ `PLURNK_MCP_RETRY_FLOOR_MS`, doubling per attempt up to `PLURNK_MCP_RETRY_CEILING_MS`.
77
+ One pacing serves them all; a ceiling beneath the floor fails configuration. The
78
+ deadlines above bound an attempt; this paces the next one.
79
+
80
+ §mcp-catalog-list-absence **An unsupported list method does not disable the server.**
81
+ At the first page of `tools/list`, `resources/list`, `resources/templates/list`, or
82
+ `prompts/list`, JSON-RPC `-32601` yields an empty collection for that method and an
83
+ availability detail naming the unsupported method. This is host tolerance, not
84
+ a claim that the server satisfies its advertised capabilities. The empty result
85
+ is immediately stale; a later successful listing clears the diagnostic. An error
86
+ after the first page, any other protocol error, transport/authentication failure,
87
+ or non-convergence remains a failure. SDK pagination and caching retain ownership.
88
+
67
89
  ## §mcp-tasks Tasks extension
68
90
 
69
91
  Tasks is the optional `io.modelcontextprotocol/tasks` extension, never core
@@ -81,22 +103,30 @@ interaction per observed input set. A completed Task is validated as the
81
103
  originating tool result; a failed Task preserves its JSON-RPC error.
82
104
  Handle ownership and the restart journey are bounded in {§tasks-lifetime}.
83
105
 
84
- ## §tasks-lifetime Tasks lifetime and re-run
106
+ §mcp-subscription-ownership Notification filters belong to the shared connection,
107
+ not an individual operation. Acquiring or releasing Task interest schedules a
108
+ filter update without blocking Task polling, settlement, or cancellation; the
109
+ ordinary `tasks/get` path remains available before acknowledgement and during
110
+ watch recovery. A resource READ may await cache-watch setup, but owner
111
+ cancellation ends only that caller's wait. It neither cancels another caller's
112
+ setup nor closes the connection. Filter acknowledgement, overlap replacement,
113
+ retry, and teardown retain one connection-level owner.
114
+
115
+ ## §tasks-lifetime Tasks lifetime
85
116
 
86
- Task handles are owned in-process by the connection and operation that created
87
- them; Plurnk deliberately declines durable task-handle recovery. A durable
88
- handle would need a persisted scheduler and a home for a result whose owning
89
- operation does not outlive the daemon; the ordinary Plurnk journey is that a
90
- restart re-runs the operation, which drives a fresh task. The server's own
91
- persistence of task state is respected only within one connection lifetime;
92
- nothing task-shaped is written to SQLite and no MCP sidecar lifecycle exists.
117
+ Task handles belong to the connection and operation that created them. They
118
+ are process-local, never persisted or automatically replayed. Ordinary host
119
+ lifecycle owns interruption and recovery ({§worker-lifecycle-restart-recovery});
120
+ MCP adds no second scheduler or client-disconnect policy.
93
121
 
94
122
  | Boundary | Behaviour |
95
123
  |---|---|
96
- | Client disconnect | The daemon-owned operation and its task keep running; the client reattaches to the operation, not the task. |
97
- | Daemon restart | The connection and every in-flight task handle die with it; the tool call fails like any interrupted operation, the loop re-runs, and the tool call creates a fresh task. |
98
- | Workspace reactivation | The attachment reconstructs from its durable definition; in-flight tasks on the replaced connection are abandoned, not resumed. |
99
- | Expiry | The owning operation deadline bounds polling; a non-converging task fails at the standard round bound and is cancelled. |
124
+ | Client interrupt / reattach | The live operation retains its pending input across the intentional Run boundary; synchronization re-presents it ({§agui-conversation-sync}). |
125
+ | Client hangup | Inherits the owning client's cancellation or observer-detachment semantics; MCP does not change them. |
126
+ | Graceful shutdown | Aborts and settles owned work before closing its protocol connection ({§mcp-connection-shutdown}). |
127
+ | Restart after owner loss | No Task resume or automatic tool replay; core reconciles the interrupted operation and its durable evidence. |
128
+ | Workspace reactivation | Reconstructs the attachment from its definition, not an old Task handle. Active Tasks retain workspace residency ({§module-workspace-residency}). |
129
+ | Expiry | The owning operation deadline also bounds client-input waits ({§mcp-input-deadline}); expiry cancels the Task before settling the failed operation. MRTR retains its separate round bound. |
100
130
  | Cancellation | Owner abort cancels the task before settling; the handle is then terminal. |
101
131
  | Already terminal | Terminal results and errors are consumed by the drive loop; a completed or failed task is never re-polled or re-resumed. |
102
132
 
@@ -107,7 +137,7 @@ nothing task-shaped is written to SQLite and no MCP sidecar lifecycle exists.
107
137
  | Deprecated | Roots, Sampling, Logging | Do not advertise or implement; use explicit resources/tool arguments, Plurnk's provider layer, and stderr/OpenTelemetry respectively |
108
138
  | Deprecated | HTTP+SSE transport; Sampling `includeContext` values | Do not adopt; use Streamable HTTP and no Sampling |
109
139
  | Deprecated fallback | OAuth Dynamic Client Registration | Prefer pre-registration, then CIMD when advertised; use DCR only when authorization-server metadata advertises `registration_endpoint`; otherwise fail without probing an inferred endpoint |
110
- | Removed | `initialize`, `notifications/initialized`, `Mcp-Session-Id`, HTTP GET event stream | Reject the legacy lifecycle; every request is stateless and self-contained |
140
+ | Removed at pinned revision | `initialize`, `notifications/initialized`, `Mcp-Session-Id`, HTTP GET event stream | Absent on modern connections; the negotiated older-peer lifecycle remains SDK-owned ({§mcp-authority}) |
111
141
  | Removed | `ping`, `logging/setLevel`, `notifications/roots/list_changed` | Do not send, handle, or teach |
112
142
  | Removed | `resources/subscribe`, `resources/unsubscribe`, SSE resumption and `Last-Event-ID` | Use `subscriptions/listen`; reissue a lost request with a new ID |
113
143
  | Removed | Legacy Tasks `tasks/list`, `tasks/result`, and task-augmentation request fields | Use only the negotiated final Tasks extension |
@@ -131,7 +161,7 @@ The static wire advertisement is derived from the matrix by construction
131
161
  row says `always`, and a `conditional` extension is added only by its owning
132
162
  connection logic ({§oauth-client-credentials}). The matrix unit tests enforce
133
163
  unique identities, no excluded row advertising, supported rows citing evidence,
134
- composed coverage for interactive advertised rows, and exact reconciliation
164
+ composed coverage for every advertised row, and exact reconciliation
135
165
  between the matrix and the derived advertisement. Official required
136
166
  conformance stays a separate named gate, never folded into a matrix row.
137
167
 
@@ -140,14 +170,14 @@ conformance stays a separate named gate, never folded into a matrix row.
140
170
  | Binding | Contract |
141
171
  |---|---|
142
172
  | stdio | Spawn one exact executable with an explicit argument array and no shell; newline-delimited JSON-RPC is the only stdout/stdin traffic; stderr is diagnostic; shutdown closes stdin, waits, then terminates if necessary |
143
- | Streamable HTTP | Send one POST per request or notification; accept JSON or SSE responses; close the response stream to cancel; never open the removed general GET stream |
173
+ | Streamable HTTP | Send one POST per request or notification; accept JSON or SSE responses; close the response stream to cancel; modern connections never open the removed general GET stream |
144
174
 
145
175
  §mcp-stdio-process-ownership A stdio connection owns the complete process group
146
176
  created for its server. Ordinary closure forwards stdin EOF and permits a
147
177
  bounded graceful exit; an expired shutdown bound or disappearance of the host
148
178
  process forcibly terminates the group, including descendants.
149
179
 
150
- Every HTTP request carries matching `MCP-Protocol-Version` and `Mcp-Method`
180
+ At the pinned revision, HTTP requests carry matching `MCP-Protocol-Version` and `Mcp-Method`
151
181
  headers. Named requests also carry `Mcp-Name`; declared primitive tool
152
182
  parameters carry validated `Mcp-Param-*` headers. Header names compare
153
183
  case-insensitively, and body/header disagreement fails instead of guessing.
@@ -194,7 +224,7 @@ unavailable candidate without changing durable state.
194
224
 
195
225
  | Variable | Contract |
196
226
  |---|---|
197
- | `PLURNK_MCP_<server>` | HTTP(S) URL or exact stdio executable |
227
+ | `PLURNK_MCP_<server>` | HTTP(S) URL or exact stdio executable; empty masks the definition ({§mcp-configuration-cascade}) |
198
228
  | `PLURNK_MCP_<server>_ARGS` | JSON string array for stdio |
199
229
  | `PLURNK_MCP_<server>_CWD` | Working directory for stdio |
200
230
  | `PLURNK_MCP_<server>_ENV` | JSON string map for stdio |
@@ -204,7 +234,7 @@ unavailable candidate without changing durable state.
204
234
  | `PLURNK_MCP_<server>_READ` | JSON string array forming an exact subset of enabled tools that the operator classifies as read-only; every other enabled tool retains the conservative `host` effect |
205
235
  | `PLURNK_MCP_<server>_SUMMARY` | Authored one-line server orientation ({§mcp-summary-derivation}) |
206
236
  | `PLURNK_MCP_<server>_<tool>_SUMMARY` | Authored one-line tool orientation; tool names fold the same way and may contain underscores |
207
- | `PLURNK_MCP_ENABLED` | JSON array of exact configured server aliases enabled by default; absent or `[]` enables none |
237
+ | `PLURNK_MCP_ENABLED` | JSON array of exact configured server aliases enabled by default. `[]` is the one spelling of none: the panel states it, and an absent or empty key is refused by name |
208
238
  | `PLURNK_MCP_EXPANDED` | JSON array subset of enabled servers whose every tool is surveyed at turn 0 — one FIND row per executable block of the family document, with aside and signature ({§tools-resource-materialization}); never a document delivered unasked; absent or `[]` expands none |
209
239
  | `PLURNK_MCP_CONNECT_TIMEOUT` | Positive integer milliseconds |
210
240
  | `PLURNK_MCP_REQUEST_TIMEOUT` | Positive integer milliseconds |
@@ -217,18 +247,25 @@ executable string even when its path contains whitespace; arguments never hide
217
247
  inside it. Bearer authentication and a case-insensitive `Authorization` entry
218
248
  in `_HEADERS` are mutually exclusive.
219
249
 
220
- §mcp-summary-derivation **Every orientation line derives from authored
221
- metadata — never a container template.** The runtime declaration's summary
222
- resolves in order: the `_SUMMARY` companion, the server's own
223
- `serverInfo.description`, its display `title` (both spec metadata — a title
224
- like "Chrome DevTools MCP server" is already a one-liner), the first sentence
225
- of its `instructions` essay, then a factual tool-name list derived from the
226
- effective admitted tool registry. Each tool's one-liner
227
- resolves: its `_<server>_<tool>_SUMMARY` companion, `annotations.title`, the
228
- first sentence of its `description` (capped), then the tool name. The family
229
- doc's Summary section and the survey row carry the server one-liner; the tool
250
+ §mcp-summary-derivation **Orientation prefers authored purpose over display
251
+ labels; no capabilities are inferred.** Blank values fall through:
252
+
253
+ | Summary | Precedence, highest first |
254
+ |---|---|
255
+ | Server | `_SUMMARY` → `serverInfo.description` → `instructions` → `serverInfo.title` → effective admitted tool-name list → server alias |
256
+ | Tool | `_<server>_<tool>_SUMMARY` → `description` → `title` → `annotations.title` → tool name |
257
+
258
+ Derived prose is whitespace-normalized, limited to its first sentence, and
259
+ clipped within 80 characters plus an ellipsis, preferring a word boundary. Explicit
260
+ one-line overrides remain intact. Full server instructions remain authored
261
+ Markdown in the family document's runtime `details`, available on demand;
262
+ turn0 surveys only the compact summary/invocations. Full tool descriptions
263
+ remain in the linked input-contract documents. With tools, the runtime declares
264
+ `{ from: "tools", description }`: purpose annotates rather than replaces the
265
+ complete effective menu in the family Summary and survey row
266
+ ({§scheme-catalog-aside}). Without authored purpose the menu stands alone. The tool
230
267
  doc's Summary section IS the invocation form
231
- ```` ```server (tool) <!-- one-liner --> ````, so the discovery row teaches the
268
+ ````` ````server (tool) <!-- one-liner --> `````, so the discovery row teaches the
232
269
  call ({§tools-resource-materialization}). Summary companions expand `${NAME}`
233
270
  references like every other companion.
234
271
 
@@ -265,6 +302,11 @@ transport-inapplicable options before any connection work.
265
302
  §mcp-configuration-cascade MCP server configuration has one field-wise
266
303
  precedence order: service environment, then the workspace's durable definition.
267
304
  Arrays and maps replace their lower value instead of appending or merging.
305
+ An explicitly empty environment target omits that service definition, its
306
+ companions (including summaries), and its inherited `ENABLED`/`EXPANDED`
307
+ selections. Companion values are neither parsed nor expanded. It does not
308
+ remove a workspace-owned definition or prohibit adding one. Genuinely undeclared
309
+ aliases and case-fold collisions still fail validation.
268
310
  Client configuration is not a live layer: the contracts-owned
269
311
  `{§mcp-configuration-overlay}` enters only as the `configuration` of a
270
312
  `discover` query, is parsed by the same owner and path as service environment
@@ -276,6 +318,41 @@ the service at connection preparation.
276
318
 
277
319
  ### §mcp-module The MCP family beneath the coordinator
278
320
 
321
+ §mcp-launch-environment Discovery and stdio connection preparation use the workspace
322
+ environment supplied by Core ({§workspace-env}), never the invoking worker's overrides.
323
+ The admitted workspace environment reaches the actual subprocess; explicit definition
324
+ launch options override it. Symbolic references resolve against the operator environment
325
+ with the same workspace entries and masks applied. Resolved ambient values are never
326
+ copied into durable definitions.
327
+
328
+ An `env` header option on `mcp (add)` becomes that definition's retained stdio launch
329
+ override, with the definition's existing symbolic-reference semantics. On `discover`
330
+ it applies to the probe and its returned candidate. HTTP servers
331
+ have no local process environment and refuse these stdio launch overrides; ordinary
332
+ HTTP authorization/header references may use workspace values. A running server keeps
333
+ its launch environment. Use ordinary `disable` and `enable` to restart it after an env
334
+ change; there is no automatic restart or stale-configuration state.
335
+
336
+ §mcp-working-storage **A local server never implicitly inherits the daemon's
337
+ working directory.** The common connection boundary requires an explicit CWD
338
+ or a host-supplied default. Missing or unusable storage fails connection
339
+ preparation; it never falls back to the project.
340
+
341
+ | Connection | Working directory and lifetime |
342
+ | --- | --- |
343
+ | Attached stdio server without `cwd` | `servers/<alias>` under the module directory from {§module-workspace-directory}; created lazily with mode `0700`, retained across disable/enable, removal, cooling, and daemon restart. |
344
+ | Direct stdio discovery | A unique `discover-*` directory beneath that same module root; removed only after the probe connection closes, including unsuccessful probes. It is never persisted in the candidate definition. |
345
+ | Explicit `cwd` | Honored without creation or cleanup. Relative values resolve against the launcher's CWD, not the default storage directory. |
346
+ | HTTP | No local working directory is allocated. |
347
+
348
+ Host-owned storage does not replace `HOME`, credentials, XDG environment values,
349
+ tool arguments, or the project CWD of ordinary executors. Executables and file
350
+ arguments needing a particular project must name it explicitly or configure
351
+ `cwd`. Stored streams/resources retain their existing ownership. This is a
352
+ default-placement contract, not filesystem confinement or a promise to
353
+ redirect a third-party server's absolute writes. No server-specific flags or
354
+ deprecated roots capability are introduced.
355
+
279
356
  §mcp-management-actions MCP is one family of workspace Functionality
280
357
  ({§functionality-coordinator}): the coordinator publishes `workspace.mcp.list |
281
358
  discover | add | enable | disable | remove` and the model's `mcp` executable fence
@@ -355,7 +432,7 @@ as an accidental failure.
355
432
  | Pending authorization | One pending candidate per `(workspace, alias)`; a new add or customized enable cancels and replaces it. A callback from a superseded attempt fails state validation instead of cross-completing. |
356
433
  | Client disconnect | Does not touch the pending candidate; it can still be completed, or replaced by a fresh request. |
357
434
  | Daemon restart during pending | The candidate is lost: nothing was durable, no attachment publishes, and `oauth.complete` answers `404 oauth-not-pending`. Start authorization again. |
358
- | Daemon restart after authorization | The durable definition rehydrates but tokens are gone; the attachment publishes `authorization-required` and enable returns a fresh `{ status: 202, authorization: { url } }`. The operator reauthorizes. |
435
+ | Daemon restart after authorization | The durable definition rehydrates but tokens are gone; the attachment publishes `authorization-required` and enable returns status `202` with `definition.authorization.url` in the common mutation result. The operator reauthorizes. |
359
436
  | Token expiry | An expired access token surfaces as one unauthorized response; the SDK re-acquires via `refresh_token` when one was issued, otherwise re-enters interactive authorization. |
360
437
  | Refresh | Happens only against the issuer bound during the original authorization; the refreshed token replaces the in-memory token. |
361
438
  | Workspace disable/remove | Closes the attachment and clears its pending candidate; no durable secret deletion is needed because nothing secret is durable. |
@@ -421,7 +498,19 @@ duplicate remote name, an enabled name not representable as a Plurnk target,
421
498
  or a `read` name outside the enabled set fails that workspace activation. No
422
499
  partial namespace is published and every acquired candidate closes.
423
500
 
424
- - §mcp-catalog-refresh-in-place **A catalog change refreshes in place.** When a server announces a changed catalog, the alias is dirty and its executor is rebuilt on the next preparation — on the connection the alias already holds, never by spawning a second server: with an unchanged definition and a live connection, preparation re-lists the catalog over that connection, so neither an aborted attempt nor a commit has anything of the alias to close, and a failed re-listing leaves the current catalog in service. (#429's root: the SDK's negotiated connect probes a stdio server on a disposable sibling process before the real connect, so every stdio connect starts the server twice and the sibling exits on its own schedule — a test that reads "any exit" as "the committed server was closed" flakes under load. The committed server is the last one started; the refresh-in-place rule keeps it so.) Covered: `Module.test.ts` — one process ever, no close marker across the refresh.
501
+ §mcp-catalog-refresh-in-place **A catalog change refreshes in place.** An unchanged
502
+ definition re-lists over its existing connection and atomically republishes its
503
+ executor, documents, and resource facet through {§functionality-publication}.
504
+ SDK cache invalidation and the host's publication acknowledgement are separate
505
+ boundaries; neither closes or replaces the committed connection.
506
+
507
+ | Refresh boundary | Pending invalidation |
508
+ |---|---|
509
+ | Notification | Marks the alias immediately; notifications coalesce under the existing refresh timer. |
510
+ | Successful publication | Acknowledges only the invalidation captured by that preparation. A newer notification remains pending. |
511
+ | Failed listing | Keeps the previous usable snapshot and retries pending work with bounded backoff. |
512
+ | Aborted publication | Does not acknowledge the unpublished catalog. |
513
+ | Disable/remove, workspace cooling, or shutdown | Retires obsolete refresh timers and invalidations. |
425
514
 
426
515
  MCP participates in core Functionality residency ({§module-workspace-residency}).
427
516
  Every tool call and Task retains the workspace from executor entry through its
@@ -444,13 +533,15 @@ commit leaves the durable definition, connection, Registry, docs, and resource
444
533
  authority unchanged. Materialization and registration inspect the complete
445
534
  owning operation result; a non-success preserves its original Problem.
446
535
 
447
- Shutdown first prevents new serialized work, cancels infrastructure watches,
448
- and closes every acquired connection—including a candidate still negotiating.
449
- That cancellation reaches pending OAuth, active requests, and Tasks. It then
450
- waits active mutations to settle, discards process-local snapshots, and reports
451
- every close failure. Whole-connection shutdown retires subscription work before
452
- closing its transport; it does not first issue a redundant per-listen
453
- cancellation.
536
+ §mcp-connection-shutdown Shutdown prevents new work and aborts each connection's
537
+ active requests, including client-input waits. Their protocol cleanup settles
538
+ before the extension channel or connected transport closes, so a created Task
539
+ can receive `tasks/cancel`. Concurrent closers await the same settlement.
540
+ Candidates still negotiating and standalone OAuth transports close immediately.
541
+ Infrastructure watches retire without a redundant per-listen cancellation;
542
+ active mutations settle, process-local snapshots are discarded, and close
543
+ failures are reported. Core's shutdown deadline remains the outer bound
544
+ ({§crash-only-stop}).
454
545
 
455
546
  ## §mcp-host-composition Protocol-to-Plurnk composition
456
547
 
@@ -460,22 +551,31 @@ workspace attachment. The host does not reproduce SDK protocol machinery.
460
551
 
461
552
  | Protocol event | Plurnk composition |
462
553
  |---|---|
463
- | `tools/call` progress | Writes ordinary transient progress on the owning EXEC stream; it creates no log sibling or polling vocabulary. |
464
- | Operation cancellation | The owning EXEC abort signal closes the HTTP request stream or sends the stdio cancellation notification. |
554
+ | `tools/call` progress | Writes ordinary transient progress on the owning execution stream; it creates no log sibling or polling vocabulary. |
555
+ | Operation cancellation | The owning execution's abort signal closes the HTTP request stream or sends the stdio cancellation notification. |
465
556
  | `input_required` | Batches all embedded requests from one result into one atomic client interaction. Opaque `requestState` remains private to the connection and only the originating request is reissued after a complete response. |
466
- | Elicitation form / URL | Validates the response against the requested form or URL action contract. Client cancellation becomes the standard `cancel` action; unsupported families or modes fail before any interaction or retry. |
467
- | Task handle | Keeps the original EXEC stream active, follows `tasks/get` and selected Task notifications, and settles that same stream with the terminal result or error. |
557
+ | Elicitation form / URL | Validates the response against the requested form or URL action contract. Each response-schema property's `description` carries its request message and, for URL mode, the browser URL; a generic schema renderer can present the decision without decoding MCP arguments. Client cancellation becomes the standard `cancel` action; unsupported families or modes fail before any interaction or retry. |
558
+ | Task handle | Keeps the original execution stream active, follows `tasks/get` and selected Task notifications, and settles that same stream with the terminal result or error. |
468
559
  | Task input | Routes through the operation's client interaction, then sends `tasks/update`; it never asks the model to manufacture protocol state. |
469
- | Task cancellation | The owning EXEC cancellation invokes `tasks/cancel` before settling the ordinary stream cancellation. |
470
- | List/resource invalidation | List changes invalidate SDK catalogs and atomically refresh the attachment snapshot. Updates to selected resource URIs invalidate their SDK cache entries; private entries remain authorization-partitioned. |
560
+ | Task cancellation | The owning execution's cancellation invokes `tasks/cancel` before settling the ordinary stream cancellation. |
561
+ | List invalidation | Invalidates SDK catalogs and atomically refreshes the attachment snapshot. |
562
+ | Selected resource update | Invalidates that URI's SDK cache entry; a subsequent READ acquires current content. Private entries remain authorization-partitioned. Earlier READ receipts stay unchanged; ordinary remote changes neither broadcast nor wake workers ({§actor-boundary-lineage-attention}). |
471
563
  | Prompt get / completion | Serves ordinary resource-authority reads and host interactions from negotiated prompt/template definitions; no prompt becomes an executable tool. |
472
564
 
473
565
  The general executor interaction contract, not this package, owns client
474
- interrupt durability and AG-UI presentation. A disconnect re-surfaces its
475
- pending client-owned interaction exactly as proposal review does. MRTR round
566
+ interrupt durability and AG-UI presentation. Reattachment re-surfaces input
567
+ only while its originating operation remains live. MRTR round
476
568
  limits, request timeout, cancellation, and Task terminal state are one
477
569
  operation lifecycle; none becomes a hidden retry loop.
478
570
 
571
+ §mcp-input-deadline Client-input waits consume the remaining owning operation
572
+ budget (`PLURNK_MCP_REQUEST_TIMEOUT`); each MRTR round or Task input set does not
573
+ start a fresh budget. Expiry aborts the input's ordinary Core waiter, removes it
574
+ from pending/reconnect discovery, and enters the same bounded protocol cleanup
575
+ as other operation failures. A late response is no longer pending. No response
576
+ or tool replay is fabricated; the failed operation remains available to the
577
+ worker for recovery. SDK wire-leg timeouts retain ownership of transport waits.
578
+
479
579
  §mcp-tool-replay A tool call is effectful unless host policy proves otherwise.
480
580
  After dispatch, a transport failure cannot prove that the MCP server did not
481
581
  apply the call, so `tool-call-failed` is non-retryable and never recommends
@@ -487,6 +587,12 @@ remote diagnostic as structured extensions. Their prose states only the failed
487
587
  boundary fact; it neither repeats those fields nor infers whether the remote
488
588
  effect occurred.
489
589
 
590
+ §mcp-trailing-aside A tool call's body is one JSON object. HTML comments after
591
+ that object are the writer's aside, not arguments: when the body does not parse
592
+ as written, trailing `<!-- … -->` comments are removed and the object is read.
593
+ Any other trailing text is still `invalid-tool-arguments`. Nothing teaches the
594
+ tolerance (#758).
595
+
490
596
  ## §mcp-result-content Passive result content
491
597
 
492
598
  The default output channel carries the tool's result, not its transport envelope:
@@ -509,7 +615,8 @@ complete result, including metadata and annotations, remains available in
509
615
  Unnamed resources receive eight-character hexadecimal identifiers, not ordinal
510
616
  labels. No binary base64 is copied into the default result body. Listing a
511
617
  resource creates no native model attachment; READ uses {§packet-attachment-parts},
512
- including scoped byte reads, supported modalities, and single-request delivery.
618
+ including scoped byte reads, supported modalities, and the owning READ's retention
619
+ and curation lifecycle.
513
620
  Resource publication is passive; completion of the originating execution retains
514
621
  its ordinary wake semantics. A single `resources/read` content item becomes the
515
622
  resource's typed body; multiple items become named children under its `resources/`
@@ -522,13 +629,23 @@ standalone `blob` content block is not a modern `tools/call` content member
522
629
  protocol-invalid. Size limits and MIME trust remain ordinary channel and
523
630
  entry policy, not MCP-specific rules.
524
631
 
632
+ §mcp-prompt-content Retrieved prompts retain their ordered message list, roles,
633
+ text, and metadata as data, not conversation injections. The same content
634
+ projection used for tools replaces non-text parts with resource links: embedded
635
+ content becomes typed snapshots under the prompt's `resources/` folder; remote
636
+ links resolve through the server resource authority. Reading a snapshot does
637
+ not retrieve the prompt again or discard its arguments. A missing snapshot is
638
+ not found, never an implicit prompt re-execution. The prompt's `#json` preserves
639
+ the complete original response. Media acquisition, native delivery, retention,
640
+ and curation use the ordinary READ contract, not a separate prompt lifecycle.
641
+
525
642
  ## §mcp-apps-exclusion MCP Apps exclusion
526
643
 
527
644
  Plurnk does not advertise or implement MCP Apps. An Apps host must sandbox
528
645
  render third-party HTML/JavaScript, enforce CSP and `_meta.ui` permissions,
529
646
  mediate a `postMessage` JSON-RPC `ui/` dialect, proxy app-initiated tool
530
647
  calls with consent, and own teardown. No Plurnk client can enforce that
531
- sandbox today (terminal and Neovim cannot), the daemon is not a second
648
+ sandbox today (the terminal cannot), the daemon is not a second
532
649
  application platform, and AG-UI has no standard Apps projection — inventing
533
650
  a private event stream to carry Apps is rejected. Tool descriptions carrying
534
651
  `_meta.ui` metadata project into Plurnk without it: model-facing summaries
@@ -538,12 +655,24 @@ non-advertised ({§mcp-capability-matrix}). Re-evaluate only when a
538
655
  sandbox-capable client exists and a standard AG-UI projection is agreed;
539
656
  even then the capability would be per-client-advertised, never daemon-wide.
540
657
 
658
+ ## §mcp-skills-deferral Skills extension adoption boundary
659
+
660
+ Plurnk does not advertise or implement `io.modelcontextprotocol/skills`.
661
+ [SEP-2640](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/2640-skills-extension.md)
662
+ is Final, with a
663
+ [stable extension specification](https://github.com/modelcontextprotocol/ext-skills/blob/main/specification/stable/skills.mdx).
664
+ Deferral concerns host integration, not standards maturity: origin-qualified
665
+ identities, manifest verification, content-bound approval, and activation
666
+ must compose with the existing skills, resource, and proposal owners before
667
+ adoption. Reading an MCP resource does not claim extension support or activate
668
+ it as a skill. The design review is tracked in #654.
669
+
541
670
  ## §mcp-model-projection Model-facing projection
542
671
 
543
672
  | MCP surface | Plurnk surface |
544
673
  |---|---|
545
674
  | Server | One registered executor family, `worker:///_plurnk/tools/<server>.md`, and matching resource scheme |
546
- | Enabled tool | One annotated call in the compact family document plus one exact `worker:///_plurnk/tools/<server>/<encoded-tool>.md` input-contract document |
675
+ | Enabled tool | One annotated call in the compact family document plus one exact `worker:///_plurnk/tools/<server>/<encoded-tool>.json` input-contract document |
547
676
  | Tool survey | Ordinary FIND summary metadata from the standard executable-tool resource tree |
548
677
  | Resource catalog | `<server>:///` and `<server>:///resources` |
549
678
  | Resources | `<server>:///resources` and encoded resource-URI descendants |
@@ -566,9 +695,7 @@ The compact family document contains annotated, copyable tool invocations with
566
695
  shallow required-field previews and alias-scoped schema links. Each linked child
567
696
  preserves the complete remote description and raw input schema, without
568
697
  reconstructing property tables or expanding nested constraints into the preview.
569
- A missing remote description falls back to the tool name rather than an invented
570
- capability claim. Output schemas
571
- do not enter model teaching; the returned value remains ordinary evidence. Disabled names
698
+ Output schemas do not enter model teaching; the returned value remains ordinary evidence. Disabled names
572
699
  appear in neither discovery nor admission, and there is no MCP-specific FIND,
573
700
  READ, authority-root, or other model discovery mechanism for tools.
574
701
 
@@ -591,6 +718,10 @@ target is an internal contract violation rather than a conservative guess.
591
718
  Protocol conformance runs through official
592
719
  `@modelcontextprotocol/conformance@0.2.0-alpha.11`, whose immutable
593
720
  `2026-07-28` requirement manifest freezes the release-time alpha.10 scenario
594
- set. The core client leg must pass; supported extension scenarios run and
595
- report separately because Tasks cannot alter the core pass rate. Atlas and
596
- third-party stdio/Streamable HTTP servers are composition evidence only.
721
+ set. Its required client leg must pass; `not_scored` probes remain visible
722
+ without changing that verdict. The adopted `auth/client-credentials-basic`
723
+ extension runs as a separate named gate requiring successful grant and bearer
724
+ checks; an empty or skipped report never passes. Extension scenarios have no
725
+ dated-spec filter and do not alter the core pass rate. The JWT arm remains
726
+ excluded under {§oauth-client-credentials}. Atlas and third-party
727
+ stdio/Streamable HTTP servers are composition evidence only.
@@ -0,0 +1,11 @@
1
+ import type { ContentBlock, ResourceLink, TextContent } from "@modelcontextprotocol/client";
2
+ import type { EntryData } from "@plurnk/plurnk-schemes";
3
+ interface ResourceProjection {
4
+ address(uri: string): string | Promise<string>;
5
+ publish?(channel: EntryData["channels"][string], name?: string): Promise<string>;
6
+ }
7
+ export default class ContentProjection {
8
+ static project(part: ContentBlock, resources: ResourceProjection): Promise<TextContent | ResourceLink>;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=ContentProjection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentProjection.d.ts","sourceRoot":"","sources":["../src/ContentProjection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,UAAU,kBAAkB;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpF;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,OAAa,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC,CAgB3G;CACJ"}
@@ -0,0 +1,24 @@
1
+ import ResourceContent from "./ResourceContent.js";
2
+ export default class ContentProjection {
3
+ static async project(part, resources) {
4
+ if (part.type === "text")
5
+ return part;
6
+ if (part.type === "resource_link")
7
+ return { ...part, uri: await resources.address(part.uri) };
8
+ if (resources.publish === undefined)
9
+ throw new Error("MCP content requires a resource publisher.");
10
+ const name = part.type === "resource" ? ResourceContent.name(part.resource) : undefined;
11
+ const channel = part.type === "resource" ? ResourceContent.channel(part.resource)
12
+ : { content: "", bytes: Buffer.from(part.data, "base64"), mimetype: part.mimeType };
13
+ const uri = await resources.publish(channel, name);
14
+ return {
15
+ type: "resource_link",
16
+ uri,
17
+ name: name ?? decodeURIComponent(new URL(uri).pathname.split("/").at(-1)),
18
+ mimeType: channel.mimetype,
19
+ ...(part.annotations === undefined ? {} : { annotations: part.annotations }),
20
+ ...(part._meta === undefined ? {} : { _meta: part._meta }),
21
+ };
22
+ }
23
+ }
24
+ //# sourceMappingURL=ContentProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentProjection.js","sourceRoot":"","sources":["../src/ContentProjection.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAOnD,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAkB,EAAE,SAA6B;QAClE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9F,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACnG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC7E,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxF,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO;YACH,IAAI,EAAE,eAAe;YACrB,GAAG;YACH,IAAI,EAAE,IAAI,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;YAC1E,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;SAC7D,CAAC;IACN,CAAC;CACJ"}
@@ -14,7 +14,7 @@ export declare const toolResultBody: (result: ToolResultShape, runtime: string,
14
14
  content: string;
15
15
  mimetype: string;
16
16
  }>;
17
- export declare const runtimeDecl: (name: string, summary: RuntimeSummaryDecl, expandTools: boolean) => RuntimeDecl;
17
+ export declare const runtimeDecl: (name: string, summary: RuntimeSummaryDecl, expandTools: boolean, instructions?: string) => RuntimeDecl;
18
18
  export default class McpExecutor extends BaseExecutor {
19
19
  #private;
20
20
  constructor(metadata: {
@@ -1 +1 @@
1
- {"version":3,"file":"McpExecutor.d.ts","sourceRoot":"","sources":["../src/McpExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAKf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACR,WAAW,EACX,MAAM,EACN,QAAQ,EACR,UAAU,EAEV,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,gBAAgB,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,8BAA8B,CAAC;AAGjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiC9C,eAAO,MAAM,aAAa,SAChB,MAAM,WACH,aAAa,GAAG,SAAS,YACxB,MAAM,GAAG,SAAS,KAC7B,MAOF,CAAC;AAIF,eAAO,MAAM,oBAAoB,SACvB,MAAM,WACH,aAAa,GAAG,SAAS,YACxB,MAAM,GAAG,SAAS,KAC7B,kBAIF,CAAC;AAMF,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,WAAkB,eAAe,WAAW,MAAM,UAAU,QAAQ,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAyBvJ,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,MAAM,WAAW,kBAAkB,eAAe,OAAO,KAAG,WAc5F,CAAC;AAuBH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,YAAY;;IASjD,YACI,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAC5C,UAAU,EAAE,gBAAgB,EAC5B,eAAe,EAAE,MAAM,MAAM,IAAI,EACjC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,EAChC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAQ9C;IAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAOpD;IAEQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAK7C;IAED,IAAa,gBAAgB,IAAI,MAAM,CAEtC;IAgCD,YAAY,IAAI,mBAAmB,CAKlC;IAED,IAAI,OAAO,IAAI,aAAa,CAK3B;IAEc,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgBvE;IAEK,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqBzE;IAEK,GAAG,CAAC,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,GACR,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CA2HhC;CACJ"}
1
+ {"version":3,"file":"McpExecutor.d.ts","sourceRoot":"","sources":["../src/McpExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAKf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACR,WAAW,EACX,MAAM,EACN,QAAQ,EACR,UAAU,EAEV,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,gBAAgB,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,8BAA8B,CAAC;AAGjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB9C,eAAO,MAAM,aAAa,SAChB,MAAM,WACH,aAAa,GAAG,SAAS,YACxB,MAAM,GAAG,SAAS,KAC7B,MAOF,CAAC;AAGF,eAAO,MAAM,oBAAoB,SACvB,MAAM,WACH,aAAa,GAAG,SAAS,YACxB,MAAM,GAAG,SAAS,KAC7B,kBAKF,CAAC;AAMF,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,WAAkB,eAAe,WAAW,MAAM,UAAU,QAAQ,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAqBvJ,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,MAAM,WAAW,kBAAkB,eAAe,OAAO,iBAAiB,MAAM,KAAG,WAenH,CAAC;AAuBH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,YAAY;;IAoBjD,YACI,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAC5C,UAAU,EAAE,gBAAgB,EAC5B,eAAe,EAAE,MAAM,MAAM,IAAI,EACjC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,EAChC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAQ9C;IAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAOpD;IAEQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAK7C;IAED,IAAa,gBAAgB,IAAI,MAAM,CAEtC;IAgCD,YAAY,IAAI,mBAAmB,CAKlC;IAED,IAAI,OAAO,IAAI,aAAa,CAK3B;IAEc,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgBvE;IAEK,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwBzE;IAEK,GAAG,CAAC,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,GACR,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CA2HhC;CACJ"}