Skip to main content
Glama
gedin-eth

College Football MCP

by gedin-eth
README.md
# College Football MCP (cfb-mcp)

A Python-based Model Context Protocol (MCP) server that provides real-time college football game information, betting odds, and historical performance data for teams and players.

## Features

- **Live Game Scores & Odds**: Get real-time scores and betting odds for NCAA college football games
- **Player Statistics**: Retrieve last 5 games' stats for any player
- **Team Performance**: Get recent game results and team information
- **Next Game Odds**: Find upcoming games and their betting lines

## Quick Start

### Prerequisites

- Python 3.11+
- Docker (optional, for containerized deployment)
- API Keys:
  - [The Odds API](https://the-odds-api.com/) - for live scores and betting odds
  - [CollegeFootballData API](https://collegefootballdata.com/) - for team and player statistics

### Installation

1. Clone the repository:
```bash
git clone https://github.com/gedin-eth/cfb-mcp.git
cd cfb-mcp
```

2. Create a virtual environment:
```bash
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
```

3. Install dependencies:
```bash
pip install -r requirements.txt
```

4. Set up environment variables:
```bash
cp .env.example .env
# Edit .env and add your API keys
```

### Running the Server

```bash
uvicorn src.server:app --host 0.0.0.0 --port 8000
```

### Docker Deployment

Build the Docker image:
```bash
docker build -t cfb-mcp .
```

Run the container:
```bash
docker run -p 8000:8000 --env-file .env cfb-mcp
```

For VPS deployment, pull and run:
```bash
docker pull <your-registry>/cfb-mcp:latest
docker run -d -p 8000:8000 --env-file .env --name cfb-mcp cfb-mcp
```

## API Endpoints

The MCP server exposes the following functions via both MCP protocol (`/mcp/*`) and REST API (`/api/*`) endpoints:

### 1. `get_game_odds_and_score`
Get live game scores and betting odds for a specific matchup.

**POST** `/mcp/get_game_odds_and_score` or **GET** `/api/get_game_odds_and_score`

**Request:**
```json
{
  "team1": "Alabama",
  "team2": "Auburn"  // optional
}
```

**Response:**
```json
{
  "home_team": "Alabama",
  "away_team": "Auburn",
  "start_time": "2025-11-25T19:00:00Z",
  "status": "completed",
  "score": {
    "home": 28,
    "away": 14
  },
  "odds": {
    "spread": {...},
    "moneyline": {...},
    "over_under": {...}
  }
}
```

### 2. `get_recent_player_stats`
Get player's last 5 games statistics.

**POST** `/mcp/get_recent_player_stats` or **GET** `/api/get_recent_player_stats`

**Request:**
```json
{
  "player_name": "Jalen Milroe",
  "team": "Alabama"  // optional, for disambiguation
}
```

### 3. `get_team_recent_results`
Get team's last 5 game results.

**POST** `/mcp/get_team_recent_results` or **GET** `/api/get_team_recent_results`

**Request:**
```json
{
  "team": "Alabama"
}
```

### 4. `get_team_info`
Get team's current season overview including record and rankings.

**POST** `/mcp/get_team_info` or **GET** `/api/get_team_info`

**Request:**
```json
{
  "team": "Alabama"
}
```

### 5. `get_next_game_odds`
Get next scheduled game and betting odds for a team.

**POST** `/mcp/get_next_game_odds` or **GET** `/api/get_next_game_odds`

**Request:**
```json
{
  "team": "Alabama"
}
```

## Architecture

### Phase 1: MCP Server (Completed ✅)
- FastAPI-based REST API server
- 5 core functions for college football data
- Integration with The Odds API and CollegeFootballData API

### Phase 2: Full Web Application (In Progress)
- **Agent Service**: FastAPI chat service with LLM integration
- **Web UI**: Single-page chat interface (mobile-friendly)
- **Caddy**: Reverse proxy with automatic HTTPS
- **Docker Compose**: Multi-container orchestration

## Development

This project follows the Model Context Protocol standard for AI agent integration.

### Project Structure
```
cfb-mcp/
├── src/
│   ├── server.py          # FastAPI MCP server
│   ├── odds_api.py         # The Odds API client
│   └── cfbd_api.py         # CollegeFootballData API client
├── agent_service/          # Agent service (Phase 2)
├── web_ui/                # Web UI (Phase 2)
├── Dockerfile              # MCP server container
├── docker-compose.yml      # Multi-container setup (Phase 2)
├── Caddyfile              # Reverse proxy config (Phase 2)
└── requirements.txt       # Python dependencies
```

## Environment Variables

Create a `.env` file in the project root with the following variables:

```bash
# MCP Server API Keys
ODDS_API_KEY=your_odds_api_key
CFB_API_KEY=your_cfbd_api_key

# Agent Service Configuration
APP_TOKEN=choose-a-long-random-string-here
OPENAI_API_KEY=your_openai_api_key_here

# Optional: MCP Server URL (defaults to http://localhost:8000)
# MCP_SERVER_URL=http://localhost:8000
```

### Getting API Keys

1. **The Odds API**: Sign up at [the-odds-api.com](https://the-odds-api.com/)
2. **CollegeFootballData API**: Get a free key at [collegefootballdata.com](https://collegefootballdata.com/)
3. **OpenAI API**: Get your key from [platform.openai.com](https://platform.openai.com/)

## Architecture Overview

### System Components

```
┌─────────────┐
│   Web UI    │ (Static HTML/JS)
│  (nginx)    │
└──────┬──────┘
       │
       │ HTTPS
       │
┌──────▼──────┐
│    Caddy    │ (Reverse Proxy)
│  (HTTPS)    │
└──────┬──────┘
       │
   ┌───┴───┐
   │       │
┌──▼───┐ ┌─▼────┐
│ Web  │ │Agent │
│  UI  │ │Service│
└──────┘ └───┬──┘
             │
        ┌────▼────┐
        │   MCP   │
        │ Server  │
        └────┬────┘
             │
    ┌────────┴────────┐
    │                 │
┌───▼───┐      ┌───────▼──────┐
│ Odds  │      │  CFBD API    │
│  API  │      │              │
└───────┘      └──────────────┘
```

### Component Details

1. **MCP Server** (`src/`): FastAPI server exposing 5 core functions for college football data
2. **Agent Service** (`agent_service/`): FastAPI service that orchestrates LLM + MCP calls
3. **Web UI** (`web_ui/`): Single-page chat interface (mobile-friendly)
4. **Caddy**: Reverse proxy providing HTTPS and routing

## Deployment

### Quick Start with Docker Compose

1. **Set up environment variables:**
   ```bash
   cp .env.example .env
   # Edit .env and add your API keys
   ```

2. **Update Caddyfile:**
   Edit `Caddyfile` and replace `cfb.yourdomain.com` with your actual domain.

3. **Deploy:**
   ```bash
   docker compose up -d --build
   ```

4. **Access:**
   - Web UI: `https://cfb.yourdomain.com`
   - API: `https://cfb.yourdomain.com/api/*`

### Domain Setup for Caddy

1. **Point your domain** to your VPS IP address (A record)

2. **Ensure ports are open:**
   - Port 80 (HTTP)
   - Port 443 (HTTPS)

3. **Caddy will automatically:**
   - Obtain SSL certificate from Let's Encrypt
   - Renew certificates automatically
   - Handle HTTPS redirects

### Individual Service Deployment

#### MCP Server Only
```bash
docker build -t cfb-mcp .
docker run -p 8000:8000 --env-file .env cfb-mcp
```

#### Agent Service Only
```bash
cd agent_service
docker build -t cfb-agent .
docker run -p 8000:8000 --env-file ../.env cfb-agent
```

## Troubleshooting

### Common Issues

1. **"Missing Bearer token" error:**
   - Ensure `APP_TOKEN` is set in `.env`
   - Check that the token is being sent in the Authorization header

2. **"ODDS_API_KEY is not configured":**
   - Verify `.env` file exists and contains `ODDS_API_KEY`
   - Check that the MCP server container has access to the `.env` file

3. **Caddy certificate issues:**
   - Ensure domain DNS points to your server
   - Check that ports 80 and 443 are open
   - Verify Caddyfile domain matches your actual domain

4. **Agent service can't reach MCP server:**
   - Check `MCP_SERVER_URL` environment variable
   - Verify both services are on the same Docker network
   - Check service names in docker-compose.yml

5. **OpenAI API errors:**
   - Verify `OPENAI_API_KEY` is set correctly
   - Check API key has sufficient credits
   - Review OpenAI API rate limits

### Logs

View logs for all services:
```bash
docker compose logs -f
```

View logs for specific service:
```bash
docker compose logs -f agent
docker compose logs -f mcp-server
docker compose logs -f caddy
```

## Development

### Running Locally (without Docker)

1. **MCP Server:**
   ```bash
   cd /path/to/cfb-mcp
   source venv/bin/activate
   uvicorn src.server:app --host 0.0.0.0 --port 8000
   ```

2. **Agent Service:**
   ```bash
   cd agent_service
   python -m venv venv
   source venv/bin/activate
   pip install -r requirements.txt
   uvicorn main:app --host 0.0.0.0 --port 8001
   ```

3. **Web UI:**
   - Serve with any static file server, or use nginx locally
   - Update `API_BASE` in `index.html` to point to agent service

## License

MIT