ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/AnyEvent-MCP/Changes
Revision: 1.72
Committed: Sat Nov 7 13:53:12 2026 UTC (4 days, 8 hours ago) by root
Branch: MAIN
Changes since 1.71: +4 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.2 Revision history for AnyEvent::MCP
2    
3 root 1.64 0.83 (unreleased)
4 root 1.72 - keep mcp-imap connections alive with an idle NOOP (250 seconds by
5     default, configurable via --keepalive, 0 disables); stop pinging
6     on failure, and reconnect on the next tool call without retrying
7     interrupted operations.
8 root 1.69 - allow shell-friendly instance names (ASCII alphanumerics, underscore,
9     hyphen, dot, @ and +), with separate strict managed-user names.
10     - fold small state-file locking and atomic replacement helper into
11     MCP.pm instead of a separate AnyEvent::MCP::File module.
12     - make --ask a shared common option, with per-option exclusion;
13     add --ask none to deny unresolved permissions and decline
14     downstream elicitation without prompting.
15 root 1.71 - document mcp-imap login keys individually in --help and manpage;
16     support tls connect/starttls/none (including explicit unencrypted IMAP)
17     and reset default ports on TLS mode changes.
18     - report LOGINDISABLED with no supported SASL mechanism cleanly on
19     IMAP password login, without obscure Authen::SASL warnings.
20 root 1.70 - add mcp_permissions to Simple: default permission engine, explicit
21     object or explicit undef; apply --ask and automatic rule overrides
22     centrally without dropping application-supplied automatic rules.
23 root 1.68 - give mcp-fs writable private /tmp and /var/tmp (mode 1777) even
24     with world-read; only shared-tmp or world-write exposes host
25     temporary directories. Make world-write formally imply shared-tmp
26     for permission checks; document the private/host lifetime distinction.
27     - add read-only mcp-imap previews for 25 UIDs, with bounded partial
28     MIME decoding, HTML link preservation and grouped IMAP FETCH calls.
29     - allow mcp-imap messages to fetch selected UIDs without SEARCH.
30     - actually truncate bounded IMAP part/raw responses to max_bytes,
31     not just flag them as truncated.
32 root 1.67 - use a 15-second HTTP read-inactivity timeout by default, suspended
33     while processing complete requests; respect explicit handle rtimeout.
34     - load MIME::Base64 in the HTTP server itself for encoded modern
35     Mcp-Name headers, without depending on the HTTP client loading it.
36 root 1.66 - log ordinary HTTP 404 responses at trace rather than warn,
37     including GET /; keep other HTTP rejection warnings.
38 root 1.65 - reuse the latest saved per-dimension scope as the next permission
39     rule editor's default where offered, otherwise keep the original
40     conservative choice; native, YAD and terminal forms agree.
41     - handle the common token-only HTTP endpoint in warning logs:
42     redact known tokens without misclassifying unrelated paths.
43     - include bounded, JSON-escaped request paths in rejected HTTP request
44     warnings; omit queries and redact configured and attempted URL tokens.
45 root 1.64 - show captured helper status, stderr and stdout when the permission
46     UI test fails, and report remote file-patch results and file content
47     when the mock remote filesystem test fails (CPAN Testers diagnostics).
48    
49 root 1.63 0.82 Fri 06 Nov 2026 15:53:46 CET
50     - add a first-permission-dialog walkthrough to Intro.pod, explaining
51     one-time versus persistent grants, rule scopes and exec stdin risks;
52     correct its description of logical workdir IDs.
53 root 1.62 - add common repeatable -s/--set KEY=VALUE process-local overrides
54     for trusted instance configuration, after program/instance defaults.
55     - key remote mcp-fs host permissions by --host alone, independent of
56     --rsh; add independent local/remote host scopes (this host by
57     default, or all hosts), retaining old unscoped saved rules.
58     Workdir scopes remain plain paths, independent of host.
59     - omit single-choice permission scope selectors from native, YAD and
60     terminal rule dialogs, automatically retaining the sole match in
61     saved rules without broadening their applicability.
62 root 1.60 - log rejected HTTP requests (status 400 and above) with method,
63     status and peer information, without leaking URL tokens; demote
64 root 1.61 ordinary connection/TLS errors to trace.
65 root 1.62 - do not warn on routine GET / requests; keep the normal 404
66     response without exposing a server-identification page.
67     - preserve mcp-vim subprocess stderr when its JSONL initialization
68     fails, instead of hiding the failure behind EOF and SIGPIPE.
69 root 1.57 - bootstrap remote mcp-fs over a short Perl command, streaming the
70     launcher source over stdin. Avoid rsh command length limits and
71     preserve worker input across exec by using exact sysread.
72 root 1.58 - format mcp-fs sandbox grants, tools, trusted configuration keys
73     and permission action classes as individually searchable POD items.
74 root 1.62 - give the mock remote filesystem test its running Perl interpreter
75     explicitly, rather than assuming it is in a fixed Unix PATH.
76     - avoid locale-dependent TCP error strings in reverse-connection tests,
77     and skip mcp-imap provider CLI tests when optional fork modules
78     are unavailable while retaining standalone provider parser tests.
79 root 1.57
80 root 1.56 0.81 Thu 05 Nov 2026 04:51:59 CET
81 root 1.55 - keep OAuth2 tests working without optional Mail::IMAPTalk,
82     IO::Socket::SSL or Authen::SASL; skip only worker-specific checks.
83     - support optional `mount-try.SUFFIX = ro:/path` or `rw:/path` in
84     mcp-fs configuration. Pass these directly as bubblewrap
85     --ro-bind-try/--bind-try for each invocation, without startup path
86     checks, locally and remotely; required mount.* entries are unchanged.
87     - support one remote host per mcp-fs instance with -h/--host and
88     -e/--rsh; resolve remote workdirs and available tools in a single
89     startup probe, then execute existing workers through a binary-framed
90     remote Perl launcher without installing any MCP modules remotely.
91 root 1.56 - use logical absolute pathnames (without resolving symlinks) as compact
92     workdir IDs across hosts; qualify remote permission scopes independently.
93     Named profiles remain shared between instances. Report cached remote
94     VCS markers and remote umask.
95 root 1.55 - reserve -h for application-specific options; --help remains common.
96     - test remote workers, external GNU utilities, permission isolation,
97     shell argument quoting and startup probing using a mock remote shell
98     and bubblewrap, including unsandboxed/auto behavior. Verify matching
99 root 1.56 workdir IDs for identical logical paths across local and remote
100 root 1.55 instances.
101     - make mock remote-agent tests independent of a local SSH_AUTH_SOCK
102     inherited from the test runner (including CPAN Testers).
103     - document --eager when starting mcp-webbrowser through multibroker;
104     defer possible downstream preferences for --eager and --hidden.
105    
106 root 1.53 0.8 Thu 05 Nov 2026 01:52:48 CET
107 root 1.49 - INCOMPATIBLE CHANGE: due to the added user management, existing
108     url tokens have been invalidated.
109 root 1.54 - limit distribution permission normalization to its staging
110     directory, and supply proper CPAN author and abstract metadata.
111 root 1.52 - give shared command-line switches their own reference in
112     Server::Simple; use individually indexed POD items for executable
113     options and application-specific shared-option behavior.
114 root 1.51 - refresh the introductory guide and mcp-imap/mcp-http manuals
115     with first-use workflows, OAuth2 setup, mailbox/search examples
116     and reverse-TLS troubleshooting; correct stale retry documentation.
117 root 1.50 - extend mcp-imap SEARCH filters with recursive AND/OR/NOT, header,
118     text/body, date, size and flag criteria; use explicitly quoted
119     IMAP arguments and bounded filter complexity.
120     - capture deliberately triggered connection errors in test assertions,
121     avoiding noisy successful test runs.
122 root 1.49 - expose IMAP LSUB to inspect subscribed mailboxes, alongside
123     subscribe/unsubscribe; return the same format as LIST.
124     - remove superseded IMAP OAuth provider and pagination prototypes
125     and their obsolete reference tests.
126 root 1.51 - defer outgoing mail submission research (mcp-smtp or mcp-imap)
127     in TODO.md.
128 root 1.48 - retry reverse connections only for TCP connection refusal and
129     unexpected disconnects; report and stop on other TCP errors or
130     TLS handshake/verification failures.
131     - force scalar context when checking Mail::IMAPTalk results;
132     list context truncated LIST responses and could corrupt SEARCH
133     results. Test with context-sensitive IMAP mocks.
134     - report HTTPS reverse-connection handshake failures rather than
135     silently retrying; send credentials only after verified TLS succeeds.
136     - omit pointless mailbox permission dimension for mcp-imap mailboxes.
137     - clarify expected OAuth redirect error page and account selection.
138     - implement mcp-imap OAuth2 authorization-code login with PKCE,
139     human-pasted headless browser redirect, HTTPS token exchange,
140     refresh-token persistence/rotation and IMAP SASL XOAUTH2.
141     Keep interactive credentials outside MCP tools and argv.
142     - omit unnecessary shell quotes in mcp-imap providers commands.
143     - expand mcp-imap providers with Thunderbird ISPDB domain search,
144     provider-hosted HTTPS autoconfig lookup and ISPDB fallback,
145     password-based IMAP alternatives and provider setup instructions;
146     continue printing optional OAuth configuration without saving it.
147 root 1.47 - add per-downstream --hidden to mcp-multibroker, omitting a
148     server's tools from normal discovery while retaining explicit
149     list-tools, discover-brokers and call-tool access.
150 root 1.46 - number the user management test consecutively as t/27_users.t.
151 root 1.45 - tidy Perl import grouping, internal comments and source layout
152     in the command-line tools and library modules.
153     - stop imposing an IMAP account file mode check; access is governed
154     by ordinary filesystem permissions.
155 root 1.44 - use the permission engine's literal matching convention for exact
156     user identities and test positive permission-scope validation.
157     - reject invalid browser WebSocket credentials via the documented
158     handshake exception interface, producing one specific warning.
159     - apply the same handshake rejection handling to Vim WebSocket
160     connections, including peer and invalid-token/path warnings.
161     - document user-management scopes and URL examples in command help.
162 root 1.43 - add scoped, revocable MCP users with HKDF-derived credentials,
163     an implicit global default user, and atomic user management;
164     list effective user URLs with --print-url[=USER], also accepting
165     --print-urls, without binding the advertised listener port.
166     - associate HTTP credentials with per-request users, bind user
167     identity to persistent permissions and permission continuations,
168     and delegate original users through trusted multibrokers.
169     - select the effective connect_user (default: default) for reverse
170     MCP, private Vim and browser connections, independently of normal
171     authenticated HTTP tool calls.
172 root 1.42 - treat empty directory paths as "." in mcp-fs list, find, grep and
173     VCS cwd, without accepting empty filenames.
174 root 1.41 - support opportunistic HTTP/HTTPS and reverse MCP connections on the
175     same listener, TLS certificate/key CLI options, and dual URL discovery;
176     support verified HTTPS for outgoing reverse connections.
177 root 1.39 - treat idle HTTP disconnects as normal EOF while retaining errors
178     for clients disconnecting during request headers or bodies.
179     - identify failing MCP connections by client name, remote address
180     and connection id, including modern per-request client metadata.
181 root 1.38 - trace local multibroker prompt starts, outcomes and cancellations
182     with elapsed time to diagnose disappearing permission dialogs.
183     - use an 8 MiB default MCP message size across JSONL and HTTP
184     clients and servers, allowing large base64 tool requests through
185     mcp-multibroker; log server transport errors at warn level
186     instead of silently closing connections.
187 root 1.37 - load AnyEvent::Log at compile time so its format_time call is parsed
188     as a function, fixing activity logging on Perl 5.10.
189    
190 root 1.36 0.71 Fri 30 Oct 2026 18:01:51 CET
191 root 1.35 - make multibroker-spawned children ask for permissions through MCP,
192     independently of the multibroker's own permission prompt mode.
193 root 1.36 - log VCS backend and a bounded, JSON-quoted preview of filenames for
194     vcs-diff, vcs-status and vcs-log.
195     - load only core modules in t/00_load.t; optional IMAP dependencies
196     are tested separately when available.
197     - let the fake bubblewrap test use the host temporary directory on
198     systems without /tmp (notably Termux).
199     - suppress Perl startup locale warnings in sandbox workers when
200     the requested C.UTF-8 locale is unavailable.
201     - canonicalize temporary test paths to match mcp-fs on systems with
202     symlinked temp directories; diagnose failing filesystem assertions.
203     - test SSE notification ordering at client delivery rather than
204     server enqueue time, avoiding a network scheduling race.
205     - diagnose failing multibroker HTTP integration tests with preflight
206     responses, RPC results and bounded server startup diagnostics.
207 root 1.35
208 root 1.34 0.7 Fri 30 Oct 2026 14:56:18 CET
209     - WARNING: mcp-imap is unfinished and has not been tested against a real IMAP server.
210     - INCOMPATIBLE CHANGE: rules have changed, old rules will be erased.
211     - declare the same license terms as Perl itself in distribution metadata.
212     - new mcp servers in this release: mcp-http
213     - accept optional dimension default matcher for persistent-rule prompts;
214 root 1.33 - clarify that mcp-fs exec has private /tmp by default; shared-tmp
215     exposes host /tmp and is not needed for ordinary temporary files or IPC.
216 root 1.32 - add mcp-fs vcs-log for Git, SVN, CVS and Mercurial, reusing bounded
217     output and dedicated permission actions; SVN log receives network
218     and SSH-agent grants alongside CVS operations.
219 root 1.31 mcp-webbrowser prefers any JavaScript in the current tab, while the
220     independent origin dimension remains scoped to the current origin.
221 root 1.30 - log mcp-http requests with their method and a sanitized URL preview;
222     identify mcp-http/$VERSION in User-Agent unless overridden by the caller.
223 root 1.31 Allow generic key=value context in the shared mcp_log_request formatter.
224 root 1.29 - silently treat invalid saved permission-rule files as empty, prompting
225     instead of aborting broker startup; subsequent saves replace the old file.
226 root 1.30 - add mcp-http for arbitrary HTTP methods with URL-scoped approvals,
227     caller-managed cookie jars, bounded bodies and text grep/regex/substitution.
228     Disable redirects, retries and proxies; verify HTTPS certificates.
229     - derive browser permission origins from reported URLs, not a new
230     userscript field; keep older browser clients able to execute with
231     origin-scoped permissions.
232     - accept compatible browser-protocol minor versions; return empty
233     operation discovery for 1.0 clients instead of disconnecting them.
234 root 1.29 Direct rule saves no longer perform semantic validation.
235 root 1.28 - replace special-case subject, origin and workdir permission scopes with
236     named dimensions: metadata-driven prompts, generic match.NAME rule keys,
237     and engine-enforced matcher choices. Reject old request and rule fields;
238     no conversion or backward-compatible rule loading.
239 root 1.27 - preserve selected origin scopes when external permission helpers
240     forward persistent decisions through native MCP elicitation.
241 root 1.26 - add origin-scoped MCP permission rules, selectable independently of
242 root 1.30 code/tab scopes; mcp-webbrowser derives browser origins for
243 root 1.26 JavaScript and tab operations, with exact, any-port and any-origin
244     choices. Existing rules without origins continue to match all origins.
245 root 1.25 - use POSIX::uname instead of nonportable hostname -f for the XPCSE
246     browser nickname, consistent with HTTP URL wildcard host selection.
247     - make form helper test run via explicit ./ path, avoid early HTTP
248     timer races, and test filesystem discovery with optional tools absent.
249 root 1.23 - report browser protocol rejections through bounded WebSocket close
250     reasons; show abnormal disconnects in the userscript console and toast.
251     - document browser wire-protocol minor-version compatibility: accept
252     compatible older and newer clients without breaking base functionality.
253     - remove the obsolete private stdio permission-result bridge from
254     mcp-multibroker; use ordinary form elicitation.
255 root 1.22 - add per-tab operation discovery and calls to mcp-webbrowser, with
256     per-tab routing, ordinary MCP permissions and browser protocol 1.1;
257     the userscript initially advertises no extra operations.
258     - make the unsandboxed-warning test tolerate diagnostic output from
259     non-GNU utility probes (FreeBSD and BusyBox).
260     - add mcp-imap with one named password-authenticated account per instance,
261     bounded UID search, MIME reads, explicit mailbox/message mutations,
262     UIDPLUS-only targeted expunge, forked worker and MCP permissions.
263 root 1.21 - propagate XPCSE save response ETags back to Vim session metadata;
264     make stale upload HTTP status an editor error.
265     - require GNU sed in worker tool discovery; report missing-Perl diagnostics in tests.
266 root 1.18 - xpcse: forward Vim's :write! flag through mcp-vim to browser
267     uploads, without changing upload behavior yet.
268 root 1.19 - recommend rather than require WebSocket modules: only mcp-vim and
269     mcp-webbrowser use them; mcp-vim loads them only for browser clients,
270     and tests skip optional WebSocket coverage when unavailable.
271 root 1.18
272 root 1.17 0.65 Fri 23 Oct 2026 22:41:32 CEST
273 root 1.14 - fix mcp-webbrowser userscript title indicator duplicating prefixes on empty titles.
274 root 1.17 - use built scripts in make test PATH, avoiding source shebangs and
275     accidentally installed helpers in rule management tests.
276 root 1.15 - clarify browser execute code wrapper and reject function/symbol return
277     values instead of silently converting them to null.
278 root 1.17 - fix many bugs in the testsuite.
279 root 1.13
280 root 1.12 0.62 Thu 22 Oct 2026 13:32:52 CEST
281 root 1.16 - INCOMPATIBLE API CHANGE: mcp_getoptions now returns a hash reference instead of
282     a key/value list.
283 root 1.11 - Simple accepts server_name/server_version independently of the local
284     instance name, leaving server_info as an unmodified protocol override.
285     - query multibroker children in parallel for tool and broker discovery,
286     preserving tool order and returning partial results after 15 seconds
287     instead of blocking on an unresponsive child.
288 root 1.8 - accept a missing trailing slash on HTTP MCP endpoint URLs, working
289 root 1.10 around Claude's MCP connector wrongly dropping it from the configured URL,
290 root 1.18 thus corrupting it.
291 root 1.7 - allow omitted ports in reverse extension URLs, defaulting to port 80.
292 root 1.9 - fix MCP client/server version fields serialized as JSON numbers in 0.61.
293 root 1.7
294 root 1.6 0.61 Thu 22 Oct 2026 08:57:42 CEST
295 root 1.5 - resolve bind hostnames via AnyEvent::Socket instead of Socket::getaddrinfo.
296 root 1.4 - honor user-selected file permissions and preserve them across replacements.
297     - fix permission test fixture grants.
298     - fix activity log timestamp formatting on older perl versions.
299     - correct multibroker test tool count (including meta-instructions).
300     - fix perl 5.12 syntax errors in mcp-fs and mcp-vim.
301    
302 root 1.3 0.6 Wed 21 Oct 2026 20:43:20 CEST
303 root 1.2 - 34k LOC of pure llm madness. but seems to work. yay.
304 root 1.1
305     0.0 Sat 03 Oct 2026 07:29:39 CEST
306     - original version, an AnyEvent::HTTP clone.