Skip to main content
Seventeen tools across four groups. Each lists the scope it requires — relevant only for API-key clients, since an OAuth session carries them all.

Discovery

list_teams

data:schema — no parameters. The teams you belong to, with your role and how many databases each has. A team’s id is the teamId every other tool wants.

list_datasources

data:schema — teamId? The databases you may query, with type, status, and exposed table count. Omit teamId to list across every team.

describe_datasource

data:schema — teamId, dataSourceId The tables and columns you may read on one database, with types, keys, row estimates, and the team’s published documentation. Vocabulary matches the source: schema/table for PostgreSQL, database/collection for MongoDB, dataset/table for BigQuery. Call this before writing a query. It carries the context column names don’t.

search_docs

data:schema — teamId, dataSourceId, query Searches the team’s published documentation — what a value means, which rows are excluded by default, how tables relate. Use it when a table’s purpose isn’t obvious, rather than guessing from names.

Reading data

run_query

data:read — teamId, dataSourceId, sql, limit? A single read-only SELECT against PostgreSQL or BigQuery (GoogleSQL). No semicolon-separated statements. For MongoDB use run_find or run_aggregate.

run_find

data:read — teamId, dataSourceId, collection, filter?, projection?, sort?, limit? Documents from an exposed MongoDB collection. The simple case: a filter, optionally a projection and a sort.

run_aggregate

data:read — teamId, dataSourceId, collection, pipeline, limit? A read-only MongoDB aggregation — $match, $group, $sort, $lookup and so on. Stages that write ($out, $merge) or run server-side JavaScript ($where, $function) are refused, as are unexposed fields.

sample_rows

data:read — teamId, dataSourceId, table, limit? A few rows from one exposed table or collection, to see its shape without writing a query. The cheapest way to start on something unfamiliar.
Results say when they were truncated. If they were, narrow the query rather than raising the limit — the per-team cap applies regardless.

Documentation

See Documentation for how these fit together.

document_finding

docs:write — teamId, dataSourceId, schemaName, tableName, statement, column? Record something you worked out that isn’t obvious from the schema. Saved as a draft for a human to review; once approved, every agent querying this database is told it.

write_documentation

docs:write — teamId, dataSourceId, schemaName, tableName, section, bodyMarkdown Replace a table’s summary or examples section. The section becomes pinned — regenerating the documentation leaves it alone.

publish_documentation

docs:publish — teamId, dataSourceId, schemaName, tableName, published Publish a table’s documentation, or withdraw it. Other agents act on what you publish.

Artifacts

See Artifacts for the manifest format and rendering model.

get_artifact_template

artifacts:write — no parameters. A starter HTML and manifest scaffold that already handles full-screen sizing and window.SAMPLE_DATA correctly.

publish_artifact

artifacts:write — teamId, name, html, manifest, status?, visibility? Publish a dashboard wired to live data. Send queries in the manifest rather than results in the HTML. Every query is checked against your exposure rules before anything is stored. Defaults to DRAFT and ONLY_ME.

list_artifacts

data:schema — teamId The team’s dashboards and the queries each one reads.

get_artifact

data:schema — teamId, artifactId One artifact’s HTML and manifest, so you can change it and publish the result.

update_artifact

artifacts:write — teamId, artifactId, plus any of html, manifest, name, status, visibility

delete_artifact

artifacts:write — teamId, artifactId Permanent. The underlying data is untouched — an artifact only ever stored the queries.

When a call is refused

Refusals name what was blocked and why. Read the message and narrow the query; retrying the same call fails the same way. See Security model.