Le serveur MCP

Connecter un assistant IA à vos espaces, avec des droits maîtrisés.

OIO expose un serveur MCP (Model Context Protocol). C'est la façon standard de donner à un assistant — Claude, ou tout autre client compatible — l'accès à vos pages : il peut les lire, les chercher, et si vous l'autorisez, les modifier.

Deux serveurs

OIO expose en réalité deux serveurs MCP, qui ne se confondent pas :

Serveur des espaces Serveur de la documentation
Adresse https://votre-instance/_mcp https://votre-instance/mcp
Accès Clé d'API ou connexion OAuth Aucun compte, aucune clé
Contenu Vos pages et bases de données La documentation, les comparatifs, le journal des versions
Écriture Selon la clé Jamais

Le premier fait l'objet du reste de cette page. Le second est décrit plus bas : il sert à poser des questions sur OIO à un assistant, avant même d'avoir un compte.

Pourquoi c'est différent d'un copier-coller

Sans MCP, faire travailler un assistant sur vos notes suppose de les lui coller à la main, morceau par morceau. Avec MCP, il va les chercher lui-même, dans le périmètre exact que vous lui avez ouvert — et rien d'autre.

Se connecter

Créez d'abord une clé d'API. Le niveau d'accès de cette clé détermine tout ce qui suit.

Déclarez ensuite le serveur dans votre client :

{
  "mcpServers": {
    "oio": {
      "type": "http",
      "url": "https://votre-instance/_mcp",
      "headers": { "Authorization": "Bearer oio_votre_cle" }
    }
  }
}

Ce que l'assistant peut faire

Toujours disponible — lecture

Outil Effet
list_pages Lister les pages accessibles et leur arborescence
get_page Lire une page, au format Markdown
search_pages Chercher dans les titres et les contenus
list_databases Lister les bases de données
query_database_rows Lire les lignes d'une base, valeurs comprises, avec pagination et total
describe_database Lire la structure d'une base : colonnes, types, options, et la valeur de chaque agrégat de pied de colonne

Seulement avec une clé en lecture-écriture

Outil Effet
create_page Créer une page, avec un contenu initial
update_page Changer le titre ou l'icône
append_to_page Ajouter du contenu à la fin d'une page
replace_page_content Remplacer tout le contenu d'une page
delete_page Mettre une page à la corbeille
create_database Créer une base de données avec ses colonnes
add_database_column Ajouter une colonne
update_database_column Renommer une colonne, changer son type, ses options ou son agrégat
delete_database_column Supprimer une colonne et ses valeurs
create_database_row Ajouter une ligne à une base
update_database_row Modifier les valeurs de colonne d'une ligne, ou son nom
delete_database_row Mettre une ligne d'une base à la corbeille
add_comment Déposer un commentaire

Avec une clé en lecture seule, les outils d'écriture ne sont pas proposés à l'assistant. Et s'il tentait malgré tout de les appeler, le serveur refuserait : le masquage est un confort, la barrière est ailleurs.

Les garanties

Le cloisonnement s'applique à chaque appel. L'assistant ne voit que l'espace de la clé, et que les pages autorisées. Il ne peut pas en sortir, quelle que soit la façon dont il formule sa demande.

Rien n'est irréversible. delete_page et delete_database_row passent par la corbeille, avec les sous-pages, exactement comme une suppression faite à la main. Aucun outil ne touche aux membres, aux clés d'API ni aux comptes : un assistant ne peut pas élargir ses propres droits.

Une colonne « Auteur » ne peut pas être falsifiée. create_database_row et update_database_row refusent toute valeur envoyée pour une colonne de ce type — elle reflète toujours le membre propriétaire de la ligne, jamais ce que transmet l'assistant. Il en va de même d'une colonne « Formule », qui est calculée. query_database_rows affiche ces valeurs comme n'importe quelle autre colonne.

