Skip to main content
Glama
SekusRevo

Chinese Tourism Spots MCP Server

by SekusRevo
README.md
# 旅游智能助手 MCP 项目

## 项目概述

这是一个基于 **MCP(Model Context Protocol)协议**的旅游智能助手系统。它集成了多个功能模块,旨在帮助用户高效地完成旅游规划、景点查询、路线规划、天气查询、图片生成以及小红书内容发布等一系列操作。

## 功能模块

本项目包含以下五个核心 MCP 服务器模块,每个模块都提供了一组特定的工具(Tool)供调用。

### 1. 🏛️ 景点数据读取服务器 (`crawler/places_read_mcp.py`)

**功能:** 负责读取和管理本地存储的景点数据,支持按省份、城市、关键词等多种条件进行查询。

| 可用工具 | 描述 |
| :--- | :--- |
| `get_spots_by_province` | 获取指定省份的所有景点信息。 |
| `get_spots_by_city` | 获取指定城市的所有景点信息。 |
| `get_all_provinces` | 获取所有有数据的省份列表。 |
| `get_cities_in_province` | 获取指定省份下的所有城市列表。 |
| `search_spots_by_keyword` | 根据关键词搜索景点。 |

**数据存储:** 景点数据以 JSON 格式存储,文件结构遵循 `省份/城市/景点.json` 的组织方式。

### 2. 🎨 图片生成服务器 (`middleware/generate_mcp.py`)

**功能:** 调用 Nano Banana API 生成旅游攻略长图(竖版海报),特别支持四行格式的详细图片描述,适用于小红书等平台。

| 可用工具 | 描述 |
| :--- | :--- |
| `travel_image_prompt_guide` | 生成旅游攻略长图的提示词框架。 |
| `generate_image_nano_banana` | 调用 API 生成图片。 |

**特色:**
*   自动生成一日游攻略长图(竖版海报)。
*   支持早、中、晚三个时段的景点展示。
*   自动保存生成的图片到本地。

### 3. 📱 小红书发布服务器 (`publisher/publish_mcp.py`)

**功能:** 自动化发布旅游内容到小红书平台,支持图文笔记和视频笔记的发布。

| 可用工具 | 描述 |
| :--- | :--- |
| `publish_xiaohongshu_video` | 发布视频笔记到小红书。 |
| `publish_xiaohongshu_images` | 发布图文笔记到小红书。 |
| `generate_xiaohongshu_content` | 根据景点信息生成小红书笔记内容(标题、正文、话题)。 |
| `batch_publish_xiaohongshu` | 批量发布小红书笔记。 |

**依赖:** 需要已登录的浏览器会话(如通过 Selenium 维护)。

### 4. 🗺️ 路径规划服务器 (`middleware/route_planning_mcp.py`)

**功能:** 基于高德地图 API 实现路径规划功能,支持多种出行方式,并支持多点路径规划。

| 可用工具 | 描述 |
| :--- | :--- |
| `route_planning` | 路径规划(支持驾车、步行、骑行、电动车、公交)。 |
| `search_places` | 搜索地点。 |
| `multi_point_route` | 多点路径规划。 |

**支持出行方式:** 驾车 (`driving`)、步行 (`walking`)、骑行 (`bicycling`)、电动车 (`electrobike`)、公交 (`transit`)。

### 5. 🌤️ 天气查询服务器 (`crawler/weather_mcp.py`)

**功能:** 基于高德地图 API 查询指定地点的实时天气和天气预报信息。

| 可用工具 | 描述 |
| :--- | :--- |
| `get_current_weather` | 查询实时天气。 |
| `get_weather_forecast` | 查询天气预报。 |
| `get_complete_weather` | 查询完整天气信息(实时+预报)。 |
| `search_city_weather` | 搜索城市并查询天气。 |

## 快速开始

### 环境要求

*   Python 3.8+
*   高德地图 API Key(用于路径规划和天气查询)
*   Nano Banana API Key(用于图片生成)

### 安装依赖

使用 `pip` 安装所需的 Python 库:

```bash
pip install mcp fastmcp httpx pydantic selenium
```

### 配置步骤

#### 1. 获取 API Key

