activitypub-mcp

cameronrye/activitypub-mcp

3.3

If you are the rightful owner of activitypub-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The ActivityPub MCP Server is a comprehensive Model Context Protocol server that enables LLMs like Claude to explore and interact with the existing Fediverse through standardized MCP tools, resources, and prompts.

Tools
5
Resources
0
Prompts
0

ActivityPub MCP Server - Fediverse Client

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.

npm version License: MIT TypeScript

🌟 Features

Core Capabilities

  • 🌐 Fediverse Client: Interact with existing ActivityPub servers (Mastodon, Pleroma, Misskey, etc.)
  • šŸ” WebFinger Discovery: Find and discover actors across the fediverse
  • šŸ¤– MCP Protocol: Complete MCP server with resources, tools, and prompts
  • 🧠 LLM-Optimized: Designed specifically for LLM interaction patterns
  • šŸ“ TypeScript: Fully typed with modern TypeScript and ESM
  • ⚔ High Performance: Efficient resource management and caching
  • šŸ”’ Secure: Built-in security features and input validation

Fediverse Interaction Features

  • āœ… Remote Actor Discovery: Find users on any fediverse instance
  • āœ… Timeline Fetching: Get posts from any user's timeline
  • āœ… Instance Discovery: Find and explore fediverse instances
  • āœ… Instance Information: Get detailed info about any server
  • āœ… Search Capabilities: Search for content across instances
  • āœ… WebFinger Support: Resolve actor identifiers across the network
  • āœ… Multi-Platform Support: Works with Mastodon, Pleroma, Misskey, and more
  • āœ… Follower/Following Lists: Access social connections

MCP Features

  • šŸ“š Resources: Access remote ActivityPub data (actors, timelines, instance info)
  • šŸ”§ Tools: Discover and interact with fediverse content
  • šŸ’¬ Prompts: Templates for fediverse exploration and discovery
  • šŸ”„ Completions: Context-aware argument completion
  • šŸŽÆ Sampling: LLM integration for content discovery
  • šŸ“Š Monitoring: Built-in logging and performance metrics

šŸš€ Quick Start

Prerequisites

  • Node.js 18+ (LTS recommended)
  • npm or yarn package manager
  • Git for cloning the repository

Cross-Platform Support

This project works on Windows, macOS, and Linux with automatic platform detection and appropriate script selection.

One-Click Installation

For the fastest setup, use our automated installation script:

Universal (All Platforms)
# Install directly with npx (recommended)
npx activitypub-mcp install

# Or clone and run setup
git clone https://github.com/cameronrye/activitypub-mcp.git
cd activitypub-mcp
npm run setup
Platform-Specific Installation

Windows (PowerShell):

# Clone and setup
git clone https://github.com/cameronrye/activitypub-mcp.git
cd activitypub-mcp
npm run setup:windows

# Or run PowerShell script directly
.\scripts\setup.ps1

macOS/Linux (Bash):

# Clone and setup
git clone https://github.com/cameronrye/activitypub-mcp.git
cd activitypub-mcp
npm run setup:unix

# Or run bash script directly
bash scripts/setup.sh

Manual Installation

  1. Clone and install dependencies:
git clone https://github.com/cameronrye/activitypub-mcp.git
cd activitypub-mcp
npm install
  1. Configure environment:

Windows:

# Copy environment template
copy .env.example .env

# Edit configuration (optional)
notepad .env

macOS/Linux:

# Copy environment template
cp .env.example .env

# Edit configuration (optional)
nano .env
  1. Start the MCP server:
# Start the MCP server (no local ActivityPub server needed)
npm run mcp

Testing the Setup

Test MCP server with MCP Inspector:

# Install MCP Inspector
npm install -g @modelcontextprotocol/inspector

# Connect to the MCP server
mcp-inspector

Claude Desktop Integration

To use this MCP server with Claude Desktop:

  1. Locate your Claude Desktop config file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add the server configuration:

{
  "mcpServers": {
    "activitypub": {
      "command": "npx",
      "args": ["-y", "activitypub-mcp"]
    }
  }
}
  1. Restart Claude Desktop to load the new server.

šŸ“– Documentation

Quick Reference

