General
wren-sql - Claude MCP Skill
Write and correct SQL queries targeting Wren Engine — covers MDL query rules, filter strategies, data types (ARRAY, STRUCT, JSON/VARIANT), date/time functions, Calculated Fields, BigQuery dialect quirks, and error diagnosis. Use when generating or debugging SQL for any Wren Engine data source.
SEO Guide: Enhance your AI agent with the wren-sql tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to write and correct sql queries targeting wren engine — covers mdl query rules, filter strategies, dat... Download and configure this skill to unlock new capabilities for your AI workflow.
Documentation
SKILL.md# Wren SQL
## Version check
Silently fetch `https://raw.githubusercontent.com/Canner/wren-engine/main/skills/versions.json`.
Compare the `wren-sql` key with this skill's version (from the frontmatter above).
If the remote version is newer, notify the user before proceeding:
> A newer version of the **wren-sql** skill is available.
> Update with:
> ```
> npx skills add Canner/wren-engine --skill wren-sql --agent claude-code
> ```
Then continue with the workflow below regardless of update status.
---
Wren Engine translates SQL through a semantic layer (MDL — Model Definition Language) before executing it against a backend database. SQL must target MDL model names, not raw database tables.
For specific topics, load the relevant reference file:
| Topic | Reference |
|-------|-----------|
| SQL error diagnosis and correction | [references/correction.md](references/correction.md) |
| Date/time functions and intervals | [references/datetime.md](references/datetime.md) |
| ARRAY, STRUCT, JSON/VARIANT types | [references/types.md](references/types.md) |
| BigQuery dialect quirks | [references/bigquery.md](references/bigquery.md) |
---
## Context
- You are querying a **semantic layer**, not a database directly.
- Only use model/view/column names defined in the MDL — never raw database table references.
- Wren Engine uses a generic SQL dialect similar to ANSI SQL (DataFusion/Postgres/DuckDB), but with differences.
- Check the `dataSource` field to identify the backend and apply dialect-specific rules if needed.
---
## Core SQL Rules
- Only `SELECT` statements. No `DELETE`, `UPDATE`, `INSERT`.
- Only use tables and columns from the MDL schema.
- Do not include comments in generated SQL.
- Prefer CTEs over subqueries.
- Identifiers are **case-sensitive**. Quote identifiers containing unicode, special characters (except `_`), or starting with a digit using double quotes.
- Examples: `"客户"."姓名"`, `"table-name"."col"`, `"123column"`
- Identifier quotes: `"` (double quotes). String literal quotes: `'` (single quotes).
- For specific date queries, use a range:
```sql
WHERE ts >= CAST('2024-11-01 00:00:00' AS TIMESTAMP WITH TIME ZONE)
AND ts < CAST('2024-11-02 00:00:00' AS TIMESTAMP WITH TIME ZONE)
```
- For ranking, use `DENSE_RANK()` + `WHERE`. Include the ranking column in `SELECT`.
- Avoid correlated subqueries — use JOINs instead.
- Use `SAFE_CAST` when casting might fail: `SAFE_CAST(col AS INT)`
---
## Filter Strategies
| Column type | Strategy |
|-------------|----------|
| Text | `LIKE '%value%'` for partial match |
| Numeric | `BETWEEN 30 AND 40` |
| Date/Timestamp | `>= '2024-01-01' AND < '2024-02-01'` |
| Exact value | `=` or `IN (...)` |
| Primary key / indexed | Prefer equality (`=`) |
---
## Supported Cast Types
`bool`, `boolean`, `int`, `integer`, `bigint`, `smallint`, `tinyint`, `float`, `double`, `real`, `decimal`, `numeric`, `varchar`, `char`, `string`, `text`, `date`, `time`, `timestamp`, `timestamp with time zone`, `bytea`
Example: `CAST(col AS INT)`, `TIMESTAMP '2024-11-09 00:00:00'`
---
## Aggregation
- All non-aggregated `SELECT` columns must appear in `GROUP BY` (window functions excepted).
- Aggregate conditions go in `HAVING`, not `WHERE`.
- Prefer ordinal `GROUP BY` for long column names:
```sql
SELECT very_long_column_name AS alias, COUNT(*) FROM t GROUP BY 1
```
---
## Sorting and Limiting
- `ORDER BY` for sort; `LIMIT` to restrict rows.
- When `ORDER BY` appears in a subquery or CTE, always include `LIMIT`.
---
## Subquery Patterns
- Prefer CTEs (`WITH` clause) over nested subqueries.
- Subquery in `SELECT` must return a single value per row.
- Subquery in `WHERE`: use `IN`, `EXISTS`, or comparison operators.
- `IN SUBQUERY` in `JOIN` conditions is not supported — use `JOIN ... ON` instead.
- `RECURSIVE` CTEs are not supported.
---
## Calculated Fields
Columns marked as **Calculated Field** in the MDL have pre-defined computation logic. Use them directly instead of re-implementing the calculation.
Read the column comment (e.g., `column expression: avg(reviews.Score)`) to understand what the field represents.
```sql
-- Schema has: Rating DOUBLE (Calculated Field: avg(reviews.Score))
-- ReviewCount BIGINT (Calculated Field: count(reviews.Id))
-- Correct — use Calculated Fields directly:
SELECT AVG(Rating) FROM orders WHERE ReviewCount > 10
-- Incorrect — do not re-join and re-aggregate manually
```Signals
Information
- Repository
- Canner/wren-engine
- Author
- Canner
- Last Sync
- 4/7/2026
- Repo Updated
- 4/6/2026
- Created
- 3/6/2026
Reviews (0)
No reviews yet. Be the first to review this skill!
Related Skills
CLAUDE
Claude-Mem: AI Development Instructions
cursorrules
CrewAI Development Rules
firecrawl-build-onboarding
Get Firecrawl credentials and SDK setup into a project. Use when an application needs `FIRECRAWL_API_KEY`, when an agent should add Firecrawl to `.env`, when the user wants to authenticate Firecrawl for app code, or when choosing the first SDK and docs for a new Firecrawl integration. This skill includes its own browser auth flow, so it does not depend on the website onboarding skill.
firecrawl-build
Integrate Firecrawl into application code whenever a product, agent, or workflow needs web data inside the app — web search, live search results, page scraping, structured extraction, or browser interaction. Use when building any feature that needs data from the web in code, even if the user does not mention Firecrawl explicitly and only describes wanting web data, website content, search, scraping, or interaction in an application. Trigger for Firecrawl requests, "fire girl" shorthand, and generic app-level web-data needs that should map to `/scrape`, `/search`, or `/interact`. Do not use this skill for one-off terminal-only web tasks during the current session; use `firecrawl/cli` for those.
Related Guides
Mastering the Oracle CLI: A Complete Guide to the Claude Skill for Database Professionals
Learn how to use the oracle Claude skill. Complete guide with installation instructions and examples.
Python Django Best Practices: A Comprehensive Guide to the Claude Skill
Learn how to use the python django best practices Claude skill. Complete guide with installation instructions and examples.
Optimize Rell Blockchain Code: A Comprehensive Guide to the Claude Skill
Learn how to use the optimize rell blockchain code Claude skill. Complete guide with installation instructions and examples.