@procedures/mcp-server 0.0.0-stage → 0.2.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 (65) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +366 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/index.d.ts +22 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +21 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/module.d.ts +17 -0
  10. package/dist/module.d.ts.map +1 -0
  11. package/dist/module.js +24 -0
  12. package/dist/module.js.map +1 -0
  13. package/dist/procedures/mcp/index.d.ts +6 -0
  14. package/dist/procedures/mcp/index.d.ts.map +1 -0
  15. package/dist/procedures/mcp/index.js +6 -0
  16. package/dist/procedures/mcp/index.js.map +1 -0
  17. package/dist/procedures/mcp/list-tools.d.ts +8 -0
  18. package/dist/procedures/mcp/list-tools.d.ts.map +1 -0
  19. package/dist/procedures/mcp/list-tools.js +61 -0
  20. package/dist/procedures/mcp/list-tools.js.map +1 -0
  21. package/dist/procedures/mcp/serve.d.ts +38 -0
  22. package/dist/procedures/mcp/serve.d.ts.map +1 -0
  23. package/dist/procedures/mcp/serve.js +125 -0
  24. package/dist/procedures/mcp/serve.js.map +1 -0
  25. package/dist/register.d.ts +7 -0
  26. package/dist/register.d.ts.map +1 -0
  27. package/dist/register.js +9 -0
  28. package/dist/register.js.map +1 -0
  29. package/dist/surface.d.ts +36 -0
  30. package/dist/surface.d.ts.map +1 -0
  31. package/dist/surface.js +74 -0
  32. package/dist/surface.js.map +1 -0
  33. package/dist/transport/index.d.ts +7 -0
  34. package/dist/transport/index.d.ts.map +1 -0
  35. package/dist/transport/index.js +7 -0
  36. package/dist/transport/index.js.map +1 -0
  37. package/dist/transport/mcp-transport.d.ts +94 -0
  38. package/dist/transport/mcp-transport.d.ts.map +1 -0
  39. package/dist/transport/mcp-transport.js +368 -0
  40. package/dist/transport/mcp-transport.js.map +1 -0
  41. package/dist/transport/sse.d.ts +20 -0
  42. package/dist/transport/sse.d.ts.map +1 -0
  43. package/dist/transport/sse.js +23 -0
  44. package/dist/transport/sse.js.map +1 -0
  45. package/dist/transport/stdio.d.ts +16 -0
  46. package/dist/transport/stdio.d.ts.map +1 -0
  47. package/dist/transport/stdio.js +18 -0
  48. package/dist/transport/stdio.js.map +1 -0
  49. package/dist/types.d.ts +55 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +7 -0
  52. package/dist/types.js.map +1 -0
  53. package/package.json +80 -3
  54. package/src/index.ts +47 -0
  55. package/src/module.ts +27 -0
  56. package/src/procedures/mcp/index.ts +6 -0
  57. package/src/procedures/mcp/list-tools.ts +85 -0
  58. package/src/procedures/mcp/serve.ts +172 -0
  59. package/src/register.ts +11 -0
  60. package/src/surface.ts +85 -0
  61. package/src/transport/index.ts +7 -0
  62. package/src/transport/mcp-transport.ts +418 -0
  63. package/src/transport/sse.ts +29 -0
  64. package/src/transport/stdio.ts +19 -0
  65. package/src/types.ts +64 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,26 @@
