Problem
get_configs returns configurations as a single flattened text blob (a YAML/pretty-printed format inside the content[0] string), rather than the structured JSON returned by the Storage API.
For interactive use this is fine, but programmatic consumers have to:
- Parse the text with regex
- Deal with escape-sequence handling for multi-line values (notably SQL
query fields with \n literals)
- Reconstruct nested fields like
parameters.primaryKey from indented sub-keys
In our case this directly broke a workflow: detecting a top-level WHERE clause in MySQL extractor queries was unreliable because newlines were rendered as \n literals in the text output, not as actual \n characters. We had to fall back to direct curl calls against /v2/storage/components/{component}/configs/{config}/rows to get usable JSON.
Repro
kbagent --json tool call get_configs --project <p> --input '{"configs":[{"component_id":"keboola.ex-db-mysql","configuration_id":"<id>"}]}'
→ The data.results[0].content[0] is a string. Multi-line parameters.query values come back with escape sequences, not real newlines.
Proposal
Either:
- (preferred) Add a
format: "json" flag (default "text" for back-compat) that returns the full Storage API response as structured JSON.
- Or ship a dedicated
get_config_raw tool that returns the row payload as-is.
Impact
Without this, any agent doing structured edits on configurations (esp. SQL queries, nested params, primary keys) has to bypass MCP for reads.
Problem
get_configsreturns configurations as a single flattened text blob (a YAML/pretty-printed format inside thecontent[0]string), rather than the structured JSON returned by the Storage API.For interactive use this is fine, but programmatic consumers have to:
queryfields with\nliterals)parameters.primaryKeyfrom indented sub-keysIn our case this directly broke a workflow: detecting a top-level
WHEREclause in MySQL extractor queries was unreliable because newlines were rendered as\nliterals in the text output, not as actual\ncharacters. We had to fall back to directcurlcalls against/v2/storage/components/{component}/configs/{config}/rowsto get usable JSON.Repro
→ The
data.results[0].content[0]is a string. Multi-lineparameters.queryvalues come back with escape sequences, not real newlines.Proposal
Either:
format: "json"flag (default"text"for back-compat) that returns the full Storage API response as structured JSON.get_config_rawtool that returns the row payload as-is.Impact
Without this, any agent doing structured edits on configurations (esp. SQL queries, nested params, primary keys) has to bypass MCP for reads.