Procházet zdrojové kódy

feat: integrate knowhub

Talegorithm před 4 dny
rodič
revize
61a673631b

+ 229 - 0
knowhub/README.md

@@ -0,0 +1,229 @@
+# KnowHub 设计
+
+## 文档维护规范
+
+0. **先改文档,再动代码** - 新功能或重大修改需先完成文档更新、并完成审阅后,再进行代码实现;除非改动较小、不被文档涵盖
+1. **文档分层,链接代码** - 重要或复杂设计可以另有详细文档;关键实现需标注代码文件路径;格式:`module/file.py:function_name`
+2. **简洁快照,日志分离** - 只记录最重要的、与代码准确对应的或者明确的已完成的设计的信息,避免推测、建议、决策历史、修改日志、大量代码;决策依据或修改日志若有必要,可在`docs/decisions.md`另行记录
+
+---
+
+## 定位
+
+Agent 集体记忆平台。收集和检索 Agent 的真实使用经验,覆盖工具、知识资源等各类资源。资源发现交给现有生态(Glama、Smithery、PyPI 等),KnowHub 专注于"用了之后怎么样"和按需积累的资源内容。
+
+核心原则:
+1. 汇总不同 Agent 的真实使用经验(Agent 版大众点评)
+2. 端侧 Agent 负责搜索、评估、总结、提取内容;Server 只做存取和简单聚合
+
+详见 [decisions.md](decisions.md) 的定位推演。
+
+---
+
+## 架构
+
+```
+Agent(端侧)                          KnowHub Server
+├── curl GET /api/search 查经验   →    LIKE 检索 + SQL 聚合
+├── curl GET /api/content/{id} 取内容 → SQLite 读取 + 导航计算
+├── 去外部平台找资源(fallback)
+├── 使用资源、总结经验
+├── curl POST /api/experience    →    SQLite 写入
+└── curl POST /api/content       →    SQLite 写入(按需提交内容)
+```
+
+Agent 通过 curl 直接调用 REST API,无需安装客户端。skill.md 提供 API 地址和调用模板。
+
+| 职责 | 执行方 |
+|------|--------|
+| 搜索资源、评估质量、总结经验、提取内容 | Agent(端侧) |
+| 存储 experience 和 content、关键词检索、聚合分数 | Server |
+
+Server 无 LLM 调用、无 embedding、无向量数据库。
+
+---
+
+## 数据模型
+
+### experiences
+
+一条经验 = 任务 + 资源 + 结果 + 建议。
+
+```sql
+CREATE TABLE experiences (
+    id            INTEGER PRIMARY KEY AUTOINCREMENT,
+    name          TEXT NOT NULL,           -- 资源名称
+    url           TEXT DEFAULT '',         -- 资源规范来源地址
+    category      TEXT DEFAULT '',         -- 资源类型
+    task          TEXT NOT NULL,           -- 具体任务场景
+    score         INTEGER CHECK(score BETWEEN 1 AND 5),
+    outcome       TEXT DEFAULT '',         -- 结果(含优缺点)
+    tips          TEXT DEFAULT '',         -- 最关键的建议
+    content_id    TEXT DEFAULT '',         -- 可选,关联到 contents
+    submitted_by  TEXT DEFAULT '',         -- 可选,提交者标识
+    created_at    TEXT NOT NULL
+);
+```
+
+**字段填写规范**:
+- **name** — 资源的通用名称。工具填包名(`pymupdf`),论文填标题(`Attention Is All You Need`),博客填博客名或文章标题
+- **url** — 资源的规范来源地址(GitHub repo / arXiv / 官方文档),不是随意搜索结果链接
+- **category** — 建议值:`mcp | skill | library | api | paper | blog | book | course`,自由文本
+- **content_id** — 可选,指向 contents 中的任意节点(可以是资源根,也可以是具体章节)
+- **submitted_by** — 可选,建议使用 `git config user.email` 的值
+
+**多资源协作场景**:
+一个任务常需要多个工具/资源配合(如 pymupdf + langchain + openai)。处理方式:为每个关键资源单独提交一条 experience,在 task/tips/outcome 中提及配合使用的其他资源。这样每个资源都能被搜索到和聚合,同时通过文本保留协作信息。
+
+搜索使用 LIKE 拆词匹配 task + tips + outcome + name,结果按 name 分组返回。
+
+### contents
+
+按需积累的资源内容。Agent 提交,Markdown 格式。
+
+```sql
+CREATE TABLE contents (
+    id            TEXT PRIMARY KEY,        -- 路径式 ID
+    title         TEXT DEFAULT '',
+    body          TEXT NOT NULL,           -- Markdown 格式
+    sort_order    INT DEFAULT 0,           -- 同级排序
+    submitted_by  TEXT DEFAULT '',
+    created_at    TEXT NOT NULL
+);
+```
+
+**ID 约定**:路径式,如 `pymupdf` 或 `attention-paper/section-3-2`。`/` 分隔表示层级关系。
+
+**内容层级**:扁平二级结构。
+- 根节点(ID 不含 `/`):资源概要或目录。有 children 时 body 为目录/概要,无 children 时 body 为完整内容。
+- 子节点(ID 含 `/`):具体内容段落,body 为实质内容。
+
+Children 通过 ID 前缀查询:`WHERE id LIKE '{root_id}/%' ORDER BY sort_order`。
+
+**按需生长**:content 由 agent 在需要时提交。没有 content 的资源只有 experience 层。高频使用的资源自然积累出完整内容。
+
+---
+
+## API
+
+基础地址通过环境变量 `KNOWHUB_API` 配置。
+
+### `GET /api/search?q=...&category=...&limit=10`
+
+搜索经验。LIKE 拆词匹配 task + tips + outcome + name,按 name 分组返回。
+
+响应示例:
+
+```json
+{
+  "results": [
+    {
+      "name": "pymupdf",
+      "url": "https://github.com/pymupdf/PyMuPDF",
+      "relevant_experiences": [
+        {"task": "从学术论文提取表格", "score": 4, "tips": "用 page.find_tables()", "content_id": ""}
+      ],
+      "avg_score": 4.5,
+      "experience_count": 2
+    }
+  ]
+}
+```
+
+### `POST /api/experience`
+
+提交经验。
+
+```json
+{
+  "name": "pymupdf",
+  "url": "https://github.com/pymupdf/PyMuPDF",
+  "category": "library",
+  "task": "从学术论文 PDF 提取结构化表格",
+  "score": 4,
+  "outcome": "速度快,标准排版准确,复杂双栏偶尔丢失顺序",
+  "tips": "用 page.find_tables(),双栏论文先 get_text(sort=True)",
+  "content_id": "",
+  "submitted_by": "user@example.com"
+}
+```
+
+### `GET /api/resource/{name}`
+
+查看某资源的所有经验及关联内容。
+
+### `GET /api/content/{content_id:path}`
+
+获取内容节点。响应自动包含导航上下文:
+
+```json
+{
+  "id": "attention-paper/section-3-2",
+  "title": "3.2 Scaled Dot-Product Attention",
+  "body": "## Scaled Dot-Product Attention\n\nAttention(Q,K,V) = softmax(QK^T / √d_k)V\n\n...",
+  "toc": {"id": "attention-paper", "title": "Attention Is All You Need"},
+  "children": [],
+  "prev": {"id": "attention-paper/section-3-1", "title": "3.1 Encoder and Decoder Stacks"},
+  "next": {"id": "attention-paper/section-3-3", "title": "3.3 Multi-Head Attention"}
+}
+```
+
+- 有 children → body 为目录/概要,children 列出子节点(id + title)
+- 无 children → body 为完整内容
+- toc / prev / next 由 server 从 ID 前缀和 sort_order 计算
+
+### `POST /api/content`
+
+提交内容节点。
+
+```json
+{
+  "id": "attention-paper/section-3-2",
+  "title": "3.2 Scaled Dot-Product Attention",
+  "body": "Markdown 内容...",
+  "sort_order": 2
+}
+```
+
+---
+
+## skill.md 流程
+
+触发条件:遇到复杂任务、可能超出自身能力、多次失败、可能需要外部资源时。以及使用资源完成任务后。
+
+```
+curl GET /api/search
+  → 有可用结果 → 直接参考(经验里有资源名、URL、使用建议)
+  → 需要深入 → GET /api/content/{id} 获取详细内容
+  → 无可用结果 → 去外部平台自行寻找 → 用完后 POST /api/experience 回报
+```
+
+发现渠道(Smithery、PyPI 等)仅作为无经验时的 fallback。
+
+完整内容见 `skill/knowhub.md`。
+
+---
+
+## 项目结构
+
+```
+KnowHub/
+├── docs/
+│   ├── 
+│   ├── decisions.md       # 决策记录
+│   └── knowledge/         # 调研资料(不发布)
+├── skill/
+│   └── knowhub.md         # Agent 策略指南
+├── CLAUDE.md              # 本文档(架构快照)
+└── server.py              # FastAPI + SQLite(单文件)
+```
+
+---
+
+## MVP 边界
+
+**做**:经验收集与检索、按需内容积累与导航、LIKE 拆词搜索、按资源聚合、Markdown 内容、skill.md 策略指南
+
+**不做**:CLI 客户端、资源目录、语义搜索/向量/embedding、用户认证、Web 界面、LLM 聚合摘要、内容层与 Resonote 整合
+
+**后续方向**:CLI 客户端(mpk 命令)、MCP Server 接入、LLM 经验摘要(Agent 端)、submitted_by 信誉权重、语义搜索(embedding)、与 Resonote 内容层桥接

+ 160 - 0
knowhub/docs/decisions.md

