mcpField
W
wso2-docs-mcp-server

wso2-docs-mcp-server

本地服务
github.com/iamvirul开发工具42 周前更新

关于 wso2-docs-mcp-server

wso2-docs-mcp-server 为 AI 助手和开发者提供 WSO2 产品文档语义搜索,使用 RAG 和 pgvector 建立索引,并通过 GitHub Markdown 导入或网页抓取补充文档。

主要功能

  1. 01跨支持产品进行语义搜索
  2. 02在指定产品内搜索指南
  3. 03返回概念搜索的热门结果
  4. 04从 GitHub 仓库导入 Markdown
  5. 05以网页抓取作为导入备用方式
  6. 06支持本地或云端嵌入提供方

适用场景

  1. 01查找 WSO2 API Manager 部署指南
  2. 02搜索 Ballerina 或 Choreo 文档
  3. 03检索多个 WSO2 产品的相关说明

MCP 相关

提供四种 MCP 工具,用于语义文档搜索、产品内指南查询、概念检索和支持产品列表查询。AI 客户端通过 stdio 按需启动服务。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"iamvirul-wso2-docs": {
"command": "npx",
"args": [
"-y",
"wso2-docs-mcp-server"
],
"env": {
"DATABASE_URL": "<DATABASE_URL>",
"EMBEDDING_PROVIDER": "<EMBEDDING_PROVIDER>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"GEMINI_API_KEY": "<GEMINI_API_KEY>",
"VOYAGE_API_KEY": "<VOYAGE_API_KEY>"
}
}
}
}
启动命令npx -y wso2-docs-mcp-server
需要配置的环境变量
DATABASE_URLPostgreSQL connection string for pgvector (e.g. postgresql://user:pass@localhost:5432/wso2docs)
EMBEDDING_PROVIDEREmbedding backend to use: ollama (default, local), openai, gemini, or voyage
OPENAI_API_KEY密钥Required only when EMBEDDING_PROVIDER=openai
GEMINI_API_KEY密钥Required only when EMBEDDING_PROVIDER=gemini
VOYAGE_API_KEY密钥Required only when EMBEDDING_PROVIDER=voyage

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmwso2-docs-mcp-server1.3.13

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

WSO2 文档 MCP 服务

npm version License

"这是一个非官方的社区项目,与 WSO2 无关联,也未获得 WSO2 认可。"

一款可用于生产环境的 Model Context Protocol(MCP) 服务,可通过检索增强生成(RAG),为 AI 助手(Claude Desktop、Claude Code、Cursor、VS Code)提供 WSO2 文档的语义搜索功能。

在底层,它采用高速双通道数据摄取引擎:

  • **原生 GitHub:**通过 Git Trees API,直接从 WSO2 的公开 GitHub 仓库获取原始 Markdown(避免网页抓取带来的噪声和速率限制)
  • **网页爬取备用方案:**适用于没有专用 GitHub 文档仓库的产品(例如 WSO2 Library)

架构

系统架构

文档来源

产品IDURL
API Managerapimhttps://apim.docs.wso2.com
Micro Integratormihttps://mi.docs.wso2.com/en/4.4.0
Ballerina Integratorbihttps://bi.docs.wso2.com
Choreochoreohttps://wso2.com/choreo/docs
Identity Serverishttps://is.docs.wso2.com/en/latest
Ballerinaballerinahttps://ballerina.io/learn
WSO2 Librarylibraryhttps://wso2.com/library

前提条件

  • Node.js ≥ 20
  • Docker(用于 pgvector)
  • 嵌入模型——默认无需 API 密钥:
    • Ollama(推荐)——在本地运行,首次运行时自动下载模型
    • 如果 Ollama 未运行,服务会自动回退到 HuggingFace ONNX(进程内运行,也会自动下载)
    • 也支持云服务提供商:OpenAI、Google Gemini、Voyage AI

快速开始

选择适合你使用场景的配置方式:


从 npm 安装

全局安装此软件包,即可在系统范围内使用 wso2-docs-mcp-server、wso2-docs-crawl 和 wso2-docs-migrate 命令:

npm install -g wso2-docs-mcp-server

不想全局安装? 以下每个步骤都可以使用 npx wso2-docs-mcp-server、npx wso2-docs-crawl 和 npx wso2-docs-migrate——只需将裸命令替换为对应的 npx 命令即可。

1. 启动 pgvector

下载 docker-compose.yml 并启动数据库:

curl -O https://raw.githubusercontent.com/iamvirul/wso2-docs-mcp-server/main/docker-compose.yml
docker compose up -d
2. 启动 Ollama(可选,但推荐)

安装 Ollama 并拉取默认嵌入模型:

ollama pull nomic-embed-text
ollama serve

没有 Ollama? 跳过此步骤。服务会自动回退到 HuggingFace ONNX——模型会在首次使用时下载,无需额外配置。

3. 运行数据库迁移
DATABASE_URL="postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs" \
  wso2-docs-migrate

每当更改 EMBEDDING_DIMENSIONS(即切换嵌入服务提供商)时,都要再次运行迁移。脚本会自动检测并处理维度变更。

4. 为 WSO2 文档编制索引
# Index all products (first run downloads the embedding model automatically)
DATABASE_URL="postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs" \
  wso2-docs-crawl

# Index a single product (faster, great for testing)
DATABASE_URL="postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs" \
  wso2-docs-crawl --product ballerina --limit 20

# Force re-index even unchanged pages
DATABASE_URL="postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs" \
  wso2-docs-crawl --force

可用的产品 ID:apim、mi、bi、choreo、is、ballerina、library

5. 配置 AI 客户端

MCP 服务由 AI 客户端按需启动——无需后台进程。

Claude Desktop——编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "wso2-docs": {
      "command": "wso2-docs-mcp-server",
      "env": {
        "DATABASE_URL": "postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs",
        "EMBEDDING_PROVIDER": "ollama"
      }
    }
  }
}

