npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@nreg/model-advisor-mcp

v1.0.0

Published

MCP server for LLM/VLM model selection — benchmarks (ELO/SWE-bench/Aider/OpenVLM), Artificial Analysis indices, OpenCode subscription awareness, and cost estimation across OpenRouter models.

Downloads

287

Readme

model-advisor-mcp

为 AI 助手提供实时的 LLM/VLM 模型选型能力:以 OpenRouter 为基座,聚合 8 个权威基准数据源与 OpenCode 订阅目录,通过 MCP(Model Context Protocol)以 stdio 方式对外提供查询、排行、对比、推荐、成本估算与项目选型等 8 个工具。

license node mcp npm version npm downloads

特性

  • 8 个 MCP Toolget_model_info / list_top_models / compare_models / recommend_model / estimate_cost / batch_get_pricing / select_model_for_project / whats_new
  • OpenRouter 基座 + 8 基准源 + OpenCode 订阅:覆盖价格、上下文、模态、能力与基准分;OpenRouter 内置 Artificial Analysis 三指数、Design Arena 与 reasoning 档位。
  • LLM + VLM 双类覆盖:文本竞技场 ELO 与视觉竞技场 ELO 分开采集,视觉模型独立排序,避免文本分污染视觉选型。
  • 成本/预算能力:按每 1M token 单价估算调用成本;支持 OpenCode 订阅档(Zen 免费 / Go 付费)过滤与项目级选型。
  • 中文生态友好:能力榜/开源榜/安全榜直接消费 OpenCompass 官方数据,Kimi、GLM、Qwen、DeepSeek、豆包等国产模型具备完整基准覆盖。
  • 单源失败不阻断:OpenRouter 为必选基座,其余基准源与订阅目录全部容错;任一源抓取失败仅降级该源,整体服务继续可用。
  • stale-while-revalidate 缓存:内存缓存 + 过期兜底,上游故障时用旧数据顶住,避免整榜归零。
  • 模糊匹配:模型名规范化(provider 前缀、日期后缀、版本号、Claude 命名序)后多级匹配,并对 VL 模态做保护,防止视觉模型错误塌缩到文本基础模型。

数据源一览

| 数据源 | 内容 | 条目量 | 缓存 TTL | |---|---|---:|---:| | OpenRouter API | 基础目录:价格 / 上下文 / 模态 / 工具与推理能力,以及内置 AA 三指数 / Design Arena / reasoning 档位 | ~410 商用模型 | 1 小时 | | OpenCompass realtime-elo(text) | 文本竞技场人类偏好 ELO | 31 | 6 小时 | | OpenCompass realtime-elo(vision) | 视觉竞技场 ELO | 20 | 6 小时 | | OpenCompass 官方能力榜 | 旗舰模型:知识 / 推理 / 数学 / 代码 | 15 | 6 小时 | | OpenCompass 开源能力榜 | 开源模型:HLE / AIME2025 / MMLU-Pro / LiveCodeBenchV6 / GPQA / IFEval | 48 | 6 小时 | | SWE-bench Verified | 代码修复基准(取每个模型最高 resolved) | 78 | 6 小时 | | Aider Polyglot | 多语言代码编辑基准(pass_rate_2) | 66 | 6 小时 | | OpenVLM 综合视觉榜 | MMMU / MMBench / OCR / AI2D / MathVista | 281 | 6 小时 | | VLM 官方能力榜 | 感知 / 空间 / 图表 / 推理 / 创作 / Agent | 22 | 6 小时 | | OpenCompass 安全榜(text) | 文本安全对齐总分 | 46 | 6 小时 | | OpenCompass 安全榜(vlm) | VLM 安全总分 | 45 | 6 小时 | | OpenCode Zen(订阅目录) | 免费档可用模型 slug(经 normalizeKey 与 OpenRouter 匹配) | 70 | 6 小时 | | OpenCode Go(订阅目录) | 付费档可用模型 slug(同上) | 37 | 6 小时 |

说明:上表按「OpenRouter 基座 + 8 个基准源 + OpenCode 订阅(Zen/Go 两端点)」统计(ELO 与安全榜各含 text + vision 两条 pipeline)。条目量为 2026-09 实测规模,上游榜单会随时间浮动。

