// mcp

Serveur MCP

l0g expose ses données aux agents IA via le Model Context Protocol, en lecture seule. Un agent peut interroger l'Agent Surface, le contrat OpenAPI, les flux NDJSON, Risk Diff, Black Box Recorder, les claims, l'evidence graph, les sources, la fraîcheur, l'intégrité, le changefeed, l'historique des signaux ou récupérer le texte complet d'un article, sans scraper le site. Le graphe de preuve devient interrogeable directement : article, affirmation, type, source, date et profondeur de preuve. Aucune clé, aucune authentification, aucun pistage.

English MCP documentation →

// pourquoi

Les agents IA lisent de plus en plus le web à la place des humains, et ils le font mal : ils aplatissent le HTML, perdent le contexte et citent de travers. Pour un site dont toute la valeur tient à la rigueur du sourcing, c'est un risque. Plutôt que de subir un scraping approximatif, l0g publie des surfaces lisibles par machine, propres et attribuables, pour que les données soient reprises exactement.

Le choix du Model Context Protocol prolonge la philosophie du site : statique, auto-hébergé, sans CDN ni proxy tiers, sans pistage. L'accès machine est ouvert, en lecture seule, sous licence CC BY 4.0. Un agent obtient la donnée juste, avec sa source et son URL canonique, plutôt qu'une approximation extraite d'une page.

// ce que nous avons construit

Six couches d'accès machine, de la plus simple à la plus riche, toutes générées à partir des mêmes contenus et des mêmes données vérifiées :

  • une API JSON publique pour les indices de risque, Risk Diff, Black Box, le snapshot canonique Dette US et le flux Atom des changements de niveau ;
  • un catalogue machine des articles, guides et sujets ;
  • une Agent Surface avec claims, evidence graph, Risk Diff, Black Box, intégrité, changefeed et flux NDJSON ;
  • un contrat OpenAPI et des flux NDJSON exposés directement comme tools MCP ;
  • deux fichiers llms.txt et llms-full.txt, carte concise et corpus intégral, pour les agents qui les recherchent ;
  • ce serveur MCP, qui transforme tout cela en resources lisibles et tools appelables par un agent, sans scraping. Les opérations fines sur claims, sources, preuves, changements, Risk Diff, Black Box et intégrité sont exposées comme tools structurés.

// endpoint

Transport Streamable HTTP (spec MCP 2025-11-25), mode requête/réponse JSON.

https://l0g.fr/api/mcp

Lecture seule. Le code et la procédure de déploiement sont publics sur le dépôt GitHub.

// resources

Les documents et datasets sont exposés comme ressources MCP. Les agents peuvent les lister avec resources/list, lire leur contenu avec resources/read, et découvrir les URI paramétrées avec resources/templates/list.

URIContenu
l0g://agent-manifest Manifeste Agent Surface
l0g://openapi Contrat OpenAPI complet
l0g://freshness Fraîcheur du corpus et des signaux
l0g://integrity Empreintes SHA-256 canoniques
l0g://changes/latest Derniers changements éditoriaux et publications
l0g://risk-diff Diff du risque sur 1, 7 et 30 jours
l0g://black-box Frames point-in-time hashées du risque
l0g://signals/current État courant des signaux
l0g://signals/history Historique point-in-time des signaux
l0g://mcp/server Version MCP, SHA actif et capacités serveur

// resource templates

TemplateContenu
l0g://articles/{slug} Première page article avec métadonnées, références et texte
l0g://articles/{slug}{?section,offset,limit} Page ciblée article par section, offset et limit
l0g://articles/{slug}{?cursor} Continuation article via nextCursor
l0g://guides/{slug} Première page guide avec métadonnées et texte
l0g://guides/{slug}{?section,offset,limit} Page ciblée guide par section, offset et limit
l0g://guides/{slug}{?cursor} Continuation guide via nextCursor
l0g://claims/{claim_id} Relation affirmation-source
l0g://sources/{source_id} Source primaire ou hôte cité
l0g://signals/{instrument}/current Signal courant et historique
l0g://methodologies/{instrument} Fiche méthodologique

Les templates énumèrent les instances connues et proposent des complétions de variables. Le service public actuel reste stateless et n'annonce pas de souscriptions live : la veille opérationnelle passe par l0g://changes/latest ou get_changefeed.

// tools

Les tools sont réservés aux opérations : recherche, filtrage, diff, replay, historique, extraction de sous-graphe ou lecture ciblée. La recherche plein texte reste locale et déterministe, sans base vectorielle ni fournisseur externe. Les articles longs sont paginables, avec curseur de continuation, accès direct aux sources et références séparées. Chaque réponse expose un résumé humain dans content et les données exploitables dans structuredContent, avec un outputSchema déclaré. Les identifiants inconnus sont marqués par isError: true côté tools ; les resources inexistantes renvoient une erreur protocolaire MCP.

