返回 MCP 目录
public公开dns本地运行

pimp-my-ride-mcp

一个用于汽车定制和赛车的MCP服务器,支持车辆颜色、轮毂、车身套件等个性化定制,以及驾驶员档案管理和构建保存功能

article

README

🚀 🏎️ 我的座驾改装MCP服务器

这是一个用于汽车定制和赛车的模型上下文协议(MCP)服务器。你可以通过ChatGPT或Claude,使用自然语言来打造和定制你的梦想座驾!

图片来源: CC BY-SA 2.0,来自维基共享资源

⚠️ 重要提示

本项目是对MTV节目《我的座驾改装秀》(由Xzibit主持)的致敬之作,与MTV没有关联,也未得到其认可。

✨ 主要特性

  • 🎨 汽车定制 - 可定制颜色、车轮、车身套件、扰流板、排气系统、贴纸和底盘灯。
  • 🏎️ 车手档案 - 选择你的赛车风格(如“路怒族”“速度狂人”“冷静沉稳型”等)。
  • 💾 改装管理 - 保存、加载和管理多个汽车改装方案。
  • 📊 性能评分 - 获取改装方案的计算性能得分。
  • 🔒 Pomerium认证 - 使用Pomerium代理实现安全的身份感知访问。
  • 🗄️ 可插拔存储 - 默认使用SQLite,可扩展至Redis、PostgreSQL、DynamoDB。

🔒 安全性

⚠️ 重要提示

此MCP服务器没有内置的身份验证或授权机制。它从HTTP头中读取身份信息并隐式信任这些信息。

对于生产环境部署,请将此服务器置于 Pomerium 之后,Pomerium是一个AI网关,提供以下功能:

  • 🔐 集中式认证 - 与你的身份提供商进行OAuth/OIDC集成。
  • 🛡️ 细粒度授权 - 在工具和方法级别进行基于策略的访问控制。
  • 🔑 自动令牌管理 - 透明处理OAuth令牌刷新。
  • 📊 可观测性 - 详细记录AI代理交互、工具调用和参数。
  • 🌐 安全网关 - 安全地将内部MCP服务器暴露给AI代理。

Pomerium允许你定义如下策略:

  • 哪些用户可以访问哪些工具。
  • 按用户或组进行速率限制。
  • 记录所有工具调用的审计日志。
  • 基于用户属性进行动态访问控制。

与Pomerium的架构图

sequenceDiagram
    participant User as AI Agent/User
    participant Pomerium as Pomerium Gateway
    participant MCP as Pimp My Ride MCP Server
    participant Storage as SQLite Storage

    User->>Pomerium: MCP Request
    Pomerium->>Pomerium: Authenticate User (OAuth/OIDC)
    Pomerium->>Pomerium: Authorize Tool Access (Policy Check)
    Pomerium->>MCP: Forward Request + Identity Headers
    Note over Pomerium,MCP: X-Pomerium-Claim-Sub<br/>X-Pomerium-Claim-Email<br/>X-Pomerium-Claim-Name
    MCP->>MCP: Extract User Identity
    MCP->>Storage: Read/Write Build Data
    Storage-->>MCP: Data Response
    MCP-->>Pomerium: MCP Response
    Pomerium-->>User: MCP Response

了解更多Pomerium MCP文档

🚀 快速开始

📦 安装指南

npm install

配置

创建一个 .env 文件(可参考 .env.example):

# 服务器配置
HOST=0.0.0.0
PORT=3000
NODE_ENV=development
LOG_LEVEL=info

# 存储配置
STORAGE_BACKEND=sqlite
SQLITE_DB_PATH=./data/pimp-my-ride.db

开发环境

npm run dev

生产环境

npm run build
npm start

💻 使用示例

基础用法

以下是一些使用示例,展示如何调用不同的工具来定制汽车和管理改装方案。

获取当前改装方案

# 调用 getCurrentBuild 工具
# 此工具用于获取或创建包含所有定制信息的活跃汽车改装方案
# 示例代码可根据实际调用方式补充

更新汽车配置

# 调用 updateCarConfig 工具
# 可更新汽车的各种属性,如颜色、车轮、车身套件等
# 示例代码可根据实际调用方式补充

高级用法

保存和加载改装方案

# 保存当前汽车改装方案
# 调用 saveBuild 工具并指定保存名称
# 示例代码可根据实际调用方式补充

# 加载已保存的汽车改装方案
# 调用 loadBuild 工具并指定要加载的方案名称
# 示例代码可根据实际调用方式补充

📚 详细文档

可用工具

汽车定制

  • getCurrentBuild:检索或创建包含所有定制信息的活跃汽车改装方案。
  • updateCarConfig:更新汽车属性,包括:
    • color - 主颜色(红、蓝、绿、黄、橙、紫、粉、黑、白、银、金、青、品红、绿)
    • secondaryColor - 次要/强调色
    • wheels - 车轮类型(原厂、运动、赛车、越野、镀铬、霓虹、旋转)
    • bodyKit - 车身套件风格(原厂、运动、赛车、漂移、豪华、拉力、肌肉)
    • decal - 贴纸/涂装(无、赛车条纹、火焰、部落、迷彩、碳纤维、方格、赞助商、自定义)
    • spoiler - 扰流板类型(无、原厂、运动、赛车、GT尾翼、鸭尾)
    • exhaust - 排气系统(原厂、运动、赛车、双出、四出、侧出)
    • underglow - 底盘灯(无、红、蓝、绿、紫、彩虹、白)
    • performance - 性能统计(动力、抓地力、空气动力学、重量:0 - 100)
  • updateDriverProfile:设置车手风格和昵称:
    • persona - 车手个性:冷静沉稳型、路怒族、速度狂人、谨慎型、爱炫耀型、战术型、 wildcard
    • nickname - 车手昵称(1 - 50 个字符)
  • getCustomizationOptions:获取汽车部件和车手风格的所有可用定制选项。
  • getPersonaInfo:获取车手风格的详细信息,包括赛车风格、优势和劣势。

