Generate DBeaver config from Pydantic ClickHouse models. TRIGGERS - DBeaver config, ClickHouse connection, database client config.
From devops-toolsnpx claudepluginhub terrylica/cc-skills --plugin devops-toolsThis skill is limited to using the following tools:
references/dbeaver-format.mdreferences/evolution-log.mdreferences/pydantic-model.mdscripts/generate_dbeaver_config.pyscripts/validate_config.pySearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Generate DBeaver database client configurations from Pydantic v2 models using mise [env] as Single Source of Truth (SSoT).
Schema documentation principle: ClickHouse table/column COMMENTs are the SSoT for what each column means and how it's computed. See quality-tools:clickhouse-architect for the full COMMENT policy.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
Use this skill when:
This skill is NOT a rigid template. It provides a SSoT pattern that MUST be adapted to each repository's structure and local database situation.
Each repository has unique:
.dbeaver/ location may vary)The SSoT principle is the constant; the implementation details are the variables.
# Generate local connection config
mise run db-client-generate
# Generate cloud connection config
mise run db-client:cloud
# Preview without writing
mise run db-client:dry-run
# Launch DBeaver
mise run dbeaver
Before using cloud mode, obtain credentials via the skill chain:
clickhouse-cloud-management skill to create read-only users or retrieve existing credentials from 1Password.env file (gitignored):CLICKHOUSE_USER_READONLY=your_user
CLICKHOUSE_PASSWORD_READONLY=your_password
mise run db-client:cloudSkill chain: clickhouse-cloud-management → .env → clickhouse-pydantic-config
[env] as Single Source of TruthAll configurable values live in .mise.toml:
[env]
CLICKHOUSE_NAME = "clickhouse-local"
CLICKHOUSE_MODE = "local" # "local" or "cloud"
CLICKHOUSE_HOST = "localhost"
CLICKHOUSE_PORT = "8123"
CLICKHOUSE_DATABASE = "default"
Scripts read from os.environ.get() with backward-compatible defaults—works with or without mise installed.
| Mode | Approach | Rationale |
|---|---|---|
| Local | Hardcode default user, empty password | Zero friction, no security concern |
| Cloud | Pre-populate from .env | Read from environment, write to gitignored JSON |
Key principle: The generated data-sources.json is gitignored anyway. Pre-populating credentials trades zero security risk for maximum developer convenience.
# .env (gitignored)
CLICKHOUSE_USER_READONLY=readonly_user
CLICKHOUSE_PASSWORD_READONLY=your-secret-password
Before writing any code, the executor MUST:
# 1. Discover existing configuration patterns
fd -t f ".mise.toml" .
fd -t f ".env*" .
fd -t d ".dbeaver" .
# 2. Test ClickHouse connectivity (local)
clickhouse-client --host localhost --port 9000 --query "SELECT 1"
# 3. Check for existing connection configs
fd -t f "data-sources.json" .
fd -t f "dataSources.xml" .
| Discovery Finding | Adaptation Action |
|---|---|
Existing .mise.toml at repo root | Extend existing [env] section, don't create new file |
Existing .dbeaver/ directory | Merge connections, preserve existing entries |
| Non-standard CLICKHOUSE_* vars | Map to repository's naming convention |
| Multiple databases (local + cloud) | Generate multiple connection entries |
| No ClickHouse available | Warn and generate placeholder config |
The executor MUST verify:
jq . .dbeaver/data-sources.json)mise run db-client-generate).dbeaver/ added to .gitignoreThe ClickHouseConnection model provides:
from_env() class methodSee references/pydantic-model.md for complete model documentation.
DBeaver uses .dbeaver/data-sources.json with this structure:
{
"folders": {},
"connections": {
"clickhouse-jdbc-{random-hex}": {
"provider": "clickhouse",
"driver": "com_clickhouse",
"name": "Connection Name",
"configuration": { ... }
}
}
}
Important: DBeaver does NOT support ${VAR} substitution—values must be pre-populated at generation time.
See references/dbeaver-format.md for complete format specification.
/Applications/DBeaver.app/Contents/MacOS/dbeaver (NOT open -a).dbeaver/ to .gitignore| Skill | Integration |
|---|---|
devops-tools:clickhouse-cloud-management | Credential retrieval for cloud mode |
quality-tools:clickhouse-architect | Schema design context |
itp:mise-configuration | SSoT environment variable patterns |
For Python application code connecting to ClickHouse (not DBeaver), use clickhouse-connect (official HTTP driver). See clickhouse-architect for:
clickhouse-driver (community)| Reference | Content |
|---|---|
| references/pydantic-model.md | Complete model documentation |
| references/dbeaver-format.md | DBeaver JSON format spec |
| Issue | Cause | Solution |
|---|---|---|
| DBeaver can't connect | Port mismatch (8123 vs 9000) | HTTP uses 8123, native uses 9000 - check config |
| Credentials not loading | .env not sourced | Run mise trust or source .env manually |
| JSON validation fails | Invalid data-sources.json | Validate with jq . .dbeaver/data-sources.json |
| Cloud SSL error | Missing SSL on port 8443 | Cloud mode auto-enables SSL - verify port is 8443 |
| mise task not found | Missing task definition | Add task to mise.toml [tasks] section |
| .dbeaver/ in git | Missing gitignore entry | Add .dbeaver/ to .gitignore |
| Connection ID conflict | Duplicate connection names | Each connection needs unique ID (random hex) |
| Config not updating | DBeaver caching | Restart DBeaver to reload data-sources.json |
After this skill completes, check before closing:
Only update if the issue is real and reproducible — not speculative.