*   **高德地图 API Key:** 访问 [高德开放平台](https://lbs.amap.com/) 注册并获取。
*   **Nano Banana API Key:** 访问 [acedata.cloud](https://acedata.cloud/) 注册并获取(需在 `middleware/generate_mcp.py` 中修改 `token` 变量)。

#### 2. 配置 Cline MCP 设置

将以下 JSON 配置内容保存为 `cline_mcp_settings.json` 文件,并放置在 Cline 的配置目录中。

**注意:** 请根据您的系统环境修改 `command`、`args` 和 `cwd` 中的路径,以及 `env` 中的 API Key。

```json
{
  "mcpServers": {
    "amap-route-planning": {
      "autoApprove": ["multi_point_route", "route_planning", "search_places"],
      "disabled": false,
      "timeout": 600,
      "type": "stdio",
      "command": "你的Python解释器路径",
      "args": ["你的项目路径\\middleware\\route_planning_mcp.py"],
      "cwd": "你的项目路径",
      "env": {
        "AMAP_API_KEY": "你的高德地图API_Key"
      }
    },
    "amap-weather": {
      "autoApprove": ["get_current_weather", "get_weather_forecast", "get_complete_weather", "search_city_weather"],
      "disabled": false,
      "timeout": 300,
      "type": "stdio",
      "command": "你的Python解释器路径",
      "args": ["你的项目路径\\crawler\\weather_mcp.py"],
      "cwd": "你的项目路径",
      "env": {
        "AMAP_API_KEY": "你的高德地图API_Key"
      }
    },
    "places_read": {
      "autoApprove": ["get_spots_by_province", "get_spots_by_city", "get_all_provinces", "get_cities_in_province", "search_spots_by_keyword"],
      "disabled": false,
      "timeout": 300,
      "type": "stdio",
      "command": "你的Python解释器路径",
      "args": ["你的项目路径\\crawler\\places_read_mcp.py"],
      "cwd": "你的项目路径"
    },
    "image-generator": {
      "autoApprove": ["generate_image_nano_banana"],
      "disabled": false,
      "timeout": 300,
      "type": "stdio",
      "command": "你的Python解释器路径",
      "args": ["你的项目路径\\middleware\\generate_mcp.py"],
      "cwd": "你的项目路径"
    },
    "xiaohongshu-publisher": {
      "autoApprove": ["publish_xiaohongshu_video", "publish_xiaohongshu_images", "generate_xiaohongshu_content", "batch_publish_xiaohongshu"],
      "disabled": false,
      "timeout": 300,
      "type": "stdio",
      "command": "你的Python解释器路径",
      "args": ["你的项目路径\\publisher\\publish_mcp.py"],
      "cwd": "你的项目路径"
    }
  }
}
```

**路径修改说明:**

| 路径类型 | Windows 示例 | macOS/Linux 示例 |
| :--- | :--- | :--- |
| Python 解释器路径 | `E:\APP\Anaconda22\envs\mcp\python.exe` | `/path/to/your/python3` |
| 项目路径 | `E:\PostGraduate\courses\yingxiang\Finaltask\MCPProject` | `/path/to/your/MCPProject` |

### 3. 数据准备

创建景点数据目录结构 `data/`,并按照 `省份/城市/景点.json` 的结构组织数据。

```
data/
├── 江苏省/
│   ├── 苏州市/
│   │   ├── 拙政园.json
│   │   └── 虎丘.json
│   └── 南京市/
│       └── 中山陵.json
└── 浙江省/
    └── 杭州市/
        └── 西湖.json
```

**景点数据格式示例(JSON):**

```json
{
  "name": "西湖",
  "province": "浙江省",
  "city": "杭州市",
  "description": "杭州西湖风景名胜区,著名的淡水湖泊,中国十大风景名胜之一。",
  "rating": 4.8,
  "address": "杭州市西湖区",
  "tags": ["湖泊", "风景区", "文化遗产"],
  "recommended_hours": 3,
  "是否免费": true
}
```

## 使用示例

以下是使用各个模块工具的 Python 示例代码:

### 1. 查询景点信息

```python
# 查询苏州的景点
spots = get_spots_by_city("江苏省", "苏州市")
print(f"找到 {spots['count']} 个景点")
```

### 2. 生成旅游攻略图片

```python
# 生成苏州一日游攻略图片
prompt_guide = travel_image_prompt_guide("苏州", "晴天 20度")

# 根据提示词生成图片
result = generate_image_nano_banana(
    prompt=prompt_guide,
    width=1024,
    height=2048
)
```

### 3. 路径规划

```python
# 从拙政园到虎丘的驾车路线
route = route_planning(
    origin="拙政园",
    destination="虎丘",
    route_type="driving",
    city="苏州市"
)
```

### 4. 天气查询

```python
# 查询苏州实时天气
weather = get_current_weather("苏州市")
```

### 5. 发布到小红书

```python
# 1. 生成小红书内容
content = generate_xiaohongshu_content(
    province="江苏省",
    city="苏州市",
    style="旅游攻略"
)

# 2. 发布图文笔记
publish_xiaohongshu_images(
    file_path="generated_images/苏州旅游攻略.png",
    title=content["title"],
    content=content["content"],
    topics=content["topics"]
)
```

## 配置说明

### Cline 配置文件位置

`cline_mcp_settings.json` 文件应放置在以下目录(以 VS Code 为例):

| 操作系统 | 路径 |
| :--- | :--- |
| Windows | `%APPDATA%\Code\User\globalStorage\codeium.codeium\config\cline_mcp_settings.json` |
| macOS | `~/Library/Application Support/Code/User/globalStorage/codeium.codeium/config/cline_mcp_settings.json` |
| Linux | `~/.config/Code/User/globalStorage/codeium.codeium/config/cline_mcp_settings.json` |

### 环境变量配置

在运行 MCP 服务器之前,建议设置以下环境变量:

```bash
# 设置高德地图 API Key
export AMAP_API_KEY="你的高德地图API_Key"

# 设置 Python 路径(如果需要)
export PYTHONPATH="你的项目路径:$PYTHONPATH"
```

## 注意事项

*   **API 限制:** 高德地图 API 和 Nano Banana API 都有每日调用次数或使用限制,请注意遵守服务商的使用条款。
*   **小红书发布:**
    *   需要已登录的浏览器会话。
    *   需要安装 Chrome 浏览器和对应版本的 ChromeDriver。
    *   首次使用需要手动登录小红书账号。
*   **数据安全:**
    *   API Key 等敏感信息**切勿**提交到版本控制系统(如 Git)。
    *   建议使用环境变量或配置文件来管理敏感信息。
*   **路径问题:**
    *   Windows 系统路径使用反斜杠 `\` 或双反斜杠 `\\`。
    *   macOS/Linux 系统路径使用正斜杠 `/`。

## 故障排除

1.  **MCP 服务器无法启动:**
    *   检查 `cline_mcp_settings.json` 中配置的 Python 解释器路径是否正确。
    *   确保已通过 `pip install` 安装了所有依赖包。
    *   检查配置文件中的项目路径 (`cwd` 和 `args`) 是否存在。
2.  **API 调用失败:**
    *   检查 API Key 是否有效,并确保已正确配置在环境变量或配置文件中。
    *   检查网络连接是否正常。
    *   查看 API 服务商的状态页面,确认服务是否可用。
3.  **小红书发布失败:**
    *   检查是否已成功登录小红书账号。
    *   检查 ChromeDriver 版本是否与您安装的 Chrome 浏览器版本匹配。
    *   检查待发布的文件路径是否正确。

## 项目结构

```
MCPProject/
├── data/                    # 景点数据目录
├── generated_images/        # 生成的图片
├── cline_mcp_settings.json  # Cline 配置文件
├── publisher/               # 发布相关 MCP
│   └── publish_mcp.py        # 小红书发布服务器
├── crawler/                 # 读取/抓取类 MCP(本项目:读取本地数据/天气)
│   ├── places_read_mcp.py    # 景点读取服务器
│   └── weather_mcp.py        # 天气查询服务器
├── middleware/              # 通用中间层/工具代码
│   ├── upload_utils.py       # 小红书上传/发布相关工具
│   └── web_utils.py          # Selenium/浏览器工具
│   ├── generate_mcp.py       # 图片生成服务器
│   └── route_planning_mcp.py # 路径规划服务器
└── README.md                # 项目说明文档
```

## 许可证

本项目仅供学习和研究使用,请遵守相关 API 服务商的使用条款。

## 贡献

欢迎通过提交 Issue 和 Pull Request 来改进和完善本项目。

## 支持

如果您在使用过程中遇到问题,请:
1.  仔细查阅本 README 文档。
2.  检查配置文件中的路径和 API Key 是否正确。
3.  查看各个 MCP 服务器的日志输出以获取详细错误信息。