For detailed usage instructions, examples, and troubleshooting, see:

  • - Comprehensive usage documentation
  • - Practical examples and integration patterns
  • šŸ”§ API Reference - Complete API documentation (below)

API Reference

MCP Resources

Resources provide read-only access to fediverse data from any ActivityPub server. All resources return JSON data unless otherwise specified.

Remote Actor Resource

Get information about any actor in the fediverse:

activitypub://remote-actor/{identifier}

Parameters:

Example Response:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "id": "https://mastodon.social/users/alice",
  "type": "Person",
  "preferredUsername": "alice",
  "name": "Alice Smith",
  "summary": "Software developer passionate about decentralized social networks",
  "inbox": "https://mastodon.social/users/alice/inbox",
  "outbox": "https://mastodon.social/users/alice/outbox"
}
Remote Timeline Resource

Access any actor's timeline/outbox from across the fediverse:

activitypub://remote-timeline/{identifier}

Parameters:

Example Response:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "OrderedCollection",
  "id": "https://mastodon.social/users/alice/outbox",
  "totalItems": 42,
  "orderedItems": [...]
}
Instance Info Resource

Get information about any fediverse instance:

activitypub://instance-info/{domain}

Parameters:

  • domain (string): The instance domain (e.g., mastodon.social)

Example Response:

{
  "domain": "mastodon.social",
  "software": "mastodon",
  "version": "4.2.1",
  "description": "The original server operated by the Mastodon gGmbH non-profit",
  "registrations": true,
  "stats": {
    "user_count": 900000,
    "status_count": 50000000
  }
}
Remote Followers/Following Resources

Access follower and following lists from any actor:

activitypub://remote-followers/{identifier}
activitypub://remote-following/{identifier}

MCP Tools

Tools enable LLMs to discover and interact with the fediverse. All tools return structured responses with success/error information.

Discover Actor

Discover and get information about any actor in the fediverse:

{
  "name": "discover-actor",
  "arguments": {
    "identifier": "user@mastodon.social"
  }
}

Parameters:

Fetch Timeline

Fetch recent posts from any actor's timeline:

{
  "name": "fetch-timeline",
  "arguments": {
    "identifier": "user@mastodon.social",
    "limit": 20
  }
}

Parameters:

  • identifier (string, required): Fediverse handle
  • limit (number, optional): Number of posts to fetch (1-50, default: 20)
Get Instance Info

Get detailed information about any fediverse instance:

{
  "name": "get-instance-info",
  "arguments": {
    "domain": "mastodon.social"
  }
}

Parameters:

  • domain (string, required): Instance domain
Search Instance

Search for content on a specific fediverse instance:

{
  "name": "search-instance",
  "arguments": {
    "domain": "mastodon.social",
    "query": "typescript",
    "type": "accounts"
  }
}

Parameters:

  • domain (string, required): Instance domain to search
  • query (string, required): Search query
  • type (string, optional): Type of content ("accounts", "statuses", "hashtags")
Discover Instances

Find popular fediverse instances by category or topic:

{
  "name": "discover-instances",
  "arguments": {
    "category": "mastodon",
    "topic": "technology",
    "size": "medium"
  }
}

Parameters:

  • category (string, optional): Software type ("mastodon", "pleroma", "misskey", etc.)
  • topic (string, optional): Topic or interest to search for
  • size (string, optional): Instance size ("small", "medium", "large")
  • region (string, optional): Geographic region or language
  • beginnerFriendly (boolean, optional): Show only beginner-friendly instances
Recommend Instances

Get personalized instance recommendations based on interests:

{
  "name": "recommend-instances",
  "arguments": {
    "interests": ["technology", "programming", "open source"]
  }
}

Parameters:

  • interests (array, required): List of your interests or topics

MCP Prompts

Explore Fediverse
{
  "name": "explore-fediverse",
  "arguments": {
    "interests": "technology and programming",
    "instanceType": "mastodon"
  }
}
Compare Instances
{
  "name": "compare-instances",
  "arguments": {
    "instances": "mastodon.social, fosstodon.org, hachyderm.io",
    "criteria": "community size and focus"
  }
}
Discover Content
{
  "name": "discover-content",
  "arguments": {
    "topic": "artificial intelligence",
    "contentType": "people"
  }
}

šŸ—ļø Architecture

Project Structure

