Social Media
atproto.at
Provides tools to query AT Protocol social data, including profiles, records, and inbound engagement counts.
ENDPOINT 1
https://mcp.atproto.at/mcp
MCP server metadata
- Name
- taproot
- Version
- 0.1.0
Taproot exposes read-only AT Protocol data, PDS-agnostic (works for any PDS, relay, or labeler, not only Bluesky). Start with `resolve` for any at:// URI, handle, or DID. Use `get_profile`/`get_record`/`list_records` when you already know the shape, and `search_accounts` to turn a name into candidate DIDs. WORKFLOWS: - Who liked/reposted/replied to/quoted/mentioned/follows X: call `get_backlinks` (counts per category, each carrying a `source`), then `list_backlink_records` with that `source` for the author DIDs and record URIs, then `get_record` on a URI to read what a reply/quote/mention actually says. For a whole conversation, use `get_thread` (ancestors + direct replies). - Never trust a handle from search results or user input before acting on it: `verify_handle` checks the handle's DNS/well-known binding to the DID (anti-spoof). - Moderation labels: `list_labelers` to discover a labeler, then `query_labels` with it (labels key on DIDs; a handle target is resolved for you). - `count_records` may return exact:false with a cursor; call it again with that cursor and ADD the counts. MORE TOOLS: `get_account_history` (handle/PDS/key changes over time, did:plc). `search_lexicons`/`resolve_lexicon` (registry of published lexicons; `search_lexicons` filters by schema kind with `type`, e.g. type='space' for permissioned spaces, and always reports a `typeCounts` breakdown of the matches (plus `otherTypes` for what a type filter excluded) — an NSID does not imply its type). `list_repos_by_collection` (which accounts publish a lexicon, relay-served). `get_did_document` (raw identity doc). `get_app_link` (shareable web/PDS links). `describe_pds`/`get_repo_status` (PDS info, account takedown/active status). `get_latest_commit` (repo head CID/rev). `list_repos` (accounts hosted on a PDS). `get_pds_directory_info`/`get_relay_directory_info` (cached health cards). `list_blobs`/`get_blob_info` (an account's media blobs, and a blob's getBlob URL, content-type, and size). COMPOSE LINKS: to hand the user a prefilled record-composer link, build an at.new URL — https://at.new/?record=<percent-encoded record JSON> for small records, https://at.new/#record=b64:<base64url of the UTF-8 JSON, padding stripped> for anything bigger, or https://at.new/#record=dfl:<base64url of raw-deflate-compressed JSON> to keep large payloads compact (caps: 100 KB encoded, 1 MB decoded). Include "$type" in the record (it selects the collection). The user always reviews and presses Create themselves; nothing auto-posts. Template variables inside string values make the link reusable: {{$now}} (UTC instant), {{$did}}/{{$handle}} (whoever opens it), {{$lang}} (opener's language) resolve at create time. Any OTHER placeholder without a $ — any name you invent, e.g. {{title}} or {{message}} — becomes a text field the opener fills in before creating. Full guide: /new/api on the human host. CONVENTIONS: every list tool returns a `cursor` when more pages exist. Error responses carry a machine-readable `hint`. On a rate-limit error (429), wait retryAfterSec before retrying (heavy tools cost more budget). Add `include:['profile']` on resolve/get_profile/get_record for the repo owner's display name, bio, and avatar URL ('schema' applies to record/collection targets; 'backlinks' means followers when the target is an account). at:// URIs are also readable as MCP resources (resources/templates/list, resources/read), and prompts/list has ready-made recipes (who_engaged, account_audit, pds_health).
Known tools 27
get_profileGet an account's repository overview (handle, DID, PDS, and the list of collections it contains).
Inferred read-onlyget_recordFetch a single record by its full at:// URI (must include collection and rkey).
Inferred read-onlyget_backlinksIndex of who/what references a target,the inbound likes, reposts, quotes, replies, and follows,as COUNTS per category, via the Constellation backlink index.
Inferred read-onlylist_backlink_recordsList the actual records (author DID + verified handle + at:// URI, newest first) that reference a target for ONE category,i.e.
Inferred read-onlysearch_accountsSearch 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).
Inferred read-onlyget_account_historyAn account's history from its PLC audit log: handle changes, PDS migrations, signing-key rotations, and creation time.
Inferred read-onlysearch_lexiconsBrowse or search the registry of published AT Protocol lexicon schemas.
Inferred read-onlydescribe_pdsDescribe a Personal Data Server: its DID, whether registration requires an invite, the handle domains you can register there, and ToS/contact links.
Inferred read-onlylist_reposList the accounts (repositories) hosted on a PDS, via com.atproto.sync.listRepos: each repo's DID and active/takedown status, paginated.
Inferred read-onlyget_repo_statusLiveness/moderation status of an account's repository: whether it is active, its current revision, and any takedown/suspended/deactivated/deleted state.
Inferred read-onlyget_latest_commitThe current head commit of an account's repository (com.atproto.sync.getLatestCommit): its commit CID and revision.
Inferred read-onlyverify_handleBidirectionally verify that a handle is really owned by its DID, via DNS TXT and HTTPS well-known.
Inferred read-onlyget_did_documentFetch the raw DID document for any DID or handle: all aliases (alsoKnownAs), every service entry (PDS, labeler, custom AppView), and verification methods.
Inferred read-onlyget_app_linkTurn 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.
Inferred read-onlyget_pds_directory_infoA 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.
Inferred read-onlyget_relay_directory_infoA cached overview of a relay from firehose.directory: counts of PDSes it indexes (total/active/offline/banned) and total accounts.
Inferred read-onlyquery_labelsWhat moderation labels a labeler has applied to a subject (com.atproto.label.queryLabels),e.g.
Inferred read-onlylist_repos_by_collectionNetwork-wide: which accounts publish a given collection/lexicon,e.g.
Potential side effectscount_repos_by_collectionCount how many accounts across the network publish a given collection/lexicon,e.g.
Potential side effectslist_blobsList the blobs (uploaded media/attachments,images, video, etc.) hosted in an account's repository, via com.atproto.sync.listBlobs.
Inferred read-onlyget_blob_infoGet metadata for a single blob: its canonical PDS getBlob URL plus a best-effort content-type and byte size (via a HEAD request).
Inferred read-onlylist_labelersList the labeler (moderation) services known to the labeler relay,each labeler's DID, resolved handle, and service endpoint.
Inferred read-onlyget_threadReconstruct 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.
Potential side effectsCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.taproot]
url = "https://mcp.atproto.at/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"taproot": {
"type": "http",
"url": "https://mcp.atproto.at/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: taproot
Remote MCP URL: https://mcp.atproto.at/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"taproot": {
"url": "https://mcp.atproto.at/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"taproot": {
"type": "http",
"url": "https://mcp.atproto.at/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "taproot",
"transport": "streamable-http",
"url": "https://mcp.atproto.at/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Loading Trust v2 evidence…
Checking the associated registrable domain. The BuiltWith key remains server-side.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.