pi-mcp-adapter 2.35.0 makes it easier to find the right MCP tool from a natural-language request. Jev-powered semantic search is opt-in and can also evaluate intermediate results in MCP scripts, with explicit controls over which server data may be shared. Long-running MCP Tasks now work end to end, and day-to-day configuration, approvals, authentication, and tool discovery are more reliable. In our local benchmark, Jev chose the expected result first in 10 of 11 answerable cases and second once, compared with five first-place matches from regular text search.
Highlights
- Describe what you want to do and let Jev find the MCP tools that best match your request.
- Run long-lived MCP Tasks with progress polling, interactive input, and cancellation.
- Edit shared MCP configuration without leaving Pi and approve a server for the rest of the session.
- Reconnect to OAuth and bearer-token servers more reliably, including after expired credentials or authorization failures.
- Find and use tools more accurately across CJK queries, namespaced catalogs, structured results, and ambiguous names.
Full changelog
Highlights
- Describe what you want to do and let Jev find the MCP tools that best match your request.
- Run long-lived MCP Tasks with progress polling, interactive input, and cancellation.
- Edit shared MCP configuration without leaving Pi and approve a server for the rest of the session.
- Reconnect to OAuth and bearer-token servers more reliably, including after expired credentials or authorization failures.
- Find and use tools more accurately across CJK queries, namespaced catalogs, structured results, and ambiguous names.
Added
- Opt-in TypeSafe Jev support can understand a request, rank MCP tools by how well they match, and evaluate intermediate
mcpScriptresults. Credentials stay in the OS keyring or environment, sharing MCP data requires an explicit server allowlist, and requests have configurable limits. In a live test across 95 local tools and resources, Jev chose the expected result first in 10 of 11 answerable cases and second once, compared with 5 first-place matches from regular text search. Part of #611. /mcp edit [project|global]opens the shared MCP config in an editor (Ctrl+G opens$EDITOR), refuses text that is not a JSONC object, and reloads after a save. Closes #593. Thanks to @turisanapo for PR #594.- Support for MCP Tasks. Long-running tool calls are polled to completion, interactive questions use the normal Pi interface, cancellation is forwarded to the server, and failures are reported like ordinary tool-call errors. Task support activates only when the server advertises it and can be disabled per server with
tasks: false. Thanks to @rgarcia for PR #620. - Users can grant runtime-only approval for all tools and arguments on a server for the current session. Thanks to @derdossi for PR #618.
Changed
- Development and peer dependency coverage now includes Pi 0.86.
- Self-namespaced MCP tools no longer receive duplicate prefixes, and proxy calls now resolve unique canonical-name candidates while failing closed on collisions and ambiguity. Fixes #609. Thanks to @elkaix for the report.
- Namespace proxy tools can now be disabled with
settings.namespaceProxyTools: false. Thanks to @k03mad for PR #592. - The bundled
mcp-scriptingskill is now discovered alongside the default-onmcpScripttool and hidden with it whensettings.scriptModeisfalse. Thanks to @zhangyoufu for PR #583.
Fixed
- HTTP streams authenticated with
requestHeadersCommandremain cancellable after garbage collection. Thanks to @zaini for PR #619. - Bearer-token and TypeSafe key storage now retry revoked Linux session-keyring operations through the packaged
keyctlhelper, without special launch commands or plaintext fallback. SetPI_MCP_ADAPTER_DISABLE_KEYRING_RECOVERY=1to disable recovery. Thanks to @magoz for PR #621. - OAuth-enabled MCP servers now reconnect reliably after explicit OAuth, stored-token, and 401 authentication paths. Thanks to @jaresty for PR #624.
- Direct tools now recover stringified array and object arguments declared through type arrays and schema unions without coercing values that are valid strings. Thanks to @sashkachan for issue #606.
- Default tool search now supports CJK text, including unseparated mixed-script queries and configured search keywords, while retaining bounded lexical matching. Thanks to @wjunhere for issue #607.
- Command-backed bearer tokens now refresh through a TTL cache, and keep-alive bearer connections reconnect after a 401. Thanks to @kesor for PR #608.
- Tool results now preserve
structuredContentalongside ordinary content in direct and proxy calls. Thanks to @civcode for issue #588. - Restored the MCP footer status during cache-backed deferred startup without eagerly loading or connecting the runtime. Thanks to @pkulyn for issue #586.
- Oversized object
structuredContentsummaries now identify themselves as omitted and account for preserved and dropped fields, so extension consumers do not mistake a partial preview for an empty payload. Thanks to @Batchputz for issue #585. - Server-scoped tool describe and call requests now fail closed when a name exactly identifies different displayed and upstream tools. Thanks to @sheurich for PR #587.
- Config writes now preserve resolvable existing symlinks by atomically replacing their targets. Thanks to @peedrr for #597.
- Server-returned MCP tool errors no longer include misleading input-schema guidance, while invalid proxy arguments are rejected before dispatch. Thanks to @jaresty for PR #596.