Semantic layer CLI tool for Bonnard. Manages cubes, views, datasources, dashboards, deployments, and MCP server connectivity for the Bonnard semantic layer platform.
Bonnard CLI exposes 34 tools via STDIO. While most tools have brief descriptions (50-150 chars), the majority lack input schemas entirely or have severely incomplete parameter documentation. Many parameter descriptions are absent or trivial (e.g., 'Datasource name', 'API key ID'). Output schemas are undocumented across all tools. No error handling guidance is present. The tool interface reflects CLI design patterns rather than LLM-optimized agent patterns, parameter naming is inconsistent (mix of singular/plural, verb_noun inconsistency), and many tools bundle multiple concerns (e.g., 'datasource add' handles 40+ warehouse-specific parameters in one tool). Tools like 'schema' and 'query' have zero parameter descriptions visible. Only tools with explicit TypeScript definitions (e.g., datasource/add.ts) show any schema structure, and even those are incomplete. Per-tool averages range from 20-65, with median ~38.
Annotate deployment changes with reasoning
Deploy a dashboard (markdown or HTML) to Bonnard
Start a local development server for dashboard preview with live reload
List deployed dashboards
Open a dashboard in the browser
Remove a deployed dashboard
Add a data source to .bon/datasources.yaml. Use --name and --type together for non-interactive mode
List data sources (shows both local and remote by default)
Missing input schemas for tools 'schema' and 'query'. Code shows only enum description strings without JSON Schema type or property definitions.
Excessive parameter count and bundling in 'datasource add' (40+ parameters). This violates single-responsibility principle and forces LLM to disambiguate warehouse-specific configs in one call. Should split into warehouse-specific tools (add_snowflake_datasource, add_postgres_datasource, etc.) or use nested objects.
Parameter descriptions are trivial or missing across most tools. Examples: 'API key ID' (keys revoke), 'Datasource name' (datasource test), 'Dashboard slug' (dashboard open). LLMs cannot determine valid values, context of use, or format expectations from these.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Remove a data source from .bon/datasources.yaml (local by default)
Test datasource connection
Deploy cubes and views to Bonnard. Requires login, validates, syncs datasources
List deployment history
Show changes in a deployment
Show documentation
Show schema documentation
Create bon.yaml, bonnard/cubes/, bonnard/views/, .bon/, and agent templates
Create an API key
List API keys
Revoke an API key
Authenticate with Bonnard via your browser
Remove stored credentials
MCP connection info and setup instructions
Test MCP server connectivity
Analyze Metabase metadata and generate cube definitions
Connect Metabase instance to Bonnard
Explore Metabase tables and fields
Download deployed cubes and views from Bonnard
Execute a query against the deployed semantic layer
Explore the deployed semantic layer schema
Get the current organization theme
Reset the organization theme to default
Set the organization theme
Validate YAML syntax in bonnard/cubes/ and bonnard/views/
Show current login status
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or extract required fields (e.g., deployment_id from deploy, which is needed for diff). This forces discovery guessing.
No error handling or recovery guidance. Tools like 'deploy' and 'datasource test' can fail (e.g., connection refused, authentication error) but provide no hints to the agent about what to try next. Missing pattern:recovery-guide.
Inconsistent parameter naming. Some tools use singular (datasource), others plural (datasources). Some use 'name' for the resource identifier, others use 'slug'. This forces LLMs to reason about field mapping instead of using consistent naming conventions.
Parameter type information is often missing or incomplete. Example: 'datasource add' lists 'type' as string but does not declare it as an enum with valid warehouse types (snowflake, postgres, redshift, bigquery, databricks, duckdb). Free-form strings invite hallucinated invalid types.
Tools that modify state (init, login, deploy, datasource add, dashboard deploy, keys create) do not explicitly document they are destructive or non-idempotent in descriptions. Agents cannot safely retry without risk of duplicate records or lost state.