Dúos
Two AI perspectives and a cross-review. OAuth required; new consultations use your Dúos quota.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"duos": {
"url": "https://usaduos.com/mcp"
}
}
}Remote endpoints
https://usaduos.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢duos_consultar_cuota(response_format)
Devuelve el plan, las consultas disponibles y el presupuesto propio de IA. No genera respuestas ni consume consultas. No muestra otros clientes ni el gasto global.
Input Schema
{
"type": "object",
"properties": {
"response_format": {
"type": "string",
"enum": [
"json",
"markdown"
],
"description": "Formato del texto; structuredContent siempre contiene los datos."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"credits": {
"type": "object"
},
"budget": {
"type": "object"
}
},
"required": [
"credits",
"budget"
]
}⚪duos_crear_consulta(message, idempotency_key, chat_id, mode, locale, ...)
Crea una consulta autenticada: dos análisis iniciales separados y una revisión cruzada de cada modelo. Envía el texto a proveedores de IA y puede consumir UNA consulta del plan y gasto de IA. Requiere intención del cliente; no usar como comprobación gratuita de conexión. Devuelve jobId/status para consultar el resultado con duos_obtener_resultado. Reutiliza el MISMO idempotency_key UUID si reintentas la MISMA pregunta; nunca cambies el mensaje con esa clave.
Input Schema
{
"type": "object",
"properties": {
"message": {
"type": "string",
"minLength": 1,
"maxLength": 6000,
"description": "Pregunta o decisión y contexto que el cliente desea enviar a los dos modelos."
},
"idempotency_key": {
"type": "string",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"description": "UUID nuevo por pregunta; conservarlo para reintentos de esa misma consulta."
},
"chat_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$",
"maxLength": 100,
"description": "Chat propio que continuar; si se omite se abre uno asociado a esta consulta."
},
"mode": {
"type": "string",
"enum": [
"general",
"coaching",
"negocios",
"amor",
"espiritualidad"
],
"description": "Tema de la consulta; por defecto general."
},
"locale": {
"type": "string",
"enum": [
"es",
"en"
]
},
"response_format": {
"type": "string",
"enum": [
"json",
"markdown"
],
"description": "Formato del texto; structuredContent siempre contiene los datos."
}
},
"required": [
"message",
"idempotency_key"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
},
"requestId": {
"type": "string",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
},
"status": {
"type": "string"
},
"pollAfterMs": {
"type": "integer"
}
},
"required": [
"jobId",
"requestId",
"status"
]
}🟢duos_obtener_resultado(job_id, response_format)
Recupera únicamente un trabajo propio creado antes. No vuelve a llamar a modelos ni descuenta consultas. Si sigue pendiente, respeta pollAfterMs antes de volver a leer. Un error no es un resultado completo.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"description": "jobId devuelto por duos_crear_consulta."
},
"response_format": {
"type": "string",
"enum": [
"json",
"markdown"
],
"description": "Formato del texto; structuredContent siempre contiene los datos."
}
},
"required": [
"job_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
},
"requestId": {
"type": "string",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
},
"status": {
"type": "string"
},
"result": {
"type": "object"
},
"error": {
"type": [
"string",
"object"
]
},
"pollAfterMs": {
"type": "integer"
}
},
"required": [
"jobId",
"requestId",
"status"
]
}🟢duos_listar_consultas(limit, offset, response_format)
Lista una página del historial propio de consultas. Requiere el permiso separado duos:history. No genera respuestas. Continúa con nextOffset cuando no sea null.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"default": 20
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 10000,
"default": 0
},
"response_format": {
"type": "string",
"enum": [
"json",
"markdown"
],
"description": "Formato del texto; structuredContent siempre contiene los datos."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"consultations": {
"type": "array",
"items": {
"type": "object"
}
},
"nextOffset": {
"type": [
"integer",
"null"
]
}
},
"required": [
"consultations",
"nextOffset"
]
}Community
Evidence