npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@meowtrix/atproto-mcp

v0.1.11

Published

MCP server built for AI agents to interact with the AT Protocol.

Downloads

126

Readme

@meowtrix/atproto-mcp

MCP server for interacting with the AT Protocol.

Built for AI agents. Interaction guards let you restrict your bot to only engage with followers, other bots, or accounts that @-mention it, so your AI can't go rogue on the network. See Interaction guards.

Token-efficient responses. All API responses are automatically slimmed before they reach your agent. Heavy fields like avatars, blob metadata, labels, and full embed details are stripped. Only the essentials come back: identifiers, post text, author handles, engagement counts, and viewer state.

Quick start (npx)

Add this in your mcp config:

{
  "name": "atproto",
  "command": "npx",
  "args": ["-y", "@meowtrix/atproto-mcp", "--stdio"],
  "env": {
    "ATPROTO_HANDLE": "your-handle.bsky.social",
    "ATPROTO_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx"
  }
}

Generate an app password at bsky.app/settings/app-passwords.

Environment variables

| Variable | Required | Default | Description | |---|---|---|---| | ATPROTO_HANDLE | Yes | -- | Your AT Protocol handle (e.g. alice.bsky.social) | | ATPROTO_APP_PASSWORD | Yes | -- | App password (not your main password) | | ATPROTO_TOOLS | No | all | Comma-separated list of tool groups to enable (see Tool groups) | | RESTRICT_INTERACTIONS_TO | No | -- | Comma-separated list of allowed interaction categories (see below) |

Tool groups

By default all tools are enabled. Set ATPROTO_TOOLS to a comma-separated list of groups to only register the tools you need, reducing token usage in LLM context windows.

| Group | Description | |---|---| | protocol | Low-level AT Protocol tools (records, blobs, DIDs) | | bluesky_social | Core Bluesky social tools (posts, timeline, search, notifications, likes, follows, profile) | | bluesky_misc | Additional Bluesky tools (lists, custom feeds, suggestions, preferences) | | bluesky | Alias for bluesky_social + bluesky_misc |

Examples:

ATPROTO_TOOLS=protocol                    # only AT Protocol tools
ATPROTO_TOOLS=bluesky_social              # core Bluesky social features
ATPROTO_TOOLS=protocol,bluesky_social     # protocol + social, no misc
ATPROTO_TOOLS=bluesky                     # all Bluesky tools

Interaction guards

When RESTRICT_INTERACTIONS_TO is set, the server restricts engagement actions (replies, likes, reposts, follows) to accounts matching at least one listed category. This prevents the AI from interacting with arbitrary accounts unsupervised.

| Category | Description | |---|---| | followers | Allow interactions with accounts that follow the bot | | bots | Allow interactions with accounts that have self-labeled as bots | | mentions | Allow interactions when the bot was @-mentioned (in a thread for replies, in the post for likes/reposts) |

Categories combine with OR logic — the target must satisfy at least one. For example, followers,bots allows interactions with accounts that are followers or bots.

Examples:

RESTRICT_INTERACTIONS_TO=followers,mentions     # followers or mentions
RESTRICT_INTERACTIONS_TO=bots                   # bot accounts only
RESTRICT_INTERACTIONS_TO=followers,bots,mentions # any of the three

Always allowed regardless of guards:

  • Interactions with yourself (self-likes, self-replies, etc.)
  • Replies to your own threads (if you authored any ancestor post)
  • Top-level posts (not replies)

HTTP mode

Start the server on port 3001:

npm start

Then configure your MCP client to connect via HTTP:

{
  "name": "atproto",
  "url": "http://localhost:3001/mcp"
}

Docker

Docker Compose

Create a .env file with your credentials:

ATPROTO_HANDLE=your-handle.bsky.social
ATPROTO_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx

Then run:

docker compose up

Manual Docker

docker build -t atproto-mcp .

docker run -p 3001:3001 \
  -e ATPROTO_HANDLE=your-handle.bsky.social \
  -e ATPROTO_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx \
  atproto-mcp

Resources

| Resource | URI | Description | |---|---|---| | My Repo Collections | repo:///collections | Shows what record types (collection NSIDs) exist in your AT Protocol repo — useful for discovering what services and data you have |

Tools

Protocol

| Tool | Description | |---|---| | whoami | Check current authenticated session | | resolve_did | Resolve a handle to a DID and fetch DID document | | get_record | Fetch any record by repo/collection/rkey | | list_records | List records in a collection | | describe_repo | Get repo metadata and collections (defaults to your own repo) | | get_blob | Download a blob by DID and CID | | upload_blob | Upload a blob (image, etc.) | | create_record | Create a record in any collection | | put_record | Create or update a record by collection and rkey | | delete_record | Delete a record by collection and rkey |

Bluesky Social

| Tool | Description | |---|---| | post | Create a Bluesky post (supports replies and @-mentions) | | timeline | Get your Bluesky home timeline | | discover_feed | Browse the Bluesky Discover feed ("What's Hot") | | search_posts | Search Bluesky posts by keyword | | search_users | Search for Bluesky user accounts | | get_profile | Get a user's Bluesky profile | | get_author_feed | Get a user's Bluesky posts | | my_posts | Get your own recent Bluesky posts | | get_post_thread | Get a post thread with replies | | like | Like a Bluesky post | | unlike | Remove a like from a Bluesky post | | repost | Repost a Bluesky post | | unrepost | Remove a repost | | follow | Follow a Bluesky user | | unfollow | Unfollow a Bluesky user | | delete_post | Delete one of your own Bluesky posts | | all_notifications | List all Bluesky notifications (read and unread) | | unread_notifications | List only unread Bluesky notifications | | mark_notifications_read | Mark all Bluesky notifications as read | | get_followers | List a user's followers | | get_follows | List who a user follows | | update_profile | Update your Bluesky profile (display name, bio, avatar, banner) |

Bluesky Misc

| Tool | Description | |---|---| | get_lists | Get a user's lists | | get_list | Get list details and items | | get_suggested_follows | Get follow suggestions | | get_suggested_feeds | Discover suggested custom feeds | | get_feed | Get posts from a custom feed | | get_feed_generators | Look up metadata for one or more feed generators | | get_preferences | Read your account preferences | | put_preferences | Replace all account preferences |