backend/api/mcp/skills/query.md
Run SQL queries against databases managed by Bytebase.
Before writing SQL, call get_schema(database=...) to see the current shape.
bb.sql.query permissionGet the schema:
search_api(operationId="SQLService/Query")
List databases (if needed):
call_api(operationId="DatabaseService/ListDatabases", body={
"parent": "workspaces/{id}",
"filter": "name.contains(\"db_name\")"
})
Filter examples:
name.contains("employee") - database name contains "employee"project == "projects/{project-id}" - databases in a projectinstance == "instances/{instance-id}" - databases in an instanceengine == "MYSQL" - MySQL databases onlyenvironment == "environments/prod" && name.contains("user") - combine filtersExtract dataSourceId from instanceResource.dataSources in the response. Prefer type: "READ_ONLY" over type: "ADMIN" when available.
Execute SQL:
call_api(operationId="SQLService/Query", body={
"name": "instances/{instance-id}/databases/{database-name}",
"dataSourceId": "{data-source-id}",
"statement": "SELECT * FROM users LIMIT 10"
})
dataSourceId is required.
********rn** (only "rn" visible)**text** as bold formatting.| Error | Cause | Fix |
|---|---|---|
| data source id is required | Missing dataSourceId field | Get dataSourceId from instanceResource.dataSources in database listing |
| database not found | Wrong instance/database name | List databases first |
| permission denied | Missing bb.sql.query | Check user permissions |
| syntax error | Invalid SQL | Check SQL syntax for the database engine |