Amélioration instructions config MCP et prompts

This commit is contained in:
Colin Maudry
2026-07-14 21:15:17 +02:00
parent 2efb5e067c
commit ca320bdc1f
+55 -20
View File
@@ -16,7 +16,7 @@ register_page(
description="Connectez votre agent IA aux données colibre via le protocole MCP.", description="Connectez votre agent IA aux données colibre via le protocole MCP.",
) )
MCP_ENABLED = os.getenv("DASH_MCP_ENABLED") == "true" MCP_ENABLED = os.getenv("DASH_MCP_ENABLED", "").lower() == "true"
_TOKEN_PLACEHOLDER = "<VOTRE_JETON>" _TOKEN_PLACEHOLDER = "<VOTRE_JETON>"
@@ -36,7 +36,7 @@ def _csrf(index: str):
def client_instructions(url: str, token: str): def client_instructions(url: str, token: str):
"""Construit les blocs d'instructions par client (fonction pure, testable).""" """Construit les blocs d'instructions par client (fonction pure, testable)."""
claude = f'claude mcp add colibre --scope user --transport http {url} --header "Authorization: Bearer {token}"' claude = f'claude mcp add colibre --scope user --transport http {url} --header "Authorization: Bearer {token}"'
gemini = f'gemini mcp add --transport http --header "Authorization: Bearer {token}" colibre {url}' gemini = f'gemini mcp add --scope user --transport http --header "Authorization: Bearer {token}" colibre {url}'
return dbc.Accordion( return dbc.Accordion(
start_collapsed=True, start_collapsed=True,
always_open=False, always_open=False,
@@ -70,20 +70,20 @@ def client_instructions(url: str, token: str):
title="Gemini CLI", title="Gemini CLI",
children=[ children=[
html.Pre(html.Code(gemini)), html.Pre(html.Code(gemini)),
html.P(
"Ou dans ~/.gemini/settings.json : un serveur mcpServers.colibre "
f'avec "httpUrl": "{url}" et "headers": '
f'{{"Authorization": "Bearer {token}"}}.'
),
], ],
), ),
dbc.AccordionItem( dbc.AccordionItem(
title="Mistral Le Chat", title="Mistral Vibe",
children=html.P( children=dcc.Markdown(f"""
"Dans les connecteurs MCP, ajoutez un serveur HTTP d'URL " 1. Sur l'[interface Work](https://chat.mistral.ai/work), cliquez sur **Connectez vos applications...**
f"{url}, authentification « API Token », en-tête " 2. Cliquez sur **+ Ajouter un connecteur**
f"« Authorization » = « Bearer {token} »." 3. Cliquez sur **Connecteur personnalisé**
), 4. Titre : colibre, Description : Base de données ouverte des marchés publics français (par exemple)
5. Serveur : `{url}`
6. Méthode d'authentification : Authentification par token API
7. Valeur du header : Bearer <VOTRE_JETON>
8. Cliquez sur **Créer**
"""),
), ),
dbc.AccordionItem( dbc.AccordionItem(
title="ChatGPT", title="ChatGPT",
@@ -110,6 +110,36 @@ def client_instructions(url: str, token: str):
) )
def prompt_tips():
"""Exemples de prompts pour guider l'utilisateur (fonction pure, testable)."""
exemples = [
"Depuis colibre, trouve le dernier marché public attribué par le "
"département du Morbihan.",
"Donne-moi les statistiques de l'acheteur Rennes Métropole : nombre de "
"marchés, montant total et principaux titulaires.",
"Quelles entreprises ont remporté le plus de marchés d'informatique "
"(CPV 72) en Ille-et-Vilaine depuis 2023 ?",
"Reprends ces marchés en n'affichant que l'objet, le montant et la date "
"de notification, avec le lien vers chaque fiche.",
]
return html.Div(
[
html.P(
"L'assistant découvre seul les outils disponibles : décrivez "
"votre besoin en langage naturel. Quelques exemples :"
),
html.Ul([html.Li(html.Em(f"« {p} »")) for p in exemples]),
html.P(
"Astuce colonnes : demandez à l'assistant de vous proposer les "
"colonnes disponibles pour choisir précisément ce qui s'affiche sous la forme, si possible d'une liste de cases à cocher "
"(les colonnes par défaut restent pré-sélectionnées). Chaque "
"marché renvoyé inclut un lien direct vers sa fiche sur colibre.",
className="text-muted",
),
]
)
def _token_row(row: dict): def _token_row(row: dict):
statut = "Révoqué" if row["revoked_at"] else "Actif" statut = "Révoqué" if row["revoked_at"] else "Actif"
actions = [] actions = []
@@ -218,19 +248,24 @@ def layout(**_):
[ [
html.H2("Connecteur MCP"), html.H2("Connecteur MCP"),
html.P( html.P(
"Les clients en ligne de commande (Claude Code, Gemini, Mistral) se " "Un connecteur MCP est une interface proposée par un outil (ici colibre) pour faciliter "
"connectent avec un jeton généré ci-dessous. Les applications grand " "son interrogation par un agent IA tel que Mistral, Claude ou ChatGPT. "
"public (Claude.ai, ChatGPT) se connectent par OAuth, sans jeton à " "Dans le cas de colibre, cela vous permet de poser des questions très précises aux données, "
"copier. Dans tous les cas, un abonnement actif est requis." "et d'obtenir une réponse rapide, précise et peu couteuse."
), ),
html.P(
"L'utilisation de cette fonctionnalité étant liée à un abonnement, vous devez d'abord vous authentifiez auprès "
"dans les options de votre agent IA. La méthode varie selon les outils."
),
html.H4("Connecter un client", className="mt-4"),
client_instructions(url, snippet_token),
*alerts, *alerts,
html.H4("Générer un jeton", className="mt-3"), html.H4("Générer un jeton", className="mt-3"),
create_form, create_form,
html.H4("Mes jetons", className="mt-4"), html.H4("Mes jetons", className="mt-4"),
table, table,
html.H4("Connecter un client", className="mt-4"), html.H4("Conseils de prompts", className="mt-4"),
html.P(f"URL du serveur MCP : {url}"), prompt_tips(),
client_instructions(url, snippet_token),
] ]
) )
return account_shell("mcp", contenu) return account_shell("mcp", contenu)