松本巴士MCP服务器
这是提供松本市社区巴士信息的Model Context Protocol(MCP)服务器。
概要
该MCP服务器利用松本市发布的GTFS-JP格式的公交信息,使大型语言模型(LLM)能够用自然语言查询和提供公交信息,为游客和市民高效利用公交提供支持。
特点
- 公交站查询按名称的部分匹配搜索
- 查询下一班公交车获取指定公交站下一班车的发车时间
- 搜索附近公交站搜索离GPS坐标最近的公交站
- 路线信息路线详情及途经公交站一览
- 自动更新GTFS数据的定期自动更新
安装
必要条件
- Python 3.10及以上版本
- pip
设置
# リポジトリのクローン
git clone https://github.com/Takamasa045/matsumoto-buss-mcp.git
cd matsumoto-buss-mcp
# 依存関係のインストール
pip install -e .使用方法
作为MCP服务器启动
python -m matsumoto_bus_mcpMCP配置文件
若要在Claude Desktop或其他MCP客户端中使用,请在配置文件中添加以下内容:
{
"mcpServers": {
"matsumoto-bus": {
"command": "python",
"args": ["-m", "matsumoto_bus_mcp"],
"cwd": "/path/to/matsumoto-buss-mcp"
}
}
}可用的工具
1. 搜索公交站
按名称搜索公交站(可部分匹配)。
参数:
stop_name(字符串,必填):公交车站名limit(整数,可选):最大返回数量(默认:10)
例:
{
"stop_name": "松本駅",
"limit": 5
}2. 获取下一班出发信息
搜索从指定公交站出发的下一班公交车,出发时间需在指定时间之后。
参数:
stop_id(字符串,必填):公交站IDdeparture_time(字符串,可选):基准时间(ISO 8601格式)limit(整数,可选):返回条数(默认:5)route_filter(string, 选项): 路线名过滤器
例:
{
"stop_id": "STOP_001",
"limit": 3
}3. 查找附近站点
搜索离指定坐标最近的公交站。
参数:
latitude(数字,必填):纬度longitude(数字,必填):经度radius(整数,可选):搜索半径(米,默认:500)limit(integer, 可选): 最大返回数量(默认: 5)
例:
{
"latitude": 36.2380,
"longitude": 137.9723,
"radius": 1000
}4. 获取路线信息
获取线路的详细信息和途经站点一览。
参数:
route_id(string, 必填): 路线IDdirection(整数,可选):方向(0 或 1)
例:
{
"route_id": "ROUTE_001",
"direction": 0
}5. 列出所有路由
获取所有正在运营的线路一览。
参数: 无
数据源
- 原始数据: GTFS数据门户
- 许可证CC-BY 4.0(松本市开放数据使用协议)
- 更新频率遵循松本市的更新时间安排
技术栈
- MCP SDK(MCP软件开发工具包)模型上下文协议实现
- 数据库SQLite
- GTFS处理Python标准库
- 地理计算使用Haversine公式计算距离
项目结构
matsumoto-buss-mcp/
├── src/
│ └── matsumoto_bus_mcp/
│ ├── __init__.py
│ ├── __main__.py
│ ├── server.py # MCPサーバーメイン
│ ├── config.py # 設定管理
│ ├── database.py # データベース管理
│ ├── gtfs_loader.py # GTFSデータローダー
│ └── bus_service.py # バス情報検索サービス
├── data/ # データディレクトリ
├── logs/ # ログディレクトリ
├── pyproject.toml # プロジェクト設定
└── README.md环境变量
MATSUMOTO_GTFS_URLGTFS数据下载URL(默认:gtfs-data.jp)LOG_LEVEL日志级别(DEBUG/INFO/WARNING/ERROR,默认:INFO)
限制条件
- 不包含实时位置信息(未支持GTFS实时数据)
- 无法提供延误信息
- 数据更新取决于松本市的公开时间
许可证
麻省理工学院许可证(MIT License)
数据来源:松本市开放数据(CC-BY 4.0)
贡献
欢迎提交拉取请求。如需进行重大更改,请先打开议题讨论更改内容。
支持
如出现问题然后做汇报。
