Bluesky MCP Server
概览
作者提供的说明(英文原文)
Search Bluesky posts and feeds; read profiles, threads, and trends. STDIO or Streamable HTTP.
PopNx MCP 的三大支柱
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
- 用户评价i暂无评价评价功能将在后续阶段与账户功能一起开放
- 我们的基础检查i3 项中通过 3 项依据公开信息检查;尚未扫描代码
- 使用情况i起步阶段↓ 389/周 · ★ –
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 电脑或云端
- 传输方式: stdio, Streamable HTTP
- 分类: 营销与社交媒体
- 你需要填写:BLUESKY_APP_PASSWORD
安装
选择你使用的 AI 应用,然后复制设置。
安装之前
- 基础检查:3 项中通过 3 项
- 在作者的服务器上运行:你向它提出的内容会经过他们的服务器。
- 可以做 10 件事(工具) bsky_get_profile, bsky_search_actors, bsky_get_trending, bsky_search_feeds …
- 需要你自己填写:
BLUESKY_CLAMP_READ_LIMITS,BLUESKY_IDENTIFIER,BLUESKY_APP_PASSWORD,MCP_LOG_LEVEL
标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
- 打开 Settings → Connectors
- 点击 Add custom connector
- 粘贴下面的地址,然后点击 Add
- 如果要求登录,请登录作者的服务
https://bluesky.caseyjhand.com/mcp或者在你的电脑上运行
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"bluesky": {
"command": "npx",
"args": [
"-y",
"@cyanheads/bluesky-mcp-server"
],
"env": {
"BLUESKY_CLAMP_READ_LIMITS": "your-value",
"BLUESKY_IDENTIFIER": "your-value",
"BLUESKY_APP_PASSWORD": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add --transport http bluesky https://bluesky.caseyjhand.com/mcp或者在你的电脑上运行
claude mcp add bluesky --env BLUESKY_CLAMP_READ_LIMITS=your-value --env BLUESKY_IDENTIFIER=your-value --env BLUESKY_APP_PASSWORD=your-value --env MCP_LOG_LEVEL=your-value -- npx -y @cyanheads/bluesky-mcp-server运行前请先填写空着的值。
或者自己复制设置
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"bluesky": {
"url": "https://bluesky.caseyjhand.com/mcp"
}
}
}或者在你的电脑上运行
或者自己复制设置
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"bluesky": {
"command": "npx",
"args": [
"-y",
"@cyanheads/bluesky-mcp-server"
],
"env": {
"BLUESKY_CLAMP_READ_LIMITS": "your-value",
"BLUESKY_IDENTIFIER": "your-value",
"BLUESKY_APP_PASSWORD": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
或者自己复制设置
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"bluesky": {
"type": "http",
"url": "https://bluesky.caseyjhand.com/mcp"
}
}
}或者在你的电脑上运行
或者自己复制设置
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"bluesky": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/bluesky-mcp-server"
],
"env": {
"BLUESKY_CLAMP_READ_LIMITS": "your-value",
"BLUESKY_IDENTIFIER": "your-value",
"BLUESKY_APP_PASSWORD": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
- 打开网页版 ChatGPT → Settings → Connectors (Apps)
- 点击 Create 或 Add(部分套餐需要先在 Advanced 中开启 Developer mode)
- 粘贴下面的地址,起个名字,然后保存
- 如果要求登录,请登录作者的服务
https://bluesky.caseyjhand.com/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
需要你填写的值
BLUESKY_CLAMP_READ_LIMITSenvClamp oversized read limits with a notice; false restores rejection.BLUESKY_IDENTIFIERenvHandle, DID, or email of the Bluesky account post search runs as. Optional: without it and BLUESKY_APP_PASSWORD, bsky_search_posts is not offered, since Bluesky refuses search without a signed-in acc…- App password for BLUESKY_IDENTIFIER (a standard, non-privileged one — Settings → Privacy and security → App passwords). Optional; required together with BLUESKY_IDENTIFIER to enable bsky_search_posts.
MCP_LOG_LEVELenvSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它能做什么
工具名称和描述与服务器在 2026年11月6日 报告的完全一致。这些内容由作者撰写,不是我们写的;我们以纯文本形式显示。
bsky_get_profileFetch a Bluesky actor's public profile by handle (e.g. "bsky.app") or DID (e.g. "did:plc:z72i7hdynmk6r22z27h6tvur"). Returns displayName, handle, DID, bio, pronouns, website, ordered profile links, follower/following/post counts, associated list/feed/starter-pack counts and label
bsky_search_actorsFind Bluesky accounts by name or handle fragment. Returns ranked profiles with handle, DID, displayName, bio, account creation timestamp, moderation labels with provenance, pronouns when the account set them, and Bluesky verification status — which tells a verified account from a
bsky_get_trendingFetch the current real-time trending topics on Bluesky. Returns topics with display name, Bluesky's one-sentence summary of the story, post count, category (politics, sports, pop-culture, etc.), status, start time, and the representative accounts driving each topic — so "who is t
bsky_search_feedsSearch metadata in the provider’s public feed catalog, without credentials. This searches feed names and descriptions, not post text, and does not enumerate every feed. Returns feeds in provider order with generator AT-URIs and creator identities; pass a feedUri to bsky_get_feed
bsky_get_feedRead the posts a Bluesky feed generator serves, in the order the feed ranks them. Accepts the feed's AT-URI (at:// /app.bsky.feed.generator/ ) or its bsky.app page (https://bsky.app/profile/ /feed/ ). Feeds come from the "feedUri" of each bsky_get_trending topic — the way to read
bsky_get_author_feedGet a Bluesky user's recent feed ordered newest-first. Filter by post type: "posts_with_replies" (everything), "posts_no_replies" (excludes replies), "posts_and_author_threads" (posts the author started), "posts_with_media" (the actor's own posts with images or video — no link ca
bsky_get_post_threadFetch the conversation for a post by AT-URI — the parent chain upward and the reply tree downward. Enter the thread at any point and traverse the discussion. AT-URIs have the format "at:// / / " and are returned in the "uri" field of every post the other post-returning tools emit
bsky_get_post_quotesRead the quote posts behind a Bluesky post's "quoteCount" — the posts that embed it with commentary of their own. Sort latest (default) is newest first; top is descending like count as ordered by Bluesky. On Bluesky this is where much of the reaction to a post lives; bsky_get_pos
bsky_get_post_interactionsList the accounts behind a post’s likes or reposts without credentials, in provider order. Accepts a post AT-URI or bsky.app post URL; a handle authority costs one extra resolution request. Returns actor summaries with account creation and label provenance when supplied, and a se
bsky_get_followsFetch the social graph edges for a Bluesky account — who follows them, or who they follow. Returns paginated actor profiles (handle, DID, displayName, bio, account creation timestamp, moderation labels with provenance, pronouns when set, and Bluesky verification status) plus a su
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月10日
- ✓ 通过
作者与仓库一致
注册名称已通过 GitHub 账户 cyanheads 验证,该账户拥有此仓库
- … 尚未检查
仍在维护
我们还没有从 GitHub 读取这个仓库
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- ✓ 通过
端点有响应
在 575 毫秒内响应(HTTP 200)
- – 不适用
使用 OAuth 登录
无需登录
- ✓ 通过
工具描述中没有隐藏指令
已读取 10 个工具描述,未发现针对 AI 的隐藏指令
与“营销与社交媒体”中的其他服务器比较i
- 星标数多于此分类中其他 3708 个服务器的 0%
- 发布到注册中心的时间比此分类中其他 3708 个服务器的 81% 更新
- 基础检查结果等于或优于此分类中其他 3708 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Bluesky MCP Server 安全吗?
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
你需要填写:BLUESKY_APP_PASSWORD
它在我的电脑上运行还是在云端?
两种方式都可以:安装在你的电脑上,或者连接云端版本。
它还在维护吗?
GitHub 仓库最后更新于–,最新版本(0.7.0)于7天前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
有什么可以替代它?
同一分类中有:MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Google Analytics MCP
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
BibiGPT YouTube Video Summarizer
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
@cyanheads/bluesky-mcp-server Search Bluesky posts and feeds; read profiles, threads, and trends. STDIO or Streamable HTTP. 11 Tools • 1 Profile Resource • 1 Guide
Public Hosted Server: https://bluesky.caseyjhand.com/mcp
Overview
Read Bluesky without an account: profiles, feed catalog searches, trending topics and the feeds behind them, custom and author feeds, threads, and quote posts. Paste a bsky.app link or @handle anywhere one is asked for, and add an optional app password to unlock full-text post search.
Tools
| Tool | Description |
|---|---|
bsky_search_posts | Full-text search across public Bluesky posts, with author, mention, language, tag, domain, URL, date, and sort filters — offered only when an app password is configured |
bsky_get_profile | Fetch a Bluesky actor's public profile by handle or DID — the handle↔DID resolver |
bsky_get_feed | Read a feed generator's posts — a trend's feed, Discover, or any custom feed — by AT-URI or bsky.app URL |
bsky_get_author_feed | A user's recent posts ordered newest-first, filterable by post type |
bsky_get_post_thread | Fetch the conversation for a post by AT-URI or bsky.app URL — parent chain upward and reply tree downward, with what Bluesky counted but did not return |
bsky_get_post_quotes | Read the quote posts behind a post's quoteCount, newest first or by like count — where much of the reaction to a post lives |
bsky_get_post_interactions | List the accounts that liked or reposted a post, with optional account creation and separate like timestamps |
bsky_search_actors | Find Bluesky accounts by name or handle fragment |
bsky_search_feeds | Search public feed catalog names and descriptions, then read a returned feedUri with bsky_get_feed |
bsky_get_follows | Paginated social graph edges — who a user follows or who follows them |
bsky_get_trending | Real-time trending topics on Bluesky with a story summary, post count, category, status, the accounts driving each topic, and the feed that collects its posts |
Resources
| Resource | Description |
|---|---|
bsky://profile/{actor} | A Bluesky actor's public profile, addressable by handle or DID |
Use bsky_get_profile for programmatic access or bsky://profile/{actor} to inject profile context directly.
Agent guide
bluesky-guide covers topic research, account attribution, and reactions to a post, including identifier chains and coverage checks. It ships with plugin installs and is readable over MCP at skill://bluesky-guide/SKILL.md without credentials.
Capability reference
bsky_search_posts tool
- Bluesky refuses post search without a signed-in account, so this tool is registered only when
BLUESKY_IDENTIFIERandBLUESKY_APP_PASSWORDare set — without them it is absent fromtools/list(see Post search) - Searches run as that account through its PDS; the first search logs in, the session is reused and refreshed, and a rejected login is not retried. Failures surface as
search_auth_failed(the login or its renewal was rejected),search_login_limited(the account's daily login limit is used up — the error names when searching resumes), orsearch_refused(Bluesky refused the search) - Filters: author and mentioned account (handle or DID, also as
@handleor a bsky.app profile URL —mentionsmatches rich-text mentions only), two-letter language code, hashtag (with or without#), linkeddomain(bare hostname, leadingwww.dropped) or exacturl(in text links or link cards),since/until, andtop/latestsort; up to 100 results per call via opaque cursor pagination since/untilcompare against each post's sort time — the earlier ofcreatedAtandindexedAt— to the whole second, inclusive; a date alone is 00:00:00 UTC, sountil: "2026-01-01"covers all of 2025-12-31- Identifier, language, domain, URL, and date inputs are pattern-validated locally before the upstream call. A three-letter language code (
"fil","eng") is rejected, since Bluesky search ignores one and returns unfiltered results; the code is sent lowercased, and later subtags are accepted but ignored upstream (en-USfilters asen) - When Bluesky rejects a parameter, its own explanation is surfaced via the
upstream_rejected_filtererror reason instead of a bare status code; a cursor it can't decode fails asinvalid_cursor, after one request hitsTotalis Bluesky's estimate, never an exact count: below 10,000 it is an upper bound on what paging returns (Bluesky counts before dropping posts it won't return), and exactly 10,000 — the cap — means "at least that many";truncated/shown/capare keyed on the returned cursor, which Bluesky omits once nothing more matches- A page that would pass the 48,000-byte response budget on either surface is searched again at the
limitthat fits and returned whole —budgetCapped: true, withhitsTotaland the cursor from that one response - Embeds normalize to a
type-discriminated union (images,external,record,video,unknown); a quoted post carries its own attachments up to 3 nesting levels, withomittedEmbedscounting what went deeper andrecordKindnaming a quote that's deleted, blocked, detached, or not a post - Video embeds retain nonempty
alt, including on quoted posts and media attached alongside a quote; multiline alt renders as literal quoted text, like image alt - Moderation labels are surfaced as-is, unfiltered
Post tools preserve optional rich-text facets separately from the original text: UTF-8 byte ranges (inclusive byteStart, exclusive byteEnd) and complete link URIs, mention DIDs, and tags. Unrecognized feature variants and additional upstream fields remain visible as literal metadata on both channels. Quoted posts retain their own facets within the existing embed-depth bound. Both response channels include this metadata in the response budget; bsky_get_post_quotes omits the queried target's facets together with its restated text.
bsky_get_feed tool
- Takes a feed generator AT-URI (
at:// /app.bsky.feed.generator/) or its bsky.app page (https://bsky.app/profile/ /feed/, with any trailing/,?…, or#…ignored); a trend'sfeedUriworks as-is, and Discover isat://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot - A handle owner costs one extra lookup (
resolveHandle), a DID owner none; any other collection, such as a post AT-URI, is rejected before the upstream call - A post the feed pinned to its top carries
pinned: true; a repost carriesrepostedBy/repostedAt - Up to 100 posts per call, paginated via cursor; truncation is disclosed on the cursor, since a feed can return fewer than
limitwith more behind it - A page that would pass the 48,000-byte response budget is asked for again at the
limitthat fits and returned whole, markedbudgetCapped: true; a ranked feed reranks on every request, so its posts and cursor still come from one response feed_not_found(no such feed or handle),feed_unavailable(the feed's generator did not answer — not retried, so a down feed fails fast),feed_requires_login(a personalized feed)- Always unauthenticated, even when search credentials are set
bsky_get_profile tool
- Accepts a handle or DID, also as
@handleor the account's bsky.app page (https://bsky.app/profile/); returns displayName, handle, DID, bio, pronouns, website, follower/following/post counts, avatar, moderation labels, and pinned post AT-URI websiteandpronounsare absent when the account set neither; optionallinkscarries ordered profile buttons separately fromwebsite, with each record's URI/CID, complete destination URL, optional title/icon, and moderation labels (val,src?,cts?). An omitted array stays omitted and an explicit empty array stays empty; the profile resource returns the same fields- Optional
associatedcarries only suppliedlists,feedgens,starterPacks, andlabeler; zero counts,labeler: false, and an empty object stay distinct from absent metadata on both the tool and resource verificationcarries Bluesky's full verification state —verifiedStatusandtrustedVerifierStatus(valid,invalid, ornone, passed through verbatim) and every verification a trusted verifier issued, with its issuer, validity, date, and record AT-URI; absent when Bluesky sent none- The bio renders as a markdown blockquote in
content[], since it's account-authored text that can carry its own markdown structure actor_not_foundwhen the handle doesn't resolve — resolve the handle withbsky_search_actorsfirst- The primary handle↔DID resolver — use before tools that require a DID or AT-URI when only a handle is known
bsky_get_author_feed tool
- Takes a handle or DID, also as
@handleor the account's bsky.app page filter:posts_with_replies,posts_no_replies(default, excludes replies), andposts_and_author_threadsinclude reposts;posts_with_media(the actor's own posts with images or video, no link cards) andposts_with_videoreturn noneinclude_pins: trueadds the profile's pinned post, markedpinned: true, first on the first page — in addition tolimit, and whether or not it matchesfilter- Reposts carry
repostedByandrepostedAt;authoralways names who actually wrote the post - Under the filters that include reposts,
limitcounts them too, so a heavily-reposting account can return far fewer of its own posts than the limit suggests;originalPosts/repostsreport the actual split whenever a repost is present - Up to 100 posts per call, paginated via cursor; a page that would pass the 48,000-byte res
只显示了开头部分;其余内容请在仓库中阅读