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
- Pourquoi c'est différent d'un copier-coller
- Se connecter
- Ce que l'assistant peut faire
- Les garanties
- Limites de l'écriture
- Prudence
- Le serveur de la documentation
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.