关于 Decode VIN
nitrovin 是面向开发者和车辆数据工作流的离线 VIN 解码器,内置一个月的 NHTSA vPIC 数据。它通过命令行、HTTP、库和 MCP 提供一致的解码结果。
主要功能
- 01使用内置 vPIC 数据离线解码 VIN
- 02解码部分填写或有误的 VIN
- 03支持文本、JSON 和详细输出格式
- 04翻译并列出车辆词汇表
- 05提供命令行、HTTP、stdio、Go 和 C 接口
适用场景
- 01在无网络环境中解码 VIN
- 02通过命令行批量处理 VIN
- 03从 MCP 客户端查询车辆信息
MCP 相关
通过 stdio MCP 提供 `decode_vin`、`translate` 和 `list` 工具,也可在 `/mcp` 使用 Streamable HTTP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/joshuasprow/nitrovin:v0.3.7本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/joshuasprow/nitrovin:v0.3.7stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
nitrovin
一款离线 VIN 解码器,解码结果与 NHTSA 的
vPIC 一致。它是 spVinDecode 的 Go 移植版;spVinDecode 是 NHTSA 在其每月更新的 vPIC 数据库中发布的解码程序。nitrovin 以单个二进制文件发布,其中内置了一个月的 vPIC 数据。无需网络、数据库或 API 密钥。
每个月的数据在发布前,都会与运行在 Postgres 中的 NHTSA 自有程序进行校验:18,318 个 VIN 组成的语料库中,每个 VIN 的每一行结果都必须逐字节匹配,否则该月版本不会发布 (奇偶校验的含义)。
$ nitrovin decode -o text 1HGCM82633A004352 | grep -E '^(VIN|Make|Manufacturer Name|Model|Model Year|Body Class|Plant City|Error Code) '
VIN 1HGCM82633A004352
Body Class Coupe
Make HONDA
Manufacturer Name AMERICAN HONDA MOTOR CO., INC.
Model Accord
Model Year 2003
Plant City MARYSVILLE
Error Code 0
这些是此 VIN 解码出的 43 个元素中的 7 个(运行 --shape nitrovin 可列出这些元素)。
同一解码功能有六种使用方式:CLI、HTTP 服务、通过 stdio 传输的 JSON 行、供 AI 助手使用的 MCP 服务、Go 模块和 C 库。
nitrovin.app 为所有人运行最新版本的服务:表单、/v1 API(开放 CORS)和 MCP 端点 https://nitrovin.app/mcp,并按 IP 限流。
状态:v0.x 预发布版本。 v0 表示发布流程尚未最终签署通过,并不意味着 API 可能变更:接口契约已在 /v1 冻结。v1.0.0 还需通过
ADR 0007 中的关卡。
nitrovin 与 NHTSA 无关联,也未获其认可。
安装
每个版本都内置一个月的 vPIC 数据;nitrovin --version 会显示数据所属月份。
| 渠道 | 命令 | 平台 |
|---|---|---|
| Homebrew | brew install joshuasprow/tap/nitrovin | macOS、Linux |
| Scoop | scoop bucket add joshuasprow https://github.com/joshuasprow/scoop-bucket 然后运行 scoop install nitrovin | Windows amd64、arm64 |
| winget | JoshuaSprow.Nitrovin,尚未提交(#78) | Windows |
| Docker | docker run --rm -p 8080:8080 ghcr.io/joshuasprow/nitrovin | linux/amd64、linux/arm64 |
| Go 1.27+ | go install github.com/joshuasprow/nitrovin/cmd/nitrovin@latest | Go 可构建的所有平台 |
| 压缩包 | GitHub Releases:nitrovin_<version>_<os>_<arch>.tar.gz(Windows 上为 .zip) | linux、darwin、windows × amd64、arm64 |
| Linux 软件包 | 同一发布页面:sudo apt install ./nitrovin_<version>_linux_<arch>.deb、sudo dnf install ./nitrovin_<version>_linux_<arch>.rpm、sudo apk add --allow-untrusted ./nitrovin_<version>_linux_<arch>.apk | linux amd64、arm64 |
| C 库 | 同一发布页面:libnitrovin_<version>_<os>_<arch> | linux、darwin、windows × amd64、arm64 |
$ nitrovin --version
nitrovin v0.1.2 (data 2026_10)
二进制文件约 70 MB,其中大部分是数据;压缩包约 21 MB。
Docker 镜像默认以非 root 用户运行 nitrovin serve --addr :8080,也可用其他命令替代(docker run --rm ghcr.io/joshuasprow/nitrovin decode 1HGCM82633A004352)。
镜像标签包括 vX.Y.Z、vX.Y、vX、latest 和 data-<YYYY_MM>。
Linux 软件包会安装 /usr/bin/nitrovin,并将 LICENSE 和
NOTICE 放入 /usr/share/doc/nitrovin;卸载软件包时会移除这三个文件。它们是发布附件,而非软件包仓库,因此没有任何机制会为 apt、dnf 或 apk 签署这些软件包(所以需要 --allow-untrusted):安装前请使用 cosign 验证,
TAG=v0.1.5
cosign verify-blob --bundle nitrovin_${TAG#v}_linux_amd64.deb.sigstore.json \
--certificate-identity https://github.com/joshuasprow/nitrovin/.github/workflows/release.yml@refs/tags/$TAG \
--certificate-oidc-issuer https://token.actions.githubusercontent.com nitrovin_${TAG#v}_linux_amd64.deb
或者按照验证版本中的说明,对照 checksums.txt 检查。
这些二进制文件未经 Apple 公证。Homebrew 会替你移除隔离标记。通过浏览器下载的 macOS 二进制文件在启动时会被系统终止,除非你先将其移除:
xattr -d com.apple.quarantine nitrovin
使用方法
每种接口接收相同的请求,并返回相同的解码结果 (API 契约):
| 请求字段 | 默认值 | 含义 |
|---|---|---|
vin | 必填 | 1–17 个字符;不完整(*)和输入错误的 VIN 也会解码 |
model_year | 无 | 已知的车型年份,作为提示 |
shape | vpic | vpic:vPIC 的 DecodeVinValues 键(Make、BodyClass);nitrovin:按变量名作为键,并包含元素和属性 ID |
full | false | 添加 items,包含 NHTSA 程序输出的每一行及其来源和模式 |
now | 当前时间 | 解码所依据的时刻;固定该值可获得可复现的输出 |
VIN 永远不会导致错误:其问题会列在 error_codes 中(vPIC 的代码,[0] 表示无问题),并附上 corrected_vin 以及程序建议的可能取值。每个解码结果都包含 data_month 和 decoder_version。
CLI
nitrovin decode 1HGCM82633A004352 # JSON, pretty on a terminal
nitrovin decode -o text --model-year 2003 1HGCM82633A004352 # two columns
nitrovin decode --shape nitrovin --full 1HGCM82633A004352 # by variable name, with items
printf '1HGCM82633A004352,2003\n5YJ3E1EA2JF000316\n' | nitrovin decode - # one JSON line per VIN
nitrovin info # version, data month, artifact hash, elements
decode - 每行读取一个 VIN,可选地在后面加逗号或制表符,再附上车型年份。无论错误代码为何,只要每个 VIN 都已解码,退出状态就是 0;如果 nitrovin 无法作答(数据无法加载、输入行被拒绝),则为 1;如果命令行中有误,例如参数中的 VIN 超过 17 个字符,则为 2。问题会以一行 JSON 的形式输出到 stderr。
CLI 契约。
HTTP
nitrovin serve # 127.0.0.1:8080; --addr, or $PORT, to change
curl localhost:8080/v1/decode/1HGCM82633A004352
curl 'localhost:8080/v1/decode/1HGCM82633A004352?model_year=2003&shape=nitrovin'
curl localhost:8080/v1/decode -d '[{"vin":"1HGCM82633A004352"},{"vin":"5YJ3E1EA2JF000316","shape":"nitrovin"}]'
curl localhost:8080/v1/info
curl 'localhost:8080/v1/translate?from.vin=1HGCM82633A004352'
curl localhost:8080/v1/vocabularies
curl 'localhost:8080/v1/vocabularies/vpic/entries?where.make=474&limit=5'
在浏览器中打开该地址,即可使用解码表单:填写 VIN、可选的车型年份、格式和 full。表单由服务器渲染,每个解码结果都有可分享的 URL(/?vin=1HGCM82633A004352)。解码结果会按 vPIC 的分组显示元素(在 vpic 格式下,空值会隐藏,除非另行请求),以 NHTSA 的措辞显示错误代码,显示标出差异位置的建议 VIN,提供指向 NHTSA 解码器中相同 VIN 的链接,以及可供复制的解码 JSON、URL、curl 和 nitrovin decode 等效命令。空表单会说明如何安装、配置 MCP 并验证此版本,还提供指向其发布版本和数据月份的链接。唯一的脚本 /copy.js 用于添加复制按钮;即使没有 JavaScript,其他功能仍可正常使用,文本也仍可选中。该表单不属于 API:它未包含在 OpenAPI 文档中,且可能会更改。
POST /v1/decode 最多接收 1,000 个请求,并按顺序返回解码结果数组;POST /v1/translate 对翻译请求执行相同操作,GET /v1/translate 则通过带点号的查询参数接收单个请求(from.vocabulary=yard&from.entry.make=Dodge&from.entry.model=Ram%201500)。GET /v1/vocabularies 会列出已加载的词汇表,GET /v1/vocabularies/{name}/entries 会分页列出其中一个词汇表
(翻译,列表)。拒绝请求时会返回符合 RFC 9457 规范的 application/problem+json,其中包含指向违规值的 pointer。GET /v1/openapi.json 提供 OpenAPI 3.1 文档;GET /healthz 是探测端点。除非使用 --cors <origin>(或 --cors '*')指定允许调用 /v1 和 /mcp 的浏览器,否则不会发送 CORS 标头。收到 SIGINT 或 SIGTERM 后,服务会等待正在处理的请求完成,然后以状态码 0 退出。
stdio(JSON 行)
printf '{"id":1,"vin":"1HGCM82633A004352"}\n{"id":2,"vin":"5YJ3E1EA2JF000316","shape":"nitrovin"}\nnot json\n' | nitrovin stdio
每行输入一个请求,每个请求按顺序输出一行,并在每行后立即刷新:{"id": …, "decode": {…}} 或 {"id": …, "error": {…}}。包含 "op": "translate" 或 "op": "list" 的行则会通过 --vocab 文件执行翻译或列表操作,并在回复中以 translation 或 list 为键。格式错误的行会收到一行错误回复,之后会继续处理会话;遇到 EOF 时会结束会话。这是从另一种语言中保持一个解码器进程持续运行的最简单方式(docker run --rm -i ghcr.io/joshuasprow/nitrovin stdio 也可以)。
stdio 契约。
MCP
nitrovin mcp 是一个通过 stdio 提供服务的 MCP 服务,包含工具 decode_vin(其参数为上述请求),以及根据 --vocab 加载的词汇表进行响应的 translate 和 list(工具定义)。对于 Claude Desktop(macOS 上的 ~/Library/Application Support/Claude/claude_desktop_config.json,Windows 上的 %APPDATA%\Claude\claude_desktop_config.json)和 Cursor(~/.cursor/mcp.json),配置项相同:
{
"mcpServers": {
"nitrovin": {
"command": "/opt/homebrew/bin/nitrovin",
"args": ["mcp"]
}
}
}
请使用 which nitrovin 输出的绝对路径:桌面应用无法读取 shell 的 PATH。如果改用 Docker,则配置为 "command": "docker" 和 "args": ["run", "--rm", "-i", "ghcr.io/joshuasprow/nitrovin", "mcp"]。从 MCP Registry 安装的客户端可通过 io.github.joshuasprow/nitrovin 找到此服务:使用发布标签对应的 Docker 镜像,并以 mcp 运行。
若要在不使用客户端的情况下试用,请将代码片段保存为 claude_desktop_config.json,并使用 MCP Inspector 调用该工具:
npx @modelcontextprotocol/inspector --cli --config claude_desktop_config.json --server nitrovin \
--method tools/call --tool-name decode_vin --tool-arg vin=1HGCM82633A004352
nitrovin serve 会通过 /mcp 提供同一个服务,使用无状态的 Streamable HTTP 和 JSON 响应,适用于接受 URL 而非命令的客户端("url": "http://127.0.0.1:8080/mcp"):
npx @modelcontextprotocol/inspector --cli http://127.0.0.1:8080/mcp --transport http \
--method tools/call --tool-name decode_vin --tool-arg vin=1HGCM82633A004352
也可以使用托管版本 https://nitrovin.app/mcp,无需安装。
Go 模块
go get github.com/joshuasprow/nitrovin/pkg/nitrovin@latest
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/joshuasprow/nitrovin/pkg/contract"
"github.com/joshuasprow/nitrovin/pkg/nitrovin"
)
func main() {
d, err := nitrovin.Embedded() // or nitrovin.Open("nitrovin-2026_10.artifact")
if err != nil {
log.Fatal(err)
}
req, err := contract.ParseRequest([]byte(`{"vin": "1HGCM82633A004352"}`))
if err != nil {
log.Fatal(err)
}
dec, err := d.Decode(req) // a VIN is never an error: see dec.ErrorCodes
if err != nil {
log.Fatal(err)
}
out, err := json.Marshal(dec)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(out))
}
Decoder 可安全地并发使用。nitrovin.Embedded 会将数据(约 61 MB)链接到你的二进制文件中,模块下载内容也包含这些数据(github.com/joshuasprow/nitrovin-data 的 20 MB zip);而 nitrovin.Open 则会加载工件文件,不调用 Embedded 的二进制文件不会携带数据。每个 pkg/ 包都是公共 API:
pkg.go.dev。
C 库
libnitrovin(.so、.dylib、.dll)和 nitrovin.h 不包含数据:nitrovin_open 会从 nitrovin-data 发布版本加载工件,也就是 --data 所使用的同一文件。nitrovin_decode 接收一行 stdio 请求,并原样返回 nitrovin stdio 会写入的回复行;nitrovin_open_vocab 会打开旁边带有词汇表的工件,以处理 translate 和 list 行(C 库)。
#include <stdio.h>
#include "nitrovin.h"
int main(void) {
char *err = NULL;
nitrovin_t *h = nitrovin_open("nitrovin-2026_10.artifact", &err);
if (h == NULL) {
fprintf(stderr, "%s\n", err);
nitrovin_free(err);
return 1;
}
char *reply = nitrovin_decode(h, "{\"id\":1,\"vin\":\"1HGCM82633A004352\"}");
puts(reply); /* {"id":1,"decode":{...}}, as `nitrovin stdio` writes it */
nitrovin_free(reply);
nitrovin_close(h);
return 0;
}
cc -o decode decode.c -L. -lnitrovin -Wl,-rpath,. && ./decode
所有返回的字符串都必须用 nitrovin_free 释放,绝不能使用 free(),也不要卸载该库。docs/c-library.md 介绍了下载、通过 ctypes 使用 Python 的方法及相关规则;
C ABI 合约为权威说明。
验证发布版本
发布版本使用 cosign 进行签名,采用来自 GitHub Actions 的无密钥签名:无需获取密钥,证书会标明构建该发布版本的工作流。每个资源文件都有一个 <asset>.sigstore.json bundle,并在 checksums.txt 中列出。
nitrovin:在下载资源文件的目录中运行:
TAG=v0.1.2
cosign verify-blob --bundle checksums.txt.sigstore.json \
--certificate-identity https://github.com/joshuasprow/nitrovin/.github/workflows/release.yml@refs/tags/$TAG \
--certificate-oidc-issuer https://token.actions.githubusercontent.com checksums.txt
sha256sum --check --ignore-missing checksums.txt
cosign verify ghcr.io/joshuasprow/nitrovin:$TAG \
--certificate-identity https://github.com/joshuasprow/nitrovin/.github/workflows/release.yml@refs/tags/$TAG \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
nitrovin-data:数据发布版本(使用 main 签名,而非标签):
cosign verify-blob --bundle checksums.txt.sigstore.json \
--certificate-identity https://github.com/joshuasprow/nitrovin-data/.github/workflows/release.yml@refs/heads/main \
--certificate-oidc-issuer https://token.actions.githubusercontent.com checksums.txt
sha256sum --check checksums.txt
cosign verify-blob --bundle <asset>.sigstore.json … <asset> 可直接验证单个资源文件。来自其他工作流或标签的签名都会被拒绝。
数据
这些数据来自 NHTSA 的 vPIC(车辆产品信息目录)。NHTSA 每月在下载页面发布一次 Postgres 转储文件,本项目移植的解码过程就包含在该转储文件中。NHTSA 的使用条款指出,这些信息“被视为公共信息,可以分发或复制”,且 NHTSA 不对其提供任何担保;作为美国政府的作品,它不受版权保护(17 U.S.C. § 105)。相关依据见转储文件研究。
参见 NOTICE。
数据月份(YYYY_MM)标识一个转储文件。nitrovin 会将转储文件转换为一个产物,即一个 61 MB 的索引文件;相同的转储文件每次转换都会生成完全相同的字节。然后,nitrovin-data 会以 v<format>.<YYYYMM>.<rebuild>(v1.202610.1)的形式发布该文件。每个数据版本永久保留:产物、NHTSA 的转储 zip 文件(这样即使 NHTSA 停止托管,仍可重新核验某个月份的数据)、manifest.json(转储文件的 URL、大小和 SHA-256、产物的 blake3、行数、导入器提交)、该月份冻结的奇偶校验键、过期缓存列表,以及 EPA 词汇表(词汇表)。
$ nitrovin info | jq '{decoder_version, data_month, data_source, artifact_hash}'
{
"decoder_version": "v0.1.2",
"data_month": "2026_10",
"data_source": "embedded",
"artifact_hash": "blake3:7518c5b46c4264fe94a8e5158cb1949b000e50803b36d388fec9ebe914a780cb"
}
要使用其他月份的数据进行解码,请下载其产物,并通过 --data(任何命令均可)或 NITROVIN_DATA 传入;优先级依次为 --data、NITROVIN_DATA,最后是内嵌数据:
nitrovin --data nitrovin-2026_10.artifact info
NITROVIN_DATA=nitrovin-2026_10.artifact nitrovin serve
只要产物的格式主版本与二进制文件匹配(当前为格式 1),就可以加载;如果不匹配,则会报错并指出两者的版本。NHTSA 发布新月份的数据时,会自动构建并进行门禁检查;若通过,则通过所有渠道发布包含该数据的 nitrovin 补丁版本。因此,更新 nitrovin 就能获取新数据。未通过检查的月份不会发布任何内容,当前版本仍为上一个月份。没有 nitrovin update。
解码结果由 VIN、车型年份提示、now、数据月份和解码器版本共同决定,并会携带这五项信息;这五项相同,输出的字节就相同。实时 vPIC 使用的数据比任何月度转储都新,因此在同一天,它给出的结果可能与 nitrovin 不同。
词汇表
你为车辆和零件类型取的名称(例如车辆场的库存名称、零件目录的代码)可以作为词汇表文件,与数据一同加载;nitrovin 会将 VIN 或名称转换为每个已加载词汇表中的对应名称。文件采用 JSON Lines 格式,包含一个标题行和每个条目各一行
(vocabulary.schema.json),分为三种类型:词汇表将条目映射到 vPIC 的品牌和车型(按 ID 映射,可选车型年份范围和 Drive Type 等限定词),或映射到零件类型主干;扩展集用于创建 vPIC 中缺少的车辆;主干声明零件词汇表映射到的零件类型。
匹配采用一种固定的标准化方式(大小写和空格)后进行精确匹配;规则和模糊匹配由创建文件的人负责。
docs/vocabularies.md 介绍如何编写词汇表、检查词汇表,以及如何在每个界面上进行转换和列出词汇表。
使用 --vocab(可重复,适用于任何命令)或 NITROVIN_VOCAB 指定文件或目录。文件存在错误时,nitrovin 将无法启动;如果文件与数据月份不一致(例如某个 ID 已被 NHTSA 删除),nitrovin 会在标准错误输出和 nitrovin info 中发出警告,但仍会提供该文件。nitrovin vocab check 在这两种情况下都会失败,便于在 CI 中检查。从代码检出目录运行,使用 testdata/vocab 中的合成词汇表:
nitrovin vocab check testdata/vocab
nitrovin --vocab testdata/vocab list # what is loaded
nitrovin --vocab testdata/vocab list yard --where make=dodge # a vocabulary's entries, paged
nitrovin --vocab testdata/vocab translate --to yard 1C6RR7LT5FS123456 # a VIN to your names
nitrovin --vocab testdata/vocab serve # /v1/translate, /v1/vocabularies
每个数据版本还包含 epa-vehicles.jsonl,这是一个词汇表,其中列出了 EPA 燃油经济性数据
(vehicles.csv)提供的品牌和车型名称,并将其映射到当月 vPIC 的品牌和车型;如果名称暗示了 Drive Type 和 Series 限定词,也会一并映射。每月刷新时,系统会根据当天的 vehicles.csv 和新月份的数据生成该文件;只有在无错误加载时才会发布。其版本号由 EPA 的最新记录日期和数据月份组成(2026-11-03+2026_10),刷新 PR 会报告差异。
你可以从二进制所嵌入月份对应的版本中下载该文件(nitrovin --version 会显示月份),也可以下载最新版本:
curl -fsSLO https://github.com/joshuasprow/nitrovin-data/releases/latest/download/epa-vehicles.jsonl
nitrovin --vocab epa-vehicles.jsonl info | jq '.vocabularies[] | {name, version, drift}'
nitrovin --vocab epa-vehicles.jsonl translate --to epa-vehicles 1C6RR7LT5FS123456
根据其他月份构建的词汇表也能加载;对于 NHTSA 已更改的每个 ID,系统都会发出差异警告。同一版本中的 checksums.txt 也包含该文件(验证版本)。nitrovin 不附带其他词汇表,nitrovin.app 也不会加载任何词汇表。
一致性
nitrovin 对 VIN 的解码结果与 NHTSA 程序的结果一致,而非近似结果:程序输出的每一行、全部 15 列、精确字符串,均按每个 VIN 作为多重集进行比较。不设容差,也没有针对特定 VIN 的例外名单。作为对照的基准,是在 Postgres 17 中使用当月数据转储运行 NHTSA 自己的 spvindecode,并清空一张过时的缓存表:转储中缓存的有效字符与转储自身的模式行相矛盾,而实时 vPIC 的回答与重新计算的结果一致。这是唯一登记的偏差,即 stale-cache;受其影响的语料库 VIN 会随每个数据版本一同列出。
v0.1.2 中的 2026_10 数据通过了 刷新运行 42662006323: 18,339 次调用和 966,232 行数据,0 项不一致;当月 13,014 个 WMI 全部得到覆盖,25,293 个 VinSchema 中有 25,283 个得到覆盖;52 次调用涉及过时缓存;全部 7 个偏差见证在 253 个字段上均与实时 vPIC 一致。报告内容见 刷新 PR。
docs/parity.md 介绍语料库和检查门槛、每个月报告的存放位置,以及如何自行在几秒内重新运行某个版本的一致性检查。
已知限制
- 有 10 个 VinSchema 从未被调用。 在 2026_10 中,对于尝试过的每个 VIN,模式 4329、5046、 6173、11117、11146、11395、11396、13555、15597 和 21187 都会被同一 WMI 和年份下的另一个 模式优先匹配,因此没有符合条件的 VIN 会到达这些模式(运行 42662006323、 #72)。
- 偏差针对的是类别,而非 VIN。 如果 nitrovin 与 NHTSA 的流程不一致,则这是一个 bug,除非已登记的类别 能证明 NHTSA 数据存在缺陷,并提供机械检测器,以及一个实时 vPIC 与 nitrovin 结果一致的 VIN(ADR 0006、 登记表)。目前有一个类别。
vpic布局与实时DecodeVinValues并非逐字节一致。 它没有VIN键,包含PlantAddress,缺少 vPIC 中始终为空的 10 个旧版键;对于多值元素,它按字节顺序拼接,而 vPIC 的顺序 不稳定(详情)。奇偶校验仅针对两种布局共同构建所依据的项目。- 元素名称和代码属于数据,而非 API。 NHTSA 会按月更改这些名称;对于任何需要长期使用的内容,请固定
element_id和attribute_id。 - 超过 17 个字符的输入会被拒绝。 NHTSA 的流程会因此抛出错误,所以没有可匹配的结果。
- 不能直接替代 vPIC 的 URL。
serve使用自己的/v1路由,而非 vPIC 的/api/vehicles/...。 - winget 尚未上线(#78)。 macOS 二进制文件未经公证(参见安装)。
- C 库无法卸载;在 Linux 上需要 glibc 2.17+(不支持 musl),在 macOS 上需要 11+。
性能
在 Apple M5 Pro 的单核上,v0.1.2 通过带 JSON 输出的 nitrovin decode - 每秒可解码约 17,600 个 VIN(在 GOMAXPROCS=1 下,解码 25,000 个语料库 VIN 用时 1.42 秒);处理一个 VIN 的 nitrovin decode 进程耗时约 6 毫秒,占用 22 MB 内存。
贡献
欢迎提交问题和拉取请求。CONTRIBUTING.md
介绍了构建、测试、在自己的机器上运行 Postgres oracle,以及涉及解码的更改规则。决策记录位于
docs/adr/,术语见 GLOSSARY.md,计划见
wayfinder 地图。
致谢与许可
MIT 许可证,详见 LICENSE。数据来自 NHTSA。该移植项目的结构、
奇偶校验方法和偏差登记表参考了 Bryce
Drennan 的 ultravin(MIT)这一参考实现;未复制任何 ultravin 源代码,
而已提交的奇偶校验语料库包含 ultravin 的 VIN 列表。详情见
NOTICE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。