mcprepo.ai

Publicado el

- 13 min read

Comprender el lenguaje de consultas MCP: una guía técnica en profundidad

Imagen de Comprender el lenguaje de consultas MCP: una guía técnica en profundidad

Comprender el Lenguaje de Consultas MCP: Guía técnica profunda

Los repositorios MCP solo son tan potentes como las preguntas que puedas hacerles. El Lenguaje de Consultas MCP es la forma de formular preguntas precisas y estructuradas en lugar de deseos vagos.


1. ¿Por qué un lenguaje de consultas para MCP?

Los prompts tradicionales mezclan instrucciones, solicitudes de datos y restricciones en un mismo bloque de texto. Eso funciona hasta que:

  • Necesitas un comportamiento reproducible y auditable.
  • Quieres orquestar múltiples herramientas a través de repositorios MCP.
  • Te importa el rendimiento y el coste previsibles.
  • Necesitas integrar capacidades de IA en sistemas de producción en lugar de chats ad hoc.

El Lenguaje de Consultas MCP (MQL, por abreviar en este artículo) se sitúa entre el lenguaje natural y las APIs de bajo nivel. Te permite:

  • Dirigirte a herramientas y repositorios MCP específicos.
  • Describir entradas, filtros, joins y proyecciones de forma precisa.
  • Controlar cuánto contexto puede recuperar el modelo.
  • Codificar restricciones que pueden validarse antes de la ejecución.

Piénsalo como SQL para tu entorno MCP, pero adaptado a herramientas, modelos y contenido semiestructurado en lugar de solo tablas.


2. Objetivos de diseño principales del Lenguaje de Consultas MCP

Aunque las implementaciones exactas pueden variar entre repositorios MCP, el diseño subyacente del Lenguaje de Consultas MCP suele seguir algunos objetivos concretos:

  1. Determinismo frente a sensaciones
    Misma consulta, mismo entorno, mismo conjunto de resultados. El lenguaje natural está permitido, pero se encierra en un envoltorio más rígido.

  2. Enfocado en herramientas, no en modelos
    En lugar de “modelo, decide qué hacer”, expresas qué herramientas (y servidores MCP) llamar y cómo encadenar sus entradas y salidas.

  3. Operaciones composables
    Las consultas pueden encadenar varios pasos: search → filter → transform → summarize. El lenguaje ofrece una gramática de composición para esto.

  4. Validación estática
    Las consultas pueden comprobarse frente a los esquemas de las herramientas MCP (tipos, campos requeridos, enums) antes de su ejecución para detectar errores pronto.

  5. Transparencia de ejecución
    La estructura de una consulta hace también las veces de plan de ejecución. Puedes registrarla, comparar versiones y enviarla en configuraciones versionadas.


3. El objeto de consulta MCP: forma general

Conceptualmente, una consulta MCP es un objeto estructurado (JSON, YAML o un AST equivalente). Un esquema conceptual mínimo se ve así:

{
	"version": "1.0",
	"targets": [
		{
			"server": "docs-index",
			"tool": "search",
			"params": {
				"query": "vector databases",
				"limit": 10
			},
			"alias": "doc_results"
		}
	],
	"pipeline": [
		{
			"op": "filter",
			"input": "doc_results",
			"where": {
				"field": "score",
				"op": ">=",
				"value": 0.75
			},
			"alias": "high_conf_docs"
		}
	],
	"output": {
		"format": "json",
		"source": "high_conf_docs"
	}
}

No todos los entornos MCP usan exactamente esta forma, pero la mayoría compartirá varios elementos:

  • version – versión del lenguaje; clave para compatibilidad.
  • targets – qué servidor MCP + herramienta invocar y con qué parámetros.
  • pipeline – pasos de post‑procesado, a menudo independientes de la herramienta específica.
  • output – qué devolver, en qué formato y a veces con qué nivel de detalle.

El Lenguaje de Consultas MCP es consciente de las herramientas: no se limita a disparar peticiones HTTP. Conoce el esquema de la herramienta y puede mantenerte dentro de parámetros válidos.


4. Direccionando repositorios y herramientas MCP

Una de las tareas centrales de MQL es especificar qué recurso MCP quieres.

4.1 Dirección de repositorio y servidor