activitypub-mcp/
ā”œā”€ā”€ src/                     # Source code
│   ā”œā”€ā”€ mcp-main.ts          # MCP server entry point
│   ā”œā”€ā”€ mcp-server.ts        # MCP server implementation
│   ā”œā”€ā”€ webfinger.ts         # WebFinger discovery client
│   ā”œā”€ā”€ remote-client.ts     # Remote ActivityPub client
│   ā”œā”€ā”€ instance-discovery.ts # Instance discovery service
│   ā”œā”€ā”€ health-check.ts      # Health monitoring
│   ā”œā”€ā”€ performance-monitor.ts # Performance tracking
│   ā”œā”€ā”€ config.ts            # Configuration constants
│   └── logging.ts           # Logging configuration
ā”œā”€ā”€ docs/                    # Documentation
│   ā”œā”€ā”€ setup/               # Installation & configuration guides
│   ā”œā”€ā”€ guides/              # User guides & examples
│   ā”œā”€ā”€ development/         # Development documentation
│   └── specifications/      # Protocol specifications
ā”œā”€ā”€ scripts/                 # Installation & setup scripts
ā”œā”€ā”€ tests/                   # Test files
ā”œā”€ā”€ dist/                    # Built JavaScript files
ā”œā”€ā”€ package.json             # Dependencies and scripts
└── README.md               # This file

Technology Stack

  • WebFinger: Actor discovery across the fediverse
  • MCP SDK: Model Context Protocol implementation
  • ActivityPub: Decentralized social networking protocol
  • LogTape: Structured logging
  • TypeScript: Type-safe development

Communication Flow

LLM Client ←→ MCP Protocol ←→ Fediverse Client ←→ Remote ActivityPub Servers
                                     ↓
                              WebFinger Discovery
                                     ↓
                              Remote Data Fetching

šŸ“š Documentation

Comprehensive documentation is available in the docs/ directory:

  • - Configuration and installation guides
  • - Usage examples and tutorials
  • - Development setup and best practices
  • - ActivityPub and protocol specifications

See the for a complete overview.

šŸ”§ Development

Available Scripts

  • npm run mcp - Start MCP server
  • npm run mcp:dev - Start MCP server in watch mode
  • npm run test - Run tests
  • npm run build - Build TypeScript

Environment Variables

Create a .env file:

# MCP Server configuration
MCP_SERVER_NAME=activitypub-mcp
MCP_SERVER_VERSION=1.0.0

# Rate limiting
RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX=100
RATE_LIMIT_WINDOW=900000

# Logging
LOG_LEVEL=info

Testing

# Test MCP server with inspector
mcp-inspector

# Test fediverse interactions
npm run test

# Manual testing with specific actors
# Use the discover-actor tool to test WebFinger discovery

🌐 Cross-Platform Compatibility

This project is designed to work seamlessly across different operating systems:

Supported Platforms

  • Windows 10/11 (PowerShell, Command Prompt, Git Bash)
  • macOS (Bash, Zsh)
  • Linux (Bash, most distributions)

Platform-Specific Features

  • Automatic script detection: npm scripts automatically choose the right script for your platform
  • Native path handling: Proper configuration paths for each platform
  • Shell compatibility: Both PowerShell (.ps1) and Bash (.sh) scripts provided

Installation Methods by Platform

PlatformRecommended MethodAlternative Methods
Windowsnpm run setup.\scripts\setup.ps1 or npm run setup:windows
macOSnpm run setupbash scripts/setup.sh or npm run setup:unix
Linuxnpm run setupbash scripts/setup.sh or npm run setup:unix

Troubleshooting Platform Issues

Windows PowerShell Execution Policy:

# If you get execution policy errors, run:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Windows Git Bash:

# Git Bash users can use Unix-style commands:
npm run setup:unix

Linux/macOS Permissions:

# If you get permission errors, make scripts executable:
chmod +x scripts/*.sh

šŸ¤ Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit changes: git commit -m 'Add amazing feature'
  4. Push to branch: git push origin feature/amazing-feature
  5. Open a Pull Request

šŸ“„ License

This project is licensed under the MIT License - see the file for details.

šŸ™ Acknowledgments

šŸ”— Links


Made with ā¤ļø by Cameron Rye