Bluesky Social MCP
Provides comprehensive tools for interacting with the Bluesky social network, including authentication, profile operations (following/unfollowing, muting/unmuting users), timeline and feed management, post interactions (liking, reposting), and content creation/management (sending text posts, images, videos, and deleting content).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bluesky Social MCPshow me my home timeline"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bluesky Social MCP
An MCP server for interacting with the Bluesky social network via the atproto client.
:wave: Leave an issue if you have any problems running this MCP. I should be able to push out fixes pretty quickly.
Quick Start
Get your Bluesky app password at: https://bsky.app/settings/app-passwords
Add the following to your MCP config file (Note that the version is pinned):
{
"mcpServers": {
"bluesky-social": {
"command": "uvx",
"args": ["--from", "git+https://github.com/gwbischof/bluesky-social-mcp@v0.1", "bluesky-social-mcp"],
"env": {
"BLUESKY_IDENTIFIER": "your-handle.bsky.social",
"BLUESKY_APP_PASSWORD": "your-app-password"
}
}
}
}For security reasons, I think its best to keep it pinned and manually change your config to update the version.
Related MCP server: TDC MCP Server
Tool Status
All tools have been implemented and tested ✅
Authentication & Setup
✅
check_auth_status- Check if the current session is authenticated
Profile Operations
✅
get_profile- Get a user profile (Client method:get_profile)✅
get_follows- Get users followed by an account (Client method:get_follows)✅
get_followers- Get users who follow an account (Client method:get_followers)✅
follow_user- Follow a user (Client method:follow)✅
unfollow_user- Unfollow a user (Client method:unfollow)✅
mute_user- Mute a user (Client method:mute)✅
unmute_user- Unmute a user (Client method:unmute)✅
resolve_handle- Resolve a handle to DID (Client method:resolve_handle)
Feed Operations
✅
get_timeline- Get posts from your home timeline (Client method:get_timeline)✅
get_author_feed- Get posts from a specific user (Client method:get_author_feed)✅
get_post_thread- Get a full conversation thread (Client method:get_post_thread)
Post Interactions
✅
like_post- Like a post (Client method:like)✅
unlike_post- Unlike a post (Client method:unlike)✅
get_likes- Get likes for a post (Client method:get_likes)✅
repost- Repost a post (Client method:repost)✅
unrepost- Remove a repost (Client method:unrepost)✅
get_reposted_by- Get users who reposted (Client method:get_reposted_by)
Post Creation & Management
✅
send_post- Create a new text post (Client method:send_post)✅
send_image- Send a post with a single image (Client method:send_image)✅
send_images- Send a post with multiple images (Client method:send_images)✅
send_video- Send a post with a video (Client method:send_video)✅
delete_post- Delete a post (Client method:delete_post)✅
get_post- Get a specific post (Client method:get_post)✅
get_posts- Get multiple posts (Client method:get_posts)
Run from local clone of repo.
{
"mcpServers": {
"bluesky-social": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/bluesky-social-mcp",
"run",
"server.py"
]
"env": {
"BLUESKY_IDENTIFIER": "user-name.bsky.social",
"BLUESKY_APP_PASSWORD": "app-password-here"
}
}
}
}Dev Setup
Install dependencies:
uv syncRun the server:
uv run bluesky-social-mcp
Debug with MCP Inspector
mcp dev server.py
mcp dev server.py --with-editable .Run the tests
I run the tests against the actual Bluesky server.
The tests will use BLUESKY_IDENTIFIER, and BLUESKY_APP_PASSWORD env vars.
uv run pytestAvailable Tools
25 toolscheck_auth_statusA
Check if the current session is authenticated.
Authentication happens automatically using environment variables:
- BLUESKY_IDENTIFIER: Required - your Bluesky handle
- BLUESKY_APP_PASSWORD: Required - your app password
- BLUESKY_SERVICE_URL: Optional - defaults to https://bsky.social
Returns:
Authentication status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains that authentication is automatic via environment variables, lists the required and optional variables, and mentions the return value (authentication status). However, it lacks details on error handling or specific status formats, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by necessary details about authentication and returns. Each sentence adds essential information without redundancy, making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is largely complete, covering purpose, usage, and behavioral context. However, it could be more detailed on the return format (e.g., what 'Authentication status' entails) to fully compensate for the lack of output schema, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description adds value by explaining the authentication mechanism (environment variables) and the return type, which goes beyond the empty input schema, making it more informative for users.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb ('Check') and resource ('if the current session is authenticated'), distinguishing it from all sibling tools which perform actions like deleting posts, following users, or retrieving content. It precisely defines what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to verify authentication status) and implies prerequisites (environment variables must be set), but it does not explicitly state when not to use it or name alternatives. This makes it helpful but not fully comprehensive for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postA
Delete a post created by the authenticated user.
Args:
ctx: MCP context
uri: URI of the post to delete
Returns:
Status of the delete operation
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It correctly identifies this as a destructive operation ('Delete') and specifies the authentication context ('by the authenticated user'), which are crucial behavioral traits. However, it doesn't mention potential side effects (e.g., removing associated likes/reposts), error conditions, or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear purpose statement followed by structured Args and Returns sections. While efficient, the 'ctx: MCP context' parameter documentation adds minimal value since it's boilerplate for MCP tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description provides adequate basics (purpose, authentication context, parameter meaning) but lacks important details about return values (what 'Status' means), error handling, and operational constraints. Given the tool's complexity, more completeness would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and only one parameter, the description adds meaningful context by explaining that 'uri' refers to 'URI of the post to delete'. This clarifies the parameter's purpose beyond what the bare schema provides, though it doesn't specify the URI format or provide examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Delete') and resource ('a post created by the authenticated user'), distinguishing it from sibling tools like 'get_post' or 'like_post'. It explicitly identifies the target resource scope (user's own posts) and the destructive nature of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool ('Delete a post created by the authenticated user'), establishing the prerequisite of ownership. However, it doesn't explicitly mention when NOT to use it (e.g., for posts by other users) or name alternative tools for related operations like 'unlike_post' or 'unrepost'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_userC
Follow a user.
Args:
ctx: MCP context
handle: Handle of the user to follow
Returns:
Status of the follow operation
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action 'follow a user' but doesn't disclose behavioral traits such as authentication requirements, rate limits, whether it's idempotent, what happens if the user doesn't exist, or if there are privacy restrictions. The description is minimal and lacks critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and structured with sections for Args and Returns, making it easy to scan. However, the 'ctx' parameter in Args is unnecessary clutter since it's an MCP implementation detail not relevant to the agent. Overall, it's efficient but could be more focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a mutation tool with no annotations and no output schema), the description is incomplete. It doesn't explain the return value ('Status of the follow operation') in detail, such as success indicators or error conditions. For a tool that modifies user relationships, more context on behavior and outcomes is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that lists 'handle' as the parameter, adding meaning beyond the input schema (which has 0% description coverage). However, it doesn't explain what a 'handle' is (e.g., username, ID, format) or provide examples. With 1 parameter and low schema coverage, this adds some value but is insufficient for full clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'follow' and resource 'user', which provides a basic purpose. However, it doesn't distinguish this tool from sibling tools like 'get_follows' or 'unfollow_user' beyond the obvious action difference, nor does it specify what platform or system this applies to. The purpose is clear but lacks differentiation from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication status), exclusions (e.g., cannot follow oneself), or compare it to siblings like 'get_follows' (for checking follows) or 'unfollow_user' (for reversing the action). Usage is implied by the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_feedC
Get posts from a specific user.
Args:
ctx: MCP context
actor: Handle or DID of the user
cursor: Optional pagination cursor
filter: Optional filter for post types
limit: Maximum number of results to return
include_pins: Whether to include pinned posts
Returns:
Feed with posts from the specified user
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| cursor | No | ||
| filter | No | ||
| limit | No | ||
| include_pins | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions pagination ('cursor') and filtering options, but doesn't describe important traits like rate limits, authentication requirements, error conditions, or whether this is a read-only operation. For a feed-fetching tool with 5 parameters, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns) and uses only essential sentences. The front-loaded purpose statement is immediately followed by parameter details. While efficient, the 'Args' section could be more integrated with the main description rather than appearing as a separate documentation block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no annotations and no output schema, the description provides basic purpose and parameter listing but lacks important context. It doesn't explain the return format beyond 'Feed with posts,' doesn't mention authentication requirements, and doesn't differentiate from sibling tools. The parameter explanations are too brief to fully understand usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that lists all 5 parameters with brief explanations, providing semantic meaning beyond the 0% schema description coverage. However, the explanations are minimal ('Handle or DID of the user', 'Optional filter for post types') and don't elaborate on format, constraints, or examples. This partially compensates for the schema gap but doesn't fully document parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get posts from a specific user.' It specifies the verb ('Get') and resource ('posts from a specific user'), making it immediately understandable. However, it doesn't explicitly differentiate from siblings like 'get_posts' or 'get_timeline' which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'get_posts' (which might get posts more broadly) or 'get_timeline' (which might show a chronological feed). There's no context about prerequisites, authentication needs, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_followersC
Get users who follow an account.
Args:
ctx: MCP context
handle: Optional handle to get followers for. If None, gets the authenticated user
limit: Maximum number of results to return (1-100)
cursor: Optional pagination cursor
Returns:
List of follower accounts
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that if 'handle' is None, it gets the authenticated user's followers, which adds some context. However, it lacks critical details: it doesn't specify authentication needs (implied but not stated), rate limits, pagination behavior beyond the cursor parameter, or what the returned list structure looks like. For a tool with no annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args and Returns. Each sentence adds value without redundancy. It could be slightly more concise by integrating the default behavior into the main description, but overall it's efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description does a fair job: it covers the tool's purpose and parameters adequately. However, it lacks details on authentication requirements, error handling, and the structure of returned data (beyond 'List of follower accounts'), which are important for a social media API tool. It's minimally viable but has clear gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for all three parameters: 'handle' (optional, defaults to authenticated user), 'limit' (range 1-100), and 'cursor' (pagination). This goes beyond the schema's basic titles. However, it doesn't explain parameter interactions or provide examples, leaving some ambiguity (e.g., how 'handle' interacts with authentication).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get users who follow an account.' It specifies the verb ('Get') and resource ('users who follow an account'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_follows' (which might get accounts that a user follows rather than followers of an account), leaving room for potential confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_follows' or 'get_profile' that might retrieve related data, nor does it specify prerequisites such as authentication requirements or context for when fetching followers is appropriate. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_followsB
Get users followed by an account.
Args:
ctx: MCP context
handle: Optional handle to get follows for. If None, gets the authenticated user
limit: Maximum number of results to return (1-100)
cursor: Optional pagination cursor
Returns:
List of followed accounts
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that it returns a 'List of followed accounts' and includes pagination via 'cursor', but it doesn't specify authentication requirements, rate limits, error conditions, or what happens if the handle doesn't exist. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the purpose, followed by clear sections for Args and Returns. Every sentence adds value without redundancy, making it efficient and easy to parse. The bullet-point-like format enhances readability without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and parameters but lacks details on authentication, error handling, and output structure (e.g., what fields are in the returned list). Without annotations or an output schema, more context would be helpful for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'handle' is optional and defaults to the authenticated user, 'limit' has a range (1-100), and 'cursor' is for pagination. This compensates well for the schema's lack of descriptions, though it doesn't detail the format of 'handle' or 'cursor' values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get users followed by an account.' It specifies the verb ('Get') and resource ('users followed by an account'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'get_followers' (which gets followers rather than follows), though the distinction is implied by the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by noting that if 'handle' is None, it gets follows for the authenticated user, which implies when to use this parameter. However, it doesn't offer explicit guidance on when to choose this tool over alternatives like 'get_followers' or 'get_profile', nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_likesB
Get likes for a post.
Args:
ctx: MCP context
uri: URI of the post to get likes for
cid: Optional CID of the post (not strictly required)
limit: Maximum number of results to return (1-100)
cursor: Optional pagination cursor
Returns:
List of likes for the post
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| cid | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions pagination via 'cursor' and a 'limit' parameter, which is helpful. However, it doesn't address important behavioral aspects like rate limits, authentication requirements, error conditions, or whether this is a read-only operation (though 'get' implies it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns) and front-loads the core purpose. Each sentence earns its place, though the 'ctx' parameter explanation could be more specific about its role. The structure is efficient but not perfectly minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description covers parameters well but lacks behavioral context. It explains what the tool returns ('List of likes for the post') but doesn't describe the response format, error handling, or authentication requirements. Given the complexity and lack of structured data, it's adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining all 4 parameters in the Args section. It clarifies that 'uri' is required, 'cid' is optional, 'limit' has a range (1-100), and 'cursor' enables pagination. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get likes for a post' which is a specific verb+resource combination. It distinguishes this tool from siblings like 'get_post' or 'get_reposted_by' by focusing specifically on likes. However, it doesn't explicitly contrast with similar tools like 'get_reposted_by' which might have overlapping use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of when this tool is appropriate compared to other data retrieval tools in the sibling list like 'get_post' or 'get_reposted_by', nor any context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postC
Get a specific post.
Args:
ctx: MCP context
post_rkey: The record key of the post
profile_identify: Handle or DID of the post author
cid: Optional CID of the post
Returns:
The requested post
| Name | Required | Description | Default |
|---|---|---|---|
| post_rkey | Yes | ||
| profile_identify | No | ||
| cid | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions it returns 'The requested post' but doesn't describe error conditions, authentication requirements, rate limits, or what happens when parameters don't match. For a read operation with no annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns) and front-loads the core purpose. However, the 'ctx: MCP context' in Args is unnecessary clutter since MCP context is implicit in all tools, and the Returns section could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain error cases, authentication requirements, or what the return structure looks like. The parameter documentation helps but doesn't compensate for the lack of behavioral and output information needed for proper tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides parameter documentation in the Args section, explaining post_rkey as 'The record key of the post', profile_identify as 'Handle or DID of the post author', and cid as 'Optional CID of the post'. With 0% schema description coverage, this adds meaningful semantic context beyond the bare schema, though it doesn't fully explain parameter relationships or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with 'Get a specific post' - a specific verb (Get) and resource (post). It distinguishes from siblings like get_posts (plural) and get_post_thread by focusing on a single post. However, it doesn't explicitly mention how it differs from get_author_feed or get_timeline which might also retrieve posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like get_posts, get_post_thread, get_author_feed, and get_timeline that all retrieve post data, there's no indication of when this single-post retrieval is preferred over batch retrieval or thread context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postsC
Get multiple posts by their URIs.
Args:
ctx: MCP context
uris: List of post URIs to retrieve
Returns:
List of requested posts
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool retrieves posts by URIs but lacks behavioral details such as error handling (e.g., invalid URIs), rate limits, authentication requirements, or whether it's read-only. The mention of 'ctx: MCP context' is vague and adds little value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by structured sections for args and returns. It's efficient with minimal waste, though the 'ctx' parameter could be omitted or better explained to improve clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and low schema coverage, the description is moderately complete. It covers the basic operation and parameters but lacks details on behavior, error cases, and output structure. For a tool with 1 parameter and many siblings, it should provide more context to guide usage effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents the 'uris' parameter as a list of post URIs to retrieve, which adds meaning beyond the schema's basic type definition. However, it doesn't specify URI format, constraints, or examples, leaving gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('posts'), specifying retrieval by URIs. It distinguishes from siblings like 'get_post' (singular) and 'get_author_feed' (by author), but could be more explicit about how it differs from 'get_post_thread' or 'get_timeline'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'get_post' (for single posts) or 'get_author_feed' (for posts by author). The description implies usage for multiple URIs, but lacks context on prerequisites, limitations, or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_threadC
Get a full conversation thread.
Args:
ctx: MCP context
uri: URI of the post to get thread for
depth: How many levels of replies to include
parent_height: How many parent posts to include
Returns:
Thread with the post and its replies/parents
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| depth | No | ||
| parent_height | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves a thread but doesn't describe what 'full' means (e.g., pagination, rate limits, error handling, or authentication requirements). For a read operation with no annotation coverage, this is a significant gap in transparency about how the tool behaves in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured sections for Args and Returns. Each sentence earns its place by defining parameters and output, though the 'ctx' parameter is unexplained and could be trimmed for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 parameters, no annotations, no output schema), the description is incomplete. It lacks details on authentication, error cases, return format (beyond 'Thread'), and how depth/parent_height interact. For a tool that retrieves nested data, more context is needed to use it effectively without trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all parameters (uri, depth, parent_height) and provides brief explanations (e.g., 'How many levels of replies to include' for depth), adding meaning beyond the bare schema. However, it doesn't clarify units (e.g., depth in levels vs. count), default behaviors, or constraints, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a full conversation thread.' This specifies the verb ('Get') and resource ('conversation thread'), distinguishing it from siblings like get_post (single post) or get_timeline (timeline feed). However, it doesn't explicitly differentiate from get_author_feed or get_posts which might also return threads, making it slightly less specific than ideal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose get_post_thread over get_post (for a single post) or get_author_feed (for a user's posts), nor does it specify prerequisites like authentication or context for thread retrieval. This leaves the agent without clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileB
Get a user profile.
Args:
ctx: MCP context
handle: Optional handle to get profile for. If None, gets the authenticated user
Returns:
Profile data
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the authenticated user fallback, which is useful, but doesn't cover other important aspects like authentication requirements, rate limits, error conditions, or what 'Profile data' includes. For a read operation with zero annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by Args and Returns sections. Every sentence adds value without redundancy, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single optional parameter, read operation), no annotations, and no output schema, the description is minimally adequate. It covers the basic purpose and parameter behavior but lacks details on authentication, error handling, and the structure of returned 'Profile data', which would be helpful for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for the single parameter ('handle') by explaining its optional nature and the behavior when it's None (gets authenticated user's profile). With 0% schema description coverage and only one parameter, this adequately compensates, though it could specify what format the handle should be in.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('user profile'), making it immediately understandable. However, it doesn't explicitly differentiate this from sibling tools like 'resolve_handle' or 'check_auth_status', which might also retrieve user-related information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance by explaining that if no handle is provided, it gets the authenticated user's profile. However, it doesn't explicitly state when to use this tool versus alternatives like 'resolve_handle' or 'get_followers', nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reposted_byB
Get users who reposted a post.
Args:
ctx: MCP context
uri: URI of the post to get reposts for
cid: Optional CID of the post (not strictly required)
limit: Maximum number of results to return (1-100)
cursor: Optional pagination cursor
Returns:
List of users who reposted the post
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| cid | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions pagination via 'cursor' and a 'limit' range (1-100), which adds some context, but fails to describe authentication needs, rate limits, error conditions, or what the returned user list structure looks like. For a read operation with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first followed by structured parameter and return sections. Every sentence adds value, though the 'Args' and 'Returns' headers are slightly redundant given the schema context, keeping it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description is partially complete. It covers parameters well but lacks output details, error handling, and behavioral context like authentication or rate limits. It's adequate as a minimum viable description but has clear gaps for a read operation in a social media context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains that 'uri' is for the post to get reposts for, 'cid' is optional and not strictly required, 'limit' has a range (1-100) and default behavior, and 'cursor' enables pagination. This compensates well for the schema's lack of descriptions, though it doesn't detail parameter formats or interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('users who reposted a post'), distinguishing it from siblings like get_likes, get_followers, or get_post which target different resources. The opening sentence directly answers what the tool does without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_likes or get_post_thread, nor does it mention prerequisites or contextual constraints. While the purpose is clear, usage guidance is absent, leaving the agent to infer when this specific retrieval is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timelineB
Get posts from your home timeline.
Args:
ctx: MCP context
algorithm: Optional algorithm to use for timeline
cursor: Optional pagination cursor
limit: Maximum number of results to return
Returns:
Timeline feed with posts
| Name | Required | Description | Default |
|---|---|---|---|
| algorithm | No | ||
| cursor | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions pagination via 'cursor' and result limiting via 'limit', which is helpful, but doesn't cover important aspects like authentication requirements, rate limits, error conditions, or what constitutes 'your home timeline' (e.g., authenticated user's timeline). The return format is minimally described as 'Timeline feed with posts' without detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by organized sections for Args and Returns. Every sentence earns its place, with no redundant information. The formatting makes it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, the description provides basic but incomplete coverage. It explains parameters well and states the return type, but lacks details about authentication, error handling, rate limits, and the structure of the returned feed. Given the complexity of timeline operations, more behavioral context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly lists all three parameters with brief explanations, adding meaningful context beyond the schema's 0% description coverage. It clarifies that 'algorithm' is optional and for timeline selection, 'cursor' is for pagination, and 'limit' controls maximum results. This adequately compensates for the schema's lack of parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get posts') and resource ('from your home timeline'), making the purpose immediately understandable. It distinguishes this from siblings like get_author_feed or get_post by specifying the home timeline context, though it doesn't explicitly contrast with all similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_author_feed, get_posts, or get_post_thread. It mentions 'your home timeline' which implies personal content, but offers no explicit when/when-not instructions or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
like_postC
Like a post.
Args:
ctx: MCP context
uri: URI of the post to like
cid: CID of the post to like
Returns:
Status of the like operation
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| cid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action but doesn't mention required permissions, whether the operation is idempotent, rate limits, or what the 'Status of the like operation' entails. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, but includes redundant sections ('Args:', 'Returns:') that add little value without elaboration. While concise, it under-specifies critical details, making it less helpful than a slightly longer but informative description would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It lacks details on authentication needs, error conditions, return values, and parameter semantics, leaving significant gaps for the agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists parameters (uri, cid) but provides no semantic context—what these identifiers represent, their format, or how they relate to the post. Without this, the agent cannot understand parameter meaning beyond the schema's basic types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Like a post') with a specific verb and resource, making the purpose immediately understandable. However, it doesn't explicitly differentiate from the sibling 'unlike_post' tool, which would require mentioning the opposite action for full distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'unlike_post' or 'get_likes'. There's no mention of prerequisites (e.g., authentication status), context for usage, or exclusions, leaving the agent without operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mute_userB
Mute a user.
Args:
ctx: MCP context
actor: Handle or DID of the user to mute
Returns:
Status of the mute operation
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but provides minimal behavioral insight. It mentions a 'Status' return but doesn't detail what that entails (e.g., success/failure, error conditions). It lacks information on permissions required, side effects (e.g., does muting affect notifications?), or reversibility, which is critical for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose ('Mute a user.'), followed by structured sections for Args and Returns. It avoids unnecessary verbosity, though the 'ctx' parameter in Args is redundant for the agent and could be omitted for better clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain the return value 'Status' in detail, potential errors, or the operational impact of muting. Given the complexity of user management actions, more context on behavior and outcomes is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for the single parameter 'actor', specifying it as a 'Handle or DID of the user to mute', which clarifies the expected format beyond the schema's generic 'string' type. With 0% schema description coverage and only one parameter, this adequately compensates, though it could note if 'actor' must be a valid, existing user.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mute') and target ('a user'), making the purpose immediately understandable. However, it doesn't differentiate from its sibling 'unmute_user' beyond the obvious directionality, nor does it specify what 'mute' entails in this context (e.g., hiding posts, preventing interactions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'unfollow_user' or 'block_user' (if available), nor does it mention prerequisites such as authentication status. The presence of 'unmute_user' as a sibling implies a toggle relationship, but this isn't explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repostC
Repost another user's post.
Args:
ctx: MCP context
uri: URI of the post to repost
cid: CID of the post to repost
Returns:
Status of the repost operation
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| cid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the tool 'reposts' content, implying a write/mutation operation, but doesn't specify permissions needed, whether this creates notifications, rate limits, or what happens if the same post is reposted multiple times. The return value description ('Status of the repost operation') is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by parameter and return sections. However, the 'ctx: MCP context' parameter documentation adds no value since this is standard boilerplate, slightly reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and 2 parameters at 0% schema coverage, the description is insufficient. It doesn't explain authentication requirements, error conditions, what the 'status' return contains, or how this operation affects the social graph compared to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists both parameters (uri and cid) and indicates they're for 'the post to repost,' providing basic semantic context. However, it doesn't explain what format these identifiers should be in, whether they're interchangeable, or if both are always required together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('repost') and resource ('another user's post'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'unrepost' or explain how this differs from simply sharing content through other means.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like 'send_post' (for original posts) or 'unrepost' (to undo). The description only states what the tool does, not when it's appropriate or what prerequisites might exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_handleC
Resolve a handle to a DID.
Args:
ctx: MCP context
handle: User handle to resolve (e.g. "user.bsky.social")
Returns:
Resolved DID information
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool resolves a handle to DID information but lacks behavioral details: it doesn't specify error handling (e.g., invalid handles), rate limits, authentication requirements, or what 'DID information' includes (e.g., format, additional metadata). This is a significant gap for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first. The Args and Returns sections are structured but slightly verbose for a single parameter; the example is helpful but could be integrated more seamlessly. Overall, it's efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (resolving identifiers in a social media context), no annotations, no output schema, and low schema coverage, the description is incomplete. It lacks details on authentication, error cases, return format, and how it fits among sibling tools (e.g., vs. 'get_profile'). The agent would need to guess or test to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds value by explaining the 'handle' parameter as a 'User handle to resolve' with an example ('user.bsky.social'), which clarifies semantics beyond the schema's basic string type. However, it doesn't cover constraints (e.g., format rules) or other potential parameters, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'resolve' and the resource 'handle to a DID', making the purpose understandable. It distinguishes from siblings by focusing on handle resolution rather than social media actions like posting or following. However, it doesn't explicitly differentiate from potential similar tools like 'get_profile' which might also handle user identification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication status), compare to sibling tools like 'get_profile' that might retrieve similar information, or specify use cases (e.g., converting handles for API calls). The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_imageB
Send a post with a single image.
Args:
ctx: MCP context
text: Text content of the post
image_data: Base64-encoded image data
image_alt: Alternative text description for the image
profile_identify: Optional handle or DID for the post author
reply_to: Optional reply information dict with keys uri and cid
langs: Optional list of language codes
facets: Optional list of facets (mentions, links, etc.)
Returns:
Status of the post creation
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| image_data | Yes | ||
| image_alt | Yes | ||
| profile_identify | No | ||
| reply_to | No | ||
| langs | No | ||
| facets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a post-creation tool ('Send a post'), implying a write/mutation operation, but doesn't mention authentication requirements, rate limits, error conditions, or what 'Status of the post creation' actually means. The description lacks crucial behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns) and front-loaded the core functionality. Every sentence earns its place, though the 'Args:' section could be slightly more concise. The structure efficiently communicates the tool's capabilities without unnecessary verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 7 parameters, no annotations, and no output schema, the description provides good parameter documentation but lacks critical behavioral context. It doesn't explain authentication needs, error handling, rate limits, or what the return value contains. The parameter coverage is strong, but the overall context for a post-creation tool remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides excellent parameter semantics through the 'Args:' section, which documents all 7 parameters with clear explanations. Since schema description coverage is 0%, this comprehensive parameter documentation fully compensates for the schema's lack of descriptions. Each parameter's purpose is clearly explained, adding significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a post with a single image.' It specifies the verb ('send') and resource ('post with a single image'), making it distinct from sibling tools like 'send_post' (text-only) and 'send_images' (multiple images). However, it doesn't explicitly differentiate from 'send_video' or other media-sending tools beyond the single-image focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'send_image' over 'send_post' (text-only), 'send_images' (multiple images), or 'send_video'. There's no discussion of prerequisites, constraints, or typical use cases beyond the basic functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_imagesA
Send a post with multiple images (up to 4).
Args:
ctx: MCP context
text: Text content of the post
images_data: List of base64-encoded image data (max 4)
image_alts: Optional list of alt text for each image
profile_identify: Optional handle or DID for the post author
reply_to: Optional reply information dict with keys uri and cid
langs: Optional list of language codes
facets: Optional list of facets (mentions, links, etc.)
Returns:
Status of the post creation
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| images_data | Yes | ||
| image_alts | No | ||
| profile_identify | No | ||
| reply_to | No | ||
| langs | No | ||
| facets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the action ('send a post') and image limits, but fails to disclose critical behavioral traits: whether this is a write operation (implied but not stated), authentication requirements, rate limits, error conditions, or what 'Status of the post creation' entails. The description is insufficient for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement followed by organized parameter and return value sections. It's appropriately sized for a tool with 7 parameters, though some sentences could be more concise (e.g., 'Returns: Status of the post creation' is vague).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, mutation operation) with no annotations and no output schema, the description is incomplete. While parameter semantics are well-covered, it lacks crucial behavioral context (authentication, side effects, error handling) and the return value description is too vague ('Status of the post creation'). For a mutation tool with this complexity, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides comprehensive parameter semantics beyond the input schema, which has 0% description coverage. Each parameter is clearly explained with its purpose and constraints (e.g., 'images_data: List of base64-encoded image data (max 4)', 'facets: Optional list of facets (mentions, links, etc.)'). This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a post with multiple images (up to 4).' This specifies the verb ('send'), resource ('post'), and a key constraint ('multiple images up to 4'), distinguishing it from sibling tools like 'send_post' (text-only) and 'send_image' (single image).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through parameter descriptions (e.g., 'reply_to' for replying, 'profile_identify' for author specification), but lacks explicit guidance on when to use this tool versus alternatives like 'send_post' or 'send_image'. No when-not-to-use scenarios or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_postA
Send a post to Bluesky.
Args:
ctx: MCP context
text: Text content of the post
profile_identify: Optional handle or DID. Where to send post. If not provided, sends to current profile
reply_to: Optional reply reference with 'root' and 'parent' containing 'uri' and 'cid'
embed: Optional embed object (images, external links, records, or video)
langs: Optional list of language codes used in the post (defaults to ['en'])
facets: Optional list of rich text facets (mentions, links, etc.)
Returns:
Status of the post creation with uri and cid of the created post
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| profile_identify | No | ||
| reply_to | No | ||
| embed | No | ||
| langs | No | ||
| facets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it states the action ('Send a post') and return value, it doesn't mention authentication requirements, rate limits, error conditions, or whether this is a destructive operation. For a write tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for Args and Returns. Each sentence earns its place by explaining parameter semantics. While efficient, it could be slightly more front-loaded by stating the core purpose more prominently before diving into parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with 6 parameters and no annotations or output schema, the description does well on parameters but lacks critical behavioral context. It explains what the tool does and its parameters but doesn't cover authentication, error handling, or operational constraints that would be essential for safe use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing clear semantic explanations for all 6 parameters. Each parameter gets a meaningful description that explains its purpose, optionality, and default behavior (e.g., 'If not provided, sends to current profile', 'defaults to ['en']'), adding substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Send a post to Bluesky') and resource ('post'), distinguishing it from sibling tools like 'send_image', 'send_video', or 'repost'. It explicitly identifies the core function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating posts on Bluesky but provides no explicit guidance on when to use this versus alternatives like 'send_image' or 'repost'. It mentions optional parameters but doesn't explain scenarios where they're appropriate or when other tools might be better suited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_videoB
Send a post with a video.
Args:
ctx: MCP context
text: Text content of the post
video_data: Base64-encoded video data
video_alt: Optional alternative text description for the video
profile_identify: Optional handle or DID for the post author
reply_to: Optional reply information dict with keys uri and cid
langs: Optional list of language codes
facets: Optional list of facets (mentions, links, etc.)
Returns:
Status of the post creation
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| video_data | Yes | ||
| video_alt | No | ||
| profile_identify | No | ||
| reply_to | No | ||
| langs | No | ||
| facets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a post (implying a write/mutation operation) but doesn't cover critical aspects like required permissions, rate limits, error conditions, or what 'Status of the post creation' entails. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns) and uses bullet-like formatting for parameters. It's appropriately sized—each sentence adds value without redundancy. Minor improvements could include front-loading more critical context about the tool's behavior or sibling differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, mutation operation) and lack of annotations/output schema, the description is moderately complete. It covers parameters adequately but lacks behavioral context, usage guidelines, and output details. For a post-creation tool in a social media context, more information about authentication, error handling, or response structure would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides a comprehensive list of all 7 parameters with brief explanations (e.g., 'Base64-encoded video data', 'Optional alternative text description for the video'). Since schema description coverage is 0%, this compensates well by adding meaning beyond the bare schema. However, some parameters like 'facets' and 'reply_to' could benefit from more detailed examples or formatting guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a post with a video.' It specifies the verb ('send') and resource ('post with a video'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'send_post' or 'send_image', which would require more specific context about when to use video vs. other media types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'send_post' or 'send_image'. It doesn't mention prerequisites (e.g., authentication status), use cases, or exclusions. The agent must infer usage from the tool name alone, which is insufficient for optimal selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfollow_userC
Unfollow a user.
Args:
ctx: MCP context
follow_uri: URI of the follow record to delete
Returns:
Status of the unfollow operation
| Name | Required | Description | Default |
|---|---|---|---|
| follow_uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states this is a deletion operation ('delete' in the args explanation) and returns a status, but lacks critical behavioral details: whether this requires authentication, if it's reversible, what happens to related data, rate limits, or error conditions. For a mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose first. The Args and Returns sections add structure, though 'ctx: MCP context' is redundant boilerplate. Every sentence serves a purpose, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't explain the return value format (what 'Status' entails), error handling, side effects, or dependencies. For a tool that modifies user relationships, more context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains 'follow_uri' as 'URI of the follow record to delete', adding meaning beyond the schema's generic 'Follow Uri' title. However, it doesn't clarify the URI format, how to obtain it, or examples. With one parameter and some added context, this meets the baseline for minimal compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Unfollow') and resource ('a user'), making the purpose immediately understandable. It distinguishes from siblings like 'mute_user' or 'unmute_user' by focusing on the follow relationship. However, it doesn't explicitly differentiate from 'delete_post' or other deletion operations beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., must be following the user first), when-not scenarios, or how it differs from similar tools like 'unmute_user' or 'delete_post'. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlike_postC
Unlike a previously liked post.
Args:
ctx: MCP context
like_uri: URI of the like.
Returns:
Status of the unlike operation
| Name | Required | Description | Default |
|---|---|---|---|
| like_uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral context. It mentions the operation returns a 'Status' but doesn't specify what that entails (e.g., success/failure indicators, error conditions, or side effects like notifications). For a mutation tool, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately brief and front-loaded with the core purpose. The Args/Returns sections are structured but could be more integrated; however, every sentence contributes without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a mutation tool with behavioral implications, the description is incomplete. It lacks details on permissions, error handling, return values, and how it interacts with sibling tools like 'get_likes' or 'like_post'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents the 'like_uri' parameter but only states it's the 'URI of the like' without explaining format, source, or how to obtain it. This adds some meaning but doesn't fully address the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Unlike') and target ('a previously liked post'), providing specific verb+resource. However, it doesn't explicitly differentiate from sibling tools like 'unrepost' or 'delete_post', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., the post must be currently liked) or contrast with similar tools like 'delete_post' or 'unrepost'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unmute_userB
Unmute a previously muted user.
Args:
ctx: MCP context
actor: Handle or DID of the user to unmute
Returns:
Status of the unmute operation
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the operation type ('unmute') but doesn't mention permission requirements, whether this is reversible, rate limits, or what specific 'Status' information is returned. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by Args and Returns sections. Every sentence serves a purpose, though the 'ctx' parameter documentation is redundant since it's not in the actual input schema. The formatting is clean and front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations, no output schema, and minimal behavioral disclosure, the description is incomplete. It doesn't explain what 'Status' means in the return, what errors might occur, or the broader implications of unmuting a user. The description should provide more context for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal parameter semantics beyond the schema. It explains that 'actor' is the 'Handle or DID of the user to unmute', which provides some context about expected values. However, with 0% schema description coverage and only one parameter, this explanation is adequate but basic, meeting the baseline for minimal parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Unmute') and target ('a previously muted user'), making the purpose immediately understandable. It distinguishes from sibling tools like 'mute_user' by specifying the opposite operation. However, it doesn't explicitly mention what platform or system this applies to, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating 'previously muted user', suggesting this tool should be used to reverse a mute operation. However, it doesn't provide explicit guidance on when to use this versus alternatives like 'unfollow_user' or any prerequisites (e.g., authentication status). The context is implied but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unrepostB
Remove a repost of another user's post.
Args:
ctx: MCP context
repost_uri: URI of the repost to remove
Returns:
Status of the unrepost operation
| Name | Required | Description | Default |
|---|---|---|---|
| repost_uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool removes a repost, implying a destructive mutation, but doesn't specify whether this requires specific permissions, what happens if the repost doesn't exist, or any rate limits. The description is minimal and doesn't add rich behavioral context beyond the basic action, leaving significant gaps for an agent to understand operational risks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: a clear purpose statement followed by brief sections for Args and Returns. Every sentence earns its place by directly contributing to understanding the tool's function, parameters, and output without any fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (a destructive operation with one parameter), no annotations, and no output schema, the description is minimally adequate. It covers the basic action and parameter but lacks details on behavioral traits, error handling, or return value specifics. It meets the minimum viable threshold but has clear gaps that could hinder an agent's effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics for the single parameter 'repost_uri' by specifying it's 'URI of the repost to remove,' clarifying its purpose beyond the schema's generic 'Repost Uri' title. With 0% schema description coverage, this compensates well by providing essential context. However, it doesn't detail the URI format or examples, preventing a perfect score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Remove') and resource ('a repost of another user's post'), making it immediately understandable. It distinguishes from siblings like 'delete_post' by specifying it's for removing reposts rather than original posts. However, it doesn't explicitly contrast with 'unlike_post' or other undo operations, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying it's for 'a repost of another user's post,' suggesting it should be used when undoing a repost action. However, it doesn't provide explicit guidance on when to use this versus alternatives like 'delete_post' (for original posts) or mention prerequisites such as authentication status. The context is clear but lacks explicit when-not-to-use statements or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
- First observed
check_auth_status - First observed
delete_post - First observed
follow_user - First observed
get_author_feed - First observed
get_followers - First observed
get_follows - First observed
get_likes - First observed
get_post - First observed
get_post_thread - First observed
get_posts - First observed
get_profile - First observed
get_reposted_by - First observed
get_timeline - First observed
like_post - First observed
mute_user - First observed
repost - First observed
resolve_handle - First observed
send_image - First observed
send_images - First observed
send_post - First observed
send_video - First observed
unfollow_user - First observed
unlike_post - First observed
unmute_user - First observed
unrepost
TDQS
Scored across 25 tools
Most tools have distinct purposes targeting specific Bluesky operations like posting, following, or fetching feeds, with clear boundaries. However, send_post, send_image, send_images, and send_video overlap in posting functionality, which could cause confusion about when to use each, though their descriptions clarify media-specific roles.
All tools follow a consistent snake_case verb_noun pattern, such as get_post, like_post, and delete_post. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming style across the 25 tools.
With 25 tools, the count is borderline high for a social media server, as it may feel heavy and complex for agents to manage. While it covers many Bluesky features, a more streamlined set could improve usability without sacrificing functionality.
The tool set provides comprehensive coverage of Bluesky's core operations, including CRUD for posts (create, get, delete), social interactions (follow/unfollow, like/unlike, mute/unmute), and data retrieval (feeds, profiles, likes, reposts). No obvious gaps exist for typical agent workflows in this domain.
Maintenance
Related MCP Connectors
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA simple MCP server that can enable MCP clients to query Bluesky instances.34MIT
- MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Bluesky/AT Protocol enabling LLM clients and agents to authenticate, search, post, like, follow, and manage chat on Bluesky.8 npm1MIT
- AlicenseCqualityBmaintenanceEnables interacting with Bluesky/AT Protocol through MCP tools for posting, replying, media, timelines, and a human-approved outbox system.4MIT