新增数据能力

  • Artificial Analysis 三指数aaIntelligence / aaCoding / aaAgentic):来自 OpenRouter benchmarks.artificial_analysis,为 0-100 指数分,无需付费 API key。
  • Design Arena ELOdesignArenaElo):来自 OpenRouter benchmarks.design_arena,取所有条目中的最高 ELO。
  • reasoning 档位:来自 OpenRouter reasoning,展示支持的推理档位与默认档位。
  • OpenCode 订阅归属opencodeSubscriptionzen / go / both):由 OpenCode Zen/Go 目录经规范化匹配后推得。
  • 质量档qualityTierS/A/B/C):基于本项目全库百分位推导(综合百分位 ≥95→S、≥80→A、≥60→B、其余→C),不依赖任何硬编码静态表。

安装与配置

环境要求

  • Node.js >= 18(依赖 AbortSignal.timeout
  • 可访问外网(需拉取各榜单数据)

方式一(推荐):npm

a) 直接用 npx(无需安装)

{
  "mcpServers": {
    "model-advisor": {
      "enabled": true,
      "type": "stdio",
      "command": ["npx", "-y", "@nreg/model-advisor-mcp"]
    }
  }
}

b) 全局安装后运行

npm install -g @nreg/model-advisor-mcp
{
  "mcpServers": {
    "model-advisor": {
      "enabled": true,
      "type": "stdio",
      "command": ["model-advisor-mcp"]
    }
  }
}

方式二:本地构建(开发调试用)

从源码构建(开发/调试):

git clone <repository-url> model-advisor-mcp
cd model-advisor-mcp
npm install
npm run build

bin 入口为 dist/cli.jsdist/index.js 同样可直接运行)。在 MCP 客户端配置中加入:

{
  "mcpServers": {
    "model-advisor": {
      "enabled": true,
      "type": "stdio",
      "command": ["node", "E:/work/nreg/ai-mcp/model-advisor-mcp/dist/cli.js"]
    }
  }
}

启动时服务会异步预热缓存(非阻塞,不阻塞 MCP 连接建立),首个请求若预热未完成会再次触发加载。

工具说明

服务注册 8 个 MCP Tool,返回值均为 Markdown 文本(select_model_for_project 额外提供 structuredContent 结构化输出)。

| 工具 | 用途 | |---|---| | get_model_info | 单模型详情(定价 / 基准 / 百分位 / 质量档 / 订阅 / 推理档位) | | list_top_models | 按类别列出 Top 模型,支持订阅档与上下文/发布日期过滤 | | compare_models | 2-5 个模型并排对比 | | recommend_model | 按用途 + 预算 + 硬性需求推荐模型 | | estimate_cost | 按 token 用量估算调用成本 | | batch_get_pricing | 批量查询多模型价格与订阅信息 | | select_model_for_project | 项目/任务级选型(三档 + 结构化输出) | | whats_new | 按时间窗口列出近期新增模型 |

get_model_info

获取单个模型的详细信息:定价、上下文、各来源基准分、全库百分位、质量档与能力特性,并可选附带 API 调用示例。支持模糊匹配,未命中时返回相近模型建议(前 5)。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | model | string | 是 | 模型 ID 或名称,支持模糊匹配(如 anthropic/claude-sonnet-4.6gpt-5.2kimi) | | include_api_example | boolean | 否 | 是否附带 API 示例,默认 true | | api_format | enum | 否 | API 示例格式:openai_sdk(默认)/ curl / python_requests |

调用示例

{ "model": "claude-sonnet-4.6", "api_format": "curl" }

输出摘录(Markdown):

## anthropic/claude-sonnet-4.6

**名称**: Claude Sonnet 4.6 | **供应商**: anthropic | **模态**: text+image→text | **系列**: claude | **质量档**: A 级
**OpenCode 订阅**: Go+Zen
**推理档位**: high, medium(默认 medium)

### 定价与上下文
| 指标 | 数值 |
|------|------|
| 输入 | $3.00 /1M tok |
| 输出 | $15.00 /1M tok |
| 上下文 | 200K |

### 基准: 代码类
| 基准 | 得分 |
|------|------|
| SWE-bench | 72.1% |
| Aider Polyglot | 65.4% |

### 基准: Artificial Analysis
| 基准 | 得分 |
|------|------|
| AA 智能指数 | 58.3% |
| AA 代码指数 | 54.1% |

### 全库百分位
| 类别 | 百分位 |
|---|---|
| 代码 | P96 |
| 通用 | P92 |

list_top_models

