Skip to main content
Glama
xuenyuxey

enterprise-knowledge-mcp

by xuenyuxey
README.md
# Enterprise Knowledge MCP

基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 的企业知识管理服务。

为大语言模型提供三个核心能力:

| 工具 | 功能 |
|------|------|
| `search_knowledge` | 语义搜索企业知识库 |
| `get_document` | 根据文档 ID 获取完整文档 |
| `search_cases` | 搜索企业项目案例 |

## 项目结构

```
enterprise-knowledge-mcp/
├── src/
│   └── enterprise_knowledge_mcp/
│       ├── __init__.py          # 包入口
│       ├── server.py            # MCP 工具注册(协议层)
│       └── retriever.py         # 检索逻辑(业务层)
├── tests/
│   ├── test_server.py           # 单元测试
│   └── test_e2e.py              # MCP Client 端到端测试
├── scripts/
│   ├── seed_data.py             # 导入示例数据到 ChromaDB
│   └── download_model.py        # 下载嵌入模型(离线环境用)
├── pyproject.toml
├── server.json                  # MCP 服务描述清单
├── README.md
└── LICENSE
```

## 架构设计

```
┌─────────────────────────────────────────┐
│  server.py  (协议层)                     │
│  - 注册 MCP Tool                        │
│  - 参数校验 & 输出格式化                  │
└──────────────┬──────────────────────────┘
               │ 调用
┌──────────────▼──────────────────────────┐
│  retriever.py  (业务层)                  │
│  - KnowledgeRetriever  知识库检索        │
│  - DocumentRetriever   文档检索          │
│  - CaseRetriever       案例检索          │
└──────────────┬──────────────────────────┘
               │ 替换实现
┌──────────────▼──────────────────────────┐
│  数据层(可插拔)                         │
│  - MockRetriever     开发/测试用          │
│  - ChromaRetriever   ChromaDB 向量检索   │
│  - 自定义 Retriever   ES / 数据库 / ...   │
└─────────────────────────────────────────┘
```

检索器采用**基类 + 实现**的可插拔设计。`server.py` 中只更换实例化对象即可切换后端,工具注册代码无需改动。

## 快速开始

### 安装

```bash
# 克隆仓库
git clone https://github.com/your-username/enterprise-knowledge-mcp.git
cd enterprise-knowledge-mcp

# 创建虚拟环境
python -m venv .venv
.venv\Scripts\activate        # Windows
# source .venv/bin/activate   # Linux/macOS

# 安装(开发模式)
pip install -e ".[dev]"
```

### 初始化 ChromaDB 数据

```bash
# 导入示例企业知识数据(知识库 5 条、文档 3 篇、案例 4 个)
python scripts/seed_data.py
```

### 运行服务

```bash
# Mock 模式(无需 ChromaDB 数据)
python -m enterprise_knowledge_mcp.server

# ChromaDB 模式(需先执行 seed_data.py)
RETRIEVER_BACKEND=chroma python -m enterprise_knowledge_mcp.server
```

### 运行测试

```bash
pytest tests/ -v
```

## 接入 MCP 客户端

### Claude Desktop

在 `claude_desktop_config.json` 中添加:

```json
{
  "mcpServers": {
    "enterprise-knowledge": {
      "command": "python",
      "args": ["-m", "enterprise_knowledge_mcp.server"],
      "cwd": "C:/path/to/enterprise-knowledge-mcp"
    }
  }
}
```

### Python SDK

```python
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

server_params = StdioServerParameters(
    command="python",
    args=["-m", "enterprise_knowledge_mcp.server"],
)

async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        await session.initialize()
        result = await session.call_tool(
            "search_knowledge", {"query": "人工智能"}
        )
        print(result.content[0].text)
```

## 自定义检索器

继承基类并实现 `retrieve` / `get_document` / `search_cases` 方法:

```python
from enterprise_knowledge_mcp.retriever import (
    KnowledgeRetriever,
    SearchResult,
)

class MyRetriever(KnowledgeRetriever):
    def retrieve(self, query: str, top_k: int = 5) -> list[SearchResult]:
        # 你的检索逻辑
        return [SearchResult(text="...", source="...", score=0.9)]
```

然后在 `server.py` 中替换:

```python
from .retriever import MyRetriever

knowledge_retriever = MyRetriever()
```

## 许可证

[MIT](LICENSE)