A comprehensive Model Context Protocol (MCP) server that enables LLMs like Claude to explore and interact with the existing Fediverse through standardized MCP tools, resources, and prompts.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http
verified
reported
listed in the official MCP registry counts 37 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
block-account
-
bookmark-post
-
boost-post
-
cancel-scheduled-post
-
delete-post
-
discover-actor
-
discover-instances
-
favourite-post
-
fetch-timeline
-
follow-account
-
get-bookmarks
-
get-favourites
-
get-home-timeline
-
get-instance-info
-
get-notifications
-
get-post-thread
-
get-public-timeline
-
get-relationship
-
get-scheduled-posts
-
get-trending-hashtags
-
get-trending-posts
-
list-accounts
-
mute-account
-
post-status
-
reply-to-post
-
search
-
switch-account
-
unblock-account
-
unbookmark-post
-
unboost-post
-
unfavourite-post
-
unfollow-account
-
unmute-account
-
update-scheduled-post
-
upload-media
-
verify-account
-
vote-on-poll
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 9cfa906 · analyzer v33 · 1w ago
danger signals2
- suspicious endpoint 93.184.216.34 cameronrye-activitypub-mcp-9cfa906/tests/unit/url-pinning.test.ts :77
const pinned = await resolveAndPin("https://93.184.216.34/"); - suspicious endpoint 8.8.8.8 cameronrye-activitypub-mcp-9cfa906/tests/unit/utils.test.ts :233
expect(() => validateExternalUrlSync("https://8.8.8.8")).not.toThrow();
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 158
filesystem 31
- fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/check-version.js :10
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/generate-favicons.js :21
import { writeFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/generate-og-image.js :8
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/generate-registry-manifest.js :16
import fs from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/generate-search-data.js :8
import fs from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/inject-tools-manifest.js :33
import { readFileSync, writeFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/install.js :11
import fs from "node:fs/promises"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/merge-mcp-config.mjs :18
import fs from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/run-platform.js :9
import { existsSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/smoke-test-bin.js :10
import { existsSync, mkdtempSync, rmSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/scripts/validate-biome-config.js :8
import fs from "node:fs"; - fs cameronrye-activitypub-mcp-9cfa906/src/auth/credential-store.ts :11
import { chmodSync, constants, mkdirSync } from "node:fs"; - fs cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :2009
fileBuffer = await fs.readFile(filePath); - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/cli-accounts.test.ts :1
import { mkdtempSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/cli-login.test.ts :1
import { mkdtempSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/config-env-drift.test.ts :1
import { readdirSync, readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/credential-store.test.ts :15
} from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/homepage-install-command.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/install-config-merge.test.ts :2
import fs from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/llms-registry-sync.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/logging-categories.test.ts :1
import { readdirSync, readFileSync, statSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/mcp-tools-write.test.ts :5
import fs from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/no-dead-discussions-links.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/public-icons.test.ts :1
import { existsSync, readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/public-svg-wellformed.test.ts :1
import { readdirSync, readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/readme-install-buttons.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/registry-manifest.test.ts :1
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/release-mcpb-asset.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/release-smithery-publish.test.ts :1
import { existsSync, readFileSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/secret-hygiene.test.ts :1
import { mkdtempSync } from "node:fs"; - fs (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/server-manifest.test.ts :1
import { readFileSync } from "node:fs";
shell / exec 9
- shell (weak) cameronrye-activitypub-mcp-9cfa906/scripts/check-tarball-contents.js :8
import { execSync } from "node:child_process"; - shell (weak) cameronrye-activitypub-mcp-9cfa906/scripts/inject-tools-manifest.js :32
import { spawn } from "node:child_process"; - shell (weak) cameronrye-activitypub-mcp-9cfa906/scripts/install.js :10
import { execSync } from "node:child_process"; - shell (weak) cameronrye-activitypub-mcp-9cfa906/scripts/run-platform.js :8
import { spawn } from "node:child_process"; - shell (weak) cameronrye-activitypub-mcp-9cfa906/scripts/smoke-test-bin.js :9
import { execSync, spawnSync } from "node:child_process"; - shell cameronrye-activitypub-mcp-9cfa906/src/auth/login/browser.ts :2
* Opens the system browser to a URL using an argv-array spawn (never a shell - shell (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/install-config-merge.test.ts :1
import { execFileSync } from "node:child_process"; - shell (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/stdio-shutdown.test.ts :1
import { spawn } from "node:child_process"; - shell (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/stdio-stdout-purity.test.ts :1
import { spawn } from "node:child_process";
network 11
- net cameronrye-activitypub-mcp-9cfa906/src/auth/login/loopback-server.ts :12
import { createServer, type Server } from "node:http"; - net cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :281
.describe("Number of posts to fetch (default: 20)"), - net cameronrye-activitypub-mcp-9cfa906/src/transport/auth-middleware.ts :2
import type { IncomingMessage, ServerResponse } from "node:http"; - net cameronrye-activitypub-mcp-9cfa906/src/transport/http.ts :10
import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http"; - net cameronrye-activitypub-mcp-9cfa906/src/utils/fetch-helpers.ts :10
import type { Agent } from "undici"; - net cameronrye-activitypub-mcp-9cfa906/src/validation/url.ts :7
import { Agent } from "undici"; - net (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/auth-middleware.test.ts :1
import { IncomingMessage, ServerResponse } from "node:http"; - net (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/http-transport.test.ts :5
import { request as httpRequest } from "node:http"; - net (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/loopback-server.test.ts :17
await fetch(`${lb.redirectUri}?code=xyz&state=abc`); - net (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/remote-client-conversion.test.ts :12
// server in tests/setup.ts) intercepts the fetch (same pattern as - net (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/url-pinning.test.ts :8
import { Agent } from "undici";
secrets 6
- secrets cameronrye-activitypub-mcp-9cfa906/src/auth/account-manager.ts :64
const defaultToken = process.env.ACTIVITYPUB_DEFAULT_TOKEN; - secrets cameronrye-activitypub-mcp-9cfa906/src/config.ts :284
export const HTTP_SECRET = process.env.MCP_HTTP_SECRET || ""; - secrets cameronrye-activitypub-mcp-9cfa906/src/transport/http.ts :159
const secret = process.env.MCP_HTTP_SECRET || HTTP_SECRET; - secrets (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/account-manager.test.ts :21
delete process.env.ACTIVITYPUB_DEFAULT_TOKEN; - secrets (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/cli-accounts.test.ts :15
delete process.env.ACTIVITYPUB_DEFAULT_TOKEN; - secrets (weak) cameronrye-activitypub-mcp-9cfa906/tests/unit/http-transport.test.ts :66
process.env.MCP_HTTP_SECRET = TEST_SECRET;
tool registrations 37
- list-accounts cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :258
- switch-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :337
- verify-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :408
- post-status cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :540
- reply-to-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :695
- delete-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :799
- boost-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :878
- unboost-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :907
- favourite-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :934
- unfavourite-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :963
- bookmark-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :990
- unbookmark-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1019
- follow-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1050
- unfollow-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1107
- mute-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1136
- unmute-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1189
- block-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1218
- unblock-account cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1247
- get-home-timeline cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1280
- get-notifications cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1380
- get-bookmarks cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1512
- get-favourites cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1600
- get-relationship cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1692
- vote-on-poll cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1816
- upload-media cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :1924
- get-scheduled-posts cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :2094
- cancel-scheduled-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :2220
- update-scheduled-post cameronrye-activitypub-mcp-9cfa906/src/mcp/tools-write.ts :2299
- discover-actor cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :181
- fetch-timeline cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :267
- get-instance-info cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :409
- discover-instances cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :502
- get-post-thread cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :671
- get-trending-hashtags cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :798
- get-trending-posts cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :879
- get-public-timeline cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :953
- search cameronrye-activitypub-mcp-9cfa906/src/mcp/tools.ts :1061
install hooks 1
- prepublishOnly cameronrye-activitypub-mcp-9cfa906/package.json :116
run-s clean validate:version typecheck lint build
declared dependencies 24
- @modelcontextprotocol/sdk@^1.18.1
- @logtape/logtape@^2.0.2
- undici@^7.26.0
- zod@^4.3.6
- @astrojs/check@^0.9.9
- @astrojs/mdx@^6.0.3
- @astrojs/sitemap@^3.6.0
- @biomejs/biome@^2.2.4
- @dotenvx/dotenvx@^1.51.1
- @fontsource/bricolage-grotesque@^5.2.10
- @fontsource/hanken-grotesk@^5.2.8
- @fontsource/jetbrains-mono@^5.2.8
- @types/node@^24.5.2
- @vitest/coverage-v8@^4.0.18
- astro@^6.4.5
- cross-env@^10.0.0
- jsdom@^29.1.1
- msw@^2.14.6
- npm-run-all2@^9.0.2
- pagefind@^1.4.0
- rimraf@^6.0.1
- tsx@^4.20.5
- typescript@^6.0.3
- vitest@^4.0.18
transport_posture 1
- binds all interfaces (0.0.0.0) cameronrye-activitypub-mcp-9cfa906/tests/unit/http-transport.test.ts :35
host: "0.0.0.0",