@@ -0,0 +1,160 @@
+# KnowHub 决策记录
+
+记录设计过程中的关键决策及推演依据。
+
+---
+
+## 1. 定位:经验层而非工具目录
+
+**背景**:调研发现现有生态(详见 `docs/knowledge/`)已充分覆盖工具发现:
+
+| 已解决的问题 | 谁在做 |
+|-------------|--------|
+| 工具有哪些 | Glama(17k+ MCP)、Smithery(125k+ Skills)、awesome-mcp-servers(81k Stars) |
+| 哪个热门 | Smithery 安装量排行、Glama 下载量 |
+| 静态质量指标 | Glama 质量评分、GitHub Stars、License |
+| 安装方式 | Smithery CLI、npx、pip/uvx |
+| 在线测试 | Glama MCP Inspector |
+
+**缺失**:Agent 在特定任务中使用工具后的真实体验。
+
+**决策**:KnowHub 不做工具目录,只做经验层。发现交给现有平台,KnowHub 收集"用了之后怎么样"。
+
+---
+
+## 2. 核心实体:experience 而非 tool
+
+**曾考虑的方案**:三张表(tools + reports + reviews),以 tool 为中心。
+
+**问题**:
+- tools 表复制 Glama/Smithery 已有的目录
+- reports(调研发现)的价值有限——Agent 的调研结论不比 Glama 的质量评分更可靠
+- 只有 reviews(实际使用评价)是独有价值
+
+**关键洞察**:Agent 的问题不是"pymupdf 怎么样"(工具中心),而是"我要从 PDF 提取表格,谁做过"(任务中心)。
+
+**决策**:单一实体 `experience`(任务 + 工具 + 结果 + 建议)。工具信息从 experiences 中按 tool_name 聚合得出,不单独维护。取消 reports——没用过不评价。
+
+---
+
+## 3. 搜索:任务驱动
+
+**决策**:LIKE 拆词搜索 task + tips + outcome + name 字段,结果按 name 分组,每组返回相关 experiences 和聚合分数。
+
+Server 只做检索 + GROUP BY,不做智能处理。Agent 拿到 JSON 后自行判断。体现"端侧算力"原则。
+
+**搜索范围**:仅命中 experience。Content 是 experience 的深入层,通过 content_id 关联获取,不参与搜索。如果后续发现 content 中有大量有价值信息未被 experience 覆盖,再扩展搜索范围。
+
+---
+
+## 4. 接口:curl 直调 API(MVP)
+
+**曾考虑的方案**:
+
+| 方案 | 优势 | 劣势 |
+|------|------|------|
+| CLI(mpk 命令) | 封装 HTTP 调用,管理 agent_id | 需要 pip install,多一个组件 |
+| MCP Server | Agent 原生工具调用 | 需 MCP SDK + 本地进程,多一跳 |
+| curl 直调 API | 零安装,Agent 和人都能用 | 命令略长,无本地状态管理 |
+
+CLI 和 MCP 都在 HTTP API 外面包了一层。MVP 阶段这层封装提供的价值(agent_id 管理、输出格式化、错误处理)Agent 自身都能做。
+
+**决策**:MVP 不做客户端,skill.md 直接引导 Agent 用 curl 调 API。CLI 和 MCP Server 作为后续接入方式。
+
+---
+
+## 5. skill.md:两条路径而非线性流程
+
+**曾考虑的方案**:四步线性流程(查→找→评→报),发现渠道与查经验并列。
+
+**问题**:有经验时不需要去外部平台找工具,经验中已包含工具名、URL 和使用建议。
+
+**决策**:分叉流程——有结果直接用,无结果才 fallback 到外部平台。发现渠道从主流程降级为 fallback。
+
+---
+
+## 6. 冷启动:有机增长而非种子数据
+
+**曾考虑的方案**:从调研成果导入精选工具目录作为种子数据。
+
+**问题**:导入没有 experience 的工具条目和空数据库无区别。空壳结果反而降低信任感。
+
+**决策**:数据库从零开始。冷启动路径:
+1. Agent 搜索 → 空结果
+2. skill.md 引导去 Smithery/PyPI 找工具
+3. Agent 使用后 `POST /api/experience` 上报
+4. 下一个 Agent 搜索时看到前人经验
+
+空结果不是问题,假数据才是。加速冷启动通过运营(自己先用热门工具并提交真实经验),不通过技术手段。
+
+---
+
+## 7. 身份标识:可选 submitted_by
+
+**曾考虑的方案**:
+- 自动生成 agent_id 持久化到本地文件 → 需要客户端组件
+- 要求注册/登录 → 摩擦太大
+- 要求邮箱 → 如何零成本获取?
+
+**决策**:可选字段 `submitted_by`,自由格式(邮箱、用户名、团队名均可)。skill.md 建议用 `git config user.email` 自动填充——几乎所有开发者已配置,零额外设置。
+
+内部项目设置后方便 debug 追溯;外部用户可不填,零摩擦。
+
+---
+
+## 8. 算力分布
+
+| 工作 | 执行方 | 理由 |
+|------|--------|------|
+| 搜索工具 | Agent(Smithery/PyPI/GitHub) | 利用 Agent 搜索和浏览器能力 |
+| 评估工具质量 | Agent | Agent 有判断力 |
+| 决定用哪个 | Agent | 结合经验 + 自身评估 |
+| 总结使用经验 | Agent | LLM 能力 |
+| 存储/检索/聚合 | Server | 简单 SQL 操作 |
+
+Server 零 LLM 成本。
+
+---
+
+## 9. 资源范围:从工具扩展到一般性知识
+
+**背景**:最初定位仅覆盖工具(mcp/skill/library/api)。但 Agent 的集体记忆不应限于工具——论文、博客、电子书、课程等知识资源同样有"用了之后怎么样"的经验价值。
+
+**决策**:`category` 从工具类型扩展为资源类型(`mcp | skill | library | api | paper | blog | book | course` 等)。数据模型不变,只是语义范围扩大。字段从 `tool_*` 重命名为通用名(`name` / `url` / `category`)。
+
+---
+
+## 10. 触发条件:从"需要工具"到更广的场景
+
+**背景**:skill.md 原始触发条件是"需要外部工具但不确定选哪个时",将 KnowHub 限定为工具推荐器。
+
+**决策**:扩展为更广的触发条件——遇到复杂任务、可能超出自身能力、多次失败、可能需要外部资源时。KnowHub 是 Agent 面对不确定性时的第一反应,不只是找工具时才想起来。
+
+---
+
+## 11. 内容层:按需积累而非预设结构
+
+**背景**:Experience(tips/outcome)能承载一条经验的关键信息,但有些资源需要更深入的内容(论文章节、API 文档、书籍目录)。
+
+**曾考虑的方案**:
+- 固定三层结构(experience → resource detail → sections):预设层级,用 section_key 约定
+- 通用内容图:每个内容有 ID 和 body,可以引用其他内容
+
+**决策**:通用的 contents 表,路径式 ID(`pymupdf` 或 `pymupdf/find-tables`),扁平二级结构(根 + 叶),body 为 Markdown。内容由 Agent 按需提交——没人需要的资源停留在 experience 层,高频使用的资源自然积累出完整内容。
+
+**内容格式**:Markdown。Agent 原生理解 markdown,图片用 URL 引用,不存文件。Resonote 的 HTML + span_id 体系是为人类阅读设计的,KnowHub 不需要。
+
+**观测性**:Server 记录搜索日志。Agent 对不存在内容的 GET 请求频率本身就是"需要更深内容"的信号。
+
+---
+
+## 12. KnowHub 与 Resonote:独立演进
+
+**背景**:两者在内容处理上有潜在协同(内容去重、分析管线、向量检索)。曾讨论 Resonote 依赖 KnowHub 内容层。
+
+**分析**:
+- Library 的 HTML + span_id + 虚拟切分管线对人类阅读有价值,对 Agent 也有潜在价值(精确引用、结构化内容)
+- 但 KnowHub 在 MVP 阶段,数据模型会频繁变动;Library 已稳定,不应因 KnowHub 迭代而受影响
+- 合并内容层的工程收益小于耦合成本
+
+**决策**:两个项目独立推进。唯一预留的接口:两边使用相同的 content hash 方案(sha256),未来如果整合,内容去重天然可行。等 KnowHub 验证"集体记忆"方向后再讨论整合。

+ 64 - 0
knowhub/docs/knowledge/00_research_plan.md

@@ -0,0 +1,64 @@
+# 00_research_plan.md - 调研计划与进度
+
+## 调研目标
+系统性调研当前优质的 Agent Skills 和 MCP(Model Context Protocol)资源,以及发现、评估、获取它们的渠道。
+
+## 调研进度
+
+| 子任务 | 状态 | 关键发现 |
+|--------|------|----------|
+| 目录结构 | ✅ 完成 | 5个文档文件 |
+| MCP 官方资源 | ✅ 完成 | Anthropic官方、17000+服务器 |
+| MCP 社区榜单 | ✅ 完成 | punkpeye(81.3k⭐)、wong2(3.6k⭐) |
+| MCP 平台目录 | ✅ 完成 | Glama/Smithery/MCP.so/MCPServers.org |
+| Smithery Skills | ✅ 完成 | 125,937+ Skills,排行榜 |
+| LangChain Tools | ✅ 完成 | 150+ 工具,详细分类 |
+| CrewAI Tools | ✅ 完成 | 29 内置工具 |
+| OpenAI Agents SDK | ✅ 完成 | 5类工具,原生MCP支持 |
+| Composio | ✅ 完成 | 877工具包,11000+工具 |
+| Cursor Rules | ✅ 完成 | 38k Stars,awesome-cursorrules |
+| 行业博客 | ✅ 完成 | Simon Willison、Lilian Weng |
+| 发现渠道整理 | ✅ 完成 | 3梯队渠道体系 |
+| 精选MCP列表 | ✅ 完成 | 按场景分类 |
+| 最终报告 | ✅ 完成 | 综合报告 |
+
+## 输出文件
+
+```
+knowledge/
+├── 00_research_plan.md          ← 本文件:调研计划和进度
+├── 01_mcp_ecosystem.md          ← MCP生态详细调研
+├── 02_agent_skills_ecosystem.md ← Agent Skills生态详细调研
+├── 03_discovery_channels.md     ← 发现/评估/获取渠道
+├── 04_top_mcp_curated.md        ← 精选优质MCP服务器
+└── 05_final_report.md           ← 最终综合报告(主要阅读入口)
+```
+
+## 主要调研来源
+
+### 官方来源
+- https://modelcontextprotocol.io/ - MCP 官方文档
+- https://github.com/modelcontextprotocol/servers - 官方服务器
+- https://www.anthropic.com/news/model-context-protocol - MCP 发布公告
+- https://smithery.ai - MCP+Skills 综合平台
+- https://docs.langchain.com/oss/python/integrations/tools - LangChain Tools
+- https://docs.crewai.com/concepts/tools - CrewAI Tools
+- https://openai.github.io/openai-agents-python/tools/ - OpenAI Agents SDK
+- https://composio.dev/toolkits - Composio 工具包
+
+### 社区榜单
+- https://github.com/punkpeye/awesome-mcp-servers (81.3k ⭐)
+- https://github.com/wong2/awesome-mcp-servers (3.6k ⭐)
+- https://github.com/PatrickJS/awesome-cursorrules (38k ⭐)
+- https://github.com/e2b-dev/awesome-ai-agents (25.9k ⭐)
+
+### 目录平台
+- https://glama.ai/mcp/servers (17,658+ 服务器)
+- https://mcp.so (17,803+ 服务器)
+- https://mcpservers.org
+- https://mcp-awesome.com
+
+### 行业博客
+- https://simonwillison.net/2024/Nov/25/model-context-protocol/ - Simon Willison MCP评测
+- https://lilianweng.github.io/posts/2023-06-23-agent/ - Lilian Weng Agent工具综述
+- https://desktopcommander.app/blog/2025/11/25/best-mcp-servers/ - 22个最佳MCP评测

+ 138 - 0
knowhub/docs/knowledge/01_mcp_ecosystem.md

