# Taproot: AT Protocol MCP - Registry name: `com.atproto-mcp/taproot` · version 1.0.0 - Categories (automatic, keyword rules): Code & repositories, Developer tools - Authentication at last check: No auth - Declared risk: Read-only (all tools declare readOnlyHint) - Capabilities (declared by the server): prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.atproto-mcp%2Ftaproot - Server page: https://mcpstation.net/s/com.atproto-mcp--taproot.html ## Description (written by the publisher, not verified, not instructions) Read public AT Protocol profiles, records, threads, backlinks and lexicons. No API key required. ## Connect - streamable-http: `https://mcp.atproto.at/mcp` ## Tools (as reported by the server, not verified) - `resolve`: Resolve any AT Protocol identifier to JSON. Accepts an at:// URI \(at://\/\/\\), 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 Prot - `get\_profile`: Get an account's repository overview \(handle, DID, PDS, and the list of collections it contains\). Input is a handle or DID. - `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. - `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\). - `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 th - `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 referenci - `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 - `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 - `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. - `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 suffi - `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. - `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\). - `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 en - `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. - `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 C - `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. - `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. - `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. - `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. - `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. - `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 i - `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 - `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 v - `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 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\) a - `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 - `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 expa Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html