Patrones comunes para direccionar un servidor MCP:

  • Por nombre lógico:
    server: "search-index"

  • Por identificador tipo URI:
    server: "mcp://infra/docs"

  • Por nombre de entorno con scope (p. ej., dev/prod):
    server: "prod:search-index"

Dentro del lenguaje de consulta, esto es normalmente una cadena simple, pero las herramientas que lo rodean suelen añadir:

  • resolución de namespaces (p. ej., por defecto al proyecto actual)
  • comprobaciones de políticas (¿está permitido este servidor en este entorno?)
  • comportamiento de fallback (preferir instancia MCP local y luego remota)

4.2 Selección y descubrimiento de herramientas

Cada servidor MCP expone un conjunto de herramientas y esquemas correspondientes. MQL opera contra ese registro. Atributos típicos:

  • tool: nombre lógico de operación, como search, get_file, execute_query.
  • params: un objeto que coincide con el esquema de entrada de la herramienta.

Los desarrolladores suelen confiar en una caché de esquemas MCP o un mecanismo de descubrimiento para que el editor pueda:

  • ofrecer autocompletado para herramientas y parámetros;
  • validar tipos de parámetros y campos requeridos;
  • mostrar documentación en línea.

Ejemplo:

{
	"targets": [
		{
			"server": "code-repo",
			"tool": "get_file",
			"params": {
				"path": "src/core/mcp_client.ts"
			},
			"alias": "core_client_file"
		}
	]
}

Los alias (alias) permiten que pasos posteriores hagan referencia explícita a resultados previos, soportando flujos de trabajo multietapa.


5. Parámetros, tipos y restricciones

El Lenguaje de Consultas MCP se define frente a esquemas fuertemente tipados para cada herramienta. Ahí es donde difiere de los prompts libres.

5.1 Objetos de parámetros

Cada objeto params se comprueba por tipos frente al esquema de su herramienta. Por ejemplo:

{
	"tool": "search",
	"params": {
		"query": "indexing strategies",
		"limit": 20,
		"filters": {
			"tag": ["mcp", "architecture"],
			"lang": "en"
		}
	}
}

Características de esquema comúnmente soportadas:

  • Tipos escalares: string, number, boolean.
  • Tipos estructurados: object, array.
  • Enums: valores restringidos de cadena, p. ej. "mode": "semantic" | "keyword".
  • Opcional vs requerido: definido por el contrato de la herramienta MCP.
  • Valores por defecto: asumidos si se omiten.

5.2 Lenguaje natural embebido en la estructura

MQL no elimina el lenguaje natural; lo restringe a dónde puede vivir.

En el ejemplo anterior, query es intencionalmente texto humano abierto, pero todo lo demás es rígido:

{
	"query": "How does the indexer handle deletion of stale documents?",
	"limit": 5,
	"mode": "semantic"
}

El modelo puede razonar sobre query, pero el resto es estático y verificable por máquina.


6. Filtros, proyecciones y ordenaciones

Más allá de los parámetros crudos de las herramientas, MQL suele añadir operadores de estilo relacional. Piénsalos como un pequeño álgebra de consultas sobre los outputs de las herramientas.

6.1 Expresiones de filtro

Las cláusulas de filtro (where, filter, etc.) usan un vocabulario lógico mínimo:

  • Comparación: =, !=, <, <=, >, >=
  • Cadenas: contains, starts_with, ends_with, matches (regex)
  • Conjuntos: in, not_in
  • Booleano: and, or, not

Ejemplo:

{
	"op": "filter",
	"input": "doc_results",
	"where": {
		"and": [
			{ "field": "score", "op": ">=", "value": 0.8 },
			{ "field": "metadata.lang", "op": "=", "value": "en" }
		]
	},
	"alias": "filtered_docs"
}

Los campos anidados como "metadata.lang" dependen de un resolutor de rutas con notación de puntos, similar a JSONPath pero menos complejo.

6.2 Proyecciones

Las proyecciones definen la forma que quieres de los outputs:

  • Conservar solo ciertos campos.
  • Renombrar campos para mayor claridad.
  • Insertar constantes.
{
	"op": "project",
	"input": "filtered_docs",
	"select": [{ "field": "id", "as": "doc_id" }, { "field": "title" }, { "field": "score" }],
	"alias": "compact_docs"
}

Esto mantiene la respuesta pequeña y más predecible, crítico para controlar el uso de tokens cuando los resultados alimentan luego un modelo LLM.

