@leadbay/mcp 0.5.0 → 0.6.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog — @leadbay/mcp
2
2
 
3
+ ## 0.6.1 — UNRELEASED
4
+
5
+ **Distribution**: listed in the official MCP Registry as `io.github.leadbay/leadbay-mcp` (auto-published from CI via GitHub OIDC); installable as a Claude Code plugin via `/plugin marketplace add leadbay/leadclaw` then `/plugin install leadbay@leadbay-leadclaw`; submission packets prepared for the Claude.ai connector directory and Anthropic's curated MCPB extension directory.
6
+
7
+ **Registry verification**: adds `mcpName` to the npm package metadata so the MCP Registry can verify ownership of `io.github.leadbay/leadbay-mcp` against the published `@leadbay/mcp` package.
8
+
9
+ ## 0.6.0 — 2026-05-08
10
+
11
+ Massive spec-coverage upgrade. Each tool declares **annotations** (`readOnlyHint` / `destructiveHint` / `idempotentHint` / `openWorldHint`); 17 composites + 12 highest-leverage granulars declare typed `outputSchema` + emit `structuredContent`. New surfaces: `prompts/*` (5 canned slash-commands), `resources/*` (`lead://`, `lens://`, `org://taste-profile`), `notifications/progress` (per-lead streaming on every long-running composite), `notifications/cancelled` → `ToolContext.signal` (bulk-store entries marked `cancelled` so subsequent status polls return `BULK_CANCELLED`), `elicitation/create` (refine_prompt clarification + report_outreach user_confirmed anti-poisoning).
12
+
13
+ **Hardening**: every `inputSchema` declares `additionalProperties: false`. Runtime conformance test pins `structuredContent` against `outputSchema` for every declarer (drift-catcher). Static-scan audit of every error-hint string asserts each names a recovery action. `report_outreach.verification` rejects extra keys at runtime (closes the SDK's nested-additionalProperties limitation). `score_0_to_10` deprecated alias of `boost_score` removed in 0.7.0.
14
+
15
+ **Token economy**: pagination payloads carry `has_more` + `next_page`. `research_lead` truncates large payloads with a `truncation_hint`. Per-tool opt-in `response_format: "json" | "markdown"` lets chat-rendering agents pick the cheaper render (research_lead first; pattern reusable). `LEADBAY_DEBUG=1` enables a per-tools/call observability line on stderr.
16
+
17
+ **DXT → MCPB**: bundle now publishes both `leadbay-X.Y.Z.dxt` (legacy) and `leadbay-X.Y.Z.mcpb` (new Claude Desktop format) for one cycle. Manifest `dxt_version` field stays for backwards-compat with current installers; field rename will follow Anthropic's spec when finalised. The two filenames have identical content; downstream installers can match either glob.
18
+
19
+ **Versioning + docs**: 0.4.0 / 0.6.0 bumps; README §3a "Spec primitives in action" adds wire-level JSON-RPC transcripts for every primitive; MIGRATION.md 0.5 → 0.6 walkthrough.
20
+
3
21
  ## 0.5.0 — 2026-05-04
4
22
 
5
23
  ### `leadbay_import_and_qualify` — new composite
package/MIGRATION.md CHANGED
@@ -1,3 +1,99 @@
1
+ # Migration: leadbay-mcp 0.5.x → 0.6.0 (UNRELEASED)
2
+
3
+ The "MCP best-practice" upgrade. Five behaviour additions and ONE
4
+ softer-than-it-looks behavior callout. All changes are MCP-spec
5
+ aligned (2025-11-25).
6
+
7
+ ## 1. Tool annotations on every tool
8
+
9
+ Every tool now declares `annotations: { readOnlyHint, destructiveHint,
10
+ idempotentHint, openWorldHint, title }` in the `tools/list` payload.
11
+ Capable clients (Claude Desktop, Cursor) use these hints to decide
12
+ whether to auto-approve a call or prompt for confirmation. No agent-
13
+ side change required.
14
+
15
+ ## 2. `additionalProperties: false` on every tool's inputSchema
16
+
17
+ **Behavior callout**: any client that was passing extra unrecognized
18
+ fields will now get a schema rejection. This was a deliberate
19
+ hardening — extra fields were never documented, and the rejection
20
+ closes a prompt-injection surface (the eval doc explicitly endorsed
21
+ this). To migrate: drop the unknown field. The error message names
22
+ the rejected field.
23
+
24
+ If you discover an unknown field in your call shape, double-check the
25
+ relevant tool's documented `inputSchema`; if you believe a field
26
+ should exist, file an issue.
27
+
28
+ ## 3. `outputSchema` + `structuredContent` on top-5 composites
29
+
30
+ `leadbay_pull_leads`, `leadbay_research_lead`, `leadbay_account_status`,
31
+ `leadbay_bulk_qualify_leads`, `leadbay_report_outreach` now declare
32
+ `outputSchema` AND emit `structuredContent` on success alongside the
33
+ existing text content. Clients that read structuredContent get the
34
+ typed payload without re-parsing through the LLM. Backwards-compat:
35
+ text content is unchanged.
36
+
37
+ ## 4. `boost_score` on `research_lead.qualification[]`
38
+
39
+ The qualification entry was previously labelled `score_0_to_10`. The
40
+ actual scale is the discrete `-10|0|10|20` boost (per
41
+ `AiAgentResponse.score`), NOT a 0-10 average. 0.6.0 introduces:
42
+
43
+ ```json
44
+ {
45
+ "question": "...",
46
+ "boost_score": 10,
47
+ "score_scale": "-10|0|10|20",
48
+ "score_0_to_10": 10, // DEPRECATED — same value as boost_score
49
+ "response": "...",
50
+ "computed_at": "..."
51
+ }
52
+ ```
53
+
54
+ `score_0_to_10` is kept as a deprecated alias for one minor version
55
+ and removed in 0.7.0. Switch to `boost_score` now.
56
+
57
+ ## 5. New spec primitives
58
+
59
+ The server now advertises and serves:
60
+
61
+ - **`prompts/*`** — 5 canned slash-commands (`leadbay_daily_check_in`,
62
+ `leadbay_research_a_domain`, `leadbay_refine_audience`,
63
+ `leadbay_log_outreach`, `leadbay_qualify_top_n`). Use these from
64
+ the client UI; agents that read prompts compose workflows
65
+ automatically.
66
+ - **`resources/*`** — three URI schemes addressable by client:
67
+ `lead://{uuid}/profile`, `lens://{id}/definition`,
68
+ `org://taste-profile`. Cache-friendly for capable clients.
69
+ - **`notifications/progress`** — long-running composites (today:
70
+ `leadbay_bulk_qualify_leads`) stream per-lead progress updates
71
+ when the client opts in via `_meta.progressToken`.
72
+ - **`notifications/cancelled`** → `ToolContext.signal` — clients
73
+ that send cancellation now actually stop in-flight work in
74
+ composites that observe `ctx.signal` (`leadbay_import_and_qualify`,
75
+ `leadbay_import_leads`, etc.).
76
+
77
+ Clients without these capabilities negotiate away — backwards-compat
78
+ is preserved.
79
+
80
+ ## 6. Pagination metadata: `has_more` + `next_page`
81
+
82
+ `leadbay_pull_leads` and `leadbay_discover_leads` payloads now
83
+ include `has_more: boolean` and `next_page: number | null` next to
84
+ the existing `pagination` object. Spec-aligned; agents no longer
85
+ need to compute `page < pages - 1`.
86
+
87
+ ## 7. Truncation steering on `research_lead`
88
+
89
+ When the response would exceed ~25k characters, the composite now
90
+ emits `truncated: true` plus `truncation_hint: "Pass concise:true to
91
+ filter to hot signals only."`. Load-bearing fields (qualification,
92
+ firmographics, contacts) are never trimmed; only signals.entries get
93
+ trimmed first.
94
+
95
+ ---
96
+
1
97
  # Migration: leadbay-mcp 0.2.x → 0.3.0
2
98
 
3
99
  This release fixes [product#3504](https://github.com/leadbay/product/issues/3504): the default-installed MCP server's system prompt told the agent to call tools that the server didn't actually expose. Three behavior changes you need to know about.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # @leadbay/mcp — Leadbay MCP server
2
2
 
3
+ [![MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.github.leadbay%2Fleadbay--mcp-blue)](https://registry.modelcontextprotocol.io/v0/servers/io.github.leadbay/leadbay-mcp)
4
+
3
5
  <!--
4
6
  LLM HINT — if you're an AI agent reading this README to install the server:
5
7
  - Use ONLY the commands shown verbatim in §1. Do not invent variants.
@@ -15,12 +17,14 @@ LLM HINT — if you're an AI agent reading this README to install the server:
15
17
 
16
18
  A Model Context Protocol server that lets Claude Desktop, Cursor, Claude Code, and any other MCP-compatible agent find, research, and prepare outreach on B2B prospects using your Leadbay account.
17
19
 
20
+ > **0.6.x — what's new**: a comprehensive MCP-spec coverage upgrade. Every tool now declares **annotations** (`readOnlyHint`/`destructiveHint`/`idempotentHint`/`openWorldHint`) so capable clients pick the right confirmation UX. The 5 highest-traffic composites ship **`outputSchema` + `structuredContent`** for typed agent consumption. New surfaces: **`prompts/*`** (5 canned slash-commands), **`resources/*`** (`lead://`, `lens://`, `org://taste-profile`), **`notifications/progress`** (per-lead streaming during `bulk_qualify_leads`), **`notifications/cancelled` → `ToolContext.signal`** (client cancels actually stop polling), **`elicitation/create`** (server can ask the user directly). Schema strictness: every `inputSchema` now declares `additionalProperties: false`. `research_lead.qualification[]` ships `boost_score` (canonical) + `score_scale: "-10|0|10|20"` + a deprecated `score_0_to_10` alias. Pagination payloads include `has_more` + `next_page`. `research_lead` includes a `truncated` + `truncation_hint` budget guard. **Behavior callout**: extra unknown fields in tool inputs are now rejected. See [MIGRATION.md](./MIGRATION.md).
21
+
18
22
  > **0.3.0 behavior change** — composite write tools (`refine_prompt`, `report_outreach`, `adjust_audience`, `bulk_qualify_leads`, `enrich_titles`, `answer_clarification`, `import_leads`) are **ON by default**. Set `LEADBAY_MCP_WRITE=0` (or `--no-write` on `install`) to restore the previous read-only behavior. `leadbay-mcp install` now also registers Claude Code at `--scope user` so Leadbay is visible from any project. See [MIGRATION.md](./MIGRATION.md).
19
23
 
20
24
  ## 1. Install (one command)
21
25
 
22
26
  ```bash
23
- npx -y @leadbay/mcp@0.3 install --email you@yourcompany.com --region us
27
+ npx -y @leadbay/mcp@0.6 install --email you@yourcompany.com --region us
24
28
  # (you'll be prompted for your password — it's not echoed)
25
29
  ```
26
30
 
@@ -39,6 +43,15 @@ The token is **session-scoped** (full account access, password-equivalent). Trea
39
43
 
40
44
  **Don't have a Leadbay account?** [Register here](https://wow.leadbay.ai/?register=true).
41
45
 
46
+ ### Install via the Claude Code plugin marketplace
47
+
48
+ ```text
49
+ /plugin marketplace add leadbay/leadclaw
50
+ /plugin install leadbay@leadbay-leadclaw
51
+ ```
52
+
53
+ Claude Code prompts for your token and region through the plugin's `userConfig`. This is equivalent to the npm/CLI install above; users who already ran `leadbay-mcp login` can reuse that token.
54
+
42
55
  ### Claude Desktop 2026 (DXT)
43
56
 
44
57
  Claude Desktop 2026 ships the DXT (Desktop Extension) system — the legacy `claude_desktop_config.json` is UI-prefs-only there and gets overwritten by the app. If you're on 2026, **install the `.dxt` bundle** from [Releases](https://github.com/leadbay/leadclaw/releases/latest) (drag-drop into Settings → Extensions). `leadbay-mcp install` detects this and skips the legacy write automatically.
@@ -47,14 +60,14 @@ Claude Desktop 2026 ships the DXT (Desktop Extension) system — the legacy `cla
47
60
 
48
61
  If you installed Node from the official [nodejs.org](https://nodejs.org) `.pkg`, `/usr/local/lib/node_modules` is root-owned. Any of these works:
49
62
 
50
- - **Use `npx` (recommended, no global install):** all examples above use `npx -y @leadbay/mcp@0.3 ...` — no global install needed.
63
+ - **Use `npx` (recommended, no global install):** all examples above use `npx -y @leadbay/mcp@0.6 ...` — no global install needed.
51
64
  - **`sudo npm install -g @leadbay/mcp`** (enter your macOS password).
52
65
  - **Use a Node version manager** — [nvm](https://github.com/nvm-sh/nvm), [volta](https://volta.sh), [fnm](https://github.com/Schniz/fnm). They install Node under your home directory, so `npm install -g` works without sudo.
53
66
 
54
67
  ### If you'd rather mint a token without auto-install
55
68
 
56
69
  ```bash
57
- npx -y @leadbay/mcp@0.3 login \
70
+ npx -y @leadbay/mcp@0.6 login \
58
71
  --email you@yourcompany.com \
59
72
  --region us
60
73
  ```
@@ -72,7 +85,7 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o
72
85
  "mcpServers": {
73
86
  "leadbay": {
74
87
  "command": "npx",
75
- "args": ["-y", "@leadbay/mcp@0.3"],
88
+ "args": ["-y", "@leadbay/mcp@0.6"],
76
89
  "env": {
77
90
  "LEADBAY_TOKEN": "<paste-token-from-step-1>",
78
91
  "LEADBAY_REGION": "us"
@@ -93,7 +106,7 @@ In Cursor settings, add the MCP server:
93
106
  "mcp.servers": {
94
107
  "leadbay": {
95
108
  "command": "npx",
96
- "args": ["-y", "@leadbay/mcp@0.3"],
109
+ "args": ["-y", "@leadbay/mcp@0.6"],
97
110
  "env": { "LEADBAY_TOKEN": "<paste-token>", "LEADBAY_REGION": "us" }
98
111
  }
99
112
  }
@@ -106,7 +119,7 @@ In Cursor settings, add the MCP server:
106
119
  claude mcp add leadbay --scope user \
107
120
  --env LEADBAY_TOKEN=<paste-token> \
108
121
  --env LEADBAY_REGION=us \
109
- -- npx -y @leadbay/mcp@0.3
122
+ -- npx -y @leadbay/mcp@0.6
110
123
  ```
111
124
 
112
125
  > **`--scope user`** registers Leadbay globally for your account (visible from any project). Without it, `claude mcp add` defaults to project-local scope and the server only appears in conversations opened from the directory where you ran the command.
@@ -118,7 +131,7 @@ claude mcp add leadbay --scope user \
118
131
  Before starting Claude, run:
119
132
 
120
133
  ```bash
121
- LEADBAY_TOKEN=<paste-token> npx -y @leadbay/mcp@0.3 doctor
134
+ LEADBAY_TOKEN=<paste-token> npx -y @leadbay/mcp@0.6 doctor
122
135
  ```
123
136
 
124
137
  Expected output:
@@ -138,6 +151,202 @@ Leadbay connection OK.
138
151
 
139
152
  > *Prepare an outreach package for Acme Corp — include the recommended contact with enriched email if we have credits.*
140
153
 
154
+ ## 3a. Spec primitives in action
155
+
156
+ > If you're building or auditing an MCP integration, this section shows what each spec primitive looks like on the wire when calling `@leadbay/mcp`. Every example is the actual JSON-RPC frame your client sends or receives — copy verbatim into a debugger.
157
+
158
+ ### `tools/list` — annotations + outputSchema
159
+
160
+ Every tool advertises read/write/idempotent/openWorld posture and (for the top declarers) a typed return schema.
161
+
162
+ Request:
163
+
164
+ ```json
165
+ { "jsonrpc": "2.0", "id": 1, "method": "tools/list" }
166
+ ```
167
+
168
+ Response (excerpt):
169
+
170
+ ```json
171
+ {
172
+ "tools": [
173
+ {
174
+ "name": "leadbay_account_status",
175
+ "description": "Show the user's account state — admin rights, language, last-active lens, current quota …",
176
+ "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false },
177
+ "annotations": {
178
+ "title": "Show Leadbay account + quota state",
179
+ "readOnlyHint": true, "destructiveHint": false,
180
+ "idempotentHint": true, "openWorldHint": true
181
+ },
182
+ "outputSchema": {
183
+ "type": "object",
184
+ "properties": {
185
+ "user": { "type": "object", "properties": { "email": {}, "name": {}, "admin": {}, "manager": {}, "language": {} } },
186
+ "organization": { "type": "object", "properties": { "id": {}, "name": {}, "ai_agent_enabled": {}, "computing_intelligence": {}, "plan": {} } },
187
+ "last_requested_lens": {},
188
+ "quota": {},
189
+ "_meta": { "type": "object", "properties": { "region": {} } }
190
+ },
191
+ "required": ["user", "organization"]
192
+ }
193
+ }
194
+ ]
195
+ }
196
+ ```
197
+
198
+ Capable clients use the annotations to decide auto-approve vs prompt; the `outputSchema` lets them dispatch on shape rather than re-parse the text.
199
+
200
+ ### `tools/call` with `structuredContent`
201
+
202
+ When the tool declares `outputSchema`, the response carries a typed `structuredContent` block alongside `text` content:
203
+
204
+ Request:
205
+
206
+ ```json
207
+ { "jsonrpc": "2.0", "id": 2, "method": "tools/call",
208
+ "params": { "name": "leadbay_account_status", "arguments": {} } }
209
+ ```
210
+
211
+ Response:
212
+
213
+ ```json
214
+ {
215
+ "content": [
216
+ { "type": "text", "text": "{\"user\":{...},\"organization\":{...}, ...}" }
217
+ ],
218
+ "structuredContent": {
219
+ "user": { "email": "you@example.com", "name": "You", "admin": true, "manager": false, "language": "en" },
220
+ "organization": { "id": "org-1", "name": "Your Co", "ai_agent_enabled": true, "computing_intelligence": false, "plan": "PRO" },
221
+ "last_requested_lens": 42,
222
+ "quota": { "plan": "PRO", "windows": [...] },
223
+ "_meta": { "region": "us" }
224
+ }
225
+ }
226
+ ```
227
+
228
+ ### `prompts/list` and `prompts/get` — slash commands
229
+
230
+ Request:
231
+
232
+ ```json
233
+ { "jsonrpc": "2.0", "id": 3, "method": "prompts/list" }
234
+ ```
235
+
236
+ Response (excerpt):
237
+
238
+ ```json
239
+ {
240
+ "prompts": [
241
+ { "name": "daily-check-in", "description": "Pull fresh leads, surface auto-qualified top, deepen 1-3 promising ones.", "arguments": [] },
242
+ { "name": "research-a-domain", "description": "Import a domain → resolve to leadId → research_lead.",
243
+ "arguments": [{ "name": "domain", "description": "Company domain (e.g., acme.com)", "required": true }] },
244
+ { "name": "log-outreach", "description": "Gather verification → report_outreach.",
245
+ "arguments": [{ "name": "lead_id", "required": true }, { "name": "what", "required": true }] }
246
+ ]
247
+ }
248
+ ```
249
+
250
+ Then `prompts/get` materialises the chosen workflow as a structured `messages` array the agent unfurls:
251
+
252
+ ```json
253
+ { "jsonrpc": "2.0", "id": 4, "method": "prompts/get",
254
+ "params": { "name": "research-a-domain", "arguments": { "domain": "acme.com" } } }
255
+ ```
256
+
257
+ ### `resources/list` and `resources/read` — URI-addressable read-only data
258
+
259
+ Three URI schemes are advertised: `lead://{uuid}/profile`, `lens://{id}/definition`, `org://taste-profile`. Capable clients cache them across turns.
260
+
261
+ Request:
262
+
263
+ ```json
264
+ { "jsonrpc": "2.0", "id": 5, "method": "resources/templates/list" }
265
+ ```
266
+
267
+ Response (excerpt):
268
+
269
+ ```json
270
+ {
271
+ "resourceTemplates": [
272
+ { "uriTemplate": "lead://{uuid}/profile", "name": "Lead profile", "description": "Lead profile by Leadbay UUID — basics + qualifications + contacts.", "mimeType": "application/json" },
273
+ { "uriTemplate": "lens://{id}/definition", "name": "Lens definition", "description": "Filter + scoring config for a lens.", "mimeType": "application/json" }
274
+ ]
275
+ }
276
+ ```
277
+
278
+ Read a specific lead:
279
+
280
+ ```json
281
+ { "jsonrpc": "2.0", "id": 6, "method": "resources/read",
282
+ "params": { "uri": "lead://0xabcd-…/profile" } }
283
+ ```
284
+
285
+ Response wraps the JSON in a `text` content block with the URI's mime type so clients can render or cache it.
286
+
287
+ ### `notifications/progress` — streaming during long ops
288
+
289
+ When the agent calls a long-running tool with a `progressToken` in `_meta`, the server streams progress notifications back. Long-runners that emit: `bulk_qualify_leads`, `import_and_qualify`, `enrich_titles`, `bulk_enrich_status`, `qualify_status`.
290
+
291
+ Request:
292
+
293
+ ```json
294
+ { "jsonrpc": "2.0", "id": 7, "method": "tools/call",
295
+ "params": {
296
+ "name": "leadbay_bulk_qualify_leads",
297
+ "arguments": { "leadIds": ["lead-1", "lead-2", "lead-3"] },
298
+ "_meta": { "progressToken": "bq-1" }
299
+ } }
300
+ ```
301
+
302
+ While the call runs, notifications arrive:
303
+
304
+ ```json
305
+ { "jsonrpc": "2.0", "method": "notifications/progress",
306
+ "params": { "progressToken": "bq-1", "progress": 1, "total": 3, "message": "Qualified Acme Corp (1/3)" } }
307
+ { "jsonrpc": "2.0", "method": "notifications/progress",
308
+ "params": { "progressToken": "bq-1", "progress": 2, "total": 3, "message": "Qualified Globex (2/3)" } }
309
+ { "jsonrpc": "2.0", "method": "notifications/progress",
310
+ "params": { "progressToken": "bq-1", "progress": 3, "total": 3, "message": "Qualified Initech (3/3)" } }
311
+ ```
312
+
313
+ Then the final `tools/call` response.
314
+
315
+ ### `notifications/cancelled` — actually cancelling
316
+
317
+ Send the cancellation by id; the server's `ToolContext.signal` aborts the polling loop within ≤2 seconds, the bulk-store entry is marked `cancelled`, and the next `bulk_enrich_status` returns `BULK_CANCELLED` so the agent stops polling.
318
+
319
+ ```json
320
+ { "jsonrpc": "2.0", "method": "notifications/cancelled",
321
+ "params": { "requestId": 7, "reason": "user clicked cancel" } }
322
+ ```
323
+
324
+ ### `elicitation/create` — server asks the user
325
+
326
+ Used by `refine_prompt` (clarification flow) and `report_outreach` (anti-poisoning user-confirmation). The server sends an `elicitation/create` request to the client; the client renders a form; the user types; the response feeds back into the tool call. The agent never sees the prompt.
327
+
328
+ Server emits (mid-`tools/call`):
329
+
330
+ ```json
331
+ { "jsonrpc": "2.0", "id": 99, "method": "elicitation/create",
332
+ "params": {
333
+ "message": "An AI agent wants to log outreach on lead-1: 'Called Acme'. The agent claims you confirmed this. Type your literal confirmation to proceed; cancel to reject.",
334
+ "requestedSchema": {
335
+ "type": "object",
336
+ "properties": { "confirmation": { "type": "string", "title": "Your confirmation" } },
337
+ "required": ["confirmation"]
338
+ }
339
+ } }
340
+ ```
341
+
342
+ Client returns:
343
+
344
+ ```json
345
+ { "jsonrpc": "2.0", "id": 99, "result": { "action": "accept", "content": { "confirmation": "yes I called Acme today" } } }
346
+ ```
347
+
348
+ The user's literal text replaces `verification.ref` in the outreach record, and the response carries `confirmed_via: "elicit"` for the SDR audit trail.
349
+
141
350
  ## 4. Troubleshooting
142
351
 
143
352
  | Problem | Cause | Fix |
@@ -148,14 +357,14 @@ Leadbay connection OK.
148
357
  | `No enrichment credits remaining` | Out of quota | Contact Leadbay support to extend quota |
149
358
  | Claude Desktop "loading forever" on first use | `npx` cold-start fetching the package | First run takes ~10s. Prefer `npm install -g @leadbay/mcp` for faster startup. |
150
359
  | Claude Desktop doesn't show Leadbay tools | Server crashed at startup | Check `~/Library/Logs/Claude/mcp*.log` (macOS) or `%APPDATA%\Claude\logs\mcp*.log` (Windows). |
151
- | Claude Code can't find Leadbay in a new conversation | MCP server installed at project scope (default before 0.3.0) | Re-run with `--scope user`: `claude mcp remove leadbay && claude mcp add leadbay --scope user --env LEADBAY_TOKEN=… --env LEADBAY_REGION=us -- npx -y @leadbay/mcp@0.3` |
360
+ | Claude Code can't find Leadbay in a new conversation | MCP server installed at project scope (default before 0.3.0) | Re-run with `--scope user`: `claude mcp remove leadbay && claude mcp add leadbay --scope user --env LEADBAY_TOKEN=… --env LEADBAY_REGION=us -- npx -y @leadbay/mcp@0.6` |
152
361
  | Agent reports "tool not found" for `refine_prompt` / `adjust_audience` etc. | Pre-0.3.0 install with `LEADBAY_MCP_WRITE` unset (writes were off) | Either re-run `npx @leadbay/mcp install` or remove `LEADBAY_MCP_WRITE=0` from your client config (writes are on by default in 0.3.0+) |
153
362
 
154
363
  ## 5. Upgrade & rotation
155
364
 
156
- **Upgrade**: change the pinned minor in your config, e.g. `"@leadbay/mcp@0.2"` → `"@leadbay/mcp@0.3"`, then restart the client. **0.3.0 enables composite write tools by default** — see [MIGRATION.md](./MIGRATION.md). See also the [changelog](https://github.com/leadbay/leadclaw/releases).
365
+ **Upgrade**: change the pinned minor in your config, e.g. `"@leadbay/mcp@0.2"` → `"@leadbay/mcp@0.6"`, then restart the client. **0.3.0 enables composite write tools by default** — see [MIGRATION.md](./MIGRATION.md). See also the [changelog](https://github.com/leadbay/leadclaw/releases).
157
366
 
158
- **Rotate token**: re-run `npx -y @leadbay/mcp@0.3 install --email you@yourcompany.com --region us` (or `login`) — the new session token replaces the old one in your MCP client config, and logging in again invalidates the prior session on most session backends.
367
+ **Rotate token**: re-run `npx -y @leadbay/mcp@0.6 install --email you@yourcompany.com --region us` (or `login`) — the new session token replaces the old one in your MCP client config, and logging in again invalidates the prior session on most session backends.
159
368
 
160
369
  ## 6. Advanced
161
370