MewCP Chef Server MCP
Servidor MCP de Chef Server alojado, sin estado y multiinquilino que permite a los asistentes de IA gestionar infraestructura, nodos, cookbooks y flujos de trabajo de automatización a través de Chef Server.
Documentación
CL Chef Server MCP Server
Un servidor Model Context Protocol (MCP) que expone la API de Chef Infra Server para operaciones genéricas, sin estado y multiinquilino.
Descripción general
Este MCP es un servidor de integración para Chef Infra Server y sigue los estándares de Curious Layer:
- Sin estado y multiinquilino por diseño
- Autenticación por solicitud (sin estado de autenticación/sesión compartida en memoria)
- Cobertura de API genérica para todos los endpoints de Chef Server mediante llamadas a herramientas
Autenticación
Todas las herramientas orientadas a inquilinos requieren entrada de autenticación en cada llamada.
Firma Chef Signature (predeterminada)
Use este formato de carga de autenticación en auth_data:
{
"auth_type": "chef-signature",
"user_id": "pivotal",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----",
"auth_version": "1.3",
"chef_version": "18.0.0",
"server_api_version": "1"
}
Notas:
- private_key_base64 se puede usar en lugar de private_key.
- auth_version admite 1.3 (recomendado) y 1.0.
Autenticación básica (para endpoints como /_stats)
{
"auth_type": "basic",
"basic_username": "statsuser",
"basic_password": "your-password"
}
Herramientas
Este servidor expone herramientas dedicadas por funcionalidad de endpoint (en lugar de un envoltorio genérico).
- health_check
Herramientas de endpoints globales:
- chef_authenticate_user
- chef_get_license
- chef_list_organizations_global
- chef_create_organization_global
- chef_get_organization_global
- chef_update_organization_global
- chef_delete_organization_global
- chef_get_stats
- chef_get_status
- chef_list_users_global
- chef_create_user_global
- chef_get_user_global
- chef_update_user_global
- chef_delete_user_global
- chef_list_user_keys_global
- chef_create_user_key_global
- chef_get_user_key_global
- chef_update_user_key_global
- chef_delete_user_key_global
- chef_get_universe_global
Herramientas de endpoints de organización:
- chef_list_association_requests
- chef_create_association_request
- chef_delete_association_request
- chef_list_clients
- chef_create_client
- chef_get_client
- chef_update_client
- chef_delete_client
- chef_list_client_keys
- chef_create_client_key
- chef_get_client_key
- chef_update_client_key
- chef_delete_client_key
- chef_list_containers
- chef_create_container
- chef_get_container
- chef_delete_container
- chef_list_cookbook_artifacts
- chef_get_cookbook_artifact
- chef_get_cookbook_artifact_version
- chef_upsert_cookbook_artifact_version
- chef_delete_cookbook_artifact_version
- chef_list_cookbooks
- chef_get_latest_cookbooks
- chef_get_latest_recipes
- chef_get_cookbook
- chef_get_cookbook_version
- chef_upsert_cookbook_version
- chef_delete_cookbook_version
- chef_list_data_bags
- chef_create_data_bag
- chef_get_data_bag
- chef_create_data_bag_item
- chef_delete_data_bag
- chef_get_data_bag_item
- chef_update_data_bag_item
- chef_delete_data_bag_item
- chef_list_environments
- chef_create_environment
- chef_get_default_environment
- chef_get_environment
- chef_update_environment
- chef_delete_environment
- chef_get_environment_cookbook
- chef_resolve_environment_cookbook_versions
- chef_list_environment_cookbooks
- chef_list_environment_nodes
- chef_list_environment_recipes
- chef_get_environment_role_run_list
- chef_list_groups
- chef_create_group
- chef_get_group
- chef_update_group
- chef_delete_group
- chef_list_nodes
- chef_create_node
- chef_get_node
- chef_update_node
- chef_delete_node
- chef_head_node
- chef_list_policies
- chef_list_policy_groups
- chef_get_principal
- chef_get_required_recipe
- chef_list_roles
- chef_create_role
- chef_get_role
- chef_update_role
- chef_delete_role
- chef_list_role_environments
- chef_get_role_environment
- chef_create_sandbox
- chef_commit_sandbox
- chef_list_search_indexes
- chef_search_index
- chef_partial_search_index
- chef_get_updated_since
- chef_list_org_users
- chef_associate_org_user
- chef_get_org_user
- chef_disassociate_org_user
Configuración
pip install -r requirements.txt
Ejecución del servidor
# stdio
python server.py
# sse
python server.py --transport sse --host 127.0.0.1 --port 8001
# streamable-http
python server.py --transport streamable-http --host 127.0.0.1 --port 8001
Ejemplos de llamadas a herramientas
Solicitud de endpoint global
{
"tool": "chef_list_organizations_global",
"arguments": {
"auth_data": "{\"auth_type\":\"chef-signature\",\"user_id\":\"pivotal\",\"private_key\":\"-----BEGIN RSA PRIVATE KEY-----\\n...\\n-----END RSA PRIVATE KEY-----\"}",
"server_url": "https://chef.example.com",
"path_params": "{}",
"query_params": "{}"
}
}
Solicitud con ámbito de organización
{
"tool": "chef_list_nodes",
"arguments": {
"auth_data": "{\"auth_type\":\"chef-signature\",\"user_id\":\"my-client\",\"private_key\":\"-----BEGIN RSA PRIVATE KEY-----\\n...\\n-----END RSA PRIVATE KEY-----\"}",
"server_url": "https://chef.example.com",
"path_params": "{\"organization\":\"my-org\"}",
"query_params": "{}"
}
}
Solicitud de endpoint con autenticación básica
{
"tool": "chef_get_stats",
"arguments": {
"auth_data": "{\"auth_type\":\"basic\",\"basic_username\":\"statsuser\",\"basic_password\":\"secret\"}",
"server_url": "https://chef.example.com",
"path_params": "{}",
"query_params": "{\"format\":\"json\"}"
}
}
Estructura del proyecto
cl-mcp-chef-server/
|-- server.py
|-- requirements.txt
|-- README.md
`-- chef_server_mcp/
|-- __init__.py
|-- cli.py
|-- config.py
|-- tools.py
|-- schemas.py
`-- service.py
Recursos
- Documentación de la API de Chef Infra Server: https://docs.chef.io/server/api_chef_server/
- Documentación de FastMCP: https://gofastmcp.com/v2/getting-started/welcome