Passer au contenu principal

Configurer et utiliser le MCP Modjo

Configurer et utiliser le MCP Modjo

Le serveur MCP (Model Context Protocol) de Modjo permet à votre assistant IA — Claude, ChatGPT, Cursor, Dust, n8n et tout autre client compatible MCP — de lire et analyser les données de votre espace de travail Modjo : appels, deals, comptes, contacts, transcriptions et agents IA. Posez vos questions en langage naturel, Modjo répond à partir de vos données réelles.

⚠️ Bêta — les endpoints, noms d'outils et comportements par défaut peuvent changer sans préavis au fil des itérations. N'intégrez pas encore ce serveur dans des workflows critiques. Vos retours et signalements de bugs orientent les prochaines évolutions


Comment se connecter au MCP Modjo ?

Deux méthodes d'authentification sont disponibles. Le choix a des implications en matière de sécurité et de déploiement en équipe, lisez ceci avant de commencer.

OAuth 2.0 (recommandé — à utiliser par défaut)

Chaque utilisateur se connecte avec son propre compte Modjo.

Utilisez OAuth pour toute l'équipe, managers et admins inclus, dans 99 % des cas.

Bearer token via en-tête HTTP (admin / utilisateurs avancés uniquement)

Une clé API d'espace de travail transmise via un en-tête Authorization. Le token a une portée globale sur votre organisation — quiconque le détient peut lire tous les appels, tous les deals et tous les comptes de l'espace de travail, quel que soit son rôle dans Modjo.

C'est le bon outil quand vous avez réellement besoin d'un accès à l'ensemble du workspace : pipelines n8n, automatisations programmatiques, ou scripts gérés par un admin. Ce n'est pas l'outil pour les commerciaux individuels. Si un commercial peut utiliser OAuth, il doit l'utiliser.

OAuth

Bearer token

Pour qui

Tous les utilisateurs — commerciaux, CSM, managers

Admins, ops, propriétaires d'automatisations

Configuration

Cliquer sur "Connecter", se connecter

Générer une clé API, coller l'en-tête

Idéal pour

Usage quotidien dans Claude, ChatGPT, Cursor

Workflows n8n, scripts, jobs côté serveur

Rotation du token

Automatique

Manuelle

Démarrage rapide avec OAuth (recommandé)

Étape 1 : Ajouter un connecteur personnalisé à votre espace de travail

Cette étape doit être effectuée par l'administrateur de votre organisation pour Claude / ChatGPT / Dust…

Claude (claude.ai web, applications Claude, Claude Code)

  1. Aller dans Personnaliser → Connecteurs → Ajouter un connecteur personnalisé

  2. Nom : Modjo

  3. URL : https://api.mcp.modjo.ai/v1/mcp

  4. Cliquer sur Connecter, se connecter avec Modjo, approuver l'accès

Les outils Modjo sont immédiatement disponibles dans Claude. Vous pouvez les délimiter par projet dans les Projets Claude.

ChatGPT

  1. Ouvrir Paramètres → Connecteurs → Nouveau connecteur (nécessite ChatGPT Plus ou supérieur, selon le déploiement)

  2. URL : https://api.mcp.modjo.ai/v1/mcp

  3. Se connecter avec Modjo lorsque demandé

Cursor

  1. Paramètres → MCP → Ajouter un nouveau serveur

  2. Coller https://api.mcp.modjo.ai/v1/mcp

  3. Approuver l'OAuth dans le navigateur lorsque Cursor le demande

Dust

Dust prend en charge les serveurs MCP distants nativement.

  1. Spaces → Outils → Ajouter des outils → Ajouter un serveur MCP

  2. URL : https://api.mcp.modjo.ai/v1/mcp

  3. Choisir OAuth comme méthode d'auth, finaliser la connexion

  4. Assigner les outils Modjo aux agents dans l'Agent Builder

Pour les agents Dust de type automatisation où une seule clé API par workspace est acceptable, le Bearer Token est également pris en charge.

Autres clients compatibles MCP