@@ -0,0 +1,138 @@
+# MCP (Model Context Protocol) 生态调研
+
+> 最后更新:2025-02-22
+> 状态:持续更新中
+
+---
+
+## 一、MCP 是什么
+
+MCP(Model Context Protocol)是 Anthropic 于 2024 年 11 月发布的开放协议,旨在标准化 AI 模型与外部工具/数据源之间的连接方式。类似于 USB-C 对设备连接的标准化作用,MCP 让 AI 助手可以安全、统一地访问各种外部资源。
+
+**官方文档**:https://modelcontextprotocol.io/
+**GitHub 组织**:https://github.com/modelcontextprotocol
+
+---
+
+## 二、核心资源库
+
+### 2.1 官方 MCP Servers 仓库
+- **URL**:https://github.com/modelcontextprotocol/servers
+- **说明**:Anthropic 官方维护的参考实现集合,包含最权威的官方 MCP 服务器
+
+### 2.2 awesome-mcp-servers(最大社区榜单)
+- **URL**:https://github.com/punkpeye/awesome-mcp-servers
+- **Stars**:81.3k ⭐(截至2025-02)
+- **Forks**:7.4k
+- **说明**:目前最全面的 MCP 服务器社区榜单,涵盖 30+ 分类,3725+ commits
+- **配套网站**:https://glama.ai/mcp/servers(可视化目录)
+
+---
+
+## 三、官方 MCP 服务器(Anthropic 官方出品)
+
+| 服务器 | 功能 | 链接 |
+|--------|------|------|
+| server-filesystem | 文件系统读写操作 | github.com/modelcontextprotocol/servers |
+| server-github | GitHub 仓库操作 | github.com/modelcontextprotocol/servers |
+| server-postgres | PostgreSQL 数据库 | github.com/modelcontextprotocol/servers |
+| server-sqlite | SQLite 数据库 | github.com/modelcontextprotocol/servers |
+| server-brave-search | Brave 搜索引擎 | github.com/modelcontextprotocol/servers |
+| server-google-maps | Google Maps 地图 | github.com/modelcontextprotocol/servers |
+| server-memory | 知识图谱记忆 | github.com/modelcontextprotocol/servers |
+| server-fetch | 网页内容获取 | github.com/modelcontextprotocol/servers |
+| server-puppeteer | 浏览器自动化 | github.com/modelcontextprotocol/servers |
+| server-slack | Slack 集成 | github.com/modelcontextprotocol/servers |
+
+---
+
+## 四、按分类整理的优质 MCP 服务器
+
+### 4.1 浏览器自动化
+- **browserbase/mcp-server-browserbase** 🎖️官方 - 云端浏览器自动化
+  - URL: https://github.com/browserbase/mcp-server-browserbase
+- **microsoft/playwright-mcp** 🎖️官方 - Playwright 集成(微软出品)
+  - URL: https://github.com/microsoft/playwright-mcp
+- **Puppeteer server** - 网页抓取和交互
+
+### 4.2 云平台集成
+- **awslabs/mcp** 🎖️官方 AWS - AWS 服务集成
+  - URL: https://github.com/awslabs/mcp
+- **cloudflare/mcp-server-cloudflare** 🎖️官方 - Workers/KV/R2/D1
+  - URL: https://github.com/cloudflare/mcp-server-cloudflare
+- **hashicorp/terraform-mcp-server** 🎖️官方 - Terraform 基础设施管理
+  - URL: https://github.com/hashicorp/terraform-mcp-server
+- **pulumi/mcp-server** 🎖️官方 - Pulumi IaC 集成
+  - URL: https://github.com/pulumi/mcp-server
+
+### 4.3 代码执行
+- **dagger/container-use** - 容器化编码 Agent 环境
+  - URL: https://github.com/dagger/container-use
+- **pydantic-ai/mcp-run-python** - 安全 Python 沙箱
+  - URL: https://github.com/pydantic/pydantic-ai
+- **yepcode/mcp-server-js** 🎖️官方 - JS/Python 代码执行
+  - URL: https://github.com/yepcode/mcp-server-js
+
+### 4.4 数据库
+- **modelcontextprotocol/server-postgres** 🎖️官方 - PostgreSQL
+- **modelcontextprotocol/server-sqlite** 🎖️官方 - SQLite
+- **mongodb-mcp** - MongoDB 集成
+- **redis/mcp-redis-cloud** - Redis Cloud 管理
+
+### 4.5 开发者工具
+- **modelcontextprotocol/server-github** 🎖️官方 - GitHub 操作
+- **git-mcp-server** - Git 版本控制
+- **docker-mcp** - Docker 容器管理
+- **sentry-mcp** - 错误追踪集成
+
+### 4.6 搜索与数据提取
+- **modelcontextprotocol/server-brave-search** 🎖️官方 - Brave 搜索
+- **exa-mcp-server** - Exa AI 语义搜索
+  - URL: https://github.com/exa-labs/exa-mcp-server
+- **tavily-mcp-server** - Tavily 搜索 API
+  - URL: https://github.com/tavily-ai/tavily-mcp
+
+### 4.7 聚合器(Meta-MCP)
+- **1mcp/agent** - 统一聚合多个 MCP
+- **AgentHotspot** - MCP 市场,搜索和集成连接器
+- **MetaTool** - 带 GUI 的统一中间件
+- **PipedreamHQ** - 连接 2500+ API
+  - URL: https://github.com/PipedreamHQ/pipedream
+
+### 4.8 生产力工具
+- **slack-mcp-server** - Slack 集成
+- **notion-mcp** - Notion 工作区访问
+- **asana-mcp** - 项目管理
+- **google-drive-mcp** - Google Drive 集成
+
+### 4.9 金融
+- **stripe-mcp-server** - Stripe 支付集成
+- **coinbase-mcp** - 加密货币操作
+- **yahoo-finance-mcp** - 股市数据
+
+---
+
+## 五、MCP 发现/评估平台
+
+### 5.1 Glama.ai
+- **URL**:https://glama.ai/mcp/servers
+- **说明**:最大的 MCP 服务器可视化目录,配套 MCP Inspector 工具
+- **MCP Inspector**:https://glama.ai/mcp/inspector(在线测试 MCP 服务器)
+
+### 5.2 MCP.so
+- **URL**:https://mcp.so
+- **说明**:MCP 服务器搜索和发现平台(待进一步调研)
+
+### 5.3 GitHub awesome-mcp-servers
+- **URL**:https://github.com/punkpeye/awesome-mcp-servers
+- **说明**:社区维护的最全榜单,81.3k stars
+
+---
+
+## 六、待继续调研
+
+- [ ] Glama.ai 详细功能
+- [ ] mcp.so 平台
+- [ ] smithery.ai(MCP 托管平台)
+- [ ] 各大 IDE 的 MCP 集成(Cursor、Windsurf、Claude Desktop)
+- [ ] 行业大牛对 MCP 的评测博客

+ 203 - 0
knowhub/docs/knowledge/02_agent_skills_ecosystem.md

