mcpbeat Sign in

Taproot: AT Protocol MCP Server

by atproto-mcp Your server? Claim it
answering

Taproot: AT Protocol MCP is answering right now. Last checked 6 min ago. It exposes 27 tools.

Read public AT Protocol profiles, records, threads, backlinks and lexicons. No API key required.

Uptime history 5 days of history
5 days agonow
100.0%
Uptime 24h
92 of 92 checks
27
Tools
read from the server
610 ms
Response time
average over 24h
open, no key
Access
streamable-http

Nothing serious here today

Today is the operative word: we check Taproot: AT Protocol MCP every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 6 min ago.

run in your terminal
claude mcp add taproot --transport http https://mcp.atproto.at/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "taproot": {
      "url": "https://mcp.atproto.at/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.taproot]
url = "https://mcp.atproto.at/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "taproot": {
      "url": "https://mcp.atproto.at/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "taproot": {
      "url": "https://mcp.atproto.at/mcp"
    }
  }
}

Available tools 27

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

count
count_records
Count the total records in an account's collection (e.g. how many likes a user has given). Scans server-side so you don't page manually. AT Protocol has no cheap exact count, so for very large collections this returns exact:false with a lower-bound count and a cursor,call again with that cursor and ADD the counts to keep going.
count_repos_by_collection
Count how many accounts across the network publish a given collection/lexicon,e.g. 'how many accounts have an at.glean.subscription?'. Walks a relay's com.atproto.sync.listReposByCollection with NO per-account handle resolution, so it's cheap and returns an exact total for typical collections. For very large collections it returns exact:false with a cursor,call again with that cursor and ADD the counts (like count_records). Relay-served (defaults to the public Bluesky relay; pass `relay` for another).
repos
list_repos
List the accounts (repositories) hosted on a PDS, via com.atproto.sync.listRepos: each repo's DID and active/takedown status, paginated. Answers 'who is hosted on this PDS?' / 'how many accounts does this PDS have?'. By default returns DIDs only (one request, large page — best for counting); pass enrich=true to also resolve handles (slower, smaller page). Input is the PDS origin (e.g. https://pds.example.com). Works for any PDS.
list_repos_by_collection
Network-wide: which accounts publish a given collection/lexicon,e.g. 'who has an app.bsky.feed.generator (a custom feed)?' or who uses a custom lexicon. Via a relay's com.atproto.sync.listReposByCollection (anonymous). By default returns DIDs only (one request, large page); pass enrich=true to also resolve handles (slower, smaller page). For just a total, use count_repos_by_collection. NOTE: relay-served (defaults to the public Bluesky relay; pass `relay` to query another), not the account's own PDS. Pairs with search_lexicons / resolve_lexicon.
resolve
resolve
Resolve any AT Protocol identifier to JSON. Accepts an at:// URI (at://<did-or-handle>/<collection>/<rkey>), a bare handle (alice.bsky.social), or a DID (did:plc:...). Returns a profile, a collection page, or a single record depending on how specific the input is. PDS-agnostic: works for any AT Protocol PDS, not just Bluesky.
resolve_lexicon
Explain what a record type means by resolving its lexicon schema. Input is a collection NSID (e.g. app.bsky.feed.post). Returns the schema's description and definition.
account
get_account_history
An account's history from its PLC audit log: handle changes, PDS migrations, signing-key rotations, and creation time. did:plc accounts only (did:web has no PLC log). Input is a handle or DID.
accounts
search_accounts
Search for AT Protocol accounts by handle or display name (paginated, via the Bluesky AppView app.bsky.actor.searchActors, so accounts unknown to that index may be missing). Returns candidate accounts with DID + handle, to turn a name into a DID. Results are search CANDIDATES, not verified handle-to-DID mappings: call verify_handle before trusting that a handle really belongs to a DID (resolve/get_profile only confirm an account exists, not that the handle is authentic).
app
get_app_link
Turn an at:// URI (or handle/DID) into shareable web links,a Bluesky/Blacksky app URL to open in a browser, plus the canonical PDS getRecord URL. Use when the user wants a clickable/pasteable link.
backlink
list_backlink_records
List the actual records (author DID + verified handle + at:// URI, newest first) that reference a target for ONE category,i.e. WHO liked, reposted, quoted, replied to, mentioned, or follows it. Workflow: call get_backlinks first to get a category `source`, then pass it here. To read WHAT a referencing record says (e.g. the text of a mention or reply), call get_record on its at:// URI. Author handles are resolved via identity resolution (verified), not search.
backlinks
get_backlinks
Index of who/what references a target,the inbound likes, reposts, quotes, replies, and follows,as COUNTS per category, via the Constellation backlink index. Target is a record's at:// URI or an account DID. This returns aggregate counts only; each category also includes a `source` string. To list the actual records and their author DIDs for one category (e.g. WHO liked a post), call list_backlink_records with that `source`.
blob
get_blob_info
Get metadata for a single blob: its canonical PDS getBlob URL plus a best-effort content-type and byte size (via a HEAD request). Returns the URL, never the bytes. Use to turn a blob ref (CID) found in a record into a downloadable link and learn what it is. Input is the owning repo (handle or DID) and the blob CID.
blobs
list_blobs
List the blobs (uploaded media/attachments,images, video, etc.) hosted in an account's repository, via com.atproto.sync.listBlobs. Returns each blob's CID and its canonical PDS getBlob URL (PDS-native, works for any PDS,not a CDN). Answers 'what media does this account host?'. Records reference blobs by CID; use this (or get_blob_info) to turn a CID into a fetchable URL. Input is a handle or DID.
describe
describe_pds
Describe a Personal Data Server: its DID, whether registration requires an invite, the handle domains you can register there, and ToS/contact links. Works for any PDS, not just Bluesky. Input is the PDS origin (e.g. https://pds.example.com).
did
get_did_document
Fetch the raw DID document for any DID or handle: all aliases (alsoKnownAs), every service entry (PDS, labeler, custom AppView), and verification methods. Broader than get_profile, and works for did:web accounts. Input is a handle or DID.
labelers
list_labelers
List the labeler (moderation) services known to the labeler relay,each labeler's DID, resolved handle, and service endpoint. The discovery step BEFORE query_labels, which needs a labeler DID/handle up front: use this to find moderation.bsky.app and any third-party/regional labelers, then pass one to query_labels.
labels
query_labels
What moderation labels a labeler has applied to a subject (com.atproto.label.queryLabels),e.g. 'has @alice or this post been labeled spam/nsfw/hidden by labeler X?'. Anonymous and service-agnostic: the labeler's own service endpoint is found from its DID document (no hardcoded aggregator). Subject is a DID/handle (account labels) or an at:// URI (record labels); labeler is the handle or DID of a labeler service (e.g. moderation.bsky.app).
latest
get_latest_commit
The current head commit of an account's repository (com.atproto.sync.getLatestCommit): its commit CID and revision. The cheapest way to fingerprint a repo or detect whether it changed since you last looked, without downloading data. Complements get_repo_status (which has the rev but not the commit CID). Input is a handle or DID.
lexicons
search_lexicons
Browse or search the registry of published AT Protocol lexicon schemas. The response's `total` field is the exact registry size and `matched` is the exact match count. Substring matches the NSID or description (query 'profile' → anything containing 'profile'); prefix the query with a DOT for a suffix match (query '.profile' → only NSIDs ENDING in .profile, i.e. profile record types). Filter by schema kind with `type` — 'give me every space lexicon' is type='space' with NO query, since an NSID does not imply its type (space.saebyeok.permissionSet is a permission set; app.kimbia.circle is a space). Types: the spec's primary types are record, query, procedure, subscription, and permission-set; a main def may also be a non-primary type (object, token, string); space comes from proposal 0016 (permissioned data), which is not in the ratified spec; defs-only marks a schema file with no main definition. Every response carries a `typeCounts` breakdown of the returned matches (it sums to `matched`), so one call with no arguments shows which kinds exist and how many; when you filter by type, `otherTypes` reports what the filter excluded, so a too-narrow or misspelled type still shows you the real options. Without a query or type, returns the total plus a sample. Results are paginated by `limit`; to see matches beyond the first page, call again with the `offset` printed at the end of the list. Use resolve_lexicon for a specific schema's full definition.
pds
get_pds_directory_info
A cached health card for a PDS from pds.directory: version, DID, approximate user count, reachability, last-checked time, available domains, and which relays index it. Input is the PDS hostname (e.g. pds.example.com). Best-effort/cached data.
profile
get_profile
Get an account's repository overview (handle, DID, PDS, and the list of collections it contains). Input is a handle or DID.
record
get_record
Fetch a single record by its full at:// URI (must include collection and rkey). Returns the record's value, CID, and resolved identity.
records
list_records
List records in a collection for an account, with pagination. Provide the repo (handle or DID) and the collection NSID (e.g. app.bsky.feed.post).
relay
get_relay_directory_info
A cached overview of a relay from firehose.directory: counts of PDSes it indexes (total/active/offline/banned) and total accounts. Input is the relay hostname (e.g. bsky.network). Best-effort/cached data.
repo
get_repo_status
Liveness/moderation status of an account's repository: whether it is active, its current revision, and any takedown/suspended/deactivated/deleted state. Answers 'has @alice been taken down?' which get_profile can't. Input is a handle or DID.
thread
get_thread
Reconstruct the conversation around a post: its ancestor chain up to the thread root (following reply.parent, root-first) PLUS a bounded descendant reply TREE,replies, replies-to-replies, and so on, each tagged with its depth and parent,walked breadth-first and capped for cost. NOTE: descendant expansion assumes the Bluesky reply model (app.bsky.feed.post with reply.parent); ancestor walking follows reply.parent generically, but the reply tree is specific to that lexicon and will be empty for record types that model replies differently. Answers 'show me this whole conversation / what is this replying to?'. If the tree is truncated, use list_backlink_records on a specific post's URI to expand it further. Input is a post's at:// URI.
verify
verify_handle
Bidirectionally verify that a handle is really owned by its DID, via DNS TXT and HTTPS well-known. Returns whether each method passed. Use this to check for impersonation/spoofing,search results and resolve give candidates, this gives cryptographic binding.

Endpoints

URLTransportStateLatencyChecked
https://mcp.atproto.at/mcp streamable-http answering 1585 ms 6 min ago

Alternatives to Taproot: AT Protocol MCP

same job, measured the same way
Chess.com MCP by UnClick
by malamutemayhem

Chess.com player profiles, stats, games, puzzles, and leaderboards. No API key. By UnClick.

24 installs/wk local only
Mana Public
by mana

Read-only MCP tools for Mana public creations, tags, creator profiles, and share pages.

6 tools answering
Sports
by vublox

Live football scores, match summaries, and fan clip links from Vublox. No API key required.

48 installs/wk local only
Google News Scraper — Real Publisher URLs, MCP-Ready
by paulovitorti

Scrapes Google News and returns the real publisher URLs, not redirect links.

answering
KanbanThing
by kanbanthing

Create and drive KanbanThing kanban boards. No account, no API key, board link required.

8 tools answering
Twitter/X MCP
by granitebps

Read public X posts, replies, profiles, and search results through Rettiwt or the official API.

33 installs/wk local only
MCP Starmeet
by star-meet

Free Vedic astrology MCP: birth-chart, panchang & nakshatra tools. Public API, no key required.

51 installs/wk local only
Github
by pipeworx-io

GitHub MCP — wraps the GitHub public REST API (no auth required for public endpoints)

40 tools answering

Taproot: AT Protocol MCP — questions

Answers built from our own checks of this server.

What can Taproot: AT Protocol MCP do?
It exposes 27 tools, read directly from the server on our last check. Among them: count_records, count_repos_by_collection, describe_pds, get_account_history, get_app_link, get_backlinks and 21 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Taproot: AT Protocol MCP mostly used for?
Its tools cluster around count, repos and resolve. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Taproot: AT Protocol MCP working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 92 of 92 checks got a reply (100.0%), average response time 610 ms. The bar chart above shows every period we have measured.
How do I connect Taproot: AT Protocol MCP?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Taproot: AT Protocol MCP need an API key?
No. Taproot: AT Protocol MCP completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 27 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Taproot: AT Protocol MCP?
It answers our handshake in 610 ms on average, which is faster than 21% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.