All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- mcpc can now be installed with Homebrew on macOS and Linux:
brew install apify/tap/mcpc. The formula brings its own Node.js, so no separate runtime setup is needed. - New
mcpc login <server> --grant id-jagfor MCP's Enterprise-Managed Authorization extension: sign in once with your corporate SSO (--idp <issuer>), and mcpc obtains MCP server tokens via identity assertion grants (ID-JAG) without per-server consent screens. - Support for MCP protocol version 2026-07-28: mcpc now probes each server with
server/discoverand talks the new stateless protocol when supported, falling back to older protocol versions (2025-11-25 down to 2024-10-07) automatically. Resource subscriptions use the newsubscriptions/listenstream (with automatic re-listen on drops), andpingtransparently usesserver/discoveron 2026-07-28 servers. mcpc now uses the official TypeScript SDK v2 (@modelcontextprotocol/client). mcpc --jsonnow reports each session's servercapabilities, plushasInstructionsto tell whether the server provided instructions (read them withmcpc --json @<session>).- New
--protocol-versionoption formcpc connectto pin the MCP protocol version (e.g.--protocol-version 2025-11-25) instead of auto-negotiating; the connection fails if the server does not support the pinned version. Also supported as aprotocolVersionfield in mcp.json config entries. - New
mcpc @<session> server-discovercommand that sends aserver/discoverrequest and reports what the server advertises right now: every protocol version it supports, its capabilities, instructions, and_meta. Requires a 2026-07-28 connection, wherepingis also translated intoserver/discover— the ping output now says so. - Server details from 2026-07-28 servers now include everything their
server/discoverresult carries:supportedVersions(every protocol version the server offers) and the result's_meta. Reported byconnect,restartandmcpc @sessionin--json, and kept insessions.json.
- Session commands now also accept MCP's JSON-RPC method names (e.g.
tools/list,logging/setLevel) as aliases for the hyphenated CLI form (tools-list,logging-set-level). - On servers using MCP 2026-07-28,
logging-set-levelreturns an error (the protocol removedlogging/setLevel) and the task commands (tasks-list,tasks-get,tasks-result,tasks-cancel,tools-call --task/--detach) report that the new tasks extension is not supported yet — they keep working unchanged on 2025-11-25 servers. mcpc @sessionnow reports the connection on one line —MCP: version 2025-11-25 / Streamable HTTP (stateless)— naming the protocol (the label was justProtocol:) and the transport carrying it.--jsongained the matching_mcpc.transportfield next to_mcpc.stateless.mcpc @sessionno longer suggests commands that cannot work on a 2026-07-28 connection: theloggingandtaskscapabilities are flagged as era-limited, andlogging-set-level/tasks-*are left out of the suggested commands.tools-call --task/--detachagainst a server that does not support task-augmented tool calls now fails instead of printing a warning and running the tool synchronously. The flags change the shape of the output, so the fallback left--detachcallers parsing ataskIdthat was never there, with exit code 0.- Updated the MCP TypeScript SDK v2 to the stable
2.0.0release, which fixes interoperability with 2026-07-28 servers built on the latest SDK (they require the newMcp-Methodrequest header that older clients did not send, and moveserverInfointo response metadata).
mcpc login --grant client-credentialsnow finds the authorization server via protected resource metadata (RFC 9728), so it works against servers whose authorization server lives on a different origin. Previously discovery only probed the MCP server's own origin and failed with "Could not find an OAuth token endpoint", forcing you to pass--token-endpointby hand.- Sessions resumed after a bridge restart (e.g. crash recovery) no longer lose their negotiated protocol version: session details showed
Protocol: unknownand, worse, requests were sent without the requiredMCP-Protocol-Versionheader. The stored version is now restored on resumption, and the server name is shown again in session details. - Resumed sessions also keep their server capabilities and instructions, which previously vanished after a bridge restart:
mcpc @sessionshowed no capabilities,grepno longer found the server instructions, andresources-subscribewrongly refused with "server does not support resource subscriptions". mcpc loginno longer prints the SDK warning about a missingdiscoveryState()implementation. The OAuth provider now records the discovered authorization server between the redirect and the code exchange, enabling the SEP-2352 mix-up attack check (the code is only redeemed at the server that minted it).- Bridge logs no longer report the spurious
authProvider.tokens() is NOT a function - this is a bug!error when connecting with OAuth — a stale debug check left over from the SDK v1 era; authentication itself was unaffected. tools-listnow always refetches from the server: against a 2026-07-28 server that sends caching hints, the SDK's response cache could serve a stale tools list. The cached list also honors the server'sttlMshint now, instead of always using mcpc's own freshness window.- Bridge logs no longer show a scary
Transport error: ... Bad Request: No valid session ID providedstack trace when connecting to a server without 2026-07-28 support. That HTTP 400 is the server declining theserver/discoverversion probe — the expected signal to fall back to the older protocol — and is now logged as a single debug line.
- The
logging-set-levelcommand is deprecated and will be removed in a future release: MCP 2026-07-28 removed the underlyinglogging/setLevelrequest. It keeps working on 2025-11-25 servers during the deprecation window.
- Releases now verify that every dependency in the lockfile has been published long enough to clear the supply-chain quarantine, and fail if anything is too young. pnpm applied that policy only when resolving new versions, so nothing previously checked it at release time.
0.5.1 - 2026-07-28
- Updated dependencies, including the MCP TypeScript SDK to 1.30.0.
0.5.0 - 2026-07-21
- Installing mcpc is now much smaller and faster: the viem library used by the experimental x402 payment feature is bundled into a single ~650 KB tree-shaken file at build time instead of installing its ~70 MB dependency tree, and the npm package no longer ships README media (download shrinks from ~7 MB to ~0.4 MB).
- Commands start much faster (typically ~150 ms instead of ~700 ms): x402/viem, the OAuth login stack, spinners, and the proxy layer are now loaded only when actually used.
mcpc x402(with no subcommand) now shows your wallet info and funding QR code instead of the command help. Runmcpc help x402for the full command reference. Themcpc x402 infosubcommand is deprecated in favor of baremcpc x402and will be removed in a future release.
- The "OS keychain unavailable" warning no longer repeats on every command. It is now shown once, at the moment credentials are first stored in the fallback file (
~/.mcpc/credentials.json). mcpc loginnow explains OAuth client-registration failures with actionable guidance (use--client-idor--client-metadata-url) instead of surfacing a raw SDK JSON parse error. This affects servers that reject Dynamic Client Registration, such as Figma's remote MCP server, which only accepts an allow-list of approved clients.- Tool calls are no longer silently re-executed after a bridge crash or IPC timeout — a slow non-idempotent tool (payment, deploy) could previously run twice. The session is still reconnected automatically, and the error now says whether the call may have executed.
tools-callandtasks-resultnow exit with code 2 when the tool result reports an error (isError), matching the documented exit codes so shell scripts chaining on&&stop on failure.mcpc <@session> tools-call <tool> --helpnow prints the tool's parameter schema as intended, instead of the generic command help.- Fixed the
--proxyMCP server: it now validatesHost/Originheaders to block DNS-rebinding attacks from web pages, supports multiple client sessions, and actually terminates sessions on HTTP DELETE (previously the second client to connect was locked out until restart). - Recovering the result of an async task after a bridge crash now returns the tool's real output instead of a placeholder status message.
- A corrupted
sessions.jsonis now backed up and reported instead of being silently reset, which permanently deleted all session records on the next save. - Very large integer arguments (e.g. snowflake IDs like
id:=12345678901234567890) are now passed as strings instead of silently losing precision. - Closing a session with a local stdio server now waits for the full shutdown sequence (close stdin → SIGTERM → SIGKILL) instead of abandoning it after 1 second, which could leave orphaned server processes.
mcpc loginflag-validation mistakes now exit with code 1 (client error) instead of 4, and JSON-mode errors consistently include the exitcodefield.- Fixed list pagination to detect repeated cursors from misbehaving servers instead of looping forever.
- A one-off
--timeoutno longer leaks into subsequent requests on the same session. - Errors from
closeandrestartare no longer printed twice.
- mcpc no longer advertises the
samplingandrootsMCP capabilities it does not implement, so servers won't send requests that can only fail. - The fallback bridge socket directory under the system temp dir is now verified to be a real directory owned by the current user before use.
0.4.0 - 2026-06-25
mcpc login --grant client-credentialsadds machine-to-machine OAuth (no browser) for headless use such as CI/CD and daemons, implementing theio.modelcontextprotocol/oauth-client-credentialsextension. Authenticate with a client secret (--client-id/--client-secret) or a signed JWT assertion (--client-key/--client-key-alg); the saved profile then works withconnectlike any other.mcpc login --callback-host <host>to set the host used in the OAuth callback redirect URI:127.0.0.1(default) orlocalhost, for servers whose pre-registered OAuth client only accepts thelocalhostform. The callback server itself still binds only to the loopback IP (#269).resources-readcan now save resources to a local file with-o <file>(binary-safe, decodes base64blobcontent) and print bare content for piping with--raw. The default human view shows text content in a fenced block and summarizes binary content instead of dumping it to the terminal.mcpc help --skillprints a built-in agent skill guide (mental model, workflows, and examples) that ships with the package and always matches the installed version, so agents can learn mcpc without a separate skill file.
- mcpc now requires Node.js 22.12.0 or later. Support for Node.js 20, which reached end-of-life in April 2026, has been dropped.
resources-subscribe <uri> <file>now keeps a local file in sync with the resource: it downloads the resource to<file>and rewrites it whenever the server announces a change. Subscriptions survive session restarts;resources-unsubscribestops the sync and keeps the file. Previously these commands sent the subscribe/unsubscribe requests without acting on the notifications.resources-read --max-size <bytes>was removed; the option was accepted but never enforced. Use--max-charsto limit human-readable output.
- The interactive
shellcommand (mcpc shell @<session>andmcpc @<session> shell), deprecated in 0.3.1, has been removed. Run individualmcpc @<session> <command>invocations instead. Server log messages (notifications/message), previously shown only in the shell, are now written to the bridge log — view them withmcpc @<session> logs.
mcpc loginnow works when the server URL includes a query string (e.g.https://mcp.apify.com/?tools=search-actors,docs). The query is a connection-level filter, not part of the server's OAuth identity, so it is no longer sent during OAuth discovery — previously it broke discovery and made login fail with a404 ... POST /registererror.- The hosted OAuth Client ID Metadata Document now includes the required
client_idproperty, so authorization servers that validate CIMD documents per spec no longer rejectmcpc loginwith the default client identity (#271). - Sessions no longer hang on macOS under the Bun runtime (e.g. when connecting with
--proxy-bearer-token, or auto-reconnecting a crashed session). The bridge now runs under the same runtime as the CLI, avoiding a cross-binary OS-keychain read that macOS blocks with a password prompt in non-interactive contexts. A Bun user also no longer needs Node installed for the bridge to start. - OAuth login failures now report the authorization server's actual error (e.g.
invalid_client) instead of an opaque[object Response]message, and no longer crash the process on Windows when a token request is rejected. mcpc <session> restartnow terminates the previous MCP session on the server before reconnecting, so the old session and its resource subscriptions are no longer left orphaned (previously leaked on Windows).
0.3.1 - 2026-06-08
mcpc @<session>now reports the negotiated MCP protocol version and whether the connection is stateful (a stdio process, or an HTTP server that assigned a session id) or stateless (an HTTP server that assigned none — the upcoming2026-07-28model). Astatelessfield is exposed under_mcpcin the--jsonoutput ofmcpc @<session>andmcpc connect, and on each session in the session list:truewhen stateless,falsewhen stateful, andnullwhile the mode is not yet known. Stateless sessions are never markedexpiredon a transient404(they hold no session to lose).mcpc @<session> logscommand to show or follow the bridge log file. Supports-n/--tail <n>(default 50),--followto stream new lines, and--since <duration|iso>(e.g.1h,30m,2026-04-28T12:00:00Z). Transparently spans rotated files (.log.1….log.5) when more lines are needed. With--json, returns parsed{ time, level, context?, msg }records (continuation lines such as stack traces fold into the preceding entry'smsg; lines that aren't standard log entries become{ raw }); combined with--follow, output is JSONL.mcpc @<session> --jsonnow also exposes_mcpc.logPath. Error messages that previously pointed users to a raw log file path now suggestmcpc @<session> logsinstead (#205).
mcpc connectnow waits for every connection to finish before reporting status. Bulk and auto-discovery connects (mcpc connect,mcpc connect <file>) previously returned immediately with an optimisticconnectingstatus in human mode; they now behave like single-server connects and--json, showing each server as connected or failed (bounded by--timeout) with a progress spinner while connecting.
- The
shellcommand (mcpc shell @<session>andmcpc @<session> shell) is deprecated and will be removed in a future release. It is now hidden from--helpoutput and prints a deprecation warning when invoked
mcpc connectno longer auto-connects tomcp.apify.comas@apifywhen theAPIFY_API_TOKENenvironment variable is set. Connect to it like any other server —mcpc connect mcp.apify.com— authenticating withmcpc loginor--header "Authorization: Bearer ...".
--timeoutnow bounds the wait while a session connects to its server. The bridge health check that runs as a session starts previously ignored--timeout, so connecting to a slow or unreachable server could block for up to the 3-minute default regardless of a shorter--timeout.mcpc connect(with no arguments) no longer silently ignores config files it can't use. Files with an empty servers object are listed as0 servers, and files that fail to load — invalid JSON, a project config missing amcpServers/serversproperty, or an unreadable file — are listed as(invalid)with the reason, instead of being dropped or misreported asNo MCP config files found.mcpc connectnow prints config file paths so they can be copy-pasted directly: paths containing spaces (e.g. macOSLibrary/Application Support/...) are quoted instead of being split when pasted into a shell.mcpc connectno longer fails withsocket file not created within timeoutwhen the bridge is slow to start (CPU-constrained machines, many parallel connects). The startup window is more generous, and a bridge that crashes on startup now reports its exit code immediately instead of stalling until the timeout- Sessions no longer fail to start with
Bridge process exited during startupwhen the mcpc home directory (orMCPC_HOME_DIR) resolves to a deep path — notably macOS temp dirs like/var/folders/...— or when a session name is very long. The bridge's Unix socket path was exceeding the operating system limit (104 bytes on macOS, 108 on Linux); such paths now fall back to a short location under the system temp directory mcpc @<session> restart(and other session startups) no longer intermittently fail withFailed to connect to bridge: connect ECONNREFUSEDduring rapid restarts. The CLI now briefly retries the first connection to a freshly started bridge while it is still (re)creating its socket
0.3.0 - 2026-05-20
- New [EXPERIMENTAL]
skills-listandskills-getcommands implementing the draft MCP skills extension (io.modelcontextprotocol/skills, SEP-2640). Marked experimental because the spec is still in draft and the index shape, recognized types, and capability key may change. Skills are discovered via the well-knownskill://index.jsonresource, falling back to scanningskill://*/SKILL.mdURIs. Supports all three SEP-2640 index entry types:skill-md,archive(.tar.gz/.zipbundles), andmcp-resource-template. Entries with unrecognizedtypevalues are skipped per spec.skills-get <name>reads a skill'sSKILL.md; pass--rawto print just the markdown for piping to LLMs or files. The session overview listsskillsunder capabilities when a server advertises the extension under eithercapabilities.extensions(per spec) orcapabilities.experimental(the SDK-preserved escape hatch). JSON shape:[{ name, description, type, url }]forskills-list, fullReadResourceResultforskills-get. mcpc connect(with no arguments) now auto-discovers standard MCP config files (.mcp.json,mcp.json,.cursor/mcp.json,.vscode/mcp.json,~/.claude.json, Claude Desktop, Windsurf, Kiro, etc.) in the current directory and home directory, and connects every server defined across them. Entries with duplicate session names are deduplicated (project-scoped files win over global ones). VS Code's"servers"key is also supported.mcpc connectauto-connects tomcp.apify.comas@apifywhen theAPIFY_API_TOKENenvironment variable is set, using it as a Bearer token. Existing live sessions are reused without restart.mcpc x402 signsupports the x402uptoscheme alongsideexact. Use--scheme <auto|upto|exact>to pick a preference (defaultautoprefersupto, falls back toexact). The signer auto-grants a one-timeUSDC.approve(PERMIT2, MAX_UINT256)allowance on first upto sign; pass--no-approveto skip.mcpc connect --x402 [auto|upto|exact]enables x402 auto-payment with an optional scheme preference. Bare--x402defaults toauto(prefer upto, fall back to exact). The choice is persisted tosessions.jsonand reused onmcpc restart. Flag position is unrestricted —mcpc connect --x402 mcp.apify.com @sandmcpc connect mcp.apify.com @s --x402both work.- Sessions using x402 auto-payment now show a yellow
[x402]marker in session listings, alongside the existing OAuth and proxy markers.
- Stdio (command-based) config entries are now skipped by default when connecting from a config file (
mcpc connect <file>). Pass--stdioto include them. Single-entry connects (mcpc connect file:entry @session) are not affected. - x402 debug logs now announce the selected scheme (
scheme=upto/scheme=exact) up front and print USD amounts with 6-decimal precision (USDC atomic unit). Enable with--verboseorMCPC_VERBOSE=1. - Breaking:
mcpc connect --jsonnow always returns an array ofInitializeResultobjects (extended withtoolNamesand_mcpcmetadata), regardless of whether you connect a single server, a config file, or auto-discover all configs. Skipped/failed entries carry_mcpc.status(created|active|failed|skipped) and_mcpc.skipReason/_mcpc.error. The previous wrapper-object shapes ({configFile, results, skipped}and{discovered, results, skipped}) have been removed. tools-call --tasknow prints the task ID and recovery commands when interrupted with Ctrl+C, so you can fetch or cancel the server-side task later- Human-mode
tools-call/tasks-resultoutput no longer prints the Structured content section when Content already has at least one visible block. The JSON dump was redundant verbose output (especially for LLMs) whenever a server returned both. The section is still shown whencontentis empty or contains only a JSON-dump duplicate ofstructuredContent; use--jsonto always get the full payload
mcpc connectandmcpc restartno longer fail withENOENTwhen the macOS Keychain prompts for a password. Credentials are now read from the keychain before the bridge process is spawned, so the bridge's IPC startup timer no longer races a foreground password dialog (#55)- Background auto-reconnect now correctly marks sessions as
unauthorizedwhen the server returns 401/403, instead of leaving them stuck inconnectingafter the bridge crashed on an unhandled rejection - Sessions using a static bearer token (via
--header "Authorization: ...") no longer flip betweenunauthorizedandconnectingon everymcpcinvocation — they stayunauthorizeduntil youmcpc loginor reconnect. OAuth-profile sessions still auto-retry because tokens may have been refreshed by another session - Stdio servers no longer fail silently: the bridge now captures the child's stderr, writes it to
~/.mcpc/logs/bridge-<session>.log, and appends a tail of the most recent lines tomcpc connecterrors. This makes it obvious when a stdio server crashes on startup due to e.g. missing TLS trust (NODE_EXTRA_CA_CERTS), missing proxy vars, or missing credentials (#195) mcpc connectnow recognizes relative config-file paths with a:entrysuffix (e.g.docs/examples/mcp-config.json:fs). Previously these were misinterpreted as HTTP URLsmcpc loginnow sends a randomstateparameter on the OAuth authorization URL. Some authorization servers (e.g. Ubersuggest) reject requests withoutstatewith amissing_stateerror, which previously madeloginfail before reaching the consent screen (#214)mcpc connectno longer aborts on Windows withFailed to save sessions: EPERM: operation not permitted, rename …when antivirus or another mcpc process briefly holdssessions.jsonopen. The atomic rename used to persistsessions.json,profiles.json, andwallets.jsonnow retries transient Windows file-lock errors with a short backoff
- Breaking: Removed
tools,resources, andpromptsshorthand commands — use the full names (tools-list,resources-list,prompts-list) instead
- Migrated the dev/release toolchain to pnpm 10 with a 24-hour package quarantine (
minimumReleaseAge: 1440) to reduce supply-chain attack risk. End-user installs from npm are unaffected
0.2.6 - 2026-04-15
- New
tasks-result <taskId>command that fetches the finalCallToolResultpayload of an async task via the MCPtasks/resultmethod. Blocks until the task reaches a terminal state, then prints the payload using the same renderer astools-call(--jsonreturns the raw result). - Public Client ID Metadata Document hosted via GitHub Pages, giving every
mcpcinstallation a consistent client identity on CIMD-capable authorization servers.mcpc loginnow uses this hosted document by default; override with--client-metadata-url <url>or disable with--no-client-metadata-urlto force Dynamic Client Registration. The OAuth callback uses a fixed loopback port range (13316–13325) to match the registered redirect URIs.
- Human-mode
tools-call/tasks-resultoutput now uses a structured layout: Metadata (_meta), Content (each text/resource/image block rendered per type), and Structured content (shown as JSON when not already present in a text block). Replaces the raw key-value dump with a cleaner, more readable format.
tools-get"Call example" now wraps JSON values (arrays, objects, strings) in single quotes so they can be copy-pasted into a shell verbatim without being mangled by word-splitting (e.g.,outputFormats:='["markdown"]'instead ofoutputFormats:=["markdown"])
0.2.5 - 2026-04-15
mcpc connect <config-file>connects all servers defined in a config file at once, auto-generating session names from entry names (e.g.,mcpc connect ~/.vscode/mcp.json)connectauto-generates a session name when@sessionis omitted (e.g.,mcpc connect mcp.apify.comcreates@apify), reusing an existing session when auth settings match--max-chars <n>global option to truncate output to a given number of characters (ignored in--jsonmode)- "Did you mean?" suggestions for unknown commands, including reversed names (e.g.,
list-tools→tools-list) mcpc login --client-metadata-url <https-url>flag adds support for OAuth Client ID Metadata Documents (CIMD). When the authorization server advertisesclient_id_metadata_document_supported: true, mcpc uses the URL as theclient_id; otherwise it falls back to Dynamic Client Registration.
- Session info JSON output (
mcpc @session --json,mcpc connect --json) returnstoolNames(array of strings) instead of fulltoolsobjects --schemaand--schema-modeoptions scoped totools-getandtools-callonly (removed fromprompts-get)
connectnow verifies the server responds before reporting success; shows a warning with the actual error when the server is unreachable- HTTP 404 during initial connect no longer misclassified as "session expired"; error messages now include the actual HTTP error and server URL
mcpc login --jsonnow writes interactive prompts to stderr, so stdout contains only the final JSON result and is safe to pipe tojqor redirect to a file
0.2.4 - 2026-04-07
- Fixed XSS vulnerability in OAuth callback server: error messages from query parameters are now HTML-escaped before rendering
- Replaced
exec()withexecFile()in browser opening to prevent potential shell injection via crafted OAuth authorization URLs - Added Host header validation to OAuth callback server to mitigate DNS rebinding attacks
- Set restrictive directory permissions (
0o700) on~/.mcpc/and subdirectories to prevent local privilege escalation on shared systems
- Bridge ignores stored OAuth access token when no refresh token is provided; servers that don't issue refresh tokens now work correctly by using the access token as a static Bearer header
- Session incorrectly marked as
unauthorizedwhen access token expires but refresh token is still valid; bridge now attempts token refresh before giving up - "ESC to detach" hint now shows immediately in the spinner when using
--task, instead of waiting for the server to return a task ID
0.2.3 - 2026-03-31
0.2.2 - 2026-03-31
0.2.1 - 2026-03-30
- Secure x402 wallet storage using OS keychain integration with fallback to
wallets.jsonfor compatibility - QR code display for wallet address in
x402 init,x402 import, andx402 infocommands, allowing users to scan and fund the wallet directly from the terminal
- Auto-reconnect crashed and unauthorized bridge processes in the background when enumerating sessions (
mcpcormcpc grep), with a 10-second cooldown between reconnection attempts. Unauthorized sessions benefit from OAuth tokens refreshed by other sessions sharing the same profile.
- Fixed expired sessions falsely showing as
liveafter auto-reconnect — the bridge now detects when the server did not resume the original MCP session (including when no session ID is returned) and marks the session asexpired - Bridge sends first keepalive ping 5 seconds after startup (instead of waiting the full 30-second interval) to detect stale sessions earlier
0.2.0 - 2026-03-24
- New
mcpc grep <pattern>command to search tools, resources, prompts, and instructions across all active sessions, with regex, type filters, and single-session search support - New
tasks-list,tasks-get,tasks-cancelcommands for managing async tasks on the server --taskflag fortools-callto opt-in to task execution with progress spinner;--detachto start a task and return the task ID immediately; press ESC during--taskto detach on the fly--insecureglobal option to skip TLS certificate verification--client-idand--client-secretoptions formcpc login, for servers that don't support dynamic client registration--no-profileoption forconnectto skip OAuth profile auto-detectionmcpc loginnow falls back to accepting a pasted callback URL when the browser cannot be opened (e.g. headless servers, containers)tools-listnow shows inline parameter signatures (e.g.read_file(path: string, +4 optional)) for quick scanning without--fullmcpc @sessionnow shows available tools list from bridge cache (no extra server call)
-
Breaking: CLI syntax redesigned to command-first style. All commands now start with a verb; MCP operations require a named session.
Before After mcpc <server> tools-listmcpc connect <server> @namethenmcpc @name tools-listmcpc <server> connect @namemcpc connect <server> @namemcpc <server> loginmcpc login <server>mcpc <server> logoutmcpc logout <server>mcpc --clean=sessionsmcpc clean sessionsmcpc --config file.json entry connect @namemcpc connect file.json:entry @nameDirect one-shot URL access (e.g.
mcpc mcp.apify.com tools-list) is removed; create a session first withmcpc connect. -
Revised session states:
unauthorized(401/403),disconnected(bridge alive but server unreachable >2min), andexpired(session ID rejected), each with actionable guidance -
When
--profileis not specified, only thedefaultprofile is used; non-default profiles require an explicit--profileflag -
@napi-rs/keyringnative addon is now loaded lazily; falls back to~/.mcpc/credentials.jsonwhen unavailable -
--header/-Hoption is now specific to theconnectcommand instead of being a global option -
Tools cache now fetches all pages on startup and on
tools/list_changednotifications
- HTTP proxy support (
HTTP_PROXY/HTTPS_PROXY) now works for MCP server connections, OAuth token refresh, and x402 payment signing - Explicit
--header "Authorization: ..."now takes precedence over auto-detected OAuth profiles - Fixed auth loss when reconnecting an unauthorized session via
mcpc connect - Session restart now auto-detects the
defaultOAuth profile created after the session was established --timeoutflag now correctly propagates to MCP requests via session bridge--taskand--detachtool calls now correctly send task creation parameters to the server- Bridge now forwards
logging/messagenotifications to connected clients - IPC buffer between CLI and bridge process is now capped at 10 MB, preventing unbounded memory growth
- Fixed
mcpc help <command>showing truncated usage line
0.1.10 - 2026-03-01
- Support for
HTTPS_PROXY,HTTP_PROXY, andNO_PROXY/ lowercase variants env vars for outbound connections - CI/CD automated test pipeline
- Replaced deprecated
keytarpackage with@napi-rs/keyringfor OS keychain integration - Temp files now written to
~/.mcpc/instead of/tmp/to avoid cross-device rename errors on Linux - Improved error messages for invalid server hostnames and mistyped commands (e.g.
mcpc login) - Added
prettierformatting check to lint step
- Fixed
ExperimentalWarning: Importing JSON modules is an experimental featureon Node.js 22+ - Fixed OAuth token refresh for servers with root-based discovery (
.well-knownat/) - Fixed OAuth errors incorrectly expiring the session instead of failing gracefully
0.1.9 - 2026-02-02
- Added CHANGELOG.md for tracking changes
- Automated GitHub release creation in publish script
tools-listnow shows a compact summary by default to support dynamic tool discovery- Added
--fullflag totools-listfor detailed tool information - Publish script now automatically updates CHANGELOG.md version on release
0.1.8 - 2026-01-21
- Session is now marked as expired (not auto-reconnected) when server rejects MCP session ID
- Users must explicitly run
mcpc @session restartto recover from expired sessions
- Fixed incorrect flagging of expired sessions as crashed
- Fixed session expiration detection for various error message formats
- Fixed help command output
0.1.7 - 2026-01-03
- Documentation improvements and updates
- Various cosmetic improvements to CLI output
- Minor bug fixes
0.1.6 - 2026-01-02
- Session notifications with timestamps for tracking list changes (
tools/list_changed,resources/list_changed,prompts/list_changed)
- Renamed
_metato_mcpcin JSON output for MCP spec conformance - Improved formatting of prompts output
- Various cosmetic improvements
- Fixed proxy server issues
- Fixed screenshot URL in README
0.1.5 - 2026-01-01
- Implemented
--proxyoption for exposing sessions as local MCP servers - Added
mcpc @session restartcommand
- Renamed
sessioncommand toconnectfor clarity - Renamed "dead" session status to "crashed" for clarity
- Fixed
--timeoutoption handling
0.1.4 - 2025-12-31
- Implemented
--schemaand--schema-modeoptions for tools - Added
mcpc @session restartcommand
- Renamed
tools-schemacommand totools-get - Improved formatting for prompts and tools output
- Security review and improvements
0.1.3 - 2025-12-29
- Initial public release
- Support for Streamable HTTP and stdio transports
- Session management with persistent bridge processes
- OAuth 2.1 authentication with PKCE
- Full MCP protocol support: tools, resources, prompts
- Interactive shell mode
- JSON output mode for scripting