Fundaia

Entrar Empezar

Servidor MCP

La plataforma habla Model Context Protocol sobre Streamable HTTP y ofrece a un modelo las mismas operaciones que el CLI: crear proyectos, desplegar, cablear servicios, leer registros, mirar métricas. No hay nada que instalar.

POST https://infrastructure.fundaia.com/api/infra/mcp
Authorization: Bearer fdi_…

El token es el mismo que usa el CLI. Se saca de un botón en la pantalla Agentes de la aplicación, que además rellena la configuración con él.

Conectarlo

Claude Code, en una línea:

claude mcp add --transport http --scope user fundaia \
  https://infrastructure.fundaia.com/api/infra/mcp \
  --header "Authorization: Bearer fdi_…"

Claude Desktop, Cursor y VS Code leen el mismo bloque, cada uno en su fichero de configuración MCP:

{
  "mcpServers": {
    "fundaia": {
      "type": "http",
      "url": "https://infrastructure.fundaia.com/api/infra/mcp",
      "headers": { "Authorization": "Bearer fdi_…" }
    }
  }
}

El servidor no guarda sesión: cada llamada es una petición completa, y sobrevive a que la plataforma se reinicie mientras el agente está conectado.

Qué alcanza

Lo mismo que la persona cuyo token lleva, ni un proyecto más: un proyecto de otro espacio responde igual que uno que no existe. Cada escritura queda en el historial del proyecto a nombre de esa persona.

Si la instancia se ha configurado en solo lectura, solo se ofrecen las herramientas que leen.

Las herramientas

La lista exacta, con sus descripciones, la publica el propio servidor: tools/list, o GET /api/infra/mcp/tools con curl. Por áreas:

ÁreaHerramientas
Orientaciónget_status (todo en una llamada: por aquí se empieza), read_attention (lo que está mal, en toda la instancia), search (cualquier cosa por su nombre, en todos los proyectos: guía), list_projects, list_workspaces, read_capacity, list_sign_ins
Orientaciónget_status (todo en una llamada: por aquí se empieza), read_attention (lo que está mal, en toda la instancia), list_projects, list_workspaces, read_capacity, list_sign_ins, read_platform_changelog (qué trajo cada versión de la plataforma, para saber si algo existe ya en esta instancia)
Diagnósticoread_project_health, diagnose_service, audit_variables, search_logs, read_dependencies, export_project, compare_deployments, probe_service, wake_service
Proyectoscreate_project, import_project, import_compose, list_stacks, add_stack, deploy_link, require_second_factor, rename_project, find_project_picture, remove_project_picture, read_project_notes, write_project_notes, move_project, favorite_project, delete_project, list_activity, list_templates
Entornoslist_environments, create_environment, rename_environment, delete_environment, copy_service_to_environment, promote_environment, copy_environment_data, compare_environments, set_environment_expiry, read_preview_environments, set_preview_environments
Servidoreslist_servers, read_server, add_server, update_server, cordon_server, drain_server, remove_server, read_environment_server, move_environment, label_server, require_server_labels, rebalance_servers, read_server_metrics, read_server_bootstrap, test_server_connection
Lienzoget_canvas, move_services, arrange_canvas
Servicioslist_services, get_service, create_service, duplicate_service, rename_service, delete_service, update_service_settings (con autoscale para el autoescalado), list_replicas, expose_service, get_capabilities, list_uploads
Conexioneslist_connectable, connect_services, disconnect_services
Consolarun_command
Tareas programadaslist_scheduled_tasks, create_scheduled_task, update_scheduled_task, delete_scheduled_task, run_scheduled_task
Desplieguesdeploy_service, redeploy_service, rollback_service, cancel_deployment, stop_service, bulk_action, list_deployments, list_recent_deployments (todos los proyectos), get_deployment, read_commit, read_logs, pull_image, list_deploy_hooks, remove_deploy_hook
GitHublist_deployment_approvals, approve_deployment, reject_deployment, read_repository_access, request_repository_access
Variableslist_variables, set_variable, import_variables, unset_variable, seal_variable, list_shared_variables, set_shared_variable, unset_shared_variable
Dominios y accesolist_domains, add_domain, verify_domain, remove_domain, set_maintenance, protect_service, unprotect_service, set_ip_allowlist, set_rate_limit
Volúmenes y copiaslist_volumes, attach_volume, resize_volume, detach_volume, list_files, read_file, list_backups, create_backup, schedule_backups, lock_backup, restore_backup, delete_backup, set_bucket_encryption
Datoslist_tables, query_database, execute_sql
Recetas y configuraciónread_recipe, edit_recipe, read_config, edit_config
Observabilidadread_metrics, read_usage, list_requests, read_incidents, decide_incident, fix_incident, read_autofix
Avisoslist_webhooks, add_webhook, update_webhook, remove_webhook, test_webhook
Analítica webread_web_analytics (guía)
Envío de logslist_log_drains, add_log_drain, update_log_drain, test_log_drain, remove_log_drain (guía)
Monitoreslist_monitors, read_monitor, create_monitor, update_monitor, delete_monitor (guía); kind: "heartbeat" crea uno de cron, cuya URL de ping nunca devuelve: se ve una vez en la web o con fundaia monitors rotate (de cron)
Alertaslist_alerts, create_alert, update_alert, delete_alert (guía)
Costes y ahorroread_cost_forecast, set_project_budget, list_savings, apply_saving, apply_destructive_saving, read_weekly_digest (guía)
Página de estadoread_status_page, set_status_page, list_status_incidents, open_status_incident, update_status_incident, resolve_status_incident, edit_status_incident_update, delete_status_incident_update, delete_status_incident, schedule_status_maintenance, cancel_status_maintenance (guía)
Estado de Fundaiaread_platform_status; del administrador: list_platform_incidents, open_platform_incident, update_platform_incident, resolve_platform_incident, edit_platform_incident_update, delete_platform_incident_update, delete_platform_incident, schedule_platform_maintenance, cancel_platform_maintenance (guía)
Arreglos con Claudefix_deployment, scan_vulnerabilities, read_security_scan, open_issue (guía)
Agenteconfigure_agent, read_consumption, read_agent_activity, read_credit
Workflowslist_workflows, list_workflow_runs, read_workflow_run, read_workflow_job_log, run_workflow, rerun_workflow, cancel_workflow_run, wait_for_workflow_run, read_workflow_stats
Reglas de la pasarelaread_gateway_rules, update_gateway_rules, preview_gateway_rules (guía)
Control de desplieguesget_freeze, freeze_deploys, lift_freeze, protect_environment, list_scheduled_actions, schedule_action, remove_scheduled_action, list_auto_promotions, add_auto_promotion, remove_auto_promotion (congelar, entornos protegidos)
Forolist_forum_threads, read_forum_thread, post_forum_thread, reply_forum_thread, vote_forum_post, accept_forum_answer, moderate_forum_thread (guía)

