A Model Context Protocol (MCP) server that exposes the Chef Infra Server API for generic, stateless, multi-tenant API operations.
This MCP is an integration server for Chef Infra Server and follows Curious Layer standards:
All tenant-facing tools require authentication input on every call.
Use this auth payload format in 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"
}notes:
{
"auth_type": "basic",
"basic_username": "statsuser",
"basic_password": "your-password"
}This server exposes dedicated tools per endpoint functionality (instead of a generic wrapper).
Global endpoint tools:
Organization endpoint tools:
pip install -r requirements.txt# 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{
"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-----\"}",
{
"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-----\"}",
{
"tool": "chef_get_stats",
"arguments": {
"auth_data": "{\"auth_type\":\"basic\",\"basic_username\":\"statsuser\",\"basic_password\":\"secret\"}",
"server_url": "https://chef.example.com",
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