@fitchmultz/pi-mcp-adapter 8.0.6 → 8.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +142 -8
  2. package/OAUTH.md +13 -16
  3. package/README.md +8 -8
  4. package/cli.js +67 -28
  5. package/dist/abort.js +18 -9
  6. package/dist/client-operations.js +4 -2
  7. package/dist/commands.js +77 -43
  8. package/dist/config.js +194 -105
  9. package/dist/connection-runtime.d.ts +2 -2
  10. package/dist/connection-runtime.js +29 -18
  11. package/dist/consent-manager.d.ts +2 -2
  12. package/dist/consent-manager.js +5 -2
  13. package/dist/direct-tools.d.ts +1 -1
  14. package/dist/direct-tools.js +13 -7
  15. package/dist/elicitation-handler.d.ts +2 -3
  16. package/dist/elicitation-handler.js +113 -58
  17. package/dist/gateway-arguments.d.ts +1 -1
  18. package/dist/gateway-arguments.js +90 -23
  19. package/dist/glimpse-ui.js +10 -5
  20. package/dist/host-html-template.d.ts +3 -1
  21. package/dist/host-html-template.js +9 -12
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.js +264 -119
  24. package/dist/init.d.ts +1 -3
  25. package/dist/init.js +91 -51
  26. package/dist/legacy-migration.d.ts +1 -1
  27. package/dist/legacy-migration.js +17 -12
  28. package/dist/lifecycle.d.ts +3 -3
  29. package/dist/lifecycle.js +33 -17
  30. package/dist/logger.d.ts +2 -2
  31. package/dist/logger.js +4 -2
  32. package/dist/mcp-auth-flow.js +150 -58
  33. package/dist/mcp-auth.d.ts +7 -7
  34. package/dist/mcp-auth.js +189 -138
  35. package/dist/mcp-callback-server.js +19 -8
  36. package/dist/mcp-code.js +168 -54
  37. package/dist/mcp-keyring-helper.cjs +57 -23
  38. package/dist/mcp-oauth-provider.d.ts +6 -7
  39. package/dist/mcp-oauth-provider.js +146 -72
  40. package/dist/mcp-oauth-runtime.js +29 -16
  41. package/dist/mcp-output-guard.js +193 -65
  42. package/dist/mcp-output-preview.js +41 -20
  43. package/dist/mcp-panel.d.ts +9 -9
  44. package/dist/mcp-panel.js +141 -70
  45. package/dist/mcp-script-worker.mjs +135 -43
  46. package/dist/mcp-setup-panel.d.ts +8 -8
  47. package/dist/mcp-setup-panel.js +130 -44
  48. package/dist/mcp-status.js +14 -7
  49. package/dist/mcp-trace.d.ts +10 -5
  50. package/dist/mcp-trace.js +127 -61
  51. package/dist/metadata-cache.d.ts +3 -4
  52. package/dist/metadata-cache.js +83 -43
  53. package/dist/npx-resolver.js +101 -60
  54. package/dist/onboarding-state.js +4 -2
  55. package/dist/plain-result-reader.js +78 -31
  56. package/dist/prompts.js +36 -20
  57. package/dist/proxy-modes.js +670 -193
  58. package/dist/resource-tools.js +30 -9
  59. package/dist/runtime-owner.js +36 -18
  60. package/dist/sampling-handler.d.ts +1 -2
  61. package/dist/sampling-handler.js +41 -21
  62. package/dist/search-ranking.d.ts +1 -1
  63. package/dist/search-ranking.js +67 -34
  64. package/dist/server-manager.d.ts +11 -11
  65. package/dist/server-manager.js +283 -166
  66. package/dist/session-recovery.js +113 -61
  67. package/dist/tool-approval.js +9 -3
  68. package/dist/tool-loader.js +154 -55
  69. package/dist/tool-metadata.d.ts +1 -1
  70. package/dist/tool-metadata.js +51 -23
  71. package/dist/tool-registrar.js +32 -10
  72. package/dist/tool-result-renderer.js +58 -33
  73. package/dist/types.d.ts +2 -2
  74. package/dist/types.js +39 -18
  75. package/dist/ui-message-history.js +33 -13
  76. package/dist/ui-resource-handler.d.ts +3 -3
  77. package/dist/ui-resource-handler.js +37 -21
  78. package/dist/ui-server.js +101 -43
  79. package/dist/ui-session.js +66 -29
  80. package/dist/ui-stream-types.js +14 -4
  81. package/dist/ui-tool-visibility.js +12 -6
  82. package/dist/unix-socket-transport.d.ts +1 -2
  83. package/dist/unix-socket-transport.js +19 -12
  84. package/dist/utils.d.ts +2 -0
  85. package/dist/utils.js +60 -35
  86. package/package.json +28 -2
  87. package/skills/mcp-scripting/SKILL.md +6 -6