6.3 Ordenación y límite

La mayoría de runtimes de consultas MCP entienden cláusulas simples de ordenación y límite como operaciones de primera clase:

{
	"op": "sort",
	"input": "compact_docs",
	"by": [{ "field": "score", "direction": "desc" }],
	"alias": "ranked_docs"
}

Junto con limit en un paso anterior o posterior, esto refleja el ORDER BY y LIMIT de SQL.


7. Pipelines y ejecución multi‑paso

Una fortaleza central del Lenguaje de Consultas MCP es poder orquestar múltiples herramientas en una única pipeline declarativa.

7.1 Pipeline multietapa sobre un único target

Ejemplo: buscar en docs, luego resumir los 3 mejores resultados mediante un sumario de otra herramienta MCP.

{
	"version": "1.0",
	"targets": [
		{
			"server": "docs-search",
			"tool": "search",
			"params": { "query": "MCP query language basics", "limit": 10 },
			"alias": "raw_results"
		}
	],
	"pipeline": [
		{
			"op": "filter",
			"input": "raw_results",
			"where": { "field": "score", "op": ">=", "value": 0.7 },
			"alias": "high_conf"
		},
		{
			"op": "limit",
			"input": "high_conf",
			"count": 3,
			"alias": "top_docs"
		},
		{
			"op": "tool_call",
			"server": "text-utils",
			"tool": "summarize",
			"params_from": {
				"input": "top_docs",
				"mapping": {
					"texts": "content"
				}
			},
			"alias": "summary"
		}
	],
	"output": {
		"format": "json",
		"source": "summary"
	}
}

Observaciones:

  • params_from es un patrón típico: mapear la salida de la pipeline a la entrada de otra herramienta.
  • El motor de ejecución puede paralelizar donde sea seguro, pero respeta las dependencias declaradas (vía input / alias).

7.2 Composiciones entre múltiples servidores

Las consultas suelen cruzar múltiples repositorios MCP: código, docs, métricas, tickets. MQL hace esto explícito:

{
	"targets": [
		{
			"server": "ticketing",
			"tool": "search_tickets",
			"params": { "query": "MCP query language", "status": "open" },
			"alias": "open_tickets"
		},
		{
			"server": "docs-search",
			"tool": "search",
			"params": { "query": "MCP query language", "limit": 5 },
			"alias": "docs"
		}
	],
	"pipeline": [
		{
			"op": "join",
			"left": "open_tickets",
			"right": "docs",
			"on": {
				"left_field": "topic",
				"right_field": "tags"
			},
			"alias": "ticket_doc_pairs"
		}
	],
	"output": {
		"format": "json",
		"source": "ticket_doc_pairs"
	}
}

Esta historia de cross‑repository es donde los repositorios MCP realmente brillan: el lenguaje de consultas se convierte en una única vista sobre sistemas que de otro modo están fragmentados.


8. Control de contexto y coste

Los entornos impulsados por modelos LLM necesitan restricciones sobre el tamaño del contexto y el comportamiento. El Lenguaje de Consultas MCP incorpora varios mecanismos para eso.

8.1 Moldeado de resultados para control de tokens

Antes de que los datos lleguen a un modelo, MQL puede:

  • limitar el número de resultados;
  • eliminar campos no usados;
  • preagregar o resumir.

Esto es vital para mantenerse dentro de las ventanas de contexto y mantener los tiempos de respuesta previsibles.

8.2 Pistas de ejecución

Algunas implementaciones soportan hints opcionales:

{
	"hints": {
		"max_tokens": 4096,
		"timeout_ms": 8000,
		"priority": "low"
	}
}

Estos hints no cambian el significado lógico, pero permiten al runtime ajustar la planificación, resultados parciales o estrategias de truncado.

8.3 Streaming y salidas parciales

Los bloques de output pueden especificar opciones de streaming:

{
	"output": {
		"format": "json",
		"source": "summary",
		"stream": true,
		"chunk_size": 1024
	}
}

El cliente MCP puede entonces enlazar esto con streaming en UI, WebSockets o una barra de progreso en CLI.


9. Control de acceso y hooks de política

Cualquier despliegue serio necesitará que el Lenguaje de Consultas MCP encaje con las políticas de seguridad.

9.1 Campos conscientes de políticas

