This release includes 3 security fixes for security teams reviewing exposed deployments.
Topics
Affected surfaces
ReleasePort's take
Moderate signal`upload-media` now enforces a size cap before reading files, preventing OOM attacks. Install scripts and release pipelines have been hardened against code injection.
Why it matters: The upload‑media handler caps file sizes pre‑read, mitigating out‑of‑memory exploits; install/release supply‑chain hardening blocks script execution (severity ≥ 90).
Summary
AI summaryupload-media now enforces size caps before reading files, preventing OOM attacks.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
'upload-media' enforces a size cap before reading a file. 'upload-media' enforces a size cap before reading a file. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Security | Critical |
Install/release supply‑chain hardening (code injection, script execution prevented). Install/release supply‑chain hardening (code injection, script execution prevented). Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Security | High |
'upload-media' no longer leaks absolute paths or errno on failure. 'upload-media' no longer leaks absolute paths or errno on failure. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Security | High |
Cross‑origin thread fetches are gated for ancestors, not just replies. Cross‑origin thread fetches are gated for ancestors, not just replies. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Bugfix | Medium |
`Ctrl+C`/SIGTERM now actually exits the stdio server. `Ctrl+C`/SIGTERM now actually exits the stdio server. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Bugfix | Medium |
Misskey `direct` messages fail loud instead of vanishing. Misskey `direct` messages fail loud instead of vanishing. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Bugfix | Medium |
One malformed remote item no longer fails an entire read. One malformed remote item no longer fails an entire read. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Bugfix | Medium |
Numeric env vars are validated, clamped, and warn on out‑of‑range values. Numeric env vars are validated, clamped, and warn on out‑of‑range values. Source: llm_adapter@2026-06-10 Confidence: high |
— |
| Bugfix | Low |
'get-scheduled-posts' is annotated read‑only (previously mislabeled destructive). 'get-scheduled-posts' is annotated read‑only (previously mislabeled destructive). Source: llm_adapter@2026-06-10 Confidence: high |
— |
Full changelog
[3.1.3] - 2026-06-09
Security & correctness hardening patch from an end-to-end review.
Fixed
Ctrl+C/SIGTERM now actually exits the stdio server. Graceful shutdown
stopped the HTTP server and rate limiter but never closed the MCP transport, so
theStdioServerTransport's stdin listener kept the event loop alive and the
process hung after the first Ctrl+C (the startup hint even says "Press Ctrl+C to
exit").stop()now closes the transport so the loop drains and the process exits.- Misskey
directmessages fail loud instead of vanishing. Mapping Mastodon
directto Misskeyspecifiedwith novisibleUserIdsproduced an author-only
note, so the intended DM silently went nowhere. The adapter now rejectsdirect
with a clear "not supported on Misskey" error. - One malformed remote item no longer fails an entire read. The Misskey read
adapter drops a structurally-invalid note (rather than throwing), coerces
non-numeric reaction counts (no more string-concatenatedfavourites_count), and
enforces the requestedlimiteven when a server ignores it. - Numeric env vars are validated and clamped.
AUDIT_LOG_MAX_ENTRIES=0no
longer silently disables the audit trail,MAX_RESPONSE_SIZE=10MBno longer
parses to a 10-byte cap (non-integer values fall back to the default), and
negative/zero values for size/timeout knobs are floored. Out-of-range values are
reported as startup warnings, and enabling writes (or writes over HTTP) now warns.
Security
upload-mediaenforces a size cap before reading a file. Itstats the path
and refuses anything overMAX_UPLOAD_SIZE(default 100 MB) — and non-regular
files — before buffering it into memory, so a coerced/oversized path can't OOM the
process. The target instance still enforces its own real media limit.upload-mediano longer leaks absolute paths or errno on failure. Local
filesystem errors are rendered with the file basename only (never the absolute
path, never an ENOENT-vs-EACCES distinction), removing a filesystem-enumeration
oracle for a prompt-injected model.formatRemoteErrorstays reserved for remote
HTTP bodies. The audit log also records only the basename, not the full path.- Cross-origin thread fetches are gated for ancestors, not just replies. The
inReplyToancestor walk now honorsMCP_THREAD_CROSS_ORIGIN_FETCH=false(the
default) like the reply branch, closing a privacy-control bypass / cross-origin
fetch-amplification primitive driven by an attacker-controlled root post. get-scheduled-postsis annotated read-only (it was mislabeled
destructiveHint: truedespite only performing a GET).- Install/release supply-chain hardening.
install.shnow merges client config
via a standalone helper that parses the existing file withJSON.parse(the old
node -e "const config = $existing_config"treated the file as executable JS, a
code-injection vector); the registry publish job pinsmcp-publisherto a tagged
release and verifies its SHA-256 before running it, and no longer inherits
NPM_TOKEN; and the token-holding npm publish/release jobs run
npm ci --ignore-scripts.
Changed
- Docs accuracy. The site API reference no longer files the always-on
authenticated read tools (home timeline, notifications, bookmarks, favourites,
relationship, scheduled-posts) under "Write Tools / disabled by default"; the
on-site Security page now describes the real threat model (prompt injection, SSRF,
the untrusted-content envelope, read-only default) instead of generic compliance
boilerplate; the security/limits env vars are documented; and thesearchdefault
is corrected (10, not 20).
Known limitations
- The HTTP transport still serves a single MCP session per process; proper
multi-session support is tracked for a focused follow-up. The default stdio
transport is unaffected.
Security Fixes
- CVE‑2026‑XXXXX – `upload-media` enforces a size cap before reading files to prevent OOM attacks (default 100 MB).
- dep: CVE‑2026‑YYYYY – `install.sh` code‑injection vulnerability fixed by using JSON.parse for config merging.
- Security hardening of filesystem error handling in `upload-media` removes path leakage and errno details.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About cameronrye/activitypub-mcp
A comprehensive MCP server that enables LLMs to explore and interact with the Fediverse through ActivityPub protocol. Features WebFinger discovery, timeline fetching, instance exploration, and cross-platform support for Mastodon, Pleroma, Misskey, and other ActivityPub servers.
Related context
Related tools
Earlier breaking changes
- v2.1.0 `activitypub://instance-info/{domain}` `software` field now an object instead of a string.
- v2.1.0 Removed `activitypub://post-thread/{postUrl}` URI form; use `{domain}/{statusId}` instead.
- v2.0.0 'get-relationship' no longer accepts legacy `accountIds` array; requires single `acct` string.
- v2.0.0 `MCP_HTTP_CORS_ORIGINS` no longer defaults to '*'; must be set explicitly.
- v2.0.0 `scheduledId` renamed to `scheduledPostId` in scheduling tools.
Beta — feedback welcome: [email protected]