Connecter Kurra à votre client MCP
Votre veille devient un outil de votre assistant : il y ajoute des contenus et l'interroge sans quitter la conversation. La connexion se fait en OAuth — aucune clé à copier, aucun mot de passe à stocker.
L'adresse du serveur
C'est la seule information à donner à votre assistant, quel qu'il soit :
https://kurra.ai/api/mcpConnecter votre client
Chaque procédure suit les mêmes quatre temps : ajouter Kurra, autoriser l'accès, l'utiliser, puis le retirer quand vous le souhaitez. Seuls les clients dont la connexion a été vérifiée de bout en bout ont leur procédure.
Que demander à votre assistant ?
Parlez-lui normalement : il choisit lui-même l'outil Kurra qui convient. Quelques exemples, avec l'outil que chacun déclenche.
- Capturer
- « Ajoute cet article à la veille de l'équipe : https://exemple.com/un-article »add_content
- Retrouver
- « Qu'a-t-on partagé sur l'IA générative dans le service client ? »search_contents
- « Qu'est-ce que l'équipe a partagé ces sept derniers jours ? »list_recent_contents
- Lire
- « Résume-moi les trois contenus les plus récents sur la cybersécurité. »get_content
- Produire
- « Propose-moi trois angles de post LinkedIn sur l'automatisation des achats. »suggest_linkedin_angles
- « Quelles idées de post me suggère ma synthèse de la semaine ? »get_linkedin_ideas
- NewsletterRéservé aux administrateurs de l'organisation.
- « Prépare le brouillon de la newsletter avec les contenus de la semaine. »generate_newsletter_draft
Un contenu ajouté est enrichi (extraction, résumé, tags) en arrière-plan : il apparaît tout de suite, son résumé quelques instants plus tard.
Ce que le serveur voit de vous
- Les outils s'exécutent sous votre identité, avec exactement les droits que vous avez dans l'application. Rien n'est accessible au serveur MCP que vous ne puissiez déjà voir.
- Ils travaillent dans votre organisation active, celle affichée dans le dashboard. Changez-en et le MCP suit : elle est relue à chaque appel.
- Certains outils exigent d'être administrateur de l'organisation — la référence ci-dessous le précise outil par outil.
- Vous pouvez révoquer l'accès à tout moment : c'est la dernière étape de la procédure de votre client.
Les 14 outils
Contrats extraits du serveur lui-même : nom, paramètres, résultat, droits requis.
Curation (6 outils)
Alimenter la veille de votre équipe et l'interroger.
add_contentAjouter du contenuPartage une URL dans la veille de votre organisation active. Le type est auto-détecté et l'enrichissement (extraction, résumé, tags, embeddings) est asynchrone : l'outil rend la main immédiatement.
- Paramètres
url— string (URL) requisAdresse du contenu à partager.comment— string (500 caractères max) optionnelCommentaire personnel joint au partage.contentType— enum : linkedin | youtube | article | x optionnelForce le type au lieu de le laisser détecter depuis l'URL.
- Retourne
- { id, status: "pending" } — suivre l'enrichissement avec get_content_status.
- Droits requis
- Membre de l'organisation
- Codes d'erreur
- CONTENT_DUPLICATE · RATE_LIMIT · CONTENT_INSERT_FAILED
get_content_statusStatut d'un contenuÉtat d'ingestion d'un contenu partagé (pending → processing → processed | failed).
- Paramètres
id— string (UUID) requisIdentifiant renvoyé par add_content.
- Retourne
- { id, status, title, tags, has_embeddings, error_details }
- Droits requis
- Membre de l'organisation
- Codes d'erreur
- CONTENT_NOT_FOUND
get_contentLire un ou plusieurs contenusCharge le détail (résumé IA, tags, dates, auteur) de 1 à 25 contenus de l'organisation active, par id — la brique « lire » de la chaîne chercher → lire → dater → proposer un angle.
- Paramètres
ids— tableau de string (UUID), 1 à 25 éléments requisIdentifiants des contenus à charger (trouvés via search_contents ou list_recent_contents).includeText— booléen optionnel (défaut : false)Ajoute un extrait de extracted_text, tronqué à 4000 caractères.
- Retourne
- { count, items: [{ id, url, title, content_type, author, created_at, published_date, tags, status, llm_summary, llm_summary_points, llm_why_it_matters, llm_detail, extracted_text? }], notFoundIds }
- Droits requis
- Membre de l'organisation
- Codes d'erreur
- CONTENT_ORG_REQUIRED · CONTENT_GET_FAILED
list_recent_contentsContenus récentsListe les contenus partagés dans l'organisation active sur les N derniers jours, tous contributeurs confondus.
- Paramètres
days— entier (1-90) optionnel (défaut : 7)Profondeur de la fenêtre, en jours.status— enum : pending | processing | processed | failed optionnelNe garde que les contenus dans cet état d'ingestion.limit— entier (1-100) optionnel (défaut : 50)Nombre maximum de contenus renvoyés.tags— tableau de string optionnelIntersection : ne garde que les contenus qui portent TOUS ces tags.contentType— enum : linkedin | youtube | article | x optionnelNe garde que les contenus de ce type.includeSummary— booléen optionnel (défaut : false)Ajoute llm_summary et author à chaque item (la liste reste légère par défaut).
- Retourne
- { count, items: [{ id, url, title, content_type, status, tags, created_at, llm_summary?, author? }] }
- Droits requis
- Membre de l'organisation
- Codes d'erreur
- CONTENT_ORG_REQUIRED · CONTENT_LIST_FAILED
search_contentsRecherche sémantiqueRetrouve les contenus proches d'une question, par le sens et non par les mots (embeddings Voyage + pgvector), dans l'organisation active — avec résumé et date pour dater ce qu'elle trouve.
- Paramètres
query— string (non vide) requisQuestion ou sujet recherché.limit— entier (1-50) optionnel (défaut : 10)Nombre maximum de contenus renvoyés.similarityThreshold— nombre (0-1) optionnel (défaut : 0.35)Seuil de similarité ; monter vers 0.5 pour ne garder que les correspondances fortes.since— string (date-heure ISO 8601) optionnelBorne basse sur contents.created_at (date de partage) ; sans borne par défaut.until— string (date-heure ISO 8601) optionnelBorne haute sur contents.created_at.
- Retourne
- { count, matches: [{ similarity, id, title, url, content_type, author, created_at, published_date, tags, llm_summary }] }
- Droits requis
- Membre de l'organisation — nécessite aussi que l'instance soit configurée :
VOYAGE_API_KEY - Codes d'erreur
- CONTENT_SEARCH_UNAVAILABLE · CONTENT_ORG_REQUIRED · CONTENT_EMBEDDING_FAILED · CONTENT_SEARCH_FAILED
suggest_linkedin_anglesProposer des angles de post LinkedInPropose 2 à 3 angles de post LinkedIn (accroche + 3 points clés + sources) sur un sujet, à partir des contenus de toute l'organisation active — la brique « proposer un angle » de la chaîne, distincte du digest personnel.
- Paramètres
topic— string (non vide) requisSujet des angles recherchés (sert aussi de requête de recherche sémantique).days— entier (1-90) optionnel (défaut : 60)Profondeur de la fenêtre de recherche, en jours.contentIds— tableau de string (UUID), 25 éléments max optionnelContenus à inclure explicitement dans le corpus, en plus de la recherche sémantique.count— entier (2-3) optionnel (défaut : 3)Nombre d'angles souhaité.
- Retourne
- { suggestions: [{ hook, keyPoints: [3 items], sourceContentIds }], consideredContentIds }
- Droits requis
- Membre de l'organisation — nécessite aussi que l'instance soit configurée :
VOYAGE_API_KEY,ANTHROPIC_API_KEY - Codes d'erreur
- AUTH_UNAUTHORIZED · VALIDATION_ORG_REQUIRED · VALIDATION_INVALID_INPUT · CONTENT_EMBEDDING_FAILED · CONTENT_NO_MATCH · CONTENT_SUGGESTION_FAILED
Diffusion (6 outils)
Transformer la veille en newsletter et en campagne d'emailing.
regenerate_editorial_angleRégénérer l'angle éditorialRecalcule (RAG + LLM) la seule section « angle éditorial » d'un brouillon existant.
- Paramètres
newsletterId— string (UUID) requisBrouillon dont l'angle est recalculé.
- Retourne
- { sectionId, title, body, sourceContentIds, model, query }
- Droits requis
- Administrateur de l'organisation
- Codes d'erreur
- AUTH_UNAUTHORIZED · PERMISSION_ORG_FORBIDDEN · VALIDATION_NOT_FOUND
sync_subscribers_to_brevoSynchroniser les abonnés vers BrevoRecopie les abonnés confirmés de l'organisation dans la liste Brevo cible (idempotent). Supabase reste la source de vérité de l'opt-in.
- Paramètres
listId— entier positif optionnelListe Brevo visée ; à défaut, la valeur de BREVO_LIST_ID.
- Retourne
- { listId, submitted, processId } — l'import Brevo est asynchrone.
- Droits requis
- Administrateur de l'organisation — nécessite aussi que l'instance soit configurée :
BREVO_API_KEY,BREVO_LIST_ID - Codes d'erreur
- BREVO_NOT_CONFIGURED · BREVO_LIST_MISSING · SUBSCRIBER_LIST_FAILED · BREVO_IMPORT_FAILED
create_brevo_campaignCréer une campagne Brevo (brouillon)Rend le HTML de la newsletter puis crée une campagne Brevo en brouillon. N'envoie jamais : la relecture et l'envoi restent manuels dans Brevo.
- Paramètres
newsletterId— string (UUID) requisNewsletter à mettre en campagne.listId— entier positif optionnelListe Brevo visée ; à défaut, la valeur de BREVO_LIST_ID.scheduledAt— string (date-heure ISO 8601) optionnelDate de programmation posée sur la campagne Brevo.
- Retourne
- { campaignId, status: "draft", listId, brevoDashboardUrl }
- Droits requis
- Administrateur de l'organisation — nécessite aussi que l'instance soit configurée :
BREVO_API_KEY,BREVO_LIST_ID,NEWSLETTER_FROM_EMAIL - Codes d'erreur
- BREVO_NOT_CONFIGURED · BREVO_LIST_MISSING · BREVO_SENDER_MISSING · NEWSLETTER_RENDER_EMPTY · BREVO_CAMPAIGN_FAILED
Contributeur (2 outils)
Votre activité personnelle et les angles de publication qui en découlent.
generate_digestGénérer un digestProduit la synthèse personnelle d'un contributeur (statistiques, thèmes, angles LinkedIn). Un administrateur d'organisation la génère pour tous les membres, un membre pour lui seul.
- Paramètres
type— enum : daily | weekly optionnel (défaut : daily)Périodicité du digest.periodStart— string (date-heure ISO 8601) optionnelDébut de période ; sans bornes, la période est calculée en Europe/Paris.periodEnd— string (date-heure ISO 8601) optionnelFin de période.
- Retourne
- { digestType, periodStart, periodEnd, usersProcessed, usersSkipped, usersFailed, digests, orgsProcessed }
- Droits requis
- Membre de l'organisation
- Codes d'erreur
- AUTH_UNAUTHORIZED · VALIDATION_ORG_REQUIRED
get_linkedin_ideasIdées de post LinkedInRelit les angles LinkedIn (accroche, points clés, sources) du dernier digest de l'utilisateur connecté, dans l'organisation active.
- Paramètres
type— enum : daily | weekly optionnelRestreint au dernier digest de cette périodicité.
- Retourne
- { digestId, digestType, period, suggestionsCount, suggestions }
- Droits requis
- Membre de l'organisation
- Codes d'erreur
- VALIDATION_ORG_REQUIRED · DIGEST_READ_FAILED · DIGEST_NOT_FOUND
Si ça ne marche pas
- Votre assistant ne propose pas de vous connecter à Kurra
- Vérifiez que l'adresse saisie est exactement
https://kurra.ai/api/mcp, puis reprenez l'étape « Autorisez l'accès » de votre client. Si votre client n'a pas d'onglet, vérifiez qu'il remplit les exigences de l'onglet « Autre client MCP ». - Les outils répondent « non autorisé » après un moment
- La connexion a expiré sans pouvoir se renouveler. Reconnectez Kurra en reprenant l'étape « Autorisez l'accès » de votre client.
- « Autorisation impossible » au moment d'autoriser l'accès
- Votre client rejoue un enregistrement que Kurra ne connaît plus — c'est le cas après une restauration de sauvegarde ou un changement d'instance. Se reconnecter ne suffit pas : retirez Kurra de votre client (dernière étape de sa procédure), puis ajoutez-le de nouveau.
- CONTENT_ORG_REQUIRED ou VALIDATION_ORG_REQUIRED
- Votre compte n'a pas d'organisation active. Ouvrez le dashboard et sélectionnez une organisation, puis relancez l'outil.
- CONTENT_SEARCH_UNAVAILABLE
- La recherche sémantique n'est pas configurée sur cette instance. Les autres outils de curation restent utilisables.
- BREVO_NOT_CONFIGURED ou BREVO_LIST_MISSING
- Les outils de campagne exigent une configuration d'emailing côté instance. Voyez avec l'administrateur de votre espace.
- RATE_LIMIT
- Votre organisation a atteint son plafond mensuel d'ingestion. Les ajouts reprennent au début du mois suivant.
- CONTENT_DUPLICATE
- L'URL est déjà dans la veille de l'organisation. C'est voulu : un contenu n'y entre qu'une fois.