班加罗尔公交实时助手
提供对班加罗尔公共交通信息的实时访问,包括公交车跟踪、时刻表、路线和服务更新,以改善乘客体验。
服务介绍
班加罗尔 BMTC MCP 服务器
班加罗尔市交通公司 (BMTC) 公交服务的模型上下文协议 (MCP) 服务器实现。
架构
BMTC MCP 服务器遵循模块化、分层架构。该系统设计用于处理来自班加罗尔市交通公司的实时公交数据,并通过标准化 API 提供这些数据。
核心组件
- API 层:用于身份验证、路线、站点、公交车位置和预计到达时间 (ETA) 信息的 RESTful 端点
- 服务层:业务逻辑、数据转换和 ETA 计算
- 数据访问层:通过 Mongoose ODM 集成 MongoDB
- 缓存层:基于 Redis 的缓存,以提高性能
- 外部集成层:BMTC API 集成
功能
以下是您可以通过 MCP 客户端或聊天窗口找到的功能列表:
- 实时公交车位置跟踪
- 路线信息和调度
- 站点详情和预计到达时间 (ETA)
- 支持班加罗尔超过 2,200 条公交线路和 8,400 多个公交站点
- 身份验证和授权
- 数据缓存和优化
- 附近站点和公交车的地理空间查询
前提条件
- Node.js(v14 或更高版本)
- npm 或 yarn
- MongoDB
- Redis(可选,用于缓存)
- Git
安装与设置
方法 1:标准安装
- 克隆仓库
bash
git clone https://github.com/ajeetraina/bengaluru-bmtc-mcp.git
cd bengaluru-bmtc-mcp
- 安装依赖项
bash
npm install
- 配置环境变量
bash
cp .env.example .env
编辑 .env 文件以添加您的配置:
PORT=3000
NODE_ENV=development
MONGO_URI=mongodb://localhost:27017/bmtc-mcp
REDIS_URI=redis://localhost:6379
API_KEY=your_api_key_here
JWT_SECRET=your_jwt_secret_here
JWT_EXPIRES_IN=86400
BMTC_API_ENDPOINT=https://bmtc-api-endpoint.example
BMTC_API_KEY=your_bmtc_api_key_here
CACHE_DURATION=300
LOG_LEVEL=info
- 使用模拟数据填充数据库(可选)
bash
node src/scripts/seed.js
- 启动服务器
bash
npm start
对于带有自动重启功能的开发环境:
bash
npm run dev
方法 2:使用 Docker Compose
- 克隆仓库
bash
git clone https://github.com/ajeetraina/bengaluru-bmtc-mcp.git
cd bengaluru-bmtc-mcp
- 配置环境变量(可选)
您可以直接在 docker-compose.yml 文件中修改环境变量,或者创建一个 .env 文件:
bash
cp .env.example .env
- 构建并启动容器
bash
docker-compose up -d
这将启动三个容器:
bmtc-mcp-api:Node.js API 服务器bmtc-mcp-mongo:MongoDB 数据库bmtc-mcp-redis:Redis 缓存服务器
- 使用模拟数据填充数据库(可选)
bash
docker-compose exec api node src/scripts/seed.js
- 查看日志
bash
docker-compose logs -f api
- 停止容器
bash
docker-compose down
如果还需要删除卷:
bash
docker-compose down -v
使用 API
一旦服务器运行起来,您可以在以下地址访问 API:
http://localhost:3000/api/v1
有关 API 文档,请访问:
http://localhost:3000/api-docs
示例 API 端点
身份验证
POST /api/v1/auth/login
GET /api/v1/auth/me
路线
GET /api/v1/routes
GET /api/v1/routes/:routeId
GET /api/v1/routes/search?source=Kempegowda&destination=Electronic
站点
GET /api/v1/stops
GET /api/v1/stops/:stopId
GET /api/v1/stops/near?lat=12.9767&lng=77.5713&radius=500
GET /api/v1/stops/search?query=Lalbagh
公交车位置
GET /api/v1/bus-locations
GET /api/v1/bus-locations/:busId
GET /api/v1/bus-locations/near?lat=12.9767&lng=77.5713&radius=1000
预计到达时间
GET /api/v1/eta/:stopId
GET /api/v1/eta/:stopId/:routeId
API 密钥
JWT 密钥JWT 密钥用于签署认证令牌。生成一个安全的随机字符串:
bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
将此密钥添加到你的 .env 文件中:
JWT_SECRET=your_generated_secret_here
BMTC API 密钥
在开发过程中,你可以使用模拟数据而无需实际的 BMTC API 密钥:
BMTC_API_ENDPOINT=https://bmtc-api-endpoint.example
BMTC_API_KEY=your_bmtc_api_key_here
在生产环境中,你需要直接联系 BMTC 以请求正式的 API 访问权限。
开发
测试
运行测试:
bash
npm test
运行带有覆盖率的测试:
bash
npm run test:coverage
代码检查
检查代码风格:
bash
npm run lint
修复代码风格问题:
bash
npm run lint:fix
项目结构
bengaluru-bmtc-mcp/
├── .env.example # 环境变量模板
├── .eslintrc.json # ESLint 配置
├── .github/ # GitHub 配置
│ └── workflows/ # GitHub Actions 工作流
├── .gitignore # Git 忽略文件
├── CONTRIBUTING.md # 贡献指南
├── Dockerfile # Docker 配置
├── LICENSE # MIT 许可证
├── README.md # 项目文档
├── docker-compose.yml # Docker Compose 配置
├── docs/ # 文档
│ ├── api.md # API 文档
│ └── setup.md # 设置指南
├── jest.config.js # Jest 配置
├── package.json # 项目依赖
└── src/ # 源代码
├── config/ # 配置文件
├── controllers/ # 请求处理器
├── index.js # 应用程序入口点
├── middlewares/ # Express 中间件
├── models/ # MongoDB 模型
├── public/ # 静态文件
├── routes/ # API 路由
├── scripts/ # 实用脚本
├── services/ # 外部服务集成
├── tests/ # 测试文件
└── utils/ # 实用函数
贡献
请阅读 CONTRIBUTING.md 以了解我们的行为准则以及提交拉取请求的过程。
许可证
该项目根据 MIT 许可证许可 - 详情请参阅 LICENSE 文件。