改装管理

  • saveBuild:将当前汽车改装方案以特定名称保存。
  • loadBuild:加载已保存的汽车改装方案并使其成为活跃方案。
  • listBuilds:列出所有已保存的汽车改装方案,支持分页。
  • deleteBuild:删除已保存的汽车改装方案(不能删除活跃方案)。
  • getBuildDetails:获取改装方案的详细信息,包括计算的性能得分。

API端点

MCP协议

  • POST /mcp - MCP工具调用
  • GET /mcp - 服务器信息

健康检查

  • GET /health - 存储健康状态

环境变量

| 属性 | 详情 | |------|------| | HOST | 服务器绑定的主机/接口,默认值为 0.0.0.0 | | PORT | 服务器端口,默认值为 3000 | | NODE_ENV | 环境(开发/生产/测试),默认值为 development | | LOG_LEVEL | 日志级别(错误/警告/信息/调试),默认值为 info | | STORAGE_BACKEND | 存储类型(sqlite/redis/postgres/dynamodb),默认值为 sqlite | | SQLITE_DB_PATH | SQLite数据库文件路径,默认值为 ./data/pimp-my-ride.db | | SQLITE_VERBOSE | 启用SQL查询日志记录,默认值为 false |

🔧 技术细节

存储层

KV存储抽象提供以下功能:

  • 命名空间 - 逻辑数据隔离。
  • TTL过期 - 自动清理过期条目。
  • CAS版本控制 - 用于并发更新的比较和设置。
  • 分页 - 基于游标对大型数据集进行分页。

默认实现使用SQLite的WAL模式以提高并发性能。

认证

Pomerium认证从HTTP头中解析用户身份:

  • X-Pomerium-Claim-Sub - 用户ID
  • X-Pomerium-Claim-Email - 电子邮件地址
  • X-Pomerium-Claim-Name - 显示名称
  • X-Pomerium-JWT-Assertion - JWT令牌(备用)

在没有Pomerium的开发模式下,服务器生成基于匿名会话的用户ID。

数据模型

改装结构

{
  id: string,
  name?: string,
  car: {
    color, secondaryColor, wheels, bodyKit,
    decal, spoiler, exhaust, underglow,
    performance: { power, grip, aero, weight }
  },
  driver: {
    persona, nickname?
  },
  createdAt: number,
  updatedAt: number
}

🚀 开发相关

脚本

npm run dev          # 开发环境,开启监听模式
npm run build        # 为生产环境构建
npm start            # 启动生产服务器
npm run lint         # 检查代码质量
npm run lint:fix     # 修复代码检查问题
npm run format       # 使用Prettier格式化代码
npm test             # 运行测试

项目结构

src/
├── index.ts              # 主服务器入口点
├── config.ts             # 环境配置
├── logger.ts             # 结构化日志记录
├── auth/
│   └── pomerium.ts       # Pomerium认证
├── domain/
│   └── models.ts         # 汽车和车手模型
├── storage/
│   ├── kv.ts            # KV存储接口
│   ├── sqlite.ts        # SQLite实现
│   ├── factory.ts       # 存储工厂
│   └── index.ts         # 导出模块
├── tools/
│   └── builds.ts        # 改装管理工具
└── lib/
    ├── utils.ts         # MCP响应辅助函数
    └── errors.ts        # 错误格式化

🚀 部署

Docker

可在 Docker Hub: nickytonline/pimp-my-ride-mcp 获取镜像。

# 从Docker Hub拉取镜像
docker pull nickytonline/pimp-my-ride-mcp

# 或本地构建镜像
docker build -t pimp-my-ride-mcp .

# 运行容器
docker run -p 3000:3000 -v ./data:/app/data pimp-my-ride-mcp

使用Pomerium(生产环境推荐)

将服务器部署在Pomerium之后,以实现基于策略的安全访问控制:

# pomerium-config.yaml
routes:
  - from: https://pimp-my-ride.example.com
    to: http://localhost:3000
    policy:
      - allow:
          and:
            - email:
                is: user@example.com
    # 可选:细粒度工具访问控制
    mcp_allow_tools:
      - getCurrentBuild
      - updateCarConfig
      - updateDriverProfile

请参考 Pomerium MCP文档 以获取高级配置,包括:

  • 工具级别的授权。
  • 基于用户/组的访问控制。
  • 速率限制。
  • OAuth上游集成。

📄 许可证

本项目采用MIT许可证。

📚 文档

关于博美卡丁车

博美卡丁车是一款赛车游戏,它使用此MCP服务器进行汽车定制。玩家通过自然语言与游戏交互,在比赛前打造和定制他们的梦想之车。

参考资料

🚧 路线图

第二阶段 - AI辅助

  • [ ] randomizeBuild - 生成随机主题的改装方案。
  • [ ] suggestUpgrades - 基于AI的升级建议。
  • [ ] generateLivery - 配色方案建议。

第三阶段 - 赛车

  • [ ] simulateRace - 赛车模拟。
  • [ ] getLeaderboard - 全球排名。
  • [ ] 比赛结果持久化。
help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端