Dúos
Two AI perspectives and a cross-review. OAuth required; new consultations use your Dúos quota.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"duos": {
"url": "https://usaduos.com/mcp"
}
}
}Puntos de conexión remotos
https://usaduos.com/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (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.
Esquema de entrada
{
"type": "object",
"properties": {
"response_format": {
"type": "string",
"enum": [
"json",
"markdown"
],
"description": "Formato del texto; structuredContent siempre contiene los datos."
}
},
"additionalProperties": false
}Esquema de salida
{
"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.
Esquema de entrada
{
"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
}Esquema de salida
{
"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.
Esquema de entrada
{
"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
}Esquema de salida
{
"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.
Esquema de entrada
{
"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
}Esquema de salida
{
"type": "object",
"properties": {
"consultations": {
"type": "array",
"items": {
"type": "object"
}
},
"nextOffset": {
"type": [
"integer",
"null"
]
}
},
"required": [
"consultations",
"nextOffset"
]
}Comunidad
Evidencia