Bluesky MCP (Model Context Protocol)
Bluesky MCP 是一个基于 Go 语言的 Bluesky 社交网络服务器,通过 JSON-RPC 2.0 API 端点提供 AI 驱动的功能。它支持灵活的配置,并遵循行业最佳实践,以确保安全性、性能和错误处理。
littleironwaltz
README
Bluesky MCP (模型上下文协议)
一个 Go 服务,通过 AT 协议为 Bluesky 社交网络实现模型上下文协议服务器,从而启用 AI 驱动的功能。
功能
- Feed 分析: 分析 Bluesky feed 并对帖子执行情感分析
- 帖子助手: 基于情绪和主题为 Bluesky 帖子生成多样化且引人入胜的内容建议,并具有直接提交帖子的能力
- 社区管理: 跟踪用户活动并监控最近的帖子
- 安全: 实施输入验证、TLS 安全以及针对常见 Web 漏洞的保护
- 高可用性: 内置冗余功能以提高可靠性
什么是 MCP?
模型上下文协议 (MCP) 是一个 API 规范,用于将 AI 和 ML 模型与 AT 协议生态系统集成。 MCP 服务器为应用程序提供上下文,使其能够利用 AI 功能,而无需与大型语言模型或其他 AI 系统直接集成。
功能概述
Feed 分析
Feed 分析服务通过以下方式提供对 Bluesky 帖子的洞察:
- 检索和分析用户 feed 中的帖子或搜索带有特定标签的帖子
- 执行情感分析以对帖子语气进行分类(正面、负面或中性)
- 计算每个帖子的指标(字符数、字数)
- 实施缓存策略以提高性能和可靠性
- 并行处理帖子以更快地分析大型数据集
帖子助手
帖子助手服务通过以下方式帮助用户创建引人入胜的内容:
- 根据用户指定的情绪和主题生成多样化的帖子建议
- 提供具有自然变化的多种情绪模板(快乐、悲伤、兴奋、深思熟虑)
- 将主题与不同的措辞集成以保持多样性
- 随机化模板选择以防止重复的建议
- 允许使用经过身份验证的用户的 DID 将生成的内容直接提交到 Bluesky
- 对输入进行清理以防止 XSS 和其他注入攻击
- 利用共享的 TokenManager 身份验证来实现可靠的帖子创建
社区管理
社区管理服务通过以下方式帮助监控用户活动:
- 从用户的 Bluesky 作者 feed 中检索用户最近的帖子
- 过滤帖子以仅包括过去一周内创建的帖子
- 实施缓存以减少 API 调用并缩短响应时间
- 使用正确的格式检查验证用户句柄
- 支持基于句柄和基于 DID 的用户识别
示例 API 请求
使用 curl
Feed 分析请求
curl -X POST "http://localhost:3000/mcp/feed-analysis" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "feed-analysis",
"params": {
"hashtag": "golang",
"limit": 10
},
"id": 1
}'
帖子助手请求(生成建议)
curl -X POST "http://localhost:3000/mcp/post-assist" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "post-assist",
"params": {
"mood": "excited",
"topic": "artificial intelligence"
},
"id": 1
}'
帖子助手请求(生成并提交)
curl -X POST "http://localhost:3000/mcp/post-assist" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "post-assist",
"params": {
"mood": "excited",
"topic": "artificial intelligence",
"submit": true
},
"id": 1
}'
直接提交帖子
curl -X POST "http://localhost:3000/mcp/post-submit" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "post-submit",
"params": {
"text": "Hello Bluesky from MCP server!"
},
"id": 1
}'
社区管理请求
curl -X POST "http://localhost:3000/mcp/community-manage" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "community-manage",
"params": {
"userHandle": "user.bsky.social",
"limit": 5
},
"id": 1
}'
入门
前提条件
- Go 1.21 或更高版本
- Bluesky 帐户凭据
安装
-
克隆存储库:
git clone https://github.com/littleironwaltz/bluesky-mcp.git cd bluesky-mcp
-
安装依赖项:
go mod download
-
配置服务:
使用环境变量:
export BSKY_ID="your-bluesky-handle-or-email" export BSKY_PASSWORD="your-bluesky-password" export BSKY_HOST="https://bsky.social" # 安全操作必需 export BSKY_BACKUP_ID="backup-handle-or-email" # 可选的备份凭据 export BSKY_BACKUP_PASSWORD="backup-password" # 可选的备份凭据
或者使用 JSON 配置文件:
export BSKY_CONFIG_FILE="/path/to/config.json"
示例 config.json:
{ "BskyID": "your-bluesky-handle-or-email", "BskyPassword": "your-bluesky-password", "BskyHost": "https://bsky.social" }
构建和运行服务
# 构建服务器应用程序
make build
# 运行服务器应用程序
make run
# 或者直接运行二进制文件
./bin/bluesky-mcp
该服务将默认在端口 3000 上启动,并在端口 3001 上启动健康检查服务器。
使用 MCP Inspector 运行
使用以下命令构建并运行服务器:
make build
make run
服务器在端口 3000 上运行。将 MCP Inspector 连接到 http://localhost:3000/mcp/{method} 端点。
使用 CLI 工具
该项目包含一个命令行界面 (CLI),可轻松访问所有 API 功能。
# 构建 CLI 工具
make build-cli
# 运行 CLI 命令
./bin/bluesky-mcp-cli assist --mood excited --topic "artificial intelligence"
./bin/bluesky-mcp-cli assist --mood happy --topic "great day" --submit
./bin/bluesky-mcp-cli submit --text "Hello Bluesky from CLI!"
./bin/bluesky-mcp-cli feed --hashtag golang --limit 5
./bin/bluesky-mcp-cli community --user user.bsky.social --limit 3
./bin/bluesky-mcp-cli version
CLI 命令:
-
assist - 生成帖子建议(带有可选的提交)
./bin/bluesky-mcp-cli assist --mood happy --topic programming ./bin/bluesky-mcp-cli assist --mood excited --topic "new feature" --submit
选项:
--mood
(必需):帖子的情绪(快乐、悲伤、兴奋、深思熟虑)--topic
(必需):帖子的主题--submit
:将生成的帖子直接提交到 Bluesky--json
:以 JSON 格式输出
-
submit - 将帖子直接提交到 Bluesky
./bin/bluesky-mcp-cli submit --text "Hello world from Bluesky MCP CLI!"
选项:
--text
(必需):要提交的帖子的文本内容--json
:以 JSON 格式输出
-
feed - 分析标签 feed
./bin/bluesky-mcp-cli feed --hashtag golang --limit 5
选项:
--hashtag
(必需):要分析的标签--limit
(可选):要分析的帖子数量(默认值:10,最大值:100)--json
:以 JSON 格式输出
-
community - 监控用户活动
./bin/bluesky-mcp-cli community --user user.bsky.social --limit 3
选项:
--user
(必需):用户名(格式:username.bsky.social)--limit
(可选):要显示的帖子数量(默认值:5,最大值:50)--json
:以 JSON 格式输出
-
version - 显示版本信息
./bin/bluesky-mcp-cli version
用于测试的模拟模式:
对于没有 Bluesky 凭据的测试,您可以使用模拟模式:
MOCK_MODE=1 ./bin/bluesky-mcp-cli assist --mood happy --topic programming
有关详细的使用说明,请参阅 docs/cli-usage.md
。
API 端点
该服务在 /mcp/:method
公开一个 JSON-RPC 兼容的 API,其中 :method
可以是:
feed-analysis
分析用户的 feed 或搜索网络中带有特定标签的帖子。
请求:
{
"jsonrpc": "2.0",
"method": "feed-analysis",
"params": {
"hashtag": "golang",
"limit": 10
},
"id": 1
}
参数:
hashtag
(字符串,可选):按标签过滤帖子(使用 searchPosts API 查找网络中的帖子)limit
(数字,可选,默认值:10,最大值:100):要分析的最大帖子数
响应:
{
"jsonrpc": "2.0",
"result": {
"posts": [
{
"id": "3kuznviij5k2z",
"text": "Learning Go is fun! #golang",
"created_at": "2023-09-15T10:32:17.456Z",
"author": "user.bsky.social",
"analysis": {
"sentiment": "positive"
},
"metrics": {
"length": 25,
"words": 5
}
}
],
"count": 1,
"source": "api_fresh"
},
"id": 1
}
post-assist
根据情绪和主题生成帖子建议。
请求:
{
"jsonrpc": "2.0",
"method": "post-assist",
"params": {
"mood": "happy",
"topic": "programming"
},
"id": 1
}
参数:
mood
(字符串,可选):影响帖子的情绪(例如,“快乐”、“悲伤”、“兴奋”、“深思熟虑”)topic
(字符串,可选,最大长度:200):要包含在帖子中的主题submit
(布尔值,可选,默认值:false):设置为 true 时,将生成的帖子直接提交到用户的 Bluesky 帐户
响应(不提交):
{
"jsonrpc": "2.0",
"result": {
"suggestion": "Feeling so positive right now! Has anyone else been thinking about programming?"
},
"id": 1
}
响应(提交):
{
"jsonrpc": "2.0",
"result": {
"suggestion": "Feeling so positive right now! Has anyone else been thinking about programming?",
"submitted": true,
"post_uri": "at://did:plc:abcdef/app.bsky.feed.post/12345",
"post_cid": "bafyrei..."
},
"id": 1
}
帖子助手根据提供的情绪和主题生成各种建议,每种情绪类型都有多个模板,并且有不同的方式来整合主题。
post-submit
将文本直接作为帖子提交到 Bluesky。
请求:
{
"jsonrpc": "2.0",
"method": "post-submit",
"params": {
"text": "Hello world from Bluesky MCP!"
},
"id": 1
}
参数:
text
(字符串,必需):要发布到 Bluesky 的文本内容
响应:
{
"jsonrpc": "2.0",
"result": {
"submitted": true,
"post_uri": "at://did:plc:abcdef/app.bsky.feed.post/12345",
"post_cid": "bafyrei..."
},
"id": 1
}
community-manage
跟踪用户活动并监控最近的帖子。
请求:
{
"jsonrpc": "2.0",
"method": "community-manage",
"params": {
"userHandle": "user.bsky.social",
"limit": 5
},
"id": 1
}
参数:
userHandle
(字符串,必需):Bluesky 句柄(格式:username.bsky.social 或 did:plc:...)limit
(数字,可选,默认值:5,最大值:50):要返回的最大帖子数
响应:
{
"jsonrpc": "2.0",
"result": {
"user": "user.bsky.social",
"recentPosts": ["Hello world", "Another post"],
"count": 2
},
"id": 1
}
健康检查
该服务包括一个专用的健康检查服务器,该服务器在端口 3001 上运行:
/health
或/healthz
- 当服务正常时,返回 HTTP 200,并带有{"status":"ok"}
负载均衡器和监控工具可以使用它来检查服务状态。
项目结构
📂 bluesky-mcp/
├── 📂 cmd/
│ ├── 📂 bluesky-mcp/ # 主服务器入口点
│ │ └── 📄 main.go
│ └── 📂 cli/ # CLI 应用程序
│ └── 📄 main.go
├── 📂 internal/ # 私有应用程序代码
│ ├── 📂 auth/ # 使用 Bluesky API 进行身份验证
│ ├── 📂 cache/ # 缓存实现
│ ├── 📂 handlers/ # API 处理程序
│ ├── 📂 models/ # 数据模型
│ └── 📂 services/ # 业务逻辑
│ ├── 📂 community/ # 社区管理
│ ├── 📂 feed/ # Feed 分析
│ └── 📂 post/ # 帖子助手
├── 📂 pkg/ # 可重用包
│ ├── 📂 apiclient/ # Bluesky API 客户端
│ └── 📂 config/ # 配置
├── 📂 api/ # API 规范
├── 📂 configs/ # 配置模板
│ └── 📂 fallbacks/ # API 失败的回退响应
├── 📂 docs/ # 文档
│ └── 📄 cli-usage.md # CLI 使用文档
└── 📄 Makefile # 构建命令
安全功能
- 所有 API 参数的输入验证和清理
- 参数边界强制执行(最小值/最大值)
- 对所有 HTTP 通信强制执行 TLS 1.2+
- JWT 令牌格式验证
- 带有错误代码的结构化错误响应
- URL 参数编码以防止注入攻击
- 内容清理以防止 XSS 攻击
- API 端点的方法参数白名单
- 安全的 HTTP 标头(内容安全策略、XSS 保护)
- 速率限制以防止滥用
- 所有服务之间一致的身份验证机制
- 具有自动令牌刷新的共享身份验证客户端
可靠性功能
- 断路器模式:防止外部服务失败时发生级联故障
- 重试机制:对于瞬时错误,使用指数退避自动重试
- 回退响应:上游服务不可用时的静态回退数据
- Stale-While-Revalidate:在后台获取新数据时提供陈旧数据
- 备份凭据:支持备份身份验证凭据
- 持久缓存:基于磁盘的缓存,在重启后自动恢复
- 单独的健康服务器:在不同端口上的专用健康检查服务器
- 优雅降级:尽可能返回部分结果而不是失败
- 请求超时:所有请求都有适当的超时时间以防止资源耗尽
- 速率限制:防止来自过多请求的过载
- 共享身份验证客户端:所有服务之间一致的身份验证
- 集中式令牌管理:所有 API 请求的单个令牌管理器
性能优化
- 具有优化设置的 HTTP 连接池
- 后台令牌刷新以消除身份验证延迟
- 用于并发身份验证访问的读写互斥锁
- 具有 TTL 和缓存统计信息的响应缓存
- 具有预分配切片的内存高效数据结构
- 改进的 HTTP 客户端,具有更好的错误处理
- 具有上下文支持的优雅服务器关闭
- 用于 feed 分析的并行处理
代码质量功能
- 类型定义:清晰的类型定义,而不是匿名结构
- 函数分离:将复杂操作拆分为更小、更集中的函数
- 辅助函数:可重用的辅助函数,以消除代码重复
- 错误处理:具有用户友好消息的标准化错误处理模式
- 减少嵌套:避免深度嵌套以提高可读性
- 适当的注释:所有公共函数和类型的文档
- 一致的模式:重试操作的标准方法
- 干净的架构:组件之间清晰的关注点分离
- 全面的测试:所有关键模块的单元测试,具有高覆盖率(核心组件中高达 100%)
- 集成测试:测试验证组件交互是否正常工作
- 身份验证管理:服务之间正确共享身份验证令牌
- 模拟模式:在凭据不可用时,支持使用模拟数据进行测试
- CLI 设计:用户友好的命令行界面,具有清晰的输出和选项
开发
构建和测试
# 构建服务器
make build
# 构建 CLI
make build-cli
# 构建服务器和 CLI
make build-all
# 运行测试
make test
# 运行带有覆盖率的测试
make test-coverage
# 运行特定包的测试
go test ./internal/services/feed
# 运行特定的测试函数
go test -run TestFunctionName ./internal/services/feed
# 运行基准测试
go test ./internal -bench=Cache
# 格式化代码
make fmt
# 检查代码
make lint
# 审查代码
make vet
测试覆盖率
该项目包括全面的测试覆盖率:
- 模型:100% 覆盖率
- 配置:96.9% 覆盖率
- 缓存:87.6% 覆盖率
- 身份验证:90.8% 覆盖率
- 处理程序:60.0% 覆盖率
- API 客户端:59.4% 覆盖率
- 服务:43.6% - 100% 覆盖率
测试包括:
- 所有关键组件的单元测试
- 组件交互的集成测试
- 性能关键代码的基准测试
- 具有多个场景的表驱动测试
- 具有模拟数据支持的 CLI 测试
配置选项
环境变量:
BSKY_ID
- 您的 Bluesky 句柄或电子邮件BSKY_PASSWORD
- 您的 Bluesky 密码BSKY_HOST
- Bluesky API 主机(默认值:https://bsky.social)BSKY_CONFIG_FILE
- JSON 配置文件的路径(覆盖环境变量)BSKY_BACKUP_ID
- 备份 Bluesky 句柄或电子邮件BSKY_BACKUP_PASSWORD
- 备份 Bluesky 密码MOCK_MODE
- 设置为 "1" 或 "true" 以启用模拟模式,以便在没有凭据的情况下进行 CLI 测试
许可证
致谢
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。