Skip to main content
Glama

Model Router — Cost-Aware Multi-LLM Routing with Free-First Fallback Chain

Route every task to the best model automatically — free providers first, paid providers as fallback.

License: MIT Python 3.8+ Tests CI

Release

📥 立即下载(三平台安装包,双击即用)

平台

轻量版(快速问答)

完整版(含路由分析/统计)

🪟 Windows

⬇️ Model-Router-Windows.exe (11.9MB)

⬇️ ModelRouter-Windows-x64.exe (18MB)

🍎 macOS

⬇️ Model-Router-macOS (10.4MB)

⬇️ ModelRouter-macOS.app (15.4MB)

🐧 Linux

⬇️ Model-Router-Linux.AppImage (25.3MB)

⬇️ ModelRouter-Linux-x86_64.AppImage (28MB)

💡 轻量版 = tkinter 纯标准库(零依赖,启动最快) · 完整版 = pywebview 现代界面(含路由分析/历史统计/成本显示) 🔗 全部版本:Releases 页面

Related MCP server: Robot Resources Router

English Introduction

What it is

Model Router is a cost-aware multi-LLM router that automatically sends every task to the best model for it — free providers first, paid providers only as a fallback. It comes with a no-code graphical client (download, double-click, done), plus a CLI, a Python API, an MCP server, and a file-watch daemon.

Most LLM integration code hard-codes a single model or a single API provider, which means:

  • Expensive: every request (even trivial ones) goes to a paid frontier model

  • Fragile: one provider outage = total failure

  • Inflexible: no way to match model capability to task difficulty

Model Router solves all three with a simple, dependency-light design: roughly 90% of everyday tasks can be served by free-tier models, while hard tasks still get frontier-model quality through automatic fallback.

Key Features

  • Task Difficulty Classification: 5 levels (vision / long / complex / medium / simple) via keyword + content-length heuristics — zero cost, no LLM involved

  • Free-First Fallback Chain: each route level defines an ordered candidate chain — free providers (Zhipu, SiliconFlow, OpenRouter free models) are tried first; on any failure, the next candidate (eventually paid DeepSeek/Qwen/GLM/Kimi) is tried automatically

  • Zero Third-Party Dependencies: core library only needs requests; the MCP server is pure stdlib (JSON-RPC 2.0 over stdio)

  • Multiple Interfaces: Python API · CLI · MCP server (any MCP client: Claude, Qoder, Cursor…) · File-watch daemon

  • No-Code GUI Client: desktop app for Windows / macOS / Linux — type a question, click Answer, routing happens automatically in the background

Installers

No programming needed — download the installer and double-click:

Platform

Download

🪟 Windows

Model-Router-Windows.exe (download and run)

🍎 macOS

Model-Router-macOS (App)

🐧 Linux

Model-Router-Linux.AppImage

GUI features:

  • 🎯 Type a question → difficulty is detected automatically → the best free model is chosen automatically

  • 🧭 Live routing info (which model is answering)

  • 💬 Dark professional theme, chat-style interface

  • ⚙️ Configurable role / system prompt

All the routing logic runs automatically in the background. The user only needs to type a question and click Answer.

Developer mode:

pip install -r requirements.txt
python gui_app.py        # launch the GUI
python auto_router.py    # or use the CLI

🖥 Desktop App (Windows / macOS / Linux)

Download the installer for your platform from Releases:

Platform

Installer

Windows

ModelRouter-Windows-x64.exe (double-click to run)

macOS

ModelRouter-macOS.app (drag to Applications)

Linux

ModelRouter-Linux-x86_64.AppImage (chmod +x, run)

Features: route analysis (zero-cost) · auto call with free-first fallback · provider config viewer (keys masked) · no terminal needed.

# Build locally (requires Python 3.8+)
pip install -r requirements-desktop.txt
bash scripts/build_client.sh        # auto-detects platform

🚀 Quick Start

# 1. Install (only requests is required)
pip install requests

# 2. Configure
cp config.example.json config.json
#    → fill in your API keys

# 3. CLI — analyze only (zero cost, no model call)
python router_core.py analyze "分析这份气象数据"

# 4. CLI — route and call
python router_core.py call "翻译以下段落" --content "Hello world" --system "你是专业翻译"

# 5. Python API
from router_core import route_and_call, analyze_task
result = analyze_task("写一份论文摘要", content_len=300)
print(result["primary"])           # first candidate
print(result["candidates"])        # full fallback chain
text = route_and_call("总结要点", "long text...")["content"]

