335 lines
No EOL
9.6 KiB
Markdown
335 lines
No EOL
9.6 KiB
Markdown
# GeoGuessr MCP Server
|
|
|
|
A Model Context Protocol (MCP) server for analyzing your GeoGuessr account data. This server allows Claude AI to access and analyze your GeoGuessr statistics, game history, achievements, and more.
|
|
|
|
## Authentication Options
|
|
|
|
The server supports **three authentication methods**:
|
|
|
|
1. **Login with credentials** (Recommended) - Use the `login` tool with your GeoGuessr email and password
|
|
2. **Manual cookie** - Use the `set_ncfa_cookie` tool with a cookie extracted from your browser
|
|
3. **Environment variable** - Set `GEOGUESSR_NCFA_COOKIE` for server-wide default authentication
|
|
|
|
### Using Login (Easiest)
|
|
|
|
Simply ask Claude to login:
|
|
```
|
|
"Login to GeoGuessr with email: myemail@example.com and password: mypassword"
|
|
```
|
|
|
|
The server will authenticate with GeoGuessr and create a session. Your credentials are only used once to obtain an authentication token - they are **not stored** on the server.
|
|
|
|
### Security Notes
|
|
|
|
- Credentials are sent directly to GeoGuessr's official API over HTTPS
|
|
- Session tokens are stored in memory only (lost on server restart)
|
|
- For persistent authentication, use the environment variable method
|
|
- Always use HTTPS in production to protect credentials in transit
|
|
|
|
## Features
|
|
|
|
### Authentication Tools
|
|
- **login** - Authenticate with email/password
|
|
- **logout** - End the current session
|
|
- **set_ncfa_cookie** - Set authentication cookie manually
|
|
- **set_session_token** - Restore a previous session
|
|
- **get_auth_status** - Check current authentication status
|
|
|
|
### Profile & Stats
|
|
- **get_my_profile** - Get your user profile information
|
|
- **get_my_stats** - Get detailed statistics displayed on your profile
|
|
- **get_extended_stats** - Get additional stats not shown on profile
|
|
- **get_my_achievements** - Get all your achievements
|
|
- **get_my_trophies** - Get your trophy collection
|
|
- **get_trophy_case** - Get your displayed trophy case
|
|
|
|
### Games & Activity
|
|
- **get_activity_feed** - Get recent activity (games, achievements, etc.)
|
|
- **get_game_details** - Get detailed info about a specific game
|
|
- **get_unfinished_games** - Get games you haven't completed
|
|
- **get_streak_game** - Get country streak game details
|
|
- **analyze_recent_games** - Analyze your recent games with statistics
|
|
|
|
### Competitive Modes
|
|
- **get_battle_royale_game** - Get Battle Royale game stats
|
|
- **get_duel_game** - Get duel game information
|
|
- **get_game_lobby** - Get lobby info with player stats
|
|
- **get_current_season_stats** - Get current season statistics
|
|
- **get_season_game_info** - Get season info for specific game modes
|
|
- **get_tournaments** - Get tournament information
|
|
|
|
### Challenges
|
|
- **get_daily_challenge** - Get today's or previous daily challenges
|
|
- **get_challenge_details** - Get details about a specific challenge
|
|
|
|
### Social
|
|
- **get_friends** - Get your friends list
|
|
- **get_friends_summary** - Get friends with requests and recommendations
|
|
- **get_notifications** - Get your notifications
|
|
- **search_user** - Search for other players
|
|
|
|
### Maps
|
|
- **get_my_maps** - Get maps you've created
|
|
- **get_liked_maps** - Get maps you've liked
|
|
- **get_map_info** - Get info about any map
|
|
- **get_popular_maps** - Get popular/featured/official maps
|
|
- **get_personalized_maps** - Get map recommendations
|
|
- **get_map_scores** - Get high scores for a map
|
|
|
|
### Explorer & Progress
|
|
- **get_explorer_progress** - Get your explorer mode progress
|
|
- **get_objectives** - Get current objectives
|
|
- **get_unclaimed_objectives** - Get rewards to claim
|
|
- **get_unclaimed_badges** - Get badges to claim
|
|
|
|
### Analysis
|
|
- **get_performance_summary** - Get comprehensive performance overview
|
|
|
|
## Prerequisites
|
|
|
|
- Docker and Docker Compose installed on your VPS
|
|
- A GeoGuessr account (Pro subscription recommended for full API access)
|
|
- Your GeoGuessr `_ncfa` authentication cookie
|
|
|
|
## Quick Start
|
|
|
|
### 1. Clone or copy the files to your VPS
|
|
|
|
```bash
|
|
mkdir -p ~/geoguessr-mcp
|
|
cd ~/geoguessr-mcp
|
|
# Copy all the files here
|
|
```
|
|
|
|
### 2. Build and run (no configuration required!)
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
That's it! The server now supports login via credentials, so you don't need to configure anything upfront.
|
|
|
|
### 3. (Optional) Configure default authentication
|
|
|
|
If you want server-wide default authentication without logging in each time:
|
|
|
|
#### Option A: Get your GeoGuessr authentication cookie
|
|
|
|
1. Log in to [GeoGuessr](https://www.geoguessr.com) in your browser
|
|
2. Open Developer Tools (F12 or Ctrl+Shift+I)
|
|
3. Go to the **Application** tab (Chrome) or **Storage** tab (Firefox)
|
|
4. Under **Cookies**, find `www.geoguessr.com`
|
|
5. Look for the cookie named `_ncfa`
|
|
6. Copy its value
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
nano .env # Add your cookie
|
|
```
|
|
|
|
```env
|
|
GEOGUESSR_NCFA_COOKIE=your_actual_cookie_value_here
|
|
```
|
|
|
|
#### Option B: Just use login when connected
|
|
|
|
When connected to Claude, simply say:
|
|
> "Login to GeoGuessr with my email and password"
|
|
|
|
Claude will prompt you for credentials and authenticate.
|
|
|
|
### 4. Restart if you added environment variables
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
### 5. Verify it's running
|
|
|
|
```bash
|
|
docker compose logs -f
|
|
```
|
|
|
|
You should see:
|
|
```
|
|
Starting GeoGuessr MCP Server on 0.0.0.0:8000 with streamable-http transport
|
|
```
|
|
|
|
## Connecting to Claude
|
|
|
|
### Claude Desktop (macOS/Windows)
|
|
|
|
Add to your Claude Desktop configuration file:
|
|
|
|
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"geoguessr": {
|
|
"type": "streamable-http",
|
|
"url": "http://YOUR_VPS_IP:8000/mcp"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### VS Code with Copilot
|
|
|
|
1. Open VS Code
|
|
2. Run the command: `MCP: Add Server`
|
|
3. Choose "HTTP (Streamable HTTP)" as the transport
|
|
4. Enter URL: `http://YOUR_VPS_IP:8000/mcp`
|
|
|
|
### Claude.ai (if MCP support is enabled)
|
|
|
|
Add the server through Claude.ai's integrations settings with:
|
|
- URL: `http://YOUR_VPS_IP:8000/mcp`
|
|
- Transport: Streamable HTTP
|
|
|
|
## Using with Claude
|
|
|
|
Once connected, you can ask Claude questions like:
|
|
|
|
**First, authenticate (if not using environment variable):**
|
|
- "Login to GeoGuessr with email: myemail@example.com password: mypassword"
|
|
- "Check my GeoGuessr authentication status"
|
|
|
|
**Then analyze your data:**
|
|
- "Show me my GeoGuessr profile and stats"
|
|
- "Analyze my last 10 games and tell me how I'm doing"
|
|
- "What achievements have I unlocked?"
|
|
- "How am I doing in the current competitive season?"
|
|
- "Show me my activity feed from the last week"
|
|
- "What maps have I liked?"
|
|
- "Search for a player named [username]"
|
|
- "Get the details of my last Battle Royale game"
|
|
|
|
**When done (optional):**
|
|
- "Logout from GeoGuessr"
|
|
|
|
## Production Deployment
|
|
|
|
### Adding SSL with Nginx (Recommended)
|
|
|
|
For production, you should add SSL. Create an `nginx.conf`:
|
|
|
|
```nginx
|
|
events {
|
|
worker_connections 1024;
|
|
}
|
|
|
|
http {
|
|
upstream mcp_server {
|
|
server geoguessr-mcp:8000;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name your-domain.com;
|
|
return 301 https://$server_name$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name your-domain.com;
|
|
|
|
ssl_certificate /etc/nginx/ssl/fullchain.pem;
|
|
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
|
|
|
|
location / {
|
|
proxy_pass http://mcp_server;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 86400;
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Adding API Key Authentication
|
|
|
|
For additional security, you can add API key authentication. Modify the server.py to check for an `x-api-key` header.
|
|
|
|
### Firewall Configuration
|
|
|
|
```bash
|
|
# Allow only specific IPs or use a firewall
|
|
sudo ufw allow from YOUR_IP to any port 8000
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "GEOGUESSR_NCFA_COOKIE environment variable not set"
|
|
|
|
Make sure your `.env` file exists and contains the cookie:
|
|
```bash
|
|
cat .env | grep GEOGUESSR
|
|
```
|
|
|
|
### Cookie expired
|
|
|
|
GeoGuessr cookies expire periodically. If API calls start failing, get a fresh cookie from your browser.
|
|
|
|
### Connection refused
|
|
|
|
1. Check if the container is running: `docker compose ps`
|
|
2. Check logs: `docker compose logs geoguessr-mcp`
|
|
3. Verify the port is exposed: `docker port geoguessr-mcp-server`
|
|
|
|
### API rate limiting
|
|
|
|
GeoGuessr may rate-limit excessive API calls. Space out requests if you're hitting limits.
|
|
|
|
## Cookie Security
|
|
|
|
⚠️ **Important Security Notes:**
|
|
|
|
1. The `_ncfa` cookie provides full access to your GeoGuessr account
|
|
2. Never share your `.env` file or commit it to version control
|
|
3. Consider running the server on a private network
|
|
4. Use SSL in production
|
|
5. Regularly rotate your cookie
|
|
|
|
## Development
|
|
|
|
To run locally without Docker:
|
|
|
|
```bash
|
|
# Create virtual environment
|
|
python -m venv venv
|
|
source venv/bin/activate # or `venv\Scripts\activate` on Windows
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
|
|
# Set environment variable
|
|
export GEOGUESSR_NCFA_COOKIE="your_cookie_here"
|
|
|
|
# Run the server
|
|
python server.py
|
|
```
|
|
|
|
## API Reference
|
|
|
|
The server uses the unofficial GeoGuessr API. Key endpoints:
|
|
|
|
- `https://www.geoguessr.com/api/v3/` - Main API (v3)
|
|
- `https://www.geoguessr.com/api/v4/` - Newer API (v4)
|
|
- `https://game-server.geoguessr.com/api/` - Game server API
|
|
|
|
Note: This is an unofficial API and may change without notice.
|
|
|
|
## License
|
|
|
|
MIT License - Feel free to modify and distribute.
|
|
|
|
## Disclaimer
|
|
|
|
This project is not affiliated with, endorsed by, or connected to GeoGuessr AB. Use at your own risk and in accordance with GeoGuessr's Terms of Service. |