Skip to content

cameronrye/activitypub-mcp

v3.1.4 Security

This release includes 4 security fixes for security teams reviewing exposed deployments.

Published 2d MCP Data & Storage
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 4 known CVEs

Topics

activitypub fedify fediverse mcp mcp-server webfinger

Affected surfaces

rce_ssrf deps auth

ReleasePort's take

Moderate signal
editorial:auto 2d

Thread reads no longer beacon to attacker‑chosen hosts and SSRF private‑range coverage is fully corrected.

Why it matters: Fixes security vulnerabilities in cross‑origin thread read handling (severity 90) and corrects SSRF filtering for IPv4/IPv6 reserved ranges (severity 85), reducing risk of data exfiltration and unauthorized network requests.

Summary

AI summary

Thread reads no longer beacon to attacker‑chosen hosts and SSRF private‑range coverage is fully corrected.

Changes in this release

Security Critical

Thread reads no longer beacon to attacker-chosen hosts.

Thread reads no longer beacon to attacker-chosen hosts.

Source: llm_adapter@2026-06-11

Confidence: high

Security High

SSRF private-range coverage corrected for IPv4 and IPv6 reserved ranges.

SSRF private-range coverage corrected for IPv4 and IPv6 reserved ranges.

Source: llm_adapter@2026-06-11

Confidence: high

Security High

Mastodon read adapter hardened to parity with Misskey against unbounded data.

Mastodon read adapter hardened to parity with Misskey against unbounded data.

Source: llm_adapter@2026-06-11

Confidence: high

Security High

`install.ps1` no longer wipes other MCP servers on Windows PowerShell 5.1.

`install.ps1` no longer wipes other MCP servers on Windows PowerShell 5.1.

Source: llm_adapter@2026-06-11

Confidence: high

Security High

Release supply chain tightened by pinning builder dependencies and dropping write permissions.

Release supply chain tightened by pinning builder dependencies and dropping write permissions.

Source: llm_adapter@2026-06-11

Confidence: high

Bugfix Medium

`fetch-timeline` now renders real post content instead of empty wrappers.

`fetch-timeline` now renders real post content instead of empty wrappers.

Source: llm_adapter@2026-06-11

Confidence: high

Bugfix Medium

Subsystem logs are no longer silently dropped due to array‑based logger configuration.

Subsystem logs are no longer silently dropped due to array‑based logger configuration.

Source: llm_adapter@2026-06-11

Confidence: high

Bugfix Medium

Read timeouts now cover response body in addition to headers.

Read timeouts now cover response body in addition to headers.

Source: llm_adapter@2026-06-11

Confidence: high

Bugfix Medium

`get-scheduled-posts` works without `ACTIVITYPUB_ENABLE_WRITES` flag.

`get-scheduled-posts` works without `ACTIVITYPUB_ENABLE_WRITES` flag.

Source: llm_adapter@2026-06-11

Confidence: high

Bugfix Medium

Windows `login` opens OAuth URL correctly using FileProtocolHandler.

Windows `login` opens OAuth URL correctly using FileProtocolHandler.

Source: llm_adapter@2026-06-11

Confidence: high

Bugfix Low

'post-thread' resource resolves the real ActivityPub URI and validates statusId.

'post-thread' resource resolves the real ActivityPub URI and validates statusId.

Source: granite4.1:30b@2026-06-11-audit

Confidence: low

Full changelog

[3.1.4] - 2026-06-10

Security, correctness, and distribution patch from a second end-to-end review.

Fixed

  • fetch-timeline shows real post content again. Outbox items are activities
    (Create/Announce), so reading content straight off the wrapper rendered every
    post as [Create] (empty) against real Mastodon/Pleroma/Misskey servers. The
    formatter now unwraps the nested object (and renders boosts by their URL).
  • Subsystem logs are no longer silently dropped. logtape categories are
    array-based, so getLogger("activitypub-mcp:http") was a sibling of the configured
    logger with no sink — about 13 subsystems (including the operator security and audit
    warnings) emitted nothing. All call sites now use the array-child form, with a
    regression test guarding against the colon form returning.
  • Read timeouts now cover the response body, not just the headers. A hostile
    instance could send headers promptly then trickle the body forever, evading
    REQUEST_TIMEOUT and pinning the tool call. The request deadline now spans the
    body read across every AP-native read.
  • get-scheduled-posts works without ACTIVITYPUB_ENABLE_WRITES. It is an
    authenticated read (readOnlyHint), but was registered inside the write-gated block,
    contradicting the docs. It now ships with the other authenticated reads.
  • post-thread resource resolves the real ActivityPub URI. It built a
    /web/statuses/{id} SPA URL that modern Mastodon does not serve as ActivityPub (it
    302s to HTML), so the resource timed out and retried. It now resolves the canonical
    uri via the REST API and validates {statusId} against path-segment injection.
  • Windows login opens the browser correctly. cmd /c start treated the OAuth
    URL's & separators as command separators, truncating the URL and breaking login on
    every Windows machine. It now uses rundll32's FileProtocolHandler (no shell parsing).

Security

  • Thread reads no longer beacon to attacker-chosen hosts. The cross-origin gate
    added in 3.1.3 covered ancestors and reply items but not the root post's
    replies-collection URL; with THREAD_CROSS_ORIGIN_FETCH off (the default) that URL
    is now skipped when off-origin.
  • SSRF private-range coverage corrected. The IPv4 multicast (224.0.0.0/4) and
    reserved (240.0.0.0/4) blocks, and the IPv6 multicast (ff00::/8) and Teredo
    (2001::/32) blocks, matched only a fraction of each CIDR; they now cover the full
    ranges.
  • Mastodon read adapter hardened to parity with Misskey. Public timeline, trending,
    and search results from a (default-adapter) hostile server are now structurally
    validated, count-coerced, and capped at the requested limit instead of passed through
    unbounded.
  • install.ps1 no longer wipes other MCP servers on Windows PowerShell 5.1. The
    ConvertFrom-Json -AsHashtable path is PowerShell 6+ only; on 5.1 it threw and the
    fallback overwrote the user's config with only our entry. Install/uninstall now
    delegate to the shared Node merge helper, which preserves existing servers and
    refuses to clobber unparseable configs.
  • Release supply chain tightened. The .mcpb builder (@anthropic-ai/mcpb) is now
    version-pinned and installed with --ignore-scripts; the release/auto-release jobs
    drop workflow-level write permissions to least privilege and check out with
    persist-credentials: false, so the full dependency tree and tests never run with a
    push-capable token.

Changed

  • CI now enforces the per-directory coverage thresholds (a dedicated coverage job runs
    vitest --coverage); previously the matrix ran tests without coverage so the floors
    were never checked.
  • The README "Add to Cursor" one-click button uses Cursor's https://cursor.com/install-mcp
    wrapper; GitHub strips the raw cursor:// href, leaving a dead button.

Security Fixes

  • Thread reads no longer beacon to attacker‑chosen hosts when THREAD_CROSS_ORIGIN_FETCH is off (default)
  • SSRF private‑range coverage corrected: full IPv4 multicast (224.0.0.0/4), reserved (240.0.0.0/4), IPv6 multicast (ff00::/8) and Teredo (2001::/32) ranges are now blocked
  • `install.ps1` no longer wipes other MCP servers on Windows PowerShell 5.1
  • Release supply chain tightened: .mcpb builder version‑pinned, install with --ignore-scripts; CI jobs drop write permissions to least privilege

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

Track cameronrye/activitypub-mcp

Get notified when new releases ship.

Sign up free

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.

All releases →

Related context

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]