Solo lectura
readConsultar explotaciones, animales, leche, derivados, documentos, economía, sanidad, reproducción, pesadas, pienso, parcelas, calendario, ayudas, notificaciones y auditoría.
describe_access, list_* y get_farm_snapshot
Conecta un agente a los datos operativos de una explotación de forma autenticada, acotada y auditable. Esta página es pública, no contiene secretos y está escrita para que una persona o un agente pueda empezar sin contexto adicional.
endpoint
https://app.gandeo.com/api/mcp
authorization
Bearer gandeo_mcp_…
first call
describe_access()
sessionId y envía JSON-RPC por POST a esa sesión.01 / conexión
El propietario o administrador crea una clave en Configuración > Developer Settings. Empieza con Solo lectura.
Guarda el token gandeo_mcp_* en el gestor de secretos del agente. Gandeo no vuelve a mostrarlo. Developer Settings también te ofrece un prompt listo para copiar y pegar en la IA.
Configura el servidor MCP con https://app.gandeo.com/api/mcp y el header Authorization: Bearer <TOKEN>.
Usa el transporte SSE: abre un GET autenticado, lee el evento endpoint y envía los mensajes JSON-RPC por POST a la URL que incluya sessionId.
{
"mcpServers": {
"gandeo": {
"url": "https://app.gandeo.com/api/mcp",
"headers": {
"Authorization": "Bearer <TOKEN>"
}
}
}
}BASE_URL="https://app.gandeo.com/api/mcp"
TOKEN="gandeo_mcp_..."
# Mantén esta conexión abierta. La respuesta SSE incluye:
# event: endpoint
# data: /api/mcp?sessionId=<SESSION_ID>
curl -N \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL"Inicialización JSON-RPC
Después de recibir el endpoint con sessionId, envía el mensaje initialize por POST. El POST devuelve 202 y la respuesta llega por el stream.
curl -i -X POST "$BASE_URL?sessionId=<SESSION_ID>" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {"name": "mi-agente", "version": "1.0.0"}
}
}'02 / control de acceso
readConsultar explotaciones, animales, leche, derivados, documentos, economía, sanidad, reproducción, pesadas, pienso, parcelas, calendario, ayudas, notificaciones y auditoría.
describe_access, list_* y get_farm_snapshot
writeTodo lo anterior, además de guardar borradores de producción/analíticas de leche, subir originales y marcar notificaciones propias como leídas. Los datos definitivos se confirman en la web de Gandeo.
read + record_milk_production, record_milk_sample, upload_document, update_record (notifications.read_at)
adminLas mismas operaciones seguras que write. No habilita borrados físicos ni confirmación de datos de negocio desde una IA.
write; delete_record bloqueado
03 / contrato
Llama primero a describe_access. El esquema que expone el servidor y esa respuesta son la fuente de verdad si esta página y el servidor divergen.
describe_accessreadSin argumentos. Devuelve el nivel efectivo del token, la explotación permitida y las tablas disponibles. Llámala primero.
list_farmsreadSin argumentos. Devuelve la explotación asociada al token.
list_animalsreadfarm_id, limit opcional. Lista animales activos con sus datos principales.
list_medicationsreadfarm_id. Lista el catálogo de medicamentos de la explotación.
list_recordsreadfarm_id, table, limit opcional. Consulta una tabla permitida. La tabla y los campos válidos se descubren con describe_access y los esquemas MCP.
get_farm_snapshotreadfarm_id, limit_per_table opcional. Devuelve una fotografía resumida de los módulos principales. Úsala para una visión general.
create_recordwritefarm_id, table, data. Bloqueada. Usa un borrador admitido o el formulario web de su módulo para revisar y confirmar.
update_recordwritefarm_id, table, id, data. Solo admite marcar una notificación propia como leída (table=notifications, data={read_at:...}). Las demás actualizaciones requieren confirmación web.
record_milk_productionwritefarm_id, scope, liters, record_date, shift y referencias opcionales. Registra un control de tanque o animal con validación de lactación; queda como borrador.
record_milk_deliverywritefarm_id, collected_at, liters, tank_ids y metadatos opcionales. Bloqueada: revisa y confirma la recogida en el formulario web de Gandeo.
manage_dairy_lactationwritefarm_id, operation y los campos de apertura/transición. Bloqueada: las aperturas y transiciones de lactación se revisan y confirman en la web de Gandeo.
record_udder_healthwritefarm_id, animal_id, occurred_at, observaciones y referencias opcionales. Bloqueada: revisa y confirma la observación y su separación de leche en la web de Gandeo.
record_milk_samplewritefarm_id, context, sampled_at y resultados analíticos opcionales. Guarda una analítica con su origen como borrador revisable.
create_dairy_tankwritefarm_id, name, capacity_liters y configuración opcional. Bloqueada: crea y confirma el tanque desde su formulario web en Gandeo.
delete_recordadminfarm_id, table, id. Bloqueada para todas las tablas. Usa la papelera o el formulario del módulo en la web; MCP no elimina físicamente registros.
create_medicationwritefarm_id, name y campos sanitarios opcionales. Bloqueada: añade y confirma medicamentos en el formulario web del catálogo sanitario.
lookup_cadastrereadprovince, municipality, cadastral_reference opcional, polygon opcional, parcel opcional. Consulta datos oficiales de parcelas rústicas en el Catastro (superficie, paraje, referencia y coordenadas GPS).
create_pasturewritefarm_id, name y campos catastrales/operativos opcionales. Bloqueada: revisa y confirma los datos de la parcela en su formulario web de Gandeo.
upload_documentwritefarm_id, file_name, mime_type, content_base64 y metadatos opcionales. Conserva el archivo original en la explotación y crea su registro documental.
El agente solo puede usar las tablas y campos que el servidor incluye en sus listas blancas. No intentes conectarte directamente a Supabase.
04 / comportamiento
Llama a describe_access y conserva el farm_id devuelto. No pidas otra explotación.
Para preguntas generales usa get_farm_snapshot. Para detalle, list_records o la herramienta específica.
Cita la tabla, el registro y la fecha cuando estén disponibles. Si faltan datos, dilo claramente.
Las herramientas de borrador no confirman datos. Para operaciones definitivas, dirige a su formulario web de Gandeo; una confirmación en el chat no desbloquea MCP.
Después de una mutación, vuelve a consultar el registro y comunica cualquier error sin ocultarlo.
05 / guardrails
No hay SQL libre. No intentes acceder a Supabase, tablas no listadas ni rutas internas.
Cada token está ligado a una sola explotación mediante api_keys.farm_id. No se puede cambiar ese alcance enviando otro farm_id; para otra explotación hay que crear otra clave.
El rol del miembro puede reducir el permiso guardado en la clave: viewer no tiene MCP, member queda limitado a lectura y owner/admin puede usar el nivel concedido.
Las escrituras permitidas se limitan a borradores lecheros, originales documentales y lectura de notificaciones propias, con auditoría mcp.*. create_record y delete_record están bloqueados.
MCP solo guarda producción y analíticas lecheras como borrador; recogidas, lactaciones, ubre, tanques, medicamentos y parcelas requieren confirmación desde su formulario web de Gandeo. Ni write ni admin permiten saltarse esta condición.
No inventes animales, importes, tratamientos, fechas ni documentos. Si una extracción es incierta, presenta una propuesta y pide revisión.
No incluy nunca tokens gandeo_mcp_* en respuestas, logs, repositorios, prompts persistentes o documentación.
Usa Solo lectura por defecto. Eleva permisos solo cuando el caso de uso lo necesite y el usuario lo haya autorizado.
06 / diagnóstico
401 Unauthorized
Comprueba Authorization: Bearer <TOKEN>, que la clave sigue vigente, la explotación está activa, el usuario conserva rol habilitado y su acceso comercial incluye mcp_api.
400 Missing sessionId
Primero abre el GET SSE y utiliza exactamente la ruta recibida en el evento endpoint.
404 Session not found
La conexión SSE se cerró o la petición POST llegó a otra instancia. Abre una sesión nueva y mantén vivo el GET.
Error de permisos
Llama a describe_access. El farm_id debe coincidir con el permitido y la operación debe estar cubierta por read, write o admin.
Siguiente paso
La clave queda ligada a una sola explotación. Empieza con Solo lectura y revócala desde Developer Settings cuando ya no la necesites.