DQE One Standalone expone un endpoint de Model Context Protocol (MCP) para que asistentes de IA como Claude puedan enumerar, crear y ejecutar sus processes, consultar runs y cargar archivos — las mismas operaciones que la API REST, controladas mediante una conversación.
POST https://{DOMAIN}/mcp, versión de protocolo
2024-11-05, 18 herramientas,
5 prompts, sin recursos. Respuestas JSON
simples (sin streaming).
Conectar un asistente de IA
El asistente actúa en su nombre y solo ve sus propios objetos. Internamente, cada herramienta llama a la API REST con su API token, por lo que debe haber generado un API token (My Account > API Token) incluso si se conecta mediante OAuth.
Opción A — con una cabecera (Claude Code, archivo de configuración de Claude Desktop)
Construya el credential Basic a partir de su email y su token:
Claude Code (reinicie la sesión después; los servidores MCP se cargan al arrancar):
Claude Desktop — edite
claude_desktop_config.json (macOS
~/Library/Application Support/Claude/, Windows
%APPDATA%\Claude\) y reinicie:
Opción B — OAuth (conectores personalizados, por ejemplo en claude.ai)
Introduzca únicamente la URL https://{DOMAIN}/mcp.
El asistente descubre entonces todo por sí mismo:
-
El servidor responde 401 con una cabecera
WWW-Authenticateque apunta a/.well-known/oauth-protected-resource. -
El cliente lee
/.well-known/oauth-authorization-servery se registra mediante/oauth/register. -
Abre
/oauth/authorize. Debe haber iniciado sesión en DQE One en el mismo navegador; compruebe el nombre del cliente y haga clic en Authorize. -
El cliente intercambia el código en
/oauth/token(se requiere PKCES256) y recibe un token Bearer válido durante 1 hora más un token de actualización.
Herramientas (18)
Los argumentos marcados con * son obligatorios.
Una herramienta que falla responde igualmente HTTP 200 con
isError: true y el mensaje de la API REST subyacente.
| Herramienta | Argumentos | Devuelve |
|---|---|---|
| list_processes | — |
[{id,name,type,isDraft,lastRunId}]
(sus processes)
|
| get_process |
id*
|
Detalles del process: fuente, archivo, credentials, ruleSet, lastRunId, fechas |
| list_runs |
processId, runId, kind
|
Un run (con runId) o
[{id,processId,type,startedOn,updatedOn,status,outputFile,count,error}].
processId prevalece sobre kind.
|
| list_files | — |
[{id,name,headers,rows,process_id}]
|
| get_file |
id*
|
Una entrada de archivo |
| list_rulesets | — |
[{id,setId,label,updatedOn,source}].
No se devuelve ningún estado de publicación,
aunque la descripción de la herramienta diga
lo contrario.
|
| list_credentials | — |
[{id,name}]. El tipo de conector
no se devuelve.
|
| get_credential |
id*
|
{id,login,name,type,status,process};
nunca la contraseña ni la clave
|
| get_upload_status |
token*
|
{status: pending|done|expired, file_id, ttl_seconds}
|
| check_dataverse_table |
credential_id*, table_name*
|
{table,exists,record_count}. Requiere
un credential de Dynamics.
|
| query_dataverse_table |
credential_id*, table_name*,
top (100, máx. 5000)
|
{table,exists,total_count,returned_count,records}
— devuelve registros reales de clientes
al asistente.
|
| start_marketing_campaign | — |
El texto del prompt marketing_campaign;
no ejecuta nada.
|
| create_process WRITE |
name*, kind*, source*,
primaryKey*, fields*;
opcionales credential, ruleSet,
file, object,
input_file_path, output_dir_path,
description
|
{"status":"success","id":N}. Mismas
reglas que
Processes → createProcess.
|
| run_process WRITE |
id*
|
{"status":"success","message":"Process Enqueue","run_id":"101"}
— asíncrono
|
| upload_file WRITE | — |
{url, token, expires_in: 3600, instructions}
— un enlace de carga para el navegador
|
| delete_file WRITE DESTRUCTIVE |
id*
|
Permanente; se rechaza mientras el archivo esté vinculado a un process |
| create_credential WRITE |
name*, type* (salesforce,
sftp, bigquery); login, client_id,
endpoint, port,
password, email, id,
key_id, pvt
|
{"status":"success","id":N}
|
| delete_credential WRITE DESTRUCTIVE |
id*
|
Se rechaza mientras un process lo utilice |
Qué difiere de las descripciones de las herramientas
-
create_processno puede establecerfilters,sync,autoMerge,mergeThreshold,metaToReparent,allowEmpty,nextnireject_dir_path— por lo que los processes SFTP no se pueden crear mediante MCP.fieldstiene una estructura distinta segúnkind(véase Processes), y paracheck_duplicatees{"<setId>": ["<matching rule label>"]}. -
create_credentialofrece 3 de los 6 tipos de la API REST. Sus secretos pasan por el contexto del asistente (y se escriben en los logs de depuración del servidor): cree los credentials en la interfaz web. -
run_processpuede devolver un resultado normal que contenga{"status":"error"}(process en borrador, sin archivo SFTP, fallo de la cola): lea el cuerpo. - Ninguna herramienta lee las etiquetas de coincidencia de un RuleSet, cancela un run, descarga resultados, fusiona ni sincroniza. Revise los resultados en la interfaz web.
Prompts (5)
prompts/list devuelve cinco prompts sin parámetros.
prompts/get devuelve
{description, messages, instructions} (instructions
es un extra no estándar). No hay recursos MCP.
| Prompt | Finalidad |
|---|---|
| create_process_dedup |
Creación guiada de un process de deduplicación
(sigue solicitando filtros, reparenting y sync,
que create_process no puede establecer).
|
| marketing_campaign |
Flujo de trabajo de Dynamics en siete pasos:
query_dataverse_table →
create_process + run_process
(check_email, check_phone,
check_duplicate) → list_runs.
El envío de SMS está “próximamente”.
|
| run_existing_process |
list_processes → get_process
→ run_process → list_runs.
|
| check_process_status | Comprobar el estado de un process. |
| manage_credentials | Flujo de trabajo de gestión de credentials. |
Cargar un archivo mediante MCP
-
El asistente llama a
upload_filey obtienehttps://{DOMAIN}/upload/<token>/, válido durante 1 hora. -
Usted abre el enlace en un navegador
y suelta un archivo
.csv,.xlsxo.xls(encabezados únicos, sin espacios, un archivo por enlace). -
El asistente consulta periódicamente
get_upload_statushasta que seadone, lo que proporciona elfile_id. -
create_processcon"source":"csv"y"file": <file_id>.
Ejemplo práctico — deduplicar un CSV
-
list_rulesets→ elija uno consource: "csv"; anote suid(7) y susetId(RS_ABC). -
upload_file, entregue la URL al usuario y luegoget_upload_statushastadone(file_id12). -
get_file {"id":12}→ compruebe que la clave primaria está enheaders. -
Busque las etiquetas de coincidencia del RuleSet.
Ninguna herramienta MCP las devuelve:
pregunte al usuario o lea
matching.Labels[].valuecongetRuleseten la API REST. -
create_process:
-
run_process {"id":42}→run_id"101". -
list_runs {"runId":101}hasta questatusseaFinishedoFailed. - Revise los duplicados en la interfaz web de DQE One.
Limitaciones y notas de seguridad
Estas limitaciones describen el comportamiento actual del producto.
- Sin scopes ni modo de solo lectura: un asistente conectado puede hacer todo lo que puede hacer su cuenta. Conecte únicamente asistentes de confianza.
- El registro de clientes OAuth es abierto (sin autenticación): cualquier cliente puede registrarse y elegir el nombre que se muestra en la pantalla de consentimiento. Compruebe el nombre y la redirección antes de hacer clic en Authorize. Aun así, debe haber iniciado sesión y dar su consentimiento.
- Los tokens de actualización nunca caducan y no se rotan; los tokens se almacenan en claro en la base de datos; no existe ninguna pantalla de revocación. Los administradores pueden revocar un token en la base de datos.
- El servidor escribe los cuerpos de las solicitudes y los argumentos de las herramientas — incluidos los secretos de los credentials — en su salida de depuración; que esto llegue a los logs depende de su implementación.
- Sin límite de frecuencia; CORS está abierto a cualquier origen; el transporte SSE heredado mantiene las sesiones en memoria y solo funciona con un único worker.
El único punto de entrada: envíe un mensaje JSON-RPC y reciba un objeto JSON.
mcpRpc
Solicitud
Envíe un cuerpo JSON-RPC 2.0. initialize y
ping no requieren autenticación; todo lo demás
requiere Basic o Bearer.
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_processes","arguments":{}}}.
El resultado es
{"content":[{"type":"text","text":"<JSON as a string>"}]};
en caso de fallo, isError es true
pero el estado HTTP sigue siendo 200.
-32700 error
de análisis (HTTP 400); -32601 método desconocido
o herramienta desconocida; -32602 prompt
desconocido. Unauthorized es un HTTP 401 con una cabecera
WWW-Authenticate que inicia el descubrimiento
de OAuth. No hay procesamiento por lotes y resources/*
no está implementado.
Ejemplos de código
Enviar una solicitud JSON-RPC
Parámetros
| Campo | Descripción | Tipo | Obl / Opc |
|---|---|---|---|
| jsonrpc |
Valores:
2.0
|
String | Obligatorio |
| id | Integer | Opcional | |
| method |
initialize y ping no
requieren autenticación. Todo lo demás sí.
resources/* no está implementado
(-32601).
Valores:
initialize, ping,
tools/list, tools/call,
prompts/list, prompts/get
|
String | Obligatorio |
| params | Object | Opcional |
email:api_token)
o un token OAuth Bearer. La consola de abajo usa
Basic.
Respuesta
Respuesta JSON-RPC. Una herramienta que falla devuelve igualmente HTTP 200 con result.isError = true.. Estado HTTP 200.
| Clave | Descripción | Tipo |
|---|---|---|
| jsonrpc | String | |
| id | Integer | |
| result | Object | |
| error | Object |
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| 400 | Error de análisis (-32700). |
| 401 | Unauthorized. Incluye una cabecera WWW-Authenticate: Bearer resource_metadata=... que activa el descubrimiento de OAuth. |
Probar la API
Haga clic en el botón de abajo para probar este endpoint en directo en su navegador.
tools/call
puede iniciar runs o eliminar datos.
Abrir consola
Devuelve información básica del servidor sin autenticación.
Con Accept: text/event-stream abre en su lugar
el transporte SSE heredado (solo con autenticación Basic;
un único worker).
mcpInfo
Solicitud
Envíe una solicitud GET.
Ejemplos de código
Información del servidor o flujo SSE heredado
Parámetros
Este endpoint no acepta parámetros.
Respuesta
Información del servidor o flujo de eventos.. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| No se documenta ninguna respuesta de error para este endpoint. | |
Probar la API
Haga clic en el botón de abajo para probar este endpoint en directo en su navegador.
Abrir consola
Metadatos RFC 9728 que los clientes usan para descubrir el servidor de autorización.
oauthProtectedResource
Solicitud
Envíe una solicitud GET.
Ejemplos de código
Metadatos del recurso protegido (RFC 9728)
Parámetros
Este endpoint no acepta parámetros.
Respuesta
{resource, authorization_servers, bearer_methods_supported}. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| No se documenta ninguna respuesta de error para este endpoint. | |
Probar la API
Haga clic en el botón de abajo para probar este endpoint en directo en su navegador.
Abrir consola
Metadatos RFC 8414: endpoints y flujos admitidos.
oauthServerMetadata
Solicitud
Envíe una solicitud GET.
Ejemplos de código
Metadatos del servidor de autorización (RFC 8414)
Parámetros
Este endpoint no acepta parámetros.
Respuesta
Endpoints, tipos de concesión (authorization_code, refresh_token), PKCE S256, métodos de autenticación none/client_secret_post.. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| No se documenta ninguna respuesta de error para este endpoint. | |
Probar la API
Haga clic en el botón de abajo para probar este endpoint en directo en su navegador.
Abrir consola
Registro dinámico de clientes (RFC 7591). Abierto: sin autenticación.
oauthRegister
Solicitud
Envíe un cuerpo JSON con al menos redirect_uris.
Ejemplos de código
Registro dinámico de clientes (RFC 7591)
Parámetros
| Campo | Descripción | Tipo | Obl / Opc |
|---|---|---|---|
| redirect_uris | Lista no vacía de URL de callback. | Array | Obligatorio |
| client_name | Se muestra al usuario en la página de consentimiento. | String | Opcional |
| token_endpoint_auth_method |
client_secret_post también devuelve
un client_secret, una sola vez.
Valores:
none, client_secret_post
· Valor predeterminado: "none"
|
String | Opcional |
Respuesta
Cliente registrado (client_secret se devuelve una sola vez para client_secret_post).. Estado HTTP 201.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| 400 | Solicitud no válida. |
La página donde usted aprueba un conector. Se abre en un
navegador, no se llama desde código. Debe
haber iniciado sesión en DQE One en el mismo navegador; PKCE
S256 es obligatorio; el código dura 5 minutos.
oauthAuthorize
Solicitud
El cliente redirige su navegador a esta URL.
URL de ejemplo
Parámetros
| Campo | Descripción | Tipo | Obl / Opc |
|---|---|---|---|
| client_id | Client id devuelto por /oauth/register. | String | Obligatorio |
| redirect_uri | Debe coincidir exactamente con uno de los URI de redirección registrados. | String | Obligatorio |
| response_type |
code (por defecto).
|
String | Opcional |
| code_challenge | Desafío PKCE. | String | Obligatorio |
| code_challenge_method |
Debe ser S256.
|
String | Obligatorio |
| state | Valor opaco devuelto al cliente. | String | Opcional |
Respuesta
Página de consentimiento (Allow / Deny).. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| 400 | Solicitud no válida. |
Intercambia un código de autorización por tokens, o actualiza un token de acceso. El token de acceso dura 1 hora; los tokens de actualización no caducan y no se rotan.
oauthToken
Solicitud
Envíe un POST codificado como formulario.
Ejemplos de código
Intercambiar un código o actualizar un token
Parámetros
| Campo | Descripción | Tipo | Obl / Opc |
|---|---|---|---|
| grant_type |
Valores:
authorization_code,
refresh_token
|
String | Obligatorio |
| code | Código de autorización (5 minutos, de un solo uso). | String | Opcional |
| redirect_uri | El mismo valor que en la solicitud de autorización. | String | Opcional |
| code_verifier | Verificador PKCE. | String | Opcional |
| refresh_token | Para grant_type refresh_token. | String | Opcional |
| client_id | String | Opcional | |
| client_secret | Solo para clientes registrados con client_secret_post. | String | Opcional |
Respuesta
{access_token, token_type: Bearer, expires_in: 3600, refresh_token, scope}. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| 400 | invalid_grant / invalid_client. |
La página de navegador a la que lleva el enlace devuelto
por la herramienta upload_file. El token de
la URL es el único credential.
uploadPage
Solicitud
Usted abre el enlace en un navegador.
URL de ejemplo
Parámetros
| Campo | Descripción | Tipo | Obl / Opc |
|---|---|---|---|
| token | String | Obligatorio |
Respuesta
Página HTML.. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| No se documenta ninguna respuesta de error para este endpoint. | |
Lo que envía la página de carga cuando usted suelta un archivo. Normalmente nunca la llama usted mismo.
uploadFile
Solicitud
Una solicitud multipart/form-data mediante
POST con el campo file.
.csv, .xlsx, .xls;
encabezados únicos y sin espacios. Sin límite de tamaño en
el servidor.
Ejemplos de código
Cargar el archivo
Parámetros
| Campo | Descripción | Tipo | Obl / Opc |
|---|---|---|---|
| token | String | Obligatorio | |
| file | String (file) | Obligatorio |
Respuesta
{status: success, file_id, name}. Estado HTTP 200.
Ejemplo de respuesta
Respuesta de ejemplo
Errores
| HTTP | Cuerpo / significado |
|---|---|
| 400 | Extensión incorrecta, encabezados no válidos o enlace ya utilizado. |
Véase también
Relacionada con