MCP tools and access control
What an AI assistant can do through the Keboola MCP Server — the tool catalogue by category — and how to restrict it with the X-Allowed-Tools, X-Disallowed-Tools, and X-Read-Only-Mode headers, including the read-only tool set.
What your AI client can call through the Keboola MCP Server, and how to narrow that down. You don’t need to remember tool names — the client picks them; the names below matter when you’re restricting access. To set a client up in the first place, see Connect an AI client.
Tool categories
Section titled “Tool categories”| Category | What the assistant can do |
|---|---|
| Components & Transformations | Create, edit, and launch them with natural language. |
| Storage | Browse, edit, and document buckets, tables, and columns. |
| SQL | Run and manage SQL queries. |
| Semantic layer | Explore the project’s semantic models and validate queries against them. |
| Jobs | Start, monitor, and debug execution flows. |
| Flows | Create and manage flows (including conditional flows) that orchestrate components. |
| Data Apps | Create, deploy, and manage Streamlit and Python/JS data apps. |
| Search & Discovery | Find components, configurations, and objects across the project. |
| Project & OAuth | Read project info and set up OAuth authorizations for components. |
| Documentation | Search the official Keboola docs from inside the AI chat. |
For the exact tool names and their annotations, see TOOLS.md in the server repository.
Restricting tool access
Section titled “Restricting tool access”On the remote server you can limit which tools an AI client is offered. This is useful for:
- AI agent restrictions — capping what an agent (Devin, Cursor, your own) may do in the project.
- Compliance and security — enforcing data-governance policy by blocking write operations.
- Customer-specific access — tailored access profiles per use case.
Over the Streamable HTTP transport, the client controls this with HTTP headers.
Authorization headers
Section titled “Authorization headers”| Header | Description | Example value |
|---|---|---|
X-Allowed-Tools | Comma-separated list of tool names to allow. Only these tools will be available. | get_configs,get_buckets,query_data |
X-Disallowed-Tools | Comma-separated list of tool names to exclude. These tools will be removed from the available set. | create_config,run_job |
X-Read-Only-Mode | When set to true, 1, or yes, restricts access to read-only tools only. | true |
The headers are set by the client (your AI agent integration or custom MCP client) when it calls the server — check your client’s documentation for how to add custom HTTP headers.
Filter behavior
Section titled “Filter behavior”When several headers are present, filters apply in this order:
- Allowed-tools filter — if
X-Allowed-Toolsis specified, only those tools are initially available. - Read-only intersection — if
X-Read-Only-Modeis enabled, the available tools are intersected with the read-only set. - Disallowed exclusion — tools listed in
X-Disallowed-Toolsare removed from the final set.
Empty headers are treated as no restriction/exclusion (backward-compatible behavior).
Read-only tools
Section titled “Read-only tools”These tools are classified as read-only — they don’t modify data. The live set may grow over time; TOOLS.md carries the current annotations.
| Category | Tools |
|---|---|
| Components | get_configs, get_components, get_config_examples, run_sync_action |
| Flows | get_flows, get_flow_examples, get_flow_schema |
| Storage | get_buckets, get_tables |
| SQL | query_data |
| Semantic | get_semantic_context, get_semantic_schema, search_semantic_context, validate_semantic_query |
| Data Apps | get_data_apps |
| Jobs | get_jobs |
| Search | search, find_component_id |
| Project | get_project_info |
| Documentation | docs_query |
Examples
Section titled “Examples”AI agent restrictions — let an agent query and explore data, but not create or modify configurations:
X-Read-Only-Mode: trueCompliance and security — a customer-specific profile allowing only specific tools and explicitly blocking others:
X-Allowed-Tools: get_buckets,get_tables,query_data,searchX-Disallowed-Tools: run_jobCombined restrictions — all three headers together, for fine-grained control:
X-Allowed-Tools: get_configs,get_buckets,get_tables,query_data,create_configX-Read-Only-Mode: trueX-Disallowed-Tools: query_dataThis leaves only get_configs, get_buckets, and get_tables available — the intersection of allowed and read-only, minus the disallowed.