axomind-mcp
Principio
El MCP reside en el lado del consumidor, no en el servidor de Axomind. No contiene lógica de negocio: realiza peticiones HTTP POST a bot_api.php y devuelve el JSON. Toda la seguridad (autenticación, limitación de velocidad, bloqueos de IP, comprobaciones bots @>) permanece en el lado PHP.
AI (any MCP client — Hermes, Claude, Cursor, etc.)
→ MCP server Python (FastMCP)
→ HTTP POST → bot_api.php
→ PHP does the work (auth, DB, WS notify)
← JSON response
← MCP tool result → AIRelated MCP server: telegram-api-mcp
Qué hace este MCP
Este servidor expone 26 herramientas de bot que permiten a una IA interactuar con los recursos de Axomind donde hay un bot asignado:
Mindmap (10 herramientas): leer, crear, actualizar y eliminar nodos; gestionar estilos
Messenger (4 herramientas): enviar, leer, actualizar y eliminar mensajes del bot
Planning (9 herramientas): listar actividades, gestionar asignaciones, leer franjas horarias
Tree (3 herramientas): escanear directorios locales e inyectarlos como estructuras de mindmap
Instalación
uv pip install -e .Dependencias: mcp (SDK oficial), httpx (cliente HTTP).
Configuración
Copia .env.example a .env y completa tus credenciales de bot:
cp .env.example .envVariables obligatorias
Variable | Descripción |
| URL de |
| ID de bot (desde la interfaz de Axomind → gestión de bots) |
| Clave de acceso del bot (generada al crear el bot en la interfaz) |
Opcionales
Variable | Por defecto | Descripción |
|
| Tiempo de espera HTTP en segundos |
| — | Ruta explícita al archivo |
Cómo obtener las credenciales del bot
Abre la aplicación de escritorio de Axomind
Ve a la gestión de bots
Crea un nuevo bot → obtendrás un ID de bot y una clave de acceso del bot
Asigna el bot a los recursos a los que quieras que acceda (mindmaps, actividades, conversaciones)
Introduce las credenciales en tu archivo
.env
El bot solo puede acceder a los recursos donde su ID aparece en la columna JSONB bots; esto lo aplica Axomind en el lado del servidor.
Herramientas disponibles (26)
Mindmap (10) — bot API
Tool | Descripción | ¿Destructiva? |
| Lista los mindmaps donde el bot está asignado (solo metadatos) | No |
| Lee un mindmap (metadatos + todos los nodos). ⚠️ La respuesta puede superar los 2 MB con 60+ nodos con descripciones | No |
| Resumen compacto: número de nodos, títulos, estructura, has_description. Seguro para el contexto, sin descripciones ni estilos | No |
| Lee la descripción de un solo nodo por order_index (limitado a ~4 KB). Úsalo después de | No |
| Reemplaza TODOS los nodos (JSON completo, ~25 campos por nodo). ⚠️ DESTRUCTIVO: envía 1 nodo → elimina los otros 98 | ⚠️ Sí |
| Añade nodos a un mindmap existente (formato simplificado). Lee los existentes, añade y sincroniza | No |
| Reemplaza todos los nodos (formato simplificado). Valida la jerarquía antes de enviar | ⚠️ Sí (validado) |
| Actualiza un solo nodo: todos los campos admitidos (título, descripciones, parent, estilo, posiciones, free_links). Lee el mindmap completo, modifica un nodo y sincroniza. El algoritmo gestiona el JSON, no la IA | No (seguro) |
| Elimina un nodo + su subárbol. Limpia los free_links que apuntan a nodos eliminados. El nodo raíz (parent=0) no se puede eliminar. El algoritmo gestiona el JSON, no la IA | No (seguro) |
| Actualiza campos de estilo en varios nodos (color, bold, size_box, etc.). Lee, modifica y sincroniza | No (seguro) |
Modificación segura de nodos: el algoritmo gestiona el JSON
update_node y delete_node son la forma segura de modificar un mindmap. Leen el mindmap completo, aplican cambios específicos a nodos concretos y sincronizan todo. Los demás nodos (incluidas sus descripciones) se conservan intactos.
La IA nunca construye el JSON completo del nodo: solo pasa los campos a modificar y el algoritmo hace el resto:
// update_node: rename node 33
{"title": "messenger.md test"}
// update_node: change description (markdown → Quill Delta conversion is automatic)
{"descriptions": "# Module Messenger\n\nThis module handles..."}
// update_node: re-parent with cycle detection
{"parent": 2}
// update_node: change style + propagate to children
{"color": "0xFFFF6F91", "bold": true, "is_write_children": true}
// delete_node: just the order_index, no JSON at all
// delete_node(id_mindmap=100, order_index=33)Validaciones que aplica el algoritmo (no la IA):
Autorreferencia:
parent == order_index→ rechazadaDetección de ciclos:
new_parentes descendiente deorder_index→ rechazadoEl parent debe existir en el mindmap
El nodo raíz (parent=0) no se puede eliminar
free_linksno puede apuntar a sí mismo; todos los destinos deben existirsize_boxdebe estar entre 0 y 11
Formato simplificado para replace_mindmap / add_nodes
La IA proporciona un JSON compacto; el MCP expande automáticamente ~25 campos por defecto:
[
{"title": "Root", "parent": 0, "color": "0xFFF0BA6D", "size_box": 2, "bold": true},
{"title": "Category A", "parent": 1, "color": "0xFF7A8FF5", "size_box": 1, "line_style": 1},
{"title": "Item 1", "parent": 2},
{"title": "Item 2", "parent": 2, "color": "0xFFFF6F91", "free_links": [3]}
]Campos:
title(obligatorio): título del nodoparent(obligatorio): order_index del nodo padre (0 = raíz, 1 = primer nodo)color(opcional): color hexadecimal (por defecto:0xFF7A8FF5)pos_x,pos_y(opcional): posición en el lienzo (por defecto: 0)size_box(opcional): 0=normal, 1=categoría, 2=raíz (por defecto: 0)bold,italic,underline(opcional): estilo de textoline_type(opcional): 0=curva, 1=redondeada, 2=cuadradaline_style(opcional): 0=sólida, 1=discontinuastroke_width,dot_radius,radius,border_size,label_size(opcional)icon_id(opcional): ID del iconoactive_bg_colors(opcional): colores de fondo activosdescriptions(opcional): texto descriptivo (markdown → Quill Delta)free_links(opcional): lista de order_index para enlaces libres entre nodosspacing_h,spacing_v(opcional): multiplicadores de espaciado (0-10)is_write_children(opcional): propaga el estilo a los hijos (de una sola vez)
El UID y el order_index se asignan automáticamente. add_nodes lee el mindmap existente y añade después de los nodos existentes.
Tree / Escaneo de directorios (3) — local + bot API
Estas herramientas escanean el sistema de archivos local para construir estructuras de mindmap a partir de árboles de directorios.
Tool | Descripción | ¿HTTP? |
| Telemetría compacta de un directorio (título, tipo, tamaño, jerarquía). NO lee el contenido de los archivos. Úsalo antes de la inyección para obtener un recuento de nodos de referencia | No (local) |
| Escaneo + lectura + inyección en un solo paso: escanea el directorio, lee los archivos | Sí (sync_nodes) |
| Escaneo → nodos JSON (formato simplificado, sin contenido de archivos). Listo para | No (local) |
Flujo de trabajo: inyectar un directorio en un mindmap
1. tree_scope(root_path, root_title) → reference count (1 root + N dirs + M files)
2. inject_directory_to_mindmap(root_path, root_title, id_mindmap) → scan + read + Quill Delta + sync
3. Compare the returned summary (total_nodes, descriptions_filled, errors) with tree_scope count
4. If they match and errors is empty → injection validated. DONE.Solo se leen y convierten a Quill Delta los archivos
.md,.markdowny.txtLos archivos de más de 500 KB y los formatos no textuales (
.docx,.pdf, imágenes) reciben nodos con descripciones vacíasLos archivos ocultos y los directorios de control de versiones (
.git,node_modules,__pycache__) se omiten automáticamenteNunca llames a
get_mindmappara verificar una inyección: el resumen + el recuento detree_scopeson suficientes
Messenger (4) — bot API
Tool | Descripción |
| Envía un mensaje (dirigido o transmitido a todas las conversaciones) |
| Lee los mensajes del bot en una conversación |
| Actualiza un mensaje del bot |
| Elimina un mensaje del bot |
Actividad / Planificación (9) — bot API
Todas las herramientas de planificación usan la bot API (ruta bot_api.php → api_activity). El bot opera con el user_id del propietario del bot: la misma cadena de autenticación que add_assignment / update_assignment / delete_assignment.
Herramientas de alto nivel (prefiere estas)
Herramienta | Descripción |
| Crea una asignación (de un día o recursiva) con parámetros legibles para humanos (fechas, horas, nombres de días de la semana). Construye el JSON internamente |
| Modifica un grupo de asignación existente. El servidor marca el tombstone, elimina los slots antiguos y crea otros nuevos |
| Lee una actividad y devuelve un informe de telemetría (grupos, slots, comprobaciones de consistencia) |
| Lee todos los slots de planificación para un año dado a través de la API del bot. Devuelve los datos reales de los slots de tiempo (hora de inicio/fin, día del año, asignaciones de usuario) y los controles de grupo. Usa |
Herramientas de bajo nivel (JSON crudo)
Herramienta | Descripción |
| Lista las actividades donde el bot está asignado |
| Lee una actividad específica (metadatos completos) |
| Asigna slots de tiempo (JSON crudo de |
| Actualiza un grupo de asignación (JSON crudo) |
| Elimina un grupo de asignación |
Estrategia de lectura eficiente en tokens
list_mindmaps()— solo metadatos (id, título, participantes). Sin nodos.get_mindmap_summary(id_mindmap)— resumen compacto: número de nodos, títulos, estructura, indicadorhas_description. Sin descripciones, sin posiciones, sin estilos.get_node_description(id_mindmap, order_index)— lee la descripción de un solo nodo (limitada a ~4 KB).
La IA nunca debe llamar a get_mindmap (completo) a menos que necesite inspeccionar campos individuales de nodos antes de una modificación. Para entender la estructura, usa get_mindmap_summary. Para leer contenido, usa get_node_description en nodos específicos.
Integración con Hermes
Para consumir la API del Bot Axomind desde Hermes, añade el servidor MCP a ~/.hermes/config.yaml:
mcp_servers:
axomind:
command: "python3"
args: ["-m", "axomind_mcp.serveur.server"]
env:
# Bot API — URL to bot_api.php on the Axomind server
AXOMIND_BASE_URL: "https://quantive-studio.fr/app/bot_api.php"
# Bot credentials (from Axomind UI → bot management)
AXOMIND_BOT_ID: "<your_bot_id>"
AXOMIND_BOT_KEY: "<your_key_access>"
# Python import path (required — workdir sets cwd but not the import path)
PYTHONPATH: "/path/to/axomind-mcp/src"
workdir: "/path/to/axomind-mcp"⚠️ Todos los valores de env deben ser cadenas (YAML interpreta 72 como int → pydantic lo rechaza).
⚠️ PYTHONPATH es obligatorio — workdir establece el cwd pero no la ruta de importación de Python.
Después de editar la configuración, reinicia Hermes o ejecuta /reload-mcp — las 26 herramientas se descubren automáticamente con el prefijo mcp_axomind_ (por ejemplo, mcp_axomind_list_mindmaps, mcp_axomind_send_message, mcp_axomind_read_planning).
Otros clientes MCP (Claude Desktop, Cursor, etc.)
Usa las mismas variables de entorno y comando. El servidor MCP utiliza transporte stdio estándar.
Pruebas
PYTHONPATH=src python -m pytest tests/ -v149 pruebas — mock de httpx, sin llamadas de red al servidor Axomind.
Arquitectura
src/axomind_mcp/
├── __init__.py
├── _common.py — FastMCP instance, env config, _post() helper, node defaults
├── _planning.py — 9 tools planning/activity (bot API)
├── imports.py — Single import hub (registers all @mcp.tool() decorators)
├── messaging/ — Messaging tools
│ ├── __init__.py
│ └── _messenger.py — 4 tools messenger (bot API)
├── serveur/
│ ├── __init__.py
│ └── server.py — Entry point stdio, mcp.run()
├── mindmap/
│ ├── __init__.py
│ ├── _mindmap.py — 10 tools mindmap (bot API)
│ ├── node_operations.py — Shared algo: update/delete/patch nodes, cycle detection, style propagation
│ └── config_layout_mindmap.py — Node expansion, validation, auto-positioning
└── tools/
├── __init__.py
├── _file_reader.py — File reading by extension → Quill Delta
├── md_to_quill_delta.py — Markdown → Quill Delta converter
└── _tree.py — 3 tools tree (local + bot API)Seguridad
El MCP no toca la base de datos ni contiene lógica de negocio
Las credenciales provienen de variables de entorno (nunca codificadas)
El servidor Axomind no puede saber que es un MCP — ve solicitudes normales de bot_api
Las herramientas de árbol (escaneo del sistema de archivos local) solo escanean la máquina local donde se ejecuta el MCP
La ruta del archivo
.envse establece medianteAXOMIND_ENV_FILE— no se puede descubrir desde el repositorio público
Licencia
Propietario — ver LICENSE. Copyright © 2025 VEZZANI Sébastien. Todos los derechos reservados.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that connects AI assistants to your real Telegram account via User API (MTProto). Features default-deny ACL with per-chat permissions, message search, file sending, forwarding, media downloads, and rate limiting.2MIT
- AlicenseBqualityCmaintenanceUltimate MCP server for Telegram Bot API — 169 methods, full v9.6 coverage, meta-mode, rate limiting, and circuit breaker, enabling AI to control Telegram bots with natural language.10027MIT
- FlicenseNot gradedqualityBmaintenanceModel Context Protocol server for Telegram. Let AI read, search, send, and forward your Telegram messages.17
- FlicenseBqualityDmaintenanceMCP server integrating Nextcloud services (tasks, calendar, notes, email, files, Deck) for AI assistant interaction.201
Related MCP Connectors
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sebastien-VZN/axomind-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server