{"name":"DataChef","title":"DataChef MCP","description":"Agent-first MCP access to DataChef source discovery, super-query, Smart Forms, and display-card tools.","version":"0.1.0","transport":"streamable-http-json","protocol":"mcp","endpoint":"https://chef.threatco.io/api/mcp","docs":{"llms":"https://chef.threatco.io/llms.txt","llmsFull":"https://chef.threatco.io/llms-full.txt","openapi":"https://chef.threatco.io/openapi.json","agentConsole":"https://chef.threatco.io/agents"},"authentication":{"type":"bearer","header":"Authorization","format":"Bearer <mcp-token>","tokenUrl":"https://chef.threatco.io/agents","notes":["Operators sign in through Azure AD B2C at https://chef.threatco.io/login; register https://chef.threatco.io/auth/callback and https://chef.threatco.io/auth/signed-out in the B2C app.","Production readiness requires Azure AD B2C, app-only Microsoft Graph user listing, B2C account deletion enabled, Inboxr account email configuration, and the default super-admin pin jaskaranz@gmail.com=472818ce-c23f-425f-96a4-31d3e60d82e1.","Account self-management lives at https://chef.threatco.io/account; super-admin user readiness lives at https://chef.threatco.io/admin/users.","Create tokens from the authenticated DataChef agent console.","The MCP endpoint is bearer-token protected; the authenticated agent console is required to create tokens.","Public discovery documents do not expose stored connector secrets.","If DATACHEF_ENABLE_PROD_EXPOSURE is unset/false on chef.threatco.io, the production-host lock intentionally returns 503 for discovery documents as well as app pages.","Use the smallest scope needed for the agent workflow."]},"clientConfig":{"mcpServers":{"datachef":{"url":"https://chef.threatco.io/api/mcp","headers":{"Authorization":"Bearer ${DATACHEF_MCP_TOKEN}"}}}},"scopes":["mcp:read","mcp:query","mcp:execute","mcp:mutate","mcp:admin"],"tools":[{"name":"datachef.display.card","title":"Build a display card","description":"Return validated Adaptive Card-style JSON for summary, metric, or table displays. Use this when an agent needs structured UI instead of markdown.","group":"display","risk":"read","scope":"mcp:read","input_schema":{"type":"object","properties":{"kind":{"type":"string","enum":["summary","metrics","table"]},"title":{"type":"string"},"subtitle":{"type":"string"},"facts":{"type":"array"},"metrics":{"type":"array"},"columns":{"type":"array"},"rows":{"type":"array"},"maxRows":{"type":"number"}}},"output_schema":{"type":"object","required":["schemaVersion","id","kind","renderer","title","card"],"properties":{"schemaVersion":{"const":"datachef.display.v1"},"id":{"type":"string"},"kind":{"type":"string","enum":["summary","metrics","table"]},"renderer":{"const":"adaptive-card"},"title":{"type":"string"},"subtitle":{"type":"string"},"card":{"type":"object","description":"Adaptive Card-style JSON payload."},"data":{"type":"object","description":"Renderer-friendly normalized facts, metrics, columns, and rows."}}},"example":{"kind":"metrics","title":"Source inventory","metrics":[{"label":"Datasets","value":11},{"label":"Connectors","value":7}]}},{"name":"datachef.display.table","title":"Build a display table","description":"Return a bounded Adaptive Card-style table JSON block from columns and rows.","group":"display","risk":"read","scope":"mcp:read","input_schema":{"type":"object","required":["columns","rows"],"properties":{"title":{"type":"string"},"columns":{"type":"array"},"rows":{"type":"array"},"maxRows":{"type":"number"}}},"output_schema":{"type":"object","required":["schemaVersion","id","kind","renderer","title","card","data"],"properties":{"schemaVersion":{"const":"datachef.display.v1"},"kind":{"const":"table"},"renderer":{"const":"adaptive-card"},"data":{"type":"object","required":["columns","rows","rowCount"],"properties":{"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"rowCount":{"type":"number"}}}}},"example":{"title":"Display names","columns":["displayName"],"rows":[["unknown"],["Ken Zhou"]]}},{"name":"datachef.sources.discover","title":"Discover queryable DataChef sources","description":"List datasets, connectors, API services, recipes, schemas, capabilities, row limits, and supported query modes.","group":"super-query","risk":"read","scope":"mcp:read","input_schema":{"type":"object","properties":{}},"example":{}},{"name":"datachef.query.plan","title":"Plan a bounded query","description":"Create a deterministic query plan with source bindings, query text, risks, variables, and the next runnable call.","group":"super-query","risk":"read","scope":"mcp:query","input_schema":{"type":"object","properties":{"objective":{"type":"string"},"selectedSources":{"type":"array"},"rowLimit":{"type":"number"},"lang":{"type":"string","enum":["sql","kql"]},"constraints":{"type":"array","items":{"type":"string"}}}},"example":{"objective":"Show recent rows","selectedSources":[{"sourceType":"dataset","sourceId":"demo_b2c_users","alias":"source_rows"}]}},{"name":"datachef.query.run","title":"Run a bounded super query","description":"Execute SQL/KQL/recipe/federated queries over DataChef datasets and live connector sources.","group":"super-query","risk":"execute","scope":"mcp:query","input_schema":{"type":"object","required":["queryText"],"properties":{"lang":{"type":"string","enum":["sql","kql"]},"queryText":{"type":"string"},"recipeId":{"type":"string"},"sources":{"type":"array"},"variables":{"type":"object"},"timeWindow":{"type":"string"},"rowLimit":{"type":"number"}}},"example":{"lang":"sql","queryText":"SELECT * FROM source_rows LIMIT 100","sources":[{"sourceType":"dataset","sourceId":"demo_b2c_users","alias":"source_rows"}]}},{"name":"datachef.query.profile","title":"Profile query results","description":"Run a bounded query and return field profile metrics, chart hints, warnings, truncation state, and citations.","group":"super-query","risk":"execute","scope":"mcp:query","input_schema":{"type":"object","properties":{"queryText":{"type":"string"},"sources":{"type":"array"},"rowLimit":{"type":"number"}}},"example":{"queryText":"SELECT * FROM source_rows LIMIT 100","sources":[{"sourceType":"dataset","sourceId":"demo_nginx_ecommerce_logs","alias":"source_rows"}]}},{"name":"datachef.query.explain","title":"Explain query execution","description":"Explain rendered query, source bindings, execution mode, bytes/rows scanned, warnings, and citations.","group":"super-query","risk":"execute","scope":"mcp:query","input_schema":{"type":"object","properties":{"queryText":{"type":"string"},"sources":{"type":"array"},"recipeId":{"type":"string"}}},"example":{"queryText":"SELECT * FROM source_rows LIMIT 20","sources":[{"sourceType":"dataset","sourceId":"demo_b2c_users","alias":"source_rows"}]}},{"name":"datachef.query.save_recipe","title":"Save query recipe","description":"Save an approved query plan as a DataChef query recipe with variables and time-window defaults.","group":"super-query","risk":"mutate","scope":"mcp:mutate","input_schema":{"type":"object","required":["queryText"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"queryText":{"type":"string"},"sources":{"type":"array"},"variables":{"type":"array"}}},"example":{"name":"Agent B2C sample","queryText":"SELECT * FROM source_rows LIMIT 100","sources":[{"sourceType":"dataset","sourceId":"demo_b2c_users","alias":"source_rows"}]}},{"name":"datachef.forms.discover","title":"Discover Smart Forms","description":"List Smart Forms, source coverage, modes, published links, intelligence scores, and available definition-driven form workflows.","group":"smart-forms","risk":"read","scope":"mcp:read","input_schema":{"type":"object","properties":{}},"example":{}},{"name":"datachef.forms.inspect_source","title":"Inspect a form source","description":"Inspect a dataset, connector resource, API endpoint, or query recipe and return fields, samples, risks, lookup candidates, and repair suggestions.","group":"smart-forms","risk":"execute","scope":"mcp:query","input_schema":{"type":"object","required":["sourceType","sourceId"],"properties":{"sourceType":{"type":"string","enum":["dataset","connector","api-service","recipe"]},"sourceId":{"type":"string"},"resource":{"type":"string"},"endpointPath":{"type":"string"},"method":{"type":"string"},"rowLimit":{"type":"number"}}},"example":{"sourceType":"dataset","sourceId":"demo_b2c_users","rowLimit":50}},{"name":"datachef.forms.generate","title":"Generate a Smart Form definition","description":"Generate a schema-validated Smart Form definition from source inspection, with grouped fields, components, actions, critique, and intelligence score.","group":"smart-forms","risk":"execute","scope":"mcp:query","input_schema":{"type":"object","required":["sourceType","sourceId"],"properties":{"sourceType":{"type":"string"},"sourceId":{"type":"string"},"name":{"type":"string"},"mode":{"type":"string"}}},"example":{"sourceType":"dataset","sourceId":"demo_b2c_users","name":"B2C User Rescue Form"}},{"name":"datachef.forms.validate","title":"Validate a Smart Form definition","description":"Validate a Smart Form definition for component registry, sections, safe action bindings, and mutation confirmation boundaries.","group":"smart-forms","risk":"read","scope":"mcp:query","input_schema":{"type":"object","required":["definition"],"properties":{"definition":{"type":"object"}}},"example":{"definition":{"id":"form_id"}}},{"name":"datachef.forms.check_drift","title":"Check Smart Form source drift","description":"Compare a saved Smart Form definition with the current source shape and return added, removed, and changed fields.","group":"smart-forms","risk":"read","scope":"mcp:query","input_schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"persist":{"type":"boolean"}}},"example":{"id":"form_id","persist":true}},{"name":"datachef.forms.regenerate","title":"Regenerate Smart Form draft","description":"Regenerate a saved Smart Form draft from the current source shape while preserving published versions.","group":"smart-forms","risk":"mutate","scope":"mcp:mutate","input_schema":{"type":"object","required":["id","confirm"],"properties":{"id":{"type":"string"},"confirm":{"type":"boolean"}}},"example":{"id":"form_id","confirm":true}},{"name":"datachef.forms.publish","title":"Publish a Smart Form","description":"Publish a Smart Form as a locked version with DataChef URI and live route.","group":"smart-forms","risk":"mutate","scope":"mcp:mutate","input_schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"confirm":{"type":"boolean"}}},"example":{"id":"form_id","confirm":true}},{"name":"datachef.forms.run","title":"Run a Smart Form action","description":"Run a read/search/execute Smart Form action. Mutation actions require confirm=true and existing action permits.","group":"smart-forms","risk":"execute","scope":"mcp:execute","input_schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"actionId":{"type":"string"},"filters":{"type":"object"},"values":{"type":"object"},"confirm":{"type":"boolean"}}},"example":{"id":"form_id","filters":{"status":"active"}}},{"name":"datachef.operator.delete_dataset","title":"Delete dataset","description":"Delete a DataChef dataset. Requires confirm=true.","group":"operator","risk":"destructive","scope":"mcp:mutate","input_schema":{"type":"object","required":["id","confirm"],"properties":{"id":{"type":"string"},"confirm":{"type":"boolean"}}},"example":{"id":"dataset_id","confirm":true}},{"name":"datachef.operator.delete_connector","title":"Delete connector","description":"Delete a connector and its linked datasets. Requires confirm=true.","group":"operator","risk":"destructive","scope":"mcp:mutate","input_schema":{"type":"object","required":["id","confirm"],"properties":{"id":{"type":"string"},"confirm":{"type":"boolean"}}},"example":{"id":"connector_id","confirm":true}},{"name":"datachef.operator.delete_api_service","title":"Delete API service","description":"Delete an API service registry entry. Requires confirm=true.","group":"operator","risk":"destructive","scope":"mcp:mutate","input_schema":{"type":"object","required":["id","confirm"],"properties":{"id":{"type":"string"},"confirm":{"type":"boolean"}}},"example":{"id":"service_id","confirm":true}}],"resources":[{"uri":"datachef://docs/query-guide","name":"Super Query Guide","mimeType":"text/markdown","description":"How agents should discover, plan, run, profile, explain, and save DataChef queries."},{"uri":"datachef://docs/smart-forms-guide","name":"Smart Forms Guide","mimeType":"text/markdown","description":"How agents inspect sources, generate, validate, publish, and run definition-driven forms."},{"uri":"datachef://docs/display-guide","name":"MCP Display Guide","mimeType":"text/markdown","description":"How agents return Adaptive Card-style JSON blocks for metrics, summaries, and tables."},{"uri":"datachef://sources/catalog","name":"Source Catalog","mimeType":"application/json","description":"Runtime catalog of queryable DataChef sources."},{"uri":"datachef://forms/catalog","name":"Smart Forms Catalog","mimeType":"application/json","description":"Runtime catalog of saved Smart Forms, source coverage, statuses, and share links."},{"uri":"datachef://forms/components","name":"Smart Forms Component Registry","mimeType":"application/json","description":"Allowed Smart Forms components grouped by basic, advanced, and operational controls."},{"uri":"datachef://docs/security-model","name":"MCP Security Model","mimeType":"text/markdown","description":"Authentication, scoped tokens, destructive confirmations, and audit behavior."}],"prompts":[{"name":"explore_data","title":"Explore Data","description":"Discover sources, plan a bounded query, run it, and profile the results."},{"name":"join_sources","title":"Join Sources","description":"Build a federated query plan across multiple DataChef sources."},{"name":"profile_dataset","title":"Profile Dataset","description":"Profile a dataset and summarize useful fields and chart hints."},{"name":"save_query_recipe","title":"Save Query Recipe","description":"Turn a validated query plan into a reusable DataChef recipe."},{"name":"investigate_api_service","title":"Investigate API Service","description":"Inspect API service metadata and use API security runs where permits allow."},{"name":"generate_smart_form","title":"Generate Smart Form","description":"Inspect a source and generate a definition-driven operator form."},{"name":"rescue_legacy_ui","title":"Rescue Legacy UI","description":"Turn a raw API, DB table, or dataset into a sane Smart Form workflow."},{"name":"present_results","title":"Present Results","description":"Convert grounded query, profile, or source evidence into UI-ready display cards."}]}