按类别列出排名靠前的模型,返回紧凑 Markdown 表格(模型 / 价格 / 上下文 / 质量档 / OpenCode 订阅 / 关键基准 / 发布日期)。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | category | enum | 是 | 类别:coding / math / vision / general / cost-effective / open-source / speed / context-window / reasoning | | limit | number | 否 | 返回数量,默认 10,范围 1-20 | | min_context | number | 否 | 最小上下文窗口(token 数) | | min_release_date | string | 否 | 最早发布日期(YYYY-MM-DD),早于此日期的模型被排除 | | subscription | enum | 否 | 按 OpenCode 订阅档过滤:go / zen 表示该档可用(含 both),both 仅统计两档都可用 | | free_only | boolean | 否 | 仅显示 OpenCode Zen 免费档可用的模型(OpenRouter 免费模型已在基座剔除) |

调用示例

{ "category": "coding", "limit": 5, "min_context": 128000, "subscription": "zen" }

输出摘录:

## Top 5: 代码

| # | 模型 | 输入 $/1M | 输出 $/1M | 上下文 | 质量档 | OpenCode 订阅 | 关键基准 | 发布日期 |
|------|------|------|------|------|------|------|------|------|
| 1 | anthropic/claude-sonnet-4.6 | $3.00 | $15.00 | 200K | [A] | Go+Zen | SWE-bench 72.1% | 2026-02-10 |

compare_models

并排对比 2-5 个模型,行 = 指标(价格 / 上下文 / ELO / AA 三指数 / Design Arena / SWE-bench / Aider / 官方能力四维 / GPQA / MMMU / 安全 / 质量档 / 订阅),列 = 模型,每个指标的最优值加粗。命中不足 2 个时返回错误并附建议。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | models | string[] | 是 | 模型 ID 或名称数组,长度 2-5,支持模糊匹配 |

调用示例

{ "models": ["claude-sonnet-4.6", "gpt-5.2", "gemini-3-pro"] }

输出摘录:

## 模型对比(3 个)

| 指标 | **anthropic/claude-sonnet-4.6** | **openai/gpt-5.2** | **google/gemini-3-pro** |
|------|------|------|------|
| 输入 $/1M | $3.00 | $2.50 | $3.50 |
| 输出 $/1M | $15.00 | $10.00 | $14.00 |
| 上下文 | 200K | 400K | **1M** |
| ELO(人类偏好) | 1382 | 1401 | **1425** |
| AA 智能指数 | 58.3% | **61.0%** | 59.7% |
| SWE-bench | **72.1%** | 68.3% | 66.5% |
| 质量档 | [A] | **[S]** | [A] |
| OpenCode 订阅 | Go+Zen | Go | Zen |

recommend_model

按用途、预算与硬性要求推荐模型:先做硬性过滤,再按百分位与关键基准加权软打分排序,并为每个结果生成一句中文理由(含质量档与 OpenCode 订阅提示)。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | use_case | enum | 是 | 用途:coding / math / general / vision / creative / reasoning / cost-effective | | max_input_price | number | 否 | 输入价格上限(USD / 1M tokens) | | max_output_price | number | 否 | 输出价格上限(USD / 1M tokens) | | min_context | number | 否 | 最小上下文窗口(token 数) | | require_vision | boolean | 否 | 必须支持视觉/图片输入 | | require_tools | boolean | 否 | 必须支持函数/工具调用 | | require_open_source | boolean | 否 | 必须为开源许可 | | budget | enum | 否 | 预算档:free(OpenCode Zen 免费档可用)/ low(blended ≤ $1/1M)/ any(不限) | | requirements | string[] | 否 | 硬性需求,如 ['vision','tools','open_source','reasoning','long context'] | | limit | number | 否 | 返回数量,默认 3,范围 1-20 |

调用示例

{ "use_case": "coding", "budget": "low", "requirements": ["tools"], "limit": 3 }

输出摘录:

## 推荐(用途:coding,预算:low)

| 排名 | 模型 | 综合分 | 输入 $/1M | 输出 $/1M | 上下文 | 质量档 | OpenCode 订阅 |
|------|------|------|------|------|------|------|------|
| 1 | anthropic/claude-sonnet-4.6 | 94.2 | $3.00 | $15.00 | 200K | A 级 | Go+Zen |

1. **anthropic/claude-sonnet-4.6** — SWE-bench 72.1%,官方代码 88.4%,代码分位 P96;支持工具调用,A 级,OpenCode Go+Zen,输入 $3.00/1M,上下文 200K。

estimate_cost