query_database_rows ne renvoie jamais toute une grande base en silence. Il lit par page (limit, 50 lignes par défaut, 200 au maximum) et renvoie systématiquement total, le nombre réel de lignes de la base — pas seulement celles reçues. Si total dépasse le nombre de lignes reçues, la base n'a été lue qu'en partie : rappelez l'outil avec offset augmenté de la taille de la page précédente pour lire la suite, jusqu'à couvrir total. Sans relire ce champ, un assistant pourrait croire avoir vu toute une base de 340 lignes après n'en avoir lu que 50.

Les archives sont exclues, sauf demande. query_database_rows ne renvoie pas les lignes archivées, exactement comme l'écran et comme le compte de describe_database : les deux outils annoncent donc le même nombre de lignes pour une même base. Passez includeArchived pour les ajouter ; chaque ligne indique alors si elle est archivée.

Une ligne se désigne par sa base et par elle-même. update_database_row et delete_database_row demandent à la fois l'identifiant de la base et celui de la ligne, et refusent une page qui n'appartient pas à cette base : un assistant ne peut donc pas s'en servir pour écrire dans — ou supprimer — une page quelconque. Les colonnes se nomment comme à l'écran (« Statut »), et une valeur vide efface la colonne sans supprimer la ligne.

Les totaux lus sont ceux affichés. describe_database calcule les agrégats de pied de colonne (somme, moyenne, minimum, maximum, remplis, vides) par le même chemin que l'affichage, archives exclues comme à l'écran : un assistant qui rend compte d'un budget annonce le chiffre que vous voyez, pas un calcul parallèle.

Une page ne porte qu'une base. Les lignes d'une base sont les sous-pages de la page qui la contient : create_database crée donc sa propre page, et refuse de poser une seconde base sur une page qui en porte déjà une, où les deux tableaux mélangeraient leurs lignes.

Un changement de type dit ce qu'il a coûté. update_database_column convertit les valeurs existantes au mieux et renvoie combien d'entre elles n'ont pas pu l'être (convertedValues). Supprimer une colonne, en revanche, est irréversible : ses valeurs ne passent pas par la corbeille, contrairement à une page.

Le contenu circule en Markdown, dans les deux sens.

Limites de l'écriture

La conversion du Markdown vers les blocs OIO couvre les titres, les listes, les cases à cocher, les citations, le code, les séparateurs et les tableaux — ces derniers depuis la version 0.36.0, la première où l'écriture rend ce que la lecture montrait déjà.

Les images restent refusées, avec un message explicite : une image désigne un fichier, et un fichier s'envoie depuis l'application, pas depuis du texte. Mieux vaut un refus clair qu'un contenu dégradé sans prévenir.

Prudence

Un assistant lit ce que contiennent vos pages. Si une page contient du texte rédigé par un tiers, ce texte peut chercher à influencer son comportement. C'est précisément à cela que sert le cloisonnement : même dans ce cas, il ne peut rien atteindre au-delà du périmètre de la clé. Donnez une clé en lecture seule tant que l'écriture n'est pas nécessaire.

Le serveur de la documentation

Vous voulez savoir si OIO couvre tel besoin, comment se règle telle option, ou ce qui le distingue de l'outil que vous utilisez ? Plutôt que de lire cette documentation page à page, donnez-la à votre assistant. Le serveur public se déclare sans aucune clé :

{
  "mcpServers": {
    "oio-doc": {
      "type": "http",
      "url": "https://votre-instance/mcp"
    }
  }
}

Il propose six outils, tous en lecture seule :

Outil Effet
list_doc_sections Le sommaire de cette documentation
search_doc Chercher dans les titres et les contenus
get_doc_page Lire une page, au format Markdown
list_comparisons Les comparatifs « OIO et… » publiés
get_comparison La fiche complète d'un comparatif : tableau ligne à ligne, ce qu'OIO ne fait pas, questions fréquentes
get_changelog Les dernières versions et leurs nouveautés

Il ne donne accès à aucune donnée d'utilisateur — ni les vôtres ni celles de personne : tout ce qu'il renvoie est déjà lisible sur ce site sans compte. C'est pour cela qu'il n'a pas besoin de clé. Pour travailler sur vos pages, c'est le serveur des espaces qu'il faut déclarer, avec une clé d'API.

Confirmation