@@ -0,0 +1,203 @@
+# Agent Skills 生态调研
+
+> 最后更新:2025-02-22
+> 状态:持续更新中
+
+---
+
+## 一、什么是 Agent Skills
+
+Agent Skills 是预构建的工作流/知识包,用于定制和扩展 AI Agent 的行为能力。与 MCP(提供工具/数据访问)不同,Skills 更侧重于:
+- **专业知识**:特定领域的专业指导(如金融分析、前端设计)
+- **工作流程**:预定义的任务执行流程
+- **工具集成**:将多个工具组合成完整的工作流
+
+---
+
+## 二、主要 Skills 平台
+
+### 2.1 Smithery.ai(最大 Skills 平台)
+- **URL**:https://smithery.ai/skills
+- **总量**:125,937+ Skills(截至2025-02)
+- **定位**:同时提供 MCP(4333+)和 Skills(125937+)的综合平台
+- **特点**:
+  - 一键 CLI 安装:`npx @smithery/cli@latest setup`
+  - 内置 OAuth 和凭证管理
+  - 可观测性和分析
+  - 支持发布自定义 Skills
+
+#### Skills 分类(13个主类)
+1. Research(研究)
+2. Coding(编程)
+3. Writing(写作)
+4. Data & Analytics(数据分析)
+5. Design(设计)
+6. Planning(规划)
+7. Communication(沟通)
+8. Productivity(生产力)
+9. DevOps
+10. AI & ML
+11. Security(安全)
+12. Business(商业)
+
+---
+
+## 三、Smithery 热门 Skills 排行(按安装量)
+
+| 排名 | Skill | 提供者 | 描述 | 安装量 | 评分 |
+|------|-------|--------|------|--------|------|
+| 1 | **cli** | smithery-ai | 发现/连接/使用 MCP 工具和 Skills 的 CLI 工具 | 880 | - |
+| 2 | **frontend-design** | anthropics | 创建高质量前端界面,避免 AI 通用美学 | 675 | 63,077 |
+| 3 | **skill-creator** | anthropics | 创建有效 Skills 的指南 | 239 | 66,293 |
+| 4 | **pptx** | anthropics | 处理 .pptx 演示文稿文件的完整工具集 | 194 | 66,293 |
+| 5 | **pdf** | anthropics | PDF 文件处理(读取/合并/分割/OCR等) | 193 | 66,293 |
+| 6 | **mcp-integration** | anthropics | MCP 服务器集成指南 | 145 | - |
+| 7 | **skill-development** | anthropics | Skill 开发最佳实践指南 | 137 | - |
+| 8 | **prompt-engineering-patterns** | wshobson | 高级提示工程技术,提升 LLM 性能 | 134 | - |
+| 9 | **xlsx** | anthropics | 电子表格文件处理(xlsx/csv/tsv) | 126 | - |
+| 10 | **webapp-testing** | anthropics | 使用 Playwright 测试本地 Web 应用 | 112 | - |
+| 11 | **docx** | anthropics | Word 文档创建/编辑/操作 | 108 | - |
+| 12 | **analyzing-financial-statements** | anthropics | 财务报表分析,计算关键财务比率 | 84 | - |
+| 13 | **theme-factory** | anthropics | 为 Artifacts 添加主题样式(10种预设主题) | 72 | - |
+| 14 | **refactor** | github | 外科手术式代码重构,不改变行为 | 72 | - |
+| 15 | **agent-identifier** | anthropics | Agent 创建/结构/系统提示最佳实践 | 60 | - |
+| 16 | **creating-financial-models** | anthropics | DCF分析/敏感性测试/蒙特卡洛模拟 | 56 | - |
+| 17 | **skill-writer** | pytorch | 引导创建 Agent Skills 的工具 | 50 | - |
+| 18 | **canvas-design** | anthropics | 创建视觉艺术(海报/设计作品) | 48 | - |
+| 19 | **mcp-builder** | anthropics | 构建高质量 MCP 服务器的指南 | 47 | - |
+| 20 | **web-design-reviewer** | github | 视觉检查网站设计问题并修复 | 39 | - |
+| 21 | **excalidraw-diagram-generator** | github | 从自然语言生成 Excalidraw 图表 | 27 | - |
+
+---
+
+## 四、Anthropic 官方 Skills(Claude Code 内置)
+
+Anthropic 在 Smithery 上发布了大量官方 Skills,主要面向 Claude Code 用户:
+
+### 文件处理类
+- `anthropics/pdf` - PDF 全功能处理
+- `anthropics/pptx` - PowerPoint 处理
+- `anthropics/xlsx` - Excel/CSV 处理
+- `anthropics/docx` - Word 文档处理
+
+### 设计类
+- `anthropics/frontend-design` - 前端界面设计
+- `anthropics/canvas-design` - 视觉艺术创作
+- `anthropics/theme-factory` - 主题样式工厂
+- `anthropics/web-design-reviewer` - 网站设计审查
+
+### 开发工具类
+- `anthropics/webapp-testing` - Web 应用测试(Playwright)
+- `anthropics/mcp-builder` - MCP 服务器构建指南
+- `anthropics/mcp-integration` - MCP 集成指南
+- `anthropics/refactor` - 代码重构
+
+### 金融分析类
+- `anthropics/analyzing-financial-statements` - 财务报表分析
+- `anthropics/creating-financial-models` - 财务模型构建
+
+### Meta Skills(关于 Skills 的 Skills)
+- `anthropics/skill-creator` - 创建 Skills 的指南
+- `anthropics/skill-development` - Skill 开发最佳实践
+- `anthropics/agent-identifier` - Agent 结构设计
+
+---
+
+## 五、其他 Agent Skills/Tools 生态
+
+### 5.1 LangChain Tools(150+ 工具)
+- **URL**:https://docs.langchain.com/oss/python/integrations/tools
+- **总量**:150+ 工具和工具包
+- **特点**:Python 为主,与 LangGraph 深度集成,1000+ 总集成
+- **主要分类**:
+  - 搜索工具(15种:Bing/Brave/DuckDuckGo/Exa/Tavily等)
+  - 代码执行(4种沙箱:E2B/Bearly/Riza/Azure)
+  - 生产力工具(GitHub/GitLab/Gmail/Jira/Slack/Office365)
+  - 浏览器工具(Playwright/AgentQL/MultiOn/Hyperbrowser)
+  - 数据库工具(Cassandra/SQL/Spark/Stardog)
+  - 金融工具(Composio/GOAT/Privy)
+  - 集成平台(Composio 500+工具)
+- **安装**:`pip install langchain-community`
+
+### 5.2 CrewAI Tools(29 个内置工具)
+- **URL**:https://docs.crewai.com/concepts/tools
+- **总量**:29 个内置工具
+- **特点**:
+  - 支持 MCP Server Adapter(接入数千社区工具)
+  - 内置 RAG 工具(PDF/CSV/JSON/DOCX/MDX搜索)
+  - 支持 Composio 和 LlamaIndex 集成
+- **主要工具**:
+  - 文件工具:FileReadTool/FileWriteTool/DirectoryReadTool
+  - 搜索工具:SerperDevTool/EXASearchTool
+  - 网页工具:ScrapeWebsiteTool/FirecrawlCrawlWebsiteTool/BrowserbaseLoadTool
+  - 数据库:PGSearchTool
+  - AI工具:DallETool/VisionTool/CodeInterpreterTool
+  - 媒体:YoutubeChannelSearchTool/YoutubeVideoSearchTool
+- **安装**:`pip install 'crewai[tools]'`
+
+### 5.3 OpenAI Agents SDK Tools
+- **URL**:https://openai.github.io/openai-agents-python/tools/
+- **特点**:5 大类工具,原生支持 MCP
+- **内置托管工具**:
+  - `WebSearchTool` - 网络搜索
+  - `FileSearchTool` - 向量存储检索
+  - `CodeInterpreterTool` - 代码执行沙箱
+  - `HostedMCPTool` - 远程 MCP 服务器
+  - `ImageGenerationTool` - 图像生成
+- **本地工具**:
+  - `ComputerTool` - GUI/浏览器自动化
+  - `ShellTool` - Shell 命令执行
+  - `ApplyPatchTool` - 代码补丁应用
+- **实验性**:`CodexTool` - 工作区级别代码任务
+
+### 5.4 Composio(850+ 工具包,11000+ 工具)
+- **URL**:https://composio.dev/toolkits
+- **总量**:877 工具包,11,000+ 工具
+- **特点**:
+  - 支持 MCP 或直接 API 访问
+  - 内置 OAuth2/Bearer/API Key 认证管理
+  - 企业级安全和可观测性
+  - 兼容 LangChain/CrewAI/AutoGen 等所有主流框架
+- **主要分类(20类)**:
+  - 开发工具(GitHub/Supabase/代码执行)
+  - 协作通信(Gmail/Outlook/Slack/Teams)
+  - 项目管理(Asana/Linear/Jira/Trello)
+  - CRM(HubSpot/Salesforce/Pipedrive)
+  - 文件管理(Google Drive/Sheets/Docs/Notion)
+  - 搜索数据(Firecrawl/Tavily/Exa)
+  - 金融(财务工具)
+  - 营销(社交媒体工具)
+
+### 5.5 Cursor Rules / .cursorrules(38k Stars)
+- **URL**:https://github.com/PatrickJS/awesome-cursorrules
+- **Stars**:38,000 ⭐
+- **说明**:Cursor IDE 的 AI 行为配置文件,类似 Skills 的概念
+- **特点**:
+  - 为特定技术栈定制 AI 行为
+  - 涵盖 40+ 前端框架、30+ 后端框架
+  - 支持 React/Next.js/Vue/Angular/Python/Go 等
+  - 可通过 VSCode 扩展安装
+- **配套网站**:https://cursor.directory
+
+---
+
+## 六、Skills vs MCP 的区别
+
+| 维度 | Agent Skills | MCP |
+|------|-------------|-----|
+| 本质 | 预构建工作流/知识包 | 工具/数据访问协议 |
+| 形式 | Markdown 文档/提示词 | 服务器程序 |
+| 功能 | 指导 Agent 如何做事 | 让 Agent 能做什么 |
+| 示例 | "如何重构代码"的最佳实践 | 执行 git 命令的能力 |
+| 安装 | 注入到 Agent 上下文 | 启动独立服务器进程 |
+
+---
+
+## 七、待继续调研
+
+- [ ] LangChain Tools 生态详情
+- [ ] AutoGen 工具集
+- [ ] CrewAI Tools 市场
+- [ ] OpenAI GPT Actions
+- [ ] Cursor Rules / .cursorrules 生态
+- [ ] Claude Code 官方 Skills 文档

+ 244 - 0
knowhub/docs/knowledge/03_discovery_channels.md

@@ -0,0 +1,244 @@
+# 发现/评估/获取 Agent Skills 和 MCP 的渠道
+
+> 最后更新:2025-02-22
+> 状态:持续更新中
+
+---
+
+## 一、MCP 发现渠道
+
+### 1.1 官方渠道
+
+#### Anthropic 官方 MCP 文档
+- **URL**:https://modelcontextprotocol.io/
+- **内容**:协议规范、官方服务器、开发指南
+- **适合**:了解 MCP 标准、开发自己的 MCP
+
+#### Anthropic 官方 GitHub 组织
+- **URL**:https://github.com/modelcontextprotocol
+- **内容**:官方参考实现、SDK、规范
+- **适合**:获取官方服务器、了解最新协议更新
+
+---
+
+### 1.2 社区榜单(GitHub Awesome Lists)
+
+#### awesome-mcp-servers(punkpeye)⭐ 最大榜单
+- **URL**:https://github.com/punkpeye/awesome-mcp-servers
+- **Stars**:81.3k ⭐(截至2025-02)
+- **特点**:
+  - 30+ 分类,覆盖最全面
+  - 区分官方/社区实现
+  - 标注编程语言、运行环境(本地/云端)
+  - 配套网站:https://glama.ai/mcp/servers
+- **适合**:全面发现 MCP 服务器
+
+#### awesome-mcp-servers(wong2)
+- **URL**:https://github.com/wong2/awesome-mcp-servers
+- **Stars**:3.6k ⭐
+- **特点**:
+  - 配套网站:https://mcpservers.org
+  - 不接受 PR,通过网站提交(质量控制更严格)
+  - 分为 Reference/Official/Community 三类
+- **适合**:发现经过筛选的高质量 MCP
+
+---
+
+### 1.3 专门平台/目录
+
+#### Glama.ai(最大 MCP 目录)
+- **URL**:https://glama.ai/mcp/servers
+- **总量**:17,658+ 服务器(截至2025-02)
+- **特点**:
+  - 多维度筛选:语言、类型、功能、下载量、Stars
+  - 质量评分(安全性、许可证、代码质量)
+  - 配套 MCP Inspector:https://glama.ai/mcp/inspector(在线测试工具)
+  - 支持 Deep Search
+  - 按 Recent Usage(30天活跃度)排序
+- **适合**:发现 + 评估 MCP 质量
+
+#### Smithery.ai(MCP + Skills 综合平台)
+- **URL**:https://smithery.ai
+- **总量**:4,333+ MCP 服务器 + 125,937+ Skills
+- **特点**:
+  - 一键 CLI 安装:`npx @smithery/cli@latest setup`
+  - 内置 OAuth 和凭证管理
+  - 使用量统计(按安装次数排序)
+  - 支持 Remote 和 Local 服务器
+  - 可观测性和分析功能
+- **适合**:快速安装 + 管理 MCP 和 Skills
+
+#### MCP.so
+- **URL**:https://mcp.so
+- **总量**:17,803+ 服务器(截至2025-02)
+- **特点**:
+  - 支持 Hosted MCP(托管服务器)
+  - 列出支持 MCP 的客户端(Cursor、Windsurf、Cline 等)
+  - 有中文友好内容(包含高德地图、百度地图等中文 MCP)
+- **适合**:发现 MCP,特别是中文生态
+
+#### MCPServers.org
+- **URL**:https://mcpservers.org
+- **特点**:
+  - 与 wong2/awesome-mcp-servers 配套
+  - 有 Featured/Official/Sponsored 分类
+  - 提交入口:https://mcpservers.org/submit
+- **适合**:发现经过筛选的高质量 MCP
+
+#### MCP-Awesome.com
+- **URL**:https://mcp-awesome.com
+- **总量**:1,200+ 服务器
+- **特点**:包含教程和示例
+- **适合**:入门学习
+
+---
+
+### 1.4 博客/评测文章
+
+#### Desktop Commander 博客
+- **URL**:https://desktopcommander.app/blog/2025/11/25/best-mcp-servers/
+- **内容**:22 个最佳 MCP 服务器详细评测,含安装难度、使用场景
+- **可信度**:高(Desktop Commander 本身是知名 MCP)
+
+#### Refold.ai 博客
+- **URL**:https://refold.ai/blog/21-powerful-mcp-servers-you-should-know-about-in-2025/
+- **内容**:21 个强大 MCP 服务器(2025年4月)
+
+#### CloudShip AI
+- **内容**:15 个最佳 DevOps 团队 MCP 服务器
+
+#### Pomerium
+- **内容**:安全导向的 MCP 服务器推荐
+
+---
+
+### 1.5 社区渠道
+
+#### Reddit
+- **r/ClaudeAI**:https://www.reddit.com/r/ClaudeAI/
+- **r/mcp**:MCP 专属讨论社区
+- **r/LangChain**:LangChain 工具讨论
+
+#### Discord
+- **Anthropic Discord**:官方 MCP 讨论频道
+- **Glama.ai Discord**:MCP 开发者社区
+
+#### GitHub Discussions
+- **modelcontextprotocol/servers**:官方讨论区
+
+---
+
+## 二、Agent Skills 发现渠道
+
+### 2.1 Smithery.ai Skills 目录
+- **URL**:https://smithery.ai/skills
+- **总量**:125,937+ Skills
+- **筛选维度**:分类(13个)、状态(Verified)、所有者
+- **排序方式**:安装量、评分
+- **适合**:发现和安装 Skills
+
+### 2.2 Anthropic 官方 Skills(Claude Code)
+- **URL**:https://docs.anthropic.com/(Claude Code 文档)
+- **内容**:Anthropic 官方发布的 Skills
+- **适合**:获取最权威的 Skills
+
+### 2.3 LangChain Tools 目录
+- **URL**:https://docs.langchain.com/oss/python/integrations/tools
+- **总量**:150+ 工具和工具包
+- **特点**:
+  - 按类别组织(搜索、代码执行、生产力、浏览器、数据库、金融)
+  - 标注费用(免费/付费/免费额度)
+  - Python 为主,部分支持 TypeScript
+- **适合**:LangChain/LangGraph 用户
+
+### 2.4 GitHub 搜索
+- **搜索词**:`agent skills`, `claude skills`, `SKILL.md`
+- **适合**:发现社区贡献的 Skills
+
+---
+
+## 三、评估 MCP/Skills 质量的方法
+
+### 3.1 量化指标
+| 指标 | 含义 | 获取渠道 |
+|------|------|----------|
+| GitHub Stars | 社区认可度 | GitHub、Glama.ai |
+| 安装量/下载量 | 实际使用量 | Smithery.ai、Glama.ai |
+| 最近活跃度 | 维护状态 | Glama.ai(Recent Usage)|
+| 代码质量评分 | 代码规范性 | Glama.ai |
+| 安全评分 | 安全性 | Glama.ai |
+| 许可证 | 商业使用可行性 | Glama.ai |
+
+### 3.2 质量信号
+- **官方标识**(🎖️):由原厂维护,质量有保障
+- **Verified 标识**:Smithery 验证过的 Skills
+- **更新频率**:最近是否有 commit
+- **Issue 响应**:维护者是否活跃回应
+- **文档完整性**:README 是否详细
+
+### 3.3 测试工具
+- **Glama MCP Inspector**:https://glama.ai/mcp/inspector(在线测试 MCP 服务器)
+- **Claude Desktop**:本地测试 MCP 集成
+- **Cursor/Windsurf**:IDE 中测试 MCP
+
+---
+
+## 四、获取/安装方式
+
+### 4.1 MCP 安装方式
+
+#### 方式一:npm/npx(TypeScript MCP)
+```bash
+npx @modelcontextprotocol/server-github
+```
+
+#### 方式二:pip/uvx(Python MCP)
+```bash
+uvx mcp-server-fetch
+```
+
+#### 方式三:Smithery CLI(统一安装)
+```bash
+npx @smithery/cli@latest setup
+npx @smithery/cli@latest add <server-name>
+```
+
+#### 方式四:Claude Desktop 配置文件
+```json
+{
+  "mcpServers": {
+    "github": {
+      "command": "npx",
+      "args": ["-y", "@modelcontextprotocol/server-github"],
+      "env": {"GITHUB_TOKEN": "your-token"}
+    }
+  }
+}
+```
+
+### 4.2 Skills 安装方式
+
+#### Smithery CLI
+```bash
+npx @smithery/cli@latest add skill <skill-name>
+```
+
+#### Claude Code 直接使用
+在 Claude Code 中,Skills 通过 `.claude/` 目录的配置文件加载
+
+---
+
+## 五、支持 MCP 的主流客户端
+
+| 客户端 | 类型 | MCP 支持 |
+|--------|------|----------|
+| Claude Desktop | 桌面应用 | ✅ 原生支持 |
+| Claude Code | CLI | ✅ 原生支持 |
+| Cursor | IDE | ✅ 支持 |
+| Windsurf | IDE | ✅ 支持 |
+| Cline | VS Code 插件 | ✅ 支持 |
+| Continue | VS Code 插件 | ✅ 支持 |
+| Cherry Studio | 桌面应用 | ✅ 支持 |
+| 5ire | 桌面应用 | ✅ 支持 |
+| HyperChat | 应用 | ✅ 支持 |
+| DeepChat | 应用 | ✅ 支持 |

