@selfagency/beans-mcp 0.1.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.
package/README.md ADDED
@@ -0,0 +1,307 @@
1
+ # beans-mcp
2
+
3
+ MCP (Model Context Protocol) server for [Beans](https://github.com/hmans/beans) issue tracker. Provides programmatic and CLI interfaces for AI-powered interactions with Beans workspaces.
4
+
5
+ <div style="border: 1px solid; border-radius: 12px; padding: 8px; display: flex; flex-direction: column; align-items: center; justify-items: center;">
6
+ <span><strong>Try Beans fully-integrated with GitHub Copilot in VS Code! Install the <a href="https://marketplace.visualstudio.com/items?itemName=selfagency.beans-vscode">selfagency.beans-vscode</a> extension.</strong></span>
7
+ </div>
8
+
9
+ ## Usage
10
+
11
+ ```bash
12
+ npx @selfagency/beans-mcp /path/to/workspace
13
+ ```
14
+
15
+ ### Parameters
16
+
17
+ - `--workspace-root` or positional arg: Workspace root path
18
+ - `--cli-path`: Path to Beans CLI
19
+ - `--port`: MCP server port (default: 39173)
20
+ - `--log-dir`: Log directory
21
+ - `-h`, `--help`: Print usage and exit
22
+
23
+ ## Summary of public MCP tools
24
+
25
+ - `beans_init` — Initialize the workspace (optional `prefix`).
26
+ - `beans_view` — Fetch full bean details by `beanId`.
27
+ - `beans_create` — Create a new bean (title/type + optional fields).
28
+ - `beans_update` — Consolidated metadata updates (status/type/priority/parent/clearParent/blocking/blockedBy).
29
+ - `beans_delete` — Delete a bean (`beanId`, optional `force`).
30
+ - `beans_reopen` — Reopen a completed or scrapped bean to an active status.
31
+ - `beans_query` — Unified list/search/filter/sort/llm_context/open_config operations.
32
+ - `beans_bean_file` — Read/edit/create/delete files under `.beans`.
33
+ - `beans_output` — Read extension output logs or show guidance.
34
+
35
+ ### Notes
36
+
37
+ - The `beans_query` tool is intentionally broad: prefer it for listing, searching, filtering or sorting beans, and for generating Copilot instructions (`operation: 'llm_context'`).
38
+ - All file and log operations validate paths to keep them within the workspace or the VS Code log directory.
39
+ - `beans_update` replaces many fine-grained update tools; callers should use it to keep the public tool surface small and predictable.
40
+
41
+ ## Examples
42
+
43
+ ### beans_init
44
+
45
+ Request:
46
+
47
+ ```json
48
+ { "prefix": "project" }
49
+ ```
50
+
51
+ Response (structuredContent):
52
+
53
+ ```json
54
+ { "initialized": true }
55
+ ```
56
+
57
+ ### beans_view
58
+
59
+ Request:
60
+
61
+ ```json
62
+ { "beanId": "bean-abc" }
63
+ ```
64
+
65
+ Response (structuredContent):
66
+
67
+ ```json
68
+ {
69
+ "bean": {
70
+ "id": "bean-abc",
71
+ "title": "Fix login timeout",
72
+ "status": "todo",
73
+ "type": "bug",
74
+ "priority": "critical",
75
+ "body": "...markdown...",
76
+ "createdAt": "2025-12-01T12:00:00Z",
77
+ "updatedAt": "2025-12-02T08:00:00Z"
78
+ }
79
+ }
80
+ ```
81
+
82
+ ### beans_create
83
+
84
+ Request:
85
+
86
+ ```json
87
+ {
88
+ "title": "Add dark mode",
89
+ "type": "feature",
90
+ "status": "todo",
91
+ "priority": "normal",
92
+ "description": "Implement theme toggle and styles"
93
+ }
94
+ ```
95
+
96
+ Response (structuredContent):
97
+
98
+ ```json
99
+ {
100
+ "bean": {
101
+ "id": "new-1",
102
+ "title": "Add dark mode",
103
+ "status": "todo",
104
+ "type": "feature"
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### beans_update
110
+
111
+ Request (change status and add blocking):
112
+
113
+ ```json
114
+ {
115
+ "beanId": "bean-abc",
116
+ "status": "in-progress",
117
+ "blocking": ["bean-def"]
118
+ }
119
+ ```
120
+
121
+ Response (structuredContent):
122
+
123
+ ```json
124
+ {
125
+ "bean": {
126
+ "id": "bean-abc",
127
+ "status": "in-progress",
128
+ "blockingIds": ["bean-def"]
129
+ }
130
+ }
131
+ ```
132
+
133
+ ### beans_delete
134
+
135
+ Request:
136
+
137
+ ```json
138
+ { "beanId": "bean-old", "force": false }
139
+ ```
140
+
141
+ Response:
142
+
143
+ ```json
144
+ { "deleted": true, "beanId": "bean-old" }
145
+ ```
146
+
147
+ ### beans_reopen
148
+
149
+ Request:
150
+
151
+ ```json
152
+ {
153
+ "beanId": "bean-closed",
154
+ "requiredCurrentStatus": "completed",
155
+ "targetStatus": "todo"
156
+ }
157
+ ```
158
+
159
+ Response:
160
+
161
+ ```json
162
+ { "bean": { "id": "bean-closed", "status": "todo" } }
163
+ ```
164
+
165
+ ### beans_query — examples
166
+
167
+ Refresh (list all beans):
168
+
169
+ ```json
170
+ { "operation": "refresh" }
171
+ ```
172
+
173
+ Response (partial):
174
+
175
+ ```json
176
+ { "count": 12, "beans": [] }
177
+ ```
178
+
179
+ Filter (statuses/types/tags):
180
+
181
+ ```json
182
+ {
183
+ "operation": "filter",
184
+ "statuses": ["in-progress", "todo"],
185
+ "types": ["bug", "feature"],
186
+ "tags": ["auth"]
187
+ }
188
+ ```
189
+
190
+ Search (full-text):
191
+
192
+ ```json
193
+ { "operation": "search", "search": "authentication", "includeClosed": false }
194
+ ```
195
+
196
+ Sort (modes: `status-priority-type-title`, `updated`, `created`, `id`):
197
+
198
+ ```json
199
+ { "operation": "sort", "mode": "updated" }
200
+ ```
201
+
202
+ LLM context (generate Copilot instructions; optional write-to-workspace):
203
+
204
+ ```json
205
+ { "operation": "llm_context", "writeToWorkspaceInstructions": true }
206
+ ```
207
+
208
+ Response (structuredContent):
209
+
210
+ ```json
211
+ {
212
+ "graphqlSchema": "...",
213
+ "generatedInstructions": "...",
214
+ "instructionsPath": "/workspace/.github/instructions/tasks.instructions.md"
215
+ }
216
+ ```
217
+
218
+ ### beans_bean_file
219
+
220
+ Request (read):
221
+
222
+ ```json
223
+ { "operation": "read", "path": "beans-vscode-123--title.md" }
224
+ ```
225
+
226
+ Response:
227
+
228
+ ```json
229
+ {
230
+ "path": "/workspace/.beans/beans-vscode-123--title.md",
231
+ "content": "---\n...frontmatter...\n---\n# Title\n"
232
+ }
233
+ ```
234
+
235
+ ### beans_output
236
+
237
+ Request (read last 200 lines):
238
+
239
+ ```json
240
+ { "operation": "read", "lines": 200 }
241
+ ```
242
+
243
+ Response:
244
+
245
+ ```json
246
+ {
247
+ "path": "/workspace/.vscode/logs/beans-output.log",
248
+ "content": "...log lines...",
249
+ "linesReturned": 200
250
+ }
251
+ ```
252
+
253
+ ## Programmatic usage
254
+
255
+ ### Installation
256
+
257
+ ```bash
258
+ npm install beans-mcp
259
+ ```
260
+
261
+ ### Example
262
+
263
+ ```typescript
264
+ import { createBeansMcpServer, parseCliArgs } from "@selfagency/beans-mcp";
265
+
266
+ const server = await createBeansMcpServer({
267
+ workspaceRoot: "/path/to/workspace",
268
+ cliPath: "beans", // or path to beans CLI
269
+ });
270
+
271
+ // Connect to stdio transport or your own transport
272
+ ```
273
+
274
+ ### API
275
+
276
+ #### createBeansMcpServer(opts)
277
+
278
+ Creates and initializes a Beans MCP server instance.
279
+
280
+ **Options:**
281
+
282
+ - `workspaceRoot` (string): Path to the Beans workspace
283
+ - `cliPath` (string, optional): Path to Beans CLI executable (default: 'beans')
284
+ - `name` (string, optional): Server name (default: 'beans-mcp-server')
285
+ - `version` (string, optional): Server version
286
+ - `logDir` (string, optional): Directory for server logs
287
+ - `backend` (BackendInterface, optional): Custom backend implementation
288
+
289
+ **Returns:** `{ server: McpServer; backend: BackendInterface }`
290
+
291
+ #### startBeansMcpServer(argv)
292
+
293
+ CLI-compatible entrypoint for launching the server.
294
+
295
+ ### Utility Functions
296
+
297
+ - `parseCliArgs(argv: string[])`: Parse CLI arguments
298
+ - `isPathWithinRoot(root: string, target: string): boolean`: Check if path is contained within root
299
+ - `sortBeans(beans, mode)`: Sort beans by specified mode
300
+
301
+ ### Types & Schemas
302
+
303
+ Export of GraphQL schema, Zod validation schemas, and TypeScript types for Beans records and operations.
304
+
305
+ ## License
306
+
307
+ MIT