Todas aceptan proyecto y servicio como se ven en pantalla: id, slug o nombre. Un nombre ambiguo es un error, no una suposición; uno que no existe responde con el más parecido y la lista de los que sí, para corregirlo en la siguiente llamada.

Las que tocan un servicio o leen un proyecto aceptan también environment, el nombre o el slug de un entorno; sin él trabajan en el entorno por defecto. Un entorno que no existe responde igual que un servicio: con el más parecido y los que hay.

Las de diagnóstico devuelven, en cada hallazgo, next: la herramienta que lee más y sus argumentos ya rellenos. Un agente sigue el puntero en lugar de adivinar.

Antes de usarlas

  • Crear un servicio lo despliega. Encadenar create_service con deploy_service lanza un segundo despliegue encima del primero. deploy: false es para el servicio que no puede arrancar hasta que alguien escriba una variable.
  • **deploy_service espera** y devuelve el pipeline terminado y, si falló, las últimas líneas del paso que falló. No hace falta preguntar en bucle.
  • Ninguna herramienta enseña un secreto, y no hay opción para que lo haga. Para que un servicio alcance a otro está connect_services, que escribe una referencia.
  • **Las que destruyen algo piden confirm** con el nombre de lo que se va. En un entorno protegido, las que despliegan, reinician o cambian variables piden confirm con el nombre del entorno.
  • **En un entorno congelado, desplegar responde deploy_frozen.** force: true lo hace igualmente y queda en el historial; lo automático espera solo a que termine.
  • No se sube código por MCP: create_service con upload: true crea el servicio, y el código se manda con fundaia up.

Cuando algo falla

Un fallo vuelve como error de herramienta, no de protocolo, así que el modelo lo lee y puede corregir la llamada. Lleva el mismo código que la API y que fundaia --json: not_found, conflict, validation_failed, forbidden, deploy_frozen…

Para lo que un agente tiene que saber antes de actuar, ver Para agentes.