Claude Code——在终端中运行一次:

claude mcp add wso2-docs \
  --transport stdio \
  -e DATABASE_URL="postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs" \
  -e EMBEDDING_PROVIDER="ollama" \
  -- wso2-docs-mcp-server

# Verify
claude mcp list

Cursor——在项目根目录中创建 .cursor/mcp.json:

{
  "mcpServers": {
    "wso2-docs": {
      "command": "wso2-docs-mcp-server",
      "env": {
        "DATABASE_URL": "postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs",
        "EMBEDDING_PROVIDER": "ollama"
      }
    }
  }
}

VS Code——创建 .vscode/mcp.json:

{
  "servers": {
    "wso2-docs": {
      "type": "stdio",
      "command": "wso2-docs-mcp-server",
      "env": {
        "DATABASE_URL": "postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs",
        "EMBEDDING_PROVIDER": "ollama"
      }
    }
  }
}

使用 npx 而非全局安装? 将 "command": "wso2-docs-mcp-server" 替换为 "command": "npx",并添加 "args": ["-y", "wso2-docs-mcp-server"]。

使用云嵌入服务提供商? 将密钥添加到 env 中,例如 "EMBEDDING_PROVIDER": "openai", "OPENAI_API_KEY": "sk-..."。


克隆并构建
1. 克隆并安装
git clone https://github.com/iamvirul/wso2-docs-mcp-server.git
cd wso2-docs-mcp-server
npm install
2. 启动 Ollama(可选,但推荐)

安装 Ollama 并启动:

ollama serve

没有 Ollama? 跳过此步骤。服务会检测到 Ollama 未运行,并自动回退到 HuggingFace ONNX 推理;模型会在首次使用时下载,无需额外设置。

3. 配置环境
cp .env.example .env
# Defaults work out of the box with Ollama.
# Only edit if using a cloud provider (OpenAI / Gemini / Voyage).
4. 启动 pgvector
docker compose up -d
# pgAdmin available at http://localhost:5050 ([email protected] / admin)
5. 运行数据库迁移
npm run db:migrate