+ 157 - 0
knowhub/docs/knowledge/04_top_mcp_curated.md

@@ -0,0 +1,157 @@
+# 优质 MCP 服务器精选
+
+> 最后更新:2025-02-22
+> 来源:多平台交叉验证(Smithery使用量 + Glama下载量 + GitHub Stars + 社区推荐)
+
+---
+
+## 一、评选标准
+
+本文档基于以下多维度指标筛选:
+- **Smithery 安装量**(实际使用量)
+- **Glama 下载量 + Stars**(社区认可度)
+- **GitHub Stars**(开发者认可度)
+- **官方出品**(质量保障)
+- **社区博客推荐**(实际使用反馈)
+
+---
+
+## 二、必装 MCP 服务器(按场景)
+
+### 🔍 搜索与信息获取
+
+| 服务器 | 提供者 | Smithery使用量 | 特点 | 获取方式 |
+|--------|--------|---------------|------|----------|
+| **Exa Search** | Exa Labs | 5.24M | 语义搜索+代码检索,1000次/月免费 | `npx @smithery/cli add exa` |
+| **Brave Search** | Anthropic官方 | 4.33K | 隐私优先,免费,无追踪 | `npx @modelcontextprotocol/server-brave-search` |
+| **Tavily** | Tavily | - | 实时搜索+爬取,1000次/月免费 | `npx @smithery/cli add tavily` |
+| **Context7** | Upstash | 17.65K | 版本特定文档获取,消除过时建议 | `npx @smithery/cli add context7` |
+| **Perplexity** | Perplexity | - | 深度研究+引用,多源验证 | 需API Key |
+| **Linkup** | Linkup | 25.37K | 实时网络搜索+来源支持 | `npx @smithery/cli add linkup` |
+
+### 💻 开发者工具
+
+| 服务器 | 提供者 | GitHub Stars | 特点 | 获取方式 |
+|--------|--------|-------------|------|----------|
+| **GitHub** | Anthropic官方 | 高 | 仓库管理、PR、Issues、代码审查 | `npx @modelcontextprotocol/server-github` |
+| **Filesystem** | Anthropic官方 | 高 | 安全文件读写,Claude Code必备 | `npx @modelcontextprotocol/server-filesystem` |
+| **Git** | 社区 | - | Git版本控制操作 | `uvx mcp-server-git` |
+| **Desktop Commander** | 社区 | - | 终端访问+文件管理+窗口控制 | `npx @smithery/cli add desktop-commander` |
+| **Docker** | 社区 | - | 容器管理,生成Dockerfile | npm包 |
+
+### 🌐 浏览器自动化
+
+| 服务器 | 提供者 | 特点 | 获取方式 |
+|--------|--------|------|----------|
+| **Playwright** | Microsoft官方 | 最权威的浏览器自动化 | `npx @playwright/mcp` |
+| **Browserbase** | Browserbase官方 | 云端浏览器,无需本地安装 | `npx @smithery/cli add browserbase` |
+| **Puppeteer** | Anthropic官方 | 网页抓取和交互 | `npx @modelcontextprotocol/server-puppeteer` |
+
+### 🗄️ 数据库
+
+| 服务器 | 提供者 | 特点 | 获取方式 |
+|--------|--------|------|----------|
+| **PostgreSQL** | Anthropic官方 | 自然语言SQL查询 | `npx @modelcontextprotocol/server-postgres` |
+| **SQLite** | Anthropic官方 | 轻量级本地数据库 | `npx @modelcontextprotocol/server-sqlite` |
+| **Supabase** | Supabase官方 | 20+工具,含Auth/Storage | npm包 |
+| **MongoDB** | 社区 | NoSQL文档操作 | npm包 |
+| **ClickHouse** | 社区 | 高性能分析(只读) | npm包 |
+
+### ☁️ 云平台
+
+| 服务器 | 提供者 | 特点 | 获取方式 |
+|--------|--------|------|----------|
+| **AWS** | AWS官方 | EC2/S3/IAM/CloudWatch等 | `pip install awslabs-mcp` |
+| **Cloudflare** | Cloudflare官方 | Workers/KV/R2/D1/DNS | npm包 |
+| **Azure** | Microsoft官方 | 40+服务,Entra ID认证 | npm包 |
+| **Terraform** | HashiCorp官方 | 基础设施即代码 | npm包 |
+| **Pulumi** | Pulumi官方 | IaC集成 | npm包 |
+
+### 📁 文件与存储
+
+| 服务器 | 提供者 | 特点 | 获取方式 |
+|--------|--------|------|----------|
+| **Google Drive** | 社区 | 文件搜索/分类/摘要 | npm包 |
+| **Memory** | Anthropic官方 | 知识图谱记忆系统 | `npx @modelcontextprotocol/server-memory` |
+| **Fetch** | Anthropic官方 | 网页内容获取 | `uvx mcp-server-fetch` |
+
+### 🏢 生产力工具
+
+| 服务器 | 提供者 | Smithery使用量 | 特点 | 获取方式 |
+|--------|--------|---------------|------|----------|
+| **Notion** | Notion官方 | 5.48K | 工作区搜索/页面/数据库管理 | `npx @smithery/cli add notion` |
+| **Slack** | Anthropic官方 | - | 消息草稿/频道摘要/工作区洞察 | `npx @modelcontextprotocol/server-slack` |
+| **Google Maps** | Anthropic官方 | - | 地理空间数据和路线查询 | `npx @modelcontextprotocol/server-google-maps` |
+| **Clay MCP** | Clay | 10.84K | 网络访问和工作流工具 | `npx @smithery/cli add clay` |
+
+### 🔐 安全与知识
+
+| 服务器 | 提供者 | 特点 | 获取方式 |
+|--------|--------|------|----------|
+| **InfraNodus** | InfraNodus | 知识图谱,文本→结构化表示 | `npx @smithery/cli add infranodus` |
+| **mem0** | mem0ai | 长期记忆,语义搜索 | `npx @smithery/cli add mem0` |
+
+---
+
+## 三、按 Smithery 使用量排行(Top 10)
+
+1. **Exa Search** - 5,240,000 使用量 🏆
+2. **Linkup** - 25,370 使用量
+3. **Context7** - 17,650 使用量
+4. **Clay MCP** - 10,840 使用量
+5. **Notion** - 5,480 使用量
+6. **GitHub** - 4,950 使用量
+7. **Browserbase** - 4,530 使用量
+8. **Brave Search** - 4,330 使用量
+9. **ScrapeGraph AI** - 182 使用量
+10. **InfraNodus** - 143 使用量
+
+---
+
+## 四、按 GitHub Stars 排行(社区认可度)
+
+1. **Playwright MCP**(Microsoft)- 最高
+2. **GitHub MCP Server**(Anthropic)
+3. **Filesystem MCP Server**(Anthropic)
+4. **Notion MCP Server**
+5. **PostgreSQL MCP Server**(Anthropic)
+6. **Brave Search MCP Server**(Anthropic)
+7. **Slack MCP Server**(Anthropic)
+8. **Google Drive MCP Server**
+9. **Docker MCP Server**
+10. **Supabase MCP Server**
+
+---
+
+## 五、特别推荐:新兴优质 MCP
+
+### 代码执行沙箱
+- **E2B** - 安全代码沙箱执行,支持多语言
+  - URL: https://github.com/e2b-dev/e2b-mcp
+- **dagger/container-use** - 容器化编码 Agent 环境
+  - URL: https://github.com/dagger/container-use
+
+### 文档获取
+- **Context7** - 版本特定文档,消除 AI 幻觉
+  - URL: https://github.com/upstash/context7-mcp
+- **Docfork** - 文档分叉和访问
+  - URL: https://smithery.ai/servers/docfork/mcp
+
+### 数据提取
+- **ScrapeGraph AI** - AI 驱动的高级网页抓取
+  - URL: https://github.com/ScrapeGraphAI/scrapegraph-mcp
+- **Firecrawl** - 网页爬取和数据提取
+  - URL: https://github.com/mendableai/firecrawl-mcp-server
+
+---
+
+## 六、聚合器 MCP(Meta-MCP)
+
+这类 MCP 可以访问数千个其他工具:
+
+| 聚合器 | 特点 | URL |
+|--------|------|-----|
+| **Composio** | 850+工具包,11000+工具,OAuth管理 | https://composio.dev |
+| **PipedreamHQ** | 连接2500+ API | https://github.com/PipedreamHQ/pipedream |
+| **Smithery CLI** | 发现/连接/使用所有MCP | https://smithery.ai |
+| **AgentHotspot** | MCP市场,搜索和集成 | - |

