mirror of
https://github.com/fish2018/pansou.git
synced 2025-11-25 03:14:59 +08:00
fix1:修复了并发搜索数为0时的非正错误,设置0时进行自动计算。fix2:修改响应状态码为0,与原项目保持一致。测试通过,MCP服务和原项目正常运行。fix3清理了pakage.json中的错误信息。
This commit is contained in:
@@ -2,19 +2,20 @@
|
||||
|
||||
## 功能介绍
|
||||
|
||||
PanSou MCP 服务是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io) 的工具服务,它将 PanSou 网盘搜索 API 的功能封装为可在支持 MCP 的客户端(如 Claude Desktop)中直接调用的工具。
|
||||
PanSou MCP 服务是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io) 的工具服务,它将 PanSou 网盘搜索 API 的功能封装为可在支持 MCP 的客户端(如 Cherry Studio)中直接调用的工具。
|
||||
|
||||
通过 PanSou MCP 服务,可以直接在 Claude 等 AI 助手中搜索网盘资源,极大地提升了获取网盘资源的便捷性。
|
||||
|
||||
### 核心功能
|
||||
|
||||
1. **搜索网盘资源 (`search_netdisk`)**:
|
||||
- 支持通过关键词搜索网盘资源。
|
||||
- 可指定搜索来源:Telegram 频道、插件或两者结合。
|
||||
- 可过滤结果,仅显示特定类型的网盘链接(如百度网盘、阿里云盘、夸克网盘等)。
|
||||
- 支持强制刷新缓存以获取最新数据。
|
||||
- 支持传递扩展参数给后端插件。
|
||||
- 结果可按详细信息或按网盘类型分组展示。
|
||||
- 支持通过 `keyword` 参数搜索网盘资源。
|
||||
- 可通过 `source_type` 参数指定搜索来源:Telegram 频道、插件或两者结合。
|
||||
- 可通过 `cloud_types` 参数过滤结果,显示特定类型的网盘链接。
|
||||
- 支持通过 `force_refresh` 参数请求后端刷新缓存。
|
||||
- 支持通过 `ext_params` 参数向后端插件传递扩展参数。
|
||||
- 支持通过 `result_type` 参数控制后端返回的结果格式。
|
||||
- 支持通过 `concurrency` 参数指定并发搜索数量。
|
||||
|
||||
2. **检查服务健康状态 (`check_service_health`)**:
|
||||
- 检查所连接的 PanSou 后端服务是否正常运行。
|
||||
@@ -23,15 +24,17 @@ PanSou MCP 服务是一个基于 [Model Context Protocol (MCP)](https://modelcon
|
||||
3. **启动后端服务 (`start_backend`)**:
|
||||
- 自动启动本地的 PanSou Go 后端服务(如果尚未运行)。
|
||||
- 等待服务完全启动并可用后才开始处理其他请求。
|
||||
- 支持参数:`force_restart`(可选,布尔值,是否强制重启后端服务,默认为false)。
|
||||
|
||||
4. **获取静态资源信息 (`pansou://` URI scheme)**:
|
||||
- 提供可用插件列表、可用频道列表和支持的网盘类型列表等静态信息资源。
|
||||
- 支持资源URI:`pansou://plugins`(插件列表)、`pansou://channels`(频道列表)、`pansou://cloud-types`(网盘类型列表)。
|
||||
|
||||
### 架构与部署方式
|
||||
|
||||
PanSou MCP 服务设计为与 PanSou Go 后端服务分离,通过 HTTP API 进行通信。支持以下部署方式:
|
||||
|
||||
- **npx 部署 (TypeScript)**: MCP 服务基于 TypeScript 开发,编译后可以通过 `npx` 命令直接运行。它会自动连接到指定的 PanSou 后端服务。
|
||||
- **Node.js 部署 (TypeScript)**: MCP 服务基于 TypeScript 开发,编译后通过 `node` 命令运行编译后的 JavaScript 文件。它会自动连接到指定的 PanSou 后端服务。
|
||||
- **Docker 部署**: 使用 Docker 容器运行 PanSou 后端服务,MCP 服务通过 HTTP API 连接到容器化的后端。
|
||||
|
||||
---
|
||||
@@ -45,15 +48,13 @@ PanSou MCP 服务设计为与 PanSou Go 后端服务分离,通过 HTTP API 进
|
||||
|
||||
### 部署步骤
|
||||
|
||||
PanSou 后端服务通常运行在 `http://localhost:8888` (默认地址)。支持以下两种部署方式:
|
||||
PanSou 后端服务通常运行在 `http://localhost:8888` (默认地址)。支持以下两种后端部署方式:
|
||||
|
||||
## 方式一:源码部署
|
||||
## 后端服务部署
|
||||
|
||||
后端服务和 MCP 服务都需要从源码构建。
|
||||
### 方式一:源码部署后端服务
|
||||
|
||||
#### 1. 构建并启动 PanSou 后端服务 (Go)
|
||||
|
||||
- 确保系统已安装 Go 1.25.0 或更高版本。
|
||||
- 确保系统已安装 Go 1.23.0 或更高版本。
|
||||
- 克隆或确保已有 PanSou Go 项目源码。
|
||||
- 在项目根目录下,打开终端并执行以下命令进行构建:
|
||||
|
||||
@@ -71,22 +72,28 @@ go build -o pansou.exe .
|
||||
|
||||
服务默认将在 `http://localhost:8888` 启动。
|
||||
|
||||
#### 2. 构建 PanSou MCP 服务 (TypeScript)
|
||||
### 方式二:Docker 部署后端服务
|
||||
|
||||
- 确保系统已安装 Node.js (版本 >= 18.0.0)。
|
||||
- 在 `typescript` 目录下,打开终端并执行以下命令来安装依赖并构建项目:
|
||||
Docker 部署方式更加简单,无需手动构建 Go 后端服务,直接使用预构建的 Docker 镜像。
|
||||
|
||||
**前提条件**:确保您的系统已安装 Docker 和 Docker Compose。
|
||||
|
||||
在 PanSou 项目根目录下,使用 Docker Compose 启动后端服务:
|
||||
|
||||
```bash
|
||||
# 安装 Node.js 依赖
|
||||
npm install
|
||||
# 启动 Docker 容器
|
||||
docker-compose up -d
|
||||
|
||||
# 构建 TypeScript 项目
|
||||
npm run build
|
||||
# 检查容器状态
|
||||
docker ps
|
||||
|
||||
# 验证服务是否正常运行
|
||||
curl http://localhost:8888/api/health
|
||||
```
|
||||
|
||||
构建完成后,编译后的 JavaScript 文件将位于 `typescript/dist` 目录下。
|
||||
### 验证后端服务
|
||||
|
||||
- 确保服务成功启动。您可以通过在终端中访问 `http://localhost:8888/api/health` 来检查,应该能看到类似以下的 JSON 响应,表明服务正常:
|
||||
无论使用哪种方式启动后端服务,您都可以通过访问 `http://localhost:8888/api/health` 来检查服务状态,应该能看到类似以下的 JSON 响应:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -94,25 +101,41 @@ npm run build
|
||||
"plugins_enabled": true,
|
||||
"channels_count": 1,
|
||||
"channels": ["tgsearchers3"],
|
||||
"plugin_count": 16,
|
||||
"plugins": ["pansearch", "panta", ...]
|
||||
"plugin_count": 38,
|
||||
"plugins": ["ddys", "erxiao", "..."]
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 运行 MCP 服务
|
||||
---
|
||||
|
||||
## MCP 服务配置与使用
|
||||
|
||||
### 1. 构建 MCP 服务
|
||||
|
||||
- 确保系统已安装 Node.js (版本 >= 18.0.0)。
|
||||
- 在 `typescript` 目录下,打开终端并执行以下命令来安装依赖并构建项目:
|
||||
|
||||
```bash
|
||||
cd typescript
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
构建完成后,编译后的 JavaScript 文件将位于 `typescript/dist` 目录下。
|
||||
|
||||
### 2. MCP 服务运行方式
|
||||
|
||||
构建完成后,可以通过以下方式之一运行 MCP 服务:
|
||||
|
||||
- **在MCP调用时自动启动** (自动启动):
|
||||
直接浏览后续MCP配置的内容,配置好MCP后,调用时会自动启动后端服务器。
|
||||
- **在MCP调用时自动启动** (推荐):
|
||||
直接配置MCP客户端,调用时会自动启动后端服务器。
|
||||
|
||||
- **使用 `node` 直接运行** (手动启动):
|
||||
在 PanSou 项目根目录下(包含 `typescript` 文件夹),运行:
|
||||
|
||||
```bash
|
||||
# Windows (CMD/PowerShell)
|
||||
node .\\typescript\\dist\\index.js
|
||||
|
||||
node .\typescript\dist\index.js
|
||||
```
|
||||
|
||||
服务启动后,将默认尝试连接到 `http://localhost:8888` 的 PanSou 后端服务。
|
||||
@@ -122,14 +145,16 @@ npm run build
|
||||
```bash
|
||||
# Windows (CMD)
|
||||
set PANSOU_SERVER_URL=http://your-backend-address:port
|
||||
node .\\typescript\\dist\\index.js
|
||||
node .\typescript\dist\index.js
|
||||
|
||||
# Windows (PowerShell)
|
||||
export PANSOU_SERVER_URL=http://your-backend-address:port
|
||||
node ./typescript/dist/index.js
|
||||
$env:PANSOU_SERVER_URL='http://your-backend-address:port'
|
||||
node .\typescript\dist\index.js
|
||||
```
|
||||
|
||||
#### 4. 示例配置 Cherry Studio(版本1.5.7)
|
||||
### 3. MCP 客户端配置
|
||||
|
||||
#### 示例配置 Cherry Studio(版本1.5.7)
|
||||
|
||||
要在 Cherry Studio 中使用 PanSou MCP 服务,需要将其添加到 Cherry Studio MCP 的配置文件中。
|
||||
|
||||
@@ -137,8 +162,6 @@ node ./typescript/dist/index.js
|
||||
- 选择 `添加服务器` 、 `从JSON导入` 。
|
||||
- 加入服务配置(可以直接复制项目根目录下的 `mcp-config.json` 内容):
|
||||
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
@@ -169,90 +192,17 @@ node ./typescript/dist/index.js
|
||||
- 请将 `C:\\full\\path\\to\\your\\project` 替换为您项目实际的完整路径
|
||||
- 如需强制指定部署模式,可修改 `DOCKER_MODE` 和 `AUTO_START_BACKEND` 参数
|
||||
|
||||
#### 5. 启动 MCP 服务,并在对话界面启用,开始尝试搜索
|
||||
### 4. 启动 MCP 服务并开始使用
|
||||
|
||||
配置完成后,在对话界面启用 PanSou MCP 服务,即可开始尝试搜索。
|
||||
|
||||
<img width="495" height="649" alt="image" src="https://github.com/user-attachments/assets/b8c72649-03e8-4f52-86ba-aa16c4cc3b7e" />
|
||||
|
||||
---
|
||||
|
||||
## 方式二:Docker 部署
|
||||
## 配置说明与高级选项
|
||||
|
||||
Docker 部署方式更加简单,无需手动构建 Go 后端服务,直接使用预构建的 Docker 镜像。
|
||||
|
||||
### 前提条件
|
||||
|
||||
1. **Docker**: 确保您的系统已安装 Docker 和 Docker Compose。
|
||||
2. **Node.js**: 确保您的系统已安装 Node.js (版本 >= 18.0.0),用于运行 MCP 服务。
|
||||
|
||||
### 部署步骤
|
||||
|
||||
#### 1. 启动 Docker 后端服务
|
||||
|
||||
在 PanSou 项目根目录下,使用 Docker Compose 启动后端服务:
|
||||
|
||||
```bash
|
||||
# 启动 Docker 容器
|
||||
docker-compose up -d
|
||||
|
||||
# 检查容器状态
|
||||
docker ps
|
||||
|
||||
# 验证服务是否正常运行
|
||||
curl http://localhost:8888/api/health
|
||||
```
|
||||
|
||||
成功启动后,您应该能看到类似以下的 JSON 响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"plugins_enabled": true,
|
||||
"channels_count": 5,
|
||||
"channels": ["tgsearchers3", "SharePanBaidu", "yunpanxunlei", "tianyifc", "BaiduCloudDisk"],
|
||||
"plugin_count": 16,
|
||||
"plugins": ["pansearch", "panta", ...]
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 构建 MCP 服务
|
||||
|
||||
在 `typescript` 目录下构建 MCP 服务:
|
||||
|
||||
```bash
|
||||
cd typescript
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
#### 3. 配置 MCP 服务
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"pansou": {
|
||||
"command": "node",
|
||||
"args": [
|
||||
"C:\\full\\path\\to\\your\\project\\typescript\\dist\\index.js"
|
||||
],
|
||||
"env": {
|
||||
"PANSOU_SERVER_URL": "http://localhost:8888",
|
||||
"REQUEST_TIMEOUT": "30",
|
||||
"MAX_RESULTS": "50",
|
||||
"DEFAULT_CLOUD_TYPES": "baidu,aliyun,quark,tianyi,uc,mobile,115,pikpak,xunlei,123,magnet,ed2k,others",
|
||||
"AUTO_START_BACKEND": "true",
|
||||
"DOCKER_MODE": "true",
|
||||
"BACKEND_SHUTDOWN_DELAY": "5000",
|
||||
"BACKEND_STARTUP_TIMEOUT": "30000",
|
||||
"IDLE_TIMEOUT": "300000",
|
||||
"ENABLE_IDLE_SHUTDOWN": "true",
|
||||
"PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**智能检测机制**:
|
||||
### 智能检测机制
|
||||
|
||||
当 `DOCKER_MODE` 设置为 `"false"` 或未设置时,MCP 服务将自动检测部署模式:
|
||||
|
||||
@@ -260,78 +210,51 @@ npm run build
|
||||
2. **源码部署检测**:检查是否存在 Go 可执行文件(pansou.exe/main.exe)
|
||||
3. **服务运行检测**:检查后端服务是否已在运行
|
||||
|
||||
**配置模式**:
|
||||
### 配置模式
|
||||
|
||||
- **自动模式**(推荐):使用默认配置,让服务自动检测部署方式
|
||||
- **强制 Docker 模式**:设置 `"DOCKER_MODE": "true"`
|
||||
- **强制源码模式**:设置 `"DOCKER_MODE": "false"` 且 `"AUTO_START_BACKEND": "true"`
|
||||
- **仅连接模式**:设置 `"AUTO_START_BACKEND": "false"`(适用于手动启动的后端)
|
||||
|
||||
#### 4. 在 MCP 客户端中配置
|
||||
### 统一配置文件
|
||||
|
||||
将上述配置添加到您的 MCP 客户端(如 Cherry Studio)中,记得将路径替换为实际路径。
|
||||
|
||||
#### 5. 测试 Docker 部署
|
||||
|
||||
您可以手动测试 MCP 服务是否能正确连接到 Docker 后端:
|
||||
|
||||
```bash
|
||||
# Windows (PowerShell)
|
||||
$env:DOCKER_MODE='true'
|
||||
$env:PANSOU_SERVER_URL='http://localhost:8888'
|
||||
node .\typescript\dist\index.js
|
||||
```
|
||||
|
||||
成功启动后,您应该看到类似以下的输出:
|
||||
|
||||
```
|
||||
⏱️ 空闲监控已启用,超时时间: 300 秒
|
||||
🔍 检查后端服务状态...
|
||||
✅ 后端服务已在运行
|
||||
🚀 PanSou MCP服务器已启动
|
||||
📡 服务地址: http://localhost:8888
|
||||
```
|
||||
|
||||
### 配置文件说明
|
||||
|
||||
无论是源码部署后端,还是Docker部署后端,都可以用统一的 `mcp-config.json` 配置文件。
|
||||
|
||||
### 部署方式的优势
|
||||
|
||||
**Docker 部署**:
|
||||
1. **简化部署**: 无需手动构建 Go 后端服务
|
||||
2. **环境隔离**: 后端服务运行在独立的容器环境中
|
||||
3. **易于管理**: 可以通过 Docker Compose 轻松启动、停止和重启服务
|
||||
4. **配置灵活**: 通过环境变量轻松调整服务配置
|
||||
|
||||
**源码部署**:
|
||||
1. **完全控制**: 可以自定义构建和配置
|
||||
2. **开发友好**: 便于调试和开发
|
||||
3. **资源效率**: 直接运行,无容器开销
|
||||
|
||||
**智能检测**:
|
||||
1. **自动适配**: 无需手动选择部署模式
|
||||
2. **简化配置**: 一个配置文件适用所有场景
|
||||
3. **错误减少**: 避免配置错误导致的问题
|
||||
无论使用哪种后端部署方式,都可以使用统一的 `mcp-config.json` 配置文件。MCP 服务会根据配置自动检测和适配不同的部署模式。
|
||||
|
||||
### 常见问题排查
|
||||
|
||||
如果 MCP 服务无法连接到 Docker 后端,请检查:
|
||||
#### 后端服务连接问题
|
||||
|
||||
1. **容器状态**: 使用 `docker ps` 确认容器正在运行
|
||||
2. **端口映射**: 确认端口 8888 已正确映射到主机
|
||||
3. **健康检查**: 使用 `curl http://localhost:8888/api/health` 测试后端服务
|
||||
4. **防火墙**: 确认防火墙没有阻止端口 8888
|
||||
1. **检查服务状态**:
|
||||
```bash
|
||||
# 检查健康状态
|
||||
curl http://localhost:8888/api/health
|
||||
|
||||
# 或使用 PowerShell
|
||||
Invoke-WebRequest -Uri "http://localhost:8888/api/health"
|
||||
```
|
||||
|
||||
如果遇到问题,可以查看容器日志:
|
||||
2. **Docker 部署问题**:
|
||||
```bash
|
||||
# 检查容器状态
|
||||
docker ps
|
||||
|
||||
# 查看容器日志
|
||||
docker-compose logs
|
||||
|
||||
# 重启容器
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
```bash
|
||||
# 查看容器日志
|
||||
docker logs pansou
|
||||
3. **源码部署问题**:
|
||||
- 确认 Go 版本 >= 1.25.0
|
||||
- 检查端口 8888 是否被占用
|
||||
- 确认防火墙设置
|
||||
|
||||
# 实时查看日志
|
||||
docker logs -f pansou
|
||||
```
|
||||
4. **MCP 服务问题**:
|
||||
- 确认 Node.js 版本 >= 18.0.0
|
||||
- 检查 `typescript/dist` 目录是否存在
|
||||
- 验证配置文件中的路径是否正确
|
||||
|
||||
---
|
||||
|
||||
@@ -352,7 +275,7 @@ MCP 服务通过工具调用接收参数。以下是主要工具及其支持的
|
||||
| `source_type` | string | 否 | `"all"` | 数据来源类型。可选值:`"all"` (全部来源), `"tg"` (仅 Telegram), `"plugin"` (仅插件)。 |
|
||||
| `force_refresh` | boolean | 否 | `false` | 是否强制刷新缓存,以获取最新数据。 |
|
||||
| `result_type` | string | 否 | `"merge"` | 返回结果的类型。可选值:`"all"` (返回所有结果), `"results"` (仅返回详细结果), `"merge"` (仅返回按网盘类型分组的结果)。 |
|
||||
| `concurrency` | number | 否 | 自动计算 | 并发搜索的数量。 |
|
||||
| `concurrency` | number | 否 | 自动计算 | 并发搜索的数量,0或不指定则自动计算。 |
|
||||
| `ext_params` | object | 否 | `{}` | 传递给后端插件的自定义扩展参数,例如 `{"title_en": "Fast and Furious", "is_all": true}`。 |
|
||||
|
||||
---
|
||||
|
||||
@@ -52,7 +52,7 @@ type Response struct {
|
||||
// NewSuccessResponse 创建成功响应
|
||||
func NewSuccessResponse(data interface{}) Response {
|
||||
return Response{
|
||||
Code: 200,
|
||||
Code: 0,
|
||||
Message: "success",
|
||||
Data: data,
|
||||
}
|
||||
|
||||
@@ -24,16 +24,7 @@
|
||||
"search",
|
||||
"claude"
|
||||
],
|
||||
"author": "PanSou Team",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fish2018/pansou-mcp.git"
|
||||
},
|
||||
"homepage": "https://github.com/fish2018/pansou-mcp#readme",
|
||||
"bugs": {
|
||||
"url": "https://github.com/fish2018/pansou-mcp/issues"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@ const SearchToolArgsSchema = z.object({
|
||||
source_type: z.enum(['all', 'tg', 'plugin']).optional().default('all').describe('数据来源类型'),
|
||||
force_refresh: z.boolean().optional().default(false).describe('强制刷新缓存'),
|
||||
result_type: z.enum(['all', 'results', 'merge']).optional().default('merge').describe('结果类型'),
|
||||
concurrency: z.number().int().positive().optional().describe('并发搜索数量'),
|
||||
concurrency: z.number().int().min(0).optional().describe('并发搜索数量,0表示自动计算'),
|
||||
ext_params: z.record(z.any()).optional().describe('扩展参数,传递给插件的自定义参数')
|
||||
});
|
||||
|
||||
@@ -70,7 +70,7 @@ export const searchTool: Tool = {
|
||||
},
|
||||
concurrency: {
|
||||
type: 'number',
|
||||
description: '并发搜索数量,不指定则自动计算'
|
||||
description: '并发搜索数量,0或不指定则自动计算'
|
||||
},
|
||||
ext_params: {
|
||||
type: 'object',
|
||||
|
||||
Reference in New Issue
Block a user