注意: 每当更改 EMBEDDING_DIMENSIONS(即切换嵌入提供方)时,都要再次运行迁移。脚本会自动检测并处理维度变化。

6. 为文档建立索引
# Index all products
# On first run the embedding model is downloaded automatically (Ollama or HuggingFace)
npm run crawl

# Index a single product (faster, great for testing)
npm run crawl -- --product ballerina --limit 20

# Force re-index even unchanged pages
npm run crawl -- --force
7. 构建并启动 MCP 服务
npm run build
npm start

开发时(无需构建):

npm run dev
8. 配置 AI 客户端

将 /ABSOLUTE/PATH/TO/wso2-docs-mcp-server 替换为实际的克隆路径。

Claude Desktop - 编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "wso2-docs": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/wso2-docs-mcp-server/dist/src/index.js"],
      "env": {
        "DATABASE_URL": "postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs",
        "EMBEDDING_PROVIDER": "ollama"
      }
    }
  }
}

Claude Code:

claude mcp add wso2-docs \
  --transport stdio \
  -e DATABASE_URL="postgresql://wso2mcp:wso2mcp@localhost:5432/wso2docs" \
  -e EMBEDDING_PROVIDER="ollama" \
  -- node "/ABSOLUTE/PATH/TO/wso2-docs-mcp-server/dist/src/index.js"

# Verify
claude mcp list

便捷脚本请参阅 config-examples/claude_code.sh。

Cursor - 创建 .cursor/mcp.json - 请参阅 config-examples/cursor_mcp.json。

VS Code - 创建 .vscode/mcp.json - 请参阅 config-examples/vscode_mcp.json。


MCP 工具

工具描述
search_wso2_docs对所有产品进行语义搜索。可选的 product 和 limit 筛选条件。
get_wso2_guide在特定产品中搜索(apim、mi、bi、choreo、is、ballerina、library)。
explain_wso2_concept在所有产品中广泛搜索概念,并返回排名前 8 的结果。
list_wso2_products返回所有受支持产品的 ID 和基础 URL。
响应示例
[
  {
    "title": "Deploying WSO2 API Manager",
    "snippet": "WSO2 API Manager can be deployed in various topologies…",
    "source_url": "https://apim.docs.wso2.com/en/latest/install-and-setup/...",
    "product": "apim",
    "section": "Deployment Patterns",
    "score": 0.8712
  }
]

本地嵌入

默认的 EMBEDDING_PROVIDER=ollama 完全在你的机器上运行,无需 API 密钥。启动顺序如下:

Is Ollama running?
├── Yes → Is model present?
│         ├── Yes → Ready (instant)
│         └── No  → Pull via Ollama (streamed, runs once)
└── No  → Download ONNX model from HuggingFace Hub (~250 MB, cached after first run)
           and run inference in-process via @huggingface/transformers

默认情况下,这两种方式都使用 nomic-embed-text / Xenova/nomic-embed-text-v1,并生成完全相同的 768 维向量,因此可以在两者之间切换而无需重新建立索引。

硬件加速(HuggingFace ONNX 回退)

Ollama 不可用时,服务会自动检测最佳计算后端:

机器检测方式ONNX 数据类型批次大小吞吐量
Apple Silicon(M1/M2/M3/M4)process.arch === 'arm64'q8 INT832约 9 毫秒/块
NVIDIA GPUnvidia-smi 探测fp3264取决于 GPU
其他所有设备回退q8 INT816约 10 毫秒/块

为什么 Apple Silicon 使用 q8,而不是 CoreML/Metal? CoreML 首次使用时会编译 Metal 着色器(冷启动约需 20 分钟)。对于此服务生成的典型块大小(每页 6–20 块),CPU↔GPU 传输开销会抵消任何推理性能提升。在 ARM NEON SIMD 上使用 INT8 量化推理,速度始终比 fp32 CPU 快约 100 倍,且没有冷启动开销。

