@brainmcp/brainmcp 0.1.1 → 0.1.3
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 +69 -35
- package/dist/agent-config.js +75 -12
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.js +118 -26
- package/dist/commands/index.js.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.js +29 -13
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/files.js +75 -10
- package/dist/lib/files.js.map +1 -1
- package/dist/lib/managed.js +356 -15
- package/dist/lib/managed.js.map +1 -1
- package/dist/types/agent-config-stub.d.ts +18 -0
- package/dist/types/agent-config-stub.js +18 -0
- package/dist/types/agent-config-stub.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,48 +1,85 @@
|
|
|
1
1
|
# `@brainmcp/brainmcp`
|
|
2
2
|
|
|
3
|
-
Safely configure [brain / brainmcp](https://www.brainmcp.ai)
|
|
3
|
+
Safely configure [brain / brainmcp](https://www.brainmcp.ai) guidance and MCP connections for agent clients.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Requires Node.js 22 or newer. The recommended command runs the latest published CLI directly, so
|
|
6
|
+
there is no permanent global package to maintain.
|
|
6
7
|
|
|
7
8
|
Full client walkthroughs: [Quickstart](https://www.brainmcp.ai/docs/quickstart) · [Claude Code](https://www.brainmcp.ai/docs/connect-claude-code) · [Cursor](https://www.brainmcp.ai/docs/connect-cursor) · [Codex](https://www.brainmcp.ai/docs/connect-codex) · [VS Code](https://www.brainmcp.ai/docs/connect-vscode)
|
|
8
9
|
|
|
9
|
-
## Quickstart
|
|
10
|
+
## Quickstart — all projects, supported agents
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Preview one combined user-scope change for Claude Code, Cursor, Codex, and VS Code, then confirm once:
|
|
12
13
|
|
|
13
14
|
```bash
|
|
14
|
-
npx @brainmcp/brainmcp init --
|
|
15
|
+
npx --yes @brainmcp/brainmcp@latest init --all --scope user
|
|
15
16
|
```
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
The `--yes` before the package name belongs to `npx`: it suppresses npm's package-download prompt.
|
|
19
|
+
It does **not** skip BrainMCP's file preview or confirmation. To automate both prompts only after
|
|
20
|
+
reviewing the targets, add a second `--yes` at the very end.
|
|
21
|
+
|
|
22
|
+
Only pin a workspace at user scope when that same workspace should be the default in **every**
|
|
23
|
+
project. Otherwise omit it and use the OAuth authorization default or a project-scope override:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx --yes @brainmcp/brainmcp@latest init --all --workspace <workspace-id> --scope user
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
After setup:
|
|
30
|
+
|
|
31
|
+
1. Restart each configured client you use.
|
|
32
|
+
2. Start a session, open its `brain` connection, and complete browser OAuth. Select the workspaces
|
|
33
|
+
that client may reach.
|
|
34
|
+
3. Ask: `use brain to give me an overview of the workspace`.
|
|
35
|
+
4. Confirm the [dashboard Connect view](https://dash.brainmcp.ai/connect) changes from
|
|
36
|
+
*waiting for first call* to **Agent seen ... ago**.
|
|
37
|
+
|
|
38
|
+
No API keys or OAuth secrets are written to config files.
|
|
39
|
+
|
|
40
|
+
Check one client's file placement, managed guidance, endpoint, and public OAuth discovery:
|
|
18
41
|
|
|
19
42
|
```bash
|
|
20
|
-
npx @brainmcp/brainmcp
|
|
43
|
+
npx --yes @brainmcp/brainmcp@latest doctor --client cursor --scope user
|
|
21
44
|
```
|
|
22
45
|
|
|
23
|
-
|
|
46
|
+
`--all` intentionally excludes `generic`: an unknown client has no universal global config path. Prefer a maintained plugin when Claude Code or Cursor offers one; use the CLI when you want reviewable filesystem configuration or no plugin is available.
|
|
24
47
|
|
|
25
|
-
|
|
48
|
+
## Project-local alternative
|
|
49
|
+
|
|
50
|
+
For a single repository only, omit `--scope user` (or pass `--scope project`) and run from that repo root:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx --yes @brainmcp/brainmcp@latest init --client claude-code
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Optional persistent CLI
|
|
57
|
+
|
|
58
|
+
If you prefer a `brainmcp` binary on your `PATH` for repeated administration, install it globally:
|
|
26
59
|
|
|
27
60
|
```bash
|
|
28
|
-
|
|
61
|
+
npm install --global @brainmcp/brainmcp@latest
|
|
62
|
+
brainmcp init --all --scope user
|
|
29
63
|
```
|
|
30
64
|
|
|
31
|
-
|
|
65
|
+
The setup result is the same. The `npx` path avoids global package permissions and version drift;
|
|
66
|
+
the global path makes later `doctor`, `print`, and `remove` commands shorter.
|
|
32
67
|
|
|
33
68
|
## Commands
|
|
34
69
|
|
|
35
70
|
| Command | What it does |
|
|
36
71
|
| --- | --- |
|
|
37
72
|
| `init` | Preview and write MCP config + instruction file for a client |
|
|
73
|
+
| `init --all` | Preview one combined change for Claude Code, Cursor, Codex, and VS Code |
|
|
38
74
|
| `doctor` | Check placement, endpoint, managed markers, and OAuth discovery |
|
|
39
75
|
| `print` | Print the canonical config and guidance without writing |
|
|
40
76
|
| `remove` | Preview and remove BrainMCP-managed blocks |
|
|
41
77
|
|
|
42
|
-
Every mutation shows a diff and asks for confirmation unless you
|
|
78
|
+
Every mutation shows a diff and asks for confirmation unless you append a trailing CLI `--yes`.
|
|
43
79
|
|
|
44
80
|
```text
|
|
45
81
|
brainmcp init [--client <client>] [--workspace <id>] [--scope project|user] [--yes]
|
|
82
|
+
brainmcp init --all [--workspace <id>] [--scope project|user] [--yes]
|
|
46
83
|
brainmcp doctor [--client <client>] [--workspace <id>] [--scope project|user]
|
|
47
84
|
brainmcp print [--client <client>] [--workspace <id>] [--scope project|user]
|
|
48
85
|
brainmcp remove [--client <client>] [--scope project|user] [--yes]
|
|
@@ -50,52 +87,49 @@ brainmcp remove [--client <client>] [--scope project|user] [--yes]
|
|
|
50
87
|
|
|
51
88
|
### Clients
|
|
52
89
|
|
|
53
|
-
| `--client` |
|
|
90
|
+
| `--client` | User-scope paths (`--scope user`) | Project-scope paths (default) |
|
|
54
91
|
| --- | --- | --- |
|
|
55
|
-
| `claude-code` |
|
|
56
|
-
| `cursor` |
|
|
57
|
-
| `codex` |
|
|
58
|
-
| `vscode` | `.vscode/mcp.json
|
|
59
|
-
| `generic` |
|
|
92
|
+
| `claude-code` | `~/.claude.json`, `~/.claude/CLAUDE.md` | `.mcp.json`, `CLAUDE.md` |
|
|
93
|
+
| `cursor` | `~/.cursor/mcp.json`, `~/.cursor/rules/brainmcp-workspace.mdc` | `.cursor/mcp.json`, `.cursor/rules/brainmcp-workspace.mdc` |
|
|
94
|
+
| `codex` | `$CODEX_HOME/config.toml`, `$CODEX_HOME/AGENTS.md` (default `~/.codex`) | `.codex/config.toml`, `AGENTS.md` |
|
|
95
|
+
| `vscode` | Default VS Code profile `mcp.json`; `~/.copilot/instructions/brainmcp.instructions.md` | `.vscode/mcp.json`, `AGENTS.md` |
|
|
96
|
+
| `generic` | Conventional `~/.mcp.json`, `~/AGENTS.md` (only when your host recognizes them) | `.mcp.json`, `AGENTS.md` |
|
|
60
97
|
|
|
61
|
-
If you omit `--client`, the CLI detects a single obvious client from the project. Multiple matches require an explicit `--client`.
|
|
98
|
+
If you omit `--client`, the CLI detects a single obvious client from the project. Multiple matches require an explicit `--client`. VS Code user scope targets the platform’s default local profile; named profiles, Insiders, remote SSH, WSL, and dev containers need their own setup in that environment.
|
|
62
99
|
|
|
63
100
|
### Scope
|
|
64
101
|
|
|
65
|
-
- `
|
|
66
|
-
- `
|
|
102
|
+
- `user` — write to the selected host’s supported per-user locations so brain is available across that host’s projects
|
|
103
|
+
- `project` (default) — write only under the current repository
|
|
67
104
|
|
|
68
105
|
### Workspace
|
|
69
106
|
|
|
70
|
-
`--workspace <id>` embeds the workspace id in the managed guidance block so agents orient to that workspace. Without it, `brain_workspace_overview` may use the authorization’s default workspace; agents should call `brain_workspaces_list` when the target is unclear.
|
|
107
|
+
`--workspace <id>` embeds the workspace id in the managed guidance block so agents orient to that workspace. Prefer this at project scope. At user scope it affects every project for that host, so use it only for a genuinely global default. Without it, `brain_workspace_overview` may use the authorization’s default workspace; agents should call `brain_workspaces_list` when the target is unclear.
|
|
71
108
|
|
|
72
109
|
## Examples
|
|
73
110
|
|
|
74
111
|
```bash
|
|
75
|
-
#
|
|
76
|
-
npx @brainmcp/brainmcp init --client
|
|
112
|
+
# Cursor for all projects
|
|
113
|
+
npx --yes @brainmcp/brainmcp@latest init --client cursor --scope user
|
|
77
114
|
|
|
78
|
-
#
|
|
79
|
-
npx @brainmcp/brainmcp init --client
|
|
115
|
+
# Codex user-scope with workspace pin
|
|
116
|
+
npx --yes @brainmcp/brainmcp@latest init --client codex --workspace ws_abc --scope user
|
|
80
117
|
|
|
81
|
-
#
|
|
82
|
-
npx @brainmcp/brainmcp init --client
|
|
118
|
+
# Single-repo only
|
|
119
|
+
npx --yes @brainmcp/brainmcp@latest init --client vscode
|
|
83
120
|
|
|
84
|
-
# Preview
|
|
85
|
-
npx @brainmcp/brainmcp print --client vscode
|
|
86
|
-
|
|
87
|
-
# Remove managed config
|
|
88
|
-
npx @brainmcp/brainmcp remove --client cursor --yes
|
|
121
|
+
# Preview / remove
|
|
122
|
+
npx --yes @brainmcp/brainmcp@latest print --client vscode --scope user
|
|
123
|
+
npx --yes @brainmcp/brainmcp@latest remove --client cursor --scope user
|
|
89
124
|
```
|
|
90
125
|
|
|
91
126
|
## What gets written
|
|
92
127
|
|
|
93
128
|
- Canonical MCP endpoint: `https://mcp.brainmcp.ai/mcp` (server name `brain`)
|
|
94
129
|
- Managed instruction markers (`brainmcp:managed:start` / `end`) so later `init` / `remove` can update safely
|
|
130
|
+
- Backups for changed files; existing modes and symlinked dotfiles are preserved, and stale previews are refused
|
|
95
131
|
- No embedded OAuth secrets — tokens come from the browser consent flow
|
|
96
132
|
|
|
97
|
-
Prefer a maintained plugin when your client offers one (Claude Code / Cursor). Use this CLI for project-local, reviewable setup or clients without a plugin.
|
|
98
|
-
|
|
99
133
|
## Requirements
|
|
100
134
|
|
|
101
135
|
- Node.js 22+
|
package/dist/agent-config.js
CHANGED
|
@@ -57,7 +57,7 @@ export const MCP_CLIENT_PROFILES = {
|
|
|
57
57
|
supportsProjectInstructions: true,
|
|
58
58
|
supportsPlugins: false,
|
|
59
59
|
supportsHooks: false,
|
|
60
|
-
notes: '
|
|
60
|
+
notes: 'Prefer the static generic-mcp client id. BrainCP temporarily supports deprecated Dynamic Client Registration for URL-only clients; Client ID Metadata Documents are not advertised yet.',
|
|
61
61
|
},
|
|
62
62
|
};
|
|
63
63
|
export const CANONICAL_WORKFLOW_STEPS = [
|
|
@@ -150,6 +150,16 @@ export function renderClaudeMdBlock(options) {
|
|
|
150
150
|
export function renderAgentsMdBlock(options) {
|
|
151
151
|
return buildProjectInstructionBlock(options);
|
|
152
152
|
}
|
|
153
|
+
export const VSCODE_USER_INSTRUCTIONS_FRONTMATTER = [
|
|
154
|
+
'---',
|
|
155
|
+
'name: BrainMCP',
|
|
156
|
+
'description: Use brain as persistent, reviewable memory across projects.',
|
|
157
|
+
'applyTo: "**"',
|
|
158
|
+
'---',
|
|
159
|
+
].join('\n');
|
|
160
|
+
export function renderVscodeUserInstructions(options) {
|
|
161
|
+
return `${VSCODE_USER_INSTRUCTIONS_FRONTMATTER}\n\n${buildProjectInstructionBlock(options)}`;
|
|
162
|
+
}
|
|
153
163
|
export function renderCursorMdc(options) {
|
|
154
164
|
const alwaysApply = options?.alwaysApply ?? true;
|
|
155
165
|
return [
|
|
@@ -181,9 +191,10 @@ export function buildCursorMcpJson(options) {
|
|
|
181
191
|
});
|
|
182
192
|
}
|
|
183
193
|
/**
|
|
184
|
-
* Claude Code `.mcp.json` server entry. URL-only: Claude Code
|
|
185
|
-
*
|
|
186
|
-
*
|
|
194
|
+
* Claude Code `.mcp.json` server entry. URL-only: Claude Code currently uses
|
|
195
|
+
* BrainCP's deprecated DCR compatibility path with its exact loopback callback.
|
|
196
|
+
* (A pre-configured client id needs the `oauth: { clientId }` shape plus a
|
|
197
|
+
* fixed callback port.)
|
|
187
198
|
*/
|
|
188
199
|
export function buildClaudeCodeMcpJson() {
|
|
189
200
|
return JSON.stringify({
|
|
@@ -194,7 +205,8 @@ export function buildClaudeCodeMcpJson() {
|
|
|
194
205
|
}
|
|
195
206
|
/**
|
|
196
207
|
* VS Code project `.vscode/mcp.json` — VS Code uses a top-level `servers` map
|
|
197
|
-
* (not `mcpServers`). URL-only
|
|
208
|
+
* (not `mcpServers`). URL-only clients currently depend on deprecated DCR
|
|
209
|
+
* compatibility because BrainCP does not advertise CIMD yet.
|
|
198
210
|
*/
|
|
199
211
|
export function buildVscodeMcpJson() {
|
|
200
212
|
return JSON.stringify({
|
|
@@ -215,8 +227,9 @@ export function buildCodexConfigToml() {
|
|
|
215
227
|
* Canonical Claude Code registration. URL-only on purpose: Claude Code's OAuth
|
|
216
228
|
* callback is `http://localhost:<random-port>/callback`, and the authorization
|
|
217
229
|
* server gives registered `localhost` redirects no port flexibility (RFC 8252
|
|
218
|
-
* §8.3), so
|
|
219
|
-
*
|
|
230
|
+
* §8.3), so the current URL-only command depends on deprecated DCR
|
|
231
|
+
* compatibility to register the exact callback. Prefer the static fixed-port
|
|
232
|
+
* fallback where the host supports an explicit client id.
|
|
220
233
|
*/
|
|
221
234
|
export function buildClaudeCodeMcpAddCommand() {
|
|
222
235
|
return `claude mcp add --transport http ${BRAIN_MCP_SERVER_NAME} ${BRAIN_MCP_ENDPOINT}`;
|
|
@@ -229,25 +242,75 @@ export const CLAUDE_CODE_STATIC_FALLBACK_CALLBACK_PORT = 8765;
|
|
|
229
242
|
export function buildClaudeCodeStaticFallbackCommand() {
|
|
230
243
|
return `claude mcp add --transport http ${BRAIN_MCP_SERVER_NAME} ${BRAIN_MCP_ENDPOINT} --client-id ${MCP_OAUTH_CLIENT_IDS.claudeCode} --callback-port ${CLAUDE_CODE_STATIC_FALLBACK_CALLBACK_PORT}`;
|
|
231
244
|
}
|
|
232
|
-
/** npm package name for the publishable setup CLI
|
|
245
|
+
/** npm package name for the publishable setup CLI. */
|
|
233
246
|
export const BRAINMCP_CLI_PACKAGE = '@brainmcp/brainmcp';
|
|
247
|
+
/** Explicit npm dist-tag used by copy/paste setup commands. */
|
|
248
|
+
export const BRAINMCP_CLI_PACKAGE_SPEC = `${BRAINMCP_CLI_PACKAGE}@latest`;
|
|
249
|
+
/** Clients the CLI can configure. Run once per client you use. */
|
|
250
|
+
export const BRAINMCP_CLI_CLIENTS = [
|
|
251
|
+
'claude-code',
|
|
252
|
+
'cursor',
|
|
253
|
+
'codex',
|
|
254
|
+
'vscode',
|
|
255
|
+
'generic',
|
|
256
|
+
];
|
|
257
|
+
/** Named agent hosts configured by `brainmcp init --all`. */
|
|
258
|
+
export const BRAINMCP_GLOBAL_CLIENTS = [
|
|
259
|
+
'claude-code',
|
|
260
|
+
'cursor',
|
|
261
|
+
'codex',
|
|
262
|
+
'vscode',
|
|
263
|
+
];
|
|
264
|
+
function brainmcpCliBinary(invoke = 'npx') {
|
|
265
|
+
return invoke === 'global'
|
|
266
|
+
? 'brainmcp'
|
|
267
|
+
: `npx --yes ${BRAINMCP_CLI_PACKAGE_SPEC}`;
|
|
268
|
+
}
|
|
269
|
+
/** Install the CLI once on your PATH (`brainmcp` available in every shell). */
|
|
270
|
+
export function buildBrainmcpGlobalInstallCommand() {
|
|
271
|
+
return `npm install -g ${BRAINMCP_CLI_PACKAGE_SPEC}`;
|
|
272
|
+
}
|
|
234
273
|
export function buildBrainmcpInitCommand(options) {
|
|
235
|
-
|
|
236
|
-
|
|
274
|
+
if (options?.all && options.client) {
|
|
275
|
+
throw new Error('buildBrainmcpInitCommand cannot combine client and all.');
|
|
276
|
+
}
|
|
277
|
+
const parts = [`${brainmcpCliBinary(options?.invoke)} init`];
|
|
278
|
+
if (options?.all)
|
|
279
|
+
parts.push('--all');
|
|
280
|
+
else if (options?.client)
|
|
237
281
|
parts.push(`--client ${options.client}`);
|
|
238
282
|
if (options?.workspaceId)
|
|
239
283
|
parts.push(`--workspace ${options.workspaceId}`);
|
|
240
|
-
|
|
284
|
+
if (options?.scope === 'user')
|
|
285
|
+
parts.push('--scope user');
|
|
286
|
+
if (options?.yes === true)
|
|
287
|
+
parts.push('--yes');
|
|
241
288
|
return parts.join(' ');
|
|
242
289
|
}
|
|
243
290
|
export function buildBrainmcpDoctorCommand(options) {
|
|
244
|
-
const parts = [
|
|
291
|
+
const parts = [`${brainmcpCliBinary(options?.invoke)} doctor`];
|
|
245
292
|
if (options?.workspaceId)
|
|
246
293
|
parts.push(`--workspace ${options.workspaceId}`);
|
|
247
294
|
if (options?.client)
|
|
248
295
|
parts.push(`--client ${options.client}`);
|
|
296
|
+
if (options?.scope === 'user')
|
|
297
|
+
parts.push('--scope user');
|
|
249
298
|
return parts.join(' ');
|
|
250
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* One-shot setup: run the latest CLI without a permanent global install, then
|
|
302
|
+
* preview one combined user-scope change for every supported named agent.
|
|
303
|
+
* `npx --yes` skips npm's package-download prompt; the CLI still asks before
|
|
304
|
+
* writing because the generated command intentionally omits its trailing `--yes`.
|
|
305
|
+
*/
|
|
306
|
+
export function buildBrainmcpUserScopeSetupScript(options) {
|
|
307
|
+
return buildBrainmcpInitCommand({
|
|
308
|
+
all: true,
|
|
309
|
+
workspaceId: options?.workspaceId,
|
|
310
|
+
scope: 'user',
|
|
311
|
+
yes: false,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
251
314
|
export function buildServerInstructions() {
|
|
252
315
|
return [
|
|
253
316
|
'brain is this project\'s shared, persistent, reviewable memory MCP. It is also called brainmcp; every tool is prefixed brain_. When the user says "use brain", "check brain", "save this to brain", or "use brainmcp", they mean this server.',
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -5,6 +5,12 @@ export type CommandOptions = {
|
|
|
5
5
|
workspace?: string;
|
|
6
6
|
scope: Scope;
|
|
7
7
|
yes: boolean;
|
|
8
|
+
/** Test/embedding override. The CLI defaults to `os.homedir()`. */
|
|
9
|
+
home?: string;
|
|
10
|
+
/** Test/embedding override. The CLI defaults to `process.env`. */
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
/** Test/embedding override. The CLI defaults to `process.platform`. */
|
|
13
|
+
platform?: NodeJS.Platform;
|
|
8
14
|
fetch?: typeof fetch;
|
|
9
15
|
confirm?: (message: string) => Promise<boolean>;
|
|
10
16
|
output: (message: string) => void;
|
|
@@ -12,6 +18,7 @@ export type CommandOptions = {
|
|
|
12
18
|
export declare function detectClients(root: string): Promise<ClientId[]>;
|
|
13
19
|
export declare function chooseClient(options: CommandOptions): Promise<ClientId>;
|
|
14
20
|
export declare function init(options: CommandOptions): Promise<void>;
|
|
21
|
+
export declare function initAll(options: CommandOptions): Promise<void>;
|
|
15
22
|
export declare function remove(options: CommandOptions): Promise<void>;
|
|
16
23
|
export declare function printConfig(options: CommandOptions): Promise<void>;
|
|
17
24
|
export declare function doctor(options: CommandOptions): Promise<void>;
|
package/dist/commands/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
|
-
import { BRAIN_MCP_ENDPOINT } from '../agent-config.js';
|
|
4
|
-
import { clientLabel, renderGuidance, resolveWorkspace, targetFor } from '../lib/config.js';
|
|
3
|
+
import { BRAIN_DOCS_URL, BRAIN_MCP_ENDPOINT, BRAINMCP_GLOBAL_CLIENTS, buildBrainmcpDoctorCommand, } from '../agent-config.js';
|
|
4
|
+
import { clientLabel, guidancePreamble, renderGuidance, resolveWorkspace, targetFor, } from '../lib/config.js';
|
|
5
5
|
import { applyChanges, exists, readText, renderDiff, toAbsolute } from '../lib/files.js';
|
|
6
6
|
import { parseJsonc, removeJsonServer, removeMarkdownBlock, removeTomlBlock, upsertJsonServer, upsertMarkdownBlock, upsertTomlBlock } from '../lib/managed.js';
|
|
7
7
|
export async function detectClients(root) {
|
|
@@ -31,13 +31,37 @@ export async function chooseClient(options) {
|
|
|
31
31
|
export async function init(options) {
|
|
32
32
|
const client = await chooseClient(options);
|
|
33
33
|
const workspace = resolveWorkspace(options.workspace);
|
|
34
|
-
const changes = await plannedChanges(options
|
|
34
|
+
const changes = await plannedChanges(options, client, workspace, 'init');
|
|
35
35
|
await previewAndApply(changes, options);
|
|
36
|
-
options.output(`BrainMCP configured for ${clientLabel(client)}
|
|
36
|
+
options.output(`BrainMCP configured for ${clientLabel(client)}.`);
|
|
37
|
+
options.output(renderSetupNextSteps([client], options.scope, workspace));
|
|
38
|
+
}
|
|
39
|
+
export async function initAll(options) {
|
|
40
|
+
const workspace = resolveWorkspace(options.workspace);
|
|
41
|
+
const groups = await Promise.all(BRAINMCP_GLOBAL_CLIENTS.map((client) => plannedChanges(options, client, workspace, 'init')));
|
|
42
|
+
await previewAndApply(mergeFileChanges(groups.flat()), options);
|
|
43
|
+
options.output(`BrainMCP configured for ${BRAINMCP_GLOBAL_CLIENTS.map(clientLabel).join(', ')}.`);
|
|
44
|
+
options.output(renderSetupNextSteps(BRAINMCP_GLOBAL_CLIENTS, options.scope, workspace));
|
|
45
|
+
}
|
|
46
|
+
function renderSetupNextSteps(clients, scope, workspace) {
|
|
47
|
+
const clientList = clients.map(clientLabel).join(', ');
|
|
48
|
+
const doctorCommands = clients.map((client) => ` ${buildBrainmcpDoctorCommand({ client, scope, workspaceId: workspace })}`);
|
|
49
|
+
return [
|
|
50
|
+
'',
|
|
51
|
+
'Next steps:',
|
|
52
|
+
`1. Restart or reopen ${clientList}.`,
|
|
53
|
+
'2. Start a session, open the brain connection, and complete browser OAuth. Review the scopes and select the workspaces this client may reach.',
|
|
54
|
+
'3. Ask: "Use brain to give me an overview of this workspace."',
|
|
55
|
+
'4. Check local configuration and public service discovery if needed:',
|
|
56
|
+
...doctorCommands,
|
|
57
|
+
`Guide: ${BRAIN_DOCS_URL}/quickstart`,
|
|
58
|
+
'',
|
|
59
|
+
'No API keys or OAuth secrets were written to configuration files.',
|
|
60
|
+
].join('\n');
|
|
37
61
|
}
|
|
38
62
|
export async function remove(options) {
|
|
39
63
|
const client = await chooseClient(options);
|
|
40
|
-
const changes = await plannedChanges(options
|
|
64
|
+
const changes = await plannedChanges(options, client, undefined, 'remove');
|
|
41
65
|
if (changes.every((change) => change.before === change.after)) {
|
|
42
66
|
options.output('No BrainMCP-managed configuration found.');
|
|
43
67
|
return;
|
|
@@ -48,12 +72,12 @@ export async function remove(options) {
|
|
|
48
72
|
export async function printConfig(options) {
|
|
49
73
|
const client = await chooseClient(options);
|
|
50
74
|
const workspace = resolveWorkspace(options.workspace);
|
|
51
|
-
const target = resolveTarget(options
|
|
52
|
-
options.output(`# ${clientLabel(client)} (${options.scope} scope)\n\nMCP configuration: ${target.configPath}\n\n${target.format === 'toml' ? upsertTomlBlock(undefined, client) : upsertJsonServer(undefined, client, target.rootKey)}\nGuidance: ${target.guidancePath}\n\n${
|
|
75
|
+
const target = resolveTarget(options, targetFor(client, options.scope));
|
|
76
|
+
options.output(`# ${clientLabel(client)} (${options.scope} scope)\n\nMCP configuration: ${target.configPath}\n\n${target.format === 'toml' ? upsertTomlBlock(undefined, client) : upsertJsonServer(undefined, client, target.rootKey)}\nGuidance: ${target.guidancePath}\n\n${upsertGuidance(undefined, client, options.scope, workspace)}`);
|
|
53
77
|
}
|
|
54
78
|
export async function doctor(options) {
|
|
55
79
|
const client = await chooseClient(options);
|
|
56
|
-
const target = resolveTarget(options
|
|
80
|
+
const target = resolveTarget(options, targetFor(client, options.scope));
|
|
57
81
|
const checks = [];
|
|
58
82
|
const config = await readText(target.configPath);
|
|
59
83
|
const guidance = await readText(target.guidancePath);
|
|
@@ -76,8 +100,17 @@ export async function doctor(options) {
|
|
|
76
100
|
}
|
|
77
101
|
if (guidance !== undefined) {
|
|
78
102
|
const occurrences = (guidance.match(/brainmcp:managed:start/g) ?? []).length;
|
|
79
|
-
checks.push(['managed guidance markers', occurrences === 1
|
|
103
|
+
checks.push(['managed guidance markers', occurrences === 1, occurrences === 1 ? 'one managed block' : `${occurrences} managed blocks`]);
|
|
80
104
|
checks.push(['workspace binding', !options.workspace || guidance.includes(`Workspace id: ${resolveWorkspace(options.workspace)}`), options.workspace ? 'requested workspace binding' : 'no workspace requested']);
|
|
105
|
+
if (client === 'vscode' && options.scope === 'user') {
|
|
106
|
+
checks.push([
|
|
107
|
+
'user instruction frontmatter',
|
|
108
|
+
guidance.startsWith('---\n') &&
|
|
109
|
+
/^applyTo:\s*["']\*\*["']$/m.test(guidance) &&
|
|
110
|
+
guidance.includes('\n---\n'),
|
|
111
|
+
'always-on VS Code user instruction',
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
81
114
|
}
|
|
82
115
|
const fetchImpl = options.fetch ?? fetch;
|
|
83
116
|
try {
|
|
@@ -94,15 +127,13 @@ export async function doctor(options) {
|
|
|
94
127
|
catch (error) {
|
|
95
128
|
checks.push(['endpoint challenge', false, error instanceof Error ? error.message : String(error)]);
|
|
96
129
|
}
|
|
97
|
-
const duplicate = await duplicateGuidance(options.root);
|
|
98
|
-
checks.push(['duplicate guidance', duplicate.length <= 1, duplicate.length ? duplicate.join(', ') : 'none found']);
|
|
99
130
|
for (const [name, passed, detail] of checks)
|
|
100
131
|
options.output(`${passed ? '✓' : '✗'} ${name}: ${detail}`);
|
|
101
132
|
if (checks.some(([, passed]) => !passed))
|
|
102
133
|
throw new Error('BrainMCP doctor found configuration issues.');
|
|
103
134
|
}
|
|
104
|
-
async function plannedChanges(
|
|
105
|
-
const target = resolveTarget(
|
|
135
|
+
async function plannedChanges(options, client, workspace, mode) {
|
|
136
|
+
const target = resolveTarget(options, targetFor(client, options.scope));
|
|
106
137
|
const [config, guidance] = await Promise.all([readText(target.configPath), readText(target.guidancePath)]);
|
|
107
138
|
return [
|
|
108
139
|
{
|
|
@@ -115,20 +146,87 @@ async function plannedChanges(root, client, scope, workspace, mode) {
|
|
|
115
146
|
{
|
|
116
147
|
path: target.guidancePath,
|
|
117
148
|
before: guidance,
|
|
118
|
-
after: mode === 'init'
|
|
149
|
+
after: mode === 'init'
|
|
150
|
+
? upsertGuidance(guidance, client, options.scope, workspace)
|
|
151
|
+
: removeGuidance(guidance, client, options.scope),
|
|
119
152
|
},
|
|
120
153
|
];
|
|
121
154
|
}
|
|
122
|
-
function resolveTarget(
|
|
123
|
-
const
|
|
155
|
+
function resolveTarget(options, target) {
|
|
156
|
+
const home = options.home ?? homedir();
|
|
157
|
+
if (options.scope === 'user' && target.client === 'codex') {
|
|
158
|
+
const configuredCodexHome = (options.env ?? process.env).CODEX_HOME?.trim();
|
|
159
|
+
const codexHome = configuredCodexHome ? resolve(configuredCodexHome) : join(home, '.codex');
|
|
160
|
+
return {
|
|
161
|
+
...target,
|
|
162
|
+
configPath: join(codexHome, 'config.toml'),
|
|
163
|
+
guidancePath: join(codexHome, 'AGENTS.md'),
|
|
164
|
+
format: target.configFormat,
|
|
165
|
+
rootKey: target.configRootKey,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const base = options.scope === 'user' ? home : options.root;
|
|
124
169
|
return {
|
|
125
170
|
...target,
|
|
126
|
-
configPath:
|
|
171
|
+
configPath: options.scope === 'user' && target.client === 'vscode'
|
|
172
|
+
? vscodeUserConfigPath(home, options.env ?? process.env, options.platform ?? process.platform)
|
|
173
|
+
: toAbsolute(base, target.configPath),
|
|
127
174
|
guidancePath: toAbsolute(base, target.guidancePath),
|
|
128
175
|
format: target.configFormat,
|
|
129
176
|
rootKey: target.configRootKey,
|
|
130
177
|
};
|
|
131
178
|
}
|
|
179
|
+
function vscodeUserConfigPath(home, env, platform) {
|
|
180
|
+
if (platform === 'win32') {
|
|
181
|
+
return join(env.APPDATA?.trim() || join(home, 'AppData', 'Roaming'), 'Code', 'User', 'mcp.json');
|
|
182
|
+
}
|
|
183
|
+
if (platform === 'darwin') {
|
|
184
|
+
return join(home, 'Library', 'Application Support', 'Code', 'User', 'mcp.json');
|
|
185
|
+
}
|
|
186
|
+
return join(env.XDG_CONFIG_HOME?.trim() || join(home, '.config'), 'Code', 'User', 'mcp.json');
|
|
187
|
+
}
|
|
188
|
+
function upsertGuidance(existing, client, scope, workspace) {
|
|
189
|
+
const preamble = guidancePreamble(client, scope);
|
|
190
|
+
const normalized = preamble && existing
|
|
191
|
+
? collapseGeneratedPreambles(existing, preamble)
|
|
192
|
+
: existing;
|
|
193
|
+
const managed = upsertMarkdownBlock(normalized, renderGuidance(client, workspace));
|
|
194
|
+
if (!preamble || normalized !== undefined)
|
|
195
|
+
return managed;
|
|
196
|
+
return `${preamble}\n\n${managed}`;
|
|
197
|
+
}
|
|
198
|
+
function removeGuidance(existing, client, scope) {
|
|
199
|
+
const preamble = guidancePreamble(client, scope);
|
|
200
|
+
const removed = removeMarkdownBlock(existing);
|
|
201
|
+
const normalized = preamble && removed
|
|
202
|
+
? collapseGeneratedPreambles(removed, preamble)
|
|
203
|
+
: removed;
|
|
204
|
+
return preamble && normalized?.trim() === preamble.trim() ? undefined : normalized;
|
|
205
|
+
}
|
|
206
|
+
function collapseGeneratedPreambles(text, preamble) {
|
|
207
|
+
const prefix = `${preamble.trimEnd()}\n\n`;
|
|
208
|
+
let remainder = text;
|
|
209
|
+
let count = 0;
|
|
210
|
+
while (remainder.startsWith(prefix)) {
|
|
211
|
+
remainder = remainder.slice(prefix.length);
|
|
212
|
+
count += 1;
|
|
213
|
+
}
|
|
214
|
+
return count > 0 ? `${prefix}${remainder}` : text;
|
|
215
|
+
}
|
|
216
|
+
function mergeFileChanges(changes) {
|
|
217
|
+
const merged = new Map();
|
|
218
|
+
for (const change of changes) {
|
|
219
|
+
const previous = merged.get(change.path);
|
|
220
|
+
if (!previous) {
|
|
221
|
+
merged.set(change.path, change);
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if (previous.before !== change.before || previous.after !== change.after) {
|
|
225
|
+
throw new Error(`Conflicting planned changes for ${change.path}. Configure clients individually.`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return [...merged.values()];
|
|
229
|
+
}
|
|
132
230
|
async function previewAndApply(changes, options) {
|
|
133
231
|
const changed = changes.filter((change) => change.before !== change.after);
|
|
134
232
|
if (!changed.length) {
|
|
@@ -140,14 +238,8 @@ async function previewAndApply(changes, options) {
|
|
|
140
238
|
throw new Error('Aborted. Re-run with --yes after reviewing the preview.');
|
|
141
239
|
}
|
|
142
240
|
const backups = await applyChanges(changed);
|
|
143
|
-
options.output(backups.length
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const paths = ['CLAUDE.md', 'AGENTS.md', '.cursor/rules/brainmcp-workspace.mdc'];
|
|
147
|
-
const matches = [];
|
|
148
|
-
for (const path of paths)
|
|
149
|
-
if ((await readText(join(root, path)))?.includes('brainmcp:managed:start'))
|
|
150
|
-
matches.push(path);
|
|
151
|
-
return matches;
|
|
241
|
+
options.output(backups.length
|
|
242
|
+
? `Applied changes with atomic per-file writes. Backups: ${backups.join(', ')}`
|
|
243
|
+
: 'Applied changes with atomic per-file writes.');
|
|
152
244
|
}
|
|
153
245
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|