估算指定 LLM 模型在给定 token 用量下的调用成本(USD)。按每 1M token 单价计算输入/输出/缓存/推理明细与总计,用于预算评估。支持模糊匹配模型名。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | model | string | 是 | 模型 ID 或名称(支持模糊匹配) | | input_tokens | number | 否 | 输入 token 数 | | output_tokens | number | 否 | 输出 token 数 | | cache_read_tokens | number | 否 | 缓存读取 token 数(若模型有缓存价) | | cache_write_tokens | number | 否 | 缓存写入 token 数(若模型有缓存价) | | reasoning_tokens | number | 否 | 推理 token 数(若模型有推理价) | | requests | number | 否 | 请求次数(默认 1) |

调用示例

{ "model": "anthropic/claude-sonnet-4.6", "input_tokens": 1000000, "output_tokens": 500000, "requests": 1 }

输出摘录:

## 成本估算:anthropic/claude-sonnet-4.6
**名称**: Claude Sonnet 4.6 | **供应商**: anthropic | **质量档**: A 级

### 用量
- 输入 tokens: 1,000,000
- 输出 tokens: 500,000

### 成本明细(USD)
| 项目 | 单价 $/1M | 用量 | 小计 |
|------|-----------|------|------|
| 输入 | $3.00 | 1,000,000 | $3.000000 |
| 输出 | $15.00 | 500,000 | $7.500000 |

## 预估总成本
**$10.500000**

batch_get_pricing

一次查询多个模型的价格信息,返回紧凑 Markdown 表格(输入/输出单价、上下文、质量档、OpenCode 订阅)。模型 ID 或名称支持模糊匹配,最多 50 个。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | model_ids | string[] | 是 | 模型 ID 或名称数组(支持模糊匹配,1-50 个) |

调用示例

{ "model_ids": ["claude-sonnet-4.6", "gpt-5.2", "kimi-k2"] }

输出摘录:

## 批量价格查询(命中 3 / 请求 3)

| 模型 | 供应商 | 输入 $/1M | 输出 $/1M | 上下文 | 质量档 | OpenCode 订阅 |
|------|--------|------|------|------|------|------|
| anthropic/claude-sonnet-4.6 | anthropic | $3.00 | $15.00 | 200K | A 级 | Go+Zen |
| openai/gpt-5.2 | openai | $2.50 | $10.00 | 400K | S 级 | Go |

select_model_for_project

根据项目/任务描述、硬性需求与预算档,选出「最佳综合 / 最便宜可选 / 最佳性价比」三档模型,并返回结构化结果(structuredContent)。用途由关键词自动推断(7 类 UseCase),过滤后按本项目打分排序。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | project | string | 否 | 项目描述(与 task 至少提供一个) | | task | string | 否 | 具体任务描述 | | requirements | string[] | 否 | 硬性需求,如 ['vision','tools','open_source','long context'] | | budget | enum | 否 | 预算档:free / low / any,默认 any | | optimization_goal | enum | 否 | 优化目标:balanced(性价比,默认)/ best(能力最强)/ cheapest(最便宜) | | expected_usage | object | 否 | 预期用量 { input_tokens, output_tokens, requests },提供后给出预估成本 | | limit | number | 否 | 候选数量,默认 5,范围 1-20 |

调用示例

{
  "task": "重构一个 TypeScript 单体仓库并修复测试",
  "requirements": ["tools", "long context"],
  "budget": "low",
  "optimization_goal": "balanced",
  "expected_usage": { "input_tokens": 2000000, "output_tokens": 500000, "requests": 10 },
  "limit": 5
}

输出摘录(Markdown;同时返回 structuredContent):

## 选型结果(目标:balanced,预算:low)
项目/任务:- / 重构一个 TypeScript 单体仓库并修复测试;已应用需求:tools、long context

- **最佳综合**:anthropic/claude-sonnet-4.6(评分 94.2)
- **最便宜可选**:moonshot/kimi-k2($0.90/1M)
- **最佳性价比**:anthropic/claude-sonnet-4.6(值分 88.5)

| 排名 | 模型 | 供应商 | 评分 | 值分 | 输入 $/1M | 输出 $/1M | 质量档 | 理由 |
|------|------|--------|------|------|------|------|------|------|
| 1 | anthropic/claude-sonnet-4.6 | anthropic | 94.2 | 88.5 | $3.00 | $15.00 | A | SWE-bench 72.1%… |

structuredContent 结构(字段为 snake_case):

