Skip to content

Commit f04b105

Browse files
jancurnclaude
andauthored
Consolidate changelog for upcoming release (#83)
Merge duplicate sections, remove test-only entries, deduplicate the logging-set-level fix, and reorder entries by importance within each category. https://claude.ai/code/session_01STkPizj5hkX1e12YWw6dkG Co-authored-by: Claude <noreply@anthropic.com>
1 parent fc626e6 commit f04b105

File tree

1 file changed

+36
-53
lines changed

1 file changed

+36
-53
lines changed

CHANGELOG.md

Lines changed: 36 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,79 +7,62 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10-
### Fixed
10+
### Changed
1111

12-
- Session restart now auto-detects the `default` OAuth profile created after the session was established, fixing the `login` then `restart` flow for unauthorized sessions
12+
- **Breaking:** CLI syntax redesigned to command-first style. All commands now start with a verb; MCP operations require a named session.
1313

14-
### Changed
14+
| Before | After |
15+
| --------------------------------------------- | ---------------------------------------------------------- |
16+
| `mcpc <server> tools-list` | `mcpc connect <server> @name` then `mcpc @name tools-list` |
17+
| `mcpc <server> connect @name` | `mcpc connect <server> @name` |
18+
| `mcpc <server> login` | `mcpc login <server>` |
19+
| `mcpc <server> logout` | `mcpc logout <server>` |
20+
| `mcpc --clean=sessions` | `mcpc clean sessions` |
21+
| `mcpc --config file.json entry connect @name` | `mcpc connect file.json:entry @name` |
22+
23+
Direct one-shot URL access (e.g. `mcpc mcp.apify.com tools-list`) is removed; create a session first with `mcpc connect`.
1524

1625
- Renamed `--async` flag to `--task` in `tools-call` for consistency with MCP specification; `--detach` now implies `--task`
17-
- `[async]` annotation in `tools-list` and `tools-get` replaced with `[task:optional]`, `[task:required]`, or `[task:forbidden]`
26+
- Revised session states: auth failures (401/403) now show as `unauthorized` (separate from `expired` which is for session ID expiry), with actionable login guidance; new `disconnected` state surfaces when bridge is alive but server has been unreachable for >2 minutes
1827
- When `--profile` is not specified, only the `default` profile is used; non-default profiles require an explicit `--profile` flag
19-
- Revised session states: auth failures (401/403) now show as `unauthorized` (separate from `expired` which is for session ID expiry), with actionable login guidance; new `disconnected` display state surfaces when bridge is alive but server has been unreachable for >2 minutes
20-
- `DISCONNECTED_THRESHOLD_MS` is now derived from `KEEPALIVE_INTERVAL_MS` (2× ping interval + 5s buffer) via shared constants, eliminating duplicate magic numbers
21-
- Tools cache now fetches all pages (not just the first) on startup and on `tools/list_changed` notifications
22-
- `listAllTools` now uses bridge cache by default (no server call), with `refreshCache` option to bypass; replaces separate `getCachedTools` method
23-
- `tools-get` uses cached tools list first and only re-fetches from server if the tool is not found
24-
- `x402 sign` now takes the PAYMENT-REQUIRED header as a positional argument instead of `-r` flag (e.g. `mcpc x402 sign <base64>` instead of `mcpc x402 sign -r <base64>`)
28+
- `@napi-rs/keyring` native addon is now loaded lazily: `mcpc` starts and works normally even when `libsecret` (Linux) or the addon itself is missing; a one-time warning is emitted and credentials fall back to `~/.mcpc/credentials.json` (mode 0600)
29+
- `x402 sign` now takes the PAYMENT-REQUIRED header as a positional argument instead of `-r` flag (e.g. `mcpc x402 sign <base64>`)
30+
- `tools-list` and `tools-get` now show `[task:optional]`, `[task:required]`, or `[task:forbidden]` instead of `[async]`
31+
- Tools cache now fetches all pages on startup and on `tools/list_changed` notifications; `tools-get` uses cached list first and only re-fetches if the tool is not found
32+
- `--header` / `-H` option is now specific to the `connect` command instead of being shown as a global option
2533

2634
### Added
2735

28-
- `tools-list` now shows inline parameter signatures (e.g. `read_file(path: string, +4 optional)`) for quick scanning without `--full`
29-
- `mcpc @session` now shows available tools list from bridge cache (no extra server call)
30-
- x402 payments are now also sent via the MCP `_meta["x402/payment"]` field on `tools/call` requests, in addition to the existing HTTP `PAYMENT-SIGNATURE` header — servers can choose which mechanism to consume
31-
- `_meta` parameter threaded through the full tool call chain (`IMcpClient`, `SessionClient`, bridge IPC, `McpClient`) for forward compatibility
32-
- `mcpc login` now falls back to accepting a pasted callback URL when the browser cannot be opened (e.g. headless servers, containers)
33-
- `--task` flag for `tools-call` to opt-in to task execution (experimental) with a progress spinner showing elapsed time, server status messages, and progress notification messages in human mode
34-
- `--detach` flag for `tools-call` to start a task and return the task ID immediately without waiting for completion (implies `--task`)
35-
- Press ESC during `--task` task execution to detach on the fly — the task continues in the background and the task ID is printed, same as `--detach`
3636
- New `tasks-list`, `tasks-get`, `tasks-cancel` commands for managing async tasks on the server
37-
- Task capability and `execution.taskSupport` displayed in `tools-get` and server info
38-
- E2E test server now includes a `slow-task` tool that supports task execution
39-
- E2E tests for task execution, detached mode, task management (list/get/cancel), and synchronous fallback
40-
- `[task:optional|required|forbidden]` indicator in `tools-list` output for tools with task support
37+
- `--task` flag for `tools-call` to opt-in to task execution with a progress spinner showing elapsed time, server status messages, and progress notifications in human mode
38+
- `--detach` flag for `tools-call` to start a task and return the task ID immediately without waiting for completion (implies `--task`)
39+
- Press ESC during `--task` execution to detach on the fly — the task continues in the background and the task ID is printed
4140
- `--insecure` global option to skip TLS certificate verification, for MCP servers with self-signed certificates
42-
- E2E test for `--insecure` flag using a self-signed HTTPS test server wrapper
4341
- `--client-id` and `--client-secret` options for `mcpc login` command, for servers that don't support dynamic client registration
44-
- `mcpc close @session`, `mcpc restart @session`, and `mcpc shell @session` command-first syntax as alternatives to `mcpc @session close/restart/shell`
45-
- E2E tests now run under the Bun runtime (in addition to Node.js); use `./test/e2e/run.sh --runtime bun` or `npm run test:e2e:bun`
4642
- `--no-profile` option for `connect` command to skip OAuth profile auto-detection and connect anonymously
43+
- `mcpc close @session`, `mcpc restart @session`, and `mcpc shell @session` command-first syntax as alternatives to `mcpc @session close/restart/shell`
44+
- `mcpc login` now falls back to accepting a pasted callback URL when the browser cannot be opened (e.g. headless servers, containers)
45+
- `tools-list` now shows inline parameter signatures (e.g. `read_file(path: string, +4 optional)`) for quick scanning without `--full`
46+
- `mcpc @session` now shows available tools list from bridge cache (no extra server call)
47+
- Task capability and `execution.taskSupport` displayed in `tools-get` and server info
48+
- x402 payments are now also sent via the MCP `_meta["x402/payment"]` field on `tools/call` requests, in addition to the existing HTTP header
4749

4850
### Fixed
4951

50-
- `--task` and `--detach` tool calls now correctly send task creation parameters to the server, fixing "task stream ended without creating a task" errors
51-
- File lock retries now use randomized exponential backoff to reduce contention when multiple processes compete for the same lock
5252
- Explicit `--header "Authorization: Bearer ..."` is no longer silently ignored when a default OAuth profile exists for the same server; explicit CLI headers now take precedence over auto-detected profiles
5353
- Combining `--profile` with `--header "Authorization: ..."` now returns a clear error instead of silently stripping the header
54-
- `logTarget` no longer prints a misleading `[→ @name (HTTP)]` prefix when a session doesn't exist; only the error message is shown
55-
- `logging-set-level` JSON output no longer includes a `success` field; output is now `{"level":"<level>"}` consistent with the project's convention of indicating errors via exit codes
56-
- `--header` / `-H` option is now specific to the `connect` command instead of being shown as a global option in `mcpc --help`
57-
- Bridge now forwards `logging/message` notifications from the MCP server to connected clients, so `logging-set-level` actually takes effect in interactive shell sessions
58-
- IPC buffer between CLI and bridge process is now capped at 10 MB; sockets are destroyed if the limit is exceeded, preventing unbounded memory growth
59-
- `validateOptions()` no longer includes subcommand-specific options (`--full`, `--x402`, `--proxy`, etc.) in global known-options list; misplaced flags now produce clear "Unknown option" errors instead of confusing Commander rejections
54+
- Session restart now auto-detects the `default` OAuth profile created after the session was established, fixing the `login` then `restart` flow for unauthorized sessions
6055
- Sessions requiring authentication now correctly show as `expired` instead of `live` when the server rejects unauthenticated connections
6156
- Auth errors wrapped in `NetworkError` by bridge IPC are now detected on first health check, avoiding unnecessary bridge restart
62-
- Fixed flaky E2E invariant check that failed when `lastSeenAt` changed between `--json` and `--json --verbose` calls
6357
- `--timeout` flag now correctly propagates to MCP requests via session bridge
64-
- `parseServerArg()` now handles well Windows drive-letter config paths as well as other ambiguous cases
65-
- `logging-set-level` JSON output no longer includes redundant `success` field
66-
67-
### Changed
68-
69-
- **Breaking:** CLI syntax redesigned to command-first style. All commands now start with a verb; MCP operations require a named session.
70-
71-
| Before | After |
72-
| --------------------------------------------- | ---------------------------------------------------------- |
73-
| `mcpc <server> tools-list` | `mcpc connect <server> @name` then `mcpc @name tools-list` |
74-
| `mcpc <server> connect @name` | `mcpc connect <server> @name` |
75-
| `mcpc <server> login` | `mcpc login <server>` |
76-
| `mcpc <server> logout` | `mcpc logout <server>` |
77-
| `mcpc --clean=sessions` | `mcpc clean sessions` |
78-
| `mcpc --config file.json entry connect @name` | `mcpc connect file.json:entry @name` |
79-
80-
Direct one-shot URL access (e.g. `mcpc mcp.apify.com tools-list`) is removed; create a session first with `mcpc connect`.
81-
82-
- `@napi-rs/keyring` native addon is now loaded lazily: `mcpc` starts and works normally even when `libsecret` (Linux) or the addon itself is missing; a one-time warning is emitted and credentials fall back to `~/.mcpc/credentials.json` (mode 0600)
58+
- `--task` and `--detach` tool calls now correctly send task creation parameters to the server
59+
- Bridge now forwards `logging/message` notifications from the MCP server to connected clients, so `logging-set-level` actually takes effect in interactive shell sessions
60+
- IPC buffer between CLI and bridge process is now capped at 10 MB, preventing unbounded memory growth
61+
- `parseServerArg()` now handles Windows drive-letter config paths and other ambiguous cases
62+
- Misplaced subcommand-specific flags (e.g. `--full`, `--proxy`) now produce clear "Unknown option" errors instead of confusing rejections
63+
- `logging-set-level` JSON output no longer includes a redundant `success` field
64+
- `logTarget` no longer prints a misleading prefix when a session doesn't exist
65+
- File lock retries now use randomized exponential backoff to reduce contention
8366

8467
## [0.1.10] - 2026-03-01
8568

0 commit comments

Comments
 (0)