DQE One Standalone expose un endpoint Model Context Protocol (MCP) afin que des assistants IA tels que Claude puissent lister, créer et lancer vos processes, vérifier les runs et téléverser des fichiers — les mêmes opérations que l'API REST, pilotées par la conversation.
POST https://{DOMAIN}/mcp, version
de protocole 2024-11-05, 18 outils,
5 prompts, aucune ressource. Réponses JSON
simples (sans streaming).
Connecter un assistant IA
L'assistant agit en votre nom et ne voit que vos propres objets. En coulisses, chaque outil appelle l'API REST avec votre API token : vous devez donc avoir généré un API token (My Account > API Token), même si vous vous connectez avec OAuth.
Option A — avec un en-tête (Claude Code, fichier de configuration de Claude Desktop)
Construisez le credential Basic à partir de votre email et de votre token :
Claude Code (redémarrez ensuite la session ; les serveurs MCP se chargent au démarrage) :
Claude Desktop — modifiez
claude_desktop_config.json (macOS
~/Library/Application Support/Claude/, Windows
%APPDATA%\Claude\) puis redémarrez :
Option B — OAuth (connecteurs personnalisés, par exemple dans claude.ai)
Saisissez uniquement l'URL https://{DOMAIN}/mcp.
L'assistant découvre ensuite tout seul le reste :
-
Le serveur répond 401 avec un en-tête
WWW-Authenticatepointant vers/.well-known/oauth-protected-resource. -
Le client lit
/.well-known/oauth-authorization-serveret s'enregistre via/oauth/register. -
Il ouvre
/oauth/authorize. Vous devez être connecté à DQE One dans le même navigateur ; vérifiez le nom du client et cliquez sur Authorize. -
Le client échange le code sur
/oauth/token(PKCES256requis) et reçoit un token Bearer valable 1 heure ainsi qu'un refresh token.
Outils (18)
Les arguments marqués * sont obligatoires. Un
outil qui échoue répond tout de même HTTP 200 avec
isError: true et le message de l'API REST sous-jacente.
| Outil | Arguments | Renvoie |
|---|---|---|
| list_processes | — |
[{id,name,type,isDraft,lastRunId}]
(vos processes)
|
| get_process |
id*
|
Détails du process : source, file, credentials, ruleSet, lastRunId, dates |
| list_runs |
processId, runId, kind
|
Un run (avec runId) ou
[{id,processId,type,startedOn,updatedOn,status,outputFile,count,error}].
processId l'emporte sur kind.
|
| list_files | — |
[{id,name,headers,rows,process_id}]
|
| get_file |
id*
|
Une entrée de fichier |
| list_rulesets | — |
[{id,setId,label,updatedOn,source}].
Aucun statut de publication n'est renvoyé, quoi
que dise la description de l'outil.
|
| list_credentials | — |
[{id,name}]. Le type de connecteur
n'est pas renvoyé.
|
| get_credential |
id*
|
{id,login,name,type,status,process}
; jamais le mot de passe ni la clé
|
| get_upload_status |
token*
|
{status: pending|done|expired, file_id, ttl_seconds}
|
| check_dataverse_table |
credential_id*, table_name*
|
{table,exists,record_count}. Nécessite
un credential Dynamics.
|
| query_dataverse_table |
credential_id*, table_name*,
top (100, max 5000)
|
{table,exists,total_count,returned_count,records}
— renvoie de vrais enregistrements clients
à l'assistant.
|
| start_marketing_campaign | — |
Le texte du prompt marketing_campaign
; n'exécute rien.
|
| create_process WRITE |
name*, kind*, source*,
primaryKey*, fields*
; credential, ruleSet,
file, object,
input_file_path, output_dir_path,
description optionnels
|
{"status":"success","id":N}. Mêmes
règles que
Processes → createProcess.
|
| run_process WRITE |
id*
|
{"status":"success","message":"Process Enqueue","run_id":"101"}
— asynchrone
|
| upload_file WRITE | — |
{url, token, expires_in: 3600, instructions}
— un lien de téléversement via navigateur
|
| delete_file WRITE DESTRUCTIVE |
id*
|
Définitif ; refusé tant que le fichier est lié à 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*
|
Refusé tant qu'un process l'utilise |
Ce qui diffère des descriptions des outils
-
create_processne peut pas définirfilters,sync,autoMerge,mergeThreshold,metaToReparent,allowEmpty,nextnireject_dir_path— les processes SFTP ne peuvent donc pas être créés via MCP.fieldsa une forme différente selon lekind(voir Processes), et pourcheck_duplicateil s'agit de{"<setId>": ["<matching rule label>"]}. -
create_credentialpropose 3 des 6 types REST. Ses secrets transitent par le contexte de l'assistant (et sont écrits dans les logs de debug du serveur) : créez plutôt les credentials dans l'interface web. -
run_processpeut renvoyer un résultat normal contenant{"status":"error"}(process en brouillon, aucun fichier SFTP, échec de la mise en file d'attente) : lisez le corps de la réponse. - Aucun outil ne lit les libellés de correspondance d'un RuleSet, n'annule un run, ne télécharge de résultats, ne fusionne ni ne synchronise. Consultez les résultats dans l'interface web.
Prompts (5)
prompts/list renvoie cinq prompts sans paramètres.
prompts/get renvoie
{description, messages, instructions} (instructions
est un ajout non standard). Il n'y a aucune ressource
MCP.
| Prompt | Objectif |
|---|---|
| create_process_dedup |
Création guidée d'un process de déduplication
(il demande encore les filtres, le reparenting
et la synchronisation, que create_process
ne peut pas définir).
|
| marketing_campaign |
Workflow Dynamics en sept étapes :
query_dataverse_table →
create_process + run_process
(check_email, check_phone,
check_duplicate) → list_runs.
L'envoi de SMS est “bientôt disponible”.
|
| run_existing_process |
list_processes → get_process
→ run_process → list_runs.
|
| check_process_status | Vérifier le statut d'un process. |
| manage_credentials | Workflow de gestion des credentials. |
Téléverser un fichier via MCP
-
L'assistant appelle
upload_fileet obtienthttps://{DOMAIN}/upload/<token>/, valable 1 heure. -
Vous ouvrez le lien dans un navigateur
et déposez un fichier
.csv,.xlsxou.xls(en-têtes uniques, sans espaces, un fichier par lien). -
L'assistant interroge
get_upload_statusrégulièrement jusqu'àdone, ce qui fournit lefile_id. -
create_processavec"source":"csv"et"file": <file_id>.
Exemple pas à pas — dédoublonner un CSV
-
list_rulesets→ choisissez-en un avecsource: "csv"; notez sonid(7) et sonsetId(RS_ABC). -
upload_file, donnez l'URL à l'utilisateur, puisget_upload_statusjusqu'àdone(file_id12). -
get_file {"id":12}→ vérifiez que la clé primaire figure dansheaders. -
Trouvez les libellés de correspondance qu'utilise le
RuleSet. Aucun outil MCP ne les renvoie
: demandez-les à l'utilisateur, ou lisez
matching.Labels[].valueavecgetRulesetdans l'API REST. -
create_process:
-
run_process {"id":42}→run_id"101". -
list_runs {"runId":101}jusqu'à ce questatussoitFinishedouFailed. - Passez en revue les doublons dans l'interface web DQE One.
Limitations et notes de sécurité
Ces points décrivent le comportement actuel du produit.
- Pas de scopes, pas de mode lecture seule : un assistant connecté peut tout faire ce que votre compte peut faire. Ne connectez que des assistants de confiance.
- L'enregistrement des clients OAuth est ouvert (sans authentification) : n'importe quel client peut s'enregistrer et choisir le nom affiché sur l'écran de consentement. Vérifiez le nom et la redirection avant de cliquer sur Authorize. Vous devez toujours être connecté et donner votre consentement.
- Les refresh tokens n'expirent jamais et ne sont pas renouvelés ; les tokens sont stockés en clair dans la base de données ; il n'existe aucun écran de révocation. Les administrateurs peuvent révoquer un token dans la base de données.
- Le serveur écrit les corps de requêtes et les arguments des outils — y compris les secrets des credentials — dans sa sortie de debug ; leur présence dans les logs dépend de votre déploiement.
- Pas de limitation de débit ; CORS est ouvert à toute origine ; le transport SSE historique conserve les sessions en mémoire et ne fonctionne qu'avec un seul worker.
Le point d'entrée unique : envoyez un message JSON-RPC, recevez un objet JSON en retour.
mcpRpc
Requête
Envoyez un corps JSON-RPC 2.0. initialize et
ping ne nécessitent aucune authentification
; tout le reste nécessite Basic ou Bearer.
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_processes","arguments":{}}}.
Le résultat est
{"content":[{"type":"text","text":"<JSON as a string>"}]}
; en cas d'échec, isError vaut true
mais le statut HTTP reste 200.
-32700 erreur
d'analyse (HTTP 400) ; -32601 méthode inconnue
ou outil inconnu ; -32602 prompt inconnu.
Un accès non autorisé renvoie un HTTP 401 avec un en-tête
WWW-Authenticate qui lance la découverte OAuth.
Il n'y a pas de traitement par lots et resources/*
n'est pas implémenté.
Exemples de code
Envoyer une requête JSON-RPC
Paramètres
| Champ | Description | Type | Obl / Opt |
|---|---|---|---|
| jsonrpc |
Valeurs :
2.0
|
String | Obligatoire |
| id | Integer | Optionnel | |
| method |
initialize et ping
ne nécessitent aucune authentification. Tout
le reste en nécessite une. resources/*
n'est pas implémenté (-32601).
Valeurs :
initialize, ping,
tools/list, tools/call,
prompts/list, prompts/get
|
String | Obligatoire |
| params | Object | Optionnel |
email:api_token)
ou un token OAuth Bearer. La console ci-dessous
utilise Basic.
Réponse
Réponse JSON-RPC. Un outil en échec renvoie tout de même HTTP 200 avec result.isError = true.. Statut HTTP 200.
| Clé | Description | Type |
|---|---|---|
| jsonrpc | String | |
| id | Integer | |
| result | Object | |
| error | Object |
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| 400 | Erreur d'analyse (-32700). |
| 401 | Non autorisé. Porte un en-tête WWW-Authenticate: Bearer resource_metadata=... qui déclenche la découverte OAuth. |
Tester l'API
Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.
tools/call peut démarrer des runs ou supprimer
des données.
Ouvrir la console
Renvoie des informations de base sur le serveur sans authentification.
Avec Accept: text/event-stream, il ouvre à la
place le transport SSE historique (authentification Basic
uniquement ; un seul worker).
mcpInfo
Requête
Envoyez une requête GET.
Exemples de code
Informations du serveur, ou flux SSE historique
Paramètres
Cet endpoint ne prend aucun paramètre.
Réponse
Informations du serveur ou flux d'événements.. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| Aucune réponse d'erreur n'est documentée pour cet endpoint. | |
Tester l'API
Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.
Ouvrir la console
Métadonnées RFC 9728 utilisées par les clients pour découvrir le serveur d'autorisation.
oauthProtectedResource
Requête
Envoyez une requête GET.
Exemples de code
Métadonnées de la ressource protégée (RFC 9728)
Paramètres
Cet endpoint ne prend aucun paramètre.
Réponse
{resource, authorization_servers, bearer_methods_supported}. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| Aucune réponse d'erreur n'est documentée pour cet endpoint. | |
Tester l'API
Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.
Ouvrir la console
Métadonnées RFC 8414 : endpoints et flux pris en charge.
oauthServerMetadata
Requête
Envoyez une requête GET.
Exemples de code
Métadonnées du serveur d'autorisation (RFC 8414)
Paramètres
Cet endpoint ne prend aucun paramètre.
Réponse
Endpoints, grant types (authorization_code, refresh_token), PKCE S256, méthodes d'authentification none/client_secret_post.. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| Aucune réponse d'erreur n'est documentée pour cet endpoint. | |
Tester l'API
Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.
Ouvrir la console
Enregistrement dynamique de client (RFC 7591). Ouvert : aucune authentification.
oauthRegister
Requête
Envoyez un corps JSON contenant au moins redirect_uris.
Exemples de code
Enregistrement dynamique de client (RFC 7591)
Paramètres
| Champ | Description | Type | Obl / Opt |
|---|---|---|---|
| redirect_uris | Liste non vide d'URL de callback. | Array | Obligatoire |
| client_name | Affiché à l'utilisateur sur la page de consentement. | String | Optionnel |
| token_endpoint_auth_method |
client_secret_post renvoie également
un client_secret, une seule fois.
Valeurs :
none, client_secret_post
· Par défaut : "none"
|
String | Optionnel |
Réponse
Client enregistré (client_secret renvoyé une seule fois pour client_secret_post).. Statut HTTP 201.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| 400 | Requête invalide. |
La page où vous approuvez un connecteur. Elle s'ouvre dans
un navigateur et n'est pas appelée depuis
du code. Vous devez être connecté à DQE One dans le même
navigateur ; PKCE S256 est obligatoire ; le
code est valable 5 minutes.
oauthAuthorize
Requête
Le client redirige votre navigateur vers cette URL.
Exemple d'URL
Paramètres
| Champ | Description | Type | Obl / Opt |
|---|---|---|---|
| client_id | Client id renvoyé par /oauth/register. | String | Obligatoire |
| redirect_uri | Doit correspondre exactement à l'une des URI de redirection enregistrées. | String | Obligatoire |
| response_type |
code (par défaut).
|
String | Optionnel |
| code_challenge | Challenge PKCE. | String | Obligatoire |
| code_challenge_method |
Doit être S256.
|
String | Obligatoire |
| state | Valeur opaque renvoyée au client. | String | Optionnel |
Réponse
Page de consentement (Allow / Deny).. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| 400 | Requête invalide. |
Échange un code d'autorisation contre des tokens, ou renouvelle un access token. L'access token est valable 1 heure ; les refresh tokens n'expirent pas et ne sont pas renouvelés.
oauthToken
Requête
Envoyez un POST encodé en formulaire.
Exemples de code
Échanger un code ou renouveler un token
Paramètres
| Champ | Description | Type | Obl / Opt |
|---|---|---|---|
| grant_type |
Valeurs :
authorization_code,
refresh_token
|
String | Obligatoire |
| code | Code d'autorisation (5 minutes, usage unique). | String | Optionnel |
| redirect_uri | Même valeur que dans la requête d'autorisation. | String | Optionnel |
| code_verifier | Vérifieur PKCE (verifier). | String | Optionnel |
| refresh_token | Pour grant_type refresh_token. | String | Optionnel |
| client_id | String | Optionnel | |
| client_secret | Uniquement pour les clients enregistrés avec client_secret_post. | String | Optionnel |
Réponse
{access_token, token_type: Bearer, expires_in: 3600, refresh_token, scope}. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| 400 | invalid_grant / invalid_client. |
La page navigateur derrière le lien renvoyé par l'outil
upload_file. Le token dans l'URL est le seul
credential.
uploadPage
Requête
Vous ouvrez le lien dans un navigateur.
Exemple d'URL
Paramètres
| Champ | Description | Type | Obl / Opt |
|---|---|---|---|
| token | String | Obligatoire |
Réponse
Page HTML.. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| Aucune réponse d'erreur n'est documentée pour cet endpoint. | |
Ce que la page de téléversement envoie lorsque vous déposez un fichier. Vous n'avez normalement jamais à l'appeler vous-même.
uploadFile
Requête
Un POST multipart/form-data avec
le champ file.
.csv, .xlsx, .xls
; en-têtes uniques et sans espaces. Aucune limite de taille
côté serveur.
Exemples de code
Téléverser le fichier
Paramètres
| Champ | Description | Type | Obl / Opt |
|---|---|---|---|
| token | String | Obligatoire | |
| file | String (file) | Obligatoire |
Réponse
{status: success, file_id, name}. Statut HTTP 200.
Exemple de réponse
Exemple de réponse
Erreurs
| HTTP | Corps / signification |
|---|---|
| 400 | Mauvaise extension, en-têtes invalides, ou lien déjà utilisé. |
Voir aussi
Associé à