Skip to main content
Glama
Pranav-Karra-3301

CATA Bus MCP Server

README.md
# ๐ŸšŒ 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**: 2024

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityStale
ResponsivenessNo issues