package/CHANGELOG.md CHANGED
@@ -7,6 +7,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## 8.0.8 - 2026-11-02
11
+
12
+ <!-- npm-release:unreleased:start -->
13
+ <!-- npm-release:unreleased:end -->
14
+
15
+ - Enforce strict lint on real SDK HTTP tests (#150) ([293994b](https://github.com/fitchmultz/pi-mcp-adapter/commit/293994b1860a9621d06a3da64b1f02a34bf92998))
16
+
17
+ ### What's Changed
18
+
19
+ - Enforce strict lint on real SDK HTTP tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/150
20
+ - Enforce strict lint on native lifecycle tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/151
21
+
22
+ **Full Changelog**: https://github.com/fitchmultz/pi-mcp-adapter/compare/v8.0.7...v8.0.8
23
+
24
+ ## 8.0.7 - 2026-11-02
25
+
26
+ <!-- npm-release:unreleased:start -->
27
+ <!-- npm-release:unreleased:end -->
28
+
29
+ - Adopt strict quality toolchain and formatting (1/2) (#124) ([d88b71a](https://github.com/fitchmultz/pi-mcp-adapter/commit/d88b71a70b48ec2f44563a79489abddca6af6adf))
30
+
31
+ ### What's Changed
32
+
33
+ - Adopt strict quality toolchain and formatting (1/2) by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/124
34
+ - Enforce strict lint for conformance tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/125
35
+ - Enforce strict lint for prompt tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/126
36
+ - Enforce strict lint for runtime integration tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/127
37
+ - Enforce strict lint for auto-auth tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/128
38
+ - Enforce strict lint for discovery and result tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/130
39
+ - perf: parallelize independent awaits in hot paths by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/129
40
+ - Enforce strict lint for state and callback tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/131
41
+ - Enforce strict lint for output storage tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/132
42
+ - Enforce strict lint on packaging tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/133
43
+ - Enforce strict lint on transport tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/134
44
+ - Enforce strict lint on instruction tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/135
45
+ - Enforce strict lint on lazy startup tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/137
46
+ - Check source directives during quality migration by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/136
47
+ - Enforce strict lint on metadata cache tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/138
48
+ - Enforce strict lint on resource discovery tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/139
49
+ - Adopt the strict quality engineering standard by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/140
50
+ - Enforce strict lint on UI host tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/141
51
+ - Authenticate official host qualification requests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/143
52
+ - Enforce strict lint on panel tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/142
53
+ - Verify strict policy and compiler coverage by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/144
54
+ - Enforce strict lint on callback lifecycle tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/145
55
+ - Enforce strict lint on credential storage tests by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/146
56
+ - Qualify startup cancellation through native HTTP transports by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/147
57
+ - Enforce operation-bound exceptions for protocol tracing by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/148
58
+
59
+ **Full Changelog**: https://github.com/fitchmultz/pi-mcp-adapter/compare/v8.0.6...v8.0.7
60
+
10
61
  ## 8.0.6 - 2026-11-02
11
62
 
12
63
  <!-- npm-release:unreleased:start -->
@@ -15,8 +66,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
66
  - Raise the Pi floor to 1.5.0 (#122) ([fc9bed1](https://github.com/fitchmultz/pi-mcp-adapter/commit/fc9bed1ac87fcfaabeca626115dbe107c0e63ac9))
16
67
 
17
68
  ### What's Changed
18
- * Raise the Pi floor to 1.5.0 by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/122
19
69
 
70
+ - Raise the Pi floor to 1.5.0 by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/122
20
71
 
21
72
  **Full Changelog**: https://github.com/fitchmultz/pi-mcp-adapter/compare/v8.0.5...v8.0.6
22
73
 
@@ -28,8 +79,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
28
79
  - Reconnect all MCP servers concurrently (#120) ([50b4a32](https://github.com/fitchmultz/pi-mcp-adapter/commit/50b4a326471d724f42e2318e97c685c76f418f20))
29
80
 
30
81
  ### What's Changed
31
- * Reconnect all MCP servers concurrently by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/120
32
82
 
83
+ - Reconnect all MCP servers concurrently by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/120
33
84
 
34
85
  **Full Changelog**: https://github.com/fitchmultz/pi-mcp-adapter/compare/v8.0.4...v8.0.5
35
86
 
@@ -41,14 +92,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
41
92
  - Use direct Flash for automatic release remediation (#118) ([376688c](https://github.com/fitchmultz/pi-mcp-adapter/commit/376688cf0e8fa50aaaa9883eee08968fc30224f9))
42
93
 
43
94
  ### What's Changed
44
- * Use direct Flash for necessary release remediation by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/118
45
95
 
96
+ - Use direct Flash for necessary release remediation by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/118
46
97
 
47
98
  **Full Changelog**: https://github.com/fitchmultz/pi-mcp-adapter/compare/v8.0.3...v8.0.4
48
99
 
49
100
  ## 8.0.3 - 2026-11-01
50
101
 
51
102
  <!-- npm-release:unreleased:start -->
103
+
52
104
  ### Changed
53
105
 
54
106
  - Automatically open reviewed patch-version PRs and publish the retained candidate after full CI and package qualification.
@@ -57,15 +109,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
57
109
  ### Fixed
58
110
 
59
111
  - Keep the locked development Pi packages on one current official cohort so a clean install can run the native SDK tests. The Pi 1.0 support floor and optional runtime peers are unchanged.
112
+
60
113
  <!-- npm-release:unreleased:end -->
61
114
 
62
115
  - Automate qualified npm patch releases (#116) ([d2cdb1a](https://github.com/fitchmultz/pi-mcp-adapter/commit/d2cdb1a900695277281a1fae109a13727a8a1802))
63
116
 
64
117
  ### What's Changed
65
- * Fix clean-install Pi development dependencies by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/114
66
- * Qualify the retained MCP adapter release candidate by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/115
67
- * Automate qualified npm patch releases by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/116
68
118
 
119
+ - Fix clean-install Pi development dependencies by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/114
120
+ - Qualify the retained MCP adapter release candidate by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/115
121
+ - Automate qualified npm patch releases by @fitchmultz in https://github.com/fitchmultz/pi-mcp-adapter/pull/116
69
122
 
70
123
  **Full Changelog**: https://github.com/fitchmultz/pi-mcp-adapter/compare/v8.0.2...v8.0.3
71
124
 
@@ -340,11 +393,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
340
393
  ## [4.0.2] - 2026-08-09
341
394
 
342
395
  ### Fixed
396
+
343
397
  - Preserved compact search settings across pagination and clarified recovery when an explicit server does not own a requested tool.
344
398
 
345
399
  ## [4.0.1] - 2026-08-08
346
400
 
347
401
  ### Fixed
402
+
348
403
  - Paginated server tool catalogs with bounded ranges, explicit continuation calls, a 100-item page cap, and out-of-range recovery instead of dumping every tool.
349
404
  - Ranked typo suggestions by same-server edit distance, rejected oversized guessed names before ranking, avoided connecting on cached-name misses, and removed full-catalog error dumps.
350
405
  - Let `mcp_script` process full raw MCP results before model-facing output guards, and kept overflow summaries distinct from real `structuredContent`.
@@ -353,6 +408,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
353
408
  ## [4.0.0] - 2026-08-08
354
409
 
355
410
  ### Changed
411
+
356
412
  - **BREAKING:** Removed regex tool search and the `regex: true` input. Ranked substring and token search remains available.
357
413
  - **BREAKING:** Removed the legacy `settings.hostConfigDiscovery: "prompt"` value. Existing `"prompt"` settings are treated as `"off"`; use `"on"` to load detected host configs.
358
414
  - Proxy and direct tool calls now share one execution path, keeping output guarding, recovery, UI handling, and raw MCP result details consistent.
@@ -361,11 +417,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
361
417
  ## [3.0.1] - 2026-08-07
362
418
 
363
419
  ### Changed
420
+
364
421
  - The MCP footer status now defaults to compact `MCP connected/enabled`. Set `settings.mcpFooterStatus` to `"full"` to restore the previous detailed text.
365
422
 
366
423
  ## [3.0.0] - 2026-08-06
367
424
 
368
425
  ### Changed
426
+
369
427
  - **BREAKING:** Pi 0.84.0 or later and Node.js 22.19.0 or later are now required. Pi host development dependencies and TypeBox are pinned to the released 0.84.0 contract, while core runtime packages remain optional wildcard peers per Pi package conventions.
370
428
  - MCP sampling now dispatches through Pi's `ModelRegistry.complete()` so resolved endpoints, custom providers, authentication, and `null` header-deletion markers are preserved by the 0.84 request pipeline.
371
429
  - Direct-tool schemas now use Pi 0.84's bundled TypeBox APIs directly, stale tools use the supported active-tool deactivation flow instead of compatibility probes for non-contract host APIs, and renderer hints honor configured Pi keybindings.
@@ -373,24 +431,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
373
431
  - Custom MCP panels now open only in TUI mode; non-TUI UI clients receive text status or command guidance.
374
432
 
375
433
  ### Fixed
434
+
376
435
  - Stopped tokenless discovery requests, sandboxed MCP app documents, unrelated child windows, and app-opened popups from gaining session authority; discovery now serves a non-sensitive landing page, app HTML loads with a separate resource-only token, host messages accept only the app frame as their source, and the app response enforces sandboxing even when opened as a top-level page.
377
436
 
378
437
  ## [2.19.0] - 2026-08-03
379
438
 
380
439
  ### Added
440
+
381
441
  - `mcp_script` now records each search, describe, and call with its input, outcome, and duration in result details; emitted, returned, and console values retain readable Maps, Sets, cycles, functions, symbols, and BigInts. Its docs now lead with the plain JavaScript agents write and position it as the primary MCP multi-call workflow surface.
382
442
  - Documented how to hide the bundled `mcp-scripting` Pi skill while keeping the adapter extension installed. Thanks @aryzing for issue #267.
383
443
  - Documented Linux revoked-keyring recovery in the OAuth guide and `_meta.ui.visibility` behavior in the MCP UI guide.
384
444
 
385
445
  ### Changed
446
+
386
447
  - `mcp_script` is now registered by default for trusted JavaScript MCP multi-call workflows, while `mcp` remains the right tool for status, discovery, auth, and single calls. Set `settings.scriptMode` to `false` to hide the tool.
387
448
 
388
449
  ### Fixed
450
+
389
451
  - `mcp_script` traces now include missing describe attempts, and shared acyclic values no longer render as circular in script output formatting.
390
452
 
391
453
  ## [2.18.0] - 2026-08-02
392
454
 
393
455
  ### Added
456
+
394
457
  - Added `settings.freezeDirectTools` to keep direct MCP tool registration stable after initial sync while preserving explicit reconnect refreshes. Thanks @ddfourtwo for PR #254.
395
458
  - Added best-effort Linux OAuth credential recovery when Pi inherits a revoked session keyring, allowing explicit re-authentication through a fresh `keyctl` session helper. Thanks @anthod0 for issue #248 and the validation prototype.
396
459
  - Ranked, paginated MCP tool search: best matches come first in a short page of 12 instead of an unranked dump of every match with full schemas, so the model stops guessing and each search costs a fraction of the tokens. Misses on describe/call now return top-5 "Did you mean" suggestions, letting the model self-correct a typo or missing prefix in the same turn instead of burning a round trip.
@@ -403,16 +466,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
403
466
  The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint shape probe, TypeScript-shaped schemas, and codemode design in this release are adapted from [Executor](https://github.com/UsefulSoftwareCo/executor) by Rhys Sullivan (@RhysSullivan). Thanks Rhys.
404
467
 
405
468
  ### Fixed
469
+
406
470
  - Brought MCP Apps UI hosting in line with the current spec: provider HTML now runs in a real sandbox, gets a restrictive default CSP even when the resource omits one, and `_meta.ui.visibility` is honored so app-only tools stay out of the model tool list while model-only tools cannot be called from the UI.
407
471
  - MCP Apps UI sessions are now easier to open from Moshi and remote terminals: the local UI server uses Moshi-discoverable low ports, answers preview discovery probes, serves a loopback-only landing shell, prints Moshi/SSH access hints for remote sessions, and fits the host shell better in narrow in-app browsers. UI-submitted model context is now captured as a bounded handoff, wakes the agent like prompts and intents, and remains available through `mcp({ action: "ui-messages" })` after the UI closes.
408
472
 
409
473
  ## [2.17.0] - 2026-07-31
410
474
 
411
475
  ### Added
476
+
412
477
  - Added `settings.mcpFooterStatus` to compact or hide the persistent MCP footer status. Thanks @jwintz for issue #5.
413
478
  - Added per-server OAuth `authorizationParams` for provider-specific authorization URL parameters such as Google's `access_type=offline`, while rejecting OAuth flow-owned parameter overrides. Thanks @hank-warren for issue #238.
414
479
 
415
480
  ### Fixed
481
+
416
482
  - Added a best-effort absolute-path fallback for loading the `@napi-rs/keyring` native binding when compiled Pi/Bun cannot resolve the package loader. Thanks @sgiath for issue #230.
417
483
  - Bound collapsed MCP tool result rendering by character count as well as line count, preventing huge single-line results from slowing long TUI sessions. Thanks @Whisperfall for issue #249.
418
484
  - Let configured `oauth.scope` override OAuth discovery scopes during authorization flows. Thanks @viggy28 for issue #225 and @adity982 for PR #226.
@@ -420,13 +486,16 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
420
486
  ## [2.16.0] - 2026-07-30
421
487
 
422
488
  ### Added
489
+
423
490
  - Added an optional per-server `toolPrefix` override for direct MCP tools, prompts, and proxy summaries, falling back to the global prefix when unset. Thanks @FurryWolfX for issue #229.
424
491
  - Added an advisory warning when resolved direct tools pass the documented 75-tool threshold, with no cap or enforcement. Thanks @JasonLandbridge for issue #240.
425
492
 
426
493
  ### Changed
494
+
427
495
  - Restored the MCP SDK v1 client for compatibility with deployed MCP servers and OAuth providers. This rollback temporarily removes SDK v2-only protocol negotiation while retaining OAuth issuer binding and callback issuer validation. Thanks @hyknerf for PR #237 and issue #236, @leonfox28 for issue #227, and @JorelLatraille for issue #241.
428
496
 
429
497
  ### Fixed
498
+
430
499
  - Avoided a double-close race when disconnecting MCP connections by letting the SDK client own transport shutdown. Thanks Szymon Wiszczuk (@golota60) for PR #235.
431
500
  - Prevented `/mcp` and `/mcp-auth` from crashing when the OS OAuth credential store is unavailable.
432
501
  - Stored oversized OAuth credential payloads as secure-store manifests plus chunks, so Windows Credential Manager value limits no longer block OAuth completion for large token records. Thanks @LysanderdeJong for issue #223.
@@ -436,25 +505,30 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
436
505
  ## [2.15.0] - 2026-07-25
437
506
 
438
507
  ### Added
508
+
439
509
  - Added native `rmcp-mux` Unix-socket connections for explicitly sharing external MCP server processes across Pi sessions. Thanks j0e1 (@pWoLiAn) for issue #76.
440
510
  - Added connection-time command resolution for HTTP bearer tokens and headers, OAuth client secrets, and stdio environment values, with `!!` escaping and fail-closed execution. Thanks @estrizhok for issue #221.
441
511
 
442
512
  ### Fixed
513
+
443
514
  - Treated null optional server URLs as absent and cleaned unpublished runtimes after initialization failures, preventing `not_initialized` sessions with surviving MCP children. Thanks @autopeasant for the diagnosis in issue #222.
444
515
  - Registered env-selected direct MCP tools before child `agent_start` when their metadata cache must be populated first. Thanks @peedrr for the original report in issue #219.
445
516
 
446
517
  ## [2.14.0] - 2026-07-25
447
518
 
448
519
  ### Added
520
+
449
521
  - Added the global `settings.showStatusIcon` opt-out for plain `MCP: ...` status and connection text while keeping the plug icon enabled by default. Thanks @vaultboy001 for issue #216.
450
522
 
451
523
  ### Fixed
524
+
452
525
  - Deferred implicit OAuth credential-store access until an HTTP server actually challenges for authentication, so unauthenticated remote Streamable HTTP servers work in headless environments. Thanks @vdom-1 for issue #218.
453
526
  - Accepted draft-07 tool output schemas alongside JSON Schema 2020-12 while preserving structured-content validation. Thanks Daniel Marbach (@danielmarbach) for issue #217.
454
527
 
455
528
  ## [2.13.0] - 2026-07-25
456
529
 
457
530
  ### Added
531
+
458
532
  - Added a versioned, sanitized MCP runtime status snapshot on Pi's shared event bus for extensions, without connecting lazy servers or exposing SDK internals. Thanks Ludev (@ludevdot) for issue #110.
459
533
  - Added opt-in host-specific MCP config discovery with source/provenance and conflict reporting. Standard shared and Pi-owned config precedence remains unchanged, and external host files are never written or silently executed. Thanks @lsmir2 for issue #169.
460
534
  - Added opt-in metadata-only JSONL MCP protocol tracing with bounded per-session files and redaction. Thanks @66-firebat for issue #45.
@@ -465,13 +539,16 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
465
539
  - Accepted JSONC-style comments and trailing commas in MCP JSON config files. Thanks @GoCoder7 for issue #124.
466
540
 
467
541
  ### Changed
542
+
468
543
  - Measured and spilled oversized raw MCP result details as compact JSON instead of pretty-printed JSON, reducing hot-path allocation and event-loop work. Thanks José Maia (@glitch-ux) for issue #214 and PR #215.
469
544
  - Renamed generated MCP resource tools from `get_<resource>` to `read_<resource>` to match the MCP `resources/read` operation. Thanks @vdom-1 for issue #185.
470
545
 
471
546
  ### Security
547
+
472
548
  - Moved persistent OAuth credentials from plaintext `tokens.json` files into the operating system credential store, with one-way legacy import and fail-closed behavior when secure storage is unavailable. Thanks Sam Atkins (@atkinsam) for issue #180.
473
549
 
474
550
  ### Fixed
551
+
475
552
  - Skipped `resources/list` for MCP servers that do not advertise the `resources` capability, matching the existing prompt discovery gate and silencing the SDK v2 debug line that tools-only servers printed on every connect. Thanks Aleksandr Davydenko (@kotuke) for PR #213.
476
553
  - Made the MCP footer show enabled configured servers as the primary count, with active connections as secondary state, so lazy servers no longer look broken before first use or after idle shutdown. Thanks blumlaut (@Blumlaut) for issue #93.
477
554
  - Show the actual proxied MCP server/tool name in `mcp` tool results. Thanks Finn (@finnvyrn) and @dillontkh for issue #68.
@@ -480,11 +557,13 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
480
557
  ## [2.12.1] - 2026-07-24
481
558
 
482
559
  ### Fixed
560
+
483
561
  - Restored the SDK v1 dependency required by the MCP Apps bridge during Pi managed installs, where peer dependencies are intentionally not auto-installed. Thanks Nikolai Ugelvik (@NikolaiUgelvik), @warmwaffles, and @max-miller1204 for issue #212.
484
562
 
485
563
  ## [2.12.0] - 2026-07-24
486
564
 
487
565
  ### Added
566
+
488
567
  - Added MCP prompts support as Pi slash commands under the `mcp__<server>__<prompt>` namespace, with capability-gated discovery, cache-backed startup registration, argument validation, lazy dispatch, and `/mcp prompts` listing. Thanks to Egor Egorov (@ee92) for PR #203.
489
568
  - Hot-loaded refreshed direct MCP tools after metadata reconnects, lazy connects, direct-tool panel changes, and MCP list-change notifications. Thanks Devin Bost (@devinbost) for PR #72.
490
569
  - Migrated the MCP client and interactive visualizer to the exact-pinned MCP SDK v2 beta.5 packages, with automatic protocol negotiation and client conformance coverage. Thanks Matt Carey (@mattzcarey) for PR #210.
@@ -501,11 +580,13 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
501
580
  - Added `createMcpAdapter({ config, configPath })` for isolated SDK configuration and file-path overrides. Thanks @Cansiny0320 for PR #86.
502
581
 
503
582
  ### Changed
583
+
504
584
  - Removed stale hot-loaded direct tools from Pi's registry when `pi.unregisterTool()` is available, while preserving active-tool deactivation fallback for older Pi hosts.
505
585
  - Deferred loading the regex safety checker until regex search is used, improving startup time. Thanks @kaushikgopal for PR #175.
506
586
  - Declared Pi host packages as optional peer dependencies with exact development pins, reducing extension install footprint and avoiding host version conflicts. Thanks @t0dorakis for PR #200.
507
587
 
508
588
  ### Fixed
589
+
509
590
  - Started MCP initialization at extension load when any server is configured with `lifecycle: "eager"` or `"keep-alive"`, so hosts that drive Pi programmatically without `session_start` still connect startup servers. Thanks Brian Gebel (@ductiletoaster) for PR #170.
510
591
  - Enforced normalized standard `_meta.ui.csp` and OpenAI-compatible `_meta["openai/widgetCSP"]` metadata with response headers while preserving provider HTML. Thanks @IdoHadar for PR #195.
511
592
  - Avoided MCP renderer crashes without a TUI theme and preserved status-bar updates with plain fallback text. Thanks @fankangsong for PR #183.
@@ -529,12 +610,15 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
529
610
  ## [2.11.0] - 2026-07-03
530
611
 
531
612
  ### Changed
613
+
532
614
  - Restored the tracked npm lockfile for reproducible installs and downstream packaging. Thanks @fmoda3 for issue #71.
533
615
 
534
616
  ### Added
617
+
535
618
  - Added default-on MCP output guarding with temp-file spillover for oversized text results, compact summaries for large proxy result details, and `settings.outputGuard` tuning. Thanks @tmustier for PR #160.
536
619
 
537
620
  ### Fixed
621
+
538
622
  - Defaulted stdio MCP servers without an explicit `cwd` to the Pi session cwd so relative server output lands in the workspace. Thanks @TimoFreiberg for PR #152.
539
623
  - Kept multiline/control MCP panel metadata from corrupting rows and made Keep & Close save dirty changes. Thanks @gpmarques for issue/PR #14, @Vahor for issue #115, and @markokocic for issue #134/PR #135.
540
624
  - Preserved `--` separators when resolving `npx` wrapper commands so subcommand flags are not consumed by tools like `dotenv-cli`. Thanks @sherif-fanous for issue #15.
@@ -551,9 +635,11 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
551
635
  ## [2.10.0] - 2026-06-13
552
636
 
553
637
  ### Added
638
+
554
639
  - Added manual remote/headless OAuth proxy actions for copying authorization URLs and completing pasted redirect URLs or codes. Thanks @Gabrielgvl for PR #120.
555
640
 
556
641
  ### Fixed
642
+
557
643
  - Honored user `tui.select.*` keybindings in MCP management, setup, and auth panels. Thanks @owenniles for PR #138.
558
644
  - Included configured OAuth scopes in authorization-code flows while preserving token endpoint authentication method selection. Thanks @carlosdagos for PR #140.
559
645
  - Fixed MCP elicitation on stock Pi, including form dialogs with validation and review, consent-based URL handling, URL-required errors, completion notifications, and TUI-only browser navigation. Thanks @dmmulroy for PR #139.
@@ -562,48 +648,59 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
562
648
  ## [2.9.0] - 2026-06-04
563
649
 
564
650
  ### Added
651
+
565
652
  - Added MCP elicitation support with Pi form prompts and browser-opening URL requests.
566
653
 
567
654
  ### Fixed
655
+
568
656
  - Rejected non-http/https MCP URL elicitations before prompting or opening a browser.
569
657
  - Preserved empty string form values for MCP string elicitations unless schema constraints reject them.
570
658
 
571
659
  ## [2.8.0] - 2026-05-25
572
660
 
573
661
  ### Added
662
+
574
663
  - Added per-server OAuth `redirectUri`, `clientName`, and `clientUri` overrides for pre-registered callbacks and dynamic client metadata.
575
664
 
576
665
  ### Fixed
666
+
577
667
  - Avoided OAuth callback port exhaustion by starting the callback server lazily and using OS-assigned ports for dynamic OAuth flows.
578
668
  - Re-register dynamic OAuth clients before browser auth when cached redirect URI metadata is missing or no longer matches the active callback URI.
579
669
 
580
670
  ## [2.7.0] - 2026-05-22
581
671
 
582
672
  ### Added
673
+
583
674
  - Added TUI call rendering for MCP proxy and direct tool inputs. Thanks @dmmulroy for PR #102.
584
675
 
585
676
  ### Fixed
677
+
586
678
  - Hardened OAuth credential storage paths against server-name path traversal without rejecting valid configured server names.
587
679
  - Rejected unsafe regex-mode MCP search patterns before executing them.
588
680
 
589
681
  ## [2.6.1] - 2026-05-13
590
682
 
591
683
  ### Added
684
+
592
685
  - Added `/mcp logout <server>` to clear stored OAuth credentials and disconnect the server. Thanks @mattzcarey for PR #96.
593
686
 
594
687
  ### Fixed
688
+
595
689
  - Cancel pending OAuth callbacks when logging out of an MCP server.
596
690
 
597
691
  ## [2.6.0] - 2026-05-10
598
692
 
599
693
  ### Added
694
+
600
695
  - Added a no-argument `/mcp-auth` OAuth picker and in-panel auth shortcut for OAuth-capable MCP servers.
601
696
  - Added compact collapsed rendering for MCP proxy and direct-tool result rows while keeping full tool results available when expanded.
602
697
 
603
698
  ### Changed
699
+
604
700
  - Migrated Pi runtime dependencies and imports from deprecated `@mariozechner/*` packages to `@earendil-works/*` packages.
605
701
 
606
702
  ### Fixed
703
+
607
704
  - Re-register dynamic OAuth clients during fresh auth when cached DCR client info exists without tokens, avoiding dead authorization URLs after server-side client invalidation.
608
705
  - Kept OAuth tokens, dynamic client info, PKCE verifiers, and OAuth state bound to the server URL so stale credentials cannot be reused after a server URL changes.
609
706
  - Kept the `/mcp-auth` OAuth picker search focused on OAuth server rows and prevented hidden panel shortcuts from unexpectedly launching auth.
@@ -612,35 +709,42 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
612
709
  ## [2.5.4] - 2026-05-04
613
710
 
614
711
  ### Changed
712
+
615
713
  - Ignored npm lockfiles and removed checked-in `package-lock.json` files.
616
714
 
617
715
  ### Fixed
716
+
618
717
  - Resolved `${VAR}` and `$env:VAR` placeholders in HTTP bearer tokens.
619
718
  - Honored MCP sampling `modelPreferences.hints` before falling back to the current/default model.
620
719
 
621
720
  ## [2.5.3] - 2026-05-01
622
721
 
623
722
  ### Added
723
+
624
724
  - Added environment variable and `~` expansion for stdio server `cwd` values.
625
725
 
626
726
  ## [2.5.2] - 2026-04-29
627
727
 
628
728
  ### Fixed
729
+
629
730
  - Respected `PI_CODING_AGENT_DIR` for Pi-owned MCP config and state files, including metadata cache, npx cache, onboarding state, OAuth credentials, and `pi-mcp-adapter init` writes.
630
731
 
631
732
  ## [2.5.1] - 2026-04-24
632
733
 
633
734
  ### Fixed
735
+
634
736
  - Changed OAuth browser callbacks to `http://localhost:<port>/callback` for pre-registered clients such as Slack MCP. Thanks @shenal for PR #53.
635
737
 
636
738
  ## [2.5.0] - 2026-04-24
637
739
 
638
740
  ### Added
741
+
639
742
  - Added MCP `sampling/createMessage` support with conservative human approval by default and opt-in `settings.samplingAutoApprove` for non-interactive flows.
640
743
  - Added configured Vitest coverage for OAuth provider authorization fallback behavior.
641
744
  - Added `test:oauth-provider` for running the root OAuth provider node test with the required TypeScript loader.
642
745
 
643
746
  ### Fixed
747
+
644
748
  - Applied `settings.authRequiredMessage` to proxy and direct-tool auth-required paths, including non-UI `autoAuth` failures.
645
749
  - Fixed `/mcp-auth <server>` reporting success for expired stored OAuth tokens without forcing the SDK refresh/re-auth flow.
646
750
  - Kept `mcp` search focused on MCP tools and added a direct-call hint when native Pi tools are accidentally routed through the proxy.
@@ -648,14 +752,17 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
648
752
  ## [2.4.2] - 2026-04-22
649
753
 
650
754
  ### Fixed
755
+
651
756
  - Migrated extension tool schemas from `@sinclair/typebox` to `typebox` 1.x so packaged installs follow Pi's current extension runtime contract.
652
757
 
653
758
  ### Changed
759
+
654
760
  - Replaced the legacy `@sinclair/typebox` runtime dependency with `typebox`.
655
761
 
656
762
  ## [2.4.1] - 2026-04-22
657
763
 
658
764
  ### Added
765
+
659
766
  - Added standard-MCP-first config discovery: `~/.config/mcp/mcp.json` and project `.mcp.json` now load automatically, with Pi-owned files preserved as override layers.
660
767
  - Added `pi-mcp-adapter init` as a native post-install helper that detects host-specific MCP configs and scaffolds Pi compatibility imports without using the old raw GitHub downloader flow.
661
768
  - Added first-run onboarding inside the extension: `/mcp` now shows shared-config hints or actionable empty states, and `/mcp setup` opens a guided setup flow for compatibility imports, minimal `.mcp.json` scaffolding, detected config paths, RepoPrompt quick-add, and exact before/after write previews.
@@ -663,6 +770,7 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
663
770
  - Added a dedicated Pi-owned onboarding state file so shared-config hints behave as one-time guidance instead of repeating every session.
664
771
 
665
772
  ### Changed
773
+
666
774
  - Updated config precedence to prefer shared MCP files first, then Pi overrides, with `.pi/mcp.json` acting as the final Pi-specific project override.
667
775
  - Updated Claude Code compatibility probing to prefer modern Claude MCP config locations before legacy paths.
668
776
  - Updated project scaffolding so generated `.mcp.json` files are safe minimal shells instead of fake placeholder servers that fail on first reload.
@@ -671,17 +779,20 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
671
779
  ## [2.4.0] - 2026-04-13
672
780
 
673
781
  ### Added
782
+
674
783
  - `settings.disableProxyTool` to hide the `mcp` proxy tool once configured direct tools are fully available from cache. Thanks @tanavamsikrishna for PR #41.
675
784
  - Per-server `excludeTools` to hide specific MCP tools/resources by original or prefixed name across direct tools, proxy discovery, and the `/mcp` panel. Thanks @ahmadaccino for issue #36.
676
785
  - `settings.autoAuth` to optionally trigger OAuth automatically from proxy/direct tool usage, then rerun the original blocked connect/tool operation once after authentication succeeds. Thanks @unimonkiez for issue #34.
677
786
 
678
787
  ### Fixed
788
+
679
789
  - Regenerated `package-lock.json` so the root lockfile metadata matches `package.json` again, including the declared `open`, `@types/bun`, `@types/open`, and `tsx` entries.
680
790
  - Kept the `mcp` proxy tool available as a first-session fallback when configured direct tools are still missing cache metadata, avoiding no-tool startup gaps.
681
791
 
682
792
  ## [2.3.5] - 2026-04-13
683
793
 
684
794
  ### Fixed
795
+
685
796
  - Session lifecycle now always tears down OAuth callback state on restart and shutdown, preventing callback-server leaks across session transitions.
686
797
  - OAuth callback server now calls `unref()` after successful bind so it no longer keeps sub-agent processes alive by itself.
687
798
  - Strict OAuth port mode now rebinds to the configured callback port when safe, while refusing to switch ports when authorizations are still pending.
@@ -691,20 +802,24 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
691
802
  ## [2.3.4] - 2026-04-12
692
803
 
693
804
  ### Fixed
805
+
694
806
  - OAuth callback handling now allows dynamic-registration flows to fall back to a free local port when the preferred callback port is busy, while keeping pre-registered clients on their exact configured redirect port.
695
807
  - Documented the new callback-port behavior and added focused auth-flow regression coverage.
696
808
 
697
809
  ## [2.3.3] - 2026-04-12
698
810
 
699
811
  ### Fixed
812
+
700
813
  - Remove the blank footer status line when no MCP servers are configured by clearing the MCP status entry instead of setting it to an empty string. Thanks @HazAT for PR #27.
701
814
 
702
815
  ## [2.3.2] - 2026-04-11
703
816
 
704
817
  ### Added
818
+
705
819
  - Optional `oauth.grantType: "client_credentials"` for non-interactive machine-to-machine OAuth on HTTP MCP servers.
706
820
 
707
821
  ### Fixed
822
+
708
823
  - `/mcp-auth <server>` now handles `client_credentials` without browser/callback flow.
709
824
  - MCP panel status no longer marks `client_credentials` servers as auth-blocked solely because no stored user tokens exist yet.
710
825
  - OAuth auth flow now closes temporary transports consistently on success, refresh, and auth removal paths.
@@ -713,14 +828,17 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
713
828
  ## [2.3.1] - 2026-04-11
714
829
 
715
830
  ### Fixed
831
+
716
832
  - Removed `/mcp-auth-callback`. OAuth auth now hard-cuts to `/mcp-auth <server>` only.
717
833
 
718
834
  ## [2.3.0] - 2026-04-11
719
835
 
720
836
  ### Added
837
+
721
838
  - OAuth callback server initialization on session start and a deprecated `/mcp-auth-callback` command that now points users to `/mcp-auth <server>`.
722
839
 
723
840
  ### Fixed
841
+
724
842
  - OAuth `needs-auth` handling across `/mcp` status/panel, `mcp({ connect })`, `mcp({ tool })`, reconnect flow, lazy/direct tool execution, and startup bootstrap.
725
843
  - OAuth callback cleanup now cancels by stored OAuth state and closes pending transports on failure/cancel paths.
726
844
  - Callback server now fails fast when the OAuth callback port is occupied by another process.
@@ -729,6 +847,7 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
729
847
  ## [2.2.2] - 2026-04-03
730
848
 
731
849
  ### Fixed
850
+
732
851
  - Session lifecycle teardown now handles repeated `session_start` transitions safely and prevents stale async init results from replacing newer state.
733
852
  - Shutdown now still runs `gracefulShutdown()` even if metadata cache flushing throws, avoiding leaked MCP processes.
734
853
  - Proxy/direct tool init error paths now preserve and surface underlying error messages instead of returning generic failures.
@@ -738,11 +857,13 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
738
857
  ## [2.2.1] - 2026-03-23
739
858
 
740
859
  ### Fixed
860
+
741
861
  - Added `promptSnippet` to MCP proxy tool and direct MCP tools so they appear in the system prompt's Available tools section (required since pi 0.59.0)
742
862
 
743
863
  ## [2.2.0] - 2026-03-16
744
864
 
745
865
  ### Added
866
+
746
867
  - **MCP UI Integration** - Support for the [MCP UI](https://github.com/MCP-UI-Org/mcp-ui) standard. Tools with `_meta.ui.resourceUri` open interactive UIs:
747
868
  - Bidirectional AppBridge communication (tool calls, messages, context updates)
748
869
  - Works with both stdio and HTTP MCP servers
@@ -764,10 +885,12 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
764
885
  - **Interactive visualizer example** (`examples/interactive-visualizer`) - Minimal MCP server demonstrating charts (bar/line/pie/doughnut via Chart.js), bidirectional messaging, and streaming.
765
886
 
766
887
  ### Fixed
888
+
767
889
  - Host-iframe timing: bridge now connects before loading iframe, fixing `ui/initialize` timeout on first load
768
890
  - All internal `log.info` calls demoted to `log.debug` to eliminate stdout noise during normal use
769
891
 
770
892
  ### Technical Notes
893
+
771
894
  - Uses local minified AppBridge bundle (408KB) to avoid CDN Zod bundling issues
772
895
  - Serves app HTML from `/ui-app` endpoint instead of blob URLs to avoid iframe issues
773
896
  - SSE for real-time tool result streaming to browser
@@ -775,11 +898,13 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
775
898
  ## [2.1.2] - 2026-02-03
776
899
 
777
900
  ### Changed
901
+
778
902
  - Added demo video and `pi.video` field to package.json for pi package browser.
779
903
 
780
904
  ## [2.1.0] - 2026-02-02
781
905
 
782
906
  ### Added
907
+
783
908
  - **Direct tool registration** - Promote specific MCP tools to first-class Pi tools via `directTools` config (per-server or global). Direct tools appear in the agent's tool list alongside builtins, so the LLM uses them without needing to search through the proxy first. Registers from cached metadata at startup — no server connections needed.
784
909
  - **`/mcp` interactive panel** - New TUI overlay replacing the text-based status dump. Shows server connection status, tool lists with direct/proxy toggles, token cost estimates, inline reconnect, and auth notices. Changes written to config on save.
785
910
  - **Auto-enriched proxy description** - The `mcp` proxy tool description now includes server names and tool counts from the metadata cache, so the LLM knows what's available without a search call (~30 extra tokens).
@@ -792,16 +917,19 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
792
917
  ## [2.0.1] - 2026-02-01
793
918
 
794
919
  ### Fixed
920
+
795
921
  - Adapt execute signature to pi v0.51.0: add signal, onUpdate, ctx parameters
796
922
 
797
923
  ## [2.0.0] - 2026-01-29
798
924
 
799
925
  ### Changed
926
+
800
927
  - **BREAKING: Lazy startup by default** - All servers now default to `lifecycle: "lazy"` and only connect when a tool call needs them. Previously all servers connected eagerly on session start. Set `lifecycle: "keep-alive"` or `lifecycle: "eager"` to restore the old behavior per-server.
801
928
  - **Idle timeout** - Connected servers are automatically disconnected after 10 minutes of inactivity (configurable via `settings.idleTimeout` or per-server `idleTimeout`). Cached metadata keeps search/list working after disconnect. Set `idleTimeout: 0` to disable.
802
929
  - `/mcp reconnect` accepts an optional server name to connect or reconnect a single server
803
930
 
804
931
  ### Added
932
+
805
933
  - **Metadata cache** - Tool and resource metadata persisted to `~/.pi/agent/mcp-cache.json`. Enables search/list/describe without live connections. Per-server config hashing with 7-day staleness. Multi-session safe via read-merge-write with per-process tmp files.
806
934
  - **npx binary resolution** - Resolves npx package binaries to direct paths, eliminating the ~143 MB npm parent process per server. Persistent cache at `~/.pi/agent/mcp-npx-cache.json` with 24h TTL.
807
935
  - **`mcp({ connect: "server-name" })` mode** - Explicitly trigger connection and metadata refresh for a named server
@@ -813,6 +941,7 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
813
941
  - First-run bootstrap: connects all servers on first session to populate the cache
814
942
 
815
943
  ### Fixed
944
+
816
945
  - Connection close race condition: concurrent close + connect no longer orphans server processes
817
946
  - **Fuzzy tool name matching** - Hyphens and underscores are treated as equivalent during tool lookup. MCP tools like `resolve-library-id` are now found when called as `resolve_library_id`, which LLMs naturally guess since the prefix separator is `_`.
818
947
  - **Better "tool not found" errors** - When a server is identified (via prefix match or override) but the tool isn't found, the error now lists that server's available tools so the LLM can self-correct immediately instead of needing a separate list call
@@ -820,6 +949,7 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
820
949
  ## [1.6.0] - 2026-01-29
821
950
 
822
951
  ### Added
952
+
823
953
  - **Unified pi tool search** - `mcp({ search: "..." })` now searches both MCP tools and Pi tools (from installed extensions)
824
954
  - Pi tools appear first in results with `[pi tool]` prefix
825
955
  - Details object includes `server: "pi"` for pi tools
@@ -828,24 +958,28 @@ The ranked search scoring, did-you-mean suggestions, approval patterns, endpoint
828
958
  ## [1.5.1] - 2026-01-26
829
959
 
830
960
  ### Changed
961
+
831
962
  - Added `pi-package` keyword for npm discoverability (pi v0.50.0 package system)
832
963
 
833
964
  ## [1.5.0] - 2026-01-22
834
965
 
835
966
  ### Changed
967
+
836
968
  - **BREAKING: `args` parameter is now a JSON string** - The `args` parameter which previously accepted an object now accepts a JSON string. This change was required for compatibility with Claude's Vertex AI API (`google-antigravity` provider) which rejects `patternProperties` in JSON schemas (generated by `Type.Record()`).
837
969
 
838
970
  ### Added
971
+
839
972
  - **Type validation for args** - Parsed args are now validated to ensure they're a JSON object (not null, array, or primitive). Clear error messages for invalid input.
840
973
  - **`isError: true` on error responses** - JSON parse errors and type validation errors now properly set `isError: true` to indicate failure to the LLM.
841
974
 
842
975
  ### Migration
976
+
843
977
  ```typescript
844
978
  // Before (1.4.x)
845
- mcp({ tool: "my_tool", args: { key: "value" } })
979
+ mcp({ tool: "my_tool", args: { key: "value" } });
846
980
 
847
981
  // After (1.5.0)
848
- mcp({ tool: "my_tool", args: '{"key": "value"}' })
982
+ mcp({ tool: "my_tool", args: '{"key": "value"}' });
849
983
  ```
850
984
 
851
985
  ## [1.4.1] - 2026-01-19