内容
# 维也纳实时MCP服务器
> **废弃(2026-06-05)** — 已隔离。使用 **[维也纳生活助手](https://github.com/sandraschi/vienna-life-assistant)** (ViLife)代替。参见 [废弃.md](废弃.md)。
---
<p align="center">
<a href="https://github.com/casey/just"><img src="https://img.shields.io/badge/just-ready_to_go-7c5cfc?style=flat-square&logo=just&logoColor=white" alt="Just"></a>
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff"></a>
<a href="https://python.org"><img src="https://img.shields.io/badge/Python-3.13+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python"></a>
<a href="https://github.com/PrefectHQ/fastmcp"><img src="https://img.shields.io/badge/FastMCP-3.2-7c5cfc?style=flat-square" alt="FastMCP"></a>
</p>
> 📖 **[安装指南](安装.md)** — 快速开始,手动设置和故障排除
一个综合的MCP服务器,通过合并的工具为维也纳生活助手提供程序化访问。
## 快速开始
```powershell
git clone https://github.com/sandraschi/vienna-live-mcp
cd vienna-live-mcp
just
```
这将打开一个交互式仪表板,显示所有可用的命令。运行 `just bootstrap` 安装依赖,然后运行 `just serve` 或 `just dev` 启动。
### 手动设置
如果您没有安装 `just`:
## 概述
**vienna-live-mcp** 服务器将维也纳生活助手转换为一个完全可编程的个人助手。它实现了 **Portmanteau Pattern**,将 63 种工具组织成 5 类,提供干净、可发现的API:
- **购物管理** - 存储优惠、购物清单、预算跟踪
- **旅行规划** - 交通时刻表、行程规划、天气集成
- **费用跟踪** - 财务管理、预算分析、消费洞察
- **媒体管理** - 统一访问Plex、Calibre和Immich库
- **个人规划** - 待办事项管理、日历、目标和生产力工具
## 架构
### Portmanteau Pattern
每个混合工具为特定领域提供一套工具:
```mermaid
graph TD
A[维也纳实时MCP服务器] --> B[购物管理器]
A --> C[旅行管理器]
A --> D[费用管理器]
A --> E[媒体管理器]
A --> F[规划管理器]
B --> B1[获取商店优惠]
B --> B2[比较价格]
B --> B3[创建购物清单]
C --> C1[获取下一班车]
C --> C2[规划一日游]
C --> C3[获取火车时刻表]
D --> D1[添加费用]
D --> D2[分析消费模式]
D --> D3[设置预算]
E --> E1[搜索Plex库]
E --> E2[搜索Calibre库]
E --> E3[搜索Immich照片]
F --> F1[创建待办事项]
F --> F2[获取生产力统计]
F --> F3[设置目标]
```
### 双重传输支持
服务器支持两种MCP传输:
- **STDIO传输**:用于与MCP客户端(Cursor、Claude Desktop等)集成
- **HTTP传输**:用于直接Web API访问和Web应用程序集成
## 快速开始
### 先决条件
- Python 3.11+
- **数据库**:SQLite(默认,无需设置)或PostgreSQL(可选,用于生产)
- **可选外部API**:
- 维也纳公共交通API(维也纳公共交通)
- OpenWeatherMap API(天气数据)
- 货币兑换API
- BB API(奥地利铁路)
- Plex、Calibre、Immich API(媒体服务)
**注意**:服务器默认使用模拟数据。实际API集成是可选的,需要API密钥。
## 安装
### 先决条件
- [uv](https://docs.astral.sh/uv/) 已安装(推荐)
- Python 3.12+
### 快速开始
使用 `uvx` 立即运行:
```bash
uvx vienna-live-mcp
```
### 克劳德桌面集成
添加到您的 `claude_desktop_config.json`:
```json
"mcpServers": {
"vienna-live-mcp": {
"command": "uv",
"args": ["--directory", "D:/Dev/repos/vienna-live-mcp", "run", "vienna-live-mcp"]
}
}
```
### 运行服务器
**STDIO模式(MCP客户端集成):**
```bash
python -m vienna_live_mcp.server
```
**HTTP模式(直接API访问):**
```bash
python -m vienna_live_mcp.server --transport http --port 8000
```
## 工具类别
### 购物管理器(11种工具)
| 工具 | 描述 |
|------|-------------|
| `获取商店优惠` | 获取Spar、Billa、Hofer的当前优惠 |
| `比较价格` | 比较各商店的价格 |
| `查找附近商店` | 查找指定位置附近的商店 |
| `创建购物清单` | 创建购物清单 |
| `添加清单项` | 向清单中添加项目 |
| `获取购物推荐` | AI驱动的购物建议 |
| `预算检查项目` | 检查购买是否超出预算 |
| `查找优惠券` | 查找可用的优惠券和折扣 |
| `分析收据` | OCR并分类收据项目 |
| `获取购物历史` | 历史购物数据和模式 |
### 旅行管理器(15种工具)
| 工具 | 描述 |
|------|-------------|
| `获取下一班车` | 维也纳公共交通的下一班车信息 |
| `获取交通时刻表` | 线路和车站的完整时刻表 |
| `获取交通中断` | 当前延误和服务中断 |
| `规划一日游` | 完整的一日游行程 |
| `获取旅行信息` | 综合的城市旅行信息 |
| `获取旅行天气` | 为旅行优化的天气预测 |
| `获取火车时刻表` | BB火车时刻表 |
| `获取巴士时刻表` | 长途巴士时刻表 |
| `获取航班信息` | 航班信息(待API集成) |
| `获取货币兑换` | 当前汇率 |
| `获取签证要求` | 目的地的签证信息 |
| `计算旅行费用` | 总旅行费用计算 |
| `获取卧铺火车时刻表` | Nightjet卧铺火车时刻表 |
| `获取交通信息` | 实时交通信息 |
| `预订交通票` | 交通票预订(API就绪) |
### 费用管理器(12种工具)
| 工具 | 描述 |
|------|-------------|
| `添加费用` | 添加费用条目 |
| `更新费用` | 更新现有费用 |
| `删除费用` | 删除费用条目 |
| `按类别获取费用` | 按类别分组的费用 |
| `按日期范围获取费用` | 指定日期范围内的费用 |
| `获取最高支出类别` | 最高的支出类别 |
| `分析消费模式` | AI驱动的消费分析 |
| `设置预算` | 设置类别预算 |
| `获取预算状态` | 当前预算状态和提醒 |
| `预测每月费用` | 费用预测 |
| `比较费用期间` | 不同期间的费用比较 |
| `获取储蓄推荐` | 个性化的储蓄建议 |
| `导出费用` | 以CSV/JSON/PDF格式导出 |
| `导入费用` | 从外部来源导入 |
### 媒体管理器(10种工具)
| 工具 | 描述 |
|------|-------------|
| `搜索Plex库` | 搜索Plex媒体收藏 |
| `获取当前观看内容` | 当前正在观看/阅读的项目 |
| `获取最近添加的内容` | 最近添加的媒体 |
| `获取Plex推荐` | 个性化的媒体推荐 |
| `搜索Calibre库` | 搜索电子书库 |
| `获取阅读进度` | 阅读进度跟踪 |
| `搜索Immich照片` | 搜索照片库 |
| `获取最近照片` | 最近的照片及元数据 |
| `创建媒体播放列表` | 跨服务创建播放列表 |
| `获取媒体统计` | 综合的媒体消费统计 |
### 规划管理器(15种工具)
| 工具 | 描述 |
|------|-------------|
| `创建待办事项` | 创建带有优先级的待办事项 |
| `更新待办事项` | 更新现有的待办事项 |
| `按类别获取待办事项` | 按类别/状态筛选待办事项 |
| `完成待办事项` | 标记待办事项为已完成 |
| `获取日历事件` | 指定日期范围内的日历事件 |
| `安排会议` | 安排会议和约会 |
| `检查日程冲突` | 检测日程冲突 |
| `获取生产力统计` | 生产力指标和洞察 |
| `设置目标` | 设置和跟踪目标 |
| `获取目标进度` | 目标进度监控 |
| `创建习惯` | 创建习惯跟踪 |
| `记录习惯完成` | 记录习惯完成 |
| `获取习惯连胜` | 习惯连胜跟踪 |
| `获取励志名言` | 按类别获取励志名言 |
| `规划一周` | 生成周规划建议 |
## 配置
### 环境变量
```bash
# 数据库配置
DATABASE_URL=postgresql://user:password@localhost:5432/vienna_life_assistant
# 外部API密钥
WIENER_LINIEN_API_KEY=your_wiener_linien_key
OPENWEATHER_API_KEY=your_weather_key
CURRENCY_API_KEY=your_currency_key
# 媒体服务URL
PLEX_SERVER_URL=http://plex.local:32400
PLEX_TOKEN=your_plex_token
CALIBRE_URL=http://calibre.local:8080
IMMICH_URL=http://immich.local:2283
IMMICH_API_KEY=your_immich_key
# Redis(用于后台任务)
REDIS_URL=redis://localhost:6379/0
```
### 服务集成
服务器与维也纳生活助手的生态系统集成:
- **数据库**:与Web应用程序共享PostgreSQL
- **维也纳公共交通**:公共交通数据
- **Plex**:媒体服务器集成
- **Calibre**:电子书库访问
- **Immich**:照片管理
- **天气API**:旅行规划支持
- **货币API**:旅行费用计算
## 测试
```bash
# 运行所有测试
pytest
# 运行覆盖测试
pytest --cov=vienna_live_mcp
# 运行特定Portmanteau测试
pytest tests/test_shopping_manager.py
pytest tests/test_travel_manager.py
```
## MCPB打包
服务器支持MCPB(MCP二进制)打包,用于轻松分发:
```bash
# 构建MCPB包
mcpb build
# 从MCPB安装
mcpb install vienna-live-mcp.mcpb
```
## 集成
### MCP客户端集成
```python
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
# 连接到vienna-live-mcp服务器
server_params = StdioServerParameters(
command="python",
args=["-m", "vienna_live_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("get_store_offers", {"store_name": "spar"})
print(f"Spar优惠:{result}")
# 使用旅行管理器工具
tram_info = await session.call_tool("get_next_tram", {"station_name": "Stephansplatz"})
print(f"下一班车:{tram_info}")
```
### Web应用程序集成
维也纳生活助手Web应用程序与此MCP服务器集成,以增强功能:
```typescript
// 示例:在React中使用MCP客户端
import { MCPClient } from '@vienna-life-assistant/mcp-client';
const client = new MCPClient({
transport: 'http',
baseURL: 'http://localhost:8000'
});
// 获取购物推荐
const recommendations = await client.callTool('get_shopping_recommendations', {
based_on: 'recent_purchases'
});
```
## 未来的增强功能
- **真实API集成**:与所有外部服务完成集成
- **机器学习**:增强的AI推荐和预测
- **多用户支持**:用户隔离和权限
- **高级分析**:深入洞察和趋势分析
- **移动SDK**:原生移动应用程序集成
- **插件系统**:可扩展的工具架构
## 工业质量栈
该项目遵循**SOTA 14.1**工业标准,用于高保真代理编排:
- **Python(核心)**: [Ruff](https://astral.sh/ruff) 用于 linting 和格式化。对核心处理程序中的 `print` 语句零容忍度(`T201`)。
- **Web应用程序(UI)**: [Biome](https://biomejs.dev/) 用于毫秒级 linting。严格执行 `noConsoleLog`。
- **协议合规**:强化 `stdout/stderr` 隔离,以确保崩溃防护的JSON-RPC通信。
- **自动化**: [Justfile](./justfile) 适用于所有舰队操作(`just lint`、`just fix`、`just dev`)。
- **安全**:通过 `bandit` 和 `safety` 进行自动审计。
## 许可证
MIT许可证 - 参见 [LICENSE](LICENSE) 了解详情。
## 贡献
1. 分叉仓库
2. 创建功能分支
3. 为新功能添加测试
4. 提交拉取请求
## 支持
- **问题**: [GitHub Issues](https://github.com/sandraschi/vienna-live-mcp/issues)
- **讨论**: [GitHub Discussions](https://github.com/sandraschi/vienna-live-mcp/discussions)
- **文档**: [MCP Central Docs](https://github.com/sandraschi/mcp-central-docs)
## 致谢
- 使用 [FastMCP](https://github.com/sugarforever/FastMCP) 构建
- 维也纳生活助手生态系统的一部分
- 遵循 [MCP Central Standards](https://github.com/sandraschi/mcp-central-docs)
---
**在维也纳制作**