基准测试(Apple M 芯片,Xenova/nomic-embed-text-v1):

fp32 CPU (before): ~1,000 ms/chunk   (68 chunks ≈ 68 s of embedding)
q8  ARM NEON:          ~9 ms/chunk   (68 chunks ≈  0.6 s of embedding)  ← ~100× speedup

注意: 对于小规模抓取(≤ 10 页),总耗时主要取决于网络 I/O (从文档站点通过 HTTPS 获取内容),因此端到端性能提升有限。规模扩大后,嵌入速度提升会变得显著——抓取 500 页以上时,嵌入此前会耗费数小时。要获得最佳抓取性能,请运行 Ollama(ollama serve),它可原生并行处理推理,且没有每块开销。


环境变量

核心
变量默认值描述
DATABASE_URL-PostgreSQL 连接字符串(必需)
EMBEDDING_PROVIDERollamaollama | openai | gemini | voyage
EMBEDDING_DIMENSIONS768必须与模型输出维度一致
CRAWL_CONCURRENCY5抓取期间的并发 HTTP 请求数
CHUNK_SIZE800每块的大致 Token 数
CHUNK_OVERLAP100块之间重叠的 Token 数
CACHE_TTL_SECONDS3600内存查询缓存 TTL
TOP_K_RESULTS10默认搜索结果数
Ollama(默认)
变量默认值描述
OLLAMA_BASE_URLhttp://localhost:11434Ollama 服务 URL
OLLAMA_EMBEDDING_MODELnomic-embed-text通过 Ollama 拉取并使用的模型
HUGGINGFACE_EMBEDDING_MODELXenova/nomic-embed-text-v1Ollama 未运行时使用的 ONNX 回退模型
云服务提供商
变量默认值描述
OPENAI_API_KEY-当 EMBEDDING_PROVIDER=openai 时必需
OPENAI_EMBEDDING_MODELtext-embedding-3-smallOpenAI 模型
GEMINI_API_KEY-当 EMBEDDING_PROVIDER=gemini 时必需
GEMINI_EMBEDDING_MODELtext-embedding-004Gemini 模型
VOYAGE_API_KEY-当 EMBEDDING_PROVIDER=voyage 时必需
VOYAGE_EMBEDDING_MODELvoyage-3Voyage 模型
嵌入维度参考
提供商模型维度
Ollama / HuggingFacenomic-embed-text / Xenova/nomic-embed-text-v1768(默认)
Ollama / HuggingFacemxbai-embed-large / Xenova/mxbai-embed-large-v11024
Ollama / HuggingFaceall-minilm / Xenova/all-MiniLM-L6-v2384
OpenAItext-embedding-3-small1536
OpenAItext-embedding-3-large3072
Geminitext-embedding-004768
Voyagevoyage-31024
Voyagevoyage-3-lite512

定时重新索引

# Run a one-off re-index (checks hashes, skips unchanged pages)
npm run reindex

# Or from the project directory using node-cron (runs daily at 2 AM)
DATABASE_URL=... node -e "
  const { ReindexJob } = require('./dist/jobs/reindexDocs');
  const job = new ReindexJob();
  job.initialize().then(() => job.scheduleDaily());
"

项目结构

src/
  config/          env.ts · constants.ts
  vectorstore/     pgvector.ts · schema.sql
  ingestion/       crawler.ts · parser.ts · githubFetcher.ts · markdownParser.ts · chunker.ts · embedder.ts
  server/          mcpServer.ts · toolRegistry.ts
  jobs/            reindexDocs.ts
  index.ts
scripts/
  crawl.ts         CLI ingestion pipeline
  migrate.ts       Dynamic schema migration
config-examples/   claude_desktop.json · claude_code.sh · cursor_mcp.json · vscode_mcp.json
docker-compose.yml
.env.example

开发

# Type-check
npx tsc --noEmit

# Run crawl with tsx (no build needed)
npm run crawl -- --product ballerina --limit 5

# Run server in dev mode
npm run dev

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。