OpenRouter
Integra con el diverso ecosistema de modelos de IA de OpenRouter.ai. Requiere una clave de API de OpenRouter.
Documentación
OpenRouter MCP Server
Un servidor de Model Context Protocol (MCP) que proporciona una integración perfecta con el diverso ecosistema de modelos de OpenRouter.ai. Accede a varios modelos de IA a través de una interfaz unificada y type-safe con caché integrada, limitación de velocidad y manejo de errores.
Características
-
Acceso a Modelos
- Acceso directo a todos los modelos de OpenRouter.ai
- Validación automática de modelos y verificación de capacidades
- Soporte de configuración de modelo predeterminado
-
Optimización de Rendimiento
- Caché inteligente de información de modelos (caducidad de 1 hora)
- Gestión automática de límites de velocidad
- Retroceso exponencial para solicitudes fallidas
-
Formato de Respuesta Unificado
- Estructura
ToolResultconsistente para todas las respuestas - Identificación clara de errores con el indicador
isError - Mensajes de error estructurados con contexto
- Estructura
Instalación
pnpm install @mcpservers/openrouterai
Configuración
Requisitos previos
- Obtén tu clave de API de OpenRouter en OpenRouter Keys
- Elige un modelo predeterminado (opcional)
Variables de Entorno
OPENROUTER_API_KEY: Requerida. Tu clave de API de OpenRouter.OPENROUTER_DEFAULT_MODEL: Opcional. El modelo predeterminado a usar si no se especifica en la solicitud (p. ej.,openrouter/auto).OPENROUTER_MAX_TOKENS: Opcional. Número máximo predeterminado de tokens a generar simax_tokensno se proporciona en la solicitud.OPENROUTER_PROVIDER_QUANTIZATIONS: Opcional. Lista separada por comas de niveles de cuantización predeterminados para filtrar (p. ej.,fp16,int8) siprovider.quantizationsno se proporciona en la solicitud. (Fase 1)OPENROUTER_PROVIDER_IGNORE: Opcional. Lista separada por comas de nombres de proveedores predeterminados a ignorar (p. ej.,mistralai,openai) siprovider.ignoreno se proporciona en la solicitud. (Fase 1)OPENROUTER_PROVIDER_SORT: Opcional. Orden de clasificación predeterminado para proveedores ("price", "throughput" o "latency"). Anulado por el argumentoprovider.sort. (Fase 2)OPENROUTER_PROVIDER_ORDER: Opcional. Lista priorizada predeterminada de IDs de proveedores (cadena de array JSON, p. ej.,'["openai/gpt-4o", "anthropic/claude-3-opus"]'). Anulada por el argumentoprovider.order. (Fase 2)OPENROUTER_PROVIDER_REQUIRE_PARAMETERS: Opcional. Booleano predeterminado (trueofalse) para usar solo proveedores que admitan todos los parámetros de solicitud especificados. Anulado por el argumentoprovider.require_parameters. (Fase 2)OPENROUTER_PROVIDER_DATA_COLLECTION: Opcional. Política de recopilación de datos predeterminada ("allow" o "deny"). Anulada por el argumentoprovider.data_collection. (Fase 2)OPENROUTER_PROVIDER_ALLOW_FALLBACKS: Opcional. Booleano predeterminado (trueofalse) para controlar el comportamiento de respaldo si los proveedores preferidos fallan. Anulado por el argumentoprovider.allow_fallbacks. (Fase 2)
# 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=false
OPENROUTER_PROVIDER_QUANTIZATIONS=fp16,int8 OPENROUTER_PROVIDER_IGNORE=openai,anthropic
### Setup
Add to your MCP settings configuration file (`cline_mcp_settings.json` or `claude_desktop_config.json`):
```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:
```typescript
interface ToolResult {
isError: boolean;
content: Array<{
type: "text";
text: string; // JSON string or error message
}>;
}
Ejemplo de Éxito:
{
"isError": false,
"content": [{
"type": "text",
"text": "{\"id\": \"gen-123\", ...}"
}]
}
Ejemplo de Error:
{
"isError": true,
"content": [{
"type": "text",
"text": "Error: Model validation failed - 'invalid-model' not found"
}]
}
Herramientas Disponibles
chat_completion
Envía una solicitud a la API de Chat Completions de OpenRouter.
Esquema de Entrada:
model(string, opcional): El modelo a usar (p. ej.,openai/gpt-4o,google/gemini-pro). AnulaOPENROUTER_DEFAULT_MODEL. Se establece por defecto aopenrouter/autosi ninguno está configurado.- Sufijos de Modelo: Puedes añadir
:nitroa un ID de modelo (p. ej.,openai/gpt-4o:nitro) para potencialmente enrutar a versiones experimentales más rápidas si están disponibles. Añade:floor(p. ej.,mistralai/mistral-7b-instruct:floor) para usar la variante más económica disponible de un modelo, a menudo útil para pruebas o tareas de bajo costo. Nota: La disponibilidad de las variantes:nitroy:floordepende de OpenRouter.
- Sufijos de Modelo: Puedes añadir
messages(array, requerido): Un array de objetos de mensaje que se ajustan al formato de chat completion de OpenAI.temperature(number, opcional): Temperatura de muestreo. Se establece por defecto a 1.max_tokens(number, opcional): Número máximo de tokens a generar en la completion. AnulaOPENROUTER_MAX_TOKENS.provider(object, opcional): Configuración de enrutamiento de proveedores. Anula las variables de entornoOPENROUTER_PROVIDER_*correspondientes.quantizations(array de strings, opcional): Lista de niveles de cuantización para filtrar (p. ej.,["fp16", "int8"]). Solo se considerarán los modelos que coincidan con uno de estos niveles. AnulaOPENROUTER_PROVIDER_QUANTIZATIONS. (Fase 1)ignore(array de strings, opcional): Lista de nombres de proveedores a excluir (p. ej.,["openai", "anthropic"]). Los modelos de estos proveedores no se utilizarán. AnulaOPENROUTER_PROVIDER_IGNORE. (Fase 1)sort("price" | "throughput" | "latency", opcional): Ordena los proveedores según los criterios especificados. AnulaOPENROUTER_PROVIDER_SORT. (Fase 2)order(array de strings, opcional): Una lista priorizada de IDs de proveedores (p. ej.,["openai/gpt-4o", "anthropic/claude-3-opus"]). AnulaOPENROUTER_PROVIDER_ORDER. (Fase 2)require_parameters(boolean, opcional): Si es true, solo usa proveedores que admitan todos los parámetros de solicitud especificados (como tools, functions, temperature). AnulaOPENROUTER_PROVIDER_REQUIRE_PARAMETERS. (Fase 2)data_collection("allow" | "deny", opcional): Especifica si los proveedores pueden recopilar datos de la solicitud. AnulaOPENROUTER_PROVIDER_DATA_COLLECTION. (Fase 2)allow_fallbacks(boolean, opcional): Si es true (predeterminado), permite recurrir a otros proveedores si los preferidos fallan o no están disponibles. Si es false, la solicitud falla si los proveedores preferidos no pueden usarse. AnulaOPENROUTER_PROVIDER_ALLOW_FALLBACKS. (Fase 2)
Ejemplo de Uso:
{
"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
}
}
}
Este ejemplo solicita una completion de anthropic/claude-3-haiku, limita la respuesta a 500 tokens. Especifica opciones de enrutamiento de proveedores: prefiere modelos cuantizados fp16, ignora proveedores openai, ordena los proveedores restantes por price, prioriza anthropic/claude-3-haiku y luego google/gemini-pro, requiere que el proveedor elegido admita todos los parámetros de solicitud (como max_tokens) y desactiva los respaldos (falla si los proveedores priorizados no pueden cumplir la solicitud).
search_models
Busca y filtra los modelos disponibles:
interface ModelSearchRequest {
query?: string;
provider?: string;
minContextLength?: number;
capabilities?: {
functions?: boolean;
vision?: boolean;
};
}
// Response: ToolResult with model list or error
get_model_info
Obtén información detallada sobre un modelo específico:
{
model: string; // Model identifier
}
validate_model
Comprueba si un ID de modelo es válido:
interface ModelValidationRequest {
model: string;
}
// Response:
// Success: { isError: false, valid: true }
// Error: { isError: true, error: "Model not found" }
Manejo de Errores
El servidor proporciona errores estructurados con información contextual:
// Error response structure
{
isError: true,
content: [{
type: "text",
text: "Error: [Category] - Detailed message"
}]
}
Categorías de Error Comunes:
Validation Error: Parámetros de entrada no válidosAPI Error: Problemas de comunicación con la API de OpenRouterRate Limit: Detección de limitación de solicitudesInternal Error: Fallos de procesamiento en el servidor
Manejo de Respuestas:
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
}
}
Desarrollo
Consulta CONTRIBUTING.md para obtener información detallada sobre:
- Configuración del desarrollo
- Estructura del proyecto
- Implementación de funcionalidades
- Directrices de manejo de errores
- Ejemplos de uso de herramientas
# Install dependencies
pnpm install
# Build project
pnpm run build
# Run tests
pnpm test
Registro de Cambios
Consulta CHANGELOG.md para ver las actualizaciones recientes, incluyendo:
- Implementación del formato de respuesta unificado
- Sistema mejorado de manejo de errores
- Mejoras en la interfaz type-safe
Licencia
Este proyecto está licenciado bajo la Apache License 2.0; consulta el archivo LICENSE para más detalles.