Algunas implementaciones de MQL extienden las consultas con campos como:

{
	"auth": {
		"user_id": "alice",
		"roles": ["dev", "reader"]
	}
}

El runtime de la consulta pasa esto a los servidores MCP, que pueden aplicar:

  • filtros a nivel de fila por usuario o rol,
  • enmascaramiento de campos sensibles,
  • registro y auditoría ligados a la identidad del usuario.

9.2 Comprobaciones de política estáticas

Las políticas a menudo definen guardrails como:

  • qué servidores MCP están permitidos,
  • qué herramientas están prohibidas (p. ej., exec_shell),
  • límites máximos en limit, timeout_ms o max_tokens.

Esto significa que una consulta puede ser rechazada antes de llegar a cualquier repositorio MCP subyacente, reduciendo riesgos y efectos secundarios inesperados.


10. Lenguaje natural, system prompts y plantillas

El Lenguaje de Consultas MCP no está diseñado para competir con el lenguaje natural; le aporta estructura.

10.1 Dónde vive el lenguaje natural

Lugares comunes:

  • params.query para herramientas tipo búsqueda.
  • params.instructions al invocar una herramienta genérica de completado LLM.
  • templates para salida estructurada, p. ej., “Return a JSON list of…”

Ejemplo:

{
	"targets": [
		{
			"server": "llm-server",
			"tool": "structured_completion",
			"params": {
				"instructions": "Given the list of documents, extract the three main design decisions about the MCP query language.",
				"schema": {
					"type": "object",
					"properties": {
						"decisions": {
							"type": "array",
							"items": { "type": "string" }
						}
					},
					"required": ["decisions"]
				}
			},
			"alias": "decision_summary"
		}
	]
}

La estructura es fija; solo el campo instructions es lenguaje natural.

10.2 Plantillas reutilizables

Muchos equipos factoran consultas MQL en plantillas con placeholders:

{
	"version": "1.0",
	"targets": [
		{
			"server": "docs-search",
			"tool": "search",
			"params": {
				"query": "{{user_query}}",
				"limit": "{{limit|10}}"
			},
			"alias": "raw_results"
		}
	]
}

{{user_query}} se rellena desde la aplicación, mientras que {{limit|10}} muestra un valor por defecto. Así es como los frontends pueden exponer de forma segura consultas “power user” sin abrir la puerta a llamadas arbitrarias a herramientas.


Image

Photo by Umberto on Unsplash


11. Manejo de errores y diagnóstico

Los bordes afilados del lenguaje son útiles solo si vienen con diagnósticos igualmente precisos.

11.1 Errores de validación

Antes de la ejecución, MQL suele validarse frente a:

  • esquema base (¿la consulta está sintácticamente bien formada?);
  • esquemas de herramientas (¿son válidos los params?);
  • políticas (¿está permitida la consulta?).

Las formas de error suelen verse así:

{
	"error": "validation_error",
	"details": [
		{
			"path": "targets[0].params.limit",
			"message": "Value must be <= 100"
		}
	]
}

Como todo está estructurado, los IDEs y CLIs pueden resaltar con precisión el campo problemático.

11.2 Errores en tiempo de ejecución

Una vez en marcha, la consulta puede fallar por muchas razones: problemas de red, timeouts, errores de herramientas. Los buenos runtimes MCP añaden contexto:

{
	"error": "tool_error",
	"tool": "docs-search.search",
	"message": "Index not reachable",
	"code": "UNAVAILABLE",
	"retryable": true
}

Como MQL es composicional, algunos motores soportan éxito parcial; por ejemplo, un target puede fallar mientras otro tiene éxito, ajustando las etapas del pipeline en consecuencia.


12. Patrones prácticos para usar el Lenguaje de Consultas MCP

Los desarrolladores que adoptan repositorios MCP convergen rápidamente en algunos patrones prácticos de uso.

12.1 Patrón: Buscar + Ground + Responder

