neurograph
NeuroGraph MCP server for querying, analyzing, and visualizing real brain network data (regions, tracts, connectivity, homologies, graph metrics, images).
Region search —
search_region: look up real loaded regions, filtered byatlas_idand by functional network classification (network_source: cole-anticevic, yeo2011-7/17, power2011); returns coordinates, reference space, network + confidence/algorithm.Connectivity lookup —
get_connectivity: given a set of region ids, return the real connections among them and the named tracts touching them, with citations.Tract search —
search_tract: find tracts by name/abbreviation substring and/or by a region they must touch, including all regions each tract innervates and its citation.Spectral/graph math —
calculate_laplacian(ascending Laplacian eigenvalues, incl. algebraic connectivity) andcalculate_spectrum(2D spectral embedding for clustering); both per atlas, with explicitmin_weightandconnection_type(never mixing structural/functional/effective).Pathfinding —
find_path: real shortest path and distance between two regions of the same atlas (weight = strength, not cost); returnsNonerather than guessing when no path exists or ids are invalid.Cross-species homology —
find_homologues: real homologies (e.g. Cheng et al. 2021,candidate_homology, no invented confidence), filterable by region or species.Species comparison —
compare_species: quantitative summary (region counts, regions in shared homologies) plus the full list of shared homologies; errors if a species doesn't exist instead of inventing one.Visualization (real PNGs) —
render_network(circular connectogram colored by real functional network),render_brain(2D axial projection with real connections), andcompare_species_images(3 PNGs: cross-species connectogram + per-species interhemispheric homolog schematics).Ingestion proposals —
propose_dataset_ingestion: generate review-ready, idempotent SQL to register a real dataset from itsdataset.yaml, optionally linking a study; never touches the live database.Scientific-integrity guarantees throughout — the server never invents connections, homologies, confidence values, or evidence; it distinguishes observed data from inference, keeps structural/functional/effective connectivity separate, and returns empty/None instead of reinterpreting requests.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@neurographshow me the connectivity of the default mode network"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NeuroGraph
Instrumento científico computacional de neuroinformática: permite
consultar, analizar y visualizar redes cerebrales (regiones, tractos,
conectividad, literatura, homologías entre especies) a partir de una
biblioteca de datos portátil. La IA (Claude u otro modelo) es su
intérprete, nunca su motor científico — ver
docs/analisis-arquitectura.md para el razonamiento completo y las
decisiones tomadas.
Estado del proyecto
Fase 0 — Entorno (hecho). Repositorio, estructura de módulos, base de datos, ontología inicial, sistema de biblioteca SSD y API mínima están esqueletizados y probados.
Fase 1 — Arquitectura (hecho). El frontend (Vite + React +
TypeScript + Three.js + D3) renderiza el connectograma y el cerebro 3D,
con filtros (red / tipo de conectividad / peso), panel de detalle y
codificación visual de nivel de evidencia y dirección (secciones 5.1,
5.3, 24), todo sincronizado entre las dos vistas. El esquema de
PostgreSQL está aplicado en la base de datos real y comprobado
funcionalmente — ver backend/database/migrations/. Falta: decidir el
empaquetado de escritorio (Tauri) cuando haya Rust disponible.
Fase 2 — Biblioteca de datos (en curso). Manifiesto de biblioteca
(.neurograph_library.yaml), manifiesto de dataset (dataset.yaml) y
escaneo automático de una biblioteca (scan_library_datasets) hechos y
probados. Biblioteca real creada en E:\NeuroData (separada del
código, tal y como describe docs/portabilidad.md), con tabla libraries
en la base de datos (migración 0002) y su alta generada en
backend/database/seed/register_library_neurodata.sql. Falta: registrar
datasets concretos en la base de datos según se vayan incorporando datos
reales.
Fase 3 — Neuroimagen (en curso). Primer atlas real cargado:
HCP-MMP1.0 (Glasser et al., 2016) — especie, atlas, 360 regiones
corticales y sus 360 coordenadas reales (espacio de referencia
explícito: fsLR_32k_S1200_groupavg_midthickness_MSMAll, nunca
asumido como MNI/Talairach). El frontend ya las consume de verdad: si
docker compose up -d está corriendo, GET /regions las sirve y la
vista de desarrollo muestra el aviso verde "DATOS REALES" en vez del
amarillo "DATOS SINTÉTICOS" — nunca mezclados en la misma vista. Las
360 regiones ya están clasificadas en las 12 redes funcionales de
Cole-Anticevic (voto mayoritario de vértices, confidence y method
registrados por región — nunca inventado); el connectograma y el
cerebro 3D las colorean por red real en vez de mostrarlas todas del
mismo gris. Segundo atlas cortical cargado: Gordon 333 (Gordon et
al., 2016, DOI 10.1093/cercor/bhu239) — 333 regiones y sus propias
12 redes (no las de Cole-Anticevic: son dos clasificaciones
distintas, aunque coincidan en algún nombre — ver el riesgo anotado
en docs/analisis-arquitectura.md). El mismo archivo declaraba 19
estructuras subcorticales sin ningún dato real detrás (comprobado,
no asumido); en su lugar se dio de alta la segmentación subcortical
real que sí trae el espacio de grayordinates del HCP (19
estructuras: amígdala, hipocampo, tálamo... más cerebelo y tronco
del encéfalo) como su propio atlas, citando a quien de verdad la
define (Glasser et al., 2013, DOI 10.1016/j.neuroimage.2013.04.127),
no a Gordon et al. El color de cada red en la interfaz ya se resuelve
por <fuente>.<red> (no solo por el nombre corto): dos redes de
atlas distintos con el mismo nombre ("Default", "Visual"...) nunca
comparten color sin aviso.
Fase 4 — Conectividad (en curso). Segundo atlas real: Brainnetome
(246 regiones, coordenadas volumétricas reales en MNI152). Conectividad
estructural real derivada de sus mapas de probabilidad de tractografía
(30 135 conexiones, media simetrizada sin umbral — decisión tomada con
la usuaria; cada una con evidence_level=indirect explícito, nunca
asumido). Nuevo GET /connections y un selector de atlas en el
frontend (HCP-MMP1.0 con redes, o Brainnetome con conectividad — nunca
los dos a la vez).
Cierre de cabos sueltos de las Fases 3/4: cada atlas ya cargado enlaza
ahora de forma estructurada con la publicación que lo define
(atlases.study_id), en vez de solo llevar la cita como texto suelto en
su nombre — DOI verificados directamente en la web del editor, no
adivinados.
Fase 5 — Matemática (en curso). backend/core/graph/ calcula, con
NetworkX/NumPy/SciPy: matriz de adyacencia, matriz de grados, Laplaciano
(explícito), autovalores/autovectores, embedding espectral, detección de
comunidades, modularidad, centralidad (grado/intermediación/autovector),
coeficiente de participación, rich-club y caminos mínimos. Desde el
28/08/2026 ya está conectado a datos reales: GET /graph-metrics?atlas_id=...
construye el grafo con las regiones y conexiones reales de un atlas (un
par con peso exactamente 0 se excluye, nunca cuenta como conexión débil)
y devuelve sus métricas. Probado con la conectividad real de Brainnetome
(246 nodos, 15 803 aristas, ~3 s): encuentra 3 comunidades y sitúa el
tálamo como la estructura más central, coherente con la literatura. De
paso se encontró y corrigió un error real en la centralidad de
intermediación, que invertía conexiones fuertes y débiles (nunca
detectado antes porque las pruebas solo usaban pesos uniformes). Total:
21 pruebas del motor matemático, todas en verde. Gordon 333 no tiene
ninguna conexión cargada todavía, así que ahí el endpoint responde
pero no aporta nada útil hasta que haya conectividad real que
analizar.
Conectividad tracto-región sobre HCP-MMP1.0 (29/08/2026). Yeh FC
(2022, Nature Communications, DOI 10.1038/s41467-022-32595-4):
probabilidad poblacional (1065 sujetos) de que cada uno de 26 tractos
de sustancia blanca nombrados atraviese cada una de las 180 áreas de
HCP-MMP1.0, por hemisferio. No es una conexión región-región — se
decidió con la usuaria no inferirla — así que el tracto es su propia
entidad Tract en el grafo (52 = 26 x 2 hemisferios), con conexiones
tracto -> región (9360, sin umbral, incluido el 75,3% en probabilidad
exactamente 0.0).
Cerebelo — distribución de redes, sin voto mayoritario único (29/08/2026). El tálamo ya estaba cubierto (Brainnetome + tractos corticotalámicos de Yeh); el cerebelo no tenía ninguna conexión. Sin descargar nada nuevo: el archivo de Cole-Anticevic ya usado para las redes de HCP-MMP1.0 trae también redes reales para el cerebelo (100% de sus 17 853 grayordinates). Forzar un único ganador (como se hace para HCP-MMP1.0) sería engañoso aquí — la red mayoritaria del cerebelo apenas llega al 30% — así que se registra la distribución completa (10 de 12 redes por hemisferio, confianzas que suman 1.0).
Related MCP server: MemoryIQ
Estructura
backend/
├── core/ módulos científicos (neuroimagen, conectoma, grafos,
│ espectral, evolución, neuropsicología)
├── library/ detección, integridad e indexación de la biblioteca SSD
├── ingestion/ importación de literatura, neuroimagen y datasets
├── ontology/ tipos de entidad y esquema de identificadores
├── database/ modelos SQLAlchemy, migraciones, repositorios
├── api/ API científica (FastAPI) — interfaz real e independiente de IA
├── mcp/ adaptador MCP sobre la API, para modelos de IA
├── ai/ proveedores de IA intercambiables (Claude, OpenAI, local...)
├── visualization/ produce descriptores de escena, no renderiza
├── tests/
└── config/ configuración (YAML + variables de entorno)
frontend/ (pendiente — Tauri + React + Three.js + D3, ver decisión de arquitectura)
docs/
scripts/Poner en marcha el entorno de desarrollo
1. Base de datos y API (necesita Docker Desktop instalado):
cp .env.example .env # y edita la contraseña
docker compose up -dEsto levanta dos contenedores: Postgres (puerto 5432) y la API de
NeuroGraph (puerto 8420, backend/Dockerfile) — no hace falta tener
Python instalado para esto. Comprobar que responde:
curl http://127.0.0.1:8420/health.
La base de datos arranca vacía. Si tienes un volcado
(scripts/export_snapshot.ps1), cárgalo; si no, reconstrúyela desde los
.sql del repositorio con scripts/rebuild_db_from_sql.sh (orden de
carga y lo que no incluye: backend/database/migrations/README.md).
2. Frontend (necesita Node.js instalado):
cd frontend
npm install
npm run devAbre la URL que imprima (normalmente http://localhost:5173). Si la API
del paso 1 está corriendo y tiene datos, verás el aviso verde "DATOS
REALES"; si no, cae automáticamente a datos sintéticos con aviso
amarillo — nunca los mezcla.
3. Backend en desarrollo (solo si vas a tocar código Python; para solo usar la aplicación, el paso 1 ya es suficiente):
python -m venv .venv # desde la raíz del repositorio, NUNCA
# desde dentro de backend/ -- pyproject.toml
# vive en la raíz, no en backend/
source .venv/bin/activate # En Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest4. Conectar un cliente MCP real (p. ej. Claude Desktop) al servidor
de backend/mcp/server.py -- necesita el paso 1 (Postgres arrancado) y el
paso 3 (entorno virtual con pip install -e ".[dev]" ya hecho):
Edita %APPDATA%\Claude\claude_desktop_config.json (Windows; en macOS es
~/Library/Application Support/Claude/claude_desktop_config.json) y
añade una entrada bajo mcpServers, usando el python.exe del propio
entorno virtual (nunca python a secas: así no depende de qué PATH
tenga el proceso que lo arranca) y la contraseña real de tu Postgres
(la misma que pusiste en .env) por variable de entorno explícita, para
no depender de si .env se carga o no:
{
"mcpServers": {
"neurograph": {
"command": "E:\\Neurograph\\.venv\\Scripts\\python.exe",
"args": ["-m", "backend.mcp.server"],
"env": {
"NEUROGRAPH_DATABASE__PASSWORD": "tu-contraseña-real-de-postgres"
}
}
}
}Guarda, cierra Claude Desktop del todo y vuelve a abrirlo. Si el servidor
no aparece, revisa %APPDATA%\Claude\logs\mcp-server-neurograph.log.
Principios que gobiernan el diseño
Los datos originales nunca se modifican; toda transformación genera un artefacto derivado con procedencia registrada (sección 3).
Conectividad estructural, funcional y efectiva nunca se mezclan (sección 8).
Dato observado, inferencia comparativa e hipótesis de homología se distinguen siempre explícitamente (sección 11, sección 24).
La IA nunca inventa conexiones, homologías ni evidencia (sección 1).
Ver docs/principios.md para la lista completa de principios vigentes y
docs/analisis-arquitectura.md para el razonamiento de cada decisión.
Licencia
NeuroGraph (código, documentación, esquema de base de datos y activos
visuales) es de Juan Boza ("Proxy") — Instituto Dédalus, y se distribuye
bajo Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional
(CC BY-SA 4.0) — ver el archivo LICENSE para el texto
completo y el resumen en lenguaje llano.
Esto NO cubre los datos científicos de terceros que NeuroGraph consulta
o carga (atlas, tractografía, estudios publicados) — cada uno conserva
la licencia/términos de su propia fuente original, citada en
docs/analisis-arquitectura.md junto a cada dataset.
Available Tools
12 toolscalculate_laplacianA
Espectro del Laplaciano del grafo real de un atlas (autovalores,
ascendente): el segundo autovalor, en un grafo conexo, es su
"conectividad algebraica" -- cuánto le cuesta desconectarse.
connection_type nunca mezcla structural/functional/effective
(sección 8); min_weight es un umbral explícito que decide quien
llama, no uno aplicado de antemano al cargar los datos.
| Name | Required | Description | Default |
|---|---|---|---|
| atlas_id | Yes | ||
| min_weight | No | ||
| connection_type | No | structural |
Output Schema
| Name | Required | Description |
|---|---|---|
| n_edges | Yes | |
| n_nodes | Yes | |
| atlas_id | Yes | |
| min_weight | Yes | |
| connection_type | Yes | |
| laplacian_eigenvalues | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers: it discloses ascending eigenvalue ordering, the meaning of the second eigenvalue (algebraic connectivity), that connection_type never mixes structural/functional/effective modalities, and that min_weight is not pre-applied when loading data. These are genuine operational traits beyond the schema, though it omits error behavior and output format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with minimal filler; the core mathematical purpose is front-loaded and the parameter clarifications are compact. The algebraic-connectivity aside is mildly tangential but adds interpretive value without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists to handle return values, and the description covers the mathematical semantics of the tool plus two key parameters. However, atlas_id is unaddressed, no guidance distinguishes this tool from calculate_spectrum, and the absence of annotations leaves the safety/side-effect profile incomplete. For a medium-complexity tool this is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and property titles are bare ('Atlas Id', 'Min Weight', 'Connection Type'), so the description must compensate. It adds real semantics for connection_type (never mixes modalities) and min_weight (explicit call-side threshold, not a data-loading filter), but leaves atlas_id unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific artifact: the spectrum of the Laplacian of a real graph of an atlas, with precise mathematical characterization (eigenvalues ascending; second eigenvalue as algebraic connectivity). The verb and resource are clear, but it does not explicitly differentiate itself from the overlapping sibling calculate_spectrum.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as calculate_spectrum, nor any prerequisites, exclusions, or conditions selecting this tool. The remark that min_weight 'decides who calls' hints at caller eligibility but operates only at parameter level and does not constitute tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_spectrumB
Embedding espectral 2D del grafo real de un atlas (Laplacian eigenmaps): una posición por región derivada de la estructura del grafo, útil para ver agrupamientos sin depender de la posición anatómica. None por región cuando el grafo tiene menos de 4 nodos (nunca un embedding inventado para un grafo demasiado pequeño).
| Name | Required | Description | Default |
|---|---|---|---|
| atlas_id | Yes | ||
| min_weight | No | ||
| connection_type | No | structural |
Output Schema
| Name | Required | Description |
|---|---|---|
| n_nodes | Yes | |
| atlas_id | Yes | |
| min_weight | Yes | |
| connection_type | Yes | |
| spectral_embedding_2d | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It meaningfully discloses an edge case: returns None per region when the graph has fewer than 4 nodes, and emphasizes that it never returns an invented embedding for a too-small graph. This is valuable beyond what the schema conveys, though it does not discuss other behavioral aspects like read-only status or parameter effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, front-loading the core purpose and then covering the small-graph edge case. The phrase 'nunca un embedding inventado para un grafo demasiado pequeño' is slightly repetitive after the None explanation, but overall every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the output shape and an important null-behavior, and an output schema exists so return values do not need further elaboration. However, it does not explain the two optional parameters or provide explicit selection guidance relative to sibling tools. For a three-parameter tool with 0% schema coverage, this leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the lack of parameter explanations. The description clarifies that the tool works on 'the real graph of an atlas' and that the output relates to graph structure, which helps slightly with atlas_id. However, min_weight and connection_type are completely unexplained, and their roles in constructing the graph are left to the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's output as a 2D spectral embedding (Laplacian eigenmaps) of an atlas's real graph, with one position per region. It distinguishes this from anatomical-position-based tools by saying it is useful for seeing groupings without depending on anatomical position. It does not state an explicit verb like 'calculates', but the noun phrase 'Embedding espectral 2D' is specific enough to convey the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when wanting to see clusters derived from graph structure rather than anatomical position. However, it does not explicitly mention when not to use it or name alternatives such as calculate_laplacian or render_network. The guidance is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_speciesA
Compara dos especies reales combinando un resumen cuantitativo y la lista completa de homologías compartidas (decisión de la usuaria, 31/08/2026: "ambos combinados"). El resumen cuenta cuántas regiones reales tiene cargada cada especie y cuántas de ellas participan en alguna homología real con la otra especie de esta comparación -- nunca compara "topología" entre especies, porque solo el humano tiene conectividad estructural real cargada (Brainnetome/HCP-MMP1.0); chimpancé y macaco solo tienen regiones y homologías. Lanza un error si alguna de las dos especies no existe -- nunca compara contra una especie inventada.
| Name | Required | Description | Default |
|---|---|---|---|
| species_a_id | Yes | ||
| species_b_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| species_a | Yes | |
| species_b | Yes | |
| homologies | Yes | |
| homology_count | Yes | |
| homologies_by_status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool throws an error if a species doesn't exist, that it never compares against invented species, and that it never compares topology. It also explains the underlying data limitation (only human has structural connectivity). This is strong behavioral transparency, though it could have mentioned the exact error type or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the core purpose and then adds critical constraints. It is somewhat long but every sentence adds value: the combined output, the counting logic, the topology exclusion, and the error behavior. The structure could be improved with bullet points or clearer separation, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (comparison logic, data limitations, error handling) and the absence of annotations, the description covers the essential behavioral context. It explains what the tool does, what it doesn't do, and when it errors. The output schema exists, so return values are presumably documented elsewhere. The only minor gap is not specifying the exact format of the species IDs or the structure of the homology list, but the description is largely complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The description explains that the two parameters are species IDs and that they must refer to real species, but it doesn't add detail about the format or expected values of the IDs. The description's mention of 'species_a_id' and 'species_b_id' is implicit, not explicit. Baseline 3 is appropriate because the description adds some semantic context (real species, error on non-existent) but doesn't fully elaborate on parameter specifics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: comparing two real species by combining a quantitative summary and the complete list of shared homologies. It explicitly names the resource (species) and the specific action (compare), and it distinguishes itself from siblings like compare_species_images and find_homologues by specifying the combined output format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: it compares real species, never invented ones, and it explicitly states that it does not compare topology between species because only human has real structural connectivity loaded. This directly informs the agent when this tool is appropriate versus when it might need a different tool (e.g., for connectivity comparisons).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_species_imagesA
Tres imágenes PNG reales que comparan dos especies (decisión de la usuaria, 31/08/2026): (1) un connectograma circular con las regiones reales de las dos especies (todos sus atlas), coloreadas en tres categorías -- exclusiva de la especie A, exclusiva de la especie B, y homóloga/compartida (participa en al menos una homología real con la otra especie de esta comparación) -- con una cuerda real por cada homología y leyenda de las tres categorías; (2) y (3), un esquema interhemisférico real por especie (solo sus regiones homólogas con la otra), coloreado por hemisferio real. Nunca superpone las dos especies en un único cerebro 3D: cada una tiene su propia anatomía y su propio espacio de referencia (decisión 29), así que no tendría sentido dibujarlas juntas en una escena espacial. Lanza un error si alguna de las dos especies no existe, o si existen pero no comparten ninguna homología real.
structured_output=False (bug real encontrado al conectar esta
herramienta, 31/08/2026, decisión 37): el SDK de MCP intenta generar
un esquema pydantic de salida a partir del tipo de retorno anotado, y
Image está especialcasada para un retorno suelto pero NO dentro de
un list[...] -- sin este parámetro, registrar la herramienta
lanzaba PydanticSchemaGenerationError en cuanto se importaba este
módulo, antes incluso de poder llamarla.
| Name | Required | Description | Default |
|---|---|---|---|
| min_weight | No | ||
| species_a_id | Yes | ||
| species_b_id | Yes | ||
| connection_type | No | structural |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It clearly states the output (three PNGs), error conditions (nonexistent species or no homology), and even documents a known bug workaround (structured_output=False). It also specifies that species are never overlaid, which is a critical behavioral trait. This is exceptionally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose, especially the extended bug note about pydantic schema generation and structured_output=False, which is tangential to the tool's purpose. While the opening does front-load the main purpose, the overall length and technical digression reduce conciseness. A tighter description would be more effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the output format, error behavior, and a technical caveat, which is substantial. However, it omits explanation of min_weight and connection_type parameters, leaving a gap for those inputs. Given the tool's complexity (four params, image output, error cases), it is fairly complete but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and explain each parameter. It implicitly names species_a_id and species_b_id through 'two species', but does not explain min_weight or connection_type at all. These parameters remain unexplained, leaving agents guessing about their meaning and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (generate images comparing) and a precise resource (two species), and details the three output images, their content, and color coding. It distinguishes itself from siblings like render_brain or compare_species by emphasizing its non-overlay, image-based comparison approach, making it unmistakably unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when visual comparison of two species is needed—but does not explicitly contrast it with alternatives or state conditions when to choose this over compare_species or render_network. It does mention it never overlays species in 3D, which hints at differences, but lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_homologuesA
Busca homologías reales entre especies ya cargadas (54 en este
proyecto, todas de Cheng et al. 2021, con status="candidate_homology"
y confidence=None porque el propio estudio no da ningún número
utilizable con solo 3 especies -- nunca se inventa una confianza).
region_id filtra a las que tocan esa región concreta (en cualquiera
de los dos extremos); species_id, a las que tocan esa especie. Cada
homología lleva la región y la especie real de sus dos extremos, y su
cita real si el dataset de origen tiene un estudio enlazado (nunca una
cita inventada).
| Name | Required | Description | Default |
|---|---|---|---|
| region_id | No | ||
| species_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the tool never invents confidence values or citations, and that the status is 'candidate_homology' with confidence=None. It also explains how the filters affect results (touching either end). This is strong transparency, though it does not mention performance or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but each sentence adds value: the core purpose, the data source and quality caveats, and parameter explanations. It is somewhat dense but well-structured, with the primary purpose front-loaded. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (so return format is already defined), the description covers all essential aspects: what the tool does, the data constraints (54 species, status, confidence), filter semantics, and data integrity guarantees. It is complete enough for an agent to call it correctly without additional clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides detailed semantics for both parameters: region_id filters to homologies touching that region in either end, and species_id filters to those touching that species. This goes far beyond the bare schema (which only lists names and types) and fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: finding real homologies between already loaded species. It uses a specific verb ('Busca') and a specific resource (homologies), and differentiates from sibling tools like search_region or compare_species by focusing on homology relationships. The mention of 'reales' (real) and 'ya cargadas' (already loaded) adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (for real homologies among the 54 loaded species) and explains the filtering semantics of both parameters. It does not explicitly name alternative tools or state when not to use it, but the purpose is specific enough to imply when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pathA
Camino más corto real entre dos regiones del mismo atlas, sobre el
grafo de conectividad de connection_type (un peso mayor es una
conexión más fuerte, no un coste mayor -- el camino real más corto
tiende hacia las conexiones fuertes). path y distance quedan en
None cuando source_id/target_id no pertenecen a este atlas, o cuando
no existe ningún camino real entre ambos (p. ej. componentes
desconectadas) -- nunca se aproxima ni se inventa un camino.
| Name | Required | Description | Default |
|---|---|---|---|
| atlas_id | Yes | ||
| source_id | Yes | ||
| target_id | Yes | ||
| min_weight | No | ||
| connection_type | No | structural |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| atlas_id | Yes | |
| distance | Yes | |
| source_id | Yes | |
| target_id | Yes | |
| min_weight | Yes | |
| connection_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly explains the edge-weight semantics: a larger weight is a stronger connection, not a higher cost, and the shortest path tends toward strong connections. It also discloses that path and distance become None when ids are not in the atlas or when no real path exists, and it explicitly guarantees no approximation or invented path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences that are front-loaded with the core purpose. The parenthetical about weight semantics and the second sentence about None behavior are both essential and add real value; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a pathfinding tool, the description covers the main edge cases well: missing atlas membership, disconnected components, and no approximation. The existence of an output schema reduces the need to explain return values in detail. The main gap is min_weight, which is never described, leaving a meaningful parameter ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It does add meaning for connection_type by explaining the weight interpretation, but it says nothing about min_weight, which has a default of 0 and is not self-explanatory. atlas_id, source_id, and target_id are understandable from their names but their expected formats are not clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Camino más corto real entre dos regiones del mismo atlas' — a real shortest path between two regions of the same atlas, over a specific connectivity graph. It also distinguishes itself by emphasizing 'real' vs approximate paths and by restricting to the same atlas, which helps separate it from sibling tools like find_homologues or get_connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when an exact, non-approximate shortest path is needed between two regions of the same atlas. It also explains that path and distance return None when no path exists. However, it never explicitly names alternatives or says 'use X instead of Y', so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connectivityA
Conectividad real entre un conjunto de regiones dadas: qué conexiones existen entre ellas y qué tractos con nombre las tocan (con su cita real). Con menos de dos region_ids no hay conectividad "entre regiones" que calcular, y se devuelve vacío en vez de reinterpretar la petición.
| Name | Required | Description | Default |
|---|---|---|---|
| region_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| tracts | Yes | |
| region_ids | Yes | |
| connections | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly reveals the empty-return fallback and clarifies that the result contains real connections, named tracts, and citations, not a reinterpreted query. It does not explicitly confirm read-only behavior, but the 'get' naming and query semantics make that reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core behavior is front-loaded, and the edge-case behavior is added as a second sentence that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one required parameter and an output schema, the description covers the input semantics, the minimum input size, the output content, and the fallback behavior. It does not address invalid IDs or alternative tools, but neither is essential for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that region_ids identifies the set of regions being queried and adds the important minimum-cardinality rule that fewer than two IDs yields an empty result. It does not define the exact ID format, but this is sufficient for a single simple parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool computes: real connectivity between a given set of regions, including existing connections and named tracts touching them, with citations. This is specific and differentiates it from sibling search, rendering, and path-finding tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: the tool should be used when you have a set of regions and want actual inter-region connectivity. It also warns that fewer than two region_ids returns empty rather than reinterpreting the request, providing an explicit usage constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_dataset_ingestionA
Propone el SQL de alta de un dataset real ya organizado con su
dataset.yaml y su mapa files (decisión 46, cierra el ciclo que la
decisión 44 dejó preparado: manifiesto real -> lector real -> SQL).
dataset_dir es una ruta LOCAL en la máquina donde corre este
servidor MCP (la misma que ya aloja la biblioteca de datos, sección
23) -- nunca una ruta remota ni relativa a este proceso.
Solo funciona si el format del manifiesto ya es una de las cuatro
etiquetas de backend/ingestion/datasets/formats.py::SUPPORTED_FORMATS
(nunca unsupported_pending_adapter, que necesita su propio
adaptador nuevo primero, ver docs/protocolo-ingesta-ia.md) y si su
mapa files cubre todos los roles que ese formato necesita.
NUNCA toca la base de datos real ni la conexión con ella: solo
genera y devuelve el SQL de alta (idempotente, ON CONFLICT DO UPDATE, mismo estilo que todos los scripts/register_*.py) para
que una persona lo revise antes de aplicarlo -- ninguna
automatización de este protocolo sustituye esa revisión humana
(decisión 17). study_id/study_name son opcionales pero, si se da
uno, hace falta el otro: sin ellos, el atlas se da de alta sin
enlazar ningún estudio (nunca uno inventado).
| Name | Required | Description | Default |
|---|---|---|---|
| study_id | No | ||
| study_doi | No | ||
| study_name | No | ||
| study_year | No | ||
| dataset_dir | Yes | ||
| study_authors | No | ||
| study_journal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| sql | Yes | |
| format | Yes | |
| dataset_id | Yes | |
| dataset_dir | Yes | |
| region_count | Yes | |
| network_count | Yes | |
| coordinate_count | Yes | |
| membership_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It excels: it explicitly states the tool NEVER touches the real database or its connection, only generates idempotent SQL (ON CONFLICT DO UPDATE), requires human review before application (decision 17), and that dataset_dir must be local, never remote. This is rich, safety-relevant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose (three paragraphs) but front-loaded with the core purpose in the first sentence, and every sentence carries substantive information about constraints or behavior. It could be tightened, but there is no wasted or filler content; the density justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (so return values are covered) and the tool is complex (7 params, 0% schema coverage), the description is largely complete: it covers the SQL generation mechanics, idempotency, human-review requirement, format preconditions, and study pairing. The main gap is the four undocumented study metadata parameters, which prevents a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does well for dataset_dir (local path semantics) and the study_id/study_name pairing rule, but says nothing about study_doi, study_year, study_authors, or study_journal. Four of seven parameters remain undocumented in both schema and description, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Propone el SQL de alta de un dataset real' (proposes the registration SQL for a real dataset). It is clearly differentiated from the sibling tools, which are all analysis/rendering tools (render_brain, search_region, get_connectivity), making this the only ingestion/registration tool in the set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies clear preconditions for use: the manifest format must already be one of the four labels in SUPPORTED_FORMATS (never unsupported_pending_adapter), and the files map must cover all required roles. It also states the study_id/study_name pairing constraint and that dataset_dir must be a local path. It does not name explicit alternative tools, but the siblings are all unrelated analysis tools, so no true alternative exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_brainB
Imagen PNG real: proyección 2D (vista axial, coordenada real X/Y
de cada región, eje Z descartado) de un atlas, coloreada por red
funcional real (leyenda incluida), con las conexiones reales por
encima de min_weight como líneas finas. Lanza un error si el atlas
no tiene ninguna región real cargada.
| Name | Required | Description | Default |
|---|---|---|---|
| atlas_id | Yes | ||
| min_weight | No | ||
| connection_type | No | structural |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does it well: it reveals output format (PNG), coordinate system details (axial view, Z axis discarded), legend inclusion, connection threshold behavior, and the error case. It does not mention side effects, but as a rendering tool this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense sentence with no filler, front-loading 'Imagen PNG real' and then specifying projection, coloring, connections, and error behavior. The repeated use of 'real' is slightly heavy but serves to emphasize the contrast with synthetic/network views.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, it covers output format, coordinate handling, coloring, thresholding, and error behavior. It is less complete because it omits connection_type semantics and does not explicitly guide selection relative to render_network.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but only min_weight is explained ('connections above min_weight as thin lines'). atlas_id is inferable from the tool's purpose, while connection_type receives no explanation of its allowed values or effect, leaving a significant parameter gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Imagen PNG real' and specifies a 2D axial atlas projection with real X/Y coordinates, coloring by functional network, and thresholded connection lines. This gives a clear verb+resource+output and distinguishes it from siblings like render_network by focusing on atlas projection, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this to get a real PNG image of an atlas projection. However, it does not explicitly state when to use this tool over render_network or other visualization siblings, and the only selection-related hint is the error condition when no real region is loaded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_networkB
Imagen PNG real: connectograma circular de un atlas, con los nodos
coloreados por red funcional real (leyenda incluida) y una cuerda
gris por cada conexión real por encima de min_weight. Nunca un
descriptor de escena -- una imagen real, igual que pidió la usuaria
(31/08/2026). Lanza un error si el atlas no tiene ninguna región real
cargada.
| Name | Required | Description | Default |
|---|---|---|---|
| atlas_id | Yes | ||
| min_weight | No | ||
| connection_type | No | structural |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does disclose key runtime behavior: real PNG output, included legend, gray chord per connection above min_weight, and an error when no real regions are loaded. It stops short of stating side effects or permissions, but for a render-style operation the provided behavior is unusually specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is dense and informative, and details are front-loaded. However, the second sentence repeats 'real image' and adds a user-request date that does not help an agent invoke the tool, so not every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers output type and one error condition but leaves out the return delivery format (PNG bytes, URL, etc.), valid connection_type semantics, and guidance for choosing this tool over render_brain. Given no output schema and no annotations, this is minimally acceptable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema descriptions cover 0% of parameters, the tool description must explain them. It clarifies min_weight as the connection threshold and indirectly identifies atlas_id as the atlas source, but connection_type is never explained, and with no enums listed the agent cannot know valid values or how it affects the connectogram.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete deliverable: a real PNG circular connectogram of an atlas, with node coloring and thresholded chords. It also stresses that it is not a scene descriptor, which gives some differentiation, but it never names a sibling like render_brain, so the distinction is not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement about when to prefer render_network over render_brain or other siblings. The 'never a scene descriptor' remark is an output guarantee, not a routing rule, and no alternative tool is suggested or excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_regionA
Busca regiones reales cargadas en NeuroGraph. atlas_id filtra a
un atlas concreto (p. ej. "atlas.human.hcp.mmp1_0"); sin él, se
devuelven las regiones de todos los atlas cargados. Cada región
lleva su coordenada real, el espacio de referencia en el que está
expresada, y su red funcional si ya se calculó una (si no,
"unclassified" -- nunca una red inventada). network_source elige
la clasificación de red (decisión 73): p. ej. "cole-anticevic" (la
de siempre en HCP-MMP1.0), "yeo2011-7", "yeo2011-17" o "power2011";
sin él, la original de cada atlas.
| Name | Required | Description | Default |
|---|---|---|---|
| atlas_id | No | ||
| network_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and clearly discloses behavior: results are restricted to atlases actually loaded, coordinates are real, and functional networks are only reported if already computed, otherwise returned as unclassified and never invented. This is a strong provenance guarantee that goes beyond the bare schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every sentence adds value for parameter behavior or result guarantees. It is slightly dense and the internal reference 'decision 73' contributes little, but the overall length is appropriate for the two parameters and output semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter search tool with an output schema, the description is complete: all parameters are explained and the semantics of coordinate, reference space, and network classification are stated. Minor gaps are the lack of explicit exclusions/alternatives and any mention of response size or pagination, but these are not critical for this simple lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema provides only names and nullable string types. The description compensates fully by explaining atlas_id as an atlas filter with a concrete example and default behavior, and network_source as selecting from named classifications with its own default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: searches real regions loaded in NeuroGraph. The scope is unambiguous and distinct from siblings like search_tract and rendering/connectivity tools, and the description clarifies what each returned region contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for the operation (searching loaded regions and their network metadata) and explains the effect of omitting atlas_id. However, it never states when to prefer this tool over an alternative or when not to use it, so the agent must infer selection from the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tractA
Busca tractos reales por nombre/abreviatura (subcadena) y/o por una región que deban tocar. Cada tracto devuelto lleva TODAS las regiones reales que toca (no solo region_id, si se dio uno) y su cita real. Un tracto sin ninguna conexión real registrada no aparece: no hay nada verificado que reportar sobre él.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| region_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that results include ALL touched regions, include the real citation, and exclude tracts with no verified connections. This is meaningful behavioral context beyond the raw schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The search criteria are front-loaded, followed by output behavior and exclusion semantics. Every sentence adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential semantics for a search tool: criteria, result contents, and exclusion behavior. The main gap is the ambiguous 'y/o' combination of name and region_id, and there is no mention of pagination or error behavior, though an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters itself. It does: 'name' is a substring match on name/abbreviation, and 'region_id' specifies a region the tract must touch. It also clarifies how region_id affects the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Busca tractos reales') and the search criteria (name/abbreviation substring and/or region). It clearly identifies the resource and what the tool does, though it does not explicitly contrast itself with sibling tools like search_region.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when searching for real tracts by name, abbreviation, or region. However, it offers no explicit guidance about when not to use it or how it compares to alternatives such as search_region or find_path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
calculate_laplacian - First observed
calculate_spectrum - First observed
compare_species - First observed
compare_species_images - First observed
find_homologues - First observed
find_path - First observed
get_connectivity - First observed
propose_dataset_ingestion - First observed
render_brain - First observed
render_network - First observed
search_region - First observed
search_tract
TDQS
Scored across 12 tools
Most tools have clearly distinct purposes, but a few close pairs exist: render_brain vs render_network both visualize atlas connectivity, and calculate_laplacian vs calculate_spectrum both operate on graph spectra. The descriptions clarify the different output modalities well enough to avoid serious misselection.
All tool names follow a consistent verb_noun snake_case pattern: search_region, get_connectivity, render_network, find_homologues, propose_dataset_ingestion. There are no mixed conventions or vague generic verbs.
Twelve tools is well within the ideal range and each tool covers a distinct aspect of the domain: exploration, connectivity, spectral analysis, visualization, species comparison, and dataset ingestion. The count feels appropriately scoped for a specialized neuroimaging server.
The toolset covers the core workflows well: searching regions and tracts, computing connectivity and paths, spectral analysis, rendering visualizations, comparing species, and proposing dataset ingestion. Minor gaps exist, such as no direct list_atlases or list_species tool, but these can be worked around via search_region and find_homologues.
Maintenance
Related MCP Connectors
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Multiple MCP tools, persistent graph memory, token-saving data pointers, and more.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Related MCP Servers
- AlicenseCqualityDmaintenanceExposes a bio-hybrid neuromorphic simulation pipeline (SNN, consciousness proxies, wetware integration) as MCP tools, resources, and prompts for AI assistants.50MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI tools to access and contribute to shared semantic memory, supporting search, capture, and curation of knowledge across multiple brains via the MCP protocol.-
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to access virome datasets and external bioinformatics APIs through MCP tools, including Wikipedia, PubMed, NCBI Taxonomy, read-only SQL over S3 Parquet, pandas/Plotly analyses, and map visualizations, while keeping the client decoupled from data and business logic.-
- AlicenseNot gradedqualityBmaintenanceExposes a shared graph-based context engine as MCP tools for Claude, Copilot, and other AI agents, enabling knowledge ingestion, recall, search, and LLM-ready context assembly across sessions.1Apache 2.0