Tags: 4mica-Network/mcpc
Tags
Install mcpc with Homebrew via apify/homebrew-tap (apify#357) Lets macOS and Linux users install mcpc with `brew install apify/tap/mcpc` instead of setting up Node.js or Bun first. The formula lives in [apify/homebrew-tap](https://github.com/apify/homebrew-tap) next to `apify-cli` (added in apify/homebrew-tap#55). Its bump is started **manually for now** — the release workflow only prints the `gh workflow run` command in its run summary rather than dispatching it. That workflow points `Formula/mcpc.rb` at the new npm tarball, installs and `brew test`s it on Linux and macOS, then merges the bump. - README documents Homebrew as the first install option - Changelog entry, plus the manual bump command in the release section of `CLAUDE.md` - The release step is last and `continue-on-error`, so nothing Homebrew-related can fail a release that is already tagged, published to npm and announced - Skipping a bump only leaves Homebrew users on the previous version; npm and Bun installs are unaffected Merge apify/homebrew-tap#55 before the first bump, otherwise there is no formula to update. Fixes apify#355 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01BcRjUSnuwKjKhQRgKQ1zzv --------- Co-authored-by: Claude <noreply@anthropic.com>
Add `server-discover` command for MCP 2026-07-28 connections (apify#354) MCP 2026-07-28 removed `ping`, so `mcpc @session ping` silently probes with `server/discover` instead — invisible until it shows up in a server's access log, with no way to see what that request returns. This adds a command that says what it does. - `mcpc @session server-discover` sends `server/discover` and reports the answer: supported protocol versions (negotiated one marked), capabilities, instructions, `_meta`. `--json` prints the `DiscoverResult` verbatim. - On 2025-era connections it refuses (exit 2) and points at `mcpc @session`, whose `initialize` result carries the same data. - `ping` output now names the request it measured; `ping --json` is unchanged. - Capability rendering extracted so both screens share it; `SERVER_INFO_META_KEY` mirrored in the dependency-free `protocol.ts` with an SDK drift test. - New `basic/server-discover.test.sh` e2e suite (one branch per protocol era); README, CHANGELOG and the agent skill updated. Refs apify#316 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01KHDUfie1HZtvSiqFNTYs17 --- _Generated by [Claude Code](https://claude.ai/code/session_01KHDUfie1HZtvSiqFNTYs17)_ Co-authored-by: Claude <noreply@anthropic.com>
Fix flaky sessions/logs E2E test racing the bridge on sessions.json (a… …pify#351) The Windows/Bun leg of the last release run failed on `sessions/logs` test 10 with `Session not found: @fold-...`. Suites that inject synthetic session entries did an unlocked `jq ... > tmp && mv` on `sessions.json` while a live bridge rewrote the same file on every keepalive ping — when the bridge loaded the file before the `mv` and saved after it, the injected entry vanished. Test-only flake, no product bug. - Add an `edit_sessions_json` framework helper that takes the same `proper-lockfile` lock mcpc uses (the `<file>.lock` directory, created with `mkdir`) - Break the lock once after 10s, matching proper-lockfile's staleness rule, so a SIGKILLed bridge's leaked lock can't hang a suite - Route the five unlocked fixture edits through it: three in `sessions/logs`, one each in `unauthorized-auto-detect` and `unauthorized-persist` Verified against a keepalive-style concurrent writer: the old pattern lost 2 of 60 injected entries, the helper lost 0 of 60. Full `sessions/` suite (18 tests) passes. Refs https://github.com/apify/mcpc/actions/runs/30614984280 https://claude.ai/code/session_01LV8fLqLtF7s3VMqiL73qfv Co-authored-by: Claude <noreply@anthropic.com>
Clarify the MCP version label and the --json help on session details (a… …pify#340) Two wording fixes on the session details screens. `MCP version:` looked like it also titled the transport after the slash, and the `JSON output (--json):` block under `mcpc @session --help` read as if it applied to all the subcommands listed above it. - `MCP version: 2025-11-25 / Streamable HTTP (stateful)` → `MCP: version 2025-11-25 / Streamable HTTP (stateful)` - session details `--json` help is now one inline sentence with the shape, dropping the extra `_mcpc` field breakdown - `connect`, `restart` and `mcpc @session` now share one wording and one shape example (`connect` wraps it in an array, which is what it returns) Refs apify#336 https://claude.ai/code/session_01BdeG5Pz7tSKWbTd7uG6Dx4 --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Fix conformance tools_call scenario after the --task gate change (api… …fy#331) apify#329 made `tools-call --task` fail with a server error when the server doesn't advertise `tasks.requests.tools.call`, instead of warning and falling back to a synchronous call. The conformance adapter still ran that command expecting exit 0, so the `conformance / tools_call` job failed and gated the release ([run](https://github.com/apify/mcpc/actions/runs/30302773413/job/90099506437)) — the scenario's own server-side checks passed 2/2, only the adapter's exit code failed it. Test-harness only, no behaviour change. - `runMcpc()` takes an `expectExitCode` option (default `0`) - The `tools_call` scenario now asserts the `--task` call exits with code 2, so the gate stays guarded instead of being swallowed - Refreshed the stale comment that still described the old fallback Refs apify#329 https://claude.ai/code/session_01AxYXW15gWXNWFPpSGqQTLV Co-authored-by: Claude <noreply@anthropic.com>
Persist server capabilities and instructions for session resumption (a… …pify#328) Resuming a stateful HTTP session reuses the server-side session and so skips the `initialize` handshake, leaving the SDK client with no capabilities and no instructions. After a crash-recovery restart the session showed no capabilities, `grep` no longer found the server instructions, and `resources-subscribe` wrongly refused with "server does not support resource subscriptions". - Persist capabilities and instructions in `sessions.json` at the connect that performs the handshake, and restore them for the lifetime of a resumed bridge - Route every bridge-side read through one helper, so the subscribe pre-check, the tools-cache warmup and the `--proxy` server all see the restored values - Skip instructions larger than 32 KB, and keep them out of the `mcpc --json` session list (they can be kilobytes per session) - Extend the resume e2e test with capabilities, instructions and a `resources-subscribe` round trip (verified to fail without the fix) Fixes apify#325. Refs apify#324. https://claude.ai/code/session_01YRqAADGF3hWDQ83t4FvtHJ --------- Co-authored-by: Claude <noreply@anthropic.com>
Add --mcp-version flag to pin MCP protocol version (apify#320) Adds `--mcp-version <version>` to `mcpc connect` (and an `mcpVersion` field in mcp.json entries) to pin the MCP protocol version instead of auto-negotiating. The pin is strict: the connection fails with an actionable error unless the server agrees to exactly the requested version. - Modern pin (2026-07-28) maps to the SDK's `{ pin }` mode; legacy pins run the plain `initialize` handshake offering only the pinned version - Pin persists in sessions.json (survives `restart`) and shows as `(pinned)` in `mcpc @session` - Supported versions live in a dependency-free `src/core/protocol.ts` (CLI startup never loads the SDK); a unit test guards drift against the SDK's list - New e2e suite runs in both eras of the protocol matrix; docs/help/skill updated Refs apify#314 https://claude.ai/code/session_01DCJziR1mQfJk9XynQCwsFx Co-authored-by: Claude <noreply@anthropic.com>
PreviousNext