+ 266 - 0
knowhub/docs/knowledge/05_final_report.md

@@ -0,0 +1,266 @@
+# Agent Skills & MCP 生态全景调研报告
+
+> 最后更新:2025-02-22
+> 调研方法:浏览器实地调研 + 多平台交叉验证
+> 来源:Anthropic官方、Smithery.ai、Glama.ai、MCP.so、GitHub、LangChain文档、CrewAI文档、OpenAI文档、行业博客
+
+---
+
+## 执行摘要
+
+当前 AI Agent 工具生态已形成两大主线:
+1. **MCP(Model Context Protocol)**:Anthropic 2024年11月发布的开放协议,已成为 AI 工具集成的事实标准,目前有 17,000+ 服务器
+2. **Agent Skills**:预构建工作流/知识包,以 Smithery 平台的 125,937+ Skills 为代表
+
+两者互补:MCP 解决"能做什么"(工具访问),Skills 解决"怎么做"(工作流知识)。
+
+---
+
+## 一、MCP 生态全景
+
+### 1.1 规模数据
+
+| 平台 | MCP 服务器数量 | 特点 |
+|------|--------------|------|
+| Glama.ai | 17,658+ | 最大目录,含质量评分 |
+| MCP.so | 17,803+ | 含中文生态 |
+| Smithery.ai | 4,333+ | 含使用量统计 |
+| awesome-mcp-servers | 500+ | 精选榜单,81.3k Stars |
+
+### 1.2 MCP 分类体系(30+ 类)
+
+**核心类别**(按重要性排序):
+
+| 类别 | 代表服务器 | 说明 |
+|------|-----------|------|
+| 搜索与信息 | Exa/Brave/Tavily/Context7 | 最高频使用场景 |
+| 开发者工具 | GitHub/Filesystem/Git/Desktop Commander | 开发者必备 |
+| 浏览器自动化 | Playwright/Browserbase/Puppeteer | 网页交互 |
+| 数据库 | PostgreSQL/SQLite/Supabase/MongoDB | 数据访问 |
+| 云平台 | AWS/Cloudflare/Azure/Terraform | 基础设施 |
+| 生产力 | Notion/Slack/Google Drive | 工作流 |
+| 代码执行 | E2B/dagger/pydantic-run-python | 安全沙箱 |
+| 知识记忆 | Memory/mem0/InfraNodus | 持久化记忆 |
+| 聚合器 | Composio/Pipedream/Smithery | 元工具 |
+
+### 1.3 按使用量排行(Smithery 数据)
+
+1. 🥇 **Exa Search** - 5,240,000 次(绝对领先)
+2. **Linkup** - 25,370 次
+3. **Context7** - 17,650 次
+4. **Clay MCP** - 10,840 次
+5. **Notion** - 5,480 次
+6. **GitHub** - 4,950 次
+7. **Browserbase** - 4,530 次
+8. **Brave Search** - 4,330 次
+
+---
+
+## 二、Agent Skills 生态全景
+
+### 2.1 Skills 的本质
+
+Skills 是**预构建的工作流知识包**,与 MCP 的区别:
+
+| 维度 | Agent Skills | MCP |
+|------|-------------|-----|
+| 本质 | 工作流/知识/提示词 | 工具访问协议 |
+| 形式 | Markdown 文档 | 服务器程序 |
+| 功能 | 指导 Agent 如何做 | 让 Agent 能做什么 |
+| 示例 | "如何重构代码"的最佳实践 | 执行 git 命令的能力 |
+
+### 2.2 Smithery Skills 排行(按安装量)
+
+| 排名 | Skill | 提供者 | 安装量 | 核心功能 |
+|------|-------|--------|--------|----------|
+| 1 | cli | smithery-ai | 880 | 发现/连接/使用所有MCP工具 |
+| 2 | frontend-design | anthropics | 675 | 高质量前端界面设计 |
+| 3 | skill-creator | anthropics | 239 | 创建新 Skills 的指南 |
+| 4 | pptx | anthropics | 194 | PowerPoint 全功能处理 |
+| 5 | pdf | anthropics | 193 | PDF 全功能处理 |
+| 6 | mcp-integration | anthropics | 145 | MCP 集成指南 |
+| 7 | skill-development | anthropics | 137 | Skill 开发最佳实践 |
+| 8 | prompt-engineering-patterns | wshobson | 134 | 高级提示工程技术 |
+| 9 | xlsx | anthropics | 126 | Excel/CSV 处理 |
+| 10 | webapp-testing | anthropics | 112 | Playwright Web 测试 |
+
+### 2.3 各框架工具生态对比
+
+| 框架 | 工具数量 | 特点 | 适用场景 |
+|------|---------|------|----------|
+| **Smithery Skills** | 125,937+ | 最大,含 Anthropic 官方 | Claude Code 用户 |
+| **LangChain Tools** | 150+ | Python 生态,1000+ 集成 | Python 开发者 |
+| **Composio** | 11,000+ | 企业级,OAuth 管理 | 企业 Agent |
+| **CrewAI Tools** | 29 内置 | 简洁,支持 MCP | 多 Agent 协作 |
+| **OpenAI Agents SDK** | 10 内置 | 原生 MCP 支持 | OpenAI 用户 |
+| **Cursor Rules** | 38k Stars | IDE 定制 | Cursor 用户 |
+
+---
+
+## 三、发现/评估/获取渠道全景
+
+### 3.1 发现渠道(按可信度排序)
+
+#### 🥇 第一梯队:官方渠道
+| 渠道 | URL | 特点 |
+|------|-----|------|
+| Anthropic MCP 官方文档 | https://modelcontextprotocol.io/ | 协议权威来源 |
+| modelcontextprotocol/servers | https://github.com/modelcontextprotocol/servers | 官方参考实现 |
+| Smithery.ai | https://smithery.ai | MCP+Skills 综合平台 |
+| Anthropic Claude Code 文档 | https://docs.anthropic.com/ | Skills 官方文档 |
+
+#### 🥈 第二梯队:权威社区榜单
+| 渠道 | URL | Stars | 特点 |
+|------|-----|-------|------|
+| awesome-mcp-servers (punkpeye) | https://github.com/punkpeye/awesome-mcp-servers | 81.3k ⭐ | 最全 MCP 榜单 |
+| awesome-cursorrules | https://github.com/PatrickJS/awesome-cursorrules | 38k ⭐ | Cursor Rules 榜单 |
+| awesome-ai-agents (e2b) | https://github.com/e2b-dev/awesome-ai-agents | 25.9k ⭐ | AI Agent 框架榜单 |
+| awesome-mcp-servers (wong2) | https://github.com/wong2/awesome-mcp-servers | 3.6k ⭐ | 精选 MCP 榜单 |
+
+#### 🥉 第三梯队:专门目录平台
+| 平台 | URL | 数量 | 特色功能 |
+|------|-----|------|----------|
+| Glama.ai | https://glama.ai/mcp/servers | 17,658+ | 质量评分+MCP Inspector |
+| MCP.so | https://mcp.so | 17,803+ | 中文生态友好 |
+| MCPServers.org | https://mcpservers.org | - | 精选+提交入口 |
+| MCP-Awesome.com | https://mcp-awesome.com | 1,200+ | 含教程 |
+
+### 3.2 评估方法
+
+#### 量化指标
+| 指标 | 获取渠道 | 权重 |
+|------|----------|------|
+| Smithery 安装量 | smithery.ai | ⭐⭐⭐⭐⭐ |
+| Glama 下载量 | glama.ai | ⭐⭐⭐⭐ |
+| GitHub Stars | github.com | ⭐⭐⭐⭐ |
+| Glama 质量评分 | glama.ai | ⭐⭐⭐ |
+| 最近活跃度 | glama.ai (Recent Usage) | ⭐⭐⭐ |
+| 官方标识 | 各平台 | ⭐⭐⭐⭐⭐ |
+
+#### 质量信号
+- ✅ **官方出品**(Anthropic/Microsoft/AWS/Cloudflare 等)
+- ✅ **Verified 标识**(Smithery 验证)
+- ✅ **高 Stars + 近期活跃**(社区认可 + 维护中)
+- ✅ **文档完整**(README 详细,有示例)
+- ⚠️ **安全评分**(Glama 提供)
+
+#### 测试工具
+- **Glama MCP Inspector**:https://glama.ai/mcp/inspector(在线测试)
+- **Claude Desktop**:本地集成测试
+- **Cursor/Windsurf**:IDE 中测试
+
+### 3.3 获取/安装方式
+
+#### MCP 安装
+```bash
+# 方式1:Smithery CLI(推荐,统一管理)
+npx @smithery/cli@latest setup
+npx @smithery/cli@latest add <server-name>
+
+# 方式2:npm/npx(TypeScript MCP)
+npx @modelcontextprotocol/server-github
+
+# 方式3:pip/uvx(Python MCP)
+uvx mcp-server-fetch
+
+# 方式4:Claude Desktop 配置文件
+# 编辑 ~/Library/Application Support/Claude/claude_desktop_config.json
+```
+
+#### Skills 安装
+```bash
+# Smithery CLI
+npx @smithery/cli@latest add skill anthropics/frontend-design
+
+# Claude Code 直接使用(通过 .claude/ 目录)
+```
+
+---
+
+## 四、行业大牛观点
+
+### 4.1 Simon Willison(Django 联合创始人,AI 工具评测权威)
+- **博客**:https://simonwillison.net/
+- **MCP 评测**(2024-11-25):https://simonwillison.net/2024/Nov/25/model-context-protocol/
+- **核心观点**:
+  - MCP 是 LLM 与外部应用集成的**通用接口标准化**,意义重大
+  - 早期版本配置繁琐(需手动编辑 JSON),但方向正确
+  - 安全性需要关注(本地进程有文件系统访问权限)
+  - 多厂商采用(Zed/Replit/Codeium)是重要信号
+
+### 4.2 Lilian Weng(OpenAI 前研究员,Agent 理论权威)
+- **博客**:https://lilianweng.github.io/
+- **Agent 工具使用综述**:https://lilianweng.github.io/posts/2023-06-23-agent/
+- **核心观点**:
+  - Agent 工具分 5 类:信息获取/计算/领域专用/通信委托/创意媒体
+  - 工具使用的两个关键能力:**知道何时用**和**知道怎么用**
+  - 参数提取可靠性是最大挑战
+  - 人类评估 >> LLM 自评估(专业领域)
+
+### 4.3 Anthropic 官方(MCP 发布公告)
+- **URL**:https://www.anthropic.com/news/model-context-protocol
+- **核心观点**:
+  - MCP 解决 AI 被"困在信息孤岛"的根本问题
+  - 从碎片化定制集成 → 统一标准协议
+  - 已有 Block/Apollo 等企业采用
+  - 开发者可用 Claude 3.5 Sonnet 辅助构建 MCP 服务器
+
+---
+
+## 五、支持 MCP 的主流客户端
+
+| 客户端 | 类型 | MCP 支持 | 特点 |
+|--------|------|----------|------|
+| **Claude Desktop** | 桌面应用 | ✅ 原生 | Anthropic 官方 |
+| **Claude Code** | CLI | ✅ 原生 | 开发者首选 |
+| **Cursor** | IDE | ✅ | 最流行 AI IDE |
+| **Windsurf** | IDE | ✅ | Codeium 出品 |
+| **Cline** | VS Code 插件 | ✅ | 开源,功能强大 |
+| **Continue** | VS Code 插件 | ✅ | 开源 |
+| **Cherry Studio** | 桌面应用 | ✅ | 多模型支持 |
+| **5ire** | 桌面应用 | ✅ | - |
+| **Zed** | IDE | ✅ | 高性能编辑器 |
+| **Replit** | 在线 IDE | ✅ | 云端开发 |
+
+---
+
+## 六、关键洞察与建议
+
+### 6.1 MCP 已成事实标准
+- 17,000+ 服务器,主流 IDE 全面支持
+- 大厂官方出品(AWS/Microsoft/Cloudflare/HashiCorp)
+- OpenAI Agents SDK 也原生支持 MCP(`HostedMCPTool`)
+
+### 6.2 最值得关注的 MCP(综合评分)
+1. **Exa Search** - 使用量最高(5.24M),语义搜索最强
+2. **GitHub** - 开发者必备,官方出品
+3. **Playwright** - 浏览器自动化最权威(Microsoft官方)
+4. **Context7** - 消除 AI 文档幻觉的利器
+5. **Filesystem** - Claude Code 基础工具
+6. **Supabase** - 全栈开发神器(20+工具)
+7. **Desktop Commander** - 本地系统控制
+
+### 6.3 最值得关注的 Skills
+1. **anthropics/frontend-design** - 前端设计质量飞跃
+2. **anthropics/pdf/pptx/xlsx/docx** - 文件处理全套
+3. **wshobson/prompt-engineering-patterns** - 提示工程进阶
+4. **anthropics/webapp-testing** - Playwright 测试
+5. **anthropics/mcp-builder** - 构建自己的 MCP
+
+### 6.4 最佳发现渠道组合
+- **日常发现**:Smithery.ai(使用量排序)+ awesome-mcp-servers(社区精选)
+- **深度评估**:Glama.ai(质量评分 + MCP Inspector 测试)
+- **快速安装**:Smithery CLI(`npx @smithery/cli@latest setup`)
+- **跟踪动态**:Simon Willison 博客 + Anthropic 官方博客
+
+---
+
+## 七、文件索引
+
+| 文件 | 内容 |
+|------|------|
+| `01_mcp_ecosystem.md` | MCP 生态详细调研(官方资源、分类、平台) |
+| `02_agent_skills_ecosystem.md` | Agent Skills 生态(Smithery排行、各框架工具) |
+| `03_discovery_channels.md` | 发现/评估/获取渠道详细指南 |
+| `04_top_mcp_curated.md` | 精选优质 MCP 服务器(按场景分类) |
+| `05_final_report.md` | 本文件:综合报告 |