1
+ # @procedures/mcp-server
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 76d0d64: **Breaking:** an import of a package registers nothing. The `./register` entry of a package registers its procedures, and the procedures of the modules that they need, in the global registry (ARCHITECTURE-PROPOSALS-2026-10, P9).
8
+
9
+ - `import "@procedures/git"` gives the exports and registers nothing. Use `import "@procedures/git/register"`, or give `gitModule` (`@procedures/git/module`) to `createRegistry()`.
10
+ - `import "@procedures/client/register"` registers the control flow (`client.chain` and the others) and `procedure.define`/`get`/`list`/`delete`. `createRegistry()` adds them to each new registry, as before. The new `registerClientProcedures(registry?)` does the same for any registry.
11
+ - Each `register<Name>Procedures(registry?)` function is in the module of its package, takes a registry (the global one by default) and registers the modules that the package requires. `registerBridge` (splay) and `register` (store) are now `registerSplayProcedures` and `registerStoreProcedures`. The old names stay for one version.
12
+ - `sideEffects` names only `./dist/register.js`, so a bundler can drop the rest of a package.
13
+ - The bundles require `clientModule`, so `@procedures/bundle-mcp/register` gives the whole tool surface.
14
+ - `lib new` makes `src/module.ts` and a root without side effects, and `procedure new` adds procedures to the module.
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies [0cf4bea]
19
+ - Updated dependencies [44d3e30]
20
+ - Updated dependencies [76d0d64]
21
+ - @procedures/client@0.2.0
22
+ - @procedures/mcp@0.2.0
23
+
24
+ ## 0.1.0
25
+
26
+ The first release on npm. The packages of the client monorepo have one version together.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 Mark Russell
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,367 @@
1
- # Temporary Holding Version
1
+ # @procedures/mcp-server
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm](https://img.shields.io/npm/v/@procedures/mcp-server?color=2346c4&label=npm)](https://www.npmjs.com/package/@procedures/mcp-server)
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)
7
+ [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D22-green.svg)](https://nodejs.org/)
8
+ [![MCP](https://img.shields.io/badge/MCP-Protocol-purple.svg)](https://modelcontextprotocol.io/)
9
+
10
+ > MCP server transport for the procedure system. Exposes procedures as MCP tools for Claude integration.
11
+
12
+ ## Table of Contents
13
+
14
+ - [Overview](#overview)
15
+ - [Installation](#installation)
16
+ - [Architecture](#architecture)
17
+ - [Quick Start](#quick-start)
18
+ - [API Reference](#api-reference)
19
+ - [Tool Filtering](#tool-filtering)
20
+ - [Claude Desktop Setup](#claude-desktop-setup)
21
+ - [Integration](#integration)
22
+ - [Requirements](#requirements)
23
+ - [License](#license)
24
+
25
+ ---
26
+
27
+ ## Overview
28
+
29
+ **client-mcp** bridges the procedure system with MCP (Model Context Protocol):
30
+
31
+ - **Transport Layer** - Connects `ProcedureServer` to Claude via stdio
32
+ - **Dynamic Registration** - Automatically refreshes tools when procedures change
33
+ - **Tool Filtering** - Control which procedures are exposed as MCP tools
34
+ - **Debug Mode** - Logging for troubleshooting MCP connections
35
+
36
+ ---
37
+
38
+ ## Installation
39
+
40
+ ```bash
41
+ npm install @procedures/mcp-server
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Architecture
47
+
48
+ ### System Overview
49
+
50
+ ```mermaid
51
+ graph TB
52
+ subgraph "Claude Layer"
53
+ Claude[Claude Desktop / Code]
54
+ end
55
+
56
+ subgraph "MCP Protocol"
57
+ ListTools[ListToolsRequest]
58
+ CallTool[CallToolRequest]
59
+ end
60
+
61
+ subgraph "client-mcp"
62
+ Transport[McpServerTransport]
63
+ ToolMap[Tool Mapper]
64
+ end
65
+
66
+ subgraph "Procedure Layer"
67
+ Server[ProcedureServer]
68
+ Registry[PROCEDURE_REGISTRY]
69
+ end
70
+
71
+ subgraph "Procedures"
72
+ FS[fs.read]
73
+ Git[git.commit]
74
+ Shell[shell.run]
75
+ More[...]
76
+ end
77
+
78
+ Claude -->|stdio| ListTools
79
+ Claude -->|stdio| CallTool
80
+ ListTools --> Transport
81
+ CallTool --> Transport
82
+ Transport --> ToolMap
83
+ ToolMap --> Registry
84
+ Transport --> Server
85
+ Server --> FS
86
+ Server --> Git
87
+ Server --> Shell
88
+ Server --> More
89
+ ```
90
+
91
+ ### Request Flow
92
+
93
+ ```mermaid
94
+ sequenceDiagram
95
+ participant Claude as Claude
96
+ participant MCP as McpServerTransport
97
+ participant Server as ProcedureServer
98
+ participant Registry as PROCEDURE_REGISTRY
99
+ participant Handler as Procedure Handler
100
+
101
+ Note over Claude,Handler: Tool Discovery
102
+ Claude->>MCP: ListToolsRequest
103
+ MCP->>Registry: getAll()
104
+ Registry-->>MCP: Procedure[]
105
+ MCP->>MCP: Convert to MCP tools
106
+ MCP-->>Claude: ListToolsResponse (tools[])
107
+
108
+ Note over Claude,Handler: Tool Execution
109
+ Claude->>MCP: CallToolRequest (fs.read)
110
+ MCP->>Server: handle({ path: ["fs", "read"], input })
111
+ Server->>Registry: get(["fs", "read"])
112
+ Registry-->>Server: Procedure
113
+ Server->>Handler: handler(input, ctx)
114
+ Handler-->>Server: Result
115
+ Server-->>MCP: Response
116
+ MCP-->>Claude: CallToolResponse
117
+ ```
118
+
119
+ ### Transport Architecture
120
+
121
+ ```mermaid
122
+ graph LR
123
+ subgraph "McpServerTransport"
124
+ Init[Initialize]
125
+ Connect[Connect stdio]
126
+ Register[Register handlers]
127
+ end
128
+
129
+ subgraph "MCP Handlers"
130
+ ListTools[tools/list]
131
+ CallTool[tools/call]
132
+ end
133
+
134
+ subgraph "Procedure System"
135
+ Server[ProcedureServer]
136
+ Convert[proceduresToMcpTools]
137
+ end
138
+
139
+ Init --> Connect
140
+ Connect --> Register
141
+ Register --> ListTools
142
+ Register --> CallTool
143
+ ListTools --> Convert
144
+ CallTool --> Server
145
+ ```
146
+
147
+ ---
148
+
149
+ ## Quick Start
150
+
151
+ ```typescript
152
+ import { ProcedureServer, PROCEDURE_REGISTRY } from "@procedures/client";
153
+ import { McpServerTransport } from "@procedures/mcp-server";
154
+
155
+ // Load procedures (via side-effect imports)
156
+ import "@procedures/bundle-dev/register"; // registers its procedures
157
+
158
+ // Create procedure server
159
+ const server = new ProcedureServer({
160
+ autoRegister: true,
161
+ registry: PROCEDURE_REGISTRY,
162
+ });
163
+
164
+ // Create MCP transport
165
+ const mcp = new McpServerTransport(server, {
166
+ transport: "stdio",
167
+ serverInfo: { name: "my-server", version: "1.0.0" },
168
+ });
169
+
170
+ // Add transport and start
171
+ server.addTransport(mcp);
172
+ await server.start();
173
+ ```
174
+
175
+ ---
176
+
177
+ ## API Reference
178
+
179
+ ### McpServerTransport
180
+
181
+ Main transport class for MCP integration.
182
+
183
+ ```typescript
184
+ interface McpServerTransportOptions {
185
+ transport: "stdio" | "sse"; // Transport type
186
+ serverInfo: {
187
+ name: string; // Server name
188
+ version: string; // Server version
189
+ };
190
+ filter?: McpToolFilter; // Tool filtering options
191
+ debug?: boolean; // Enable debug logging
192
+ }
193
+
194
+ class McpServerTransport {
195
+ constructor(server: ProcedureServer, options: McpServerTransportOptions);
196
+
197
+ // Get current transport state
198
+ getState(): {
199
+ connected: boolean;
200
+ toolCount: number;
201
+ lastRefresh: Date;
202
+ };
203
+
204
+ // Close the transport
205
+ close(): Promise<void>;
206
+ }
207
+ ```
208
+
209
+ ### Built-in Procedures
210
+
211
+ | Path | Description |
212
+ |------|-------------|
213
+ | `mcp.serve` | Start MCP server programmatically |
214
+ | `mcp.list-tools` | List available MCP tools with filtering |
215
+
216
+ ---
217
+
218
+ ## Tool Filtering
219
+
220
+ Control which procedures are exposed as MCP tools:
221
+
222
+ ```typescript
223
+ interface McpToolFilter {
224
+ includeTags?: string[]; // Only include these tags
225
+ excludeTags?: string[]; // Exclude these tags
226
+ excludeInternal?: boolean; // Exclude internal procedures
227
+ pathPrefix?: string[]; // Only include procedures with this prefix
228
+ }
229
+
230
+ const mcp = new McpServerTransport(server, {
231
+ transport: "stdio",
232
+ filter: {
233
+ includeTags: ["public"],
234
+ excludeInternal: true,
235
+ pathPrefix: ["api"],
236
+ },
237
+ });
238
+ ```
239
+
240
+ ### Filtering Examples
241
+
242
+ ```mermaid
243
+ graph TB
244
+ subgraph "All Procedures"
245
+ FS[fs.read]
246
+ Git[git.commit]
247
+ Internal[_internal.debug]
248
+ API[api.users.list]
249
+ end
250
+
251
+ subgraph "Filter: excludeInternal"
252
+ F1[fs.read]
253
+ F2[git.commit]
254
+ F3[api.users.list]
255
+ end
256
+
257
+ subgraph "Filter: pathPrefix api"
258
+ F4[api.users.list]
259
+ end
260
+
261
+ FS --> F1
262
+ Git --> F2
263
+ API --> F3
264
+ API --> F4
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Claude Desktop Setup
270
+
271
+ ### Configuration File Locations
272
+
273
+ **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
274
+ **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
275
+
276
+ ### Basic Configuration
277
+
278
+ ```json
279
+ {
280
+ "mcpServers": {
281
+ "my-server": {
282
+ "command": "npx",
283
+ "args": ["-y", "@procedures/mcp-dev-tools"]
284
+ }
285
+ }
286
+ }
287
+ ```
288
+
289
+ ### With Custom Bundle
290
+
291
+ ```json
292
+ {
293
+ "mcpServers": {
294
+ "dev-tools": {
295
+ "command": "node",
296
+ "args": ["C:/Users/me/git/client/packages/impl-mcp-dev/dist/server.js"],
297
+ "env": {
298
+ "MCP_BUNDLES": "@procedures/bundle-mcp",
299
+ "MCP_DEBUG": "true"
300
+ }
301
+ }
302
+ }
303
+ }
304
+ ```
305
+
306
+ ---
307
+
308
+ ## Integration
309
+
310
+ ### Dynamic Tool Registration
311
+
312
+ The transport automatically refreshes MCP tools when procedures are registered or unregistered:
313
+
314
+ ```typescript
315
+ // Tools are automatically updated when procedures change
316
+ PROCEDURE_REGISTRY.register(newProcedure); // → MCP tools refresh
317
+ PROCEDURE_REGISTRY.unregister(oldPath); // → MCP tools refresh
318
+ ```
319
+
320
+ ### Debug Mode
321
+
322
+ Enable debug logging for troubleshooting:
323
+
324
+ ```typescript
325
+ const mcp = new McpServerTransport(server, {
326
+ transport: "stdio",
327
+ debug: true, // Logs to stderr
328
+ });
329
+ ```
330
+
331
+ ### With Other Packages
332
+
333
+ ```mermaid
334
+ graph TB
335
+ subgraph "Implementation"
336
+ ImplMCP[impl-mcp-dev<br/>Ready-to-run server]
337
+ end
338
+
339
+ subgraph "Transport"
340
+ ClientMCP[client-mcp<br/>McpServerTransport]
341
+ end
342
+
343
+ subgraph "Core"
344
+ MCP[mcp<br/>Types & utilities]
345
+ Client[client<br/>ProcedureServer]
346
+ end
347
+
348
+ ImplMCP --> ClientMCP
349
+ ClientMCP --> MCP
350
+ ClientMCP --> Client
351
+ ```
352
+
353
+ ---
354
+
355
+ ## Requirements
356
+
357
+ - **Node.js** >= 22
358
+ - **Dependencies:**
359
+ - `@procedures/client`
360
+ - `@procedures/mcp`
361
+ - `@modelcontextprotocol/sdk`
362
+
363
+ ---
364
+
365
+ ## License
366
+
367
+ MIT