Skip to main content
Glama
ewanc26

ATProto MCP Server

by ewanc26

MCP Server for AT Protocol

An MCP server that gives compatible clients access to Bluesky and the AT Protocol over stdio. It works without credentials for public reads and enables account actions when Bluesky credentials are configured.

Independent project; see the trademark notice.

Available tools

Public tools: get_profile, resolve_handle, search_posts, get_author_feed, get_post_thread, get_suggestions, get_actor_likes, get_followers, and get_follows.

Authenticated tools: get_timeline, create_post, delete_post, follow, unfollow, like, and unlike.

Cursor-based tools accept the cursor returned by a previous response. Write operations use AT URIs (and, for likes, the target CID) so callers can safely refer to exact records.

Related MCP server: bluesky-mcp

Install and run

Requires Node.js 20 or newer.

npm install
npm run build
npm start

The default read-only endpoint is https://public.api.bsky.app. To use another service, set BSKY_SERVICE.

For authenticated tools, set BSKY_HANDLE and BSKY_PASSWORD. A Bluesky app password is recommended instead of the account password. When credentials are present, the default service changes to https://bsky.social.

MCP client configuration

Build the project first, then add it to your client's MCP configuration:

{
  "mcpServers": {
    "atproto": {
      "command": "node",
      "args": ["/absolute/path/to/atproto-mcp-server/build/index.js"],
      "env": {
        "BSKY_HANDLE": "alice.bsky.social",
        "BSKY_PASSWORD": "xxxx-xxxx-xxxx-xxxx"
      }
    }
  }
}

Omit env for read-only use. The server writes logs to stderr, leaving stdout reserved for MCP messages.

Development

npm test

The tests build the TypeScript project and validate that the advertised MCP tool surface is backed by handlers, including argument validation and AT Protocol request mapping.

Support

If you find this project useful, consider supporting its development:

Ko-fi GitHub Sponsors

Available Tools

6 tools
get_author_feedB

Retrieve the post feed for a specific author.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYesHandle or DID of the author.
limitNoNumber of feed items to return (default 50).
cursorNoPagination cursor.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and description does not disclose behavioral traits like read-only nature, rate limits, authentication needs, or any side effects. Minimal transparency beyond basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, concise and front-loaded. However, lacks structural elements like examples or separate sections. Efficient but minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, and description does not explain return format, pagination behavior (despite cursor parameter), error conditions, or content of the feed. Incomplete for a feed retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters (100% coverage), but description does not add extra meaning beyond what the schema already provides. Baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states action ('Retrieve') and resource ('post feed') with scope ('for a specific author'). Differentiates well from sibling tools like get_post_thread, get_profile, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance provided. Does not indicate when to use this tool versus alternatives, nor any context about prerequisites or scenario suitability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_post_threadA

Get a specific post and its surrounding conversation thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesAT URI of the post.
depthNoHow many levels of replies to include (default 6).

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behavioral traits. It only states the action without mentioning read-only nature, authentication needs, rate limits, or any side effects. The minimal disclosure leaves agents guessing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It is front-loaded and efficiently conveys the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should ideally mention what is returned (e.g., post object, thread structure). It is adequate for a simple retrieval but leaves completeness gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the parameter descriptions in the schema are clear. The tool description adds no extra meaning beyond what is in the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a specific post and its thread, which is a specific verb+resource combination. It is easily distinguished from siblings like get_author_feed or get_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing a post and its thread, but provides no explicit when-to-use, when-not-to-use, or alternatives. Usage context is only implicitly suggested.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileA

Get detailed profile information for a Bluesky actor (handle or DID).

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYesThe handle or DID of the user to fetch.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It only states the purpose but does not disclose what 'detailed' means, response format, rate limits, or any side effects. This is insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence that front-loads the key action and resource. No superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (1 param, no output schema), the description provides the minimum viable purpose. However, it lacks details about response format, error handling, or examples, which would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the single parameter 'actor' as 'The handle or DID of the user to fetch.' The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'detailed profile information', and the actor type 'handle or DID'. It effectively distinguishes from sibling tools like get_author_feed or resolve_handle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives, or when not to use it. For a simple retrieval tool, purpose implies usage but lacks explicit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_suggestionsB

Get suggested actors to follow.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of suggestions (default 50).

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavioral traits. It fails to mention how suggestions are generated (e.g., based on user history, trending), whether it's safe/idempotent, or any state changes. Only the basic purpose is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but lacks detail. It is not overly long, but could be more informative without becoming verbose. Adequate structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers the basic purpose. However, it omits context like the source of suggestions, frequency of updates, or typical use cases, making it minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with one parameter (limit) documented. The description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves suggested actors to follow, with a specific verb and resource. It distinguishes from siblings like get_author_feed or search_posts, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as searching for users or browsing feeds. The description does not provide context for appropriate usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_handleA

Resolve a Bluesky handle to its persistent Decentralized Identifier (DID).

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesThe handle to resolve (e.g., 'atproto.com').

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description lacks behavioral details such as authentication requirements, caching behavior, or error handling for the resolution process.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is front-loaded and concise, containing no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one parameter, no output schema), the description is nearly complete but could mention that the return is a DID string for full clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter, so the description adds no extra meaning beyond what the schema already provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (resolve) and the resource (Bluesky handle to DID), distinguishing it from sibling tools like get_author_feed which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or avoid this tool vs. siblings, but the simple nature of handle resolution makes the context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_postsB

Search for public posts on Bluesky using keywords or phrases.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch query string.
limitNoNumber of posts to return (default 25, max 100).

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It only states the basic action, but fails to disclose any behavioral traits like authentication requirements, result ordering, rate limits, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It is concise, though it could be slightly expanded without losing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema or annotations, the description should provide more context about what the tool returns, any required auth, or usage limits. It does not, leaving the agent underinformed for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already describes both parameters. The description's mention of 'keywords or phrases' adds minimal value beyond the schema's 'Search query string.' Baseline 3 applies; no additional semantic enrichment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search' and the resource 'public posts on Bluesky', with the method 'using keywords or phrases'. It distinguishes from sibling tools like get_author_feed and get_post_thread, which are for specific feeds or threads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use search vs alternatives (e.g., get_author_feed for a specific user's posts). No when-not or contextual hints provided.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • First observedget_author_feed
    • First observedget_post_thread
    • First observedget_profile
    • First observedget_suggestions
    • First observedresolve_handle
    • First observedsearch_posts

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct aspect of the AT Protocol: feed, thread, profile, suggestions, handle resolution, and search. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores, using verbs like get, resolve, and search paired with specific nouns.

Tool Count5/5

With 6 tools, the server is appropriately scoped for its purpose, covering key read operations without being excessive or insufficient.

Completeness4/5

The tools cover common read and query operations for Bluesky, but lack write capabilities (e.g., posting, following), which may be intentional but leaves a minor gap.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that enables users to interact with the Bluesky social network through comprehensive read and write API tools, including session management and timeline navigation. It also features a Jetstream-powered local SQLite database for indexing and searching Japanese posts.
    36
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server for Bluesky that can post on your behalf by using the AT Protocol.
    19
    7
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Bluesky/AT Protocol that enables AI agents to search, post, reply, like, and follow.
    15
    16
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ewanc26/atproto-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server