+ 3 - 0
knowhub/requirements.txt

@@ -0,0 +1,3 @@
+fastapi
+uvicorn[standard]
+pydantic

+ 359 - 0
knowhub/server.py

@@ -0,0 +1,359 @@
+"""
+KnowHub Server
+
+Agent 工具使用经验的共享平台。
+FastAPI + SQLite,单文件部署。
+"""
+
+import os
+import sqlite3
+from contextlib import asynccontextmanager
+from datetime import datetime, timezone
+from typing import Optional
+from pathlib import Path
+
+from fastapi import FastAPI, HTTPException, Query
+from pydantic import BaseModel, Field
+
+BRAND_NAME    = os.getenv("BRAND_NAME", "KnowHub")
+BRAND_API_ENV = os.getenv("BRAND_API_ENV", "KNOWHUB_API")
+BRAND_DB      = os.getenv("BRAND_DB", "knowhub.db")
+
+DB_PATH = Path(__file__).parent / BRAND_DB
+
+# --- 数据库 ---
+
+def get_db() -> sqlite3.Connection:
+    conn = sqlite3.connect(str(DB_PATH))
+    conn.row_factory = sqlite3.Row
+    conn.execute("PRAGMA journal_mode=WAL")
+    return conn
+
+
+def init_db():
+    conn = get_db()
+    conn.execute("""
+        CREATE TABLE IF NOT EXISTS experiences (
+            id            INTEGER PRIMARY KEY AUTOINCREMENT,
+            name          TEXT NOT NULL,
+            url           TEXT DEFAULT '',
+            category      TEXT DEFAULT '',
+            task          TEXT NOT NULL,
+            score         INTEGER CHECK(score BETWEEN 1 AND 5),
+            outcome       TEXT DEFAULT '',
+            tips          TEXT DEFAULT '',
+            content_id    TEXT DEFAULT '',
+            submitted_by  TEXT DEFAULT '',
+            created_at    TEXT NOT NULL
+        )
+    """)
+    conn.execute("CREATE INDEX IF NOT EXISTS idx_name ON experiences(name)")
+
+    conn.execute("""
+        CREATE TABLE IF NOT EXISTS contents (
+            id            TEXT PRIMARY KEY,
+            title         TEXT DEFAULT '',
+            body          TEXT NOT NULL,
+            sort_order    INTEGER DEFAULT 0,
+            submitted_by  TEXT DEFAULT '',
+            created_at    TEXT NOT NULL
+        )
+    """)
+    conn.commit()
+    conn.close()
+
+
+# --- Models ---
+
+class ExperienceIn(BaseModel):
+    name: str
+    url: str = ""
+    category: str = ""
+    task: str
+    score: int = Field(ge=1, le=5)
+    outcome: str = ""
+    tips: str = ""
+    content_id: str = ""
+    submitted_by: str = ""
+
+
+class ExperienceOut(BaseModel):
+    task: str
+    score: int
+    outcome: str
+    tips: str
+    content_id: str
+    submitted_by: str
+    created_at: str
+
+
+class ResourceResult(BaseModel):
+    name: str
+    url: str
+    relevant_experiences: list[ExperienceOut]
+    avg_score: float
+    experience_count: int
+
+
+class SearchResponse(BaseModel):
+    results: list[ResourceResult]
+
+
+class ResourceDetailResponse(BaseModel):
+    name: str
+    url: str
+    category: str
+    avg_score: float
+    experience_count: int
+    experiences: list[ExperienceOut]
+
+
+class ContentIn(BaseModel):
+    id: str
+    title: str = ""
+    body: str
+    sort_order: int = 0
+    submitted_by: str = ""
+
+
+class ContentNode(BaseModel):
+    id: str
+    title: str
+
+
+class ContentOut(BaseModel):
+    id: str
+    title: str
+    body: str
+    toc: Optional[ContentNode] = None
+    children: list[ContentNode]
+    prev: Optional[ContentNode] = None
+    next: Optional[ContentNode] = None
+
+
+# --- App ---
+
+@asynccontextmanager
+async def lifespan(app: FastAPI):
+    init_db()
+    yield
+
+
+app = FastAPI(title=BRAND_NAME, lifespan=lifespan)
+
+
+def _search_rows(conn: sqlite3.Connection, q: str, category: Optional[str]) -> list[sqlite3.Row]:
+    """LIKE 搜索,拆词后 AND 连接,匹配 task + tips + outcome + name"""
+    terms = q.split()
+    if not terms:
+        return []
+
+    conditions = []
+    params: list[str] = []
+    for term in terms:
+        like = f"%{term}%"
+        conditions.append(
+            "(task LIKE ? OR tips LIKE ? OR outcome LIKE ? OR name LIKE ?)"
+        )
+        params.extend([like, like, like, like])
+
+    if category:
+        conditions.append("category = ?")
+        params.append(category)
+
+    sql = (
+        "SELECT name, url, category, task, score, outcome, tips, content_id, "
+        "submitted_by, created_at FROM experiences WHERE "
+        + " AND ".join(conditions)
+        + " ORDER BY created_at DESC"
+    )
+    return conn.execute(sql, params).fetchall()
+
+
+def _group_by_resource(rows: list[sqlite3.Row], limit: int) -> list[ResourceResult]:
+    """按 name 分组并聚合"""
+    groups: dict[str, list[sqlite3.Row]] = {}
+    for row in rows:
+        name = row["name"]
+        if name not in groups:
+            groups[name] = []
+        groups[name].append(row)
+
+    results = []
+    for resource_name, resource_rows in groups.items():
+        scores = [r["score"] for r in resource_rows]
+        avg = sum(scores) / len(scores)
+        results.append(ResourceResult(
+            name=resource_name,
+            url=resource_rows[0]["url"],
+            relevant_experiences=[
+                ExperienceOut(
+                    task=r["task"],
+                    score=r["score"],
+                    outcome=r["outcome"],
+                    tips=r["tips"],
+                    content_id=r["content_id"],
+                    submitted_by=r["submitted_by"],
+                    created_at=r["created_at"],
+                )
+                for r in resource_rows
+            ],
+            avg_score=round(avg, 1),
+            experience_count=len(resource_rows),
+        ))
+
+    results.sort(key=lambda r: r.avg_score * r.experience_count, reverse=True)
+    return results[:limit]
+
+
+@app.get("/api/search", response_model=SearchResponse)
+def search_experiences(
+    q: str = Query(..., min_length=1),
+    category: Optional[str] = None,
+    limit: int = Query(default=10, ge=1, le=50),
+):
+    conn = get_db()
+    try:
+        rows = _search_rows(conn, q, category)
+        return SearchResponse(results=_group_by_resource(rows, limit))
+    finally:
+        conn.close()
+
+
+@app.post("/api/experience", status_code=201)
+def submit_experience(exp: ExperienceIn):
+    conn = get_db()
+    try:
+        now = datetime.now(timezone.utc).isoformat()
+        conn.execute(
+            "INSERT INTO experiences"
+            "(name, url, category, task, score, outcome, tips, content_id, submitted_by, created_at)"
+            " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+            (exp.name, exp.url, exp.category, exp.task,
+             exp.score, exp.outcome, exp.tips, exp.content_id, exp.submitted_by, now),
+        )
+        conn.commit()
+        return {"status": "ok"}
+    finally:
+        conn.close()
+
+
+@app.get("/api/resource/{name}", response_model=ResourceDetailResponse)
+def get_resource_experiences(name: str):
+    conn = get_db()
+    try:
+        rows = conn.execute(
+            "SELECT name, url, category, task, score, outcome, tips, content_id, "
+            "submitted_by, created_at FROM experiences "
+            "WHERE name = ? ORDER BY created_at DESC",
+            (name,),
+        ).fetchall()
+        if not rows:
+            raise HTTPException(status_code=404, detail=f"No experiences found for resource: {name}")
+
+        scores = [r["score"] for r in rows]
+        avg = sum(scores) / len(scores)
+        return ResourceDetailResponse(
+            name=name,
+            url=rows[0]["url"],
+            category=rows[0]["category"],
+            avg_score=round(avg, 1),
+            experience_count=len(rows),
+            experiences=[
+                ExperienceOut(
+                    task=r["task"],
+                    score=r["score"],
+                    outcome=r["outcome"],
+                    tips=r["tips"],
+                    content_id=r["content_id"],
+                    submitted_by=r["submitted_by"],
+                    created_at=r["created_at"],
+                )
+                for r in rows
+            ],
+        )
+    finally:
+        conn.close()
+
+
+@app.post("/api/content", status_code=201)
+def submit_content(content: ContentIn):
+    conn = get_db()
+    try:
+        now = datetime.now(timezone.utc).isoformat()
+        conn.execute(
+            "INSERT OR REPLACE INTO contents"
+            "(id, title, body, sort_order, submitted_by, created_at)"
+            " VALUES (?, ?, ?, ?, ?, ?)",
+            (content.id, content.title, content.body, content.sort_order, content.submitted_by, now),
+        )
+        conn.commit()
+        return {"status": "ok"}
+    finally:
+        conn.close()
+
+
+@app.get("/api/content/{content_id:path}", response_model=ContentOut)
+def get_content(content_id: str):
+    conn = get_db()
+    try:
+        row = conn.execute(
+            "SELECT id, title, body, sort_order FROM contents WHERE id = ?",
+            (content_id,),
+        ).fetchone()
+        if not row:
+            raise HTTPException(status_code=404, detail=f"Content not found: {content_id}")
+
+        # 计算导航上下文
+        root_id = content_id.split("/")[0] if "/" in content_id else content_id
+
+        # TOC (根节点)
+        toc = None
+        if "/" in content_id:
+            toc_row = conn.execute(
+                "SELECT id, title FROM contents WHERE id = ?",
+                (root_id,),
+            ).fetchone()
+            if toc_row:
+                toc = ContentNode(id=toc_row["id"], title=toc_row["title"])
+
+        # Children (子节点)
+        children = []
+        children_rows = conn.execute(
+            "SELECT id, title FROM contents WHERE id LIKE ? AND id != ? ORDER BY sort_order",
+            (f"{content_id}/%", content_id),
+        ).fetchall()
+        children = [ContentNode(id=r["id"], title=r["title"]) for r in children_rows]
+
+        # Prev/Next (同级节点)
+        prev_node = None
+        next_node = None
+        if "/" in content_id:
+            siblings = conn.execute(
+                "SELECT id, title, sort_order FROM contents WHERE id LIKE ? AND id NOT LIKE ? ORDER BY sort_order",
+                (f"{root_id}/%", f"{root_id}/%/%"),
+            ).fetchall()
+            for i, sib in enumerate(siblings):
+                if sib["id"] == content_id:
+                    if i > 0:
+                        prev_node = ContentNode(id=siblings[i-1]["id"], title=siblings[i-1]["title"])
+                    if i < len(siblings) - 1:
+                        next_node = ContentNode(id=siblings[i+1]["id"], title=siblings[i+1]["title"])
+                    break
+
+        return ContentOut(
+            id=row["id"],
+            title=row["title"],
+            body=row["body"],
+            toc=toc,
+            children=children,
+            prev=prev_node,
+            next=next_node,
+        )
+    finally:
+        conn.close()
+
+
+if __name__ == "__main__":
+    import uvicorn
+    uvicorn.run(app, host="0.0.0.0", port=8000)

