内容
# 🚗 `vehicles` – 车辆品牌与型号,适用于您的 Rails 应用
[](https://badge.fury.io/rb/vehicles) [](https://github.com/vehiclesdb/vehicles/actions)
> [!TIP]
> **🚀 立即启动您的下一个 Rails 应用,速度提升 10 倍!** 我创建了 **[RailsFast](https://railsfast.com/?ref=vehicles)**,一个生产-ready的 Rails 样板模板,包含您需要的一切,以便在几天内而不是几周内启动软件业务。立即 [查看](https://railsfast.com/?ref=vehicles)!
`vehicles` 为您的 Rails 应用提供了一个干净、精选的车辆品牌和型号列表 — **18.5k 型号,涵盖 900+ 品牌:汽车、摩托车、轻便摩托车、货车、卡车和公交车**,从 14 个国家的官方注册信息中协调一致 - 即使在离线状态下也能立即使用,因为数据包含在 gem 中。(可选地,它可以在不需要升级 gem 的情况下 [刷新](#保持最新状态可选) 数据。)
✨ 适用于市场、拼车和共享出行应用、车队工具、停车和电动汽车充电应用、保险和预订表单 - 任何需要用户选择车辆的地方。
查看我的其他 💎 Ruby gems:[`usage_credits`](https://github.com/rameerez/usage_credits) · [`profitable`](https://github.com/rameerez/profitable) · [`api_keys`](https://github.com/rameerez/api_keys) · [`nondisposable`](https://github.com/rameerez/nondisposable) · [`trackdown`](https://github.com/rameerez/trackdown)
## 👨💻 示例
```ruby
Vehicles.makes
# => ["阿尔法罗密欧", "奥迪", "宝马", "比亚迪", "雪铁龙", "杯拉", "达契亚", "菲亚特", ...]
Vehicles.models("大众") # 别名感知 - "大众" 直接生效
# => ["高尔夫", "波罗", "途观", "帕萨特", "T-Roc", "ID.3", "ID.4", "T-Cross", ...]
car = Vehicles.find("vw golf") # 模糊查找,品牌 + 型号在一个字符串中
car.make # => "大众"
car.name # => "高尔夫"
car.full_name # => "大众 高尔夫"
car.kind # => :car
car.body_type # => :hatchback
car.hatchback? # => true
car.global_decile # => 2 (全球前 20%,按注册量衡量)
car.available_in?(:nl) # => true (荷兰注册证据)
Vehicles.top_models(kind: :car, country: :nl, limit: 5).map(&:name)
# => 最受欢迎的型号,基于实际注册量
```
…and 整个 gem 的原因 - 只需两行代码即可实现品牌 → 型号选择器:
```erb
<%= form.select :make, Vehicles.make_options, prompt: "品牌" %>
<%= form.select :model, Vehicles.model_options(@car.make), prompt: "型号" %>
```
就是这样。一个可用的下拉菜单,零设置,零网络请求。您可以终于删除那手动维护的 `MAKES = [...]` 常量。
## 安装
将它添加到您的 Gemfile 中:
```ruby
gem "vehicles"
```
然后运行 `bundle install`。**就是这样,全部设置完成。** 没有生成器,没有迁移,没有 API 密钥,没有种子任务 - 数据集已绑定并在首次使用时惰性加载到内存中。
> [!NOTE]
> `vehicles` 适用于 **任何 Ruby 项目**,而不仅仅是 Rails。当存在 Rails 时,Rails 部分(表单选项助手、验证器)会自动亮起,当不存在时则不会干扰。
## 基础
两个方法涵盖了您需要的 90%:
```ruby
Vehicles.makes
# => ["阿巴斯", "阿库拉", "阿尔法罗密欧", ...] (按字母顺序,900+ 品牌)
Vehicles.models("丰田")
# => ["雅力士", "卡罗拉", "Aygo", "RAV4", "C-HR", "普锐斯", ...]
```
品牌查找 **默认宽容** - 不区分大小写,slug友好,别名感知,因此无论用户输入什么,都倾向于匹配:
```ruby
Vehicles.models("toyota") # 不区分大小写
Vehicles.models("大众") # => 大众 (常见缩写)
Vehicles.models("merc") # => 梅赛德斯-奔驰
Vehicles.models("alfa-romeo") # slug 形式
```
未知品牌?您得到一个空数组,从不异常:
```ruby
Vehicles.models("DeLorean") # => []
```
## 智能查找与搜索
当您想要丰富的对象而不是普通列表时,请询问:
```ruby
make = Vehicles.make("奥迪") # => #<Vehicles::Make "奥迪">
make.name # => "奥迪"
make.slug # => "audi"
make.kinds # => [:car]
make.models # => ["A3", "A4", "Q3", "Q5", ...]
make.model("a3") # => #<Vehicles::Model "奥迪 A3">
```
`find` 将自由文本“品牌 + 型号”字符串解析为单个型号 - 非常适合标准化凌乱的输入:
```ruby
Vehicles.find("vw golf") # => #<Vehicles::Model "大众 高尔夫">
Vehicles.find("梅赛德斯 C 级") # => #<Vehicles::Model "梅赛德斯-奔驰 C 级">
Vehicles.find("nope nope") # => nil
```
`search` 返回每个匹配的型号,排名 - 完美的自动完成端点:
```ruby
Vehicles.search("golf")
# => [#<Model "大众 高尔夫">]
Vehicles.search("3")
# => [#<Model "宝马 3 系">, #<Model "马自达 3">, #<Model "雪铁龙 C3">, ...]
```
每个 `Vehicles::Model` 都像英语一样,序列化得很干净:
```ruby
car = Vehicles.find("seat leon")
car.make # => "SEAT"
car.name # => "Leon"
car.full_name # => "SEAT Leon"
car.slug # => "seat-leon"
car.to_h # => { make: "SEAT", model: "Leon", slug: "seat-leon",
# kind: :car, body_type: :hatchback, global_decile: 2,
# availability: ["es", "fi", "gb", ...] }
```
## 类型和车身类型
每个车辆都在两个轴上分类,因此您可以过滤、分组和标记而无需维护自己的分类法。
**`kind`** - 它是什么 **类型** 的车辆。直接来源于官方注册数据。今天有六种类型:
```ruby
Vehicles.kinds # => [:bus, :car, :moped, :motorcycle, :truck, :van]
```
**`body_type`** - **内部** 的子类:
```ruby
# cars :hatchback :sedan :wagon :suv :mpv :coupe :convertible :roadster :pickup :van
```
```ruby
Vehicles.find("vw tiguan").kind # => :car
Vehicles.find("vw tiguan").body_type # => :suv
Vehicles.find("vw tiguan").suv? # => true ← 每个 body_type 的谓词糖
Vehicles.find("yamaha mt-07").kind # => :motorcycle
Vehicles.find("yamaha mt-07").two_wheeler? # => true (摩托车或轻便摩托车 - 选择器联盟)
```
按任一轴过滤列表:
```ruby
Vehicles.models("丰田", body_type: :suv) # => ["RAV4", "C-HR", "Yaris Cross", ...]
Vehicles.makes(kind: :car) # => 制造汽车的品牌
Vehicles.makes(kind: :motorcycle) # => 制造摩托车的品牌
Vehicles.search("golf").select(&:hatchback?)
```
> [!NOTE]
> `body_type` 是诚实的:汽车始终带有一种;其他类型返回 `nil`,直到存在诚实的词汇(卡车不是“ hatchback”)。谓词只是返回 `false` 在 `nil` 上,因此您的过滤器永远不会崩溃。市场 **细分** (超级跑车、城市汽车、…)是编辑层,随 [VehiclesDB](#-more-with-vehiclesdb) 一起到达。
## 受欢迎程度和可用性
每个型号都带有两个开放数据源信号,来源于官方注册信息(从不抓取,从不猜测):
```ruby
car = Vehicles.find("丰田 卡罗拉")
car.global_decile # => 1 1 = 全球前 10% … 10; nil = 无排名
car.popular? # => true decile ≤ 2 (并且 `false` 当无排名 - 诚实)
car.availability # => ["es", "fi", "gb", ...] 有官方证据的国家
car.available_in?(:th) # => true
# 最受欢迎的型号 - 完美的“常见选择”预填充选择器:
Vehicles.top_models(kind: :car, country: :nl, limit: 10) # => [Model, ...]
Vehicles.top_models(kind: :motorcycle, limit: 10).map(&:full_name)
```
`availability` 表示 **官方来源** 证明该型号存在(注册、类型批准或销售报告)- 存在,而不是营销历史:灰色进口算数,因为它们是真实的车辆在真实的道路上。
## AI 代理的 MCP 服务器
gem 随附 `vehicles-mcp` - 一个只读 [MCP](https://modelcontextprotocol.io) 服务器,基于捆绑的数据集,因此您的代理可以扎根于真实的车辆数据,而不是产生名称牌。无需网络,无需密钥:
```json
{ "mcpServers": { "vehicles": { "command": "vehicles-mcp" } } }
```
工具: `search_makes` · `search_models` · `get_model` · `top_models`。适用于 MCP 的任何地方(Claude Code、Claude Desktop、Cursor、…)只需安装 gem。
## 颜色
gem 随附一个小型 **规范色板** - 少数涵盖几乎所有汽车的颜色,加上明确的 `other`。今天是共享词汇用于颜色下拉菜单,将来也是来自托管 API 的颜色准确图像的颜色词汇,因此“red”在任何地方都是一样的意思。
```ruby
Vehicles.colors
# => [#<Color white "White" #F4F4F4>, #<Color black "Black" #1B1B1B>, ...]
Vehicles.color("navy") # 宽容:同义词、大小写、变音符号
# => #<Vehicles::Color blue "Blue" #27408B>
Vehicles.color("navy").slug # => "blue" ← 稳定的值您存储
Vehicles.color("navy").hex # => "#27408B" (代表性色块)
Vehicles.color_options # => [["White", "white"], ["Black", "black"], ...]
```
名称是英文的 - 存储 **slug** 并在您的应用中本地化标签(slug 也是映射到图像颜色变体的内容)。
## Rails 下拉菜单
`*_options` 助手返回 `[[label, value], ...]` 对,正是 Rails `select` 所需的:
```ruby
Vehicles.make_options
# => [["阿尔法罗密欧", "alfa-romeo"], ["奥迪", "audi"], ["宝马", "bmw"], ...]
Vehicles.model_options("audi")
# => [["A3", "a3"], ["A4", "a4"], ["Q3", "q3"], ...]
```
### 从属品牌 → 型号选择器
整个数据集很小,因此最简单、最快的方法是 **客户端** 嵌入 [`Vehicles.catalog`](#the-full-ruby-api) 一次并
无需任何请求即可切换型号列表 - **无需路由,无需控制器,无需
获取。**
```erb
<div data-controller="vehicle-picker"
data-vehicle-picker-catalog-value="<%= Vehicles.catalog.to_json %>">
<%= form.select :make, Vehicles.makes, { include_blank: "品牌" },
data: { vehicle_picker_target: "make", action: "change->vehicle-picker#makeChanged" } %>
<%= form.select :model, Vehicles.models(@car&.make), { include_blank: "型号" },
data: { vehicle_picker_target: "model" } %>
</div>
```
```js
// app/javascript/controllers/vehicle_picker_controller.js
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["make", "model"]
static values = { catalog: Object } // { "Audi": ["A3", ...], ... }
makeChanged() {
const models = this.catalogValue[this.makeTarget.value] || []
const previous = this.modelTarget.value
this.modelTarget.replaceChildren(new Option("型号", ""))
for (const name of models) {
this.modelTarget.add(new Option(name, name, false, name === previous))
}
}
}
```
就是这样选择器 - gem 随附数据,您保留您的标记和 ~12
行 JS。(存储 slug 而不是名称?交换选择器为
`make_options` / `model_options` 并按 catalog 键入 slug。)
> [!TIP]
> 喜欢服务器往返(巨大/远程数据集,或您宁愿不嵌入它)?
> 这是一个三行端点 - `render json: Vehicles.models(params[:make])` -
> 控制器在 `makeChanged` 上获取它而不是读取嵌入的
> 目录。相同的 gem API,您来选择。
## 验证
直接使用 ActiveModel 验证器,因此坏数据永远不会到达您的数据库:
```ruby
class Car < ApplicationRecord
validates :make, vehicle_make: true # 必须是真正的品牌
validates :model, vehicle_model: { make: :make } # 必须是该品牌的真实型号
end
```
```ruby
Car.new(make: "大众", model: "高尔夫").valid? # => true
Car.new(make: "大众", model: "Mustang").valid? => false
Car.new(make: "Tesler", model: "Model 3").valid? => false
```
它们与查找一样宽容(别名、大小写、slug),并且永远不会在空白/垃圾输入上引发 - 只会添加一个错误。
## 推荐集成
这是干净的端到端模式 - 以及车辆记录实际需要的列的参考模式。
**记录存储其 **身份**,不是参考数据。品牌、
型号、年份和颜色标识汽车;`kind` 和 `body_type`(以及以后
规格/图像)是 **属性** 由数据集拥有 - 通过 gem 查找它们,不要复制每行(它们会漂移)。所以
架构很小而且稳定:
| Column | Type | 存储 | 示例 |
|----------|-----------|-----------------------------------------|---------------|
| `make` | `string` | 显示名称 | `"大众"`|
| `model` | `string` | 显示名称 | `"高尔夫"` |
| `year` | `integer` | 年份 | `2022` |
| `color` | `string` | 规范颜色 **slug** | `"blue"` |
其他一切(`kind`、`body_type`、生产年份、图像、…)是派生的:
`Vehicles.model(record.make, record.model) => Vehicles::Model | nil
`car&.body_type => :hatchback
`car&.suv? # => false
**存储显示名称。最简单、最可读的东西是
坚持名称本身(`"大众"`,“Golf”)。用 **名称列表** 填充选择器,其中选项值 *是*
名称:
```erb
<%= form.select :make, Vehicles.makes, { include_blank: "品牌" } %>
<%= form.select :model, Vehicles.models(@car.make), { include_blank: "型号" } %>
<%= form.select :year, (Date.current.year + 1).downto(1990).to_a, { include_blank: "年份" } %>
<%= form.select :color, Vehicles.color_options, { include_blank: "颜色" } %>
```
> [!TIP]
> 使用 `Vehicles.makes` / `Vehicles.models`(名称 = 值)您的列存储
> **显示名称**。使用 `Vehicles.make_options` / `Vehicles.model_options`
> (它们配对 `[name, slug]`)仅当您存储 **slug** - 然后从
> 名称返回名称 **name)。选择一个并保持一致。
**验证您存储的内容 - 下拉菜单已经限制)
```ruby
validates :make, vehicle_make: true, allow_blank: true
validates :model, vehicle_model: { make: :make }, allow_blank: true
validates :color, inclusion: { in: Vehicles.colors.map(&:slug) }, allow_blank: true
```
**读取元数据** - 从存储的对中读取元数据
品牌、车身类型和(使用托管 API 时)年份/片段/图像:
```ruby
car = Vehicles.model(record.make, record.model) # => Vehicles::Model | nil
car&.body_type # => :hatchback
car&.suv? # => false
```
## 🔓 更多关于 VehiclesDB 的信息
`vehicles` 是针对 [**VehiclesDB**](https://vehiclesdb.com) 的免费、开源 SDK,VehiclesDB 是一个提供更丰富车辆数据的托管 API。该 gem **完全独立且始终保持独立**;指向 VehiclesDB 是纯粹附加的。添加 API 密钥后,您已经使用的相同对象将变得更加丰富:
```ruby
Vehicles.configure do |config|
config.api_key = ENV["VEHICLESDB_API_KEY"] # 可选 — 解锁托管数据
end
car = Vehicles.find("vw golf")
car.years # => 1974..2024 生产年份
car.segment # => :hatchback / :hot_hatch 编辑段
car.image # => "https://cdn.vehiclesdb.com/volkswagen/golf.webp"
car.image(year: 2020) # 年龄准确的照片
car.image(year: 2020, color: :silver)
```
在底层,这是一个简单的 **提供者** 模型:始终可用的 `LocalProvider`(捆绑数据),以及仅在配置 API 密钥时激活的 `HostedProvider`。调用优先使用托管数据(如果存在),否则 **回退到本地数据 — 永远不会引发异常,永远不会阻塞** 您的请求:
```ruby
car.image # 没有配置 API 密钥? => nil (您的视图只需渲染一个占位符)
car.years # 尚未在本地包中? => nil,直到您添加密钥或我们在本地发货
```
因此,您可以针对完整 API 今日构建 UI,在免费本地数据上发货,并在稍后无需修改代码即可启用更丰富的数据。
## 配置
一切都有一个合理的默认值;您可以无需配置任何内容即可运行 gem。当您想要调整它时:
```ruby
# config/initializers/vehicles.rb
Vehicles.configure do |config|
config.region = :eu # 查询的默认区域
config.api_key = ENV["VEHICLESDB_API_KEY"] # 可选的托管 VehiclesDB 数据
config.aliases = { "Chevy" => "Chevrolet" } # 添加您自己的制造商别名
config.use_cache = true # 优先使用刷新数据集而不是捆绑数据集
end
```
## 保持最新(可选)
捆绑快照永远适用于离线状态 — 但车辆数据会发生变化(新的制造商,修复),您不应该为了获取它们而必须升级 gem。因此,`vehicles` 可以从发布的 **数据集** 刷新到本地文件缓存;加载优先使用缓存而不是捆绑副本。数据修复会在无需 **gem 升级** 的情况下到达您的应用程序。
`rails g vehicles:install` 放置一个 `VehiclesRefreshJob` — 安排它(每天一次即可),例如使用 solid_queue:
```yaml
# config/recurring.yml
vehicles_refresh:
class: VehiclesRefreshJob
schedule: every day at 3am
```
或手动刷新:
```ruby
Vehicles.refresh! # 拉取最新 -> 缓存;true/false,永远不会引发异常
Vehicles.data_version # => 当前生效的版本(缓存或捆绑)
```
它在设计上是安全的:失败/部分下载永远不会替换良好的数据,gem 会继续提供缓存(或捆绑快照),无论如何。想要完全离线/确定性?`config.use_cache = false`.
## 完整的 Ruby API
```ruby
# 列表(字符串 — 直接放入表单)
Vehicles.makes # => [String]
Vehicles.makes(kind: :car, region: :eu)
Vehicles.models("Audi") # => [String]
Vehicles.models("Audi", body_type: :suv)
# 选项对(适用于 Rails `select`)
Vehicles.make_options # => [[label, value]]
Vehicles.model_options("Audi") # => [[label, value]]
# 整个制造商 => [模型] 映射(嵌入一次用于客户端依赖选择器)
Vehicles.catalog(kind: :car) # => { "Audi" => ["A3", ...], ... }
# 对象
Vehicles.make("Audi") # => Vehicles::Make | nil
Vehicles.find("audi a3") # => Vehicles::Model | nil (一个免费文本字符串)
Vehicles.model("Audi", "A3") # => Vehicles::Model | nil (存储的制造商+型号对)
Vehicles.search("a3") # => [Vehicles::Model]
# 流行度和可用性(开放数据,从官方注册表中衡量)
Vehicles.kinds # => [:bus, :car, :moped, :motorcycle, :truck, :van]
Vehicles.top_models(kind: :car, country: :nl, limit: 10) # => [Vehicles::Model]
# Vehicles::Make
make.name make.slug make.aliases make.kinds
make.models make.model("a3") make.to_h
# Vehicles::Model
model.make model.name model.full_name model.slug model.to_h
model.kind model.body_type model.suv? model.coupe? # …谓词
model.global_decile model.popular? # 1 = 顶级 10% 全球;nil-safe
model.availability model.available_in?(:nl) model.two_wheeler?
model.years model.segment model.image(year:, color:) # ← 托管 VehiclesDB API
# 颜色(规范调色板)
Vehicles.colors # => [Vehicles::Color]
Vehicles.color("navy") # => Vehicles::Color | nil (宽容)
Vehicles.color_options # => [[name, slug]] (用于选择)
color.slug color.name color.hex
# 元数据
Vehicles.data_version # => "2026.07.0" (当前版本:缓存或捆绑)
Vehicles.region # => :global
# 刷新(可选 — 无需升级 gem 即可保持数据更新)
Vehicles.refresh! # 拉取最新发布的数据 -> 缓存;true/false,永远不会引发异常
Vehicles.reload! # 删除内存数据集(从磁盘重新加载)
```
## 数据来源
捆绑数据集是 [**VehiclesDB**](https://github.com/vehiclesdb/vehiclesdb) — 一个 **从 14 个国家 4 个大陆的官方车辆注册表中调和的开放数据集** (荷兰 RDW,英国 DfT,西班牙 DGT,芬兰 Traficom,德国 KBA,美国 EPA,新西兰机动车注册,泰国 DLT,乌克兰 MVS 等)。仅当 **两个独立的官方来源相互确认** — 或一个显示注册计数没有输入错误的 — 模型才会发货,因此您会得到真正的铭牌而没有注册噪音。
每个记录的形状如下:
```json
{
"name": "Volkswagen", "slug": "volkswagen", "kinds": ["car", "van"],
"models": [
{ "name": "Golf", "slug": "golf", "kind": "car", "body_type": "hatchback",
"global_decile": 2, "availability": ["ca", "es", "fi", "gb", "nl", "..."] }
]
}
```
- **`kind` 来源于,不是猜测的** — 直接来自每个注册表的官方分类。 **`body_type` 在此基础上进行策划** (注册表将旅行车、SUV 和跨界车混在一起),映射到干净的规范词汇。
- **有意采用名称级别。** “Golf”涵盖了 GTI、Variant、R — 这就是下拉菜单想要的。两轮车保留了排量粒度(“Wave110i”,“CBR600RR”),因为这就是骑手和注册表说话的方式。每种修剪和每种世代的细节是 VehiclesDB API 的关注点。
- **衡量流行度,** 从真实的注册/车队计数 — 而不是刮擦排名。 **有证据的可用性** (一个国家出现是因为官方来源显示模型存在),而不是营销历史。
- **源数据:** 仅限于开放许可的政府来源,每个许可证都在构建时固定和验证 — [完整的源列表](https://github.com/vehiclesdb/vehiclesdb/blob/main/SOURCES.md) 和 [归属通知](https://github.com/vehiclesdb/vehiclesdb/blob/main/ATTRIBUTION.md)。
- **此数据集** (`data/vehicles.json`): **CC-BY 4.0**。归属:*“由 VehiclesDB(CC-BY 4.0)提供的车辆数据,基于官方公共注册表。*
- **gem 代码:** MIT。
数据是版本控制的(`Vehicles.data_version`)。每个 gem 版本都捆绑了一个已知的快照 — 离线、确定的基础。要获取新数据,请升级 gem 或启用 [刷新](#staying-current-optional)(它会拉取发布的版本而无需升级 gem)。无论哪种方式,它都是显式和版本控制的 — 没有静默突变。
## 它是如何工作的
没有魔术,只有良好的默认值:
- **捆绑,不是获取。** `data/vehicles.json` 打包在 gem 中,并在首次访问时加载到冻结的 memoized 内存索引中。第一个调用会构建索引;之后的每个调用都是哈希查找。没有 HTTP,没有 SQLite,没有 ActiveRecord 在读取路径上。
- **零配置。** 不需要初始化器。不需要迁移。无需安排。
- **独立优先,SDK 次之。** 托管的 VehiclesDB 层是严格可选的,并在运行时检测;gem 永远不会硬依赖它。
- **Rails 感知,非 Rails 绑定。** 表单助手和验证器仅在加载 Rails 时通过轻量级 Railtie 注册。
## 路线图
今日捆绑:19k 型号,涵盖 6 种类型和 14 个国家,包含受欢迎程度 + 可用性,以及 MCP 服务器。正在开发中:
- 🌍 更多 **国家** (下一个是瑞士;数据集每月增长)
- 📅 本地数据中的 **生产年份**
- 🧬 **世代和变体** 层(架构已经保留它们)
- 🖼️ 型号 **图像** (通过 VehiclesDB)
- 🏷️ **细分市场** (超级跑车、城市车、热 hatch) 和更丰富的元数据
- 🔎 一个可安装的 **自动完成端点** ,使依赖下拉菜单的配方变成一行
想要更早实现其中之一?开启一个问题。
## 测试
使用 `bundle exec rake test` 运行测试套件。该 gem 针对多个 Rails 版本使用 Appraisal 进行测试:`bundle exec appraisal rails-8.0 rake test`.
## 开发
检出存储库后,运行 `bin/setup` 安装依赖。然后运行 `rake test` 运行测试。你也可以运行 `bin/console` 进行交互式提示,允许你进行实验。
要将此 gem 安装到本地机器上,运行 `bundle exec rake install`.
## 贡献
欢迎在 GitHub 上提交错误报告和拉取请求:https://github.com/vehiclesdb/vehicles。我们的行为准则如下:友善并让你的妈妈为你在网上发布的内容感到自豪。
## 许可证
该 gem 在 [MIT License](https://opensource.org/licenses/MIT) 条款下作为开源软件提供。捆绑的数据集根据 CC-BY 4.0 许可(参见 [数据来源](#where-the-data-comes-from))。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器