Paginación y límites
Los agentes pueden ser sorprendentemente entusiastas con las consultas amplias. Su servidor debería ser menos entusiasta.
Utilice:
- ordenación determinista, por ejemplo
filed_at desc, filing_id desc
- paginación basada en cursor siempre que sea posible
- límites sensatos de tamaño de página
has_more y next_cursor explícitos
Esto no es meramente una cuestión de higiene operativa. También evita que el agente resuma un conjunto de resultados parcial como si fuera completo.
Ejemplos de llamadas a herramientas MCP para Claude, Cursor y Windsurf
El cliente de protocolo difiere según el entorno, pero el flujo conceptual es similar. El agente descubre herramientas, resuelve entidades, llama a una herramienta de recuperación y luego, opcionalmente, llama a una herramienta de agregación.
A continuación, se presentan ejemplos en un estilo JSON-RPC genérico. El "wrapper" exacto variará según la implementación del cliente.
Ejemplo 1, resolver un emisor a partir de una indicación vaga
Indicación del usuario:
Encuentra las últimas compras de información privilegiada para LVMH.
Primero, el agente debe resolver el emisor.
Llamada a la herramienta
{
"tool": "resolve_issuer",
"arguments": {
"query": "LVMH",
"market": "FR",
"limit": 5
}
}
Respuesta de la herramienta
{
"query": "LVMH",
"matches": [
{
"issuer_id": "fr_issuer_12345",
"name": "LVMH Moet Hennessy Louis Vuitton SE",
"ticker": "MC",
"isin": "FR0000121014",
"lei": "969500S6OI5FOBDZ2J08",
"market": "FR",
"confidence": 0.98
}
],
"schema_version": "2026-01"
}
Luego, recuperar las adquisiciones recientes.
Llamada a la herramienta
{
"tool": "get_filings",
"arguments": {
"filters": {
"market": "FR",
"issuer_id": "fr_issuer_12345",
"transaction_type": ["ACQUISITION"],
"filing_date_from": "2026-01-01",
"limit_to_primary_disclosures": true
},
"sort": [
{"field": "filed_at", "direction": "desc"}
],
"page_size": 20
}
}
Respuesta de la herramienta
{
"rows": [
{
"filing_id": "fr_filing_998877",
"transaction_id": "fr_tx_112233",
"issuer_id": "fr_issuer_12345",
"issuer_name": "LVMH Moet Hennessy Louis Vuitton SE",
"insider_id": "fr_insider_456",
"insider_name": "n/a",
"role_normalized": "DIRECTOR",
"transaction_date": "2026-02-14",
"filed_at": "2026-02-17T08:12:00Z",
"transaction_type": "ACQUISITION",
"security_type": "EQUITY",
"quantity": 1000,
"price": 712.5,
"currency": "EUR",
"gross_value": 712500,
"ownership_nature": "DIRECT",
"source_url": "https://..."
}
],
"page_info": {
"has_more": false,
"next_cursor": null
}
}
El agente ahora puede responder con evidencia, fechas y enlaces a las fuentes.
Ejemplo 2, búsqueda de compras agrupadas
Solicitud del usuario:
Muéstrame emisores franceses con compras agrupadas en los últimos 90 días.
Esto no debería obligar al agente a reinventar la definición en prosa. Hay que darle una herramienta.
Llamada a la herramienta
{
"tool": "screen_cluster_buying",
"arguments": {
"filters": {
"market": "FR",
"transaction_date_from": "2026-02-16",
"transaction_date_to": "2026-05-17",
"transaction_type": ["ACQUISITION"],
"security_type": ["EQUITY"]
},
"min_insiders": 3,
"window_days": 30,
"min_total_value": null
}
}
Respuesta de la herramienta
{
"definition": {
"transaction_type": "ACQUISITION",
"security_type": "EQUITY",
"min_distinct_insiders": 3,
"window_days": 30
},
"results": [
{
"issuer_id": "fr_issuer_222",
"issuer_name": "Example SA",
"window_start": "2026-03-10",
"window_end": "2026-04-08",
"distinct_insiders": 4,
"transaction_count": 5,
"total_gross_value": 1850000,
"currency": "EUR"
}
],
"as_of": "2026-05-17T00:00:00Z"
}
Esa respuesta es legible por máquina y auto-documentada. Lo cual es más de lo que se puede decir de muchas presentaciones para inversores.
Ejemplo 3, solicitar un resumen en lugar de filas
Solicitud del usuario:
Resume la venta de directores en Francia este trimestre por sector.
Llamada a la herramienta
{
"tool": "summarize_activity",
"arguments": {
"filters": {
"market": "FR",
"transaction_type": ["DISPOSAL"],
"insider_role": ["DIRECTOR"],
"transaction_date_from": "2026-04-01",
"transaction_date_to": "2026-06-30"
},
"group_by": ["sector"],
"metrics": ["filing_count", "transaction_count", "distinct_issuers", "gross_value_sum"]
}
}
Respuesta de la herramienta
{
"rows": [
{
"sector": "Consumer Discretionary",
"filing_count": 12,
"transaction_count": 15,
"distinct_issuers": 7,
"gross_value_sum": 9400000,
"currency": "EUR"
},
{
"sector": "Financials",
"filing_count": 9,
"transaction_count": 11,
"distinct_issuers": 5,
"gross_value_sum": 6100000,
"currency": "EUR"
}
],
"methodology": {
"group_by": ["sector"],
"metrics": ["filing_count", "transaction_count", "distinct_issuers", "gross_value_sum"],
"normalization_notes": "Sector classification based on issuer master as of query date"
}
}
De nuevo, el objetivo no es solo responder a la pregunta. Es responderla de una manera que pueda resistir un seguimiento.
Contexto regulatorio que el esquema debe respetar
Si su servidor MCP cubre más de un mercado, una capa comparativa es útil. No porque todos los usuarios la pidan, sino porque el servidor debe saber en qué mundo está operando.