+ 163 - 0
knowhub/skill/knowhub.md

@@ -0,0 +1,163 @@
+---
+name: knowhub
+description: 遇到超出现有能力的问题或复杂任务时,查询工具和资源的使用经验,回报自己的使用心得
+category: tool-discovery
+scope: agent:*
+---
+
+## When to use
+
+**查询经验**:
+- 需要外部工具/库但不确定选哪个
+- 遇到复杂任务,想知道别人用了什么工具、怎么做的
+- 多次尝试失败,可能有人踩过同样的坑
+- 可能需要外部资源(论文、文档、博客等)
+
+**提交经验**(重要!):
+- ✅ **使用资源后立即提交** — 完成任务、有了结果就提交,不要等到上下文太长才想起来
+- ✅ **获得用户反馈后补充** — 如果用户指出问题或给出建议,视情况更新或补充经验
+- ✅ **搜索过程中的发现** — 在哪个平台找到的、用了什么关键词、哪些策略有效,都可以提交
+
+## 工作流
+
+### 1. 查经验
+
+```bash
+curl -s "http://localhost:8000/api/search?q=关键词"
+```
+
+**有可用结果**:直接参考。结果包含资源名、URL、评分和具体使用建议。
+
+**需要深入**:结果中如果有 `content_id`,可以获取详细内容:
+
+```bash
+curl -s "http://localhost:8000/api/content/{content_id}"
+```
+
+返回内容正文 + 导航(children / prev / next),可以继续浏览相关章节。
+
+**无可用结果**:进入步骤 2 自行寻找。
+
+### 2. 自行寻找(仅在无经验时)
+
+根据已知信息选择入口:
+
+- **已知工具名**:直接去对应平台(PyPI / npmjs / GitHub)查文档和社区反馈,搜 `<工具名> review`、`<工具名> vs`、`site:reddit.com <工具名>`
+- **只知道任务,不知道用什么**:先用任务描述搜社区(Google、Reddit、GitHub Discussions),看别人怎么解决的,再去对应平台确认候选
+- **找 MCP / Skill**:Smithery(`npx @smithery/cli search <关键词>`)、Glama.ai、awesome-mcp-servers
+- **找库/包**:PyPI、npmjs.com
+- **找一站式集成**:Composio(850+ 工具)、LangChain Tools
+
+评估时关注社区活跃度、工程质量、可持续性、License 兼容性。
+简单逻辑自己写比引入依赖更快时,直接写。
+
+### 3. 回报经验
+
+**⚠️ 重要:完成任务后立即提交,不要拖到上下文太长才想起来!**
+
+使用资源后,提交真实体验:
+
+```bash
+curl -s -X POST "http://localhost:8000/api/experience" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "name": "资源名称",
+    "url": "来源URL",
+    "category": "mcp|skill|library|api|paper|blog|book|course",
+    "task": "你在做什么(具体场景)",
+    "score": 4,
+    "outcome": "结果如何,优缺点",
+    "tips": "最关键的一条建议",
+    "submitted_by": "'$(git config user.email)'"
+  }'
+```
+
+**提交时机**:
+- ✅ 使用资源完成任务后,有了结果就提交
+- ✅ 如果后续获得用户反馈(指出问题、给出建议),视情况再提交一条补充经验
+
+**两类经验的区分**:
+
+1. **对资源本身的使用经验** — 提交为该资源的 experience
+   - 例如:使用 pymupdf 提取 PDF 表格的经验 → `name: "pymupdf"`
+
+2. **对搜索平台/策略的经验** — 提交为平台的 experience 或 knowhub 的 experience
+   - 对平台本身的评价 → 提交为该平台的经验(`name: "smithery"` / `"pypi"` / `"github-search"`)
+   - 关于找工具/找资源的策略、方法论 → 提交为 knowhub 的经验(`name: "knowhub"`)
+
+**搜索策略经验示例**:
+
+```bash
+# 对搜索平台的评价
+curl -s -X POST "http://localhost:8000/api/experience" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "name": "smithery",
+    "url": "https://smithery.ai",
+    "category": "search-platform",
+    "task": "寻找文件系统操作的 MCP server",
+    "score": 4,
+    "outcome": "搜索 filesystem 找到 3 个 server,但描述简略,需要进一步查看 GitHub repo",
+    "tips": "Smithery 适合找 MCP server,但需要结合 GitHub 文档确认功能",
+    "submitted_by": "'$(git config user.email)'"
+  }'
+
+# 关于搜索策略的经验
+curl -s -X POST "http://localhost:8000/api/experience" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "name": "knowhub",
+    "url": "http://localhost:8000",
+    "category": "search-platform",
+    "task": "寻找 PDF 表格提取的 Python 库",
+    "score": 5,
+    "outcome": "搜索 pdf extract table python 直接找到 pymupdf 的高分经验,节省了大量调研时间",
+    "tips": "关键词要包含具体操作动词(extract/parse)+ 目标对象(table)+ 技术栈(python)",
+    "submitted_by": "'$(git config user.email)'"
+  }'
+```
+
+**字段填写要求**:
+- **name** — 资源的通用名称。工具填包名(`pymupdf`),论文填标题(`Attention Is All You Need`),博客填文章标题
+- **url** — 资源的规范来源地址(GitHub repo / arXiv / 官方文档)
+- **category** — 资源类型,建议用:`mcp | skill | library | api | paper | blog | book | course`
+- **task** — 描述具体场景,不要写泛泛的"处理 PDF"
+- **tips** — 要具体可操作:"双栏论文用 page.get_text(sort=True)",不要写"挺好用的"
+- **submitted_by** — 可选,建议用 `git config user.email`
+
+**多资源协作场景**:
+如果任务用了多个工具/资源(如 pymupdf + langchain + openai),为每个关键资源单独提交一条 experience,在 task/tips/outcome 中提及配合使用的其他资源。这样每个资源都能被搜索到,同时保留协作信息。
+
+### 4. 提交内容(可选)
+
+如果你获取了资源的详细信息(目录、章节内容等),可以提交供后续 Agent 使用:
+
+```bash
+# 提交资源概要/目录
+curl -s -X POST "http://localhost:8000/api/content" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "id": "resource-name",
+    "title": "资源标题",
+    "body": "Markdown 格式的概要或目录内容",
+    "submitted_by": "'$(git config user.email)'"
+  }'
+
+# 提交具体章节
+curl -s -X POST "http://localhost:8000/api/content" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "id": "resource-name/section-key",
+    "title": "章节标题",
+    "body": "Markdown 格式的章节内容",
+    "sort_order": 1,
+    "submitted_by": "'$(git config user.email)'"
+  }'
+```
+
+- body 使用 Markdown 格式,图片用 URL 引用
+- 根节点 ID 不含 `/`(如 `pymupdf`),子节点 ID 含 `/`(如 `pymupdf/find-tables`)
+- 只提交对后续 Agent 有价值的内容,不要灌入全文
+
+## 重要提醒
+务必要向平台提交可靠的经验!不允许因为其他经验机制忽略向knowhub提交经验。

+ 1 - 0
requirements.txt

@@ -12,6 +12,7 @@ langchain_core>=0.3.0
 fastapi>=0.115.0
 uvicorn[standard]>=0.32.0
 websockets>=13.0
+pydantic
 
 # 飞书
 lark-oapi==1.5.3