为什么需要 OpenRouter?
在 2026 年的 AI 开发生态中,开发者通常需要接入多个大模型provider:Claude 用于复杂推理、GPT-4o 用于多模态、Gemini 用于长上下文、Llama 用于低成本场景。每个 provider 都有独立的 API key、不同的计费方式、各异的 rate limit 策略——管理复杂度呈指数增长。
OpenRouter 作为统一的路由层,提供:
- 单一 API 接口:OpenAI 兼容格式,切换模型无需改代码
- 智能 fallback:主模型失败时自动切换到备用模型
- 成本优化:根据 token 价格自动选择最经济的模型
- 统一账单:所有 provider 的消费合并结算
MCP 协议:AI Agent 的新标准
Model Context Protocol(MCP)是 2026 年 AI Agent 领域的标准集成协议。通过 MCP server,你可以将任意 API 服务封装为标准化工具,让 Claude Desktop、Cline、Windsurf 等 AI 客户端直接调用。
本教程将带你从零开始,构建一个支持多模型路由的 OpenRouter MCP server。
准备工作
实战步骤
初始化项目
mkdir openrouter-mcp-server
cd openrouter-mcp-server
npm init -y
npm install @anthropic/mcp openai dotenv
创建项目结构:
openrouter-mcp-server/
├── src/
│ └── index.ts # MCP server 主逻辑
├── .env # 环境变量(API key)
├── tsconfig.json # TypeScript 配置
└── package.json
配置环境变量
# .env
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxx
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
创建 OpenRouter 客户端
// src/openrouter-client.ts
import OpenAI from 'openai';
export function createOpenRouterClient() {
return new OpenAI({
baseURL: process.env.OPENROUTER_BASE_URL,
apiKey: process.env.OPENROUTER_API_KEY,
});
}
复用 OpenAI SDK,仅需修改 baseURL 即可对接 OpenRouter。
实现 MCP server 主逻辑
// src/index.ts
import { McpServer } from '@anthropic/mcp';
import { createOpenRouterClient } from './openrouter-client';
const server = new McpServer({
name: 'openrouter-mcp',
version: '1.0.0',
});
const client = createOpenRouterClient();
server.tool(
'chat',
'调用 OpenRouter 多模型 API 进行对话',
{
model: { type: 'string', description: '模型 ID,如 claude-3-7-sonnet' },
messages: { type: 'array', description: '对话历史' },
},
async ({ model, messages }) => {
const response = await client.chat.completions.create({
model,
messages,
});
return { content: response.choices[0].message.content };
}
);
server.start({ transportType: 'stdio' });
添加智能路由策略
// src/router-strategies.ts
export const ROUTING_STRATEGIES = {
// 成本优先:自动选择最便宜的可用模型
COST_OPTIMIZED: async (prompt) => {
const cheapModels = ['meta-llama/llama-3-70b', 'mistral/mistral-large'];
return cheapModels[0];
},
// 性能优先:使用最强模型
PERFORMANCE: async (prompt) => {
return 'anthropic/claude-3-7-sonnet';
},
// 智能 fallback:主模型失败时切换备选
WITH_FALLBACK: async (prompt, primaryModel) => {
const fallbacks = {
'anthropic/claude-3-7-sonnet': ['openai/gpt-4o', 'google/gemini-pro'],
'openai/gpt-4o': ['anthropic/claude-3-7-sonnet'],
};
return { primary: primaryModel, fallbacks: fallbacks[primaryModel] };
},
};
配置 MCP client
在 Claude Desktop 配置文件中添加 server:
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"openrouter": {
"command": "node",
"args": ["/path/to/openrouter-mcp-server/dist/index.js"],
"env": {
"OPENROUTER_API_KEY": "sk-or-v1-xxxx",
"OPENROUTER_BASE_URL": "https://openrouter.ai/api/v1"
}
}
}
}
测试调用
在 Claude Desktop 中输入:
使用 openrouter 工具,调用 claude-3-7-sonnet 模型,
帮我分析这段 Python 代码的性能瓶颈...
或者在 Cline 中直接选择 openrouter 工具,输入提示词即可看到多模型路由生效。
部署到生产环境
使用 Docker 容器化部署:
# Dockerfile
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY dist/ ./dist/
EXPOSE 3000
CMD ["node", "dist/index.js"]
docker build -t openrouter-mcp .
docker run -d \
-e OPENROUTER_API_KEY=xxx \
-p 3000:3000 \
openrouter-mcp
常见问题
Q: OpenRouter 支持哪些模型?
A: 支持 50+ 主流模型,包括 Claude 3.5/3.7 系列、GPT-4o/o3、Gemini 2.0、Llama 3.1/3.2、Mistral、Command R+ 等。完整列表见 openrouter.ai/models。
Q: 如何处理 rate limit?
A: OpenRouter 有统一的 rate limit(免费账户 20 req/min,付费账户更高)。建议在 client 端实现指数退避重试策略。
Q: 计费方式是什么?
A: OpenRouter 采用预充值模式,按各 provider 官方定价计费,无额外加价。支持信用卡充值,$10 起充。
进阶技巧
- 模型路由中间件:根据请求 token 数自动选择模型(短文本用 Llama,长文本用 Claude)
- A/B 测试:将流量按比例分配到多个模型,对比输出质量
- 缓存层:对高频重复请求缓存响应,降低成本
- 监控告警:集成 Prometheus + Grafana,监控各模型的延迟、错误率
总结
- ✓ OpenRouter 提供统一的多模型 API 路由层
- ✓ MCP 协议让 AI Agent 可以标准化调用外部工具
- ✓ 通过智能路由策略实现成本优化与故障转移
- ✓ 完整代码已开源,可直接用于生产环境