@bridge_gpt/mcp-server 0.2.41 → 0.2.43
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 +330 -191
- package/build/agent-capabilities/cli.js +2 -1
- package/build/agent-launchers/claude-executor-adapter.js +17 -4
- package/build/agents.generated.js +2 -2
- package/build/claude-review-workflow.js +510 -45
- package/build/claude-user-config-doctor.js +42 -11
- package/build/cli-release.js +2 -1
- package/build/commands.generated.js +6 -5
- package/build/conduct-epic/bridge-client.js +354 -113
- package/build/conduct-epic/checkpoint-store.js +17 -0
- package/build/conduct-epic/cli.js +947 -99
- package/build/conduct-epic/cut-protocol.js +327 -0
- package/build/conduct-epic/spawn.js +14 -2
- package/build/conductor/bridge-api-client.js +148 -1
- package/build/conductor/cli.js +109 -1
- package/build/conductor/doctor.js +101 -16
- package/build/conductor/epic-reconcile.js +72 -19
- package/build/conductor/epic-runtime.js +15 -3
- package/build/conductor/errors.js +47 -0
- package/build/conductor/git-hooks.js +205 -11
- package/build/conductor/install-doctor.js +230 -1
- package/build/conductor/local-merge.js +130 -28
- package/build/conductor/recovery-cli.js +313 -0
- package/build/conductor/recovery-operations.js +219 -0
- package/build/conductor/tools.js +32 -3
- package/build/conductor/worker-ledger-cli.js +27 -1
- package/build/conductor-bin.js +20 -16
- package/build/credentials-cli.js +3 -2
- package/build/docs.generated.js +2 -1
- package/build/doctor.js +120 -44
- package/build/drive-epic.js +375 -0
- package/build/executor/cli.js +48 -1
- package/build/executor/env.js +21 -0
- package/build/executor/http-client.js +71 -3
- package/build/executor/index-scope.js +39 -0
- package/build/executor/job-errors.js +9 -0
- package/build/executor/job-log-registry.js +69 -0
- package/build/executor/job-runner.js +198 -29
- package/build/executor/live-worker-registry.js +83 -0
- package/build/executor/observation.js +259 -6
- package/build/executor/platform.js +147 -3
- package/build/executor/process.js +58 -14
- package/build/executor/runner.js +454 -48
- package/build/executor/test-clock.js +3 -2
- package/build/executor/worker-finalization.js +233 -56
- package/build/executor/worktree.js +8 -1
- package/build/index-scope-contract.js +96 -0
- package/build/index.js +2277 -270
- package/build/init.js +83 -22
- package/build/install-bridge-conductor.js +323 -14
- package/build/install-bridge.js +225 -47
- package/build/install-doctor.js +23 -9
- package/build/install-reexec.js +2 -1
- package/build/launcher-config-inspection.js +83 -22
- package/build/mcp-host-config.js +331 -67
- package/build/mcp-host-targets.js +45 -21
- package/build/mcp-identity.js +92 -0
- package/build/mcp-install-state.js +94 -1
- package/build/mcp-invoke.js +2 -1
- package/build/mcp-provisioning.js +45 -12
- package/build/mcp-registration-doctor.js +35 -13
- package/build/mcp-server-invocation.js +4 -2
- package/build/merge-pull-request.js +208 -9
- package/build/pipelines.generated.js +305 -15
- package/build/plane/cli.js +73 -7
- package/build/plane/defaults.js +18 -5
- package/build/plane/manifest.js +90 -0
- package/build/plane/preflight.js +100 -10
- package/build/plane/shutdown.js +71 -3
- package/build/plane/test-fakes.js +9 -1
- package/build/readme.generated.js +1 -1
- package/build/regression-check.js +3 -2
- package/build/review-tickets.js +8 -7
- package/build/run-unit-tests-launcher.js +149 -6
- package/build/schedule-run.js +3 -2
- package/build/setup-epic.js +531 -82
- package/build/sfcc/tool-wrapper.js +15 -0
- package/build/start-tickets-prereqs.js +11 -6
- package/build/start-tickets.js +91 -85
- package/build/update-check.js +3 -2
- package/build/upgrade-advice.js +2 -1
- package/build/upgrade-cli.js +50 -18
- package/build/version.generated.js +2 -1
- package/build/worktree-core.js +31 -17
- package/docs/CONDUCTOR.md +22 -0
- package/docs/install/mcp-tool-integrations.md +19 -3
- package/package.json +2 -2
- package/pipelines/greenfield-setup.json +286 -0
package/README.md
CHANGED
|
@@ -13,21 +13,27 @@ npx -y @bridge_gpt/mcp-server install
|
|
|
13
13
|
That is the whole setup command. It works whether or not you already have a Bridge
|
|
14
14
|
account — it will ask.
|
|
15
15
|
|
|
16
|
-
>
|
|
17
|
-
>
|
|
18
|
-
> package name; it is not the setup command, and no packaging option lets the
|
|
19
|
-
> publisher change or remove it. Installing the package that way does not connect
|
|
20
|
-
> anything. Use the command above.
|
|
16
|
+
> We recommend **the command above** instead of the `npm i @bridge_gpt/mcp-server`
|
|
17
|
+
> one in npm's sidebar, because it **will make set up much easier**.
|
|
21
18
|
|
|
22
|
-
**What it
|
|
19
|
+
**What it will do**
|
|
23
20
|
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
- Registers a `bridge
|
|
21
|
+
- **Bootstraps the Bridge MCP for you** — one command and your editor's agent can
|
|
22
|
+
use Bridge's tools and slash commands on this project.
|
|
23
|
+
- Registers a `bridge` MCP server in your editor's MCP config, leaving any
|
|
27
24
|
other servers you have configured untouched.
|
|
28
|
-
- Creates
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
- Creates and updates the files it needs inside your project root: slash commands
|
|
26
|
+
and agent definitions for your editor (`.claude/commands/`, `.cursor/commands/`,
|
|
27
|
+
and the equivalents your editor uses), your editor's MCP config, and `.bridge/`
|
|
28
|
+
for your project manifest and pipeline definitions.
|
|
29
|
+
- Stores your Bridge credential outside the project, so the MCP server and the
|
|
30
|
+
tooling that spawns its own shells can find it without you configuring anything.
|
|
31
|
+
Re-running `install` still asks for the credential unless you supply it through
|
|
32
|
+
`--api-key` or `BAPI_API_KEY` — the installer writes that store, it does not read
|
|
33
|
+
it back.
|
|
34
|
+
- Writes outside your project root only when you pick a host whose configuration is
|
|
35
|
+
global: OpenAI Codex (`~/.codex/config.toml`) and GitHub Copilot CLI
|
|
36
|
+
(`~/.copilot/mcp-config.json`).
|
|
31
37
|
|
|
32
38
|
**Prerequisites**
|
|
33
39
|
|
|
@@ -35,18 +41,18 @@ account — it will ask.
|
|
|
35
41
|
- **A project directory** — run the command from the folder your editor opens: your
|
|
36
42
|
repository root, the one containing `.git`. No `package.json` is required — SFCC
|
|
37
43
|
cartridge repos, Python, Go, Rust, and other non-Node projects work the same way.
|
|
38
|
-
- **An MCP-capable editor**: Claude Code, GitHub Copilot
|
|
39
|
-
OpenAI Codex.
|
|
44
|
+
- **An MCP-capable editor or CLI**: Claude Code, GitHub Copilot in VS Code, GitHub
|
|
45
|
+
Copilot CLI, Cursor, Windsurf, or OpenAI Codex.
|
|
40
46
|
- **No Bridge account needed.** The installer can create one for you from just an
|
|
41
47
|
email address.
|
|
42
48
|
|
|
43
49
|
## Contents
|
|
44
50
|
|
|
45
51
|
- [Install](#install)
|
|
46
|
-
- [
|
|
47
|
-
- [
|
|
48
|
-
- [
|
|
49
|
-
- [
|
|
52
|
+
- [Installation details](#installation-details)
|
|
53
|
+
- [Installing, step by step](#installing-step-by-step)
|
|
54
|
+
- [What to expect](#what-to-expect)
|
|
55
|
+
- [Troubleshooting](#troubleshooting)
|
|
50
56
|
- [Usage Documentation](#usage-documentation)
|
|
51
57
|
- [Regularly useful](#regularly-useful)
|
|
52
58
|
- [Occasionally useful](#occasionally-useful)
|
|
@@ -63,7 +69,9 @@ account — it will ask.
|
|
|
63
69
|
|
|
64
70
|
For advanced epic/multi-agent orchestration, see [CONDUCTOR.md](./docs/CONDUCTOR.md).
|
|
65
71
|
|
|
66
|
-
##
|
|
72
|
+
## Installation details
|
|
73
|
+
|
|
74
|
+
### Installing, step by step
|
|
67
75
|
|
|
68
76
|
**1. Open a terminal in your project root.** This matters: the installer writes
|
|
69
77
|
your slash commands and MCP config relative to the directory you run it from. If
|
|
@@ -91,7 +99,7 @@ a token:
|
|
|
91
99
|
|
|
92
100
|
There is no default answer, so pressing Enter alone selects nothing. If you would
|
|
93
101
|
rather not be asked, pass the answer up front instead — see
|
|
94
|
-
[Choosing how you sign in](#
|
|
102
|
+
[Choosing how you sign in](#choosing-how-you-sign-in).
|
|
95
103
|
|
|
96
104
|
**4. Pick which editors to configure.** The installer detects the MCP hosts on your
|
|
97
105
|
machine and asks which ones to set up. Pick every editor you actually use for this
|
|
@@ -102,10 +110,19 @@ freshly written config is not live until you reload. Restart the editor, or use
|
|
|
102
110
|
"reload MCP servers" action. In Claude Code you will also be asked to trust the
|
|
103
111
|
project's `.mcp.json` the first time.
|
|
104
112
|
|
|
105
|
-
**6. Finish in the agent session the installer opens
|
|
106
|
-
installer does is open a fresh agent session running
|
|
107
|
-
your codebase, fills in the remaining project
|
|
108
|
-
of what Bridge can help with. Let it finish.
|
|
113
|
+
**6. Finish in the agent session the installer opens — when it opens one.** The
|
|
114
|
+
last thing the installer does is offer to open a fresh agent session running
|
|
115
|
+
`/install-bridge`, which reads your codebase, fills in the remaining project
|
|
116
|
+
settings, and prints a short report of what Bridge can help with. Let it finish.
|
|
117
|
+
|
|
118
|
+
Three things all have to hold for that session to open: your selection has to
|
|
119
|
+
include a host the installer can launch, the run has to be on an interactive
|
|
120
|
+
terminal, and you have to accept the consent prompt (*"Bridge can configure and set
|
|
121
|
+
up this project for you automatically. Open a `<tool>` session to do that now?
|
|
122
|
+
(Y/n)"*). Claude Code is the only selection that launches on its own. A
|
|
123
|
+
Cursor-only, Copilot, Copilot CLI, Codex, or Windsurf selection, a non-interactive
|
|
124
|
+
run, or a declined prompt all print the command to continue by hand instead. Pass
|
|
125
|
+
`--agent claude` or `--agent cursor-agent` to override the decision outright.
|
|
109
126
|
|
|
110
127
|
**7. Follow the next step the session shows you, if it shows one.** The installer
|
|
111
128
|
asks the server what should happen next and shows that command only when there is
|
|
@@ -119,7 +136,8 @@ there is nothing for you to run.
|
|
|
119
136
|
|
|
120
137
|
Want to see what would happen without changing anything? Add `--dry-run`.
|
|
121
138
|
|
|
122
|
-
|
|
139
|
+
<details>
|
|
140
|
+
<summary id="what-to-expect"><strong>What to expect</strong></summary>
|
|
123
141
|
|
|
124
142
|
**Files that appear in your project**
|
|
125
143
|
|
|
@@ -134,16 +152,35 @@ Want to see what would happen without changing anything? Add `--dry-run`.
|
|
|
134
152
|
The installer tells you which of these are safe to commit and never recommends
|
|
135
153
|
committing anything that can hold a credential.
|
|
136
154
|
|
|
137
|
-
**Prompts you will see.**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
155
|
+
**Prompts you will see.** More than the sign-in question, in three groups:
|
|
156
|
+
|
|
157
|
+
- *Always on a first bare interactive run:* the sign-in question, a hidden prompt
|
|
158
|
+
for a token (or a visible one for an email), a project name for a brand-new
|
|
159
|
+
project, a picker for which editors to configure, and an offer to connect GitHub
|
|
160
|
+
(`Connect GitHub? [y/N]:`).
|
|
161
|
+
- *Conditional on your situation:* a confirmation when the directory has no `.git`
|
|
162
|
+
(default **No**, and declining aborts); a *"Which tool should open? [1-N]"*
|
|
163
|
+
chooser when your selection contains more than one launchable tool; and the
|
|
164
|
+
consent prompt before the final agent session.
|
|
165
|
+
- *Overwrite confirmations, each default **No** and each skippable with `--force`:*
|
|
166
|
+
a saved key for this project already exists; a host config already contains a
|
|
167
|
+
`BAPI_API_KEY`; a **git-tracked** config would receive your real key; a saved but
|
|
168
|
+
expired self-serve signup would be discarded.
|
|
169
|
+
|
|
170
|
+
**A fresh agent session opens at the end — if your selection can launch one.** See
|
|
171
|
+
step 6 above for the three conditions. Use `--agent cursor-agent` if you want
|
|
143
172
|
Cursor's agent instead of Claude Code.
|
|
144
173
|
|
|
145
|
-
**
|
|
146
|
-
|
|
174
|
+
**Selecting Windsurf prints instructions instead of writing config.** Windsurf's
|
|
175
|
+
global `mcp_config.json` is never modified automatically; the installer reports the
|
|
176
|
+
entry for you to paste yourself. Codex and Copilot CLI *are* written automatically,
|
|
177
|
+
even though their files are global too.
|
|
178
|
+
|
|
179
|
+
**Your key is stored for the tools that read the store.** The MCP server and the
|
|
180
|
+
shell-spawned tooling (`start-tickets` and its model routing) resolve it from
|
|
181
|
+
`~/.config/bridge/credentials.json` on their own. The **installer** does not: a
|
|
182
|
+
repeat `install` prompts for the credential again unless you pass `--api-key` or
|
|
183
|
+
set `BAPI_API_KEY` in the environment.
|
|
147
184
|
|
|
148
185
|
**A next step, when the project needs one.** The session closes with whatever
|
|
149
186
|
command the server says comes next, and stays quiet when there is nothing to
|
|
@@ -156,18 +193,24 @@ than from your project's documented conventions.
|
|
|
156
193
|
your project has the settings it needs, indexing starts server-side. You never have
|
|
157
194
|
to ask for it.
|
|
158
195
|
|
|
159
|
-
|
|
196
|
+
</details>
|
|
197
|
+
|
|
198
|
+
<details>
|
|
199
|
+
<summary id="troubleshooting"><strong>Troubleshooting</strong></summary>
|
|
160
200
|
|
|
161
201
|
**"My editor doesn't see any Bridge tools."** Two usual causes. First, the config
|
|
162
202
|
was written somewhere your editor is not looking — re-run the installer from the
|
|
163
|
-
directory your editor actually opens, and check that a `bridge
|
|
203
|
+
directory your editor actually opens, and check that a `bridge` entry exists in
|
|
164
204
|
that project's MCP config. Second, the editor has not been reloaded since the file
|
|
165
205
|
was written; restart it. In Claude Code, also confirm you accepted the trust prompt
|
|
166
206
|
for the project's `.mcp.json`.
|
|
167
207
|
|
|
168
|
-
**"I ran it in the wrong folder."** Nothing is broken.
|
|
169
|
-
|
|
170
|
-
|
|
208
|
+
**"I ran it in the wrong folder."** Nothing is broken. Depending on which editors
|
|
209
|
+
were detected, a run can leave `.bridge/`, `.bridge/install-state.json`, `.claude/`,
|
|
210
|
+
`.cursor/commands/`, `.cursor/mcp.json`, `.vscode/mcp.json`, `.github/agents/`,
|
|
211
|
+
`.mcp.json`, and appended `.gitignore` lines. Remove only what that run created and
|
|
212
|
+
re-run the command from the right directory — if you already had a `.vscode/`,
|
|
213
|
+
`.cursor/`, or `.gitignore` there, keep the parts you had before.
|
|
171
214
|
|
|
172
215
|
**"It seems to hang with no output."** If you ran the bare command
|
|
173
216
|
(`npx -y @bridge_gpt/mcp-server`) with no subcommand, you started the MCP *server*,
|
|
@@ -178,7 +221,11 @@ looks like a hang. It prints a line saying so. Press Ctrl-C and run
|
|
|
178
221
|
`npx -y @bridge_gpt/mcp-server serve` starts the server on purpose.
|
|
179
222
|
|
|
180
223
|
**"It can't reach Bridge" or "my key was rejected."** The installer checks
|
|
181
|
-
connectivity before it saves
|
|
224
|
+
connectivity before it saves your **credential** anywhere, so a failure here has not
|
|
225
|
+
written your key into a config or stored it for later. It has already
|
|
226
|
+
scaffolded the project files by then — slash commands, agents, pipelines,
|
|
227
|
+
`.bridge/config`, and secret-free per-host MCP placeholders — so expect those to
|
|
228
|
+
exist; re-running is safe and refreshes them. A
|
|
182
229
|
rejected key means the credential is not valid for that project — check the project
|
|
183
230
|
name you gave, and generate a fresh key on the Bridge web UI's **Security** page if
|
|
184
231
|
needed. A network failure usually means a proxy or VPN is in the way.
|
|
@@ -196,10 +243,10 @@ npx -y @bridge_gpt/mcp-server doctor
|
|
|
196
243
|
`doctor` is strictly read-only. It reports what it found — configs, registrations,
|
|
197
244
|
credential availability, prerequisites — and changes nothing.
|
|
198
245
|
|
|
199
|
-
|
|
246
|
+
</details>
|
|
200
247
|
|
|
201
248
|
<details>
|
|
202
|
-
<summary><strong>Choosing how you sign in</strong></summary>
|
|
249
|
+
<summary id="choosing-how-you-sign-in"><strong>Choosing how you sign in</strong></summary>
|
|
203
250
|
|
|
204
251
|
Three routes lead to the same place. The interactive question above picks one for
|
|
205
252
|
you; these flags pick it up front and skip the question entirely.
|
|
@@ -253,8 +300,8 @@ created or spent.
|
|
|
253
300
|
| `--invite [code]` | Redeem an invite code. Omit the value for the hidden prompt (recommended) |
|
|
254
301
|
| `--api-key <key>` | Use an existing Bridge API key |
|
|
255
302
|
| `--repo <name>` | Name the registered repository instead of resolving or asking for it |
|
|
256
|
-
| `--tools <list>` | Configure specific MCP hosts without the picker (e.g. `claude-code,cursor`) |
|
|
257
|
-
| `--agent claude\|cursor-agent` | Which agent to open for the final configuration step
|
|
303
|
+
| `--tools <list>` | Configure specific MCP hosts without the picker. Accepted IDs are exactly `claude-code`, `cursor`, `copilot-vscode`, `copilot-cli`, `codex`, and `windsurf` (e.g. `claude-code,cursor`); any other value is a parse error |
|
|
304
|
+
| `--agent claude\|cursor-agent` | Which agent to open for the final configuration step. **No default** — without this flag the agent is derived from the hosts you selected, and an explicit value always wins, including for a host you did not select |
|
|
258
305
|
| `--dry-run` | Preview every step without writing, contacting Bridge, resolving or prompting for a credential, or opening anything. Genuinely inert: it returns before the project-root prompt, before the repository is resolved, and before any tool-selection prompt, so a value it cannot know locally (an unresolved repository name, an unselected tool) is shown as **not yet known** rather than guessed |
|
|
259
306
|
| `--force` | Overwrite an existing stored key without asking |
|
|
260
307
|
| `-h`, `--help` | Full usage |
|
|
@@ -270,17 +317,31 @@ different way to arrive, and the installer will not guess between them.
|
|
|
270
317
|
The installer configures your editors for you. Do this only if you would rather
|
|
271
318
|
write the config yourself, or if you use a host it cannot write automatically.
|
|
272
319
|
|
|
273
|
-
Scaffold the project files
|
|
274
|
-
project root `install` uses — your repository root, the one containing
|
|
275
|
-
No `package.json` is required:
|
|
320
|
+
Scaffold the project files and write a secret-free MCP registration. Run it from
|
|
321
|
+
the same project root `install` uses — your repository root, the one containing
|
|
322
|
+
`.git`. No `package.json` is required:
|
|
276
323
|
|
|
277
324
|
```bash
|
|
278
325
|
npx -y @bridge_gpt/mcp-server --init
|
|
279
326
|
```
|
|
280
327
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
328
|
+
`--init` always creates `.mcp.json`, and adds `.vscode/mcp.json` or
|
|
329
|
+
`.cursor/mcp.json` when it detects those editors. Each generated entry carries
|
|
330
|
+
`BAPI_BASE_URL`, `BAPI_REPO_NAME`, `BAPI_DOCS_DIR`, and `BAPI_PROJECT_ROOT`, and
|
|
331
|
+
**never** `BAPI_API_KEY` — the server resolves the credential itself at runtime.
|
|
332
|
+
|
|
333
|
+
So the manual work left after `--init` is narrower than writing an entry from
|
|
334
|
+
scratch: correct `BAPI_REPO_NAME` if it was written as the `YOUR_REPO_NAME`
|
|
335
|
+
placeholder, and supply your credential through a supported source (`BAPI_API_KEY`
|
|
336
|
+
in the entry's `env` block, `BAPI_API_KEY` in the server's environment, or the
|
|
337
|
+
`~/.config/bridge/credentials.json` store).
|
|
338
|
+
|
|
339
|
+
Write the entry yourself instead — for a host `--init` does not touch, or because
|
|
340
|
+
you would rather — using the shapes below. Add `"serve"` as the last launcher
|
|
341
|
+
argument, as shown: it is the explicit way to say "start the MCP server." Pin the
|
|
342
|
+
package to an exact version and pass `--prefer-offline`, which is what the
|
|
343
|
+
generated entries do and what keeps npx from resolving a different build on some
|
|
344
|
+
later boot.
|
|
284
345
|
|
|
285
346
|
<details>
|
|
286
347
|
<summary><strong>Claude Code (.mcp.json)</strong></summary>
|
|
@@ -288,9 +349,9 @@ explicit way to say "start the MCP server."
|
|
|
288
349
|
```json
|
|
289
350
|
{
|
|
290
351
|
"mcpServers": {
|
|
291
|
-
"bridge
|
|
352
|
+
"bridge": {
|
|
292
353
|
"command": "npx",
|
|
293
|
-
"args": ["-y", "@bridge_gpt/mcp-server", "serve"],
|
|
354
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.42", "serve"],
|
|
294
355
|
"env": {
|
|
295
356
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
296
357
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -309,9 +370,10 @@ explicit way to say "start the MCP server."
|
|
|
309
370
|
```json
|
|
310
371
|
{
|
|
311
372
|
"servers": {
|
|
312
|
-
"bridge
|
|
373
|
+
"bridge": {
|
|
374
|
+
"type": "stdio",
|
|
313
375
|
"command": "npx",
|
|
314
|
-
"args": ["-y", "@bridge_gpt/mcp-server", "serve"],
|
|
376
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.42", "serve"],
|
|
315
377
|
"env": {
|
|
316
378
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
317
379
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -330,9 +392,10 @@ explicit way to say "start the MCP server."
|
|
|
330
392
|
```json
|
|
331
393
|
{
|
|
332
394
|
"mcpServers": {
|
|
333
|
-
"bridge
|
|
395
|
+
"bridge": {
|
|
396
|
+
"type": "stdio",
|
|
334
397
|
"command": "npx",
|
|
335
|
-
"args": ["-y", "@bridge_gpt/mcp-server", "serve"],
|
|
398
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.42", "serve"],
|
|
336
399
|
"env": {
|
|
337
400
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
338
401
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -343,8 +406,32 @@ explicit way to say "start the MCP server."
|
|
|
343
406
|
}
|
|
344
407
|
}
|
|
345
408
|
```
|
|
409
|
+
</details>
|
|
346
410
|
|
|
347
|
-
>
|
|
411
|
+
<details>
|
|
412
|
+
<summary><strong>GitHub Copilot CLI (~/.copilot/mcp-config.json)</strong></summary>
|
|
413
|
+
|
|
414
|
+
Copilot CLI reads a single global file. The installer writes this one for you when
|
|
415
|
+
you select `copilot-cli`; the shape below is what it produces.
|
|
416
|
+
|
|
417
|
+
```json
|
|
418
|
+
{
|
|
419
|
+
"mcpServers": {
|
|
420
|
+
"bridge": {
|
|
421
|
+
"type": "local",
|
|
422
|
+
"command": "npx",
|
|
423
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.42", "serve"],
|
|
424
|
+
"tools": ["*"],
|
|
425
|
+
"env": {
|
|
426
|
+
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
427
|
+
"BAPI_REPO_NAME": "your-repo",
|
|
428
|
+
"BAPI_API_KEY": "your-api-key",
|
|
429
|
+
"BAPI_DOCS_DIR": "docs/tmp"
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
```
|
|
348
435
|
</details>
|
|
349
436
|
|
|
350
437
|
<details>
|
|
@@ -355,9 +442,9 @@ Windsurf only supports global MCP configuration.
|
|
|
355
442
|
```json
|
|
356
443
|
{
|
|
357
444
|
"mcpServers": {
|
|
358
|
-
"bridge
|
|
445
|
+
"bridge": {
|
|
359
446
|
"command": "npx",
|
|
360
|
-
"args": ["-y", "@bridge_gpt/mcp-server", "serve"],
|
|
447
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.42", "serve"],
|
|
361
448
|
"env": {
|
|
362
449
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
363
450
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -374,11 +461,11 @@ Windsurf only supports global MCP configuration.
|
|
|
374
461
|
<summary><strong>OpenAI Codex (~/.codex/config.toml)</strong></summary>
|
|
375
462
|
|
|
376
463
|
```toml
|
|
377
|
-
[mcp_servers.bridge
|
|
464
|
+
[mcp_servers.bridge]
|
|
378
465
|
command = "npx"
|
|
379
|
-
args = ["-y", "@bridge_gpt/mcp-server", "serve"]
|
|
466
|
+
args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.42", "serve"]
|
|
380
467
|
|
|
381
|
-
[mcp_servers.bridge
|
|
468
|
+
[mcp_servers.bridge.env]
|
|
382
469
|
BAPI_BASE_URL = "https://bridgegpt-api.com"
|
|
383
470
|
BAPI_REPO_NAME = "your-repo"
|
|
384
471
|
BAPI_API_KEY = "your-api-key"
|
|
@@ -426,9 +513,19 @@ Launcher pins:
|
|
|
426
513
|
When every applicable launcher pin was already at the target, it prints
|
|
427
514
|
`Already up-to-date.` — that status comes from comparing your configs, not from
|
|
428
515
|
the version of the CLI process. A non-zero exit means the upgrade did **not**
|
|
429
|
-
converge
|
|
430
|
-
|
|
431
|
-
|
|
516
|
+
converge, and nothing is reported as complete in that case. The causes:
|
|
517
|
+
|
|
518
|
+
- the npm registry lookup failed **and** this process was not started from
|
|
519
|
+
`@latest`, so the target version could not be confirmed — the likeliest one
|
|
520
|
+
offline, and why the canonical command uses `@latest`;
|
|
521
|
+
- a launcher pin is already **newer** than the target, which an automated repin
|
|
522
|
+
must never downgrade;
|
|
523
|
+
- an unreadable or unparseable config, a launcher carrying a version range or a
|
|
524
|
+
dist-tag rather than an exact release, or two Bridge registrations in one file;
|
|
525
|
+
- a competing local install it could not remove, or a pin that failed post-write
|
|
526
|
+
verification;
|
|
527
|
+
- the upgrade finished but left an **unconfigured** MCP entry — one that would
|
|
528
|
+
authenticate as nobody.
|
|
432
529
|
|
|
433
530
|
The server checks for updates on startup. The check is cached for a day and never
|
|
434
531
|
blocks startup. When a newer version is known, it surfaces in two places you do
|
|
@@ -447,16 +544,20 @@ scaffolded files without overwriting your stored credential unless you pass
|
|
|
447
544
|
|
|
448
545
|
This is the Bridge API tooling worth knowing about as a software engineer — the things you'd ask an agent to do — grouped by how often you would use them. Each entry covers **what it does**, **when it's useful**, **how to use it**, and its **flags**. The behind-the-scenes plumbing is summarized at the end under [Extra Capabilities](#extra-capabilities), and a full enumeration lives in [Reference](#reference).
|
|
449
546
|
|
|
450
|
-
Working in a Salesforce B2C Commerce codebase? Bridge also ships read-only
|
|
547
|
+
Working in a Salesforce B2C Commerce codebase? Bridge also ships SFCC platform tools — read-only introspection under the `sfcc` profile, and nine destructive writes under the separate `sfcc-write` opt-in. See [Salesforce B2C Commerce (SFCC) Tools](#salesforce-b2c-commerce-sfcc-tools).
|
|
451
548
|
|
|
452
549
|
For invocation, prefer the slash command — it's deterministic. A free-text example is shown only where natural-language phrasing reliably maps to the right automation; high-consequence or easily-misread automations show only the slash command on purpose.
|
|
453
550
|
|
|
454
|
-
<!-- The three tier sections below are GENERATED from
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
551
|
+
<!-- The three tier sections below are GENERATED from TWO catalogs by
|
|
552
|
+
scripts/sync_mcp_server_readme.py: api/library/config/mcp_tool_catalog.json,
|
|
553
|
+
the authoritative MCP tool catalog, and api/library/config/workflow_catalog_lib.py,
|
|
554
|
+
the immutable catalog of slash-command workflows (which have no MCP registration
|
|
555
|
+
and therefore cannot live in the JSON artifact). Edit the curated tool metadata in
|
|
556
|
+
scripts/sync_mcp_tool_catalog.py and the workflow definitions in
|
|
557
|
+
workflow_catalog_lib.py — never the JSON artifact and never the text between the
|
|
558
|
+
markers. Generation order is: sync_mcp_tool_catalog.py, then
|
|
458
559
|
sync_mcp_server_readme.py, then `cd mcp_server && npm run build` (which bundles this
|
|
459
|
-
file into readme.generated.ts, served as the MCP resource bridge
|
|
560
|
+
file into readme.generated.ts, served as the MCP resource bridge://readme).
|
|
460
561
|
Everything outside the marker pair — including the sections below it — is hand-written. -->
|
|
461
562
|
|
|
462
563
|
<!-- BEGIN GENERATED: mcp-tool-documentation (managed by scripts/sync_mcp_server_readme.py — DO NOT EDIT BY HAND) -->
|
|
@@ -470,125 +571,95 @@ The tools worth knowing for most tickets.
|
|
|
470
571
|
- **How to use it:** `/review-ticket BAPI-123` (command only — "review" as free text is easily mistaken for a freehand agent review). For several tickets at once, `/review-tickets BAPI-123 BAPI-456` opens one terminal tab per ticket and reviews them in parallel with no worktrees; every `/review-ticket` flag applies, and `--review KEY=auto,rounds=N` sets per-ticket overrides.
|
|
471
572
|
- **Flags:** `--auto` auto-accept findings and skip the approval gates · `--rounds=1` a cheaper single-pass review that still evaluates findings and captures decisions · `--rounds=2` force the full second-opinion review · omit `--rounds` to let the difficulty-adaptive review policy decide.
|
|
472
573
|
|
|
473
|
-
**2.
|
|
474
|
-
- **What it does:**
|
|
475
|
-
- **When it's useful:** (
|
|
476
|
-
- **How to use it:**
|
|
477
|
-
- **Flags:** `
|
|
574
|
+
**2. Start Tickets**
|
|
575
|
+
- **What it does:** Creates one git worktree per ticket and spawns an agent session in each to implement them in parallel.
|
|
576
|
+
- **When it's useful:** (Implementation | Automation) When you're ready to start building one or more refined tickets concurrently.
|
|
577
|
+
- **How to use it:** `/start-tickets BAPI-248 BAPI-250` (see [CLI Subcommands](#cli-subcommands) for the full flag table and cross-platform behavior).
|
|
578
|
+
- **Flags:** `--auto` skip the approval gates · `--base-branch <branch>` branch off something other than the default · `--workflow implement|review-and-implement` selects which slash command each spawned worktree runs · `--rounds=1|2` forwarded to the review phase, valid only with `--workflow review-and-implement` · `--tier cheap|basic|premium` coarse model-routing override.
|
|
579
|
+
|
|
580
|
+
**3. Review and Start**
|
|
581
|
+
- **What it does:** Spawns one worktree per ticket; each session reviews the ticket inline and, after a per-ticket proceed/halt gate, hands off to a **fresh implementation session** that reuses the same worktree — review and implementation run in two separate agent contexts, not one shared session.
|
|
582
|
+
- **When it's useful:** (Refinement | Implementation | Automation) The **recommended front door** for "review these tickets, then implement the ones that pass," starting from existing ticket keys (unlike `/full-automation`, which only accepts an idea).
|
|
583
|
+
- **How to use it:** `/review-and-start BAPI-248 BAPI-250` (single or multiple keys flow through the identical code path).
|
|
584
|
+
- **Flags:** `--auto` auto-approves both the review and the implementation phase of every spawned session · `--rounds=1|2` forwarded to the review phase · `--agent`, `--base-branch`, `--max-parallel`, `--dry-run` mirror `/start-tickets`.
|
|
478
585
|
|
|
479
|
-
**
|
|
480
|
-
- **What it does:**
|
|
481
|
-
- **When it's useful:** (Architecture | Refinement)
|
|
482
|
-
- **How to use it:**
|
|
586
|
+
**4. Explore Ticket**
|
|
587
|
+
- **What it does:** Maps the code paths, dependencies, and project conventions a task would touch, settles its acceptance criteria with you on a decision page, then compares the viable implementation approaches and their trade-offs and writes up a proposed design. Along the way it surfaces the ambiguities that still need deciding and can pull in optional web or deep research where the answer is not in the code.
|
|
588
|
+
- **When it's useful:** (Architecture | Refinement) Before writing a ticket or a plan, when you're unsure how a change would fit the existing code and want the open questions and the realistic options laid out first.
|
|
589
|
+
- **How to use it:** `/explore-ticket <task>` — *"Explore the codebase for how we'd add a Mistral LLM provider and recommend 2–3 implementation options."*
|
|
483
590
|
- **Flags:** None.
|
|
484
591
|
|
|
485
|
-
**
|
|
592
|
+
**5. Council**
|
|
593
|
+
- **What it does:** Fans your problem out to two different models and returns their approaches, in technical, design, discovery, or general mode.
|
|
594
|
+
- **When it's useful:** (Architecture | Refinement) Early, when you want a spread of approaches — technical for how to build it, design for how it should look, discovery for what still needs figuring out before a real ticket exists, general for a quick brief-driven pass before the repository is indexed.
|
|
595
|
+
- **How to use it:** `/council <question>`
|
|
596
|
+
- **Flags:** `--mode` selects one of four modes, passed to the underlying `request_council` tool as e.g. `mode: "discovery"`: `technical` (the default — implementation/architecture approaches), `design` (UI/UX and visual direction), `discovery` (stakeholder discovery questions, grouped into `Technical Discovery Questions` and `Business / Stakeholder Discovery Questions` and tagged `[HUMAN]`/`[CODE]`/`[TICKET]`), and `general` (brief-driven ideation from your task description alone). `technical` and `discovery` are codebase-grounded and need an indexed repository; `general` needs no code index at all, so it works immediately after install. The legacy boolean `design=true` still works and maps to `mode: "design"`.
|
|
597
|
+
|
|
598
|
+
**6. Deep Research**
|
|
486
599
|
- **What it does:** Runs multi-source, fact-checked web research on a technical topic and returns a cited report.
|
|
487
600
|
- **When it's useful:** (Architecture | Refinement) When a decision hinges on outside knowledge — libraries, best practices, standards — that you do not already have.
|
|
488
601
|
- **How to use it:** `/bridge-research <question>`
|
|
489
602
|
- **Flags:** None.
|
|
490
603
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
- **How to use it:** Ask your agent to retrieve the research report already generated.
|
|
495
|
-
- **Flags:** None.
|
|
604
|
+
### Occasionally useful
|
|
605
|
+
|
|
606
|
+
Good to know, but not needed every day.
|
|
496
607
|
|
|
497
|
-
**
|
|
608
|
+
**1. Upload Ticket**
|
|
498
609
|
- **What it does:** Creates a real Jira issue from a drafted ticket, including child tickets under an epic; your agent should confirm with you before creating it.
|
|
499
610
|
- **When it's useful:** (Refinement) The final step after drafting — to get the ticket into your tracker so it can be tracked and worked.
|
|
500
611
|
- **How to use it:** Ask your agent to create the ticket; it should confirm with you before creating the live issue.
|
|
501
612
|
- **Flags:** Name the issue type (Bug / Story / Task / Epic) and, for a child ticket under an epic, the parent key.
|
|
502
613
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
Good to know, but not needed every day.
|
|
506
|
-
|
|
507
|
-
**1. Plan Ticket**
|
|
614
|
+
**2. Plan Ticket**
|
|
508
615
|
- **What it does:** Generates a step-by-step implementation plan for a ticket that references real files in your codebase.
|
|
509
616
|
- **When it's useful:** (Refinement | Implementation) Once a ticket is solid and you want a concrete build plan before — or instead of — auto-implementing it.
|
|
510
617
|
- **How to use it:** `/plan-ticket BAPI-123`
|
|
511
618
|
- **Flags:** `--provider <name>` choose the model provider · `--second-opinion <provider>` cross-check the plan with a second provider.
|
|
512
619
|
|
|
513
|
-
**2. Get Plan**
|
|
514
|
-
- **What it does:** Retrieves an implementation plan that was already generated for a ticket.
|
|
515
|
-
- **When it's useful:** (Implementation) When the plan already exists and you want to read it without regenerating it.
|
|
516
|
-
- **How to use it:** Ask your agent to fetch the implementation plan already generated for the ticket.
|
|
517
|
-
- **Flags:** None.
|
|
518
|
-
|
|
519
620
|
**3. Clarify Ticket**
|
|
520
621
|
- **What it does:** Generates clarifying questions for a ticket, or debugging guidance when the ticket is a bug.
|
|
521
622
|
- **When it's useful:** (Refinement) When a ticket feels under-specified and you want the open questions made explicit.
|
|
522
623
|
- **How to use it:** `/clarify-ticket BAPI-123`
|
|
523
624
|
- **Flags:** `--provider <name>` choose the model provider · `--second-opinion <provider>` cross-check with a second provider.
|
|
524
625
|
|
|
525
|
-
**4.
|
|
526
|
-
- **What it does:** Retrieves clarifying questions that were already generated for a ticket.
|
|
527
|
-
- **When it's useful:** (Refinement) When the questions were already generated and you want to reread them rather than pay to regenerate them.
|
|
528
|
-
- **How to use it:** Ask your agent for the clarifying questions already generated for the ticket.
|
|
529
|
-
- **Flags:** None.
|
|
530
|
-
|
|
531
|
-
**5. Critique Ticket**
|
|
626
|
+
**4. Critique Ticket**
|
|
532
627
|
- **What it does:** Critiques a ticket against your project's standards and lists the deviations and improvements it found.
|
|
533
628
|
- **When it's useful:** (Refinement) When you want a quality gate on a ticket before anyone works it.
|
|
534
629
|
- **How to use it:** `/critique-ticket BAPI-123`
|
|
535
630
|
- **Flags:** `--provider <name>` choose the model provider · `--second-opinion <provider>` cross-check with a second provider.
|
|
536
631
|
|
|
537
|
-
**
|
|
538
|
-
- **What it does:** Retrieves a ticket critique that was already generated.
|
|
539
|
-
- **When it's useful:** (Refinement) When the critique already exists and you want to reread its findings without regenerating it.
|
|
540
|
-
- **How to use it:** Ask your agent for the critique already generated for the ticket.
|
|
541
|
-
- **Flags:** None.
|
|
542
|
-
|
|
543
|
-
**7. Create Doc**
|
|
632
|
+
**5. Create Doc**
|
|
544
633
|
- **What it does:** Generates a design document for a ticket — a technical design document, a functional spec, or a product requirements document.
|
|
545
634
|
- **When it's useful:** (Architecture | Refinement) When a ticket needs a fuller design write-up before planning or implementation, in the shape that fits your audience.
|
|
546
635
|
- **How to use it:** `/create-doc BAPI-123 --doc-type tdd` (or `fsd` / `prd`)
|
|
547
636
|
- **Flags:** `--doc-type tdd|fsd|prd` which document to generate (required) · `--provider <name>` choose the model provider · `--second-opinion <provider>` cross-check with a second provider.
|
|
548
637
|
|
|
549
|
-
**
|
|
550
|
-
- **What it does:** Retrieves a design document that was already generated for a ticket.
|
|
551
|
-
- **When it's useful:** (Architecture | Refinement) When the document already exists and you want to reread it without regenerating it.
|
|
552
|
-
- **How to use it:** Ask your agent for the ticket's design document, naming which type you want.
|
|
553
|
-
- **Flags:** None.
|
|
554
|
-
|
|
555
|
-
**9. Second Opinion**
|
|
638
|
+
**6. Second Opinion**
|
|
556
639
|
- **What it does:** Gets an immediate critique of any text from a different model family, without saving an artifact.
|
|
557
640
|
- **When it's useful:** (Architecture | Refinement | Implementation) Any time you want a quick sanity check on a plan, draft, or decision from a fresh perspective.
|
|
558
641
|
- **How to use it:** Ask your agent — "Get a second opinion from Gemini on whether the BAPI-123 plan's migration step is safe to run against production."
|
|
559
642
|
- **Flags:** Pick the provider (anthropic / openai / gemini) and the tier (cheap / basic / premium).
|
|
560
643
|
|
|
561
|
-
**
|
|
644
|
+
**7. Generate Image**
|
|
562
645
|
- **What it does:** Generates an image from a text prompt using a provider image model, spending provider credits on every call.
|
|
563
646
|
- **When it's useful:** (Architecture | Refinement) When you want a quick visual — a UI mockup, diagram, or illustration — to anchor a design discussion or attach to a ticket.
|
|
564
647
|
- **How to use it:** Ask your agent — "Generate an image of a dashboard showing SOC2 evidence freshness as a traffic-light grid."
|
|
565
648
|
- **Flags:** `provider` openai (`gpt-image-2`) / gemini (Imagen, which adds an invisible SynthID watermark) · `quality` low (default, cheapest) / medium / high · `size` 1024x1024 / 1024x1536 / 1536x1024. The image is saved to `BAPI_DOCS_DIR/images/` and also returned inline.
|
|
566
649
|
|
|
567
|
-
**
|
|
650
|
+
**8. Request PRD**
|
|
568
651
|
- **What it does:** Generates a product requirements document for a ticket covering the problem, the goals, and the success metrics.
|
|
569
652
|
- **When it's useful:** (Architecture | Refinement) When a piece of work needs its problem, goals, and success metrics written down before anyone designs a solution.
|
|
570
653
|
- **How to use it:** `/create-doc BAPI-123 --doc-type prd`
|
|
571
654
|
- **Flags:** `--provider <name>` choose the model provider · `--second-opinion <provider>` cross-check with a second provider.
|
|
572
655
|
|
|
573
|
-
**
|
|
574
|
-
- **What it does:** Retrieves a product requirements document that was already generated for a ticket.
|
|
575
|
-
- **When it's useful:** (Architecture | Refinement) When the requirements document already exists and you want to reread it without regenerating it.
|
|
576
|
-
- **How to use it:** Ask your agent to retrieve the ticket's product requirements document.
|
|
577
|
-
- **Flags:** None.
|
|
578
|
-
|
|
579
|
-
**13. Full Automation**
|
|
656
|
+
**9. Full Automation**
|
|
580
657
|
- **What it does:** Drives the whole chain from a raw idea through tickets and reviews to implementation sessions.
|
|
581
658
|
- **When it's useful:** (Automation) When you want to go from a raw idea to in-progress implementation with minimal hands-on steps.
|
|
582
659
|
- **How to use it:** `/full-automation <idea>` (command only — it creates tickets, spawns worktrees, and carries scheduling flags free text cannot).
|
|
583
660
|
- **Flags:** `--require-approval` re-enable the approval gates; the chain runs end to end by default · `--max-children <n>` cap how many child tickets an epic decomposes into.
|
|
584
661
|
|
|
585
|
-
**
|
|
586
|
-
- **What it does:** Resumes a full-automation chain that was started earlier.
|
|
587
|
-
- **When it's useful:** (Automation) When an earlier chain stopped at an approval gate or was interrupted, and you want it continued rather than restarted.
|
|
588
|
-
- **How to use it:** Ask your agent to resume the full-automation chain, naming the run to continue.
|
|
589
|
-
- **Flags:** None.
|
|
590
|
-
|
|
591
|
-
**15. Update Ticket Description**
|
|
662
|
+
**10. Update Ticket Description**
|
|
592
663
|
- **What it does:** Rewrites a ticket's description with AI, using the ticket's own content and its reference material. A rewrite that changes more than 60% of the description is held for review instead of applied.
|
|
593
664
|
- **When it's useful:** (Refinement) When a ticket has accumulated comments, attachments, or links and its description no longer reflects them.
|
|
594
665
|
- **How to use it:** Ask your agent — "Update the description for BAPI-123."
|
|
@@ -604,55 +675,49 @@ Useful once in a while.
|
|
|
604
675
|
- **How to use it:** `/reimplement-ticket BAPI-123`
|
|
605
676
|
- **Flags:** None.
|
|
606
677
|
|
|
607
|
-
**2.
|
|
608
|
-
- **What it does:** Retrieves the follow-up context that was already gathered for a ticket.
|
|
609
|
-
- **When it's useful:** (Implementation) When the follow-up context was already gathered and you want to read it without gathering it again.
|
|
610
|
-
- **How to use it:** Ask your agent for the follow-up context already gathered for the ticket.
|
|
611
|
-
- **Flags:** None.
|
|
612
|
-
|
|
613
|
-
**3. Update Ticket**
|
|
678
|
+
**2. Update Ticket**
|
|
614
679
|
- **What it does:** Rewrites a ticket's description, fully replacing what is there today.
|
|
615
680
|
- **When it's useful:** (Refinement) After review, to fold the resolved questions and fixes back into the ticket itself.
|
|
616
681
|
- **How to use it:** `/update-ticket BAPI-123` (command only — it fully overwrites the live description, which is hard to reverse).
|
|
617
682
|
- **Flags:** None.
|
|
618
683
|
|
|
619
|
-
**
|
|
684
|
+
**3. Get Ticket**
|
|
620
685
|
- **What it does:** Retrieves the full details of a ticket, including its summary, status, and description.
|
|
621
686
|
- **When it's useful:** (Refinement | Implementation) Any time you want the agent to read a ticket before acting on it.
|
|
622
687
|
- **How to use it:** Ask your agent — "Pull up BAPI-123 and show me its description, status, and acceptance criteria."
|
|
623
688
|
- **Flags:** None.
|
|
624
689
|
|
|
625
|
-
**
|
|
690
|
+
**4. Search Tickets**
|
|
626
691
|
- **What it does:** Searches across the tickets in your project.
|
|
627
692
|
- **When it's useful:** (Refinement) When you need to find tickets by project, status, or wording rather than by key.
|
|
628
693
|
- **How to use it:** Ask your agent — "Search our project for open tickets mentioning rate limiting."
|
|
629
694
|
- **Flags:** Narrow the search by project, status, issue type, or free text.
|
|
630
695
|
|
|
631
|
-
**
|
|
696
|
+
**5. Write Comment**
|
|
632
697
|
- **What it does:** Posts a comment on a ticket.
|
|
633
698
|
- **When it's useful:** (Refinement | Implementation) To leave context, status, or a decision trail on the ticket.
|
|
634
699
|
- **How to use it:** Ask your agent — "Post a comment on BAPI-123: blocked on the expired Atlassian token — will retry after it is rotated."
|
|
635
700
|
- **Flags:** A long comment can be attached as a file instead of inlined.
|
|
636
701
|
|
|
637
|
-
**
|
|
702
|
+
**6. Read Comments**
|
|
638
703
|
- **What it does:** Reads the comment thread on a ticket.
|
|
639
704
|
- **When it's useful:** (Refinement | Implementation) When the discussion on a ticket matters and you want the agent to read it before acting.
|
|
640
705
|
- **How to use it:** Ask your agent — "Read the comments on BAPI-123 and summarize what was decided."
|
|
641
706
|
- **Flags:** None.
|
|
642
707
|
|
|
643
|
-
**
|
|
708
|
+
**7. Ticket Attachments**
|
|
644
709
|
- **What it does:** Downloads files from a ticket to your disk, or attaches a local file to a ticket.
|
|
645
710
|
- **When it's useful:** (Refinement | Implementation) When a ticket has design files or logs you need locally, or you want to attach output back to it.
|
|
646
711
|
- **How to use it:** Ask your agent — "Download the design mockups attached to BAPI-123 into my docs folder," or "Attach build-log.txt to BAPI-123."
|
|
647
712
|
- **Flags:** Choose the direction (download from the ticket, or upload to it) and, for a download, where the files should land.
|
|
648
713
|
|
|
649
|
-
**
|
|
714
|
+
**8. Estimate Ticket**
|
|
650
715
|
- **What it does:** Estimates the development effort for one ticket. Use Estimate Epic instead for a whole epic or a named group of tickets.
|
|
651
716
|
- **When it's useful:** (Refinement) When you need a size for a single ticket before committing to it.
|
|
652
717
|
- **How to use it:** Ask your agent — "Estimate BAPI-123."
|
|
653
718
|
- **Flags:** Ask for a fresh estimate to regenerate rather than reuse a stored one.
|
|
654
719
|
|
|
655
|
-
**
|
|
720
|
+
**9. Estimate Epic**
|
|
656
721
|
- **What it does:** Estimates an epic, or an explicit group of tickets you name.
|
|
657
722
|
- **When it's useful:** (Architecture | Refinement) When you need a sizing pass across an epic, or across a set of tickets you name explicitly.
|
|
658
723
|
- **How to use it:** `/estimate-epic BAPI-123`
|
|
@@ -661,63 +726,72 @@ Useful once in a while.
|
|
|
661
726
|
|
|
662
727
|
### Workflow commands
|
|
663
728
|
|
|
664
|
-
Slash commands that drive several tools at once.
|
|
665
|
-
|
|
666
|
-
**1. Start Tickets**
|
|
667
|
-
- **What it does:** Creates one git worktree per ticket and spawns an agent session in each to implement them in parallel.
|
|
668
|
-
- **When it's useful:** (Implementation | Automation) When you're ready to start building one or more refined tickets concurrently.
|
|
669
|
-
- **How to use it:** `/start-tickets BAPI-248 BAPI-250` (see [CLI Subcommands](#cli-subcommands) for the full flag table and cross-platform behavior).
|
|
670
|
-
- **Flags:** `--auto` skip the approval gates · `--base-branch <branch>` branch off something other than the default · `--workflow implement|review-and-implement` selects which slash command each spawned worktree runs · `--rounds=1|2` forwarded to the review phase, valid only with `--workflow review-and-implement` · `--tier cheap|basic|premium` coarse model-routing override.
|
|
729
|
+
Slash commands that drive several tools at once. Start Tickets, Review and Start, and Explore Ticket are documented above under [Regularly useful](#regularly-useful) — the rest live here.
|
|
671
730
|
|
|
672
|
-
**
|
|
731
|
+
**1. Implement Ticket**
|
|
673
732
|
- **What it does:** Full build for one ticket: generate a plan, write the code, commit, open a PR, and monitor CI.
|
|
674
733
|
- **When it's useful:** (Implementation) When a ticket is ready and you want it taken from plan to open PR in one go.
|
|
675
734
|
- **How to use it:** `/implement-ticket BAPI-123` (command only — "implement X" as free text almost always triggers a freehand build instead of the Bridge plan→code→PR→CI pipeline).
|
|
676
735
|
- **Flags:** `--auto` skip the approval gates (e.g. auto-commit/push).
|
|
677
736
|
|
|
678
|
-
**
|
|
679
|
-
- **What it does:** Spawns one worktree per ticket; each session reviews the ticket inline and, after a per-ticket proceed/halt gate, hands off to a **fresh implementation session** that reuses the same worktree — review and implementation run in two separate agent contexts, not one shared session.
|
|
680
|
-
- **When it's useful:** (Refinement | Implementation | Automation) The **recommended front door** for "review these tickets, then implement the ones that pass," starting from existing ticket keys (unlike `/full-automation`, which only accepts an idea).
|
|
681
|
-
- **How to use it:** `/review-and-start BAPI-248 BAPI-250` (single or multiple keys flow through the identical code path).
|
|
682
|
-
- **Flags:** `--auto` auto-approves both the review and the implementation phase of every spawned session · `--rounds=1|2` forwarded to the review phase · `--agent`, `--base-branch`, `--max-parallel`, `--dry-run` mirror `/start-tickets`.
|
|
683
|
-
|
|
684
|
-
**4. Jira Ticket Writer**
|
|
737
|
+
**2. Jira Ticket Writer**
|
|
685
738
|
- **What it does:** An agent that drafts a well-structured Jira ticket from a plain description, applying your project's standards.
|
|
686
739
|
- **When it's useful:** (Refinement) When you have an idea in your head and want a properly-formatted ticket draft without writing it by hand.
|
|
687
|
-
- **How to use it:**
|
|
688
|
-
- **Flags:**
|
|
740
|
+
- **How to use it:** Ask your agent, *"Use the jira ticket writer to turn our conversation into a ticket."* The other ticket commands draft through it automatically.
|
|
741
|
+
- **Flags:** None — name a specific standards file in your request to have it applied when drafting.
|
|
689
742
|
|
|
690
|
-
**
|
|
743
|
+
**3. Idea to Ticket**
|
|
691
744
|
- **What it does:** Turns a one-line idea into a Jira Task/Spike (or an Epic plus child tickets), with research, duplicate detection, and a critique pass built in.
|
|
692
745
|
- **When it's useful:** (Refinement | Automation) When you have a rough idea and want a fully-formed, uploaded ticket without the manual draft-and-refine loop.
|
|
693
746
|
- **How to use it:** `/idea-to-ticket <idea>`
|
|
694
747
|
- **Flags:** None.
|
|
695
748
|
|
|
696
|
-
**
|
|
697
|
-
- **What it does:** Explores the codebase for a task and recommends implementation options or surfaces clarifying questions, with optional research.
|
|
698
|
-
- **When it's useful:** (Architecture | Refinement) Before writing a ticket or plan, when you're unsure how a change would fit the existing code.
|
|
699
|
-
- **How to use it:** `/explore-ticket <task>` — *"Explore the codebase for how we'd add a Mistral LLM provider and recommend 2–3 implementation options."*
|
|
700
|
-
- **Flags:** None.
|
|
701
|
-
|
|
702
|
-
**7. Plan Epic**
|
|
749
|
+
**4. Plan Epic**
|
|
703
750
|
- **What it does:** Decomposes a large epic into sub-tasks with a structured exploration doc for each.
|
|
704
751
|
- **When it's useful:** (Architecture | Refinement) When a feature is too big for one ticket and you need it broken down and scoped.
|
|
705
752
|
- **How to use it:** `/plan-epic <epic>` — *"Decompose the epic 'migrate PayPal token storage off Custom Objects' into sub-tasks with an exploration doc for each."*
|
|
706
753
|
- **Flags:** None.
|
|
707
754
|
|
|
708
|
-
|
|
755
|
+
#### Ticket-authoring posture
|
|
756
|
+
|
|
757
|
+
`/explore-ticket`, `/idea-to-ticket`, and `/plan-epic` all decide ticket shape
|
|
758
|
+
the same way, as does the `jira-ticket-writer` agent they draft through. A fresh install inherits this with no configuration
|
|
759
|
+
step and no server call; the full rationale and the closed exception list ship as
|
|
760
|
+
`docs/bridge-ticket-authoring.md`.
|
|
761
|
+
|
|
762
|
+
- **Drafted by the writer.** Every ticket body — epic parent, epic child, and
|
|
763
|
+
ordinary sibling alike — goes through the `jira-ticket-writer` agent. Nothing
|
|
764
|
+
composes a ticket description inline.
|
|
765
|
+
- **Sized toward L, overflowing upward.** `L` (target) → `XL` (when the work
|
|
766
|
+
does not fit in `L`) → `M` (third choice) → `S` (only when unavoidable). A
|
|
767
|
+
slice that outgrows `L` becomes one `XL` ticket rather than two `L` ones —
|
|
768
|
+
splitting a coherent slice to fit a band buys another worktree, another PR, and
|
|
769
|
+
another rebase for nothing. This binds a standalone ticket and an epic child
|
|
770
|
+
alike. Past roughly 40 files or ~3000 LOC it splits anyway, into the largest
|
|
771
|
+
coherent pieces available.
|
|
772
|
+
- **Grouped at three.** Three or more tickets is an epic: an epic parent plus an
|
|
773
|
+
ordered child manifest, shown in full at an approval gate before anything is
|
|
774
|
+
created. One or two are ordinary siblings — no epic parent, no manifest. The
|
|
775
|
+
threshold is exactly three.
|
|
776
|
+
- **Decomposed once, rendered many.** One pass freezes the split; body drafting
|
|
777
|
+
then fans out one writer invocation per entry against that frozen manifest. A
|
|
778
|
+
rendering invocation never re-splits, merges, reorders, or rescopes.
|
|
779
|
+
- **Handed off once.** An epic handoff names exactly one entry point,
|
|
780
|
+
[`drive-epic`](#drive-epic) — never a choice between conductors.
|
|
781
|
+
|
|
782
|
+
**5. Run Tests**
|
|
709
783
|
- **What it does:** Runs the unit and E2E suites and autonomously triages/fixes failures (via the test-correction agent).
|
|
710
784
|
- **When it's useful:** (Implementation) After making changes, to confirm everything passes and auto-fix straightforward breakages.
|
|
711
785
|
- **How to use it:** `/run-tests`
|
|
712
786
|
- **Flags:** `--unit-only` skip the E2E suite · `--skip-e2e` same, phrased the other way.
|
|
713
787
|
|
|
714
|
-
**
|
|
788
|
+
**6. Learn Repository**
|
|
715
789
|
- **What it does:** Researches and documents the repo's architecture, testing, review, and correctness standards, then saves them to Bridge for future agents.
|
|
716
790
|
- **When it's useful:** (Setup/Learning) When onboarding a new repo, or after big changes, so Bridge's agents follow your conventions.
|
|
717
791
|
- **How to use it:** `/learn-repository`
|
|
718
792
|
- **Flags:** None.
|
|
719
793
|
|
|
720
|
-
**
|
|
794
|
+
**7. Teach Bridge**
|
|
721
795
|
- **What it does:** Takes a plain-English instruction, figures out which standards field it belongs to, and merges it in (admin only).
|
|
722
796
|
- **When it's useful:** (Setup/Learning) When you notice the agents missing a convention and want to correct it in one sentence.
|
|
723
797
|
- **How to use it:** `/teach-bridge <teaching>` — *"Teach Bridge: always use data-testid selectors in E2E tests."*
|
|
@@ -748,7 +822,7 @@ Behind-the-scenes capabilities an agent gains from the MCP tools — mostly invo
|
|
|
748
822
|
- **Index the codebase** so Bridge's agents can reason about it: queue/parse the repo, check parse status, regenerate the directory map.
|
|
749
823
|
- **Read & tune project config/standards:** list/read/update config fields, fetch project standards, and the per-topic `learn-*` commands that populate them.
|
|
750
824
|
- **Ticket lifecycle bookkeeping:** track tickets and backfill workflow-state timestamps (`scan-tickets`), search across tickets, read comments, list attachments.
|
|
751
|
-
- **Pipeline machinery:** list/inspect pipeline recipes
|
|
825
|
+
- **Pipeline machinery:** list/inspect pipeline recipes, run/resume/list/delete pipeline runs (the engine under the orchestration commands), and resume a full-automation chain that stopped at an approval gate or was interrupted.
|
|
752
826
|
- **Decision page** generation for capturing human review decisions as structured data.
|
|
753
827
|
- **Connectivity & identity checks:** ping Bridge, check your role, resolve the local docs directory.
|
|
754
828
|
- **Retrieve any generated artifact** (`get_*` for plans, critiques, questions, councils, research, architecture) without regenerating it.
|
|
@@ -756,7 +830,7 @@ Behind-the-scenes capabilities an agent gains from the MCP tools — mostly invo
|
|
|
756
830
|
|
|
757
831
|
## Salesforce B2C Commerce (SFCC) Tools
|
|
758
832
|
|
|
759
|
-
Salesforce's official MCP server, `@salesforce/b2c-dx-mcp`, covers developer-experience tasks — cartridge deploy, step debugging,
|
|
833
|
+
Salesforce's official MCP server, `@salesforce/b2c-dx-mcp`, covers developer-experience tasks — cartridge deploy, step debugging, MRT bundle push, and SCAPI Custom API scaffolding. **As of `@salesforce/b2c-dx-mcp` 1.1.2 (published 2026-05-20)** it has no way to *read* the platform's object model, custom objects, or site configuration — exactly the context an AI coding agent needs to write correct Commerce code and to inspect a sandbox before touching it. That comparison is dated on purpose: its basis is this repository's hand-maintained [vendor manual](../docs/mcp/b2c-commerce-developer.md), pinned to the same version, so a new Salesforce toolset ages the claim visibly instead of rotting silently. Bridge's SFCC tools install side-by-side with `b2c-dx-mcp` (they don't duplicate its surface) and close that gap with **OCAPI Data API introspection** of system objects, custom object definitions, and site preferences — plus, behind a separate opt-in, a set of sandbox-bounded writes.
|
|
760
834
|
|
|
761
835
|
**Every SFCC tool is restricted to a developer sandbox, and the restriction is checked at invocation time against the hostname your credentials actually resolve to** — not against anything the caller passes in. If `dw.json` or `SFCC_HOSTNAME` names a host Bridge does not recognize as a developer sandbox, every SFCC tool refuses with a `403` before contacting it. See [Sandbox enforcement](#sandbox-enforcement).
|
|
762
836
|
|
|
@@ -771,7 +845,7 @@ The two diagnostic tools (`sfcc_setup_status`, `check_permissions`) are always a
|
|
|
771
845
|
|
|
772
846
|
**Prerequisites:** a running SFCC **sandbox** and its hostname, plus an Account Manager API client (`client-id` + `client-secret`).
|
|
773
847
|
|
|
774
|
-
**1. Set the repo `version` config field** to your SFCC project type — one of `sfra | pwakit | sitegenesis | storefrontnext | hybrid`. The call-time gate reads this; a non-SFCC value blocks
|
|
848
|
+
**1. Set the repo `version` config field** to your SFCC project type — one of `sfra | pwakit | sitegenesis | storefrontnext | hybrid`. The call-time gate reads this; a non-SFCC value blocks the OCAPI tools — the eight reads, the nine writes, and `check_permissions`. It does **not** block `sfcc_setup_status`, and it does not block `sfcc_log_query`: log query runs on its own gate, which reads neither the `version` field nor `dw.json` and instead probes the backend log capability (log access is WebDAV Basic auth, a different boundary from OCAPI's OAuth). Set the field via your normal config path, the `config_field` MCP tool (operation `update`, field `version`), or the `/teach-bridge` skill.
|
|
775
849
|
|
|
776
850
|
**2. Provide SFCC credentials.** Create a `dw.json` in your project root:
|
|
777
851
|
|
|
@@ -783,7 +857,17 @@ The two diagnostic tools (`sfcc_setup_status`, `check_permissions`) are always a
|
|
|
783
857
|
}
|
|
784
858
|
```
|
|
785
859
|
|
|
786
|
-
Accepted key spellings: `hostname`/`host`, `client-id`/`clientId`/`client_id`, `client-secret`/`clientSecret`/`client_secret`.
|
|
860
|
+
Accepted key spellings: `hostname`/`host`, `client-id`/`clientId`/`client_id`, `client-secret`/`clientSecret`/`client_secret`. `dw.json` is auto-added to git exclude and must never be committed.
|
|
861
|
+
|
|
862
|
+
Credentials resolve in **three tiers, highest first** — the environment wins over `dw.json`, not the other way round:
|
|
863
|
+
|
|
864
|
+
1. An explicit dotted `instance` argument on the call, **plus** `SFCC_CLIENT_ID` and `SFCC_CLIENT_SECRET` in the environment. Secrets are never read from `dw.json` on this tier, so an explicit instance without those two env values is an error.
|
|
865
|
+
2. `SFCC_HOSTNAME` **and** `SFCC_CLIENT_ID` **and** `SFCC_CLIENT_SECRET`, all three set.
|
|
866
|
+
3. `dw.json`.
|
|
867
|
+
|
|
868
|
+
Because tier 2 outranks tier 3, a stale `SFCC_HOSTNAME` left in the environment silently wins over the `dw.json` you are looking at. Check both when a tool reports an unexpected host.
|
|
869
|
+
|
|
870
|
+
**Use a single-config `dw.json`, or set all three `SFCC_*` variables.** A multi-entry `configs[]` array is **rejected outright** — it is not a working setup that merely requires an explicit `instance` on every call. Two things make that workaround unavailable: an explicit `instance` takes tier 1, which needs the client id and secret in the environment anyway, and most tools cannot accept a hostname at all — the value must contain a dot, and the site-preference tools constrain `instance` to `staging | development | sandbox | production`, none of which is a hostname.
|
|
787
871
|
|
|
788
872
|
**3. Enable the tools you want.** Add the groups to `BRIDGE_MCP_PROFILE` in the MCP server `env` block (it is comma-separated), then **restart the MCP client**:
|
|
789
873
|
|
|
@@ -795,6 +879,13 @@ Accepted key spellings: `hostname`/`host`, `client-id`/`clientId`/`client_id`, `
|
|
|
795
879
|
|
|
796
880
|
**4. Verify and grant OCAPI access.** Ask your agent to run `sfcc_setup_status` (expect all checks ✓), then `check_permissions`. If it reports HTTP 401/403, it prints the exact OCAPI Settings JSON to paste in Business Manager (**Administration → Site Development → Open Commerce API Settings → Data API** tab); save it there and re-run. Restart the MCP client after any credential or env change — a running session does not pick them up.
|
|
797
881
|
|
|
882
|
+
Read what it prints before pasting it. The output is **two labelled blocks**, and they are not equivalent:
|
|
883
|
+
|
|
884
|
+
- **READ/SEARCH TOOL GRANTS** — what the `sfcc` read tools need: `get` on `/system_object_definitions`, and `get` + `post` on `/system_object_definitions/**`, `/site_preferences/**`, and `/custom_object_definitions/**`. The `post` is OCAPI's convention for its `*_search` endpoints, not a mutation — but it is a grant you are pasting, so it is labelled for what it is rather than as "read-only".
|
|
885
|
+
- **MUTATION GRANTS** — required by the nine `sfcc-write` tools and by nothing else: `put`/`patch` on `/system_object_definitions/**` and `/custom_object_definitions/**`, and `patch` on `/site_preferences/**`. Paste this block only if you intend to enable `sfcc-write`.
|
|
886
|
+
|
|
887
|
+
Neither block grants `delete`, and neither pastes the global `resource_id: "/**"` that would cover every Data API resource. Each entry names one resource family — `/system_object_definitions`, `/custom_object_definitions/**`, `/site_preferences/**` — so the wildcard is scoped to the family, not to the API. Within a family it is still broad, and `write_attributes` is `(**)`, so a throwaway sandbox is the right place for these.
|
|
888
|
+
|
|
798
889
|
</details>
|
|
799
890
|
|
|
800
891
|
### Sandbox enforcement
|
|
@@ -848,7 +939,7 @@ Users of `BRIDGE_MCP_PROFILE=full` keep write access and need no change.
|
|
|
848
939
|
|
|
849
940
|
### Tools
|
|
850
941
|
|
|
851
|
-
|
|
942
|
+
Twenty tools in total: two always-on diagnostics, the `sfcc` profile's **read-only** surface (eight OCAPI reads plus `sfcc_log_query`), and the nine destructive writes that only the separate `sfcc-write` profile registers — see [Read and write profiles](#read-and-write-profiles). Every one of them is bounded to a developer sandbox by the same invocation-time check. All twenty are enumerated below.
|
|
852
943
|
|
|
853
944
|
An oversized response is saved in full to `BAPI_DOCS_DIR/sfcc/` and replaced by a parseable JSON descriptor — `truncated: true`, the `saved_path` it was written to, and the `page` metadata (`returned`, `total` when OCAPI supplied one, `has_more`) — so the collection metadata survives even though the data itself is on disk. If that save fails, the complete payload is returned inline instead, still as parseable JSON.
|
|
854
945
|
|
|
@@ -858,11 +949,19 @@ Attribute-definition reads and writes can return an attribute's `default_value`
|
|
|
858
949
|
- `sfcc_setup_status` — report on every prerequisite: Bridge API key, repo name, `version` config, `dw.json` presence/uniqueness, AM (OCAPI) token acquisition, and the independent **SFCC Log Query (WebDAV)** capability that gates `sfcc_log_query`.
|
|
859
950
|
- `check_permissions` — probe OCAPI access via `GET /system_object_definitions`; on 401/403, print the exact OCAPI Settings JSON to paste in Business Manager (read/search grants for the `sfcc` tools, mutation grants for the `sfcc-write` tools). An explicit `instance` hostname is still subject to the sandbox check below.
|
|
860
951
|
|
|
861
|
-
**System object model** (needs the `sfcc` profile)
|
|
952
|
+
**System object model — reads** (needs the `sfcc` profile)
|
|
862
953
|
- `system_object_list` — list system object types (Product, Order, Customer, …).
|
|
863
954
|
- `system_object_get` — fetch one system object type's definition.
|
|
864
955
|
- `system_object_attribute_search` — search a type's attribute definitions; prefer this over a full dump when hunting a specific `c_` custom attribute.
|
|
865
956
|
|
|
957
|
+
**System object model — writes** (needs the `sfcc-write` profile; every one is a destructive write, sandbox only)
|
|
958
|
+
- `system_object_attribute_definition_create` — create an attribute definition via `PUT /system_object_definitions/{type}/attribute_definitions/{id}`.
|
|
959
|
+
- `system_object_attribute_definition_update` — update one via `PATCH` on the same path.
|
|
960
|
+
- `system_object_attribute_group_create` — create an attribute group via `PUT /system_object_definitions/{type}/attribute_groups/{id}`.
|
|
961
|
+
- `system_object_attribute_group_update` — update one via `PATCH` on the same path.
|
|
962
|
+
- `system_object_attribute_assign_to_group` — assign an existing attribute definition into a group via `PUT …/attribute_groups/{group}/attribute_definitions/{def}`.
|
|
963
|
+
- `custom_preference_definition_create` — define a custom site or organization preference via `PUT /system_object_definitions/{SitePreferences|OrganizationPreferences}/attribute_definitions/{id}`.
|
|
964
|
+
|
|
866
965
|
**Custom object definitions** (reads need `sfcc`; the two writes need `sfcc-write`)
|
|
867
966
|
- `custom_object_definition_attributes_get` — fetch attribute definitions for a known custom object type (`default_value` withheld). OCAPI cannot enumerate custom object type *IDs* directly, so `object_type` must be known — but it is discoverable: call `system_object_list` at `projection: "full"` for each custom type's `display_name` and `attribute_definition_count`, derive a candidate id (e.g. strip spaces from `"Product Quality Result"` → `ProductQualityResult`), and confirm it by checking that this tool's returned attribute count matches that row's `attribute_definition_count`.
|
|
868
967
|
- `custom_object_definition_attribute_search` — search attribute definitions within a known custom object type (`default_value` withheld). Read-only — creating a custom object *type* isn't possible via OCAPI; that's a future v2 metadata-import capability. Same discovery path as above applies to `object_type`.
|
|
@@ -870,25 +969,28 @@ Attribute-definition reads and writes can return an attribute's `default_value`
|
|
|
870
969
|
- `custom_object_definition_attribute_update` — **write** (sandbox only): update an attribute definition via an ETag-conditional `PATCH …/attribute_definitions/{id}`; surfaces 409/412 conflicts and echoes grant JSON on 403.
|
|
871
970
|
|
|
872
971
|
**Site preferences** (reads need `sfcc`; the write needs `sfcc-write`; sandbox only)
|
|
873
|
-
- `
|
|
874
|
-
- `
|
|
972
|
+
- `site_preference_group_list` — list the preference groups on a site. This is the discovery tool the other two reads depend on: both take a group, and this is how you find one.
|
|
973
|
+
- `site_preference_get` — list the preference **identifiers** in a group.
|
|
974
|
+
- `site_preference_search` — search/filter preference identifiers within a group.
|
|
875
975
|
- `site_preference_values_set` — **write** (sandbox only): set custom preference values via `PATCH /site_preferences/preference_groups/{group}/sandbox` with a flat map of `c_`-prefixed ids to string/number/boolean/string[] values. A bad group returns 404 `CustomPreferenceGroupNotFoundException`; echoes grant JSON on 403.
|
|
876
976
|
|
|
977
|
+
> **Site preference values are write-only through this surface.** `site_preference_get` and `site_preference_search` return **ids only, never values** — an unset preference and one set to the empty string are indistinguishable. So you can *set* a value with `site_preference_values_set` and have no way to read it back through an MCP tool. Business Manager is the supported path to read a preference value.
|
|
978
|
+
|
|
877
979
|
**On-demand log query** (needs the `sfcc` profile)
|
|
878
980
|
- `sfcc_log_query` — query redacted, filtered SFCC logs on demand. `environment` and `time_range` (`start`/`end`) are **required** — production, "all environments", and an open-ended period are never inferred. The tool calls a Bridge backend endpoint that runs the pull → redaction → filter pipeline server-side and returns scoped, redacted findings; **WebDAV credentials, retrieval, redaction, and filtering all stay server-side and single-sourced.** It holds no credentials of its own.
|
|
879
981
|
- **Guardrails.** Selection is bounded by log-file `prefixes` (max 5), the time range, a scanned-entry cap (`max_entries`, ≤ 2000), a finding cap, and a per-snippet length cap. High-volume prefix classes (`info`, `jobs`, `debug`, `customdebug`) impose a **stricter 6-hour** max range (vs. 24h for the error class) because `info-*` runs ~1 MB/day versus `error-*` at ~13 KB median — a wide window over a high-volume prefix is **rejected**, never silently narrowed.
|
|
880
982
|
- **Response order.** Resolved scope (`environment`, `time_range`, `applied_prefixes`) and cap `status` first, redacted `findings` second, retrieval/truncation `metadata` last.
|
|
881
983
|
- **Statuses & errors.** `ready`, `no_matching_findings`, `results_truncated`; plus `VALIDATION_ERROR` (bad/oversized scope, caught before any network call), `NOT_CONFIGURED` (503 — the log capability isn't set up; run `sfcc_setup_status`, whose step 6 reports it), and `BAD_GATEWAY`/`SERVICE_UNAVAILABLE` on a retrieval/backend failure.
|
|
882
984
|
- **Auth is separate from OCAPI.** Log retrieval uses **HTTP Basic auth** — a Business Manager username + a **40-character WebDAV access key** — *not* the OCAPI Account Manager OAuth token the other SFCC tools use. A valid AM bearer token 401s on `/Logs`. `sfcc_setup_status` step 5 (AM/OCAPI token) and step 6 (WebDAV log access) are independent: one can be green while the other is not.
|
|
883
|
-
- **Local / air-gapped fallback.** The primary path above is the only path this tool takes. For air-gapped development, the documented fallback is Salesforce's own **`@salesforce/b2c-
|
|
985
|
+
- **Local / air-gapped fallback.** The primary path above is the only path this tool takes. For air-gapped development, the documented fallback is Salesforce's own **`@salesforce/b2c-cli`**, shelled out to directly: `b2c logs get --since <window> --search <q> --json`. There is no MCP alternative to reach for — `@salesforce/b2c-dx-mcp` ships **no `logs_*` tool** as of 1.1.2, and every log workflow in the vendor toolkit goes through the CLI anyway (see the [vendor manual](../docs/mcp/b2c-commerce-developer.md)). It is **not** the primary path because its credentials live client-side and its output has **not** passed Bridge's redaction/filter. If you use it, its output must be treated as raw: route it back through the same server-side Python `LogSource` composition and `RedactionPort`/T3 filter workflow — never paste or relay unredacted CLI output to an LLM.
|
|
884
986
|
|
|
885
987
|
## CLI Subcommands
|
|
886
988
|
|
|
887
|
-
Beyond `--init` / `--upgrade`, the package ships operational subcommands of the **single `bridge-api-mcp-server` bin** (not separate binaries) — so they travel with the package to every consumer. See [Usage Documentation → Start Tickets](#
|
|
989
|
+
Beyond `--init` / `--upgrade`, the package ships operational subcommands of the **single `bridge-api-mcp-server` bin** (not separate binaries) — so they travel with the package to every consumer. See [Usage Documentation → Start Tickets](#regularly-useful) for *when* to use `start-tickets`; this section is the full CLI reference.
|
|
888
990
|
|
|
889
991
|
### `start-tickets`
|
|
890
992
|
|
|
891
|
-
Spawns one Worktrunk worktree + selected-agent session per Jira ticket and backs the `/start-tickets` slash command. The agent defaults to **Claude Code** (`claude`) and is configurable via `--agent`. For existing ticket keys, `/review-and-start` (see [Usage Documentation → Review and Start](#
|
|
993
|
+
Spawns one Worktrunk worktree + selected-agent session per Jira ticket and backs the `/start-tickets` slash command. The agent defaults to **Claude Code** (`claude`) and is configurable via `--agent`. For existing ticket keys, `/review-and-start` (see [Usage Documentation → Review and Start](#regularly-useful)) is the recommended enriched front door over this CLI's `--workflow review-and-implement` seam; using the CLI directly (below) remains the advanced/lower-level path.
|
|
892
994
|
|
|
893
995
|
```
|
|
894
996
|
npx -y @bridge_gpt/mcp-server start-tickets [flags] KEY [KEY ...]
|
|
@@ -947,6 +1049,29 @@ authenticate. See
|
|
|
947
1049
|
|
|
948
1050
|
It is **read-only**: it never installs anything, modifies your system, adds an npm `postinstall`, spawns a terminal, or starts the MCP server, and there is no `--fix`. For each prerequisite it prints found/missing and, when missing, the exact per-OS install command **as a manual instruction you run yourself**. The checked set is the `start-tickets` preflight prerequisites **plus `uv`** **plus the selected agent's command** (`claude` by default, or `cursor-agent` with `--agent cursor-agent`). The Worktrunk binary is probed via the resolved name (honoring `BAPI_WORKTRUNK_BIN`), not a hard-coded one. **Exit code:** `0` when all required prerequisites are present, non-zero when any is missing or the platform is unsupported. A failing `start-tickets` preflight now hints you to run `doctor` for an actionable diagnostics report.
|
|
949
1051
|
|
|
1052
|
+
### `drive-epic`
|
|
1053
|
+
|
|
1054
|
+
The one conductor entry point every Bridge surface names. Give it an epic key and
|
|
1055
|
+
it reads conductor readiness for your repository and routes to the single path
|
|
1056
|
+
your project can actually run:
|
|
1057
|
+
|
|
1058
|
+
```
|
|
1059
|
+
npx -y @bridge_gpt/mcp-server drive-epic <EPIC>
|
|
1060
|
+
```
|
|
1061
|
+
|
|
1062
|
+
You are never asked to choose. Bridge currently has two conductors and a standing
|
|
1063
|
+
rule that they must never operate on the same epic — two transition authorities on
|
|
1064
|
+
one epic wedge it permanently — so the choice is made structurally rather than by
|
|
1065
|
+
judgement. Readiness green routes to the v2 bootstrap below (pass `--plan-file`
|
|
1066
|
+
and `drive-epic` runs it for you); readiness not green prints the interactive
|
|
1067
|
+
pilot instruction instead. If readiness is **unknown** — unreachable,
|
|
1068
|
+
unauthorized, or malformed — it escalates and prints no conductor invocation at
|
|
1069
|
+
all, because an unknown owner is not the same as a not-ready one. No branch,
|
|
1070
|
+
including every error path, ever offers you two paths.
|
|
1071
|
+
|
|
1072
|
+
Two conductors is a transitional state. When one is eliminated, `drive-epic` is
|
|
1073
|
+
the only thing that changes.
|
|
1074
|
+
|
|
950
1075
|
### `setup-epic`
|
|
951
1076
|
|
|
952
1077
|
Bootstraps an Epic Conductor v2 run in one command — creates the epic run, stores the plan DAG, and approves it:
|
|
@@ -1086,10 +1211,20 @@ If a custom pipeline has the same key as a built-in pipeline, the custom version
|
|
|
1086
1211
|
|
|
1087
1212
|
| Variable | Required | Default | Description |
|
|
1088
1213
|
|---|---|---|---|
|
|
1089
|
-
| `BAPI_BASE_URL` |
|
|
1214
|
+
| `BAPI_BASE_URL` (server, installer) | No | `https://bridgegpt-api.com` | Bridge API base URL. The MCP server and the `install` CLI both fall back to the production default |
|
|
1215
|
+
| `BAPI_BASE_URL` (`executor` subcommand) | **Yes** | _(none)_ | The `executor` deliberately has **no** production fallback — it refuses to start rather than guess a target |
|
|
1090
1216
|
| `BAPI_REPO_NAME` | Yes | _(none)_ | Jira project/repository identifier configured in Bridge API |
|
|
1091
|
-
| `BAPI_API_KEY` |
|
|
1092
|
-
| `BAPI_PROJECT_ROOT` | No | _(
|
|
1217
|
+
| `BAPI_API_KEY` | No | _(none)_ | A Bridge credential **is** required; this environment variable is only the first place the server looks for it. When it is unset the server resolves the credential from the user-scoped store (`~/.config/bridge/credentials.json`, target `bapi:<repo>`), which is why generated MCP registrations are secret-free |
|
|
1218
|
+
| `BAPI_PROJECT_ROOT` | No | _(see fallback order)_ | Absolute path to project root. Anchors `BAPI_DOCS_DIR` and `BAPI_PIPELINES_DIR` resolution. Resolved once, in order: `BAPI_PROJECT_ROOT` → the connected client's MCP `roots/list` → `CLAUDE_PROJECT_DIR` → `process.cwd()`. Several paths *write* it into a generated registration (`--init`, host-config provisioning, the worktree `mcp-invoke` shim) — that is provenance, not a runtime default |
|
|
1219
|
+
| `SFCC_HOSTNAME` | No | _(none)_ | SFCC sandbox hostname. Part of the environment credential tier — `SFCC_HOSTNAME`, `SFCC_CLIENT_ID`, and `SFCC_CLIENT_SECRET` must **all three** be set for that tier to apply, and a complete tier takes precedence over `dw.json` |
|
|
1220
|
+
| `SFCC_CLIENT_ID` | No | _(none)_ | Account Manager API client id. See `SFCC_HOSTNAME` — all three are needed together. Also required on its own when a tool is called with an explicit dotted `instance` |
|
|
1221
|
+
| `SFCC_CLIENT_SECRET` | No | _(none)_ | Account Manager API client secret. See `SFCC_HOSTNAME` — all three are needed together. Never sent to Bridge; it goes only to the Account Manager token endpoint |
|
|
1222
|
+
| `CLAUDE_CODE_OAUTH_TOKEN` | No | _(none)_ | The supported headless authentication input for conductor workers. Export it into the **executor process's own** environment; Bridge forwards it unchanged into the worker and stores it nowhere — no credential-store entry, no disk, never sent to Bridge. See [Claude login for conductor workers](#claude-login-for-conductor-workers) |
|
|
1223
|
+
| `BAPI_INSTALL_DEBUG` | No | _(unset)_ | Set to any non-empty value to unlock raw diagnostics in `install` and the `apply_install_manifest` path — the underlying error message and stack behind an `unexpected error` summary. The installer's own failure text tells you to set it |
|
|
1224
|
+
| `BAPI_SIGNUP_EMAIL` | No | _(none)_ | Selects the self-serve signup route without `--email`. Precedence: `--email` first, then this variable, then the visible interactive prompt |
|
|
1225
|
+
| `BAPI_INVITE` | No | _(none)_ | Invite code for `install`, for scripting. Like `--invite <code>`, it exposes the code to your shell history and the process list — prefer bare `--invite` and the hidden prompt |
|
|
1226
|
+
| `BAPI_PLANE_PYTHON` | No | `python` | Executable used for the Python members of `plane up`. Point it at a venv interpreter when `python` on `PATH` is not the one you want |
|
|
1227
|
+
| `BAPI_PLANE_UVICORN` | No | `uvicorn` | Executable used for the server member of `plane up` |
|
|
1093
1228
|
| `BAPI_DOCS_DIR` | No | `docs/tmp` | Local directory for saving plans, critiques, and research reports |
|
|
1094
1229
|
| `BAPI_PIPELINES_DIR` | No | `.bridge/pipelines` | Directory for user-defined custom pipeline JSON files |
|
|
1095
1230
|
| `BAPI_WORKTRUNK_BIN` | No | `wt` (`git-wt` on Windows) | Override the Worktrunk executable name/path used by `start-tickets` for nonstandard installs |
|
|
@@ -1098,7 +1233,11 @@ If a custom pipeline has the same key as a built-in pipeline, the custom version
|
|
|
1098
1233
|
| `BAPI_MCP_TOOL_SURFACE_GATING_ENABLED` | No | _(enabled)_ | MCP-local kill switch for **dynamic tool-surface capability gating** (see [Dynamic tool-surface gating](#dynamic-tool-surface-gating-capability-availability)). Default-on; set to `false`/`0`/`no`/`off`/`disabled` to skip the startup probe, the recurring poll, and the custom `tools/list` handler entirely, restoring the SDK's previous full profile-derived surface. Fail-open: any probe timeout, unreachable backend, non-2xx, malformed payload, incomplete evaluation, or unsupported schema advertises the full profile |
|
|
1099
1234
|
| `BAPI_MCP_TOOL_SURFACE_POLL_ENABLED` | No | _(disabled)_ | Opt IN to the recurring tool-surface **poll**. Default-**off**: a session gates once via the startup probe and never re-probes. Set to `true`/`1`/`yes`/`on`/`enabled` to restore the jittered 12–18 s heartbeat that pushes `notifications/tools/list_changed` on mid-session capability changes. No effect when gating itself is disabled |
|
|
1100
1235
|
| `CURSOR_API_KEY` | No | _(none)_ | API key used to authenticate `cursor-agent` when launching `start-tickets`/scheduled runs with `--agent cursor-agent`. Not needed for the default Claude Code agent |
|
|
1101
|
-
| `BRIDGE_MCP_PROFILE` | No | `core` | Startup-time tool registration profile — a **comma-separated** list of groups controlling which tool groups are registered when the server starts. `core` is always implicitly included. Valid groups: `core` (default — normal coding tools only), `conductor` (+ 8 conductor/event/supervisor tools), `pipeline-authoring` (+ 5 pipeline run/admin tools — `get_pipeline_recipe` is NOT gated; it stays in `core` because the recipe-driven slash commands depend on it), `sfcc` (+ the 8 heavy SFCC read tools and `sfcc_log_query` — read-only, see [Salesforce B2C Commerce (SFCC) Tools](#salesforce-b2c-commerce-sfcc-tools); the `sfcc_setup_status`/`check_permissions` diagnostics are always registered regardless), `sfcc-write` (+ the 9 destructive SFCC write tools — independent of `sfcc`, which does not enable them; see [Read and write profiles](#read-and-write-profiles)), and `full` (shortcut that expands to every group, **including `sfcc-write`**). Example: `sfcc,conductor`; use `sfcc,sfcc-write` for reads plus writes. Unknown, blank, or malformed tokens are dropped (falling back to `core`). Dynamic mid-session switching via `tools/list_changed` is unsupported — groups are resolved once at process startup. Conductor/epic sessions launched via `start-tickets --conductor`
|
|
1236
|
+
| `BRIDGE_MCP_PROFILE` | No | `core` | Startup-time tool registration profile — a **comma-separated** list of groups controlling which tool groups are registered when the server starts. `core` is always implicitly included. Valid groups: `core` (default — normal coding tools only), `conductor` (+ 8 conductor/event/supervisor tools), `pipeline-authoring` (+ 5 pipeline run/admin tools — `get_pipeline_recipe` is NOT gated; it stays in `core` because the recipe-driven slash commands depend on it), `sfcc` (+ the 8 heavy SFCC read tools and `sfcc_log_query` — read-only, see [Salesforce B2C Commerce (SFCC) Tools](#salesforce-b2c-commerce-sfcc-tools); the `sfcc_setup_status`/`check_permissions` diagnostics are always registered regardless), `sfcc-write` (+ the 9 destructive SFCC write tools — independent of `sfcc`, which does not enable them; see [Read and write profiles](#read-and-write-profiles)), and `full` (shortcut that expands to every group, **including `sfcc-write`**). Example: `sfcc,conductor`; use `sfcc,sfcc-write` for reads plus writes. Unknown, blank, or malformed tokens are dropped (falling back to `core`). Dynamic mid-session switching via `tools/list_changed` is unsupported — groups are resolved once at process startup. Conductor/epic sessions launched via `start-tickets --conductor` **merge** `conductor` into the parent process's already-resolved groups at the spawn boundary rather than replacing them — a project running on `sfcc` spawns workers on `core,sfcc,conductor`. A normal `start-tickets` run stays on `core`. |
|
|
1237
|
+
|
|
1238
|
+
Environment values are **trimmed**, and only a non-empty result wins. A
|
|
1239
|
+
whitespace-only `BAPI_API_KEY` therefore does not override anything: it falls
|
|
1240
|
+
through to credential-store resolution exactly as an unset variable would.
|
|
1102
1241
|
|
|
1103
1242
|
## Dynamic tool-surface gating (capability availability)
|
|
1104
1243
|
|