这是一个提供给Claude与Geotab ACE AI服务交互工具的MCP(模型上下文协议)服务器。此服务器使Claude能够询问车队数据并获取结构化的响应,包括数据集。
注意:这是由Geotab的Felipe Hoffa(https://www.linkedin.com/in/hoffa)发起的一个实验性项目。没有官方支持,但我们欢迎您通过GitHub问题反馈。
uv sync
在项目目录中创建一个.env文件:
单个账户:
GEOTAB_API_USERNAME=your_username
GEOTAB_API_PASSWORD=your_password
GEOTAB_API_DATABASE=your_database_name
# GEOTAB_API_URL=https://alpha.geotab.com/apiv1 # 可选:用于访问alpha.geotab.com
多个账户:
GEOTAB_ACCOUNT_1_NAME=fleet1
GEOTAB_ACCOUNT_1_USERNAME=user1@example.com
GEOTAB_ACCOUNT_1_PASSWORD=secret1
GEOTAB_ACCOUNT_1_DATABASE=db1
GEOTAB_ACCOUNT_2_NAME=fleet2
GEOTAB_ACCOUNT_2_USERNAME=user2@example.com
GEOTAB_ACCOUNT_2_PASSWORD=secret2
GEOTAB_ACCOUNT_2_DATABASE=db2
uv run python geotab_ace.py --test
添加到您的Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"geotab": {
"command": "uv",
"args": ["run", "python", "/absolute/path/to/geotab_mcp_server.py"]
}
}
}
或者使用已安装的脚本:
{
"mcpServers": {
"geotab": {
"command": "uv",
"args": ["run", "geotab-mcp-server"],
"cwd": "/absolute/path/to/project"
}
}
}
服务器将自动从您的.env文件加载凭证。
geotab_ask_question提问并等待完整的响应(默认最多60秒)。
示例:"上周有多少辆车是活跃的?"
geotab_start_query_async启动可能需要几分钟才能处理的复杂查询。立即返回跟踪ID。
用途:复杂分析、大量数据导出、多步骤分析
geotab_check_status使用跟踪ID检查异步查询的进度。
geotab_get_results从已完成的查询中检索完整结果,包括完整数据集。
geotab_test_connection测试API连接性和认证——对于故障排除很有用。
geotab_debug_query获取关于查询响应结构的详细调试信息。
geotab_query_duckdb在缓存在DuckDB中的大型数据集上执行SQL查询。当Ace返回超过200行的数据时,数据会被自动加载到DuckDB中,而不是发送给Claude。
示例:"使用以下SQL查询缓存的行程数据:SELECT driver_id, COUNT(*) as trips FROM ace_123_456 GROUP BY driver_id ORDER BY trips DESC LIMIT 10"
geotab_list_cached_datasets列出当前缓存在DuckDB中的所有数据集及其元数据,包括行数、列名和表名。
示例:"显示缓存在DuckDB中的数据集"
geotab_list_accounts列出所有已配置的Geotab账户。显示哪些账户可用以及哪个是默认账户。
示例:"列出我的Geotab账户"
所有查询工具接受一个可选的account参数来指定要使用的账户:
使用fleet2账户提问Geotab:"我们有多少辆车?"
如果未指定账户,则使用默认账户(多账户设置中的第一个账户,或单账户设置中的“默认”账户)。
当Ace返回包含超过200行的数据集时,而不是将所有这些数据发送给Claude,MCP服务器:
这种方法:
示例工作流程:
用户:"获取上个月的所有行程"
→ Ace返回10,000行
→ 服务器将其缓存到DuckDB作为表'ace_chat123_msg456'
→ Claude看到:元数据+20行样本+操作说明
用户:"按行程次数显示前10位司机"
→ Claude查询:SELECT driver_id, COUNT(*) as trips FROM ace_chat123_msg456 GROUP BY driver_id ORDER BY trips DESC LIMIT 10
→ 立即返回聚合结果
提问Geotab:"这个月我们的总里程是多少?"
启动复杂的Geotab分析:"生成过去三个月内所有车辆的详细燃油效率报告,按司机和路线细分"
[等待几分钟后:]
检查聊天ID [chat_id] 和消息组ID [message_group_id] 的Geotab查询状态
从聊天ID [chat_id] 和消息组ID [message_group_id] 获取完整结果
测试我的Geotab连接
| 变量 | 描述 | 是否必需 |
|---|---|---|
GEOTAB_API_USERNAME | 您的Geotab用户名 | 是 |
GEOTAB_API_PASSWORD | 您的Geotab密码 | 是 |
GEOTAB_API_DATABASE | 您的Geotab数据库名称 | 是 |
GEOTAB_API_URL | Geotab API端点URL(默认:https://my.geotab.com/apiv1) | 否 |
GEOTAB_DRIVER_PRIVACY_MODE | 在结果中屏蔽司机姓名(默认:true) | 否 |
为每个账户使用编号的环境变量:
| 变量 | 描述 | 是否必需 |
|---|---|---|
GEOTAB_ACCOUNT_N_NAME | 账户的友好名称(例如,“fleet1”) | 是 |
GEOTAB_ACCOUNT_N_USERNAME | 账户N的Geotab用户名 | 是 |
GEOTAB_ACCOUNT_N_PASSWORD | 账户N的Geotab密码 | 是 |
GEOTAB_ACCOUNT_N_DATABASE | 账户N的Geotab数据库名称 | 是 |
其中N是1, 2, 3等。第一个账户(N=1)成为默认账户。
默认情况下,服务器会自动从查询结果中屏蔽驾驶员姓名信息,以保护隐私。启用后,任何名为DisplayName、Display Name、LastName、Last Name、FirstName或First Name的列都将被替换为*。
要禁用此功能:
GEOTAB_DRIVER_PRIVACY_MODE=false
该功能默认启用,并在预览和完整数据集下载中屏蔽驾驶员姓名。
重要限制:此功能旨在防止意外泄露驾驶员姓名。它不是安全边界,无法阻止:
为了真正保护数据,应在Geotab API或数据库级别实施适当访问控制。此功能为意外泄露提供了有用的保护网,而非安全保证。
您可以设置系统环境变量,而不是使用.env文件:
macOS/Linux:
export GEOTAB_API_USERNAME="your_username"
export GEOTAB_API_PASSWORD="your_password"
export GEOTAB_API_DATABASE="your_database"
Windows:
setx GEOTAB_API_USERNAME "your_username"
setx GEOTAB_API_PASSWORD "your_password"
setx GEOTAB_API_DATABASE "your_database"
.env文件设置严格的文件权限:chmod 600 .env"认证失败"
.env文件中的凭证是否正确"未找到模块'geotab_ace'"
uv run python -c "import geotab_ace"uv sync以安装依赖项"连接超时"
MCP服务器无法启动
uv run python geotab_mcp_server.py test以诊断问题直接测试工具:
# 测试连接
uv run python geotab_ace.py --test
# 提问简单问题
uv run python geotab_ace.py --question "我们有多少辆车?"
# 启用详细日志
uv run python geotab_ace.py --question "显示活跃车辆" --verbose
测试MCP服务器:
uv run python geotab_mcp_server.py test
geotab-mcp-server/
├── geotab_ace.py # 核心API客户端库
├── geotab_mcp_server.py # MCP服务器实现
├── pyproject.toml # 项目配置和依赖项
├── .env # 您的凭证(创建此文件)
└── README.md # 此文件
此项目使用uv进行现代Python依赖管理。以下是使用方法:
# macOS(使用Homebrew - 推荐)
brew install uv
# macOS/Linux(使用curl)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# 或者使用pip
pip install uv
# 安装所有依赖项
uv sync
# 直接运行服务器
uv run geotab-mcp-server
# 带参数运行
uv run python geotab_ace.py --test
# 添加新依赖项
uv add some-package
# 更新依赖项
uv sync --upgrade
此项目使用pyproject.toml进行依赖管理。关键依赖项:
所有依赖项都由uv sync自动管理。
# 测试核心库
uv run python geotab_ace.py --test --verbose
# 测试MCP服务器
uv run python geotab_mcp_server.py test
通过设置日志级别启用详细日志:
export GEOTAB_LOG_LEVEL=DEBUG
或者修改代码中的日志配置。
查看docs/improvements.md了解计划改进和未来功能。我们欢迎贡献和反馈!
对于以下问题: