使用说明
驱动时间绘图仪MCP
模型上下文协议(MCP)服务器,使用谷歌地图API分析全天的交通模式,提供快速的视觉见解和建议。
受到激励 拥抱面孔MCP黑客马拉松 -用于智能通勤规划的生产就绪MCP服务器。
它做什么
- 以15分钟为间隔分析24小时内的交通模式
- 显示乐观/悲观/平均驾驶时间预测
- 使用并行API请求在约4秒内完成完整分析(比顺序请求快120倍!)
- 可与Claude Desktop、Claude Code和独立CLI配合使用
- 生成终端ASCII图和路线图
快速开始
1.安装
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .
2.设置API密钥
从获取您的Google Maps API密钥https://console.cloud.google.com/apis/credentials
启用这些API:
- 地理编码API
- API指南
- 映射静态API
创建 .env 模板中的文件:
cp .env.example .env
# Edit .env and add your key:
# GOOGLE_MAPS_API_KEY=your_key_here
3.测试
./test.sh
您应该在大约4秒后看到流量分析!
用法
终端(最快)
./test_custom.sh
编辑 test_custom.sh 自定义:
- 起点/终点(默认:加州大学伯克利分校埃文斯厅→ SFO)
- 日期
- 时间范围
- 间隔
或者直接使用CLI:
python cli/driveplot_fast.py \
--origin "Your Home" \
--destination "Your Work" \
--date 2025-11-20 \
--start 06:00 --end 10:00 \
--interval 15 \
--ascii --save-map outputs/route.png --yes
使用Claude作为MCP服务器
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"drivetime-plotter": {
"command": "python",
"args": ["-m", "mcp_server.server"],
"env": {
"GOOGLE_MAPS_API_KEY": "your_key_here"
},
"cwd": "/path/to/mcp-hackathon"
}
}
}
重新启动克劳德桌面。你现在可以问克劳德:“我什么时候从X开车到Y?”
运作原理
对于终端用户
- 跑
./test_custom.sh - 在约4秒内获得结果(并行API调用)
- 见两个输出:
- 彩色ANSI图 (美丽的终端可视化)
- 简单文本绘图 (Claude Code使用+、o、*字符的纯文本)
克劳德/克劳德代码
当你问“我什么时候从X开车到Y?”:
-
快速响应 (<10秒):
[Show simple text plot] 🟢 BEST: 5-7 AM (35 min) 🔴 WORST: 2-4 PM (60 min) 💡 Recommendation: Leave before 7 AM Want more details? -
详细回复 (如果你说是):
- 逐小时细分
- 具体场景
- 多项选择
关键AI行为
人类现实建议:
- ✅ “早上5点到7点离开”(合理)
- ❌ “凌晨2点离开”(对大多数人来说不切实际——人类需要睡眠!)
适应特殊性:
- 含糊的问题→ 快速回答+询问更多
- 特定约束→ 计算并提供选项
- 飞行时间→ 使用缓冲区反向工作
建筑
文件结构
mcp-hackathon/
├── .env # API key (gitignored, copy from .env.example)
├── .env.example # Template for API key
├── requirements.txt # Python dependencies
├── setup.py # Package setup (enables `pip install -e .`)
├── test.sh # Quick smoke test (~2 sec)
├── test_custom.sh # Main usage script (customizable route)
├── outputs/ # Generated maps and plots (gitignored)
├── cli/
│ └── driveplot_fast.py # Fast CLI with parallel requests
└── mcp_server/
├── __init__.py # Makes mcp_server a Python package
├── server.py # MCP server (exposes tools to Claude)
├── google_maps.py # Google Maps API integration
└── utils.py # Helper functions (LatLng, minute_grid, etc.)
为什么是这些文件?
核心文件:
cli/driveplot_fast.py-独立终端工具(无需MCP)mcp_server/server.py-用于Claude集成的MCP服务器mcp_server/google_maps.py-API调用(由CLI和MCP共享)mcp_server/utils.py-共享公用设施mcp_server/__init__.py-Python包所需(启用from mcp_server import ...)
配置:
.env-您的API密钥(从未提交给git).env.example-新用户模板setup.py-包元数据和依赖关系(需要pip install -e .)requirements.txt-直接依赖关系列表
测试:
test.sh-快速验证(1小时窗口,~2秒)test_custom.sh-实际使用情况(24小时~4秒)
API密钥管理
单一真相来源:
.env file (GOOGLE_MAPS_API_KEY=...)
↓
├─→ Shell scripts (loaded via `export $(grep -v '^#' .env | xargs)`)
└─→ Python code (os.getenv("GOOGLE_MAPS_API_KEY"))
仅 mcp_server/google_maps.py 定义:
GOOGLE_KEY = os.getenv("GOOGLE_MAPS_API_KEY", "")
所有其他代码都导入并使用此变量。
演出
- 并行API调用:最多30个并发请求(第一轮)
- 使用while循环进行智能重试:仅检索并发性降低的失败请求(10个工作进程)
- 多轮重试:最多3轮,确保最大成功率
- 速度:约4秒用于24小时全分析(96个数据点)
- 120倍加速 vs顺序方法
MCP工具暴露
当作为MCP服务器运行时,Claude可以使用以下工具:
1. geocode(query: str)
- 将地址转换为坐标
- 返回带有格式化地址和lat/lng的候选人
- 示例:“加利福尼亚州伯克利”→ [(37.8715, -122.2730), ...]
2. static_map(origin_lat, origin_lng, dest_lat, dest_lng)
- 生成谷歌地图静态图像URL
- 用标记显示路线
- 返回PNG图像的URL
3. eta_series(...)
- 获取跨时间范围的流量数据
- 返回乐观/悲观/平均驾驶时间
- 参数:
origin_lat,origin_lngdest_lat,dest_lngdate,start_time,end_timeinterval_minutesinclude_plot(可选,适用于Claude聊天中的matplotlib PNG)
使用的谷歌地图API
- 地理编码API:地址→ 坐标
- API指南:交通感知路线持续时间
- 静态映射API:路线可视化
交通模型:
optimistic-最佳情况(交通量小)pessimistic-最坏情况(交通繁忙)- 平均值-根据两者计算(实际预期)
输出格式
简单文本图(适用于Claude代码)
66 min | o
64 min | o ooo
62 min | oo
...
32 min | **********************
30 min | +++++++++++++++++++++++++++++++
+------------------------------------------------------------
0 1 2 3 4 5 6 7 8 9 10 11 12 ...
Hour of Day
LEGEND:
+ = Optimistic | o = Pessimistic | * = Average
B = Best time | W = Worst time
特征:
- 显示全部24小时
- 三种交通场景
- 标记最佳/最差时间
- 人类可读的x轴(单位/两位数小时的适当间距)
- 无ANSI代码(以克劳德代码响应呈现)
彩色ANSI图(用于终端)
使用plotext库,布局相同,但颜色美观。
故障排除
API错误
“缺少GOOGLE_MAPS_API_KEY”
→ Check .env 文件存在并且有您的密钥
→ 确保您从以下位置复制 .env.example: cp .env.example .env
“请求已删除” → 在谷歌云控制台中启用API(地理编码、方向、静态地图) → 验证账单是否有效(您每月可获得200美元的免费信用额度)
性能问题
多次重试失败的查询 → 由于速率限制,某些API请求失败 → 脚本自动重试,并发性降低 → 等待完成-大多数查询最终都会成功
慢速(>10秒) → 网络问题 → 稍后再试 → 默认值:30名工人→ 10 重试工人(可在代码中调整)
安装问题
运行MCP服务器时“找不到模块”
→ Run pip install -e . 以可编辑模式安装软件包
.sh文件上的“权限被拒绝”
→ Run chmod +x test.sh test_custom.sh
输出文件未保存
→ Check outputs/ 文件夹已存在(自动创建)
→ 验证路径 --save-map 旗帜
成本
非常便宜!
- 完整的24小时查询(96分):~0.001美元
- 200美元/月免费信用=约200000次查询
- 在开发或正常使用过程中不会达到极限
黑客马拉松评委
我们建造了什么
用于流量分析的生产就绪MCP服务器,具有:
- ✅ 120倍加速 (10分钟→ 4 秒通过并行处理)
- ✅ 美丽的终端可视化 (双输出:ANSI+纯文本)
- ✅ 人性化的人工智能行为 (考虑睡眠/工作时间表)
- ✅ 智能重试逻辑 (当循环多轮时,只重试失败)
- ✅ 干净、可发布的代码 (最少的必要文件,全面的文档)
关键创新
-
双层响应系统
- 先快速回答(<10秒)
- 根据请求进行详细分析
- 防止缓慢、压倒性的反应
-
人类现实约束
- 不建议凌晨2点出发
- 考虑工作时间、睡眠需求
- 实际时间窗口
-
双输出格式
- 终端用户彩色ANSI
- Claude Code响应的简单文本(+,o,*)
- 解决ANSI渲染限制
-
API处理稳健
- 使用ThreadPoolExecutor的并行请求
- While循环重试(不仅仅是2次)
- 智能并发减少(30→10个工人)
- 失败后的优雅降级
轨道
轨道1:构建MCP
这是一个完整的、可用于生产的MCP服务器,它:
- 展示有用的工具(地理编码、eta_series、static_map)
- 解决实际问题(通勤计划、会议日程安排)
- 适用于Claude Desktop和Claude Code
- 拥有出色的文档
- 已准备好发布和使用
高级用法
自定义时间范围
python cli/driveplot_fast.py \
--origin "Your Home" \
--destination "Your Work" \
--date 2025-11-20 \
--start 06:00 --end 10:00 \ # Morning only
--interval 30 \ # Every 30 min
--ascii --yes
不同的间隔
- 15分钟:详细分析(96个数据点,约4秒)
- 30分钟:平衡(48分,约2秒)
- 60分钟:快速概述(24分,约1秒)
将地图保存到输出/
python cli/driveplot_fast.py \
--origin "Berkeley, CA" \
--destination "San Francisco, CA" \
--date 2025-11-20 \
--ascii --save-map outputs/my_route.png --yes
安全
✅ API密钥受保护:
- 存储在
.env(忽略) - 从未致力于版本控制
- 单一事实来源
- 易于旋转
- 提供模板(
.env.example)
✅ 没有硬编码的秘密 代码库中的任何位置
✅ 最佳实践:
- 通过python dotenv实现环境变量
- 代码和配置的明确分离
- 综合.gitignore
未来改进
扩展思路:
- 添加Apple Maps支持(已为此构建)
- 历史数据跟踪(比较随时间变化的交通模式)
- 日历集成(自动建议出发时间)
- 多路线比较(A与B)
- 带Gradio的Web UI(用于Track 2提交)
许可证
MIT许可证 -自由使用!
这是MCP服务器的标准许可证。请随意:
- 用于商业项目
- 修改和重新分发
- 整合到闭源软件中
鸣谢
为 拥抱脸MCP黑客马拉松(轨道1)
使用的技术:
- FastMCP -MCP服务器框架
- 谷歌地图平台API -地理编码、方向、静态地图
- 犁 -终端绘图
- 富有的 -漂亮的终端输出
- 线程池执行器 -并行API请求
问题?
对于问题或疑问:
- 检查上面的故障排除部分
- 验证您的
.env文件设置正确 - 跑
./test.sh验证安装 - 检查云控制台中是否启用了Google Maps API