{
  "markdown": "<p align=\"center\">\n  <img src=\"public/logo.svg\" alt=\"ActivityPub MCP Logo\" width=\"200\" />\n</p>\n\n<h1 align=\"center\">ActivityPub MCP Server</h1>\n\n<p align=\"center\">\n  <strong>Fediverse Client for LLMs</strong>\n</p>\n\n<p align=\"center\">\n  A lightweight <strong>Model Context Protocol (MCP)</strong> server that lets an LLM explore and interact with the existing Fediverse — Mastodon, Misskey, Foundkey, Pleroma, and compatible servers. Read-only by default; write tools are opt-in.\n</p>\n\n<!--\n  DEMO: record a ~20-30s screen capture of a Claude session using activitypub-mcp\n  (see docs/launch-kit.md for the shot list), save it to docs/demo.gif, then\n  uncomment the block below. Kept commented so the README never shows a broken image.\n\n<p align=\"center\">\n  <img src=\"docs/demo.gif\" alt=\"Demo: Claude exploring the Fediverse via activitypub-mcp\" width=\"720\" />\n</p>\n-->\n\n<p align=\"center\">\n  <a href=\"https://badge.fury.io/js/activitypub-mcp\"><img src=\"https://badge.fury.io/js/activitypub-mcp.svg\" alt=\"npm version\" /></a>\n  <a href=\"https://opensource.org/licenses/MIT\"><img src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\" /></a>\n  <a href=\"https://www.typescriptlang.org/\"><img src=\"https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white\" alt=\"TypeScript\" /></a>\n  <a href=\"https://nodejs.org/\"><img src=\"https://img.shields.io/badge/Node.js-20+-339933?logo=node.js&logoColor=white\" alt=\"Node.js\" /></a>\n  <a href=\"https://modelcontextprotocol.io/\"><img src=\"https://img.shields.io/badge/MCP-Compatible-blueviolet\" alt=\"MCP Compatible\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/cameronrye/activitypub-mcp/actions\"><img src=\"https://github.com/cameronrye/activitypub-mcp/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /></a>\n  <a href=\"https://www.npmjs.com/package/activitypub-mcp\"><img src=\"https://img.shields.io/npm/dm/activitypub-mcp.svg\" alt=\"npm downloads\" /></a>\n  <a href=\"https://github.com/cameronrye/activitypub-mcp\"><img src=\"https://img.shields.io/github/stars/cameronrye/activitypub-mcp?style=social\" alt=\"GitHub stars\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://glama.ai/mcp/servers/cameronrye/activitypub-mcp\"><img src=\"https://glama.ai/mcp/servers/cameronrye/activitypub-mcp/badge\" alt=\"Glama quality and maintenance score\" width=\"200\" /></a>\n  <a href=\"https://smithery.ai/servers/rye/activitypub-mcp\"><img src=\"https://smithery.ai/badge/rye/activitypub-mcp\" alt=\"Smithery\" /></a>\n</p>\n\n---\n\n## Install\n\nRequires **Node.js 20+**.\n\n```bash\nnpx -y activitypub-mcp\n```\n\n**One-click install:**\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=activitypub-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImFjdGl2aXR5cHViLW1jcCJdfQ==)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=activitypub-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22activitypub-mcp%22%5D%7D)\n\n### Claude Desktop\n\n**One-click:** download the `.mcpb` bundle (`activitypub-mcp-<version>.mcpb`) from the [latest release](https://github.com/cameronrye/activitypub-mcp/releases/latest) and open it in Claude Desktop.\n\n**Manual:** edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"activitypub\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"activitypub-mcp\"]\n    }\n  }\n}\n```\n\nRestart Claude Desktop.\n\n### Cursor\n\nEdit `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"activitypub\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"activitypub-mcp\"]\n    }\n  }\n}\n```\n\nRestart Cursor.\n\n---\n\n## Read-only by default\n\nOut of the box, only **read tools** are registered: discover actors, fetch timelines, search, get threads, explore instances, read trending content. No write tools exist in the MCP session, so injected fediverse content cannot trigger account actions.\n\n**Public read tools** (no account needed): `discover-actor`, `fetch-timeline`, `get-post-thread`, `get-instance-info`, `get-public-timeline`, `get-trending-hashtags`, `get-trending-posts`, `search`, `discover-instances`.\n\n**Authenticated read tools** (account required): `list-accounts`, `switch-account`, `verify-account`, `get-home-timeline`, `get-notifications`, `get-bookmarks`, `get-favourites`, `get-relationship`.\n\n### Enabling writes\n\nSet `ACTIVITYPUB_ENABLE_WRITES=true` in the environment or MCP config `env` block. This registers the full set of mutation tools: post, reply, delete, boost, favourite, bookmark, follow, mute, block, vote, upload media, and scheduled posts. **Read the [threat model](SECURITY.md) before enabling.**\n\n```json\n{\n  \"mcpServers\": {\n    \"activitypub\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"activitypub-mcp\"],\n      \"env\": {\n        \"ACTIVITYPUB_ENABLE_WRITES\": \"true\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nLog in with the CLI:\n\n```bash\nnpx activitypub-mcp login mastodon.social\n```\n\nThis runs OAuth (Mastodon-family) or MiAuth (Misskey) in your browser and saves credentials to `~/.config/activitypub-mcp/accounts.json`. Multi-account is supported — use `switch-account` to change the active account.\n\nAlternatively, set `ACTIVITYPUB_DEFAULT_INSTANCE` and `ACTIVITYPUB_DEFAULT_TOKEN` env vars for a single account without the CLI flow.\n\n---\n\n## Platform support\n\n`discover-actor` and `fetch-timeline` speak plain ActivityPub (WebFinger → actor → outbox), so they read **any** conformant ActivityPub server — Mastodon, Misskey, Foundkey, Pleroma/Akkoma, **Lemmy** (communities and users), **PeerTube** (channels and accounts), **GoToSocial**, and **Pixelfed**.\n\nThe instance-API read tools (`search`, `get-trending-hashtags`, `get-trending-posts`, `get-public-timeline`) and every write tool require a **Mastodon- or Misskey-API** instance, since they call those platforms' REST APIs. Login uses OAuth (Mastodon-family) or MiAuth (Misskey).\n\n---\n\n## Example\n\nAfter adding the server to your MCP client, try:\n\n> \"Look up @gargron@mastodon.social and summarize their latest posts.\"\n\nThe model will call `discover-actor` to fetch the profile, then `fetch-timeline` to read recent posts.\n\nSee **[examples/](examples/)** for copy-pasteable recipes — Fediverse research digests, scheduled threads, notification triage, image posts with alt text, and topic curation.\n\n---\n\n## HTTP transport\n\nIn addition to stdio (default), the server supports HTTP mode with a bearer-gated `/mcp` endpoint and `/health` liveness check. Set `MCP_HTTP_SECRET` (min 16 chars) to enable.\n\nTo self-host it as a service, the repo includes a `Dockerfile` and a `docker-compose.yml` (HTTP mode):\n\n```bash\nexport MCP_HTTP_SECRET=$(node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\")\ndocker compose up --build   # then: curl http://localhost:8080/health\n```\n\nSee the [docs](https://cameronrye.github.io/activitypub-mcp/docs/getting-started/configuration/) for full configuration.\n\n---\n\n## Security\n\nThis server fetches world-writable fediverse content — posts, bios, notifications — and feeds it to the LLM. That content can contain prompt-injection payloads. Notifications are an unsolicited channel: anyone can mention your account. The `<untrusted-content>` envelope and read-only default reduce the risk surface, but **do not eliminate it**.\n\nSee [SECURITY.md](SECURITY.md) for the full threat model, SSRF protections, credential handling, and reporting instructions.\n\n---\n\n## Documentation\n\nThe full tool reference, resource list, prompt catalog, environment variable guide, and deployment notes live on the docs site:\n\n**[cameronrye.github.io/activitypub-mcp/docs/](https://cameronrye.github.io/activitypub-mcp/docs/)**\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n## Acknowledgments\n\nBuilt on the [Model Context Protocol](https://modelcontextprotocol.io/) by Anthropic, and interacts with the decentralized social web as specified by [ActivityPub](https://www.w3.org/TR/activitypub/) (W3C) and [ActivityStreams](https://www.w3.org/TR/activitystreams-core/).\n",
  "bytes": 8193,
  "sha": "b38a9b594beab3490e7e90ed7f5b51139f2a10b57c6b36f98ea9ec0c7bb170b7",
  "repo_slug": "cameronrye/activitypub-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_cameronrye_activitypub_mcp_b02a88e3/readme"
}