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