Tout client supportant la spec OAuth 2.0 MCP (Authorization Code + PKCE avec découverte des métadonnées de ressource protégée) fonctionnera. Pointez-le vers https://api.mcp.modjo.ai/v1/mcp et laissez-le gérer le reste — le serveur publie ses métadonnées OAuth aux chemins .well-known standards.

Étape 2 : Se connecter en tant qu'utilisateur

Une fois le connecteur personnalisé ajouté à votre workspace, il suffit d'aller dans les connecteurs de votre espace de travail (le chemin dépend du client utilisé — voir ci-dessus), de sélectionner Modjo et de vous connecter. Aussi simple que ça.


Configuration du Bearer token (admins et automatisations)

À utiliser uniquement quand OAuth ne convient pas — typiquement workflows n8n, scripts planifiés, pipelines serveur-à-serveur, ou requêtes admin ponctuelles nécessitant un accès à l'ensemble du workspace.

1. Obtenir votre clé API

  1. Aller dans Paramètres → Intégrations → Clé API Modjo dans l'application Modjo

  2. Générer une clé et la stocker en lieu sûr — vous ne la reverrez plus

2. Configurer votre client

Le bearer token utilise un endpoint légèrement différent qui accepte l'en-tête Authorization directement :

https://api.mcp.modjo.ai/v1/mcp

Transmettez votre clé sous la forme Authorization: Bearer <votre-clé-api>.

n8n (version 1.88.0+)

n8n supporte nativement MCP depuis la v1.88.0 — pas de nœud communautaire, pas d'installation supplémentaire.