Un flujo de trabajo común de recuperación aumentada:

  1. Buscar en docs.
  2. Filtrar y rankear.
  3. Pasar a un LLM para responder una pregunta usando solo esos docs.
{
	"version": "1.0",
	"targets": [
		{
			"server": "docs-search",
			"tool": "search",
			"params": {
				"query": "{{user_question}}",
				"limit": 20,
				"mode": "semantic"
			},
			"alias": "docs_raw"
		}
	],
	"pipeline": [
		{
			"op": "filter",
			"input": "docs_raw",
			"where": { "field": "score", "op": ">=", "value": 0.65 },
			"alias": "docs_filtered"
		},
		{
			"op": "limit",
			"input": "docs_filtered",
			"count": 6,
			"alias": "docs_top"
		},
		{
			"op": "tool_call",
			"server": "llm-server",
			"tool": "answer_with_context",
			"params_from": {
				"input": "docs_top",
				"mapping": {
					"context": "content"
				}
			},
			"extra_params": {
				"question": "{{user_question}}",
				"style": "concise",
				"include_sources": true
			},
			"alias": "final_answer"
		}
	],
	"output": {
		"format": "json",
		"source": "final_answer"
	}
}

Las piezas son reutilizables, testeables y versionables.

12.2 Patrón: Refactorización consciente del repositorio

Con repositorios MCP orientados al código, MQL puede orquestar:

  • listar archivos;
  • leer y analizar código;
  • proponer refactors;
  • generar parches.

No confías ciegamente en el modelo; diseñas el flujo de datos.


13. Herramientas alrededor del Lenguaje de Consultas MCP

El lenguaje por sí solo es solo sintaxis. El ecosistema alrededor es donde se vuelve práctico.

13.1 Editores y linters

Es de esperar:

  • esquemas JSON/YAML para MQL, habilitando autocompletado en IDE;
  • linters estilo ESLint o personalizados para:
    • pasos inalcanzables;
    • alias no usados;
    • herramientas riesgosas en entornos sensibles.

13.2 Arneses de pruebas y fixtures

MQL es naturalmente adecuado para pruebas:

  • Puedes almacenar consultas en control de versiones.
  • Adjuntar fixtures que simulen respuestas de las herramientas MCP.
  • Hacer aserciones sobre la forma y contenido del output final.

Esto acerca la lógica habilitada por IA a las pruebas unitarias e de integración tradicionales en lugar de la “magia del prompt”.

13.3 Observabilidad

Dado que cada consulta está estructurada:

  • Los logs pueden registrar el objeto de consulta exacto.
  • Las trazas pueden anotar cada target y etapa de pipeline con latencia y estado.
  • Los dashboards pueden mostrar las herramientas más usadas, filtros más comunes y distribución de costes.

Este bucle de observabilidad retroalimenta la afinación de consultas para fiabilidad y eficiencia.


14. En qué difiere el Lenguaje de Consultas MCP de SQL y GraphQL

Es tentador ver MQL como “otro lenguaje de consultas más”. No es intercambiable con SQL o GraphQL, aunque toma ideas de ambos.

  • SQL asume un esquema relacional fijo y almacenamiento de datos; MQL se dirige a herramientas, algunas de las cuales ni siquiera almacenan datos de forma permanente.
  • GraphQL se centra en tipado y forma para datos jerárquicos; MQL se centra en flujos de trabajo que pueden cruzar múltiples repositorios MCP y orquestar LLMs.
  • MQL presta mucha atención a:
    • esquemas de herramientas y efectos secundarios;
    • composición de pipelines;
    • gestión del contexto para modelos.

En la práctica, aún podrías consultar una base de datos relacional detrás de MCP con SQL, pero MQL sería la capa exterior que decide cuándo y por qué hacerlo, y cómo unir el resultado en una acción más amplia impulsada por IA.


15. Primeros pasos: un modelo mental mínimo

Para hacer concreto el Lenguaje de Consultas MCP en el trabajo diario, ten en cuenta el siguiente atajo mental:

  • Targets = qué herramientas MCP llamar.
  • Params = qué entradas estructuradas reciben.
  • Pipeline = cómo transformas y encadenas resultados.
  • Output = qué forma quieres de vuelta y cómo se entrega.

Una vez que veas las consultas como pequeños programas explícitos sobre repositorios MCP, el camino hacia sistemas robustos habilitados por IA se parece menos a la magia de los prompts y más a la ingeniería normal.

Model Context Protocol (MCP) Explained - by Nir Diamant - DiamantAI MCP 101: Understanding the Model Context Protocol - Itential Understanding Model Context Protocol (MCP) : A Full Deep Dive + … What is Model Context Protocol (MCP)? A guide | Google Cloud Model Context Protocol (MCP): A comprehensive introduction for …