A comprehensive MCP server for AT Protocol integration, enabling LLMs to interact directly with the AT Protocol ecosystem
Server has 6 tools with schemas and descriptions present. Naming is verb-forward and mostly clear (create_list, add_to_list, find_influential_users, analyze_account, batch_action). Descriptions are substantive (120-300 chars), exceeding the 10-char minimum. Input schemas use Zod with type definitions, enums, and min/max constraints. However, several gaps reduce overall quality: (1) Output schemas are not visible in source, the tool implementations show only input validation via Zod, not documented return types. This violates the baseline that 100% of A+ tools have documented return types. (2) Error handling is not evident in the visible code, no error-categorization guidance (retryable vs fatal), no recovery hints like 'try search_users() if handle lookup fails'. (3) Some parameter descriptions reference defaults and constraints but lack actionable format guidance (e.g., analyze_account dimension enum is clear, but 'limit' parameters lack concrete examples of what happens at bounds). (4) The create_list, add_to_list, remove_from_list tools show good descriptions but no mention of idempotency or retry behavior, critical for write operations. (5) Composite tools like batch_action accept arrays but lack clear per-item error handling semantics in the description.
Add a user to an existing list. Requires authentication (app password). Creates a listitem record in the authenticated user's repository; the actor's handle is resolved to a DID before insertion. Use remove_from_list to undo the addition and get_list to verify membership. Subject to per-tool rate limiting.
Analyze a single account along one dimension. Requires authentication (app password). Read-only: performs no writes. One account-analysis tool: pick a dimension. For topic/search-based influencer discovery use find_influential_users instead. Subject to per-tool rate limiting.
Batch the same action across up to 25 targets in one call. Supported actions: follow (handles/DIDs), like (AT-URIs), repost (AT-URIs). Requires authentication (app password). Performs real writes (follows/likes/reposts) to the network on the caller's behalf. Subject to per-tool rate limiting.
Create a new list for organizing users (curate list) or moderation purposes (mod list). Requires authentication (app password). Creates a permanent list record in the authenticated user's repository; use add_to_list / remove_from_list to manage its members and get_list to inspect them. Subject to per-tool rate limiting.
Output schemas not documented. No visible definition of return types for any of the 6 tools. This violates the baseline that 100% of A+ tools have documented return types.
Error handling and recovery guidance missing. Tool descriptions lack actionable error hints (e.g., 'if handle not found, try using exact DID' or 'if user already in list, returns idempotent success'). No error categorization (retryable vs fatal).
Idempotency semantics unclear for WRITE tools. create_list, add_to_list, remove_from_list are all marked WRITE risk but descriptions do not promise or discuss idempotency. Agents retry on ambiguous failures, non-idempotent tools risk duplicate side effects.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 65 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 59 | - | v1 |
Find influential users in a topic or network by searching recent posts and ranking their authors. Works without authentication; richer with auth. Read-only — produces no side effects. Use this instead of find_similar_users when you want topic-driven discovery of high-reach accounts rather than a specific user's social graph. Subject to per-tool rate limiting.
Remove a user from an existing list. Requires authentication (app password). Deletes the listitem record from the authenticated user's repository; the actor's handle is resolved to a DID and the full list is paged through to locate the record. Use add_to_list to re-add a member or get_list to inspect current members. Subject to per-tool rate limiting.
Parameter format guidance incomplete. 'actor' parameter in add_to_list and remove_from_list accepts 'handle or DID' but no format examples or disambiguation. Does 'alice' work or only 'alice.bsky.social'? Only DIDs like 'did:plc:abc...'? Ambiguous parameters cause LLM errors.
Per-item error semantics for batch_action not specified. continueOnError parameter documented, but what does each result item contain? Success boolean? Error code? User cannot determine which targets succeeded/failed without explicit output structure.
Generic metric definitions. find_influential_users sortBy='engagement' and analyze_account dimension='engagement' both use 'engagement' without defining what it measures (likes? reposts? reply ratio? weighted combination?). LLMs cannot select correct tool or interpret results.