Taproot: AT Protocol MCP
What this MCP does
Reads and resolves public AT Protocol data, including profiles, posts, records, threads, backlinks, repositories, lexicons, moderation labels, and identity relationships.
Tools
Input schema
{'type': 'object', 'required': ['repo', 'collection'], 'properties': {'repo': {'type': 'string', 'description': 'A handle or DID.'}, 'cursor': {'type': 'string', 'description': 'Resume cursor from a prior capped (exact:false) count. The new count covers records AFTER it,add it to your previous total.'}, 'collection': {'type': 'string', 'description': 'Collection NSID, e.g. app.bsky.feed.like.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['collection'], 'properties': {'relay': {'type': 'string', 'description': 'Optional relay origin to query instead of the default, e.g. https://relay.example.com.'}, 'cursor': {'type': 'string', 'description': 'Resume cursor from a previous exact:false response.'}, 'collection': {'type': 'string', 'description': 'A collection NSID, e.g. app.bsky.feed.generator.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['pds'], 'properties': {'pds': {'type': 'string', 'description': 'A PDS origin URL, e.g. https://pds.example.com.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['actor'], 'properties': {'actor': {'type': 'string', 'description': 'A handle or DID (did:plc).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['uri'], 'properties': {'uri': {'type': 'string', 'description': 'An at:// URI, handle, or DID.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['target'], 'properties': {'target': {'type': 'string', 'description': 'A record at:// URI or a DID.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['repo', 'cid'], 'properties': {'cid': {'type': 'string', 'description': "The blob CID (e.g. bafkrei...), as found in a record's blob ref."}, 'repo': {'type': 'string', 'description': "A handle or DID (the blob's owning repo)."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['actor'], 'properties': {'actor': {'type': 'string', 'description': 'A handle or DID.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['repo'], 'properties': {'repo': {'type': 'string', 'description': 'A handle or DID.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hostname'], 'properties': {'hostname': {'type': 'string', 'description': 'A PDS hostname, e.g. pds.example.com.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['actor'], 'properties': {'actor': {'type': 'string', 'description': 'A handle (alice.bsky.social) or DID (did:plc:...).'}, 'include': {'type': 'array', 'items': {'enum': ['schema', 'backlinks', 'profile'], 'type': 'string'}, 'description': "Optional enrichments: 'schema' resolves the collection's lexicon; 'backlinks' lists who referenced the target; 'profile' adds the repo owner's display name, bio, and avatar URL."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['uri'], 'properties': {'uri': {'type': 'string', 'description': 'Full at:// URI: at://<did-or-handle>/<collection>/<rkey>.'}, 'include': {'type': 'array', 'items': {'enum': ['schema', 'backlinks', 'profile'], 'type': 'string'}, 'description': "Optional enrichments: 'schema' resolves the collection's lexicon; 'backlinks' lists who referenced the target; 'profile' adds the repo owner's display name, bio, and avatar URL."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hostname'], 'properties': {'hostname': {'type': 'string', 'description': 'A relay hostname, e.g. bsky.network.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['repo'], 'properties': {'repo': {'type': 'string', 'description': 'A handle or DID.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['uri'], 'properties': {'uri': {'type': 'string', 'description': "A post's full at:// URI: at://<did-or-handle>/app.bsky.feed.post/<rkey>."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['target', 'source'], 'properties': {'limit': {'type': 'integer', 'maximum': 25, 'minimum': 1, 'description': 'Page size (1-25, default 25). Use the returned cursor for the next page.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor returned by a previous call (to get the next page).'}, 'source': {'type': 'string', 'description': 'A category `source` from get_backlinks, e.g. app.bsky.feed.like:subject.uri.'}, 'target': {'type': 'string', 'description': 'The referenced record at:// URI or account DID (same target passed to get_backlinks).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['repo'], 'properties': {'repo': {'type': 'string', 'description': 'A handle or DID.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size (1-100, default 50). A cursor in the response means more pages exist.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Page size (1-20, default 20). Use the returned cursor for the next page.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['repo', 'collection'], 'properties': {'repo': {'type': 'string', 'description': 'A handle or DID.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size (1-100, default 50). A cursor in the response means more pages exist.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous page.'}, 'collection': {'type': 'string', 'description': 'Collection NSID, e.g. app.bsky.feed.post.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['pds'], 'properties': {'pds': {'type': 'string', 'description': 'A PDS origin URL, e.g. https://pds.example.com.'}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Page size (1-1000, default 1000). With enrich=true the effective page is capped near 20 (each DID is resolved to a handle). Use the returned cursor for the next page.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous call.'}, 'enrich': {'type': 'boolean', 'description': 'Resolve each DID to its handle. Default false — returns DIDs only in ONE request (large page, the fast path for listing/counting). Set true only when you need handles (slower, smaller page).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['collection'], 'properties': {'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Page size (1-1000, default 1000). With enrich=true the effective page is capped near 20 (each DID is resolved to a handle). Use the returned cursor for the next page.'}, 'relay': {'type': 'string', 'description': 'Optional relay origin to query instead of the default, e.g. https://relay.example.com.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous call.'}, 'enrich': {'type': 'boolean', 'description': 'Resolve each DID to its handle. Default false — returns DIDs only in ONE request (large page, the fast path for listing/counting). Set true only when you need handles (slower, smaller page).'}, 'collection': {'type': 'string', 'description': 'A collection NSID, e.g. app.bsky.feed.generator.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['subject', 'labeler'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size (1-100, default 50). A cursor in the response means more pages exist.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous call.'}, 'labeler': {'type': 'string', 'description': 'The labeler service to ask,a handle or DID, e.g. moderation.bsky.app.'}, 'subject': {'type': 'string', 'description': 'What to check: a DID/handle (account-level labels) or an at:// URI (record-level).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['uri'], 'properties': {'uri': {'type': 'string', 'description': 'An at:// URI, a bare handle, or a DID.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size (1-100, default 50). A cursor in the response means more pages exist.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor (collections only).'}, 'include': {'type': 'array', 'items': {'enum': ['schema', 'backlinks', 'profile'], 'type': 'string'}, 'description': "Optional enrichments: 'schema' resolves the collection's lexicon; 'backlinks' lists who referenced the target; 'profile' adds the repo owner's display name, bio, and avatar URL."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['nsid'], 'properties': {'nsid': {'type': 'string', 'description': 'A collection NSID, e.g. app.bsky.feed.post.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size (1-100, default 50). A cursor in the response means more pages exist.'}, 'query': {'type': 'string', 'description': 'A handle fragment or display name, e.g. "alice".'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor from a previous call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'type': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'description': 'Keep only these schema kinds, e.g. "space" for permissioned space declarations, or ["record","procedure"]. Case-insensitive. Combine with query to search within a kind.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size (1-100, default 50). A cursor in the response means more pages exist.'}, 'query': {'type': 'string', 'description': 'Optional substring to filter by, e.g. "profile" or "app.bsky".'}, 'offset': {'type': 'integer', 'minimum': 0, 'description': 'Skip this many matches (pagination). Use the offset value printed after a truncated list.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['handle'], 'properties': {'handle': {'type': 'string', 'description': 'A handle, e.g. alice.bsky.social.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Recent tool changes
Similar MCP servers
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…
apis-io
Provides catalog search, comparison, scoring, enrichment, lists, and dataset exports for APIs, providers, specifications, workflo…
Tools for Agents
Provides web research and extraction workflows, crawling, browser automation, PDF and book OCR, text processing, embeddings, and …
API Direct
Searches and retrieves data from social networks, news and Google services, while also providing Amazon product, seller, ranking,…
canton-ccpedia
Searches and explains Canton Network and Daml documentation, governance proposals, forums, code examples, APIs, releases, and eco…
webbersites-x402-data-api
Provides pay-per-call utilities for web scraping, SEO and accessibility audits, document extraction, DNS and email checks, crypto…
TERM
Provides an agent-oriented forum for publishing findings, discussing questions, voting, communities, and deterministic research c…
api-evangelist
Provides API governance analysis, OpenAPI overlays and version diffs, security-sensitive field classification, code samples, matu…