{
  "query": { "project": null, "task": "…", "requirements": ["tools"], "budget": "low", "optimization_goal": "balanced" },
  "best_overall": { "id": "…", "name": "…", "score": 94.2, "valueScore": 88.5, "blended_price": 11.4, "est_cost": 13.5, "quality_tier": "A", "reasons": ["…"], "tradeoffs": ["…"] },
  "cheapest_acceptable": { "…": "…" },
  "best_value": { "…": "…" },
  "candidates": [{ "…": "…" }],
  "cost_basis": "expected_usage"
}

whats_new

按时间窗口列出近期新增/发布的模型(基于发布日期 releaseDate),可选按类别过滤。时间格式如 7d(天)/24h(小时)/2w(周)。

| 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | since | string | 否 | 时间窗口,默认 7d,格式如 7d / 24h / 2w | | category | enum | 否 | 可选:仅看某类别(以其 Top 50 判定) | | limit | number | 否 | 返回数量,默认 20,最大 100 |

调用示例

{ "since": "30d", "category": "coding", "limit": 10 }

输出摘录:

## 5 个近期新增模型(最近 30d · coding)

1. OpenAI GPT-5.2 (openai/gpt-5.2) [S]
   openai | 输入 $2.50 | 上下文 400K | 发布 2026-09-01 | 订阅 Go

开发

npm install        # 安装依赖
npm run build      # tsup 构建到 dist/(双入口 index.ts + cli.ts,ESM + d.ts,--clean)
npm run dev        # tsx 直接运行 src/index.ts(开发调试)
npm test           # vitest run 单元测试
npm run smoke      # 冒烟测试:缓存覆盖检查 + MCP 端到端握手(需先 build)
npm run test:sources  # 逐个验证各源可达性 / 条目数 / 数据质量 / 交叉匹配率(需联网)
npm run test:published  # 发布后 e2e:npx 拉起 @latest,断言 8 工具并实测 get_model_info / estimate_cost
  • npm run smoke:Part A 检查 warmup 后关键源(OpenRouter / ELO text / 官方能力榜 / OpenVLM)覆盖,任一 0 条判失败,并统计 AA 三指数 / OpenCode 订阅 / qualityTier 覆盖(静默归零可被观测);Part B 以子进程方式走完 initialize → notifications/initialized → tools/list,验证构建产物与 8 个 tool 注册。
  • npm run test:sources:是数据源的哨兵脚本,对上游改名、字段变更、网络故障做预警(含交叉匹配率阈值断言)。
  • npm run test:published:发布后真机 e2e。默认拉起 @nreg/model-advisor-mcp@latest;本地也可用环境变量覆盖命令验证构建产物:$env:MCP_TEST_COMMAND="node"; $env:MCP_TEST_ARGS="dist/cli.js"; node test-published-package.js

项目结构