Mode A — Avec un AI Agent (appels d'outils autonomes) :

  1. Ajouter un nœud AI Agent avec vos credentials LLM

  2. Ajouter un nœud MCP Client Tool, le connecter à l'entrée Tools de l'Agent

  3. Configurer le MCP Client Tool :

    • URL de l'endpoint MCP : https://api.mcp.modjo.ai/v1/mcp

    • Authentification : Header Auth

    • Nom de l'en-tête : Authorization

    • Valeur de l'en-tête : Bearer votre-clé-api-modjo-ici

  4. Sous Outils à inclure, choisir Tous (ou Sélectionnés pour des outils spécifiques)

Mode B — Standalone (appels d'outils déterministes) :

  1. Ajouter un nœud MCP Client

  2. Configurer :

    • Transport serveur : Streamable HTTP

    • URL de l'endpoint MCP : https://api.mcp.modjo.ai/v1/mcp

    • Même Header Auth que le Mode A

  3. Sélectionner l'Outil à exécuter dans le menu déroulant

  4. Mapper les paramètres d'entrée

Make / Zapier / Codex CLI / Gemini CLI / tout client MCP HTTP

Même pattern partout :

{   "mcpServers": {     "modjo": {       "type": "http",       "url": "https://api.mcp.modjo.ai/v1/mcp",       "headers": {         "Authorization": "Bearer votre-clé-api-modjo-ici"       }     }   } }

Rappels de sécurité pour les bearer tokens

  • Ne partagez pas les clés API dans git. Utilisez des variables d'environnement ou votre gestionnaire de secrets.

  • Ne partagez pas les clés entre utilisateurs. Une clé par automatisation ou admin, renouvelée régulièrement.

  • Une clé bearer est à portée de workspace. Quiconque la détient peut voir tous les appels, tous les deals, tous les comptes — y compris les données d'équipes auxquelles il n'a pas normalement accès. Traitez-la comme un mot de passe admin.

  • Privilégiez OAuth pour les individus. Même les admins qui font de l'analyse quotidienne dans Claude ou ChatGPT devraient se connecter avec OAuth — réservez le bearer token aux systèmes, pas aux utilisateurs.


Outils disponibles

Douze outils, trois catégories. Les agents Modjo sont les plus puissants — ils produisent une analyse structurée plutôt que des données brutes.

Recherche et récupération

  • get_accounts — lister/rechercher des comptes (ID CRM, lien, etc.)

  • get_deals — lister/rechercher des deals (montant, dates, statut, source, raison de perte)

  • get_calls — lister/rechercher des appels (filtrer par deal, compte, contact, date, utilisateur)

  • get_contacts — lister/rechercher des contacts (ID CRM, email, téléphone, titre)

  • get_users — lister/rechercher des utilisateurs Modjo (rôle, département)

  • get_emails — lister/récupérer des emails avec leur contenu

Contenu

  • get_transcript — transcription complète d'un ou plusieurs appels, avec horodatage et intervenants

Analyse IA (agents en priorité)

  • ask_anything_on_call — question IA sur un seul appel

  • ask_anything_on_deal — question IA sur un deal

  • ask_anything_on_account — question IA sur un compte

Catalogue d'agents

  • get_agents — lister les agents disponibles (Modjo intégrés ou personnalisés)


Utiliser les agents Modjo via le MCP

Plutôt que des questions ouvertes, pointez les agents spécialisés de Modjo sur vos données. Vous obtenez le même output structuré à chaque fois, ce qui rend les résultats comparables entre commerciaux et deals.

Agents intégrés

Agent

UUID

Idéal pour

CallSummary

741e9ffc-87be-4bca-bb0d-f167be8b963e

Compte-rendu d'appel prêt pour le CRM

NextStepper

09715241-0cdd-44c9-a386-92a1340bdf4a

Actions et engagements (nous vs eux)

MeetingPrepper

c0a76fd7-3f56-4a03-b2e7-7765da10c457

Brief pré-réunion + questions à poser

CallQualifier

3a7753e1-d21e-4cb7-a990-7820291274cd

Qualification structurée + lacunes

DealBriefing

1204e84f-6edd-4782-bbdf-e5e070b400cf

Synthèse executive du deal + risques

EmailFollowUp

b2a9ae1b-2026-4dfa-9c67-101733a87a04

Rédaction d'email de suivi

Exemple : extraire les prochaines étapes d'un appel

  1. Trouver l'appel avec get_calls

  2. Demander à Claude : "Utilise l'agent NextStepper sur l'appel [ID] pour extraire chaque engagement. Sépare nos actions des leurs, avec les dates."

  3. L'assistant appelle ask_anything_on_call avec agentUuid: "09715241-0cdd-44c9-a386-92a1340bdf4a"

  4. Vous obtenez les actions structurées côté client et côté équipe avec horodatage

Exemple : briefing exécutif d'un deal

  1. Récupérer l'ID CRM du deal avec get_deals

  2. Demander : "Utilise DealBriefing sur le deal [CRM_ID] pour un briefing actionnable — statut, parties prenantes, signaux des derniers appels, risques, décisions attendues, plan de closing."

  3. Vous obtenez un document prêt pour une revue de forecast ou de deal desk


Compétence (pour Claude, Dust, ChatGPT)

Ajoutez ce skill à votre assistant IA pour le guider dans le chaînage correct des outils et éviter les pièges courants ci-dessous.

---  ## Overview  This skill enables the agent to use the **Modjo MCP server** to retrieve and analyze sales data: accounts, contacts, deals, calls, emails, call transcripts, and AI-powered insights via Modjo's built-in and custom agents.  The agent should **always read this skill before making any Modjo MCP tool call** to follow the correct tool chaining patterns and avoid common pitfalls.  ---  ## Tool reference (accurate schemas)  Filters are passed inside a `filters` object. Pagination uses `pagination: { cursor, limit }` (1–50, default 10).  ### Data retrieval tools  | Tool | Required filters | Optional filters | Key returns | | --- | --- | --- | --- | | `get_accounts` | `name` (string, required) | — | `crmId`, `name`, `crmLink`, `crm` | | `get_contacts` | — | `name` (string) | `crmPersonId`, `name`, `email`, `phoneNumber`, `jobTitle`, `crmLink` | | `get_deals` | — | `name`, `account.crmIds[]`, `status[]`, `closeDate{start,end}`, `amount{min,max}`, `source[]`, `startDate{start,end}`, `lossReason` | `crmId`, `accountCrmId`, `name`, `status`, `amount`, `startDate`, `closeDate`, `lossReason`, `source` | | `get_calls` | — | `name`, `accounts.crmIds[]`, `contact.crmIds[]`, `deal.crmIds[]`, `dateRange{start,end}`, `userIds[]` | `id`, `name`, `status`, `date`, `duration`, `direction`, `phoneProvider`, `crmLink`, `dealId`, `summary` | | `get_emails` | — | `subject`, `accounts.crmIds[]`, `contact.crmIds[]`, `deal.crmIds[]`, `dateRange{start,end}`, `userIds[]` | `id`, `subject`, `date`, `from`, `to`, `dealId`, `accountId` | | `get_transcript` | `callIds[]` (number[]) | — | Transcript blocks: `startTime`, `endTime`, `content`, `speakerName` | | `get_users` | — | `name`, `email` | `id`, `email`, `name`, `role`, `jobTitle`, `jobDepartment` | | `get_agents` | — | `search` (string), `creatorOrigin` ("modjo" or "user") | `uuid`, `name`, `description` |  ### AI analysis tools  | Tool | Required params | Optional params | Returns | | --- | --- | --- | --- | | `ask_anything_on_call` | `id` (string — call ID), `question` (string) | `agentUuid`, `language` | AI-generated answer about the call | | `ask_anything_on_account` | `crmId` (string — account CRM ID), `question` (string) | `agentUuid`, `language` | AI-generated answer about the account | | `ask_anything_on_deal` | `crmId` (string — deal CRM ID), `question` (string) | `agentUuid`, `language` | AI-generated answer about the deal |  ---  ## Critical schema notes (common pitfalls)  1. **`get_accounts` requires `name`** — the `filters.name` field is required, not optional. You cannot fetch all accounts without a name filter. If the user says "list all accounts", try a very short common substring or inform them that a name filter is needed. 2. **`get_calls` and `get_emails` use nested filter objects** — account, contact, and deal filters are nested:     - Correct: `filters: { accounts: { crmIds: ["001..."] } }`     - Wrong: `filters: { accountCrmIds: ["001..."] }` 3. **`dateRange` format** — uses `{ start: "YYYY-MM-DD", end: "YYYY-MM-DD" }` (ISO date strings, not datetimes). 4. **`get_transcript` takes `callIds` as numbers** — not strings. The call `id` from `get_calls` is a number (e.g., `74969`), pass it directly: `filters: { callIds: [74969] }`. 5. **`ask_anything_on_call` takes `id` as a string** — despite the call ID being a number in `get_calls`, the `ask_anything_on_call` tool expects it as a string: `id: "74969"`. 6. **`get_deals` returns `accountCrmId`** — this field links the deal to its parent account. Use it to cross-reference with `get_accounts` results. 7. **`get_deals` filtering capabilities** — `get_deals` supports rich server-side filtering. Use these instead of fetching all deals and filtering client-side:     - `status` — string array. Valid values: `"Open"`, `"Closed won"`, `"Closed lost"`, `"Closed"`, `"Deleted"`.     - `closeDate` — dateRange object: `filters: { closeDate: { start: "2026-03-23", end: "2026-04-05" } }`     - `amount` — range object (both fields optional): `filters: { amount: { min: 10000, max: 50000 } }`     - `source` — string array (max 50): `filters: { source: ["Inbound", "Outbound"] }`     - `startDate` — dateRange object, same format as `closeDate`     - `lossReason` — string, case-insensitive partial match (max 255 chars)     - All filters can be combined. 8. **`get_calls` returns `summary`** — most calls already have a pre-generated summary. Check this before calling `ask_anything_on_call` for basic questions — the summary may already answer them. 9. **Pagination** — all list tools return `pagination: { hasNextPage, nextCursor, limit }`. If `hasNextPage` is true, pass `nextCursor` as `cursor` in the next call. Max 50 per page. Always use `limit: 50` when you need comprehensive results. 10. **`get_contacts` does NOT require `name`** — unlike `get_accounts`, the name filter is optional. 11. **`userIds` in `get_calls`/`get_emails`** — these are number arrays, not strings. Get the numeric `id` from `get_users` first.  ---  ## Using the `ask_anything_on_*` tools  These are Modjo's most powerful capabilities — AI agents that analyze calls, accounts, and deals.  **When to use them vs raw data:**  - **Prefer `ask_anything_on_call`** over `get_transcript` for qualitative insight (objections, sentiment, competitors, next steps, coaching feedback). - **Use `get_transcript`** only when verbatim quotes are needed. - **Prefer `ask_anything_on_account`** for holistic relationship summaries — saves chaining multiple calls/emails lookups. - **Prefer `ask_anything_on_deal`** for deal health, risk, and next steps in one query.  **How to pick an agent (`agentUuid`):**  1. Call `get_agents` first when the user needs specialized analysis (coaching, competitor analysis, MEDDPICC, churn detection, etc.) 2. Filter by `creatorOrigin: "modjo"` for built-in agents, `creatorOrigin: "user"` for custom agents 3. If no specific agent fits, **omit `agentUuid`** — the default agent handles general questions well 4. For French-speaking users/data, set `language: "fr"` to get responses in French  **Built-in Modjo agents (always available):**  | Agent | UUID | Best for | | --- | --- | --- | | CallQualifier | `3a7753e1-...` | Prospect profiles, qualification gaps | | CallSummary | `741e9ffc-...` | Quick call recaps, CRM-ready | | DealBriefing | `1204e84f-...` | Exec-ready deal summaries | | EmailFollowUp | `b2a9ae1b-...` | Auto-draft follow-up emails | | MeetingPrepper | `c0a76fd7-...` | Pre-meeting briefs | | NextStepper | `09715241-...` | Action items and commitments |  ---  ## Playbooks  ### 1. 🔎 Call lookup for a specific company  **Trigger**: "Show me calls with [Company]", "What was discussed with [Company]?", "Any recent calls about [topic]?"  **Steps**:  1. `get_accounts` → filter by company name → extract `crmId` 2. `get_calls` → filter by `accounts.crmIds` → list calls (you can filter directly by account, you don't always need to go through deals first) 3. *(Optional)* `get_deals` → filter by `account.crmIds` → if deal-level filtering is needed 4. For interesting calls → check the `summary` field first, then use `ask_anything_on_call` for deeper analysis  **Output**: Summary of calls (date, duration, direction, key points), with AI insights on notable calls.  ### 2. 📋 Prepare a meeting  **Trigger**: "Help me prepare for my meeting with [Person/Company]", "Brief me before my call"  **Steps**:  1. `get_contacts` → filter by contact name → extract `crmPersonId`, `jobTitle` 2. `get_accounts` → filter by company name → extract `crmId` 3. `get_deals` → filter by `account.crmIds` → pipeline context 4. `get_calls` → filter by `contact.crmIds` or `accounts.crmIds` → recent interactions (use `limit: 50` + `dateRange` for last 90 days) 5. `get_emails` → filter by `contact.crmIds` or `accounts.crmIds` → recent email exchanges 6. `ask_anything_on_account` → "What are the key topics discussed, open issues, and relationship status with this account?" 7. *(Optional)* `ask_anything_on_deal` → "What are the current risks and recommended next steps?"  **Output**: Structured meeting brief — contact profile, account overview, deal status, recent interaction summary, AI-generated talking points and risks.  ### 3. 🔥 Deal prioritization  **Trigger**: "Which deals should I focus on?", "What are my hot deals?", "Prioritize my pipeline"  **Steps**:  1. `get_deals` → filter by `status: ["Open"]` and optionally `closeDate` for the relevant window and/or `amount: { min: X }` to focus on material deals → use `limit: 50` 2. `get_calls` → filter by `deal.crmIds` → assess activity recency and frequency 3. `get_emails` → filter by `deal.crmIds` → assess email engagement 4. `ask_anything_on_deal` → for top deals, ask about momentum, blockers, and buying signals  **Scoring framework**:  - 🔴 Hot: Recent interactions + high amount + close date imminent + positive AI signals - 🟡 Warm: Some activity + medium amount + close date within quarter - 🔵 Cold: No recent interactions + stalled + past close date + low engagement  **Output**: Ranked deal list with priority, AI rationale, and recommended next action per deal.  ### 3b. 📅 Pipeline review (weekly/monthly)  **Trigger**: "Pipeline review for this week", "Deals closing this month", "What's overdue?"  **Steps**:  1. `get_deals` → filter by `status: ["Open"]` + `closeDate: { start: "<period_start>", end: "<period_end>" }` → deals expected to close in the window 2. `get_deals` → filter by `status: ["Open"]` + `closeDate: { start: "<past_date>", end: "<yesterday>" }` → overdue deals 3. `get_deals` → filter by `status: ["Closed won", "Closed lost"]` + `closeDate` for same window → recently closed 4. For each deal → `get_calls` + `get_emails` filtered by `deal.crmIds` → assess recent activity 5. `ask_anything_on_deal` → for key deals, ask about health, risks, and next steps  **Output**: Structured pipeline review — overdue deals, deals closing soon, recently won/lost, with activity levels and AI-driven recommendations per deal.  ### 4. 📊 Win/Loss analysis  **Trigger**: "Why did we lose deals?", "Win patterns?", "Analyze closed deals in [period]"  **Steps**:  1. `get_deals` → filter by `status: ["Closed won"]` + optionally `closeDate` for the period → won deals 2. `get_deals` → filter by `status: ["Closed lost"]` + same `closeDate` → lost deals. Use `lossReason` filter for a specific loss pattern 3. `get_calls` → filter by `deal.crmIds` → associated calls 4. `get_agents` → search for a win/loss or analysis agent 5. `ask_anything_on_deal` → for sample of won/lost deals, ask about key outcome factors, competitor mentions, pricing objections  **Output**: Win/loss report — quantitative breakdown (win rate, deal size, top loss reasons) + AI qualitative insights + recommendations.  ### 5. 👤 Contact intelligence  **Trigger**: "Tell me about [Contact]", "What's my history with [Person]?"  **Steps**:  1. `get_contacts` → filter by name → extract `crmPersonId`, `jobTitle`, `email` 2. `get_calls` → filter by `contact.crmIds` → interaction history 3. `get_emails` → filter by `contact.crmIds` → email threads 4. `ask_anything_on_call` → for recent calls, assess tone, concerns, and sentiment  **Output**: Contact profile + interaction timeline + AI relationship insights.  ### 6. 📅 Activity review (team or individual)  **Trigger**: "What happened this week?", "Show me [Rep]'s activity", "Team activity in Q1?"  **Steps**:  1. *(If filtering by rep)* `get_users` → filter by name/email → extract numeric `id` 2. `get_calls` → filter by `dateRange` and `userIds` → retrieve calls 3. `get_emails` → filter by `dateRange` and `userIds` → retrieve emails 4. *(Optional)* Enrich with `get_accounts`/`get_deals` for context  **Output**: Activity summary — call count, email count, deals touched, highlights by rep or team.  ### 7. 🏢 Account deep dive  **Trigger**: "Full picture of [Company]", "Status of our relationship with [Account]?"  **Steps**:  1. `get_accounts` → filter by name → extract `crmId` 2. `ask_anything_on_account` → comprehensive AI summary (this alone provides great insight) 3. *(Optional)* `get_deals` → filter by `account.crmIds` → pipeline detail 4. *(Optional)* `ask_anything_on_deal` → per active deal, assess status and next steps  **Output**: Account brief — relationship history, key themes, active deal status, recommended actions.  ### 8. 🤖 Agent-assisted custom analysis  **Trigger**: When the user asks for coaching feedback, competitor analysis, objection handling, MEDDPICC, BANT, churn detection, or any specialized analysis type.  **Steps**:  1. `get_agents` → search by keyword (e.g., "coaching", "competitor", "MEDDPICC", "churn") → extract `uuid` 2. Locate the target entity via `get_calls`, `get_accounts`, or `get_deals` 3. Use the agent's `uuid` in the appropriate `ask_anything_on_*` tool  **Notable custom agents available**: CallScorer, ChurnInspector, Deal Challenger (MEDDPICC), DealRiskDetector, ProductFeedbacksAggregator, QuickBANT, SalesCoach, MeddicValidator, Objectionshunter.  **Output**: Specialized analysis powered by the matched Modjo AI agent.  ---  ## General principles  - **Always chain tools** — never rely on a single tool when richer context is available from combining multiple. - **Start broad, then narrow** — resolve account/contact CRM IDs first, then filter calls/emails by those IDs. - **Check summaries first** — `get_calls` returns a `summary` field. Read it before making additional `ask_anything_on_call` calls. - **Prefer `ask_anything_on_*` for qualitative analysis** — these provide richer, AI-synthesized insights than raw transcript reading. - **Use `get_agents` proactively** — when a specialized analysis type is requested, check for a matching agent before defaulting to generic questions. - **Use `get_users` for team filtering** — resolve rep names to numeric `id` values before filtering calls/emails by `userIds`. - **Respect pagination** — max 50 records per page. Use `limit: 50` and paginate with `nextCursor` when needed. - **Synthesize, don't dump** — always summarize and interpret data, never raw-dump JSON results. - **Surface next actions** — conclude with clear, actionable next steps for the sales rep. - **Language** — if the user writes in French or the data is in French, set `language: "fr"` on `ask_anything_on_*` calls.

Autres informations utiles

Bonnes pratiques

  • Standardisez les questions par agent. Même formulation → outputs comparables dans toute l'équipe.

  • Ancrez la portée temporelle. "Au cours des 30 derniers jours" ou "depuis le dernier appel" — sinon l'agent analyse tout.

  • Demandez des preuves. Ajoutez "cite ce qui a été dit et par qui" pour forcer des citations horodatées.

  • Utilisez la pagination. Les outils de recherche sont limités à 50 résultats par page ; itérez avec nextCursor quand vous avez besoin de l'ensemble.

  • Combinez les filtres. get_calls accepte simultanément deal + dateRange + userIds — affinez avant d'analyser.

  • Documentez vos UUIDs d'agents. Un mémo interne équipe agent → cas d'usage accélère l'adoption.

Limites et contraintes

  • Format de date : YYYY-MM-DD pour tout filtre dateRange. Tout autre format génère une erreur.

  • Pas d'outil stats. Besoin du nombre d'appels ou de la durée totale ? Récupérez via get_calls, calculez côté client.

  • Pagination obligatoire. Maximum 50 résultats par page pour tous les outils de recherche.

  • UTF-8 dans les recherches. Utilisez é, è, à littéralement — pas d'échappements \uXXXX.

  • Latence IA. ask_anything_* peut prendre plusieurs secondes sur de longues transcriptions. Certains clients imposent un timeout de 60 secondes — à garder en tête pour les requêtes profondes au niveau d'un compte.

Dépannage

Boucle ou échec lors de la connexion OAuth Assurez-vous d'être déjà connecté sur app.modjo.ai dans le même navigateur avant de lancer le flux OAuth. Effacez les cookies pour modjo.ai si la boucle persiste.

Les outils n'apparaissent pas après la connexion Attendez 30 secondes et rafraîchissez. S'ils n'apparaissent toujours pas, vérifiez que l'URL est exactement https://api.mcp.modjo.ai/v1/mcp (sans slash final, sans faute de frappe) et que votre client supporte le MCP distant avec OAuth.

Erreurs 401 / 403 avec le bearer token Vérifiez que la clé est correcte et que l'en-tête est exactement Authorization: Bearer <clé> (avec l'espace). Testez avec curl :

curl -H "Authorization: Bearer votre-clé" https://api.mcp.modjo.ai/v1/mcp

ask_anything_on_deal ou _account expire Ces outils parcourent beaucoup de données. Deux causes possibles :

  • Le client impose un timeout de 60 secondes

  • Le deal/compte comporte des centaines d'appels

Réduisez la portée (plage de dates, IDs d'appels spécifiques) ou utilisez la variante au niveau de l'appel.

Les outils fonctionnent mais les données semblent obsolètes Les requêtes MCP sont quasi temps réel. Il y a généralement un délai de quelques secondes entre la fin d'un appel et sa disponibilité via MCP — attendez une minute et réessayez.

Avez-vous trouvé la réponse à votre question ?