GeoGuessr MCP Server
A Model Context Protocol (MCP) server for analyzing GeoGuessr game statistics with automatic API monitoring and dynamic schema adaptation.
TODO
Fix Docker username in compose files and env varsAdd authentication to MCP server to allow access only to specific usersFix Code Quality on tests not running
Fix Code Quality on black not formatting
Add auto monitoring for new endpoints and send notifications by email
๐ Key Features
Multi-User Support
Independent Sessions: Each API key gets its own GeoGuessr session
Multiple Accounts: Different users can access their own GeoGuessr accounts
Single Server: No need to deploy separate instances per user
Automatic Context: User sessions are automatically managed per request
Dynamic API Monitoring
Automatic endpoint discovery: Monitors GeoGuessr API endpoints daily
Schema change detection: Automatically detects when API response formats change
Self-adapting: Updates internal data models based on actual API responses
No hardcoded assumptions: Works even when GeoGuessr changes their API
Comprehensive Analysis
Profile and statistics retrieval
Game history and round-by-round analysis
Performance tracking and trend detection
Strategy recommendations based on gameplay patterns
Easy Deployment
Docker Compose for simple VPS deployment
Production-ready with nginx and SSL support
Persistent schema caching between restarts
๐ Quick Start
Prerequisites
Docker and Docker Compose
A GeoGuessr account
1. Clone and Configure
2. Deploy
That's it! The server is now running on port 8000.
3. Configure MCP Server Authentication (Optional)
To secure your MCP server with API key authentication, edit .env:
Generate a secure API key:
4. Connect to Claude
Add to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Without Authentication:
With Authentication:
๐ Authentication
The server supports two types of authentication with multi-user support:
MCP Server Authentication (Controls Access to the MCP Server)
Secures who can connect to your MCP server. When enabled, clients must provide a valid API key.
Multi-User Support: Each API key can have its own GeoGuessr session, allowing multiple users to use the same MCP server instance with their own accounts!
Enable in
Generate secure keys:
Configure Claude Desktop with authentication:
Multi-User Example:
GeoGuessr API Authentication (Access GeoGuessr Data)
The server also needs authentication to access GeoGuessr's API. In multi-user mode, each API key holder can login to their own GeoGuessr account:
Option 1: Login via Claude (Recommended)
Simply ask Claude:
"Login to GeoGuessr with email: myemail@example.com and password: mypassword"
Option 2: Environment Variable
Add to your .env file:
Option 3: Manual Cookie
Use the set_ncfa_cookie tool with a cookie extracted from your browser.
๐ฅ Multi-User Mode
The server supports multiple users, each with their own GeoGuessr account, using a single MCP server instance.
How It Works
API Keys: Each user gets a unique API key
Independent Sessions: Each API key has its own GeoGuessr login session
Automatic Routing: The server automatically routes requests to the correct user's session
No Interference: Users don't affect each other's sessions
Setup Example
1. Configure Multiple API Keys:
2. Restart Server:
3. Each User Connects:
4. Each User Logs In:
Alice asks Claude: "Login to GeoGuessr with my credentials"
Bob asks Claude: "Login to GeoGuessr with my credentials"
Sessions are completely independent!
Adding New Users
To add a new user to an existing deployment:
Edit
.envand add the new API key toMCP_API_KEYSRestart the server:
docker compose restartShare the new API key with the user
User configures their Claude Desktop with the API key
User logs in to their GeoGuessr account via Claude
The server restarts in ~2-3 seconds and all existing users remain logged in!
๐ Available Tools
Authentication
Tool | Description |
| Authenticate with email/password |
| End current session |
| Set authentication cookie manually |
| Check authentication status |
Profile & Stats
Tool | Description |
| Get your profile information |
| Get your game statistics |
| Get additional statistics |
| Get your achievements |
| Get combined profile data |
Games & Activity
Tool | Description |
| Get recent activity |
| Get recent games with details |
| Get specific game information |
| Get competitive season stats |
| Get daily challenge info |
Analysis
Tool | Description |
| Analyze performance trends |
| Comprehensive performance overview |
| Get personalized improvement tips |
API Monitoring
Tool | Description |
| Check all endpoint availability |
| Get schema for specific endpoint |
| List all known endpoints |
| Discover new API endpoints |
๐ Dynamic Schema System
The server automatically adapts to API changes:
How It Works
Daily Monitoring: The server checks all known endpoints every 24 hours
Schema Detection: Analyzes response structure, field types, and nesting
Change Detection: Computes schema hash to detect modifications
Persistence: Schemas are cached to disk and survive restarts
Dynamic Access: Tools return data with schema information for the LLM
Example: Exploring Unknown Endpoints
๐ญ Production Deployment
The server is available as a pre-built Docker image: nyxiumyuuki/geoguessr-mcp:latest
Method 1: Quick Deploy with Script
For VPS deployment with existing nginx-proxy-manager:
Method 2: Manual Docker Compose Deploy
Development/Testing Setup
Production Setup with nginx-proxy-manager
Configure SSL in nginx-proxy-manager:
Access admin panel:
http://your-vps-ip:81Add Proxy Host for your domain
Forward to:
geoguessr-mcp-server:8000Enable SSL with Let's Encrypt
๐ For detailed VPS deployment instructions, see
Method 3: Direct Docker Run
If you prefer not to use Docker Compose:
Environment Variables
Variable | Default | Description |
| - | GeoGuessr API authentication cookie |
| false | Enable MCP server authentication |
| - | Comma-separated API keys for MCP access |
| 8000 | Server port |
| streamable-http | MCP transport protocol |
| true | Enable API monitoring |
| 24 | Monitoring check interval (runs every 24h) |
| /app/data/schemas | Directory for schema persistence |
| INFO | Logging verbosity |
๐งช Development
Local Development
Project Structure
๐ค Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Add tests for new functionality
Submit a pull request
๐ License
MIT License - see LICENSE file for details.
โ ๏ธ Disclaimer
This project uses the unofficial GeoGuessr API which may change without notice. The dynamic schema system helps mitigate this, but some features may break if GeoGuessr makes significant API changes.
This project is not affiliated with GeoGuessr AB.