CATA Bus MCP Server
# ๐ CATA Bus MCP Server
A **Model Context Protocol (MCP)** server that provides live and static schedule data for the **Centre Area Transportation Authority (CATA)** bus system in State College, PA.
## ๐ Features
- **Real-time vehicle positions** - Track buses live on their routes
- **Trip updates** - Get delay information and predicted arrivals
- **Service alerts** - Stay informed about detours and disruptions
- **Static schedule data** - Access routes, stops, and scheduled times
- **Fast in-memory storage** - No database required, pure Python performance
## ๐ Quick Start
### Installation
```bash
# Clone the repository
git clone https://github.com/Pranav-Karra-3301/catabus-mcp.git
cd catabus-mcp
# Install dependencies
pip install -e .
```
### Running the Server
```bash
# Run in stdio mode (for MCP clients)
python -m catabus_mcp.server
# Run in HTTP mode (for testing)
python -m catabus_mcp.server --http
```
The HTTP server will be available at `http://localhost:7000`
## ๐ ๏ธ Available Tools
| Tool | Description | Parameters |
|------|-------------|------------|
| `list_routes` | Get all bus routes | None |
| `search_stops` | Find stops by name/ID | `query: string` |
| `next_arrivals` | Get upcoming arrivals at a stop | `stop_id: string`, `horizon_minutes?: int` |
| `vehicle_positions` | Track buses on a route | `route_id: string` |
| `trip_alerts` | Get service alerts | `route_id?: string` |
## ๐ป API Examples
### Using with cURL (HTTP mode)
```bash
# List all routes
curl -X POST http://localhost:7000/mcp \
-H "Content-Type: application/json" \
-d '{"method":"list_routes_tool","params":{}}'
# Search for stops
curl -X POST http://localhost:7000/mcp \
-H "Content-Type: application/json" \
-d '{"method":"search_stops_tool","params":{"query":"HUB"}}'
# Get next arrivals
curl -X POST http://localhost:7000/mcp \
-H "Content-Type: application/json" \
-d '{"method":"next_arrivals_tool","params":{"stop_id":"PSU_HUB","horizon_minutes":30}}'
```
### Integration with ChatGPT
1. Install the MCP client in ChatGPT
2. Add this server configuration:
```json
{
"name": "catabus",
"command": "python",
"args": ["-m", "catabus_mcp.server"],
"description": "CATA bus schedule and realtime data"
}
```
3. Ask questions like:
- "When is the next N route bus from the HUB?"
- "Are there any service alerts for the V route?"
- "Show me all buses currently on the W route"
### Integration with Claude Desktop
Add to your Claude Desktop configuration:
```json
{
"mcpServers": {
"catabus": {
"command": "python",
"args": ["-m", "catabus_mcp.server"]
}
}
}
```
## ๐งช Development
### Running Tests
```bash
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=catabus_mcp
```
### Code Quality
```bash
# Format code
black src/
# Lint
ruff check src/
# Type checking
mypy src/catabus_mcp/
```
## ๐ Data Sources
This server uses official CATA data feeds:
- **Static GTFS**: https://catabus.com/wp-content/uploads/google_transit.zip
- **GTFS-Realtime Vehicle Positions**: https://realtime.catabus.com/InfoPoint/GTFS-Realtime.ashx?Type=VehiclePosition
- **GTFS-Realtime Trip Updates**: https://realtime.catabus.com/InfoPoint/GTFS-Realtime.ashx?Type=TripUpdate
- **GTFS-Realtime Alerts**: https://realtime.catabus.com/InfoPoint/GTFS-Realtime.ashx?Type=Alert
Data is cached locally and updated:
- Static GTFS: Daily
- Realtime feeds: Every 15 seconds
## ๐๏ธ Architecture
```
catabus-mcp/
โโโ src/catabus_mcp/
โ โโโ ingest/ # Data loading and polling
โ โ โโโ static_loader.py
โ โ โโโ realtime_poll.py
โ โโโ tools/ # MCP tool implementations
โ โ โโโ list_routes.py
โ โ โโโ search_stops.py
โ โ โโโ next_arrivals.py
โ โ โโโ vehicle_positions.py
โ โ โโโ trip_alerts.py
โ โโโ server.py # FastMCP server
โโโ tests/ # Test suite
```
## โก Performance
- **Warm cache response time**: < 100ms for all queries
- **Memory usage**: ~50MB with full GTFS data loaded
- **Rate limiting**: Respects CATA's 10-second minimum between requests
## ๐ License
MIT License - See [LICENSE](LICENSE) file
## ๐ Attribution
Transit data provided by Centre Area Transportation Authority (CATA).
This project is not affiliated with or endorsed by CATA.
Built by [Pranav Karra](https://pranavkarra.me).
## ๐ค Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Write tests for new functionality
4. Ensure all tests pass
5. Submit a pull request
## ๐ Support
- **Issues**: [GitHub Issues](https://github.com/Pranav-Karra-3301/catabus-mcp/issues)
- **Discussions**: [GitHub Discussions](https://github.com/Pranav-Karra-3301/catabus-mcp/discussions)
## ๐ฏ Roadmap
- [ ] Add trip planning capabilities
- [ ] Support for accessibility features
- [ ] Historical data analysis
- [ ] Geospatial queries (nearest stop)
- [ ] Multi-agency support
## โ
Manual Acceptance Checklist
- [ ] `pip install -e .` completes without errors
- [ ] `python -m catabus_mcp.server` starts successfully
- [ ] Static GTFS data loads on startup
- [ ] Realtime polling begins automatically
- [ ] `list_routes_tool` returns CATA routes
- [ ] `search_stops_tool` finds stops by query
- [ ] `next_arrivals_tool` returns predictions with delays
- [ ] `vehicle_positions_tool` shows bus locations
- [ ] `trip_alerts_tool` displays active alerts
- [ ] Tests pass with `pytest`
- [ ] Type checking passes with `mypy`
---
**Version**: 0.1.0
**Status**: Production Ready
**Last Updated**: 2024TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose targeting different aspects of bus system data: health checks, data initialization, route listing, arrival queries, stop searches, alert retrieval, and vehicle tracking. There is no overlap in functionality that would cause agent confusion.
Most tools follow a consistent verb_noun pattern (e.g., list_routes_tool, search_stops_tool, trip_alerts_tool), but 'health_check' and 'initialize_data' deviate by lacking the '_tool' suffix. The naming is still readable and mostly predictable.
With 7 tools, this server is well-scoped for a bus transit system, covering essential operations like health monitoring, data management, route information, stop searches, arrival times, alerts, and vehicle positions without being overwhelming or insufficient.
The toolset provides comprehensive coverage for real-time bus system queries, including data initialization, route and stop information, arrivals, alerts, and vehicle tracking. A minor gap exists in lacking update or deletion tools for data management, but this is reasonable for a read-focused transit API.