@vibesdotdev/mcp 1.0.0-rc.2 → 1.0.0-rc.5

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 (167) hide show
  1. package/README.md +11 -11
  2. package/dist/adapters/index.d.ts +0 -2
  3. package/dist/adapters/index.d.ts.map +1 -1
  4. package/dist/adapters/index.js +0 -2
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/adapters/mcp/connection-identity.d.ts +18 -0
  7. package/dist/adapters/mcp/connection-identity.d.ts.map +1 -1
  8. package/dist/adapters/mcp/connection-identity.js +26 -0
  9. package/dist/adapters/mcp/connection-identity.js.map +1 -1
  10. package/dist/adapters/mcp/dual-era-handler.d.ts +22 -0
  11. package/dist/adapters/mcp/dual-era-handler.d.ts.map +1 -0
  12. package/dist/adapters/mcp/dual-era-handler.js +150 -0
  13. package/dist/adapters/mcp/dual-era-handler.js.map +1 -0
  14. package/dist/adapters/mcp/index.d.ts +0 -4
  15. package/dist/adapters/mcp/index.d.ts.map +1 -1
  16. package/dist/adapters/mcp/index.js +2 -10
  17. package/dist/adapters/mcp/index.js.map +1 -1
  18. package/dist/adapters/mcp/mcp-http-session.d.ts +1 -1
  19. package/dist/adapters/mcp/mcp-http-session.d.ts.map +1 -1
  20. package/dist/adapters/mcp/mcp-http-session.js +1 -1
  21. package/dist/adapters/mcp/mcp-http-session.js.map +1 -1
  22. package/dist/adapters/mcp/projection-doctor.d.ts.map +1 -1
  23. package/dist/adapters/mcp/projection-doctor.js +11 -4
  24. package/dist/adapters/mcp/projection-doctor.js.map +1 -1
  25. package/dist/adapters/mcp/projection.d.ts +1 -1
  26. package/dist/adapters/mcp/projection.d.ts.map +1 -1
  27. package/dist/adapters/mcp/projection.js.map +1 -1
  28. package/dist/adapters/mcp/sampling-context.d.ts.map +1 -1
  29. package/dist/adapters/mcp/sampling-context.js +1 -1
  30. package/dist/adapters/mcp/sampling-context.js.map +1 -1
  31. package/dist/adapters/mcp/sampling.d.ts +1 -1
  32. package/dist/adapters/mcp/sampling.d.ts.map +1 -1
  33. package/dist/adapters/mcp/server.consumer.d.ts +1 -1
  34. package/dist/adapters/mcp/server.consumer.d.ts.map +1 -1
  35. package/dist/adapters/mcp/server.consumer.js +59 -32
  36. package/dist/adapters/mcp/server.consumer.js.map +1 -1
  37. package/dist/adapters/mcp/server.d.ts +1 -22
  38. package/dist/adapters/mcp/server.d.ts.map +1 -1
  39. package/dist/adapters/mcp/server.js +232 -266
  40. package/dist/adapters/mcp/server.js.map +1 -1
  41. package/dist/adapters/mcp/startup-refusal.d.ts +2 -2
  42. package/dist/adapters/mcp/startup-refusal.d.ts.map +1 -1
  43. package/dist/adapters/mcp/startup-refusal.js +10 -10
  44. package/dist/adapters/mcp/startup-refusal.js.map +1 -1
  45. package/dist/adapters/mcp/stdio-relay.d.ts +1 -34
  46. package/dist/adapters/mcp/stdio-relay.d.ts.map +1 -1
  47. package/dist/adapters/mcp/stdio-relay.js +55 -71
  48. package/dist/adapters/mcp/stdio-relay.js.map +1 -1
  49. package/dist/adapters/mcp/tool-approval.d.ts +35 -0
  50. package/dist/adapters/mcp/tool-approval.d.ts.map +1 -0
  51. package/dist/adapters/mcp/tool-approval.js +156 -0
  52. package/dist/adapters/mcp/tool-approval.js.map +1 -0
  53. package/dist/adapters/mcp/tool-audit-live.d.ts +8 -12
  54. package/dist/adapters/mcp/tool-audit-live.d.ts.map +1 -1
  55. package/dist/adapters/mcp/tool-audit-live.js +9 -13
  56. package/dist/adapters/mcp/tool-audit-live.js.map +1 -1
  57. package/dist/adapters/mcp/tool-audit.d.ts +5 -0
  58. package/dist/adapters/mcp/tool-audit.d.ts.map +1 -1
  59. package/dist/adapters/mcp/tool-audit.js +73 -5
  60. package/dist/adapters/mcp/tool-audit.js.map +1 -1
  61. package/dist/adapters/mcp/trust-tag.d.ts.map +1 -1
  62. package/dist/adapters/mcp/trust-tag.js +5 -0
  63. package/dist/adapters/mcp/trust-tag.js.map +1 -1
  64. package/dist/adapters/mcp/web-handler.d.ts +6 -1
  65. package/dist/adapters/mcp/web-handler.d.ts.map +1 -1
  66. package/dist/adapters/mcp/web-handler.js +33 -13
  67. package/dist/adapters/mcp/web-handler.js.map +1 -1
  68. package/dist/adapters/transport-bun-http.d.ts +7 -3
  69. package/dist/adapters/transport-bun-http.d.ts.map +1 -1
  70. package/dist/adapters/transport-bun-http.js +5 -5
  71. package/dist/adapters/transport-bun-http.js.map +1 -1
  72. package/dist/adapters/types.d.ts +7 -9
  73. package/dist/adapters/types.d.ts.map +1 -1
  74. package/dist/adapters/zod-mcp.d.ts.map +1 -1
  75. package/dist/adapters/zod-mcp.js +4 -6
  76. package/dist/adapters/zod-mcp.js.map +1 -1
  77. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts.map +1 -1
  78. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js +6 -1
  79. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js.map +1 -1
  80. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts.map +1 -1
  81. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js +2 -0
  82. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js.map +1 -1
  83. package/dist/config/mcp.config.descriptor.d.ts +28 -33
  84. package/dist/config/mcp.config.descriptor.d.ts.map +1 -1
  85. package/dist/config/mcp.config.descriptor.js +23 -19
  86. package/dist/config/mcp.config.descriptor.js.map +1 -1
  87. package/dist/docs/resources.docs.descriptor.d.ts.map +1 -1
  88. package/dist/docs/resources.docs.descriptor.js +43 -332
  89. package/dist/docs/resources.docs.descriptor.js.map +1 -1
  90. package/dist/docs/server.docs.descriptor.d.ts.map +1 -1
  91. package/dist/docs/server.docs.descriptor.js +71 -300
  92. package/dist/docs/server.docs.descriptor.js.map +1 -1
  93. package/dist/docs/tools.docs.descriptor.d.ts.map +1 -1
  94. package/dist/docs/tools.docs.descriptor.js +69 -244
  95. package/dist/docs/tools.docs.descriptor.js.map +1 -1
  96. package/dist/index.d.ts +7 -7
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +6 -6
  99. package/dist/index.js.map +1 -1
  100. package/dist/mcp.runtime.plugin.d.ts.map +1 -1
  101. package/dist/mcp.runtime.plugin.js +3 -1
  102. package/dist/mcp.runtime.plugin.js.map +1 -1
  103. package/dist/svelte/tool-widgets/summary.d.ts +2 -2
  104. package/dist/svelte/tool-widgets/summary.d.ts.map +1 -1
  105. package/dist/svelte/tool-widgets/summary.js +9 -4
  106. package/dist/tools/vibes-context/schemas.d.ts +2 -1
  107. package/dist/tools/vibes-context/schemas.d.ts.map +1 -1
  108. package/dist/tools/vibes-context/schemas.js +22 -4
  109. package/dist/tools/vibes-context/schemas.js.map +1 -1
  110. package/dist/tools/vibes-context/vibes-context.descriptor.d.ts.map +1 -1
  111. package/dist/tools/vibes-context/vibes-context.descriptor.js +11 -1
  112. package/dist/tools/vibes-context/vibes-context.descriptor.js.map +1 -1
  113. package/dist/tools/vibes-context/vibes-context.impl.d.ts.map +1 -1
  114. package/dist/tools/vibes-context/vibes-context.impl.js +22 -11
  115. package/dist/tools/vibes-context/vibes-context.impl.js.map +1 -1
  116. package/dist/types.d.ts +0 -32
  117. package/dist/types.d.ts.map +1 -1
  118. package/dist/types.js +1 -0
  119. package/dist/types.js.map +1 -1
  120. package/dist/types.registry.d.ts +0 -59
  121. package/dist/types.registry.d.ts.map +1 -1
  122. package/dist/types.registry.js.map +1 -1
  123. package/package.json +61 -92
  124. package/dist/adapters/compatibility.d.ts +0 -20
  125. package/dist/adapters/compatibility.d.ts.map +0 -1
  126. package/dist/adapters/compatibility.js +0 -57
  127. package/dist/adapters/compatibility.js.map +0 -1
  128. package/dist/adapters/host-context.consumer.d.ts +0 -12
  129. package/dist/adapters/host-context.consumer.d.ts.map +0 -1
  130. package/dist/adapters/host-context.consumer.js +0 -10
  131. package/dist/adapters/host-context.consumer.js.map +0 -1
  132. package/dist/adapters/host-context.d.ts +0 -32
  133. package/dist/adapters/host-context.d.ts.map +0 -1
  134. package/dist/adapters/host-context.js +0 -17
  135. package/dist/adapters/host-context.js.map +0 -1
  136. package/dist/adapters/mcp/context.d.ts +0 -137
  137. package/dist/adapters/mcp/context.d.ts.map +0 -1
  138. package/dist/adapters/mcp/context.js +0 -230
  139. package/dist/adapters/mcp/context.js.map +0 -1
  140. package/dist/adapters/mcp/formatters.d.ts +0 -41
  141. package/dist/adapters/mcp/formatters.d.ts.map +0 -1
  142. package/dist/adapters/mcp/formatters.js +0 -102
  143. package/dist/adapters/mcp/formatters.js.map +0 -1
  144. package/dist/adapters/mcp/from-api-endpoint.d.ts +0 -59
  145. package/dist/adapters/mcp/from-api-endpoint.d.ts.map +0 -1
  146. package/dist/adapters/mcp/from-api-endpoint.js +0 -206
  147. package/dist/adapters/mcp/from-api-endpoint.js.map +0 -1
  148. package/dist/adapters/mcp/vibes-types.d.ts +0 -115
  149. package/dist/adapters/mcp/vibes-types.d.ts.map +0 -1
  150. package/dist/adapters/mcp/vibes-types.js +0 -7
  151. package/dist/adapters/mcp/vibes-types.js.map +0 -1
  152. package/dist/mcp/index.d.ts +0 -20
  153. package/dist/mcp/index.d.ts.map +0 -1
  154. package/dist/mcp/index.js +0 -19
  155. package/dist/mcp/index.js.map +0 -1
  156. package/dist/mcp.consumer.plugin.d.ts +0 -4
  157. package/dist/mcp.consumer.plugin.d.ts.map +0 -1
  158. package/dist/mcp.consumer.plugin.js +0 -19
  159. package/dist/mcp.consumer.plugin.js.map +0 -1
  160. package/dist/schemas/host-adapters.d.ts +0 -14
  161. package/dist/schemas/host-adapters.d.ts.map +0 -1
  162. package/dist/schemas/host-adapters.js +0 -7
  163. package/dist/schemas/host-adapters.js.map +0 -1
  164. package/dist/schemas/tool.d.ts +0 -8
  165. package/dist/schemas/tool.d.ts.map +0 -1
  166. package/dist/schemas/tool.js +0 -8
  167. package/dist/schemas/tool.js.map +0 -1
