PointsYeah MCP Middleware Server
Provides tools for searching Hilton hotel award availability, retrieving property details, award calendars, recommendations, and geographic distribution through the PointsYeah API.
Provides tools for searching Marriott hotel award availability, retrieving property details, award calendars, recommendations, and geographic distribution through the PointsYeah API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PointsYeah MCP Middleware Serverfind business class award flights from SFO to Tokyo in June"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PointsYeah MCP Middleware Server
A secure, multi-tenant Model Context Protocol (MCP) middleware server designed to be hosted on Google Cloud Run. It exposes the complete PointsYeah Public API to AI agents (such as Claude Desktop, Cursor, and custom agentic systems) while strictly following web best practices for security, authorization, and rate limiting.
🌟 Key Architecture & Highlights
flowchart LR
subgraph Clients["MCP Clients"]
A["Claude Desktop / Cursor\n(Owner)"]
B["Team / External User\n(With Own API Key)"]
end
subgraph GCP["Google Cloud Run (Serverless)"]
M1["Security & Headers Middleware"]
M2["Rate Limiting (60 req/min)"]
M3["Server Token Auth Gate\n(Bearer / X-Server-API-Key)"]
APP["PointsYeah MCP Server\n(SSE: /sse, /messages)"]
Tools["10 Tools (Flights & Hotels)"]
end
subgraph Upstream["PointsYeah API"]
PY["https://ai-api.pointsyeah.com\n(40+ Airline & Hotel Programs)"]
end
A -->|Auth: Bearer ServerToken| M1
B -->|Auth: Bearer ServerToken\nX-PointsYeah-API-Key: UserKey| M1
M1 --> M2 --> M3 --> APP --> Tools
Tools -->|Resolves Key & Forwards| PY1. Multi-Tenancy & Credential Management
Zero Quota Leakage: PointsYeah enforces a daily quota (1,000 calls/day on premium). Other users can provide their own PointsYeah credentials, consuming their quota instead of yours.
Three Flexible Ways to Provide Upstream Keys:
Client HTTP Header:
X-PointsYeah-API-Key: <key>in MCP client configuration.Tool Argument:
pointsyeah_api_key: "<key>"directly in tool calls or prompts.Server Default:
DEFAULT_POINTSYEAH_API_KEYconfigured in Cloud Run for seamless single-user access by the server owner.
2. Security & Access Control
Authentication Gate: Only authorized clients with a valid server token can access the MCP endpoints. Requests without authorization are rejected with
HTTP 401 Unauthorized.Flexible Authentication Methods:
Authorization: Bearer <SERVER_API_KEY>X-Server-API-Key: <SERVER_API_KEY>Query Parameter:
?token=<SERVER_API_KEY>(for MCP clients without custom header support)
Multi-User Token Attributions: Supports multiple named tokens (e.g.
SERVER_API_KEYS=owner:token1,alice:token2) with timing-safe comparison (hmac.compare_digest).Abuse Prevention: Built-in sliding-window rate limiter (default: 60 requests/minute) prevents denial of service and runaway Cloud Run bills.
Web Security Standards: Strict security headers (
nosniff,DENYframes,HSTS,strict-origin), restricted CORS, non-root Docker user (appuser), and public/healthzendpoints for Cloud Run probes.
Related MCP server: PointsYeah MCP Server
🛠️ Available MCP Tools
✈️ Flights Suite
Tool | Description |
| Search real-time award flights across 40+ loyalty programs with cabin classes, stops, max points, taxes, bank transfer partners, and pagination. |
| Retrieve curated high-value award routes based on a departure airport or global availability. |
| Group award availability by arrival or departure airport for broad exploration or map displays. |
| Check total number of indexed award flights in the PointsYeah database. |
| Query min/max ranges for points, tax, and duration for a given route context. |
🏨 Hotels Suite
Tool | Description |
| Search hotel award availability across Hyatt, Marriott, IHG, Hilton, etc., with automatic city coordinate resolution (e.g. "Tokyo", "London", "New York"). |
| Retrieve complete property details (photos, amenities, address, phone, policies) by |
| 30-day award points and cash price calendar for a specific hotel property. |
| Curated hotel recommendations with high redemption values. |
| Geographic distribution of hotels grouped by country. |
🚀 Quick Start (Local Development)
1. Setup Environment
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt2. Configure Environment Variables
Copy .env.example to .env:
cp .env.example .envEdit .env:
# Upstream PointsYeah Key (from https://www.pointsyeah.com/developers/getting-started)
DEFAULT_POINTSYEAH_API_KEY=your_pointsyeah_api_key
# Secret token required to connect to this server
SERVER_API_KEY=my_secure_server_token_123453. Run Test Suite
pytest -v4. Start Local Server
python3 -m src.serverThe server will start at http://localhost:8080:
Health check:
http://localhost:8080/healthzMCP SSE endpoint:
http://localhost:8080/sse
☁️ Deploying to Google Cloud Run
Option 1: Automated Script (deploy.sh)
Ensure you have the gcloud CLI installed and authenticated (gcloud auth login). Then run:
./deploy.shThe script will:
Verify Google Cloud SDK and project.
Enable Cloud Run and Cloud Build APIs.
Prompt for or generate a secure
SERVER_API_KEY.Deploy the container to Cloud Run with automatic scaling (0 to 5 instances).
Output the live Cloud Run URL and ready-to-copy client configuration blocks.
Option 2: Direct gcloud CLI
# 1. Enable services
gcloud services enable run.googleapis.com cloudbuild.googleapis.com
# 2. Deploy from source
gcloud run deploy pointsyeah-mcp \
--source . \
--region us-central1 \
--platform managed \
--allow-unauthenticated \
--set-env-vars SERVER_API_KEY="your-secret-server-token" \
--set-env-vars DEFAULT_POINTSYEAH_API_KEY="your-pointsyeah-key" \
--memory 512Mi \
--cpu 1 \
--min-instances 0 \
--max-instances 5 \
--port 8080Note on
--allow-unauthenticated: Cloud Run's native IAM requires Google OAuth/OIDC tokens which standard desktop MCP clients do not support. Our application-level authentication middleware validates high-entropy Bearer tokens/API keys on every request.
💻 Client Configuration
Claude Desktop
Edit your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Server Owner Configuration:
{
"mcpServers": {
"pointsyeah": {
"url": "https://pointsyeah-mcp-xxxxxx-uc.a.run.app/sse",
"headers": {
"Authorization": "Bearer your-secret-server-token"
}
}
}
}Shared User Configuration (Providing Their Own PointsYeah Key):
{
"mcpServers": {
"pointsyeah": {
"url": "https://pointsyeah-mcp-xxxxxx-uc.a.run.app/sse",
"headers": {
"Authorization": "Bearer your-secret-server-token",
"X-PointsYeah-API-Key": "USER_OWN_POINTSYEAH_API_KEY"
}
}
}
}Cursor IDE
Add to .cursor/mcp.json or Global Settings:
{
"mcpServers": {
"pointsyeah": {
"url": "https://pointsyeah-mcp-xxxxxx-uc.a.run.app/sse",
"headers": {
"Authorization": "Bearer your-secret-server-token"
}
}
}
}Clients with URL-only Auth (e.g., query param)
If your MCP client does not support custom HTTP headers on SSE connections:
https://pointsyeah-mcp-xxxxxx-uc.a.run.app/sse?token=your-secret-server-token🔒 Security Best Practices Checklist
Timing-Safe Token Comparison: Protected against timing attacks via
hmac.compare_digest.Zero Credential Leakage: PointsYeah API keys and server tokens are never echoed in logs or error messages.
Least Privilege Container: Dockerfile executes as unprivileged user
appuser(UID 10001).DDoS & Cost Protection: In-memory rate limiting and Cloud Run max-instance capping (
--max-instances 5).Scale to Zero: Scales to 0 instances when not in use, incurring $0 base hosting costs.
Public Health Probes:
/healthzendpoint accessible by Cloud Run without exposing secrets.
This server cannot be deployed
Maintenance
Related MCP Connectors
Personal AI travel agent. Points optimization, live flight/hotel/award search, trip planning.
Flight search & booking for AI agents. 400+ airlines, $20-50 cheaper than OTAs.
Connect AI agents to 580+ APIs with OAuth or API-key auth. Hosted gateway; API pricing varies.
Book real hotel and resort stays from any AI agent: all-in pricing, hosted Stripe checkout, no key.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to plan trips by searching flights, accommodations, and activities, and managing itineraries collaboratively with role-based permissions.2001MIT
- FlicenseNot gradedqualityCmaintenanceEnables award flight search across 20+ airline programs using PointsYeah, with tools for comparing programs, estimating points value, and checking redemption deals.-

Dida Hotel MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to search and book hotels globally with real-time pricing and inventory from over 2 million properties.46MIT- AlicenseAqualityCmaintenanceEnables AI assistants to connect to the AwardMath travel points optimizer, turning wallet balances and travel goals into up to three verified, explainable award-booking plans with exact transfer steps, required points, and fees.3MIT