Architecture

                ┌─────────────────────────────────────────────┐
                │              router_core.py                 │
                │                                             │
   task_desc ──▶│  classify_task()  →  5 difficulty levels   │
   content   ──▶│  _get_candidates() → ordered provider chain│
   image ──────▶│  route_and_call()  → free-first, fallback  │
                │                                             │
                └──────────────┬──────────────────────────────┘
                               │
              ┌────────────────┼───────────────────┐
              ▼                ▼                   ▼
        auto_router.py    mcp_server.py       Python API
        (CLI + daemon)    (MCP tools)         (import router_core)

Routing Levels

Level

Trigger

Typical Models

vision

image/screenshot/OCR

Qwen-VL, GLM-4V

long

content > 2000 chars, full documents

128K-context models

complex

analysis/code/data/stats/reasoning

DeepSeek, Qwen3-32B

medium

writing/translation/polish

GLM, Qwen

simple

daily chat / quick queries

small free models

Fallback semantics: candidates are tried in order; the response reports tier (free/paid), attempts, fallback_used, and per-provider errors for full observability.

MCP Server (for any MCP client)

python mcp_server.py

Tool

Description

smart_call

Auto-route + call (free-first, fallback on failure)

route_analyze

Analyze difficulty + return candidate chain (zero cost)

list_models

List all configured providers, models and chains

Register in your MCP client (e.g. Claude Desktop claude_desktop_config.json):

{
  "mcpServers": {
    "model-router": {
      "command": "python",
      "args": ["/path/to/model-router/mcp_server.py"],
      "env": {"PYTHONIOENCODING": "utf-8"}
    }
  }
}

Task-Triggered Daemon (file-watch mode)

# One-shot
python auto_router.py "任务描述" -c "内容" --image photo.png

# Daemon: drop task files into inbox/, results appear in outbox/
python auto_router.py --watch --dir ./tasks

Configuration

config.json structure (see config.example.json):

  • providers: OpenAI-compatible endpoints with tier (free / paid) and optional enabled: false

  • routing: per-level ordered candidates chains — free first, paid as safety net

  • levels: human-readable descriptions per level

Add or remove providers freely — the router is fully data-driven.

License

MIT — free for personal and commercial use. See LICENSE.


🇨🇳 中文版介绍

这是什么?

Model Router(模型路由器) 是一个「按任务难度自动路由到最优免费模型」的开源工具:免费模型优先,付费模型兜底。它附带一个无需编程、双击即用的图形化客户端,同时提供命令行(CLI)、Python API、MCP 服务器和文件监听守护进程。

大多数 LLM 集成代码都写死单一模型或单一 API 供应商,导致:

  • :每次请求(哪怕是最简单的问题)都打到付费的顶级模型上

  • 脆弱:一家供应商宕机 = 全线瘫痪

  • 不灵活:无法让模型能力匹配任务难度

Model Router 用一套轻量、无依赖的设计同时解决这三个问题:日常任务中约 90% 都可以由免费模型完成,而困难任务通过自动降级链依然能获得顶级模型的质量。

🎯 为什么做这个项目?

因为市面上大多数方案都在「杀鸡用牛刀」:

  1. 简单问答也调用付费大模型,成本浪费严重;

  2. 单一供应商一旦故障,整个服务就不可用;

  3. 模型能力与任务难度完全不匹配,体验和成本双输。

Model Router 的答案是:先分类、再路由、免费优先、失败自动降级——让每一分钱都花在刀刃上,同时保证服务的稳定性。

✨ 核心特性

  • 任务难度五级分类vision(图像)/ long(长文)/ complex(复杂)/ medium(中等)/ simple(简单),通过关键词 + 内容长度启发式判断——零成本,不调用任何 LLM

  • 免费优先的降级链(Free-First Fallback Chain):每个路由级别定义一条有序候选链——先尝试免费供应商(智谱、SiliconFlow、OpenRouter 免费模型),任一环节失败自动尝试下一个候选(最终兜底为付费的 DeepSeek / Qwen / GLM / Kimi)

  • 零第三方依赖:核心库只需 requests;MCP 服务器纯标准库实现(stdio 上的 JSON-RPC 2.0)

  • 多接口:Python API · CLI · MCP 服务器(可接入任意 MCP 客户端:Claude、Qoder、Cursor……)· 文件监听守护进程

  • 免编程图形化客户端:Windows / macOS / Linux 桌面应用——输入问题、点击回答,路由全部在后台自动完成

💻 图形化客户端(傻瓜式,拿来就用)