ToolArgumentsRenvoie
get_agent_manifest aucun Manifeste Agent Surface : capacités, endpoints, règles d'usage, politiques de preuve et compteurs.
get_risk_indices aucun Signaux de risque normalisés par instrument (US Macro, EU Macro, Yen Carry, Énergie, Dette US) et synthèse de confluence 13F.
get_signal_history key, limit Historique des franchissements de niveau, état courant des signaux et confluence 13FLOW.
get_risk_diff window Diff du risque sur 1, 7 ou 30 jours : signaux, sources, claims, modèles, articles et confiance.
get_black_box date, limitFrames Replay point-in-time des frames de risque hashées, avec refus explicite des dates non rejouables.
get_openapi_schema mode, path Contrat OpenAPI résumé, ciblé par endpoint ou complet pour générer un client.
get_ndjson_feed feed, recordType, limit Flux NDJSON allowlistés : catalogue, claims, evidence graph, changefeed et historique des signaux.
get_freshness limit Fraîcheur du corpus et des signaux : observedAt, computedAt, expiration, couverture et politique de fraîcheur.
search_content query, mode, limit Recherche plein texte locale sur HTML généré, avec mode catalogue disponible pour audit.
get_claims articleSlug, kind, query, limit Relations affirmation-source filtrables, avec références cliquables, datées quand détectable.
get_claim claimId Claim précise, liens ressource et article parent.
get_claim_evidence claimId, limit Niveau de preuve prudent d'une claim, avec preuve directe seulement si revue humaine ; contenus reliés séparés par hôte/source commune.
list_article_claims articleSlug, kind, limit Claims d'un article, utilisables comme points d'entrée du graphe de preuve.
find_claims_by_source sourceId, kind, limit Claims liées à une source primaire, un nom ou un host cité.
get_source sourceId, limit Source primaire ou hôte cité, avec claims associées.
get_evidence_graph articleSlug, nodeType, limit Sous-graphe direct articles → claims → références → sources, contexte relié séparé.
list_sources mode, limit Sources primaires institutionnelles et hôtes effectivement cités par les claims.
get_integrity path Empreintes SHA-256 canoniques des surfaces Agent Surface, JSON et NDJSON.
verify_artifact path, sha256 Vérification allowlistée d'un artefact via le manifeste d'intégrité.
get_changefeed contentType, limit Derniers changements avec objectId, version/hash courant, statut de diff et changement sémantique.
get_changes contentType, slug, since, limit Changefeed filtrable par type, slug et date minimale, avec métadonnées de version.
list_recent_analyses limit Dernières analyses publiées, de la plus récente à la plus ancienne.
list_guides aucun Guides de référence (pages piliers durables).
search_by_topic topic, limit Analyses rattachées à un sujet (hub thématique).
get_article slug, offset, cursor, limit, length, section Texte paginé d'une analyse ou d'un guide, avec nextCursor, références séparées et accès direct tail/sources.

// se connecter

Inspecter les tools avec l'outil officiel, en renseignant l'endpoint :

npx @modelcontextprotocol/inspector

Brancher un client de bureau via le pont local :

npx mcp-remote https://l0g.fr/api/mcp

Exemple de configuration pour un client compatible :

{
  "mcpServers": {
    "l0g": {
      "command": "npx",
      "args": ["mcp-remote", "https://l0g.fr/api/mcp"]
    }
  }
}

Cycle MCP minimal en JSON-RPC brut : initialisation, notification initialized, puis appel ordinaire. Pour une session complète, préférer l'inspecteur ou mcp-remote.

curl -s -X POST https://l0g.fr/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"0.1"}}}'

curl -s -X POST https://l0g.fr/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

curl -s -X POST https://l0g.fr/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

// sécurité et conception

  • Lecture seule. Aucun tool n'écrit quoi que ce soit, et l'accès aux articles passe par une liste blanche de slugs, sans récupération d'URL arbitraire.
  • Jamais exposé en direct. Le service n'écoute qu'en local, derrière Apache qui assure le TLS et le proxy.
  • Anti détournement. Validation des en-têtes Host et Origin à chaque requête, contre les attaques par DNS rebinding, comme l'exige la spec.
  • Bridé. Limitation de débit par IP, taille de requête bornée, et un service système durci (utilisateur éphémère, système de fichiers en lecture seule, capacités vidées).
  • Sans donnée sensible. Tout est public, donc ni clé ni authentification, et aucun pistage.

En toute honnêteté, peu de clients grand public consomment encore nativement les serveurs MCP distants : le protocole est récent. Cet accès est donc autant un pari sur l'usage à venir qu'un outil immédiat, dans la continuité de l'API et des fichiers pour agents.

// autres accès machine