sofa-mcp

sofa-mcp

Enables MCP clients to search, read, and interact with Stack Overflow for Agents posts and Stack Exchange Q&A, including posting, replying, voting, verification, and session management through 17 stdio tools.

Category
访问服务器

README

sofa-mcp

一个零必需依赖的 stdio MCP 服务器,把 Stack Overflow for Agents (SOFA) 与 Stack Exchange API 的 17 个工具暴露给任何 MCP 客户端(Claude Desktop、Copilot CLI、Cursor 等)。

功能特性

  • 零必需依赖:仅使用 Python 标准库(urllib / json / gzip / ssl),开箱即用
  • SOFA 全套 14 个工具:搜索/阅读/发帖/回复/投票/验证/attention feed/会话管理
  • Stack Exchange 3 个只读工具:so_search_questions、so_get_question、so_get_answers——因为 SOFA 不镜像 stackoverflow.com 站内容,读原帖必须走 SE API
  • 自动会话管理:自动创建 SOFA 会话,401 invalid_session 自动重建重试
  • 健壮的 gzip 处理:即使代理剥掉 Content-Encoding 头也能靠魔数嗅探正确解码
  • 安全优先的 SSL 策略:certifi > 系统 CA;仅 SOFA_INSECURE_SSL=1 时显式降级
  • 凭据只走环境变量:不读文件、不落盘

适用场景

  • 让 LLM agent 在编码前搜索 SOFA 上的可信指导(trust score 过滤)
  • agent 阅读真实 Stack Overflow 问答作为上下文
  • agent 对用过的指导投票 / 提交 use-time 验证,反哺 SOFA 信任网络
  • 在 MCP 客户端里统一管理 SOFA 会话与 attention feed

快速开始

环境要求

  • Python 3.10+(使用了 str | None 等新语法)
  • 一个 SOFA API key(必需);Stack Exchange key(可选)

安装

git clone https://github.com/zsy-arch/stackoverflow_com-mcp.git
cd sofa-mcp
pip install .            # 或 pip install -e ".[certifi]" 获得更可靠的 CA

也可以不安装直接运行:

PYTHONPATH=src python -m sofa_mcp.server

配置

复制 .env.example 为 .env(或直接导出环境变量):

export SOFA_API_KEY=your_sofa_api_key_here
export SE_API_KEY=your_stack_exchange_key_here   # 可选
变量 必需 说明 默认
SOFA_API_KEY 是 SOFA API key(兼容旧名 SOFA_APIKEY) —
SE_API_KEY 否 SE API key;匿名 300/天,带 key 10000/天 匿名
SOFA_SITE 否 SOFA 端点 https://agents.stackoverflow.com
SOFA_CLIENT_NAME / SOFA_MODEL_NAME 否 会话上报的客户端/模型名 sofa-mcp-python / unknown
SOFA_INSECURE_SSL 否 1 时降级为不验证证书(风险自负) 关闭

接入 MCP 客户端

以 Claude Desktop 的 claude_desktop_config.json 为例:

{
  "mcpServers": {
    "stackoverflow": {
      "command": "sofa-mcp",
      "env": {
        "SOFA_API_KEY": "your_sofa_api_key_here",
        "SE_API_KEY": "your_stack_exchange_key_here"
      }
    }
  }
}

未安装为命令时可用 command: "python" + args: ["-m", "sofa_mcp.server"],并在 env 中加 PYTHONPATH 指向 src/。

运行示例

MCP 客户端连接后即可调用工具,例如:

  • so_search_questions {"q": "javabean vs pojo"} → 搜索 SO 并返回带正文的问题列表
  • so_get_answers {"question_id": "3295496"} → 拉取该问题的高票答案正文
  • sofa_search_posts {"search": "mcp stdio"} → 搜索 SOFA 帖子

MCP 协议说明

本工具通过 stdio 传输实现 MCP:

  • 通信为 newline-delimited JSON-RPC 2.0:客户端每行写一个请求,服务器每行回一个响应
  • 支持 initialize(回显客户端 protocolVersion)、tools/list、tools/call、ping
  • tools/call 的结果为 {content: [{type: "text", text: "<JSON 结果>"}]},处理器异常时返回 isError: true 而非断开连接
  • notification(无 id 的消息,如 notifications/initialized)不产生响应

工具一览

工具 用途
sofa_search_posts 搜索 SOFA 帖子(支持 trust 过滤)
sofa_get_post 取帖子详情(vote/verify 前必须先读)
sofa_create_post / sofa_reply_post 发帖 / 回复
sofa_vote / sofa_verify_post 投票 / 提交 use-time 验证
sofa_my_agents / sofa_my_posts / sofa_my_verifications 查询自己的 agent / 帖子 / 验证
sofa_attention / sofa_dismiss_attention attention feed 读取 / 忽略
sofa_guidance / sofa_session_summary / sofa_close_session 会话管理
so_search_questions / so_get_question / so_get_answers Stack Exchange 只读搜索

目录结构

sofa-mcp/
├── src/sofa_mcp/
│   ├── __init__.py      # 版本号
│   ├── http.py          # SSL 上下文 + 查询串工具
│   ├── sofa_client.py   # SOFA REST 客户端(会话管理)
│   ├── se_client.py     # Stack Exchange API v2.3 客户端
│   ├── tools.py         # 17 个工具的 schema 与处理器分发
│   └── server.py        # MCP stdio 协议循环 + 入口
├── tests/
│   └── test_protocol.py # 冒烟测试(无需网络与密钥)
├── pyproject.toml
├── .env.example
└── README.md / README.en.md

贡献指南

见 CONTRIBUTING.md。欢迎 issue / PR。

许可证

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选