无需编程,下载安装包双击即用:

平台

下载

🪟 Windows

Model-Router-Windows.exe(下载即运行)

🍎 macOS

Model-Router-macOS(App)

🐧 Linux

Model-Router-Linux.AppImage

界面功能:

  • 🎯 输入问题 → 自动识别任务难度 → 自动选择最优免费模型

  • 🧭 实时显示路由信息(哪个模型在回答)

  • 💬 深色专业主题,对话式界面

  • ⚙️ 可设置角色提示词

专业的路由逻辑全部在后台自动完成,用户只需输入问题、点击回答

开发者模式

pip install -r requirements.txt
python gui_app.py        # 启动图形界面
python auto_router.py    # 或命令行

🏗 架构

                ┌─────────────────────────────────────────────┐
                │              router_core.py                 │
                │                                             │
   task_desc ──▶│  classify_task()  →  5 difficulty levels   │
   content   ──▶│  _get_candidates() → ordered provider chain│
   image ──────▶│  route_and_call()  → free-first, fallback  │
                │                                             │
                └──────────────┬──────────────────────────────┘
                               │
              ┌────────────────┼───────────────────┐
              ▼                ▼                   ▼
        auto_router.py    mcp_server.py       Python API
        (CLI + daemon)    (MCP tools)         (import router_core)

路由级别

级别

触发条件

典型模型

vision

图片 / 截图 / OCR

Qwen-VL、GLM-4V

long

内容超过 2000 字符、整篇文档

128K 上下文模型

complex

分析 / 代码 / 数据 / 统计 / 推理

DeepSeek、Qwen3-32B

medium

写作 / 翻译 / 润色

GLM、Qwen

simple

日常聊天 / 快速问答

小型免费模型

降级语义:按顺序依次尝试候选;响应中会报告 tier(free/paid)、attemptsfallback_used 以及每个供应商的 errors,实现全程可观测。

🚀 快速开始

# 1. 安装(只需 requests)
pip install requests

# 2. 配置
cp config.example.json config.json
#    → 填入你的 API Key

# 3. 命令行 —— 仅分析(零成本,不调用模型)
python router_core.py analyze "分析这份气象数据"

# 4. 命令行 —— 路由并调用
python router_core.py call "翻译以下段落" --content "Hello world" --system "你是专业翻译"

# 5. Python API
from router_core import route_and_call, analyze_task
result = analyze_task("写一份论文摘要", content_len=300)
print(result["primary"])           # 第一个候选
print(result["candidates"])        # 完整降级链
text = route_and_call("总结要点", "long text...")["content"]

🖥 MCP 服务器(供任意 MCP 客户端使用)

python mcp_server.py

工具

说明

smart_call

自动路由 + 调用(免费优先,失败自动降级)

route_analyze

分析难度 + 返回候选链(零成本)

list_models

列出所有已配置的供应商、模型与路由链

在 MCP 客户端中注册(例如 Claude Desktop 的 claude_desktop_config.json):

{
  "mcpServers": {
    "model-router": {
      "command": "python",
      "args": ["/path/to/model-router/mcp_server.py"],
      "env": {"PYTHONIOENCODING": "utf-8"}
    }
  }
}

⏱ 任务触发守护进程(文件监听模式)

# 单次执行
python auto_router.py "任务描述" -c "内容" --image photo.png

# 守护进程:把任务文件丢进 inbox/,结果自动出现在 outbox/
python auto_router.py --watch --dir ./tasks

🔧 配置说明

config.json 结构(参见 config.example.json):

  • providers:OpenAI 兼容端点,含 tierfree / paid)和可选的 enabled: false

  • routing:每个级别按顺序排列的 candidates 候选链——免费在前,付费兜底

  • levels:每个级别的人类可读描述

可以自由增删供应商——路由器完全由数据驱动。

📄 许可证

MIT —— 个人与商业使用均免费。详见 LICENSE


灵感来自真实世界的成本优化:日常任务中约 90% 可以由免费模型完成,而困难任务通过自动降级依然能获得顶级模型的质量。

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    LLM routing proxy that cuts API costs 60-90% by auto-selecting the cheapest capable model across OpenAI, Anthropic, and Google. Provides stats, config, and model comparison tools via MCP.
    21
    1
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Unified MCP server for querying multiple LLM providers (Gemini, OpenAI, Anthropic, etc.) with advanced routing, cost optimization, and fallback resilience.
    2
    15
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yaowanxiang/model-router'

If you have feedback or need assistance with the MCP directory API, please join our Discord server