Pi MCP Adapter 2.34.0 starts faster while keeping cached tools, prompts, and commands ready to use. It connects to more OAuth servers and adds a secure credential option for Windows OpenSSH and other headless sessions. Shared configuration, Agent Plugin servers, MCP Apps, private HTTPS connections, and frequently changing tool catalogs are more reliable. Existing configurations continue to work, and the new credential and ancestor-discovery options are opt-in.
Highlights
- Start Pi faster while keeping cached MCP tools, prompts, and commands immediately available.
- Connect to more OAuth servers with Client ID Metadata Documents.
- Store OAuth credentials securely in encrypted files when Windows OpenSSH or a headless session cannot use the OS credential store.
- Load shared configuration and Agent Plugin MCP servers more reliably.
- Use MCP Apps, private HTTPS servers, and frequently changing tool catalogs with fewer connection problems.
Need to know
| Who | What changed |
|---|---|
| Users running concurrent Pi processes against the same OAuth credentials | Cross-process OAuth transaction serialization is temporarily unavailable while the adapter uses published MCP SDK releases. |
| Windows OpenSSH or headless users choosing encrypted-file storage | Set settings.oauthCredentialStore to "encrypted-file" and provide PI_MCP_ADAPTER_OAUTH_FILE_KEY as a base64-encoded 32-byte key. The OS credential store remains the default.
|
Full changelog
Highlights
- Start Pi faster while keeping cached MCP tools, prompts, and commands immediately available.
- Connect to more OAuth servers with Client ID Metadata Documents.
- Store OAuth credentials securely in encrypted files when Windows OpenSSH or a headless session cannot use the OS credential store.
- Load shared configuration and Agent Plugin MCP servers more reliably.
- Use MCP Apps, private HTTPS servers, and frequently changing tool catalogs with fewer connection problems.
Added
- Windows OpenSSH/network logons can explicitly select externally keyed AES-256-GCM OAuth credential files with
settings.oauthCredentialStore: "encrypted-file"; error 1312 now points to this option, while the OS store remains the default with no automatic fallback. Thanks to @pierreh for issue #574. - OAuth servers can explicitly opt into operator-hosted Client ID Metadata Documents (SEP-991) with
oauth.clientMetadataUrl; URL-only/default configurations continue using Dynamic Client Registration. Existing DCR refresh credentials get their normal refresh attempt before migration to CIMD after invalidation. Thanks to @dsluo for PR #571. - User-global or explicitly selected config can opt in to bounded ancestor
.mcp.jsonand<configDir>/mcp.jsondiscovery withsettings.ancestorConfigRoots. Discovery is off by default; project files cannot enable or widen it, and the deepest matching existing directory under$HOMEbounds farthest-first loading. Thanks to @johnhenaot for PR #555.
Changed
- Runtime-heavy MCP modules now load only when first needed, while cached tools, prompts, and commands remain immediately available. Thanks to @thefakepaulgg for PR #576.
- OAuth dependencies now use published MCP SDK releases again, restoring normal npm installs and removing the standalone native-addon dependency. Cross-process OAuth transaction serialization remains unavailable until the official SDK exposes the required support.
Fixed
- Built-in Agent Plugin MCP definitions now preserve literal values through connection and cache handling, validate manifest field types, resolve contained paths through symlinks, and expand plugin placeholders once. Thanks to @cheetahbyte for #570.
- Empty, whitespace-only, or comments-only optional MCP config layers are now treated as absent, allowing other precedence layers to load without a warning. Thanks to @RobertoNegro for PR #567.
- macOS Keychain and Linux Secret Service now keep ordinary OAuth records in one credential item and compact existing chunks on ordinary reads; Windows Credential Manager retains chunking. Thanks to @jploskonka for PR #560.
- Configured direct tools now hot-load from fresh live catalogs even when a server advertises
ttlMs: 0, while persisted zero-TTL metadata remains non-cacheable. Thanks to @dsluo for PR #562. (#561) - Switching a server between transports (HTTP to stdio command or socket) now drops an inherited
bearerTokenStoreflag alongside the other URL-bound credential fields. Thanks to @zhulinchng for PR #552. - Per-origin
caFiletrust now routes same-origin requests through the bundled undici fetch so the custom CA dispatcher matches the fetch implementation on newer Node releases (Node 26 ships undici v8 while the dependency pins undici v6); previously everycaFileconnection failed withUND_ERR_INVALID_ARG. Thanks to @zhulinchng for PR #550. - MCP Apps now load provider-declared asset, connection, and frame domains through a session-bound sandbox resource navigation with response-level CSP enforcement. Thanks to @tekumara for #548.