OpenRouter MCP服务器
 ](CHANGELOG.md)  
一个模型上下文协议(MCP)服务器,提供与OpenRouter.ai多样化模型生态系统的无缝集成。通过具有内置缓存、速率限制和错误处理的统一类型安全接口访问各种AI模型。
特性
- 模型访问
- 直接访问所有OpenRouter.ai型号 - 自动模型验证和能力检查 - 默认模型配置支持
- 性能优化
- 智能模型信息缓存(1小时到期) - 自动速率限制管理 - 失败请求的指数回退
- 统一响应格式
- 一致的 ToolResult 所有响应的结构 - 通过以下方式明确错误识别 isError 旗帜 - 带上下文的结构化错误消息
安装
pnpm install @mcpservers/openrouterai配置
先决条件
- 从获取您的OpenRouter API密钥 OpenRouter密钥
- 选择默认型号(可选)
环境变量
OPENROUTER_API_KEY: 必需.您的OpenRouter API密钥。OPENROUTER_DEFAULT_MODEL:可选。如果请求中没有指定,则使用默认模型(例如。,openrouter/auto).OPENROUTER_MAX_TOKENS:可选。如果满足以下条件,则默认生成的最大令牌数max_tokens请求中未提供。OPENROUTER_PROVIDER_QUANTIZATIONS:可选。以逗号分隔的默认量化级别列表,用于过滤(例如。,fp16,int8)如果provider.quantizations请求中未提供。(第一阶段)OPENROUTER_PROVIDER_IGNORE:可选。以逗号分隔的默认提供者名称列表(例如。,mistralai,openai)如果provider.ignore请求中未提供。(第一阶段)OPENROUTER_PROVIDER_SORT:可选。提供程序的默认排序顺序(“价格”、“吞吐量”或“延迟”)。被压倒了provider.sort争论。(第二阶段)OPENROUTER_PROVIDER_ORDER:可选。提供者ID的默认优先级列表(JSON数组字符串。,'["openai/gpt-4o", "anthropic/claude-3-opus"]').被压倒了provider.order争论。(第二阶段)OPENROUTER_PROVIDER_REQUIRE_PARAMETERS:可选。默认布尔值(true或false)仅使用支持所有指定请求参数的提供程序。被压倒了provider.require_parameters争论。(第二阶段)OPENROUTER_PROVIDER_DATA_COLLECTION:可选。默认数据收集策略(“允许”或“拒绝”)。被压倒了provider.data_collection争论。(第二阶段)OPENROUTER_PROVIDER_ALLOW_FALLBACKS:可选。默认布尔值(true或false)如果首选提供者失败,则控制回退行为。被压倒了provider.allow_fallbacks争论。(第二阶段)
# Example .env file content
OPENROUTER_API_KEY=your-api-key-here
OPENROUTER_DEFAULT_MODEL=openrouter/auto
OPENROUTER_MAX_TOKENS=1024
OPENROUTER_PROVIDER_QUANTIZATIONS=fp16,int8
OPENROUTER_PROVIDER_IGNORE=openai,anthropic
OPENROUTER_PROVIDER_SORT=price
OPENROUTER_PROVIDER_ORDER='["openai/gpt-4o", "anthropic/claude-3-opus"]'
OPENROUTER_PROVIDER_REQUIRE_PARAMETERS=true
OPENROUTER_PROVIDER_DATA_COLLECTION=deny
OPENROUTER_PROVIDER_ALLOW_FALLBACKS=falseOPENROUTER_PROVIDER_QUANTIZATIONS=fp16,int8 OPENROUTER_PROVIDER_IGNORE=开放式,人性化
### Setup
Add to your MCP settings configuration file (`cline_mcp_settings.json` or `claude_desktop_config.json`):
{ "mcpServers": { "openrouterai": { "command": "npx", "args": ["@mcpservers/openrouterai"], "env": { "OPENROUTER_API_KEY": "your-api-key-here", "OPENROUTER_DEFAULT_MODEL": "optional-default-model", "OPENROUTER_MAX_TOKENS": "1024", "OPENROUTER_PROVIDER_QUANTIZATIONS": "fp16,int8", "OPENROUTER_PROVIDER_IGNORE": "openai,anthropic" } } } }
Response Format
All tools return responses in a standardized structure:
interface ToolResult {
isError: boolean;
content: Array;
}成功示例:
{
"isError": false,
"content": [{
"type": "text",
"text": "{\"id\": \"gen-123\", ...}"
}]
}错误示例:
{
"isError": true,
"content": [{
"type": "text",
"text": "Error: Model validation failed - 'invalid-model' not found"
}]
}可用工具
chat_completion
向OpenRouter聊天完成API发送请求。
输入架构:
model(string,可选):要使用的模型(例如。,openai/gpt-4o,google/gemini-pro).覆盖OPENROUTER_DEFAULT_MODEL.默认为openrouter/auto如果两者都没有设置。
- 型号后缀: 您可以追加 :nitro 到模型ID(例如。, openai/gpt-4o:nitro)如果可能的话,可能会转向更快的实验版本。追加 :floor (例如。, mistralai/mistral-7b-instruct:floor)使用最便宜的模型变体,通常用于测试或低成本任务。注:可用性 :nitro 和 :floor 变体取决于OpenRouter。
messages(array,必填):符合OpenAI聊天完成格式的消息对象数组。temperature(数字,可选):采样温度。默认为1。max_tokens(number,可选):完成时生成的最大令牌数。覆盖OPENROUTER_MAX_TOKENS.provider(对象,可选):提供程序路由配置。相应的覆盖OPENROUTER_PROVIDER_*环境变量。
- quantizations (字符串数组,可选):要过滤的量化级别列表(例如。, ["fp16", "int8"]).只有与其中一个级别匹配的模型才会被考虑。覆盖 OPENROUTER_PROVIDER_QUANTIZATIONS(第一阶段) - ignore (字符串数组,可选):要排除的提供者名称列表(例如。, ["openai", "anthropic"]).将不使用这些提供商的模型。覆盖 OPENROUTER_PROVIDER_IGNORE(第一阶段) - sort (“价格”|“吞吐量”|“延迟”,可选):按指定条件对提供程序进行排序。覆盖 OPENROUTER_PROVIDER_SORT(第二阶段) - order (字符串数组,可选):提供者ID的优先级列表(例如。, ["openai/gpt-4o", "anthropic/claude-3-opus"]).覆盖 OPENROUTER_PROVIDER_ORDER(第二阶段) - require_parameters (boolean,可选):如果为true,则仅使用支持所有指定请求参数(如工具、函数、温度)的提供程序。覆盖 OPENROUTER_PROVIDER_REQUIRE_PARAMETERS(第二阶段) - data_collection (“allow”|“deny”,可选):指定是否允许提供程序从请求中收集数据。覆盖 OPENROUTER_PROVIDER_DATA_COLLECTION(第二阶段) - allow_fallbacks (boolean,可选):如果为true(默认),则允许在首选提供者失败或不可用时回退到其他提供者。如果为false,则在无法使用首选提供程序的情况下,请求失败。覆盖 OPENROUTER_PROVIDER_ALLOW_FALLBACKS(第二阶段)
示例用法:
{
"tool": "chat_completion",
"arguments": {
"model": "anthropic/claude-3-haiku",
"messages": [
{ "role": "user", "content": "Explain the concept of quantization in AI models." }
],
"max_tokens": 500,
"provider": {
"quantizations": ["fp16"],
"ignore": ["openai"],
"sort": "price",
"order": ["anthropic/claude-3-haiku", "google/gemini-pro"],
"require_parameters": true,
"allow_fallbacks": false
}
}
}此示例请求完成 anthropic/claude-3-haiku,将响应限制为500个令牌。它指定了提供程序路由选项:首选 fp16 量化模型,忽略 openai 提供者,按以下方式对剩余提供者进行排序 price,优先考虑 anthropic/claude-3-haiku 然后 google/gemini-pro,要求所选提供程序支持所有请求参数(如 max_tokens),并禁用回退(如果优先级提供者无法满足请求,则失败)。
搜索模型
搜索和筛选可用型号:
interface ModelSearchRequest {
query?: string;
provider?: string;
minContextLength?: number;
capabilities?: {
functions?: boolean;
vision?: boolean;
};
}
// Response: ToolResult with model list or error获取模式信息
获取特定型号的详细信息:
{
model: string; // Model identifier
}validate_model
检查型号ID是否有效:
interface ModelValidationRequest {
model: string;
}
// Response:
// Success: { isError: false, valid: true }
// Error: { isError: true, error: "Model not found" }错误处理
服务器提供具有上下文信息的结构化错误:
// Error response structure
{
isError: true,
content: [{
type: "text",
text: "Error: [Category] - Detailed message"
}]
}常见错误类别:
Validation Error:输入参数无效API Error:OpenRouter API通信问题Rate Limit:请求节流检测Internal Error:服务器端处理失败
处理响应:
async function handleResponse(result: ToolResult) {
if (result.isError) {
const errorMessage = result.content[0].text;
if (errorMessage.startsWith('Error: Rate Limit')) {
// Handle rate limiting
}
// Other error handling
} else {
const data = JSON.parse(result.content[0].text);
// Process successful response
}
}发展
看 贡献.md 有关以下内容的详细信息:
- 开发设置
- 项目结构
- 功能实现
- 错误处理指南
- 工具使用示例
# Install dependencies
pnpm install
# Build project
pnpm run build
# Run tests
pnpm test更新日志
看 更改日志.md 最近的更新包括:
- 统一响应格式实现
- 增强的错误处理系统
- 类型安全界面改进
许可证
此项目根据Apache许可证2.0获得许可-请参阅 许可证 文件以获取详细信息。