@@ -2,13 +2,13 @@ const descriptor = {
2
2
  kind: 'docs/topic',
3
3
  id: 'mcp.server',
4
4
  title: 'MCP Server',
5
- summary: 'Model Context Protocol server setup, transport, and lifecycle',
5
+ summary: 'Model Context Protocol server composition, transport, and lifecycle',
6
6
  body: {
7
7
  type: 'markdown',
8
8
  sourceType: 'raw',
9
9
  source: `---
10
10
  title: MCP Server
11
- summary: Model Context Protocol server setup and lifecycle management
11
+ summary: Model Context Protocol server composition, transport, and lifecycle
12
12
  tags: [mcp, server, transport, lifecycle, protocol]
13
13
  parent: mcp
14
14
  order: 1
@@ -21,343 +21,114 @@ man:
21
21
  seeAlso: ["mcp.tools", "dev.mcp.start", "dev.mcp.serve"]
22
22
  ---
23
23
 
24
- The **Model Context Protocol (MCP)** server enables AI agents to discover and invoke tools, access resources, and use prompts from the runtime.
24
+ The MCP server projects the runtime's \`tools/tool\` catalog over the Model
25
+ Context Protocol. One adapter owns tool registration, session admission, error
26
+ projection and trust framing; the surface owns only its transport and lifecycle.
25
27
 
26
- ## Server architecture
28
+ ## Composition
27
29
 
28
- MCP server exposes runtime capabilities via standard protocol:
30
+ Compose \`@vibesdotdev/mcp/plugin\` on every MCP host. It registers the protocol
31
+ kinds, docs, configuration and the universal \`vibes-context\` orientation loader.
32
+ Adapter-only hosts compose \`./client/plugin\`.
29
33
 
30
- \`\`\`
31
- ┌─────────────────┐
32
- │ MCP Client │ ←→ MCP Protocol (JSON-RPC)
33
- │ (Claude, etc.) │
34
- └─────────────────┘
35
- ↓
36
- ┌─────────────────┐
37
- │ MCP Server │ ←→ Runtime (tools/resources/prompts)
38
- │ (@vibesdotdev/mcp)
39
- └─────────────────┘
40
- \`\`\`
41
-
42
- ## Transport modes
34
+ The consumer serve, the cloud Worker and the shared stdio host use the same
35
+ composition. There is no consumer-specific MCP plugin and no root host-adapter
36
+ compatibility factory.
43
37
 
44
- ### Stdio transport (default)
38
+ ## Transports
45
39
 
46
- Communicate via standard streams:
40
+ Stdio and HTTP use the tool-aware adapter:
47
41
 
48
42
  \`\`\`ts
49
43
  import { createMcpAdapter } from '@vibesdotdev/mcp/adapters/mcp';
50
44
 
51
- const adapter = createMcpAdapter(runtime, { mode: 'stdio', preset: 'full' }, logger);
45
+ const adapter = createMcpAdapter(runtime, { mode: 'stdio' }, logger);
52
46
  await adapter.start();
53
- // On host shutdown:
54
47
  await adapter.shutdown();
55
48
  \`\`\`
56
49
 
57
- **Use when:** Local MCP clients (Claude Desktop, IDE plugins).
58
-
59
- ### HTTP transport (Web Standard streamable HTTP)
60
-
61
- Bun-native HTTP server using Web Standard APIs (not SSE):
50
+ A serverless or edge host uses the Web Standard handler:
62
51
 
63
52
  \`\`\`ts
64
- import { createBunMcpServer } from '@vibesdotdev/mcp/adapters';
65
- import { createMcpAuthenticator } from '@vibesdotdev/mcp';
66
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
67
- import { getRuntimeHttpListener } from '@vibesdotdev/kernel';
53
+ import { createMcpWebStandardHandler } from '@vibesdotdev/mcp/adapters/mcp/web-handler';
68
54
 
69
- const server = createBunMcpServer({
70
- listener: getRuntimeHttpListener(runtime),
71
- port: 3001,
72
- hostname: '0.0.0.0',
73
- buildServer: () => new McpServer({ name: 'my-server', version: '1.0.0' }),
74
- logger: myLogger,
75
- lifecycle: runtime.lifecycle,
76
- authenticate: createMcpAuthenticator({ remote: true, scope: 'mcp' })
55
+ const handle = createMcpWebStandardHandler(runtime, {
56
+ mode: 'http',
57
+ serverName: 'vibes',
58
+ logger
77
59
  });
78
-
79
- await server.start();
80
60
  \`\`\`
81
61
 
82
- \`lifecycle\` is the serving runtime's: idle sessions expire per request on every
83
- host, and a persistent host also sweeps them on its runtime-owned interval (a
84
- finite host has no background sweep). Disposing the runtime clears it.
62
+ The handler serves both protocol eras on one endpoint. A 2026-07-28 request
63
+ carries its per-request \`_meta\` envelope and is served statelessly, with one
64
+ fresh server instance and no session id. A 2025-era request keeps the legacy
65
+ \`initialize\` handshake, \`Mcp-Session-Id\` continuity and its SSE streams.
66
+ The same split applies to stdio: the SDK's \`serveStdio\` pins one factory
67
+ instance per connection and serves either era.
85
68
 
86
- **Use when:** Remote MCP clients, cloud deployments, Workers (use \`createMcpFetchHandler\` instead of \`createBunMcpServer\` in a Workers environment).
69
+ ## Identity
87
70
 
88
- **Note:** This transport uses Web Standard streamable HTTP (MCP Streamable HTTP transport; the SDK negotiates protocol version, defaulting to 2025-03-26 and supporting up to 2025-11-25). There are no \`/mcp/sse\` or \`/mcp/message\` endpoints — the server handles all MCP traffic through a single fetch handler.
71
+ \`serverName\` is host-owned. The Vibes hosts pass \`vibes\`; the framework
72
+ default is neutral. \`serverVersion\` defaults to this package's version. The
73
+ \`vibes://diagnostics/projection-birth\` resource carries the build provenance
74
+ and catalog digest.
89
75
 
90
- ## Server lifecycle
76
+ ## Tool catalog
91
77
 
92
- ### Starting MCP server
78
+ The adapter folds \`tools/tool\` once per catalog revision, applies the selected
79
+ preset and registers the selected descriptors. A settled fold excludes tools
80
+ whose loader is unavailable; a required tool without a loader refuses to serve.
81
+ The catalog is not mutated per connection.
93
82
 
94
- \`\`\`bash
95
- vibes dev mcp start
96
- \`\`\`
83
+ The long tail is discoverable through \`tool-search\`, readable through
84
+ \`tool-help\` and callable through \`tool-call\`. The bridge refuses nested write
85
+ actions; the target tool's own host approval path owns those.
97
86
 
98
- Starts MCP server in background with stdio transport.
87
+ ## Sessions and approval
99
88
 
100
- ### Serving HTTP endpoint
89
+ Session owns durable participants and authority. The \`session\` tool mints and
90
+ binds explicit handles; the transport does not invent a role or a capability
91
+ ceiling. A harness is a transport, not a role.
101
92
 
102
- \`\`\`bash
103
- vibes dev mcp serve --port 3001
104
- \`\`\`
93
+ \`requiresApproval: true\` is enforced through the SDK's multi-round-trip
94
+ input seam. A 2026-07-28 client receives \`input_required\` with a form
95
+ elicitation; a 2025-era client receives the same flow through the real
96
+ \`elicitation/create\` legacy shim. The approval is bound to a signed
97
+ \`requestState\`, so a caller cannot pre-supply an acceptance without the
98
+ prompt. A client without elicitation is refused
99
+ \`UNAVAILABLE / tool-approval-unavailable\`; a decline is
100
+ \`PERMISSION_DENIED / tool-approval-declined\`.
105
101
 
106
- Starts HTTP server using Web Standard streamable HTTP transport (not SSE).
102
+ ## Configuration
107
103
 
108
- ### Stopping server
109
-
110
- \`\`\`bash
111
- vibes dev mcp stop
112
- \`\`\`
113
-
114
- Gracefully shuts down server.
115
-
116
- ### Restarting server
117
-
118
- \`\`\`bash
119
- vibes dev mcp restart
120
- \`\`\`
121
-
122
- Stops and restarts server (picks up config changes).
123
-
124
- ## Server configuration
125
-
126
- ### MCP adapter options
127
-
128
- \`\`\`ts
129
- import type { McpAdapterOptions } from '@vibesdotdev/mcp';
130
- import { createMcpAdapter } from '@vibesdotdev/mcp/adapters/mcp';
131
- import { createMcpAuthenticator } from '@vibesdotdev/mcp';
132
-
133
- // \`runtime\` is the VibesRuntime handed to your host entry. The token is a credential.
134
- const token = await runtime.resolveCredential({ source: 'secret', key: 'MCP_TOKEN' });
135
- if (!token.ok) throw token.error;
136
-
137
- const options: McpAdapterOptions = {
138
- mode: 'http', // 'stdio' | 'http'
139
- mcpClientId: 'claude-desktop', // Client identifier (optional)
140
- logLevel: 'info', // LogLevel (optional)
141
- toolExecutionTimeoutMs: 30_000, // Per-tool timeout (optional)
142
- port: 3001, // http mode only
143
- authenticate: createMcpAuthenticator({
144
- apiKeys: [token.value],
145
- scope: 'mcp'
146
- }) // optional; omit for unauthenticated
147
- };
148
-
149
- const server = createMcpAdapter(runtime, options, logger);
150
- \`\`\`
151
-
152
- ### Capability negotiation
153
-
154
- Server advertises capabilities during handshake:
155
-
156
- \`\`\`ts
157
- capabilities: {
158
- tools: { listChanged: true }, // Tool discovery
159
- resources: { listChanged: true }, // Resource access
160
- prompts: { listChanged: true } // Prompt templates
161
- }
162
- \`\`\`
163
-
164
- Clients can request specific capabilities.
165
-
166
- ## Tool registration
167
-
168
- Tools are auto-discovered from runtime:
169
-
170
- \`\`\`ts
171
- const descriptors = runtime.query('tools/tool').descriptors();
172
- for (const descriptor of descriptors) {
173
- server.registerTool(
174
- descriptor.id,
175
- {
176
- title: descriptor.name,
177
- description: descriptor.description,
178
- inputSchema: descriptor.schemas.input,
179
- outputSchema: descriptor.schemas.output
180
- },
181
- async (args) => {
182
- return invokeTool({ runtime, toolId: descriptor.id, input: args });
183
- }
184
- );
185
- }
186
- \`\`\`
187
-
188
- ## Resource registration
189
-
190
- Resources provide read-only data access:
191
-
192
- \`\`\`ts
193
- server.registerResource(
194
- 'workspace-files',
195
- 'file://workspace/**',
196
- {
197
- description: 'Workspace file contents',
198
- mimeType: 'text/plain'
199
- },
200
- async (uri) => {
201
- const content = await fs.read(uri.pathname);
202
- return {
203
- contents: [{
204
- uri: uri.href,
205
- mimeType: 'text/plain',
206
- text: content
207
- }]
208
- };
209
- }
210
- );
211
- \`\`\`
212
-
213
- ## Prompt registration
214
-
215
- Prompts provide templated messages:
216
-
217
- \`\`\`ts
218
- server.registerPrompt(
219
- 'code-review',
220
- {
221
- description: 'Review code for best practices',
222
- argsSchema: {
223
- filePath: z.string().describe('File to review')
224
- }
225
- },
226
- async (args) => {
227
- const code = await fs.read(args.filePath);
228
- return {
229
- messages: [{
230
- role: 'user',
231
- content: {
232
- type: 'text',
233
- text: \`Review this code:\\n\\n\${code}\`
234
- }
235
- }]
236
- };
237
- }
238
- );
239
- \`\`\`
104
+ The \`mcp\` config manifest drives the host defaults. \`approvalStateSecret\`
105
+ names the runtime credential that keys approval \`requestState\` (default
106
+ \`MCP_APPROVAL_STATE_KEY\`); when no secret is configured, approval uses a
107
+ per-process key and fails closed across process boundaries. \`sampling:
108
+ 'transport' | 'off'\` controls legacy transport sampling; a 2026-07-28
109
+ connection always refuses the removed server-to-client sampling channel.
240
110
 
241
111
  ## Authentication
242
112
 
243
- ### Bearer token auth (local allowlist)
244
-
245
- Pass allowed API keys directly. The returned function is passed as \`authenticate\` to the transport or adapter options.
246
-
247
- \`\`\`ts
248
- import { createMcpAuthenticator } from '@vibesdotdev/mcp';
249
-
250
- const token = await runtime.resolveCredential({ source: 'secret', key: 'MCP_TOKEN' });
251
- if (!token.ok) throw token.error;
252
-
253
- const authenticate = createMcpAuthenticator({
254
- apiKeys: [token.value],
255
- scope: 'mcp'
256
- });
257
-
258
- // Pass to createBunMcpServer:
259
- const server = createBunMcpServer({ ..., authenticate });
260
-
261
- // Or pass to createMcpAdapter:
262
- const adapter = createMcpAdapter(runtime, { ..., authenticate }, logger);
263
- \`\`\`
264
-
265
- ### Remote validation (cloud mode)
266
-
267
- For cloud deployments, configure the host-owned authentication API endpoint:
268
-
269
- \`\`\`ts
270
- const authenticate = createMcpAuthenticator({
271
- remote: true,
272
- scope: 'mcp',
273
- authApiBaseUrl: 'https://auth.example.test' // supplied by host composition
274
- });
275
- \`\`\`
113
+ \`createMcpAuthenticator\` validates an API key or OAuth token against the
114
+ host-supplied validator. The cloud edge authenticates before routing to a
115
+ session or Durable Object. Local stdio is the user's own process.
276
116
 
277
117
  ## Logging
278
118
 
279
- MCP server emits structured logs on the logger of the runtime it was handed (never a module-level logger, which has no runtime):
280
-
281
- \`\`\`ts
282
- import { getLogger } from '@vibesdotdev/logging';
283
-
284
- const logger = getLogger('mcp', runtime);
285
- logger.info('MCP server started', {
286
- transport: 'stdio',
287
- capabilities: ['tools', 'resources']
288
- });
289
- \`\`\`
290
-
291
- **Log levels:**
292
- - \`debug\` — Protocol messages
293
- - \`info\` — Lifecycle events
294
- - \`warn\` — Non-critical errors
295
- - \`error\` — Critical failures
296
-
297
- ## WRONG: Manual protocol handling
298
-
299
- \`\`\`ts
300
- // ❌ NEVER — use createMcpAdapter instead
301
- const server = new McpServer({ name: 'custom', version: '1.0' });
302
- // Manual tool registration...
303
- \`\`\`
304
-
305
- ## RIGHT: Runtime-integrated server
306
-
307
- \`\`\`ts
308
- // ✅ Auto-discovers tools/resources/prompts
309
- const server = createMcpAdapter(runtime, options, logger);
310
- \`\`\`
311
-
312
- ## MCP client configuration
313
-
314
- ### Claude Desktop
315
-
316
- \`\`\`json
317
- {
318
- "mcpServers": {
319
- "vibes": {
320
- "command": "vibes",
321
- "args": ["dev", "mcp", "start"]
322
- }
323
- }
324
- }
325
- \`\`\`
119
+ Every logger is the runtime's (\`getLogger(id, runtime)\`), never a module-level
120
+ default. One INFO line records a catalog fold; per-call stages are DEBUG. A
121
+ session start, a registration failure and a degraded surface are the events
122
+ that deserve INFO/WARN/ERROR.
326
123
 
327
- ### Cursor IDE (and any stdio-capable client)
124
+ ## Verify
328
125
 
329
- \`\`\`json
330
- {
331
- "mcpServers": {
332
- "vibes": {
333
- "type": "stdio",
334
- "command": "vibes",
335
- "args": ["dev", "mcp", "serve", "--mode", "stdio", "--client", "claude"]
336
- }
337
- }
338
- }
126
+ \`\`\`bash
127
+ vibes dev audit tools # policy reachability + schema/annotation findings
128
+ vibes dev audit tools --live # real serve; served vs authored wire
129
+ vibes dev audit tools --doctor # birth digest, canary, host attestation
339
130
  \`\`\`
340
131
 
341
- The stdio relay attaches to the shared runtime host, so there is no fixed URL
342
- to configure. The HTTP transport's port is derived per workspace (there is no
343
- fixed \`3001\`) — run \`vibes dev mcp status\` to see the port the current
344
- workspace is serving on before pointing an HTTP client at it. \`--client\` is
345
- the legacy catalog/harness selector; \`vibes dev mcp serve --help\` lists the
346
- newer \`--preset\` / \`--harness\` / \`--agent\` knobs.
347
-
348
- ## Monitoring
349
-
350
- Adapters expose start() and shutdown(). They do not expose an event emitter.
351
- Pass the runtime logger to observe protocol and listener failures. For tool-call
352
- instrumentation, supply prepareToolCallContext on the tool-aware adapter; it
353
- receives the canonical tool id, validated input and prepared context before
354
- invocation. Return the context to preserve the serving authority.
355
-
356
- Use the projection doctor and live tool audit to compare the observed wire
357
- catalog with authored descriptors. They report measured bytes, schema loss and
358
- description drift; policy audit findings and high-severity wire findings retain
359
- their distinct verdicts.
360
-
361
132
  :::card{title="See also"}
362
133
  - [\`mcp.tools\`](mcp.tools) — MCP tool exposure
363
134
  - [\`mcp.resources\`](mcp.resources) — MCP resources
@@ -1 +1 @@
1
- {"version":3,"file":"server.docs.descriptor.js","sourceRoot":"","sources":["../../src/docs/server.docs.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,+DAA+D;IACxE,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsWX;KACE;IACD,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;IAC7D,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;IAClC,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;IAC/B,GAAG,EAAE;QACH,IAAI,EAAE,6CAA6C;QACnD,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,sBAAsB;QAChC,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC;KACzD;IACD,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"server.docs.descriptor.js","sourceRoot":"","sources":["../../src/docs/server.docs.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,qEAAqE;IAC9E,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIX;KACE;IACD,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;IAC7D,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;IAClC,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;IAC/B,GAAG,EAAE;QACH,IAAI,EAAE,6CAA6C;QACnD,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,sBAAsB;QAChC,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC;KACzD;IACD,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.docs.descriptor.d.ts","sourceRoot":"","sources":["../../src/docs/tools.docs.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,QAAA,MAAM,UAAU,EAAE,mBAyTjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"tools.docs.descriptor.d.ts","sourceRoot":"","sources":["../../src/docs/tools.docs.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,QAAA,MAAM,UAAU,EAAE,mBA0IjB,CAAC;AAEF,eAAe,UAAU,CAAC"}