model-advisor-mcp/
├── src/
│   ├── index.ts                 # 库入口(可执行):stdio 连接、优雅停机、非阻塞预热
│   ├── cli.ts                   # CLI 入口(bin 目标 dist/cli.js):createServer + stdio 连接
│   ├── server.ts                # createServer 工厂:装配 8 个 tool(cli/index 复用)
│   ├── types.ts                 # OpenRouter 响应类型、统一模型类型、类别/用途枚举、缓存与评分类型
│   ├── data/
│   │   ├── cache.ts             # InMemoryCache(TTL 过期删除 + stale 兜底 + freshness 信息)
│   │   ├── normalizer.ts        # normalizeKey / generateMatchKeys / buildKeyToId / findMatch,多源合并
│   │   ├── percentiles.ts       # 五类百分位计算(代码 / 数学 / 通用 / 视觉 / 性价比)
│   │   ├── quality.ts           # 基于百分位推导 qualityTier(S/A/B/C)+ 可选人工覆盖表
│   │   ├── registry.ts          # ModelRegistry:多源加载编排、Top 排序规则、四段匹配查询
│   │   ├── fetchers/            # 数据源抓取器
│   │   │   ├── openrouter.ts        # OpenRouter 模型目录(必选基座,解析 AA 三指数 / Design Arena / reasoning)
│   │   │   ├── opencode.ts          # OpenCode Zen/Go 订阅目录(归属判定 zen/go/both)
│   │   │   ├── elo.ts               # OpenCompass realtime-elo(text + vision)
│   │   │   ├── ability-official.ts  # OpenCompass 官方能力榜
│   │   │   ├── ability-open-source.ts # OpenCompass 开源能力榜
│   │   │   ├── swe-bench.ts         # SWE-bench Verified
│   │   │   ├── aider.ts             # Aider Polyglot(内置极简 YAML 解析)
│   │   │   ├── vlm-leaderboard.ts   # OpenVLM 综合视觉榜
│   │   │   ├── vlm-official.ts      # VLM 官方能力榜
│   │   │   └── security.ts          # 安全榜(text + vlm)
│   │   └── static/
│   │       └── api-examples.ts  # OpenAI SDK / curl / python_requests 三种 API 示例模板
│   ├── tools/
│   │   ├── model-info.ts        # get_model_info
│   │   ├── list-top.ts          # list_top_models(订阅档 / 免费档过滤)
│   │   ├── compare.ts           # compare_models(含 AA / Design Arena / 质量档 / 订阅行)
│   │   ├── recommend.ts         # recommend_model(预算 / 需求 / limit)
│   │   ├── estimate.ts          # estimate_cost(每 1M token 计价)
│   │   ├── batch.ts             # batch_get_pricing
│   │   ├── select.ts            # select_model_for_project(outputSchema + structuredContent)
│   │   ├── select-scoring.ts    # 选型核心纯逻辑(三档 / 打分 / 理由)
│   │   ├── whats-new.ts         # whats_new(since 解析 + 发布时间过滤)
│   │   ├── requirements.ts      # 预算档 / 需求词 → 硬过滤器(共享)
│   │   ├── suggest.ts           # 未命中相近模型建议(共享)
│   │   └── formatters.ts        # 共享 Markdown 格式化与标签映射
│   └── __tests__/               # vitest 单元测试(normalizer / percentiles / openrouter / opencode / quality / requirements / select-scoring)
├── scripts/
│   ├── smoke.ts                 # 冒烟测试(覆盖检查 + MCP 握手,断言 8 tool)
│   └── test-data-sources.ts     # 各源有效性 + 交叉匹配率测试
├── test-published-package.js    # 发布后 e2e(MCP SDK Client + StdioClientTransport)
├── .github/workflows/ci.yml     # CI:Node 18/20/22 矩阵 + build + vitest + 包洁净检查
├── socket.yml                   # Socket.dev 供应链配置
├── dist/                        # 构建产物(index.js / cli.js / *.d.ts)
├── package.json
├── tsconfig.json
├── LICENSE
└── README.md

数据源与排序原则

各类别排序依据

| 类别 | 排序依据(多级降序 / 过滤) | |---|---| | coding | SWE-bench Verified → Aider Polyglot → LiveCodeBenchV6 | | math | 官方能力榜数学 → AIME2025 → MMLU-Pro | | vision | 仅视觉模型:MMMU → VLM 官方榜(不含 Agent)→ 性价比 | | general | 竞技场 ELO → 官方能力榜 Average | | cost-effective | 排除免费模型,按 性能分 / blended 价格(0.3×输入 + 0.7×输出)降序 | | open-source | 仅开源模型:竞技场 ELO 降序 → 价格升序 | | speed | 输出价格升序(作为推理速度代理:越便宜通常越快) | | context-window | 上下文长度降序 | | reasoning | 仅支持推理的模型:GPQA-Diamond → 官方推理 → 竞技场 ELO |

list_top_models 默认多取 limit + 10 条再应用过滤;存在订阅过滤(subscription / free_only)时多取 limit + 50 条,确保过滤后仍能补足请求数量。

匹配与容错

  • 规范化匹配normalizeKey 统一小写、去 provider 前缀、去日期/thinking 后缀、空格转连字符、版本号 4-6 → 4.6generateMatchKeys 额外生成 Claude 双向序变体;findMatch 做精确匹配 + 子串兜底。
  • 保护规则:子串匹配要求两侧键均 ≥ 6 字符,避免短茎误吞无关模型;带视觉 token(vl / vision)的名称不会塌缩到非视觉基础模型。
  • 百分位与质量档:对代码 / 数学 / 通用 / 视觉 / 性价比五类分别计算全库百分位;qualityTier 基于综合百分位(coding/math/general/vision 取最大)推导。
  • 数据源监控scripts/test-data-sources.ts 是哨兵,除网络与条目数阈值外,核心是各源到 OpenRouter 基座的交叉匹配率(上游改名或换字段会导致命中率塌方),并对低比率源设置绝对命中数兜底。

许可

MIT © 2026 model-advisor-mcp contributors