yagizhanakinci-taller/Local_MCP_Server
GitHub: yagizhanakinci-taller/Local_MCP_Server
一个本地 MCP 服务器,将免费公共 API 数据转换为富文本 Markdown 并提供可视化渲染,解决多源数据整合与展示繁琐的问题。
Stars: 0 | Forks: 0
# Weather、Countries & Holidays MCP 服务器
一个本地 [Model Context Protocol (MCP)](https://modelcontextprotocol.io) 服务器,为任何 MCP 兼容的 AI 助手提供实时天气预报、国家概况和公共假日日历——所有内容均格式化为富文本 Markdown,包含表格、表情符号标识、ASCII 图表和可用于视觉渲染的月度网格。
## 功能
该服务器暴露了四个 MCP 工具:
| 工具 | 描述 |
|---|---|
| `get_weather` | 任意城市或地点的当前天气 + 7 天预报 |
| `get_country_info` | 任意国家的人口、地理、语言、货币等详细信息 |
| `get_location_overview | 合并天气与国家概况的单次格式化响应 |
| `get_holidays | 任意国家与年份的完整公共假日日历,以月度网格呈现 |
原始数据从免费公共 API 获取,随后通过 OpenRouter LLM 转换为结构化 Markdown——包含表格、表情符号旗帜/天气图标、ASCII 图表和月度网格日历——以便 AI 助手渲染可视化内容而非输出纯 JSON。
**使用的 API(全部免费,除 OpenRouter 外无需密钥):**
- [Open-Meteo](https://open-meteo.com/) — 天气与地理编码
- [REST Countries](https://restcountries.com/) — 国家数据
- [Nager.Date](https://date.nager.at/) — 按国家与年份提供的公共假日
- [OpenRouter](https://openrouter.ai/) — LLM 格式化层(需要密钥)
## 先决条件
- Python 3.10+
- [OpenRouter API 密钥](https://openrouter.ai/keys)
## 安装
```
git clone https://github.com/yagizhanakinci-taller/Local_MCP_Server.git
cd Local_MCP_Server
pip install -r requirements.txt
cp .env.example .env
# 打开 .env 并粘贴你的 OPENROUTER_API_KEY
```
### `.env` 配置选项
```
# 必需
OPENROUTER_API_KEY=sk-or-...
# 可选 — OpenRouter 上的任何模型均可。默认值如下所示。
OPENROUTER_MODEL=anthropic/claude-opus-4.6-fast
```
其他快速且廉价的选择:
- `google/gemini-flash-1.5`
- `mistralai/mistral-small`
- `meta-llama/llama-3.1-8b-instruct:free`
## 连接至 Claude Desktop
无需服务器进程——Claude Desktop 会通过 stdio 直接启动脚本。
**1.** 打开 Claude Desktop → **设置** → **开发者** → **编辑配置**
**2.** 在 `claude_desktop_config.json` 中添加以下代码块,将路径替换为你的实际 Python 可执行文件和 `server.py` 位置:
```
{
"mcpServers": {
"weather-countries-holidays": {
"command": "C:\\Path\\to\\python.exe",
"args": [
"C:\\Path\\to\\Local_MCP_Server\\server.py"
],
"env": {
"OPENROUTER_API_KEY": "sk-or-...",
"OPENROUTER_MODEL": "anthropic/claude-opus-4.6-fast"
}
}
}
}
```
**3.** 保存文件并**重启 Claude Desktop**。
所有四个工具将自动在 Claude 界面中显示。
## 连接至 ChatGPT、Cursor 或其他 HTTP 客户端
大多数非 Claude 客户端(ChatGPT、Cursor、Windsurf 等)通过 **HTTP** 而非 stdio 连接到 MCP 服务器。需要两项更改:
### 第一步 — 切换至 HTTP 传输
在 `server.py` 底部,将入口点从默认的 stdio 传输改为 `streamable-http`:
```
# 之前 — stdio,由 Claude Desktop 使用(当前默认)
if __name__ == "__main__":
mcp.run()
# 之后 — HTTP,由 ChatGPT 和其他基于 Web 的客户端要求
if __name__ == "__main__":
mcp.run(transport="streamable-http")
```
然后启动服务器:
```
python server.py
# 服务器现在监听于 http://localhost:8000
```
### 第二步 — 通过 HTTPS 暴露 8000 端口
ChatGPT 及大多数基于 Web 的客户端需要公网 **HTTPS** URL。使用以下工具将本地端口隧道化:
**ngrok**(最常见):
```
ngrok http 8000
# 给你一个类似这样的 URL:https://abc123.ngrok-free.app
```
**Cloudflare Tunnel:**
```
cloudflare tunnel --url http://localhost:8000
```
**VS Code 端口转发**——在“端口”面板中,右键点击 8000 端口并设置可见性为 Public。
### 第三步 — 在 ChatGPT 中添加服务器 URL
1. 进入 **ChatGPT** → **设置** → **连接器**(或计划中的 MCP 部分)
2. 添加一个新的连接器,指向你的 HTTPS 隧道 URL,例如:
https://abc123.ngrok-free.app/mcp
3. 保存——所有四个工具将在你的对话中可用。
## 项目结构
```
Local_MCP_Server/
├── server.py # MCP server — all tools and helpers
├── requirements.txt # Python dependencies
├── .env.example # Environment variable template
├── .env # Your local secrets (not committed)
└── README.md
```
## 故障排除
| 问题 | 解决方法 |
|---|---|
| `OPENROUTER_API_KEY 未设置` | 将密钥添加到 `.env` 或 Claude Desktop 的 `env` 块中 |
| `Location not found` | 尝试更具体的名称,例如 `"London, UK"` 而非 `"London"` |
| `get_holidays` 返回无数据 | 使用有效的 ISO 3166-1 alpha-2 国家代码,如 `"US"`、`"GB"`、`"BR"` |
| ChatGPT 无法连接服务器 | 确保同时运行 `python server.py` 和 HTTPS 隧道 |
| Claude Desktop 未显示工具 | 检查 JSON 配置文件中的路径/拼写错误,然后重启应用 |
| `ModuleNotFoundError` | 使用正确的 Python 环境运行 `pip install -r requirements.txt` |
标签:AI助手集成, API集成, ASCII图表, Emoji图标, .env管理, LLM格式化, Markdown渲染, MCP服务器, Mutation, Nager.Date, Open-Meteo, OpenRouter, Python 3.10, Python后端, REST Countries, SEO: MCP工具, SEO: 天气国家节假日, SEO: 本地AI服务, 免费API, 可观测性, 可视化, 国家信息, 天气查询, 富文本展示, 提示注入, 月历网格, 本地服务器, 环境配置, 用户体验优化, 结构化数据, 节假日查询, 表格展示, 逆向工具, 集群管理