Provides GitHub OAuth 2.0 authentication for secure user login and profile management, allowing personalized location storage and weather queries tied to GitHub user accounts
Weather MCP Server with GitHub OAuth & Location Management
This project demonstrates an advanced Model Context Protocol (MCP) server with GitHub OAuth authentication, personalized location management, and weather data retrieval using Open-Meteo's free API.
Features
š GitHub OAuth 2.0 Authentication: Secure authentication using GitHub Apps
š Personal Location Management: Save and manage custom location labels (e.g., "home", "office")
š¤ļø Smart Weather Queries: Check weather using saved labels or direct location names
š¾ SQLite Database: Persistent storage for users and their locations
š Free Weather API: Uses Open-Meteo API - no API key required!
š Streamable HTTP Transport: Modern HTTP transport with MCP SDK
š ļø Multiple Tools: Weather lookup, location management (add, list, delete), user info
š¤ User Profiles: Automatic user creation from GitHub profile data with profile retrieval
Prerequisites
Node.js (v18 or higher recommended)
GitHub Account
GitHub OAuth App (instructions below)
OpenAI API Key (optional, for the client example)
Setup
1. Install dependencies:
2. Create GitHub OAuth App:
Click "New OAuth App"
Fill in the application details:
Application name: Weather MCP Server (or your preferred name)
Homepage URL:
http://localhost:3000
Authorization callback URL:
http://localhost:3000/oauth/callback
Click "Register application"
Copy your Client ID
Click "Generate a new client secret" and copy it
3. Configure Environment Variables:
Edit .env
and add your GitHub OAuth credentials:
4. Start the MCP server:
The server will start on http://127.0.0.1:3000
5. Authenticate with GitHub:
Open your browser and visit:
http://localhost:3000/oauth/login
Click "Authorize" to connect with GitHub
Copy the access token displayed on the success page
Use this token in the Authorization header:
Bearer <your-token>
6. Configure Claude Desktop
Add the configuration to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Option A: Automatic OAuth (Recommended)
Claude Desktop will automatically discover the OAuth endpoints and open your browser for authentication. Just authorize with GitHub when prompted!
Option B: Manual Token
First get your token by visiting http://localhost:3000/oauth/login
, then replace YOUR_GITHUB_ACCESS_TOKEN
with your token.
Usage Examples
Once connected via Claude Desktop, you can:
Basic Weather Queries
"What is the weather like in San Francisco?"
"Tell me the current weather in Tokyo"
"How's the weather in Paris?"
Save Personal Locations
"Save my home location as New York"
"Add my office location as San Francisco"
"Save the gym location as 123 Main Street, Boston"
Query Using Saved Labels
"What's the weather at home?"
"How's the weather at the office?"
"Check the weather at the gym"
Manage Locations
"List all my saved locations"
"Show my locations"
"Delete my home location"
User Profile
"Who am I?"
"Show my profile"
"What's my GitHub username?"
How It Works
OAuth Flow: User authenticates via GitHub OAuth 2.0
Token Exchange: Server exchanges authorization code for access token
User Creation: Server creates or updates user profile from GitHub data
Authentication: Client sends Bearer token in Authorization header
Token Validation: Server validates token against SQLite database
Session Creation: Server creates authenticated session with user context
Tool Discovery: Client discovers available MCP tools from server
Tool Execution:
Weather queries resolve location labels to actual addresses
Location management stores data per-user in database
All operations are scoped to the authenticated user
Weather Data: Server fetches real-time weather from Open-Meteo API
Response: Results returned to client with user-specific context
Architecture
MCP Tools
1. get_current_weather
Fetches real-time weather data for any location or saved label.
Parameters:
location
(string): Location name or saved label (e.g., "New York", "home")unit
(enum): Temperature unit - "celsius" or "fahrenheit" (default: celsius)
Returns: Temperature, condition, humidity, wind speed, pressure, cloud cover
Special: Automatically resolves saved location labels to addresses
2. add_location
Save a location with a custom label for quick access.
Parameters:
label
(string): Custom label (e.g., "home", "office", "gym")location
(string): Actual location name or address
Returns: Confirmation message
Note: Replaces existing label if it already exists
3. list_locations
Display all saved locations for the authenticated user.
Parameters: None
Returns: List of all saved locations with their labels
4. delete_location
Remove a saved location by its label.
Parameters:
label
(string): Label of the location to delete
Returns: Confirmation or error message
5. get_user_info
Get information about the currently logged-in user.
Parameters: None
Returns: User profile with GitHub username, name, email, avatar URL, and user ID
Project Structure
Database Schema
Users Table
Locations Table
Security Features
GitHub OAuth 2.0: Industry-standard OAuth authentication flow
PKCE (RFC 7636): Proof Key for Code Exchange with S256 for public clients
Dynamic Client Registration (RFC 7591): Automatic client registration
State Parameter: CSRF protection with state verification
Bearer Token Authentication: All MCP endpoints require valid authentication
Token Validation: Access tokens validated against database
User Isolation: Each user can only access their own locations
Session Management: Secure session handling with user context
Database Constraints: Foreign key constraints ensure data integrity
Automatic Token Expiration: Token expiry tracking for enhanced security
Customization
Adding Custom MCP Tools
Open
server.js
Register a new tool after existing tools:
The tool will automatically be discovered by clients
API Endpoints
OAuth Discovery Endpoints (RFC 8414 & RFC 9728)
GET /.well-known/oauth-authorization-server - OAuth 2.0 Authorization Server Metadata
GET /.well-known/oauth-protected-resource - OAuth 2.0 Protected Resource Metadata
OAuth Endpoints (Standards-Compliant)
POST /oauth/register - Dynamic Client Registration (RFC 7591)
GET /oauth/authorize - OAuth 2.0 Authorization Endpoint
POST /oauth/token - OAuth 2.0 Token Endpoint
POST /oauth/revoke - OAuth 2.0 Token Revocation (RFC 7009)
GET /oauth/login - Manual OAuth flow (browser-based)
GET /oauth/callback - OAuth callback handler
GET /oauth/me - Returns current user info (requires authentication)
MCP Endpoints
POST /mcp - Main MCP endpoint for tool calls
GET /mcp - Server-Sent Events for notifications
DELETE /mcp - Session termination
Utility Endpoints
GET /health - Health check endpoint
Notes
Based on the Model Context Protocol (MCP) specification
Uses @modelcontextprotocol/sdk for MCP server implementation
Streamable HTTP transport: Modern HTTP transport with session management
SQLite Database: Lightweight, file-based database with better-sqlite3
GitHub OAuth 2.0: Secure authentication via GitHub Apps
Uses Open-Meteo API - free and open-source weather API
No API key required for weather data!
Per-user location management with database isolation
Automatic label resolution for convenient weather queries
User profiles automatically created from GitHub data
Logout / Revoke Access
To logout from OAuth when using Claude Desktop:
Option 1: Clear mcp-remote Cache
Option 2: Manual Token Revocation
Then clear the cache and restart Claude Desktop.
Troubleshooting
Token Expired
If you get authentication errors, your GitHub token may have expired:
Visit
http://localhost:3000/oauth/login
againGet a new access token
Update your Claude Desktop configuration with the new token
Testing with cURL
You can test the API directly with cURL:
References
This server cannot be installed
local-only server
The server can only run on the client's local machine because it depends on local resources.
Enables users to check weather conditions using Open-Meteo's free API with GitHub OAuth authentication and personalized location management. Users can save custom location labels (like 'home' or 'office') and query weather using these convenient shortcuts.