What’s new here
at_mcp gives the agent an account: it holds the session, tracks the write quota, and persists identity across process restarts. The agent decides what to say; at_mcp handles credentials, facet resolution for mentions and links, and failure contracts (including outcome: "unknown" for writes that may have landed but returned no answer).
What it does
at_mcp exposes 43 MCP tools covering Bluesky and Delvetown: timeline and thread reads, post search, publishing posts and replies, reposts, likes, follows, blocks, mutes, profile edits, notification handling, and image fetching. It runs as a stdio process started by the MCP client, or as a shared service that multiple clients connect to over a loopback port.
Credentials live in environment variables. State (write quota, checkpoints, and the delivery queue the shared service uses) lives in a directory you choose and persists between runs; each start of the stdio process logs in again. A configurable write quota (default: 16 publishing writes per hour) is tracked locally and reported back through identity_status.
From v0.2.0, a prototype mode (AT_MCP_APPVIEW_READS=direct) requests short-lived service tokens for authenticated AppView reads, so the app password never leaves the home PDS.
Who it’s for
Developers building agents that need a social presence: bots that post, agents that read a timeline and reply, or workflows where the LLM should have a durable AT Protocol identity. It also works for Elixir applications that want to embed AT Protocol account access as a library. Binary releases require no Elixir toolchain.
Try it
Download and install (macOS Apple silicon shown; substitute linux-x86_64 for Linux):
VERSION=0.2.0
PLATFORM=macos-arm64
AT_MCP="$HOME/at_mcp"
BASE_URL=https://github.com/GroveResearch/at_mcp/releases/download
DOWNLOAD=$(mktemp -d)
TARBALL=at_mcp-$VERSION-$PLATFORM.tar.gz
curl --fail --location "$BASE_URL/v$VERSION/$TARBALL" -o "$DOWNLOAD/$TARBALL" &&
curl --fail --location "$BASE_URL/v$VERSION/$TARBALL.sha256" -o "$DOWNLOAD/$TARBALL.sha256" &&
(cd "$DOWNLOAD" && shasum -a 256 -c "$TARBALL.sha256") || exit 1
mkdir -p "$AT_MCP/releases" &&
tar --no-same-owner -xzf "$DOWNLOAD/$TARBALL" -C "$AT_MCP/releases" &&
ln -sfn "releases/at_mcp-$VERSION" "$AT_MCP/current"You need an existing Bluesky or Delvetown account for the agent and an app password for it; at_mcp logs in to an account but does not create one. Create an empty private config file:
mkdir -p "$HOME/at_mcp" &&
install -m 600 /dev/null "$HOME/at_mcp/mcp.json"Save this configuration in it (for a Bluesky account hosted at bsky.social; the README has a Delvetown version). Set command to the absolute path of $AT_MCP/current/bin/at_mcp-stdio, without pasting $AT_MCP literally, and fill in your handle, app password, and state directory:
{
"mcpServers": {
"at_mcp": {
"command": "/Users/you/at_mcp/current/bin/at_mcp-stdio",
"env": {
"AT_MCP_NETWORK": "bluesky",
"AT_MCP_SERVICE": "https://bsky.social",
"AT_MCP_HANDLE": "your.handle",
"AT_MCP_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx",
"AT_MCP_STATE_DIR": "/Users/you/at_mcp/state"
}
}
}
}Then start Claude Code:
claude --mcp-config "$HOME/at_mcp/mcp.json" --strict-mcp-configVerify the connection with /mcp, then ask the agent to call identity_status and get_profile before doing anything else.
How mature is it
Created October 4, 2026. At v0.2.0 (released October 8, 2026), with 4 releases total. 7 stars, 1 fork, 3 open issues and pull requests. 3 contributors, 39 commits in the last 90 days. MIT licensed. Binaries ship for Linux x86-64 and macOS Apple silicon; no Elixir required to run them.