Skip to content

Latest commit

 

History

History
590 lines (372 loc) · 45.7 KB

File metadata and controls

590 lines (372 loc) · 45.7 KB

mcporter Changelog

[0.11.4] - Unreleased

  • Nothing yet.

[0.11.3] - 2026-05-21

  • Fall back to ~/.mcporter/mcporter.json[c] when XDG_CONFIG_HOME points at an empty mcporter config directory, preventing embedders from accidentally hiding the user server registry. (Issue #184, thanks @ChrisBot2026)

[0.11.2] - 2026-05-21

CLI

  • Add mcporter list --status, --exit-code, and --quiet for concise server health checks without introducing a separate health command.
  • Make generate-cli --bundle artifacts deterministic by removing bundle-only paths/timestamps from embedded metadata and sorting generated tool/schema output. (Issue #180, thanks @imroc)
  • Let daemon-managed OAuth servers reuse cached credentials for tool calls and tool listing after token expiry. (PR #182 / issue #181, thanks @bradhallett)
  • Avoid restarting browser OAuth when an already-connected server has a still-valid cached access token. (Issue #179, thanks @jaigew and @StanAngeloff)
  • Add the documented top-level daemonIdleTimeoutMs config to shut down inactive keep-alive daemons. (Issue #174, thanks @jarek083)

[0.11.1] - 2026-05-14

CLI

  • Make generate-cli --runtime node --bundle <name>.mjs emit an ES module bundle with a local require shim, fixing .mjs artifacts that previously crashed at startup.
  • Classify generated .mjs and .cjs outputs as bundle artifacts in embedded metadata instead of reporting them as binaries.
  • Avoid leaving implicit <server>.ts template files in the current directory when generating bundle-only artifacts without --output.
  • Print generated CLI help with a trailing newline so subsequent shell output no longer glues onto the help footer.
  • Point generated CLI metadata and npm package metadata at openclaw/mcporter.
  • Document the existing generate-cli --timeout, --minify, and --no-minify flags in generate-cli --help.
  • Suppress expected Rolldown unresolved-import warnings for Node built-ins during successful generated CLI bundling.

[0.11.0] - 2026-05-14

Config

  • Support auth: "refreshable_bearer" with explicit refresh settings so cached OAuth tokens can be refreshed before HTTP connects or injected into stdio env vars. (Issue #173, thanks @tokyo-s)
  • Add httpFetch: "node-http1" for HTTP MCP servers whose providers reject Node's built-in fetch, and auto-apply it to Sunsama's endpoint. (Issue #158, thanks @mattash)
  • Resolve ${VAR} and ${VAR:-fallback} placeholders across string-valued server config fields such as baseUrl, command/args, tokenCacheDir, and pre-registered OAuth fields while keeping headers/env/bearer-token placeholders lazy until runtime. (PR #161 / issue #157, thanks @zxyasfas)
  • Add mcporter vault set <server> and mcporter vault clear <server> so headless deployments can seed or clear OAuth vault credentials without reproducing mcporter's internal vault-key format. (Issue #156)

CLI

  • Add mcporter serve, exposing daemon-managed keep-alive servers as one MCP bridge with readable server__tool names for stdio and Streamable HTTP clients. (PR #172, thanks @zm2231)
  • Prefer MCP structuredContent nested inside JSON-RPC result envelopes so mcporter call --output json stays parseable for dual text/structured tool responses. (Issue #168, thanks @mar-zh)
  • Serialize read-modify-write config and OAuth vault updates, and write JSON/cache metadata atomically to avoid lost entries under parallel invocations. (Issue #167, thanks @alexminza)
  • Patch chrome-devtools-mcp --autoConnect launches at runtime so mcporter call chrome-devtools.list_pages can keep using a logged-in Chrome profile while upstream DevTools-window detection can hang on busy profiles.

OAuth

  • Add headless OAuth login support via --no-browser, --browser none, and MCPORTER_OAUTH_NO_BROWSER, emitting parseable authorization URLs for remote auth flows. (PR #171 / issue #169, thanks @feniix)
  • Proactively complete OAuth for configured HTTP servers that allow unauthenticated initialize/listTools but require credentials for tool calls, and close the local callback server promptly after browser authorization. (PR #159, thanks @Spacefish)
  • Refresh expired cached OAuth access tokens during non-interactive mcporter list without opening a browser or clearing cached credentials when refresh fails. (Issue #166, thanks @chrisabad)

[0.10.2] - 2026-05-09

CLI

  • Keep keep-alive daemon retry diagnostics on stderr so mcporter call --output json stdout stays parseable after a daemon recovery. (PR #163 / issue #160, thanks @clawSean)
  • Increase the default OAuth browser wait from 60 seconds to 5 minutes so hosted MCP sign-ins have enough time for account and permission review.
  • Skip the redundant daemon status preflight for warm keep-alive access, cutting one socket round-trip from each routed list/call/resource request while preserving stale-config and dead-daemon recovery.
  • Route explicit default keep-alive calls like chrome-devtools.list_pages through a daemon-only fast path, avoiding full runtime startup on warm calls.
  • Further reduce warm keep-alive call startup by avoiding runtime/config schema imports on CLI boot and using a narrower daemon call path for simple explicit calls.
  • Keep single-server mcporter list non-interactive by reusing cached OAuth without launching new auth flows, and clamp oversized OAuth startup errors so HTML responses do not flood stdout/stderr.
  • Label non-timeout mcporter list <server> failures as unavailable instead of timed out.
  • Return concise/structured mcporter resource errors for servers that do not implement MCP resources instead of dumping SDK stack traces.
  • Refresh Context7 examples for the live resolve-library-id and query-docs schemas.
  • Make generate-cli --help, inspect-cli --help, and emit-ts --help print command help before flag parsing.
  • Auto-correct near-miss tool names when a server reports an unknown tool as MCP isError content instead of throwing.
  • Keep auto-correct diagnostics on stderr for mcporter call --output json/raw so stdout stays parseable.
  • Make generated CLIs keep --output json parseable for plain text MCP results by falling back to the raw JSON envelope.

Config

  • Preserve existing stdio executable paths that contain spaces instead of splitting them as inline command strings, so app bundle helpers like Hopper's MCP server can be configured directly.

Tooling

  • Build dist/ once before the Vitest suite instead of letting parallel integration tests rebuild it mid-run.

[0.10.1] - 2026-05-04

CLI

  • Fix Bun-compiled standalone binaries so generate-cli --compile can compile generated CLIs from empty directories by staging the matching published mcporter package dependencies when no local package tree is available.

Tests

  • Add an opt-in standalone Bun release-binary smoke for the empty-directory generated CLI compile path.

[0.10.0] - 2026-05-04

CLI

  • Return a non-zero exit code when MCP tool results are marked isError, and preserve that status through the forced-exit cleanup path. (PR #154 / issue #153, thanks @jlapenna)
  • Give forced-exit cleanup a short stdout/stderr flush window so large JSON output is not truncated when mcporter is run from child_process. (PR #151 / issue #145, thanks @yuhp)
  • Treat key:=value as a compatibility alias for key=value, avoiding malformed keys such as price:. (PR #150 / issue #100, thanks @solomonneas)
  • Restore mcporter call --key value / --key=value tool arguments, including JSON array/object coercion, --json - stdin payloads, schema-aware bare string-to-array wrapping, and kebab-case to camelCase field mapping. (Issues #119 and #126)
  • Quote generated emit-ts members for tool names that are not valid TypeScript identifiers. (PR #149 / issue #30, thanks @solomonneas)
  • Resolve relative stdio args in generated CLI bundles against the generated script location instead of the caller's current directory. (PR #148 / issue #56, thanks @solomonneas)
  • Print OAuth manual-completion URLs at the default warning log level so headless users can copy them. (PR #143 / issue #139, thanks @stainlu)
  • Support repeatable --header KEY=value flags for ad-hoc HTTP servers and persisted ad-hoc entries. (Issue #117)
  • Let generated CLIs use --raw without also passing required flags, and parse array flags containing JSON object items. (Issues #102 and #103)
  • Preserve auth: "oauth" when an ad-hoc HTTP server is OAuth-promoted and saved with --persist. (Issue #82)
  • Let non-interactive mcporter list use existing OAuth token caches for HTTP servers even when older configs are missing auth: "oauth". (Issue #137)
  • Fail OAuth flows immediately when the server never creates an authorization URL, instead of waiting for a browser callback that cannot arrive. (Issue #115)
  • Support mcporter list server.tool --schema to print a single tool's schema instead of the whole server. (Issue #116)
  • Surface MCP server instructions from the initialize response in single-server mcporter list text and JSON output. (Issue #76)
  • Add compact mcporter list <server> --brief / --signatures output for scanning signatures without doc blocks, examples, or schemas. (PR #144, thanks @yuhp)
  • Launch Bun-compiled macOS daemon children through nohup so Homebrew binaries can start keep-alive daemons in the background on macOS 26. (Issue #66)
  • Let generated CLIs use the keep-alive daemon for embedded servers with lifecycle: "keep-alive", preserving stdio server state across separate generated-CLI invocations. (Issue #101)
  • Add mcporter resource <server> [uri] for listing and reading MCP resources, including keep-alive daemon routing. (Issue #134)

Config

  • Honor XDG Base Directory env vars for mcporter-owned config, data, cache, and state paths while preserving the legacy ~/.mcporter fallback when XDG vars are unset. MCPORTER_DAEMON_DIR, MCPORTER_CONFIG, --config, and per-server tokenCacheDir remain explicit overrides. (Issue #155)
  • Support pre-registered OAuth clients via oauthClientId/oauthClientSecretEnv and token endpoint auth method overrides for providers without dynamic client registration. (Issue #132)
  • Respect configured stdio cwd values, including relative paths resolved from the config file and ~ home expansion. (PR #147 / issue #146, thanks @solomonneas)

Tooling / Dependencies

  • Updated zod to 4.4.3.

[0.9.0] - 2026-04-18

CLI

  • Add per-server exact-name tool filtering with allowedTools and blockedTools, including config serialization and runtime call/list enforcement. (Rebuild of PR #39, thanks @tonylampada)
  • Escalate stuck stdio child-process shutdowns after close timeouts instead of treating the timeout as a clean exit. (PR #39, thanks @tonylampada)
  • Quote OAuth browser URLs when launching cmd.exe on Windows, preserving query parameters such as redirect_uri. (PR #136, thanks @cosminilie)
  • Document OAuth-protected server config setup with mcporter config add --auth oauth and mcporter auth. (PR #34, thanks @prateek)
  • Respect schema-declared string parameters when coercing numeric-looking mcporter call key=value arguments, so Slack timestamps like thread_ts stay strings. (PR #141, thanks @Hamzaa6296)

[0.8.1] - 2026-03-29

CLI

  • Bun-compiled/Homebrew binaries now embed the package version before boot, so mcporter --version reports the real release (for example 0.8.1) instead of falling back to 0.0.0-dev.

Tests

  • Added regression coverage for the Bun compile wrapper so future release builds keep the embedded runtime version intact.

Tooling / Dependencies

  • npm publishes now use an explicit package allowlist, so local release tarballs/checksum files do not get bundled into the published package.

[0.8.0] - 2026-03-29

CLI

  • Preserve OAuth flow vs post-auth transport failures so invalid OAuth/provider errors surface directly, while real legacy 404/405 transport mismatches still fall back to SSE correctly. (PR #97, thanks @mavam)
  • Ignore static Authorization headers once OAuth is active so imported editor configs cannot override fresh OAuth tokens. (PR #123, thanks @ahonn)
  • Keep mcporter call --output json parseable by emitting valid JSON even when the command falls back to raw output. (PR #128, thanks @armanddp)
  • Render resource content blocks in call output helpers instead of dropping them, including markdown resources and JSON text payloads. (PR #124, thanks @mvanhorn)
  • Preserve full JSON/error payloads when data is just one field instead of collapsing the response to data alone. (PR #106, thanks @AielloChan)
  • Generated CLIs now parse object-valued flags as JSON and render object placeholders/examples with JSON-shaped help text, so tools like Jira fields no longer receive raw strings. (PR #114, thanks @v2nic)
  • Deduplicate concurrent keep-alive daemon restarts per server so repeated fatal errors only force-close the cached daemon transport once before retrying. (PR #125, thanks @zm2231)
  • mcporter config add now accepts plural --args as an alias for repeated stdio arguments, matching common CLI muscle memory. (PR #93, thanks @Jah-yee)
  • Preserve default imports when mcporter config add writes a config file, instead of forcing "imports": [].
  • OAuth: avoid crashing on headless Linux when xdg-open is unavailable; clear stale dynamic-port client registrations; close callback server if stale-client persistence reads fail. (PR #72, thanks @mgonto)
  • Added optional oauthScope/oauth_scope config override as an escape hatch for providers that require explicit scopes.
  • OAuth wait/redirect now share one deferred to eliminate authorization race windows and preserve stable close-path errors, including wait-before-redirect and repeated-redirect flows. (PR #70, thanks @monotykamary)
  • createCallResult().json() now collects all parseable JSON entries from MCP content arrays (single item stays backward-compatible), and raw inspect depth now stays readable without unbounded traversal. (PR #91, thanks @Blankdlh)
  • Added --raw-strings (numeric coercion off) and --no-coerce (all coercion off) for mcporter call argument parsing so IDs/codes can stay literal strings. (PR #59, thanks @nobrainer-tech)
  • Added CallResult.images() plus opt-in mcporter call --save-images <dir> so image content blocks can be persisted without changing existing stdout output contracts. (PR #61, thanks @daniella-11ways)
  • OAuth transport retries now classify HTTP 405 as HTTP (not auth) and OAuth promotion applies to configured HTTP servers too, so post-auth fallback flows no longer drop credentials on 405-only endpoints. (PR #48, thanks @caseyg)
  • Config loading now parses project and explicit config files as JSONC, so mcporter.json / mcporter.jsonc can include comments and trailing commas. (PR #42, thanks @aryasaatvik)
  • Added generated mcporter.schema.json plus pnpm generate:schema for IDE autocomplete/validation, including $schema and oauthScope/oauth_scope coverage. (PR #43, thanks @aryasaatvik)

Tooling / Dependencies

  • Updated dependencies to latest releases (including MCP SDK, Rolldown RC, Zod, Biome, Oxlint, Vitest, Bun types).
  • Synced biome.json schema URL to Biome 2.4.5.

[0.7.3] - 2025-12-29

CLI

  • Fixed generated CLIs to read Commander.js option values via camelCased properties so snake_case tool schemas map correctly. (Thanks @rawwerks, PR #28)
  • Coerce generated CLI array arguments based on JSON Schema item types (including integer arrays). (Thanks @rawwerks, PR #27)
  • mcporter generate-cli supports --include-tools / --exclude-tools to generate CLIs for a subset of server tools. (Thanks @zackleman, PR #24)

Tests

  • Added regression coverage for typed array parsing in generated CLIs.
  • Added regression coverage for snake_case, camelCase, and numeric option names in generated CLIs.
  • Increased the Bun bundler integration-test timeout to reduce flakes on slower runners.

Tooling / Dependencies

  • Updated dependency set (SDK, Rolldown, Zod, Biome, Oxlint, Bun types).
  • Synced the Biome schema URL to the current CLI version.

[0.7.1] - 2025-12-08

Daemon

  • Track config file mtimes for every loaded layer (home + project or explicit) in daemon metadata and auto-restart when any layer changes, so newly added keep-alive servers are picked up without manual restarts. Includes regression tests for stale-daemon detection.

[0.7.0] - 2025-12-06

CLI

  • Centralized OAuth credentials in a shared vault (~/.mcporter/credentials.json) while still honoring per-server tokenCacheDir when present; legacy per-server caches are migrated automatically.
  • mcporter auth --reset now clears the vault and legacy caches without crashing on corrupted credential files, making re-auth reliable for servers like Gmail.
  • StdIO servers that expose a separate auth subcommand (e.g., Gmail MCP) can now declare oauthCommand.args; mcporter auth <server> will spawn that helper and wait for browser completion, so Gmail auth now works without running npx manually.
  • Raw output now prints full strings without Node’s 10k-character truncation (util.inspect uses maxStringLength: null), so large MCP responses and plans are preserved end-to-end.
  • Added regression coverage to ensure future raw output changes cannot reintroduce truncation.

[0.6.6] - 2025-11-28

CLI

  • Prevented ENOENT crashes when no config file exists anywhere by only passing an explicit --config/MCPORTER_CONFIG path to the runtime; implicit defaults now fall back cleanly across list/config/daemon flows.

[0.6.5] - 2025-11-26

CLI

  • mcporter call|auth|list help/--help now print the command-specific usage text instead of attempting to run a server, matching the footer’s “mcporter --help” hint.
  • Added a hidden list-tools alias for mcporter list to preserve older muscle memory and avoid “Unknown MCP server” errors when copied from legacy docs.
  • Ad-hoc HTTP flows now accept --insecure as a hidden synonym for --allow-http, making plain-HTTP testing flags match common intuition. --sse also aliases --http-url to keep older examples working.

Security / Dependencies

  • Override transitive body-parser to 2.2.1 (CVE-2025-13466) via pnpm overrides.

[0.6.4] - 2025-11-25

CLI

  • mcporter list now uses cached OAuth access tokens (if present) for the all-servers view without opening browser windows, so previously authorized servers no longer show spurious “auth required” in non-interactive listings.
  • pnpm test --filter <pattern> now works by translating to a Vitest file pattern, avoiding the prior “Unknown option --filter” error.

[0.6.3] - 2025-11-22

Runtime & CLI

  • Updated to @modelcontextprotocol/sdk 1.22.0; inline stdio test server now uses Zod schemas to remain compatible with the SDK’s JSON Schema conversion path.

Runtime

  • listTools now follows SDK pagination, looping through nextCursor so long catalogs return complete tool lists.

Configuration

  • Claude imports now preserve root-fallback parsing for legacy .claude.json and .claude/mcp.json files while treating .claude/settings*.json as container-only configs, preventing metadata fields like statusLine from being misdetected as MCP servers.
  • Added regression coverage for Claude settings and mcp.json imports to guard the root-fallback behavior.

[0.6.2] - 2025-11-18

Runtime

  • Propagate --timeout / MCPORTER_CALL_TIMEOUT into MCP tool calls (SDK timeout, resetTimeoutOnProgress, maxTotalTimeout) so long-running requests are no longer capped by the SDK’s 60s default.

CLI

  • mcporter generate-cli once again treats single-token --command values (e.g., ./scripts/server.ts) as STDIO transports instead of trying to coerce them into HTTP URLs, restoring the pre-0.6.1 behavior for ad-hoc scripts.
  • Global flag parsing moved into cli-factory for consistent log-level/oauth-timeout handling across commands.
  • daemon host/client hardened and covered with new tests; idle eviction and restart paths verified.

Configuration

  • Reintroduced support for OPENCODE_CONFIG_DIR so OpenCode imports continue to honor the documented directory override alongside OPENCODE_CONFIG.
  • Platform-aware defaults for Cursor/Claude/Windsurf/VS Code/OpenCode configs now dedupe paths and include Windows-specific locations.

Platform resilience (Windows/WSL)

  • Added fs-helpers that treat chmod/copy failures on NTFS/DrvFs as best-effort so CLI generation keeps working on WSL mounts.
  • Documented Windows/WSL workflows: install/test from ext4 copies, remount guidance for /mnt/c, and syncing tips.

StdIO MCP coverage

  • Added stdio e2e tests using in-repo filesystem & memory MCP fixtures to ensure list/call works via execPath.

Content extraction

  • createCallResult now reads nested raw.content/raw.structuredContent so tools that wrap responses render text/markdown/json correctly; new unit tests cover text joining, markdown, and JSON.

[0.6.1] - 2025-11-17

CLI

  • mcporter list --verbose now surfaces every config path that registers the target server (primary first, then duplicates) in both text and JSON output, making it easier to trace where a name is coming from.
  • JSON list payloads include a new sources array when --verbose is set, mirroring the on-screen path list for programmatic consumers.
  • Verbose source listings now tag the import kind (cursor/vscode/codex, etc.) and explicitly label the primary entry vs. shadowed duplicates.

Runtime

[0.6.0] - 2025-11-16

Configuration

  • Default config resolution now layers the system config (~/.mcporter/mcporter.json[c]) before the project config (config/mcporter.json), so globally installed MCP servers remain available inside repos while allowing per-project overrides.
  • --config and MCPORTER_CONFIG continue to select a single file without merging for explicit workflows.
  • mcporter config add --scope home|project lets you choose the write target explicitly (project remains the default; --persist <path> still wins when provided).

[0.5.11] - 2025-11-16

Code generation & metadata

  • Quick start examples in generated CLIs now derive from actual embedded tools (up to three), showing real command names/flags instead of generic placeholders.

[0.5.10] - 2025-11-16

Code generation & metadata

  • Generated CLIs now present the canonical kebab-cased tool names in help while accepting underscore aliases at runtime, eliminating the “unknown command” errors when copying names directly from server tool lists.

[0.5.9] - 2025-11-15

CLI

  • mcporter list suppresses raw STDIO stderr dumps when enumerating all configured servers, keeping the summary output readable while still surfacing per-server health statuses.
  • mcporter config <subcommand> --help (and mcporter config help <subcommand>) now display detailed usage, flags, and examples for every config subcommand instead of returning a placeholder message. Inline --help tokens are intercepted before executing the command, so flows like mcporter config add --help no longer throw usage errors.
  • mcporter config doctor prints the project and system config paths before reporting diagnostics, making it obvious which files were inspected when tracking down configuration issues.

[0.5.8] - 2025-11-15

CLI & runtime

  • STDIO transports now interpolate ${VAR}/$env:VAR tokens in the configured command and arguments before spawning child processes, so chrome-devtools inherits the live CHROME_DEVTOOLS_URL value instead of receiving the literal placeholder.
  • Keep-alive detection skips any STDIO server whose command/args reference CHROME_DEVTOOLS_URL, ensuring daemon mode relaunches chrome-devtools for each Oracle browser session instead of pinning a stale port.
  • Command arguments that escape placeholders as \${VAR} (common when using String.raw in TypeScript config helpers) now trim the backslash after interpolation so downstream servers receive clean URLs.

CLI

  • Ad-hoc STDIO invocations that start with npx -y <package> now infer the npm package name (stripping versions and ignoring arguments after --) instead of producing slugs like npx-y, so repeated mcporter list|call runs automatically reuse a readable server key without passing --name.
  • Quoted inline commands such as mcporter list "npx -y xcodebuildmcp" now auto-detect the ad-hoc STDIO transport, so you can skip --stdio entirely when probing MCP packages via npx.

[0.5.7] - 2025-11-14

CLI

  • Added mcporter daemon restart, a stop+start convenience that reuses logging flags so agents can bounce the keep-alive daemon with a single command.
  • Added list_tools as a hidden shortcut for mcporter list <server>, so chrome-devtools.list_tools (and similar selectors) print the tool catalog instantly without requiring a real MCP tool.
  • Warn when colon-style arguments omit a value (e.g., command:) and suggest quoting/--args JSON so agents don’t accidentally send undefined to STDIO servers.

[0.5.6] - 2025-11-11

CLI & runtime

  • Reset cached keep-alive connections whenever STDIO transports hit fatal errors (timeouts, closed pipes, daemon restarts, etc.), so chrome-devtools automatically recovers after you close Chrome instead of requiring mcporter daemon stop.
  • Daemon-routed calls now log a restart notice and automatically retry once after closing the stale transport, providing self-healing behavior when Chrome or other keep-alive servers crash mid-call.

[0.5.5] - 2025-11-11

CLI & runtime

  • Added hidden agent shortcuts: mcporter describe <server> now aliases mcporter list, and calling <server>.help automatically falls back to the list output when a server lacks a help tool (also wired into the legacy pnpm mcp call path) so agents always get a readable summary.

[0.5.4] - 2025-11-10

CLI & runtime

  • Propagate the CLI’s per-call timeout (defaults to 60s or --timeout) through the keep-alive daemon, so chrome-devtools and other persistent STDIO servers stop as soon as the caller times out.
  • Runtime.callTool now honors timeoutMs directly, ensuring TanStack MCP clients and the CLI share a single source of truth for cancellation even outside the daemon.
  • Ad-hoc STDIO servers launched via mcporter call "npx …" (or --stdio) inherit the same keep-alive heuristics and canonical names as config-defined entries, so MCPORTER_DISABLE_KEEPALIVE=chrome-devtools and similar overrides work without passing --name.

Tests

  • Added regression coverage (tests/daemon-client-timeout.test.ts, tests/runtime-call-timeout.test.ts, and updated keep-alive suites) to guard timeout propagation and canonical keep-alive detection.

[0.5.3] - 2025-11-10

CLI & runtime

  • Fixed Claude imports so mcporter list merges project-scoped servers from .claude.json (matching the current workspace) and ignores metadata-only keys like tipsHistory/cachedStatsigGates, resolving GitHub issues #6 and #7.
  • OpenCode imports now read only the documented mcp container (no root-level fallback), matching the current OpenCode schema and preventing stray metadata from being misinterpreted as servers.

[0.5.2] - 2025-11-10

CLI & runtime

  • mcporter call "<stdio command>" ... now auto-detects ad-hoc STDIO servers, so you can skip --stdio/--stdio-arg entirely and just quote the command you want to run.
  • When a server exposes exactly one tool, mcporter call infers it automatically (and prints a dim log), letting one-tool servers like Vercel Domains run with only their arguments.
  • STDIO transports now inherit your current shell environment by default, so ad-hoc commands see the same variables as your terminal; keep --env KEY=value for explicit overrides.

Fixes

  • mcporter config list and mcporter config doctor no longer crash when the project config is missing or contains malformed JSON; we log a single warning and keep going, matching the behavior of the top-level mcporter list.

[0.5.1] - 2025-11-10

CLI & runtime

  • Added a per-login daemon that auto-starts when keep-alive MCP servers (e.g., Chrome DevTools, Mobile MCP, Playwright) are invoked. The daemon keeps STDIO transports alive across agents, exposes mcporter daemon <start|status|stop>, and supports idle shutdown plus manual restarts.
  • Keep-alive detection now honors the lifecycle config flag/env overrides and also inspects STDIO command signatures, so renaming chrome-devtools (or other stateful servers) no longer disables the daemon accidentally.
  • Introduced daemon logging controls (mcporter daemon start --log|--log-file, --log-servers, MCPORTER_DAEMON_LOG* env vars, and per-server logging.daemon.enabled). mcporter daemon status reports the active log path, and a new tests/daemon.integration.test.ts suite keeps the end-to-end flow covered.

Fixes

  • mcporter list (and every CLI entry point) once again treats missing project configs as empty instead of throwing ENOENT, matching the 0.4.x behavior when you run the CLI outside a repo.

[0.5.0] - 2025-11-10

CLI & runtime

  • Daemonized keep-alive servers. A new per-login daemon automatically spins up whenever keep-alive MCP servers (Chrome DevTools, Mobile MCP, Playwright, etc.) are invoked. It keeps STDIO transports warm across agents, exposes mcporter daemon <start|status|stop>, supports idle shutdowns/manual restarts, and respects the lifecycle config flag plus STDIO command metadata so renamed servers stay eligible.
  • Fixed createKeepAliveRuntime so the daemon wrapper’s listTools implementation matches the base Runtime signature; pnpm build (and any command that shells out to pnpm build) succeeds again.
  • Cursor imports now cover both workspace and user .cursor/mcp.json files plus the platform-specific Cursor/User/mcp.json directories, and the VS Code/Windsurf walkers dedupe paths so editor-managed MCP servers are auto-discovered consistently across macOS, Linux, and Windows.
  • Windows installs now enumerate .cursor/mcp.json, %USERPROFILE%\\.cursor\\mcp.json, %APPDATA%\\Cursor\\User\\mcp.json, .vscode/mcp.json, and the Windsurf/Codeium directories automatically, while STDIO transports on Windows tear down entire process trees via powershell.exe Get-CimInstance Win32_Process to avoid orphaned child servers.

[0.4.5] - 2025-11-10

CLI & runtime

  • Fixed the npm bin entry so it points to dist/cli.js without a leading ./, keeping the executable in the published tarball and restoring npx mcporter functionality. Also bumped the embedded runtime version to 0.4.4 so the CLI reports the correct release.
  • Added MCPORTER_CONFIG plus a home-directory fallback (~/.mcporter/mcporter.json[c]) so the CLI automatically finds your system-wide config when a project file is missing.

Docs

  • Consolidated the external MCP import matrix into docs/import.md, removing the short-lived docs/mcp-import.md duplication, and clarified the release checklist to stop immediately on failing tests or lint warnings.

[0.4.3] - 2025-11-10

CLI & runtime

  • Added OpenCode imports (project opencode.json[c], OPENCODE_CONFIG_DIR, user config, and the OPENCODE_CONFIG override) plus JSONC parsing so mcporter list/config can auto-discover servers defined in OpenCode.
  • Claude Code imports now honor .claude/settings.local.json and .claude/settings.json ahead of the legacy mcp.json, and we skip entries that lack a URL/command (e.g., permissions blocks) so malformed settings no longer break the merge.

Docs

  • Documented the full import matrix (including OpenCode + Claude settings hierarchy) directly in docs/import.md and docs/config.md.

[0.4.2] - 2025-11-09

CLI & runtime

  • mcporter list (and other commands that load imports) now skip empty or malformed Claude Desktop / Cursor / Codex config files instead of throwing, so a blank claude_desktop_config.json no longer blocks the rest of the imports.
  • Bundled sample config adds the Mobile Next MCP definition, making it available out of the box when you run mcporter list before customizing your own config.

[0.4.1] - 2025-11-08

CLI & runtime

  • Fixed the fallback when config/mcporter.json is missing so mcporter list continues to import Cursor/Claude/Codex/etc. configs even when you run the CLI outside a repo that defines its own config, matching the 0.3.x behavior.
  • Added regression coverage that exercises the “no config file” path to ensure future changes keep importing user-level MCP servers.

[0.4.0] - 2025-11-08

CLI & runtime

  • mcporter config list now displays only local entries by default, appends a color-aware summary of every imported config (path, counts, sample names), and still lets you pass --source import/--json for the merged view.
  • mcporter config get, remove, and logout now use the same fuzzy matching/suggestion logic as mcporter list/call, auto-correcting near-miss names and emitting “Did you mean …?” hints when ambiguity remains.

[0.3.6] - 2025-11-08

CLI & runtime

  • mcporter list now prints copy/pasteable examples for ad-hoc servers by repeating the HTTP URL (with quoting) so the commands shown under Examples: actually work before you persist the definition.

Code generation

  • Staged the actual dependency directories (commander, mcporter) directly into the Bun bundler workspace so npx mcporter generate-cli "npx -y chrome-devtools-mcp" --compile succeeds even when npm hoists dependencies outside the package (fixes the regression some users still saw with 0.3.5).

[0.3.5] - 2025-11-08

Code generation

  • Ensure the Bun bundler resolves commander/mcporter even when npx mcporter generate-cli … --compile runs inside an empty temp directory by symlinking mcporter’s own node_modules into the staging workspace before invoking bun build. This keeps the “one weird trick” workflow working post-0.3.4 without requiring extra installs.

[0.3.4] - 2025-11-08

CLI & runtime

  • Added a global --oauth-timeout <ms> flag (and the matching MCPORTER_OAUTH_TIMEOUT_MS override) so long-running OAuth handshakes can be shortened during debugging; the runtime now logs a clear warning and tears down the flow once the limit is reached, ensuring mcporter list/call/auth always exit.

Docs

  • Documented the new OAuth timeout flag/env var across the README and tmux/hang-debug guides so release checklists and manual repro steps call out the faster escape hatch.

[0.3.3] - 2025-11-07

Code generation

  • When a server definition omits description, mcporter generate-cli now asks the MCP server for its own instructions/serverInfo.title during tool discovery and embeds that value, so generated CLIs introduce themselves with the real server description instead of the generic “Standalone CLI…” fallback.
  • Embedded tool listings inside generated CLIs now show each command’s flag signature (no usage: prefix) separated by blank lines, and per-command --help output inherits the same colorized usage/option styling as the main mcporter binary for readability on rich TTYs.
  • Added a --bundler rolldown|bun flag to mcporter generate-cli, defaulting to Rolldown but allowing Bun’s bundler (when paired with --runtime bun) for teams that want to stay entirely inside the Bun toolchain. The generator now records the chosen bundler in artifact metadata and enforces the Bun-only constraint so reproduction via --from stays deterministic.
  • When Bun is installed (and therefore selected as the runtime), mcporter generate-cli now automatically switches the bundler to Bun as well—no need to pass --bundler bun manually—while keeping Rolldown as the default for Node runtimes.
  • Bundling with Bun copies the generated template into mcporter’s install tree before invoking bun build, ensuring local commander/mcporter dependencies resolve even when the user runs the generator from an empty temp directory.

[0.3.2] - 2025-11-07

CLI

  • Embedded the CLI version so Homebrew/Bun builds respond to mcporter --version even when package.json is unavailable.
  • Revamped mcporter --help to mirror the richer list/call formatting (name + summary rows, grouped sections, quick-start examples, and ANSI colors when TTYs are detected).
  • Fixed mcporter list so it no longer errors when config/mcporter.json is absent—fresh installs now run without creating config files, and a regression test guards the optional-config flow.
  • Generated standalone CLIs now print the full help menu (same grouped layout as the main CLI) when invoked without arguments, matching the behavior of mcporter itself.

Code generation

  • Generated binaries now default to the current working directory (using the inferred server name) when --compile is provided without a path, and automatically append a numeric suffix when the target already exists.
  • Standalone CLIs inherit the improved help layout (color-aware title, grouped command summaries, embedded tool listings, and quick-start snippets) so generated artifacts read the same way as the main CLI.
  • Swapped the bundler from esbuild to Rolldown for both JS and Bun targets, removing the fragile per-architecture esbuild binaries while keeping aliasing for local dependencies and honoring --minify via Rolldown’s native minifier.
  • Improved generate-cli so inline stdio commands (e.g., "npx chrome-devtools-mcp") parse correctly even when invoked from empty directories.

Code generation

  • readPackageMetadata() now tolerates missing package.json files; when invoked from a directory without a manifest it falls back to mcporter’s own version string, so generate-cli works even when you call it via npx in an empty folder.

[0.3.1] - 2025-11-07

CLI & runtime

  • Short-circuited global --help / --version handling so these flags no longer fall through command inference and always print immediately, regardless of which command the user typed first.
  • Added regression coverage for the new shortcuts and kept the existing runCli helper exported so tests (and downstream tools) can exercise argument parsing without forking the entire process.

Code generation & metadata

  • Fixed mcporter generate-cli --bundle/--compile in empty directories by aliasing commander/mcporter imports to the CLI’s own installation so esbuild always resolves dependencies. Verified with a new fixture that bundles from temp dirs without node_modules (fixes #1).
  • Added an end-to-end integration test that runs node dist/cli.js generate-cli twice—once for bundling and once for --compile—as well as a GitHub Actions step that installs Bun so CI exercises the compiled binary path on every PR.

[0.3.0] - 2025-11-06

CLI & runtime

  • Added configurable log levels (--log-level / MCPORTER_LOG_LEVEL) that default to warn, promoting noisy transport fallbacks to warnings so critical issues still surface.
  • Forced the CLI to exit cleanly after shutdown (opt out with MCPORTER_NO_FORCE_EXIT) and patched StdioClientTransport so stdio MCP servers no longer leave Node handles hanging; stderr from stdio servers is buffered and replayed via MCPORTER_STDIO_LOGS=1 or whenever a server exits with a non-zero status.

Discovery, calling, and ad-hoc workflows

  • Rebuilt mcporter list: spinner updates stream live, summaries print only after discovery completes, and single-server views now render TypeScript-style doc blocks, inline examples, inferred return hints, and compact // optional (N): … summaries. The CLI guarantees at least five parameters before truncating, introduced a single --all-parameters switch (replacing the --required-only / --include-optional pair), and shares its formatter with mcporter generate-cli so signatures are consistent everywhere.
  • Verb inference and parser upgrades let bare server names dispatch to list, dotted invocations jump straight to call, colon-delimited flags (key:value / key: value) sit alongside key=value, and the JavaScript-like call syntax now supports unlabeled positional arguments plus typo correction heuristics when tool names are close but not exact.
  • Ad-hoc workflows are significantly safer: --http-url / --stdio definitions (with --env, --cwd, --name, --persist) work across list, call, and auth, mcporter reuses existing config entries when a URL matches (preserving OAuth tokens / redirect URIs), and mcporter auth <url> piggybacks on the same resolver to persist entries or retry when a server flips modes mid-flight.
  • Hardened OAuth detection automatically promotes ad-hoc HTTP servers that return 401/403 to auth: "oauth", broadens the unauthorized heuristic for Supabase/Vercel/GitHub-style responses, and performs a one-time retry whenever a server switches into OAuth mode while you are connecting.

Code generation & metadata

  • Generated CLIs now embed their metadata (generator version, resolved server definition, invocation flags) behind a hidden __mcporter_inspect command. mcporter inspect-cli / mcporter generate-cli --from <artifact> read directly from the artifact, while legacy .metadata.json sidecars remain as a fallback for older binaries.
  • Shared the TypeScript signature formatter between mcporter list and mcporter generate-cli, ensuring command summaries, CLI hints, and generator help stay pixel-perfect and are backed by new snapshot/unit tests.
  • Introduced mcporter emit-ts, a codegen command that emits .d.ts tool interfaces or ready-to-run client wrappers (--mode types|client, --include-optional) using the same doc/comment data that powers the CLI, so agents/tests can consume MCP servers with strong TypeScript types.
  • mcporter generate-cli now accepts inline stdio commands via --command "npx -y package@latest" or by quoting the command as the first positional argument, automatically splits the command/args, infers a friendly name from scripts or package scopes, and documents the chrome-devtools one-liner in the README; additional unit tests cover HTTP, stdio, scoped package, and positional shorthand flows.

Documentation & references

  • Added docs/tool-calling.md, docs/call-syntax.md, and docs/call-heuristic.md to capture every invocation style (flags, function expressions, inferred verbs) plus the typo-correction rules.
  • Expanded the ad-hoc/OAuth story across README.md, docs/adhoc.md, docs/local.md, docs/known-issues.md, and docs/supabase-auth-issue.md, detailing when servers auto-promote to OAuth, how retries behave, and how to persist generated definitions safely.
  • Updated the README, CLI reference, and generator docs to cover the new --all-parameters flag, list formatter, metadata embedding, the mcporter emit-ts workflow, and refreshed branding so the CLI and docs consistently introduce the project as MCPorter.
  • Tightened docs/RELEASE.md with a zero-warning policy so pnpm check, pnpm test, npm pack --dry-run, and friends must run clean before publishing.
  • mcporter call now rejects unknown long flags like --source instead of silently treating them as positional tool arguments; use key=value, --args, or -- for literal --value positionals (PR #35, thanks @beverm2391).

[0.2.0] - 2025-11-06

  • Added non-blocking mcporter list output with per-server status and parallel discovery.

  • Introduced mcporter auth <server> helper (and library API support) so OAuth flows don’t hang list calls.

  • Set the default list timeout to 30 s (configurable via MCPORTER_LIST_TIMEOUT).

  • Tuned runtime connection handling to avoid launching OAuth flows when auto-authorization is disabled and to reuse cached clients safely.

  • Added mcporter auth <server> --reset to wipe cached credentials before rerunning OAuth.

  • mcporter list now prints [source: …] (and Source: in single-server mode) for servers imported from other configs so you can see whether an entry came from Cursor, Claude, etc.

  • Added a --timeout <ms> flag to mcporter list to override the per-server discovery timeout without touching environment variables.

  • Generated CLIs now show full command signatures in help and support --compile without leaving template/bundle intermediates.

  • StdIO-backed MCP servers now receive resolved environment overrides, so API keys flow through to launched processes like obsidian-mcp-server.

  • Hardened the CLI generator to surface enum defaults/metadata and added regression tests around the new helper utilities.

  • Generated artifacts now emit <artifact>.metadata.json files plus mcporter inspect-cli / mcporter regenerate-cli workflows (with --dry-run and overrides, now handled via generate-cli --from <artifact>) so binaries can be refreshed after upgrading mcporter.

  • Fixed mcporter call <server> <tool> so the second positional is treated as the tool name instead of triggering the "Argument must be key=value" error, accepted tool=/command= selectors now play nicely with additional key=value payloads, and added a default call timeout (configurable via MCPORTER_CALL_TIMEOUT or --timeout) that tears down the MCP transport—clearing internal timers and ignoring blank env overrides—so long-running or completed tools can’t leave the CLI hanging open.

[0.1.0]

  • Initial release.

[0.6.2] - 2025-11-18

Platform resilience (Windows/WSL)

  • Added fs-helpers that treat chmod/copy failures on NTFS/DrvFs as best-effort so CLI generation keeps working on WSL mounts.
  • Documented Windows/WSL workflows: install/test from ext4 copies, remount guidance for /mnt/c, and syncing tips.

CLI/runtime

  • Global flag parsing moved into cli-factory for consistent log-level/oauth-timeout handling across commands.
  • daemon host/client hardened and covered with new tests; idle eviction and restart paths verified.
  • Imports now include platform-aware defaults for Cursor/Claude/Windsurf/VS Code/OpenCode configs with path dedupe.

StdIO MCP coverage

  • Added stdio e2e tests using in-repo filesystem & memory MCP fixtures to ensure list/call works via execPath.

Content extraction

  • createCallResult now reads nested raw.content/raw.structuredContent so tools that wrap responses render text/markdown/json correctly; new unit tests cover text joining, markdown, and JSON.

Docs

  • New docs/windows.md with WSL/NTFS tips; added to docs index.