Skip to main content
Glama
nickytonline

Pimp My Ride MCP Server

by nickytonline
PRD.md5.38 kB
# 🏎️ Pimp My Ride — MCP Server PRD ## Overview **Project:** Pimp My Ride **Component:** MCP (Model Context Protocol) Server **Goal:** Provide a production-ready MCP server that exposes car configuration tools via the MCP interface to demonstrate LLM tool-calling, state persistence, and Pomerium-based authentication. The MCP server can be used by any application (such as the **Pomeranian Kart** racing game) — demonstrating car configuration and customization integrated with Pomerium for authentication and compatible with ChatGPT, Claude, and other MCP clients. --- ## Objectives - Enable LLMs and applications to create, update, and manage car builds using natural language commands. - Support persistent storage (default SQLite) through a clean KV abstraction for easy backend swapping. - Provide tool endpoints for: - Car configuration (color, wheels, decals, body kits, spoilers, etc.) - Driver persona selection and updates - Build saving/loading - Randomized builds and upgrade suggestions - (Phase 2) Race simulation and leaderboard integration - Support Pomerium authentication and identity propagation. --- ## Scope ### In Scope - Full MCP server implementation using TypeScript (based on `mcp-typescript-template`) - SQLite-backed KV storage (default, factory pattern) - Authentication via Pomerium headers - Defined tool schemas for car configuration and driver profiles - Clean API boundaries via MCP tool calls ### Out of Scope (Phase 1) - Leaderboards - Multiplayer race logic - Image rendering engine (stubbed with IDs only) - Advanced auth UI or user management --- ## Architecture ### Stack - **Language:** TypeScript - **Framework:** `mcp-typescript-template` - **Database:** SQLite (default), pluggable KV interface - **Auth:** Pomerium-proxied requests (headers for identity) - **Schema Validation:** Zod ### Data Flow 1. User interacts with OpenAI App (frontend). 2. The App’s LLM interprets user intent and calls MCP tools (e.g. `updateCarConfig`). 3. MCP server applies updates via KV storage. 4. Updated build state returned to app for visualization. ### Key Components - `src/tools/` — all MCP tool definitions - `src/storage/` — KV interface and SQLite adapter - `src/domain/` — car config validation and diff utilities - `src/auth/` — Pomerium header resolution --- ## Data Model ### Car Configuration Attributes: - color, secondaryColor - wheels, bodyKit, decal - spoiler, exhaust, underglow - performance (power, grip, aero, weight) ### Driver Profile - persona (`CoolCalmCollected`, `RoadRage`, etc.) - nickname - derived perks ### Storage Layout - Namespace: `builds` - Key: `${userId}:${buildId}` - Value: JSON-encoded `Build` (car + driver) --- ## KV Interface (Storage Abstraction) ### Features - Namespaces - TTL support - CAS versioning - Pagination via cursor - JSON helpers ### Default Implementation - `SQLiteKV` using `better-sqlite3` - Table schema: ```sql CREATE TABLE kv ( ns TEXT, key TEXT, value BLOB, content_type TEXT, version INTEGER, expires_at INTEGER, updated_at INTEGER, PRIMARY KEY (ns, key) ); ``` ### Future Adapters - RedisKV, PostgresKV, DynamoKV --- ## MCP Tools | Tool | Purpose | |------|----------| | `getCurrentBuild` | Retrieve or create user’s active build | | `updateCarConfig` | Patch car attributes | | `updateDriverProfile` | Set driver persona and nickname | | `saveBuild` | Save active build under a name | | `loadBuild` | Load saved build | | `listBuilds` | List all user builds | | `randomizeBuild` | Generate a random styled build | | `suggestUpgrades` | Recommend upgrades based on goals | | `generateLivery` | Suggest color/decal combos | | `previewSnapshot` | Stub for image preview ID | | (Phase 2) `simulateRace`, `getLeaderboard` | Race results and rankings | --- ## Identity & Auth - Trust Pomerium headers: `X-Email`, `X-User`, `X-User-Id`, or JWT claims. - Derive `userId` from Pomerium subject; fallback to anonymous (dev mode). - No session storage required. --- ## Error Handling | Code | Meaning | |------|----------| | `VALIDATION` | Input validation failed | | `UNAUTHORIZED` | Missing or invalid identity | | `CONFLICT` | Build name or version conflict | | `NOT_FOUND` | Build not found | | `RATE_LIMIT` | Too many requests | --- ## Rate Limits - 60 tool calls/min per user - 10 preview requests/min --- ## Phase Plan ### Phase 1 – Core Builder - MCP server skeleton - SQLiteKV + factory - Car + Driver tools - Auth integration ### Phase 2 – Assist & Race - Randomize, Suggest, Livery tools - Stub race simulation + leaderboard ### Phase 3 – Public Demo - Host behind Pomerium - Collect optional emails via identity - Integrate leaderboard UI --- ## Success Metrics - 100% tool schema coverage via Zod - Sub-100ms tool latency (avg) - <1% tool error rate under load - 1000+ unique authenticated users in public demo --- ## References - OpenAI Apps SDK: [Auth Docs](https://developers.openai.com/apps-sdk/build/auth) - OpenAI Apps SDK: [Design Guidelines](https://developers.openai.com/apps-sdk/concepts/design-guidelines) - Pomerium MCP Docs: [https://www.pomerium.com/docs/capabilities/mcp](https://www.pomerium.com/docs/capabilities/mcp) - MCP TS Template: [https://github.com/nickytonline/mcp-typescript-template](https://github.com/nickytonline/mcp-typescript-template) ---

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nickytonline/pimp-my-ride-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server