--- title: GCP - Game Context Protocol emoji: โš™๏ธ colorFrom: pink colorTo: blue sdk: gradio sdk_version: 6.0.1 app_file: app.py pinned: false license: mit short_description: Sample space with tags for MCP 1st Birthday party tags: - mcp-in-action-track-creative - building-mcp-track-creative --- # GCP - Game Context Protocol **Build 3D scenes and games with natural language** ## What is it? GCP (Game Context Protocol) is an AI-powered scene builder that lets you create interactive 3D game environments using simple commands. Built with Three.js and designed for LLM integration via MCP, it also works as a standalone HTTP service. Simply describe what you want: > "Add a red cube at 0,2,0" > "Create a level 50 units wide" > "Set lighting to night" โ€ฆand it instantly builds your 3D scene with: - Real-time 3D rendering - Interactive camera controls - Dynamic object placement - Lighting presets - Primitive shapes (cubes, spheres, cylinders, etc.) --- ## Features ### ๐ŸŽจ Scene Building - **6 primitive types**: cube, sphere, cylinder, plane, cone, torus - **LEGO-style bricks**: 10 brick types from Kenney kit (1x1, 2x4, slopes, etc.) - **Flexible positioning**: Place objects anywhere in 3D space - **Material system**: Colors, metalness, roughness, opacity, toon shading - **Dynamic scaling**: Custom size for each object ### ๐Ÿ’ก Lighting & Environment - **4 lighting presets**: day, night, sunset, studio - **Procedural skybox**: Realistic sky with sun positioning - **Multiple light types**: ambient, directional, point, spot - **Fog effects**: Linear and exponential fog - **Automatic shadows**: Realistic lighting effects ### โœจ Particle Effects - **5 presets**: fire, smoke, sparkle, rain, snow - **Localized effects**: Fire, smoke at specific positions - **Weather effects**: Rain and snow cover entire world ### ๐Ÿ“Š UI System - **2D text overlay**: Render text on screen at any position - **Progress bars**: Health bars, mana bars with labels - **HUD elements**: Score displays, status indicators ### ๐ŸŽฎ FPS Controller - **Physics-based movement**: Cannon.js integration with gravity, jumping, collisions - **WASD controls**: Smooth keyboard-based movement - **Mouse look**: Full 360ยฐ camera control with configurable sensitivity - **Configurable feel**: Adjustable speed, jump force, FOV, air control - **10x10 bounded world**: White floor and walls with collision detection ### ๐Ÿ‘€ Interactive Viewer - **Dual camera modes**: FPS (first-person) and Orbit (overview) - **Real-time updates**: See changes instantly via postMessage API - **Grid helper**: Optional floor grid for spatial reference - **Auto-centering**: Camera automatically frames your scene in Orbit mode ### ๐Ÿค– AI Integration - **MCP protocol**: Works with Claude, GPT, and other AI assistants - **Natural language**: Simple commands like "add a blue sphere" or "add rain" - **Context aware**: Builds on existing scenes - **40+ MCP tools**: Scene (6) + Player (10) + Rendering (10) + Environment (4) + UI (4) + Post-processing (8) - **No coding required**: Pure natural language scene building --- ## Quick Start ### Installation ```bash # Clone the repository git clone https://github.com/ArturoNereu/3DViz-MCP.git cd 3DViz-MCP # Install dependencies pip install -r requirements.txt # Run the application python app.py ``` The app will start two servers: - **FastAPI** (port 8000): MCP server and scene API - **Gradio** (port 7860): Chat interface Open `http://localhost:7860` in your browser. ### Example Commands ``` Add a red cube at 0,2,0 Add a blue sphere at 5,1,5 Add a sunset skybox Add fire particles at 0,1,0 Add rain Render "Score: 100" at the top of the screen Add a health bar with value 75 Add a red brick_2x4 at 0,0,0 Apply toon shading to the cube Set lighting to night ``` --- ## How It Works ### For AI Assistants (MCP) The MCP server exposes 40+ tools that AI assistants can call: **Scene Building (6 tools):** - `create_scene` - Create a new 3D scene/level - `add_object` - Add primitive objects (cube, sphere, etc.) - `add_brick` - Add LEGO-style bricks from Kenney kit - `remove_object` - Remove objects from scene - `set_lighting` - Change lighting preset - `get_scene_info` - Get scene details **Environment (4 tools):** - `add_skybox` - Add procedural sky (day, sunset, night, etc.) - `remove_skybox` - Remove skybox - `add_particles` - Add particle effects (fire, smoke, rain, snow) - `remove_particles` - Remove particle systems **UI Overlay (4 tools):** - `render_text_on_screen` - Display 2D text - `render_bar_on_screen` - Display health/progress bars - `remove_ui_element` - Remove UI elements - `get_ui_elements` - List all UI elements **Rendering (10 tools):** - `add_light` - Add light sources - `remove_light` - Remove lights - `update_light` - Modify light properties - `get_lights` - List all lights - `update_object_material` - Change material properties - `update_material_to_toon` - Apply toon/cel shading - `set_background_color` - Set solid or gradient background - `set_fog` - Add atmospheric fog **Player Controller (10 tools):** - `set_player_speed` - Movement speed - `set_jump_force` - Jump height - `set_mouse_sensitivity` - Mouse look + Y-invert - `set_gravity` - World gravity - `set_player_dimensions` - Player size - `set_movement_acceleration` - Movement feel - `set_air_control` - Airborne control - `set_camera_fov` - Field of view - `set_vertical_look_limits` - Look angle limits - `get_player_config` - Get all settings **Post-Processing (8 tools):** - `set_bloom` - Glow effect - `set_ssao` - Ambient occlusion - `set_color_grading` - Color adjustments - `set_vignette` - Vignette effect - `set_depth_of_field` - Focus blur - `set_motion_blur` - Movement blur - `set_chromatic_aberration` - Lens effect - `get_post_processing` - Get all effects ### For Developers (HTTP API) ```python import requests # Create a new scene response = requests.post("http://localhost:8000/api/scenes", json={ "name": "My Scene", "world_width": 50.0, "lighting_preset": "day" }) scene_id = response.json()["scene_id"] # Add an object requests.post(f"http://localhost:8000/api/scenes/{scene_id}/objects", json={ "object_type": "cube", "position": {"x": 0, "y": 1, "z": 0}, "material": {"color": "#ff0000"} }) # View your scene viewer_url = f"http://localhost:8000/view/scene/{scene_id}" ``` --- ## Architecture ``` GCP - Game Context Protocol โ”œโ”€โ”€ app.py # Gradio chat interface โ”œโ”€โ”€ backend/ โ”‚ โ”œโ”€โ”€ main.py # FastAPI + GCP server โ”‚ โ”œโ”€โ”€ game_models.py # Scene, GameObject, Light models โ”‚ โ”œโ”€โ”€ game_tools.py # GCP tool implementations โ”‚ โ””โ”€โ”€ storage.py # In-memory scene storage โ””โ”€โ”€ frontend/ โ””โ”€โ”€ game_viewer.html # Three.js 3D renderer ``` ### Tech Stack - **Backend**: FastAPI, FastMCP, Pydantic - **Frontend**: Three.js, Gradio - **3D Rendering**: Three.js with orbit controls - **AI Integration**: MCP (Model Context Protocol) --- ## API Endpoints ### Scenes - `POST /api/scenes` - Create a new scene - `GET /api/scenes/{scene_id}` - Get scene data - `GET /view/scene/{scene_id}` - View scene in browser ### MCP - `GET /mcp` - MCP protocol endpoint - `GET /docs` - API documentation --- ## Supported Objects | Type | Description | |------|-------------| | `cube` | Box geometry | | `sphere` | Spherical geometry | | `cylinder` | Cylindrical geometry | | `plane` | Flat surface (floor/wall) | | `cone` | Conical geometry | | `torus` | Donut shape | ## Supported Colors red, blue, green, yellow, purple, orange, pink, brown, black, white, or any hex code (#ff0000) ## Lighting Presets - **day**: Bright white directional light - **night**: Dark blue moonlight - **sunset**: Warm orange light - **studio**: Neutral balanced lighting --- ## Development ### Project Structure ``` backend/game_models.py # Data models (Scene, GameObject, etc.) backend/game_tools.py # Tool implementations backend/main.py # FastAPI routes + MCP tools frontend/game_viewer.html # Three.js viewer app.py # Gradio chat interface ``` ### Adding New Object Types 1. Add to `ObjectType` enum in `game_models.py` 2. Add geometry case in `game_viewer.html` `renderGameObjects()` 3. Update command parsing in `app.py` `chat_response()` --- ## Roadmap ### โœ… Completed - **Phase 1**: Player Controller - Core Controls (5 tools) - **Phase 2**: Player Controller - Enhanced Feel (4 tools) - **Phase 3**: Rendering & Lighting Tools (10 tools) - **Phase 4**: Post-Processing Effects (8 tools) - **Phase 5**: Environment Tools - Skybox & Particles (4 tools) - **Phase 6**: UI Overlay System (4 tools) - **Phase 7**: LEGO Brick Kit Integration (Kenney assets) - **Phase 8**: Toon/Cel Shading Materials - Physics engine integration (Cannon.js) - FPS controls (WASD + mouse look) ### ๐Ÿ”ฎ Next Steps - Transform controls for object manipulation - Scene templates and prefabs - Export to Unity/Unreal - Persistent scene storage ### ๐Ÿ’ญ Future Ideas - NPC system with behaviors - Multiplayer support - Procedural generation - Audio system --- ## License MIT License - feel free to use in your projects! ## Contributing Contributions welcome! Please open an issue or PR. --- **Built with โค๏ธ for AI-powered game development**