ActivityPub MCP Server Fediverse Client for LLMs 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. What's New in v1.1.0 The biggest release yet! Now with full write capabilities, multi-account support, and enterprise-ready features. Post & Interact Create post
Add this skill
npx mdskills install cameronrye/activitypub-mcpComprehensive ActivityPub/Fediverse integration with 53 tools, multi-account support, and excellent documentation
1<p align="center">2 <img src="public/logo.svg" alt="ActivityPub MCP Logo" width="200" />3</p>45<h1 align="center">ActivityPub MCP Server</h1>67<p align="center">8 <strong>Fediverse Client for LLMs</strong>9</p>1011<p align="center">12 A comprehensive <strong>Model Context Protocol (MCP)</strong> server that enables LLMs like Claude to <strong>explore and interact with the existing Fediverse</strong> through standardized MCP tools, resources, and prompts.13</p>1415<!-- Trigger CI -->1617<p align="center">18 <a href="https://badge.fury.io/js/activitypub-mcp"><img src="https://badge.fury.io/js/activitypub-mcp.svg" alt="npm version" /></a>19 <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>20 <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white" alt="TypeScript" /></a>21 <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-18+-339933?logo=node.js&logoColor=white" alt="Node.js" /></a>22 <a href="https://modelcontextprotocol.io/"><img src="https://img.shields.io/badge/MCP-Compatible-blueviolet" alt="MCP Compatible" /></a>23</p>2425<p align="center">26 <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>27 <a href="https://www.npmjs.com/package/activitypub-mcp"><img src="https://img.shields.io/npm/dm/activitypub-mcp.svg" alt="npm downloads" /></a>28 <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>29</p>3031---3233<h2 align="center">What's New in v1.1.0</h2>3435<p align="center">36 <strong>The biggest release yet!</strong> Now with full write capabilities, multi-account support, and enterprise-ready features.37</p>3839<table align="center">40 <tr>41 <td align="center"><strong>Post & Interact</strong><br/>Create posts, reply, boost, favourite, and bookmark directly from your LLM</td>42 <td align="center"><strong>Multi-Account</strong><br/>Manage multiple fediverse accounts with secure credential storage</td>43 <td align="center"><strong>Media & Polls</strong><br/>Upload images with alt text, vote on polls, schedule posts</td>44 </tr>45 <tr>46 <td align="center"><strong>Export Anywhere</strong><br/>Export timelines, threads, and accounts to JSON, Markdown, or CSV</td>47 <td align="center"><strong>HTTP Transport</strong><br/>Production-ready HTTP/SSE mode for enterprise deployments</td>48 <td align="center"><strong>53 Tools</strong><br/>21 read-only + 28 authenticated + 4 export tools</td>49 </tr>50</table>5152<p align="center">53 <a href="#authenticated-write-tools-v110">See Authenticated Tools</a> |54 <a href="#content-export-tools-v110">See Export Tools</a> |55 <a href="CHANGELOG.md">Full Changelog</a>56</p>5758---5960## Features6162### Core Capabilities6364- **Fediverse Client**: Interact with existing ActivityPub servers (Mastodon, Pleroma, Misskey, etc.)65- **WebFinger Discovery**: Find and discover actors across the fediverse66- **MCP Protocol**: Complete MCP server with resources, tools, and prompts67- **LLM-Optimized**: Designed specifically for LLM interaction patterns68- **TypeScript**: Fully typed with modern TypeScript and ESM69- **High Performance**: Efficient resource management and caching70- **Secure**: Built-in security features and input validation71- **Dual Transport**: Supports both stdio (Claude Desktop) and HTTP transport modes7273### Fediverse Interaction Features7475- **Remote Actor Discovery**: Find users on any fediverse instance76- **Timeline Fetching**: Get posts from any user's timeline with pagination support77- **Trending Content**: Access trending hashtags and posts78- **Instance Discovery**: Find and explore fediverse instances via live API79- **Instance Information**: Get detailed info about any server80- **Search Capabilities**: Search for accounts, hashtags, and posts across instances81- **Post Threads**: Fetch complete conversation threads with replies82- **WebFinger Support**: Resolve actor identifiers across the network83- **Multi-Platform Support**: Works with Mastodon, Pleroma, Misskey, and more84- **Follower/Following Lists**: Access social connections85- **Batch Operations**: Fetch multiple actors or posts in a single request8687### MCP Features8889- **Resources** (10 total): Access remote ActivityPub data (actors, timelines, trending, instance info)90- **Tools** (53 total): Discover, interact, and create content in the fediverse91 - 21 read-only tools for discovery and exploration (including unified search)92 - 28 authenticated tools for posting, interactions, polls, media, and scheduling93 - 4 export tools for data export in JSON, Markdown, or CSV formats94- **Prompts** (11 total): Templates for fediverse exploration, content strategy, and community analysis95- **Monitoring**: Built-in logging, audit trails, and performance metrics96- **Health Checks**: Server health monitoring and diagnostics9798### Authenticated Features (v1.1.0)99100- **Multi-Account Support**: Manage multiple fediverse accounts with secure credential storage101- **Posting Operations**: Create, reply to, and delete posts102- **Social Interactions**: Boost, favourite, bookmark, follow, mute, and block103- **Authenticated Timelines**: Access home timeline, notifications, bookmarks, and favourites104- **Content Export**: Export timelines, threads, and account data in multiple formats105106### Security & Administration107108- **Instance Blocklist**: Block specific instances by domain or wildcard pattern109- **Audit Logging**: Comprehensive logging of all tool invocations and resource access110- **Content Warnings**: Respect and display content warnings from posts111- **Rate Limiting**: Protect against abuse with configurable rate limits112113## Quick Start114115### Prerequisites116117- **Node.js 18+** (LTS recommended)118- **npm** or **yarn** package manager119- **Git** for cloning the repository120121### Cross-Platform Support122123This project works on **Windows**, **macOS**, and **Linux** with automatic platform detection and appropriate script selection.124125### One-Click Installation126127For the fastest setup, use our automated installation script:128129#### Universal (All Platforms)130```bash131# Install directly with npx (recommended)132npx activitypub-mcp install133134# Or clone and run setup135git clone https://github.com/cameronrye/activitypub-mcp.git136cd activitypub-mcp137npm run setup138```139140#### Platform-Specific Installation141142**Windows (PowerShell):**143```powershell144# Clone and setup145git clone https://github.com/cameronrye/activitypub-mcp.git146cd activitypub-mcp147npm run setup:windows148149# Or run PowerShell script directly150.\scripts\setup.ps1151```152153**macOS/Linux (Bash):**154```bash155# Clone and setup156git clone https://github.com/cameronrye/activitypub-mcp.git157cd activitypub-mcp158npm run setup:unix159160# Or run bash script directly161bash scripts/setup.sh162```163164### Manual Installation1651661. **Clone and install dependencies**:167168```bash169git clone https://github.com/cameronrye/activitypub-mcp.git170cd activitypub-mcp171npm install172```1731742. **Configure environment**:175176**Windows:**177```cmd178# Copy environment template179copy .env.example .env180181# Edit configuration (optional)182notepad .env183```184185**macOS/Linux:**186```bash187# Copy environment template188cp .env.example .env189190# Edit configuration (optional)191nano .env192```1931943. **Start the MCP server**:195196```bash197# Start the MCP server (no local ActivityPub server needed)198npm run mcp199```200201### Testing the Setup202203**Test MCP server** with MCP Inspector:204205```bash206# Install MCP Inspector207npm install -g @modelcontextprotocol/inspector208209# Connect to the MCP server210mcp-inspector211```212213### Claude Desktop Integration214215To use this MCP server with Claude Desktop:2162171. **Locate your Claude Desktop config file**:218 - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`219 - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`2202212. **Add the server configuration**:222223```json224{225 "mcpServers": {226 "activitypub": {227 "command": "npx",228 "args": ["-y", "activitypub-mcp"]229 }230 }231}232```2332343. **Restart Claude Desktop** to load the new server.235236## Documentation237238### Quick Reference239240For detailed usage instructions, examples, and troubleshooting, see:241242- **[Usage Guide](docs/guides/USAGE_GUIDE.md)** - Comprehensive usage documentation243- **[Examples](docs/guides/EXAMPLES.md)** - Practical examples and integration patterns244- **[API Reference](#api-reference)** - Complete API documentation (below)245246### API Reference247248### MCP Resources249250Resources provide read-only access to fediverse data from any ActivityPub server. All resources return JSON data unless otherwise specified.251252#### Server Info Resource253254Get information about the ActivityPub MCP server:255256```uri257activitypub://server-info258```259260**Parameters:**261- None required262263**Example Response:**264265```json266{267 "name": "activitypub-mcp",268 "version": "1.1.0",269 "description": "A Model Context Protocol server for exploring and interacting with the existing Fediverse",270 "capabilities": {271 "resources": ["server-info", "remote-actor", "remote-timeline", "remote-followers", "remote-following", "instance-info", "trending", "local-timeline", "federated-timeline", "post-thread"],272 "tools": {273 "discovery": ["discover-actor", "discover-instances", "discover-instances-live", "recommend-instances"],274 "content": ["fetch-timeline", "get-post-thread", "search-instance", "search-accounts", "search-hashtags", "search-posts"],275 "timelines": ["get-trending-hashtags", "get-trending-posts", "get-local-timeline", "get-federated-timeline"],276 "utility": ["convert-url", "batch-fetch-actors", "batch-fetch-posts"],277 "system": ["health-check", "performance-metrics"]278 },279 "prompts": ["explore-fediverse", "discover-content", "compare-instances", "compare-accounts", "analyze-user-activity", "find-experts", "summarize-trending"]280 },281 "features": {282 "auditLogging": true,283 "instanceBlocklist": true,284 "contentWarnings": true,285 "batchOperations": true286 }287}288```289290#### Remote Actor Resource291292Get information about any actor in the fediverse:293294```uri295activitypub://remote-actor/{identifier}296```297298**Parameters:**299- `identifier` (string): The actor's fediverse handle (e.g., user@mastodon.social)300301**Example Response:**302303```json304{305 "@context": ["https://www.w3.org/ns/activitystreams"],306 "id": "https://mastodon.social/users/alice",307 "type": "Person",308 "preferredUsername": "alice",309 "name": "Alice Smith",310 "summary": "Software developer passionate about decentralized social networks",311 "inbox": "https://mastodon.social/users/alice/inbox",312 "outbox": "https://mastodon.social/users/alice/outbox"313}314```315316#### Remote Timeline Resource317318Access any actor's timeline/outbox from across the fediverse:319320```uri321activitypub://remote-timeline/{identifier}322```323324**Parameters:**325- `identifier` (string): The actor's fediverse handle (e.g., user@mastodon.social)326327**Example Response:**328329```json330{331 "@context": "https://www.w3.org/ns/activitystreams",332 "type": "OrderedCollection",333 "id": "https://mastodon.social/users/alice/outbox",334 "totalItems": 42,335 "orderedItems": [...]336}337```338339#### Instance Info Resource340341Get information about any fediverse instance:342343```uri344activitypub://instance-info/{domain}345```346347**Parameters:**348- `domain` (string): The instance domain (e.g., mastodon.social)349350**Example Response:**351352```json353{354 "domain": "mastodon.social",355 "software": "mastodon",356 "version": "4.2.1",357 "description": "The original server operated by the Mastodon gGmbH non-profit",358 "registrations": true,359 "stats": {360 "user_count": 900000,361 "status_count": 50000000362 }363}364```365366#### Remote Followers/Following Resources367368Access follower and following lists from any actor:369370```uri371activitypub://remote-followers/{identifier}372activitypub://remote-following/{identifier}373```374375#### Trending Resource (New)376377Get trending hashtags and posts from an instance:378379```uri380activitypub://trending/{domain}381```382383#### Local Timeline Resource (New)384385Get the local public timeline from an instance:386387```uri388activitypub://local-timeline/{domain}389```390391#### Federated Timeline Resource (New)392393Get the federated public timeline from an instance:394395```uri396activitypub://federated-timeline/{domain}397```398399#### Post Thread Resource (New)400401Get a post and its full conversation thread:402403```uri404activitypub://post-thread/{postUrl}405```406407### MCP Tools408409Tools enable LLMs to discover and interact with the fediverse. All tools return structured responses with success/error information.410411#### Discover Actor412413Discover and get information about any actor in the fediverse:414415```json416{417 "name": "discover-actor",418 "arguments": {419 "identifier": "user@mastodon.social"420 }421}422```423424**Parameters:**425- `identifier` (string, required): Fediverse handle (e.g., user@mastodon.social)426427#### Fetch Timeline428429Fetch posts from any actor's timeline with pagination support:430431```json432{433 "name": "fetch-timeline",434 "arguments": {435 "identifier": "user@mastodon.social",436 "limit": 20,437 "cursor": null,438 "maxId": null439 }440}441```442443**Parameters:**444445- `identifier` (string, required): Fediverse handle446- `limit` (number, optional): Number of posts to fetch (1-50, default: 20)447- `cursor` (string, optional): Pagination cursor from previous response448- `minId` (string, optional): Return results newer than this ID449- `maxId` (string, optional): Return results older than this ID450- `sinceId` (string, optional): Return results since this ID451452#### Get Instance Info453454Get detailed information about any fediverse instance:455456```json457{458 "name": "get-instance-info",459 "arguments": {460 "domain": "mastodon.social"461 }462}463```464465**Parameters:**466- `domain` (string, required): Instance domain467468#### Search Instance469470Search for content on a specific fediverse instance:471472```json473{474 "name": "search-instance",475 "arguments": {476 "domain": "mastodon.social",477 "query": "typescript",478 "type": "accounts"479 }480}481```482483**Parameters:**484- `domain` (string, required): Instance domain to search485- `query` (string, required): Search query486- `type` (string, optional): Type of content ("accounts", "statuses", "hashtags")487488#### Discover Instances489490Find popular fediverse instances by category or topic:491492```json493{494 "name": "discover-instances",495 "arguments": {496 "category": "mastodon",497 "topic": "technology",498 "size": "medium"499 }500}501```502503**Parameters:**504- `category` (string, optional): Software type ("mastodon", "pleroma", "misskey", etc.)505- `topic` (string, optional): Topic or interest to search for506- `size` (string, optional): Instance size ("small", "medium", "large")507- `region` (string, optional): Geographic region or language508- `beginnerFriendly` (boolean, optional): Show only beginner-friendly instances509510#### Recommend Instances511512Get personalized instance recommendations based on interests:513514```json515{516 "name": "recommend-instances",517 "arguments": {518 "interests": ["technology", "programming", "open source"]519 }520}521```522523**Parameters:**524525- `interests` (array, required): List of your interests or topics526527#### Discover Instances Live (New)528529Real-time instance discovery via instances.social API:530531```json532{533 "name": "discover-instances-live",534 "arguments": {535 "software": "mastodon",536 "language": "en",537 "minUsers": 1000,538 "openRegistrations": true,539 "limit": 20540 }541}542```543544**Parameters:**545546- `software` (enum, optional): Filter by software type (mastodon, pleroma, misskey, pixelfed, lemmy, peertube, any)547- `language` (string, optional): Filter by language code (e.g., "en", "de", "ja")548- `minUsers` (number, optional): Minimum number of users549- `maxUsers` (number, optional): Maximum number of users550- `openRegistrations` (boolean, optional): Only show instances with open registrations551- `sortBy` (enum, optional): Sort by "users", "statuses", "connections", or "name"552- `limit` (number, optional): Number of results (default: 20)553554#### Get Trending Hashtags (New)555556Get currently trending hashtags on an instance:557558```json559{560 "name": "get-trending-hashtags",561 "arguments": {562 "domain": "mastodon.social",563 "limit": 20564 }565}566```567568#### Get Trending Posts (New)569570Get currently trending posts on an instance:571572```json573{574 "name": "get-trending-posts",575 "arguments": {576 "domain": "mastodon.social",577 "limit": 20578 }579}580```581582#### Get Local Timeline (New)583584Get the local public timeline from an instance:585586```json587{588 "name": "get-local-timeline",589 "arguments": {590 "domain": "mastodon.social",591 "limit": 20592 }593}594```595596#### Get Federated Timeline (New)597598Get the federated public timeline from an instance:599600```json601{602 "name": "get-federated-timeline",603 "arguments": {604 "domain": "mastodon.social",605 "limit": 20606 }607}608```609610#### Get Post Thread (New)611612Fetch a post and its full conversation thread:613614```json615{616 "name": "get-post-thread",617 "arguments": {618 "postUrl": "https://mastodon.social/@user/123456789",619 "depth": 2,620 "maxReplies": 50621 }622}623```624625#### Search Accounts (New)626627Search for accounts on an instance:628629```json630{631 "name": "search-accounts",632 "arguments": {633 "domain": "mastodon.social",634 "query": "developer",635 "limit": 20636 }637}638```639640#### Search Hashtags (New)641642Search for hashtags on an instance:643644```json645{646 "name": "search-hashtags",647 "arguments": {648 "domain": "mastodon.social",649 "query": "programming",650 "limit": 20651 }652}653```654655#### Search Posts (New)656657Search for posts on an instance:658659```json660{661 "name": "search-posts",662 "arguments": {663 "domain": "mastodon.social",664 "query": "typescript",665 "limit": 20666 }667}668```669670#### Batch Fetch Actors (New)671672Fetch multiple actors in a single request:673674```json675{676 "name": "batch-fetch-actors",677 "arguments": {678 "identifiers": ["user1@mastodon.social", "user2@fosstodon.org"]679 }680}681```682683#### Batch Fetch Posts (New)684685Fetch multiple posts in a single request:686687```json688{689 "name": "batch-fetch-posts",690 "arguments": {691 "urls": ["https://mastodon.social/@user/123", "https://fosstodon.org/@user/456"]692 }693}694```695696#### Health Check697698Check the health status of the MCP server:699700```json701{702 "name": "health-check",703 "arguments": {}704}705```706707**Parameters:**708- None required709710#### Performance Metrics711712Get performance metrics for the MCP server:713714```json715{716 "name": "performance-metrics",717 "arguments": {718 "operation": "discover-actor"719 }720}721```722723**Parameters:**724- `operation` (string, optional): Specific operation to get metrics for725726### MCP Prompts727728#### Explore Fediverse729```json730{731 "name": "explore-fediverse",732 "arguments": {733 "interests": "technology and programming",734 "instanceType": "mastodon"735 }736}737```738739#### Compare Instances740```json741{742 "name": "compare-instances",743 "arguments": {744 "instances": "mastodon.social, fosstodon.org, hachyderm.io",745 "criteria": "community size and focus"746 }747}748```749750#### Discover Content751752```json753{754 "name": "discover-content",755 "arguments": {756 "topic": "artificial intelligence",757 "contentType": "people"758 }759}760```761762#### Compare Accounts (New)763764```json765{766 "name": "compare-accounts",767 "arguments": {768 "accounts": "user1@mastodon.social, user2@fosstodon.org",769 "aspects": "posting frequency, topics, engagement"770 }771}772```773774#### Analyze User Activity (New)775776```json777{778 "name": "analyze-user-activity",779 "arguments": {780 "identifier": "user@mastodon.social",781 "depth": "standard"782 }783}784```785786#### Find Experts (New)787788```json789{790 "name": "find-experts",791 "arguments": {792 "topic": "machine learning",793 "instances": "mastodon.social, fosstodon.org"794 }795}796```797798#### Summarize Trending (New)799800```json801{802 "name": "summarize-trending",803 "arguments": {804 "instances": "mastodon.social",805 "focus": "tech"806 }807}808```809810#### Content Strategy (v1.1.0)811812Plan your fediverse content strategy based on trending topics:813814```json815{816 "name": "content-strategy",817 "arguments": {818 "topics": "programming, open source",819 "targetAudience": "developers",820 "postingFrequency": "several-per-week"821 }822}823```824825#### Community Health (v1.1.0)826827Analyze instance moderation and community health:828829```json830{831 "name": "community-health",832 "arguments": {833 "instance": "fosstodon.org",834 "concerns": "moderation, spam"835 }836}837```838839#### Migration Helper (v1.1.0)840841Get help planning a migration to a new fediverse instance:842843```json844{845 "name": "migration-helper",846 "arguments": {847 "currentInstance": "mastodon.social",848 "targetInstance": "fosstodon.org",849 "priorities": "moderation, privacy, community focus"850 }851}852```853854#### Thread Composer (v1.1.0)855856Help compose well-structured threaded posts:857858```json859{860 "name": "thread-composer",861 "arguments": {862 "topic": "Introduction to the Fediverse",863 "keyPoints": "What is ActivityPub, Popular instances, Getting started",864 "tone": "informative",865 "targetLength": "medium"866 }867}868```869870### Authenticated Write Tools (v1.1.0)871872These tools require authentication via environment variables. See [Configuration](#environment-variables) for setup.873874#### Account Management875876- `list-accounts` - List configured accounts877- `switch-account` - Switch active account878- `verify-account` - Verify account credentials879880#### Posting Operations881882```json883{884 "name": "post-status",885 "arguments": {886 "content": "Hello Fediverse!",887 "visibility": "public",888 "contentWarning": "optional CW"889 }890}891```892893- `post-status` - Create a new post894- `reply-to-post` - Reply to an existing post895- `delete-post` - Delete your own post896897#### Social Interactions898899- `boost-post` / `unboost-post` - Boost (reblog) posts900- `favourite-post` / `unfavourite-post` - Favourite posts901- `bookmark-post` / `unbookmark-post` - Bookmark posts902- `follow-account` / `unfollow-account` - Follow/unfollow accounts903- `mute-account` / `unmute-account` - Mute accounts904- `block-account` / `unblock-account` - Block accounts905906#### Authenticated Timelines907908- `get-home-timeline` - Your home timeline909- `get-notifications` - Your notifications910- `get-bookmarks` - Your bookmarked posts911- `get-favourites` - Your favourited posts912913#### Unified Search (NEW)914915Search across accounts, posts, and hashtags in a single query:916917```json918{919 "name": "search",920 "arguments": {921 "domain": "mastodon.social",922 "query": "typescript programming",923 "type": "all",924 "limit": 20925 }926}927```928929**Parameters:**930931- `domain` (string, required): Instance domain to search932- `query` (string, required): Search query933- `type` (string, optional): "all", "accounts", "posts", or "hashtags" (default: "all")934- `limit` (number, optional): Results per type (1-40, default: 20)935- `resolve` (boolean, optional): Attempt WebFinger lookup for remote accounts936937#### Relationship Checking (NEW)938939Check your relationship status with other accounts:940941```json942{943 "name": "get-relationship",944 "arguments": {945 "accountIds": ["12345", "67890"]946 }947}948```949950**Parameters:**951952- `accountIds` (array, required): Account IDs to check relationship status953954**Returns:** Following, followed_by, blocking, muting, and other relationship statuses.955956#### Poll Voting (NEW)957958Vote on polls in posts:959960```json961{962 "name": "vote-on-poll",963 "arguments": {964 "pollId": "123456",965 "choices": [0, 2]966 }967}968```969970**Parameters:**971972- `pollId` (string, required): The poll ID to vote on973- `choices` (array, required): Array of choice indices (0-based)974975**Returns:** Updated poll with current results and visual bar chart.976977#### Media Upload (NEW)978979Upload media files with alt text descriptions:980981```json982{983 "name": "upload-media",984 "arguments": {985 "filePath": "/path/to/image.jpg",986 "description": "A beautiful sunset over the ocean",987 "focus": "0.0,0.5"988 }989}990```991992**Parameters:**993994- `filePath` (string, required): Local file path or URL to upload995- `description` (string, optional): Alt text for accessibility (recommended)996- `focus` (string, optional): Focal point as "x,y" (-1.0 to 1.0)997998**Supported types:** Images (jpg, png, gif, webp), Videos (mp4, webm), Audio (mp3, ogg)9991000#### Scheduled Posts (NEW)10011002Manage scheduled posts:10031004```json1005{1006 "name": "get-scheduled-posts",1007 "arguments": {1008 "limit": 201009 }1010}1011```10121013```json1014{1015 "name": "update-scheduled-post",1016 "arguments": {1017 "scheduledPostId": "123",1018 "scheduledAt": "2026-02-14T18:00:00.000Z"1019 }1020}1021```10221023```json1024{1025 "name": "cancel-scheduled-post",1026 "arguments": {1027 "scheduledPostId": "123"1028 }1029}1030```10311032- `get-scheduled-posts` - List all pending scheduled posts1033- `update-scheduled-post` - Change the scheduled time1034- `cancel-scheduled-post` - Cancel a scheduled post10351036### Content Export Tools (v1.1.0)10371038Export fediverse content in multiple formats (JSON, Markdown, CSV):10391040```json1041{1042 "name": "export-timeline",1043 "arguments": {1044 "identifier": "user@mastodon.social",1045 "format": "markdown",1046 "limit": 501047 }1048}1049```10501051- `export-timeline` - Export actor timeline1052- `export-thread` - Export post thread with replies1053- `export-account-info` - Comprehensive account data export1054- `export-hashtag` - Export posts with a specific hashtag10551056## Architecture10571058### Project Structure10591060```1061activitypub-mcp/1062├── src/ # Source code1063│ ├── mcp-main.ts # MCP server entry point1064│ ├── mcp-server.ts # MCP server implementation1065│ ├── webfinger.ts # WebFinger discovery client1066│ ├── remote-client.ts # Remote ActivityPub client1067│ ├── instance-discovery.ts # Static instance discovery1068│ ├── dynamic-instance-discovery.ts # Live API instance discovery1069│ ├── instance-blocklist.ts # Instance blocklist manager1070│ ├── audit-logger.ts # Audit logging infrastructure1071│ ├── health-check.ts # Health monitoring1072│ ├── performance-monitor.ts # Performance tracking1073│ ├── config.ts # Configuration constants1074│ ├── logging.ts # Logging configuration1075│ ├── auth/ # Authentication (v1.1.0)1076│ │ ├── account-manager.ts # Multi-account management1077│ │ ├── authenticated-client.ts # Authenticated API client1078│ │ └── index.ts # Auth module exports1079│ ├── mcp/ # MCP handlers1080│ │ ├── tools.ts # Read-only tool implementations1081│ │ ├── tools-write.ts # Write operation tools (v1.1.0)1082│ │ ├── tools-export.ts # Export tools (v1.1.0)1083│ │ ├── resources.ts # Resource implementations1084│ │ └── prompts.ts # Prompt implementations1085│ └── server/ # Server infrastructure1086│ ├── http-transport.ts # HTTP/SSE transport1087│ ├── adaptive-rate-limiter.ts # Per-instance rate limiting (v1.1.0)1088│ └── rate-limiter.ts # Rate limiting1089├── docs/ # Documentation1090├── scripts/ # Installation & setup scripts1091├── tests/ # Test files1092│ ├── unit/ # Unit tests1093│ └── integration/ # Integration tests1094├── dist/ # Built JavaScript files1095├── package.json # Dependencies and scripts1096└── README.md # This file1097```10981099### Technology Stack1100- **[WebFinger](https://tools.ietf.org/rfc/rfc7033.txt)**: Actor discovery across the fediverse1101- **[MCP SDK](https://github.com/modelcontextprotocol/typescript-sdk)**: Model Context Protocol implementation1102- **[ActivityPub](https://www.w3.org/TR/activitypub/)**: Decentralized social networking protocol1103- **[LogTape](https://logtape.org/)**: Structured logging1104- **TypeScript**: Type-safe development11051106### Communication Flow1107```1108LLM Client ←→ MCP Protocol ←→ Fediverse Client ←→ Remote ActivityPub Servers1109 ↓1110 WebFinger Discovery1111 ↓1112 Remote Data Fetching1113```11141115## Documentation11161117Comprehensive documentation is available in the `docs/` directory:11181119- **[Setup & Installation](docs/setup/)** - Configuration and installation guides1120- **[User Guides](docs/guides/)** - Usage examples and tutorials1121- **[Development](docs/development/)** - Development setup and best practices1122- **[Specifications](docs/specifications/)** - ActivityPub and protocol specifications11231124See the [Documentation Index](docs/README.md) for a complete overview.11251126## Development11271128### Available Scripts1129- `npm run mcp` - Start MCP server1130- `npm run mcp:dev` - Start MCP server in watch mode1131- `npm run test` - Run tests1132- `npm run build` - Build TypeScript11331134### Environment Variables11351136Create a `.env` file:11371138```env1139# MCP Server configuration1140MCP_SERVER_NAME=activitypub-mcp1141MCP_SERVER_VERSION=1.1.011421143# Transport configuration (stdio or http)1144MCP_TRANSPORT_MODE=stdio1145MCP_HTTP_PORT=30001146MCP_HTTP_HOST=127.0.0.11147MCP_HTTP_CORS_ENABLED=false11481149# Rate limiting1150RATE_LIMIT_ENABLED=true1151RATE_LIMIT_MAX=1001152RATE_LIMIT_WINDOW=90000011531154# Logging1155LOG_LEVEL=info11561157# Audit logging1158AUDIT_LOG_ENABLED=true1159AUDIT_LOG_MAX_ENTRIES=1000011601161# Instance blocklist (comma-separated domains)1162BLOCKED_INSTANCES=1163INSTANCE_BLOCKING_ENABLED=true11641165# Dynamic instance discovery1166INSTANCES_SOCIAL_TOKEN=1167DYNAMIC_INSTANCE_CACHE_TTL=360000011681169# Content warnings1170RESPECT_CONTENT_WARNINGS=true1171SHOW_CONTENT_WARNINGS=true11721173# Authentication (for write operations - v1.1.0)1174ACTIVITYPUB_DEFAULT_INSTANCE=mastodon.social1175ACTIVITYPUB_DEFAULT_TOKEN=your-oauth-access-token1176ACTIVITYPUB_DEFAULT_USERNAME=your-username11771178# Multi-account configuration (JSON format)1179# ACTIVITYPUB_ACCOUNTS='[{"id":"work","instance":"fosstodon.org","token":"token1","username":"work_account"},{"id":"personal","instance":"mastodon.social","token":"token2","username":"personal_account"}]'1180```11811182### HTTP Transport Mode11831184For production deployments, you can run the server in HTTP mode:11851186```bash1187# Start with HTTP transport1188MCP_TRANSPORT_MODE=http MCP_HTTP_PORT=8080 npm run mcp11891190# The server exposes:1191# - /mcp - MCP protocol endpoint1192# - /health - Health check endpoint1193# - /metrics - Performance metrics1194# - / - Server info1195```11961197### Testing1198```bash1199# Test MCP server with inspector1200mcp-inspector12011202# Test fediverse interactions1203npm run test12041205# Manual testing with specific actors1206# Use the discover-actor tool to test WebFinger discovery1207```12081209## Cross-Platform Compatibility12101211This project is designed to work seamlessly across different operating systems:12121213### Supported Platforms1214- **Windows 10/11** (PowerShell, Command Prompt, Git Bash)1215- **macOS** (Bash, Zsh)1216- **Linux** (Bash, most distributions)12171218### Platform-Specific Features1219- **Automatic script detection**: npm scripts automatically choose the right script for your platform1220- **Native path handling**: Proper configuration paths for each platform1221- **Shell compatibility**: Both PowerShell (.ps1) and Bash (.sh) scripts provided12221223### Installation Methods by Platform12241225| Platform | Recommended Method | Alternative Methods |1226|----------|-------------------|-------------------|1227| Windows | `npm run setup` | `.\scripts\setup.ps1` or `npm run setup:windows` |1228| macOS | `npm run setup` | `bash scripts/setup.sh` or `npm run setup:unix` |1229| Linux | `npm run setup` | `bash scripts/setup.sh` or `npm run setup:unix` |12301231### Troubleshooting Platform Issues12321233**Windows PowerShell Execution Policy:**1234```powershell1235# If you get execution policy errors, run:1236Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser1237```12381239**Windows Git Bash:**1240```bash1241# Git Bash users can use Unix-style commands:1242npm run setup:unix1243```12441245**Linux/macOS Permissions:**1246```bash1247# If you get permission errors, make scripts executable:1248chmod +x scripts/*.sh1249```12501251## Contributing125212531. Fork the repository12542. Create a feature branch: `git checkout -b feature/amazing-feature`12553. Commit changes: `git commit -m 'Add amazing feature'`12564. Push to branch: `git push origin feature/amazing-feature`12575. Open a Pull Request12581259## License12601261This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.12621263## Acknowledgments12641265- [Fedify](https://fedify.dev/) - ActivityPub server framework1266- [Model Context Protocol](https://modelcontextprotocol.io/) - LLM integration standard1267- [ActivityPub](https://www.w3.org/TR/activitypub/) - W3C decentralized social networking protocol12681269## Links12701271- [ActivityPub Specification](https://www.w3.org/TR/activitypub/)1272- [Model Context Protocol](https://modelcontextprotocol.io/)1273- [Fedify Documentation](https://fedify.dev/)1274- [Fediverse](https://fediverse.info/)12751276---12771278Made with ❤️ by [Cameron Rye](https://rye.dev/)1279
Full transparency — inspect the skill content before installing.