GoSQLX
GoSQLX
Go의 속도로 SQL을 파싱하세요
🌐 플레이그라운드 체험하기 · 📖 문서 읽기 · 🚀 시작하기 · 📊 벤치마크
초당 138만 건 이상의 작업 | <1μs 지연 시간 | 85% SQL-99 | 8개 방언 지원 | 0 레이스 컨디션 |
GoSQLX란 무엇인가요?
GoSQLX는 Go를 위한 프로덕션급 SQL 파싱 SDK입니다. 제로 카피 최적화와 지능형 객체 풀링을 통해 SQL을 토큰화, 파싱하고 AST를 생성하며, 마이크로초 미만의 지연 시간으로 초당 138만 건 이상의 작업을 처리합니다.
ast, _ := gosqlx.Parse("SELECT u.name, COUNT(*) FROM users u JOIN orders o ON u.id = o.user_id GROUP BY u.name")
// → Full AST with statements, columns, joins, grouping - ready for analysis, transformation, or formatting왜 GoSQLX인가요?
ORM이 아닙니다 - 파서입니다. AST를 얻고, 그것으로 무엇을 할지 결정할 수 있습니다.
느리지 않습니다 - 제로 카피 토큰화, sync.Pool 재사용, 핫 패스(hot path)에서의 할당 없음.
제한이 없습니다 - PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite, Snowflake, ClickHouse를 지원합니다. CTE, 윈도우 함수, MERGE, 집합 연산 등을 지원합니다.
단순한 라이브러리가 아닙니다 - CLI, VS Code 확장 프로그램, GitHub Action, MCP 서버, WASM 플레이그라운드, Python 바인딩을 제공합니다.
Related MCP server: mcp-server-duckdb
60초 만에 시작하기
go get github.com/ajitpratap0/GoSQLXpackage main
import (
"fmt"
"github.com/ajitpratap0/GoSQLX/pkg/gosqlx"
)
func main() {
// Parse any SQL dialect
ast, _ := gosqlx.Parse("SELECT * FROM users WHERE active = true")
fmt.Printf("%d statement(s)\n", len(ast.Statements))
// Format messy SQL
clean, _ := gosqlx.Format("select id,name from users where id=1", gosqlx.DefaultFormatOptions())
fmt.Println(clean)
// SELECT
// id,
// name
// FROM users
// WHERE id = 1
// Catch errors before production
if err := gosqlx.Validate("SELECT * FROM"); err != nil {
fmt.Println(err) // → expected table name
}
}어디서나 설치 가능
📦 Go 라이브러리
go get github.com/ajitpratap0/GoSQLX🖥️ CLI 도구
go install github.com/ajitpratap0/GoSQLX/cmd/gosqlx@latest
gosqlx validate "SELECT * FROM users"
gosqlx format query.sql
gosqlx lint query.sql💻 VS Code 확장 프로그램
code --install-extension ajitpratap0.gosqlx바이너리가 포함되어 있어 별도의 설정이 필요 없습니다. 더 알아보기 →
🤖 MCP 서버 (AI 통합)
claude mcp add --transport http gosqlx \
https://mcp.gosqlx.dev/mcpClaude, Cursor 또는 모든 MCP 클라이언트에서 7개의 SQL 도구를 사용할 수 있습니다. 가이드 →
주요 기능 요약
문서
리소스 | 설명 | |
🌐 | 대화형 플레이그라운드가 있는 웹사이트 | |
🚀 | 5분 만에 첫 SQL 파싱하기 | |
📖 | 포괄적인 패턴 및 예제 | |
📄 | 전체 API 문서 | |
🖥️ | 명령줄 도구 참조 | |
🌍 | 방언 지원 매트릭스 | |
🤖 | AI 어시스턴트 통합 | |
🏗️ | 시스템 설계 심층 분석 | |
📊 | 성능 데이터 및 방법론 | |
📝 | 버전별 변경 사항 |
기여하기
GoSQLX는 여러분과 같은 기여자들에 의해 만들어집니다. 버그 수정, 새로운 기능, 문서 개선, 오타 수정 등 모든 기여가 소중합니다.
git clone https://github.com/ajitpratap0/GoSQLX.git && cd GoSQLX
task check # fmt → vet → lint → test (with race detection)main브랜치에서 포크 및 브랜치 생성테스트 작성 - TDD를 사용하며 레이스 프리 코드를 요구합니다
task check실행 - PR 전에 통과해야 합니다PR 열기 - 24시간 이내에 검토합니다
누가 GoSQLX를 사용하나요?
GoSQLX는 전 세계 개발자들에 의해 다운로드 및 클론되고 있습니다. 단 14일 만에 595명의 고유 사용자가 클론했습니다. 귀하의 프로젝트나 조직에서 GoSQLX를 사용 중이라면, 알려주세요!
프로젝트 / 회사 | 사용 사례 |
귀하의 프로젝트 |
업무에서 GoSQLX를 사용하시나요? 멋진 것을 만들고 계신가요? GitHub 토론에서 이야기를 공유해 주세요. 커뮤니티 성장에 도움이 되며 지속적인 개발의 동기가 됩니다.
커뮤니티
질문이 있으신가요? 아이디어가 있으신가요? 버그를 발견하셨나요?
라이선스
Apache License 2.0 - 자세한 내용은 LICENSE를 참조하세요.
GoSQLX 커뮤니티가 ❤️를 담아 제작함
gosqlx.dev · 플레이그라운드 · 문서 · MCP 서버 · VS Code
GoSQLX가 프로젝트에 도움이 되었다면 ⭐를 눌러주세요
Available Tools
7 toolsanalyze_sqlARead-onlyIdempotentInspect
Use this when the user wants a complete review of a SQL query. Runs validate, parse, metadata, security, lint, and format concurrently and returns one composite report; hosts that support MCP Apps render it as an interactive report.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only, idempotent, non-destructive profile, so the bar is lower, but the description adds real value: the six analyses run concurrently and results are merged into a single composite report. The MCP Apps interactive-rendering note is useful host-dependent behavior. It does not mention latency/cost of fanning out six analyses, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: the usage trigger is front-loaded, followed by the mechanical behavior. No restatement of the tool name or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and 'one composite report' plus the list of constituent analyses covers that adequately. The only gap is the report's internal structure, which is implied but not specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage, so the schema already documents 'sql' fully. The description adds no syntax, dialect, or size guidance beyond what the schema provides; baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('complete review of a SQL query') and enumerates exactly which six sibling capabilities it composes (validate, parse, metadata, security, lint, format). An agent can instantly tell this apart from the single-purpose siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user wants a complete review' gives a clear triggering condition, and the enumeration of the six sub-analyses implicitly signals that the individual sibling tools exist for narrower needs. It stops short of explicitly saying when to prefer validate_sql or lint_sql alone, so no true exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_metadataARead-onlyIdempotentInspect
Use this when the user wants the tables, columns, and functions a SQL query references (e.g. for lineage or impact analysis). Returns {tables, columns, functions}.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the return contract {tables, columns, functions}, which is the only place the agent learns output shape since there is no output schema. It does not say what happens with unparseable or dialect-specific SQL.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler: the trigger condition comes first and the return shape second. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, idempotent extraction tool this is nearly sufficient: usage trigger, output keys, and a fully documented parameter. The only missing element is failure behavior for invalid SQL, which is minor given the low complexity and full annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single "sql" parameter is already fully documented as "The SQL string to analyze." The description adds no syntax, dialect, or size guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it extracts the tables, columns, and functions a SQL query references. The output-key enumeration makes it distinguishable from siblings like format_sql or lint_sql, though it never explicitly contrasts itself with parse_sql or analyze_sql, which could sound similar to an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user wants ... (e.g. for lineage or impact analysis)" gives a clear triggering condition plus concrete scenarios. It does not, however, name an alternative tool or state when NOT to use this one versus parse_sql/analyze_sql.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_sqlARead-onlyIdempotentInspect
Use this when the user wants SQL pretty-printed or reformatted: one clause per line, optional upper-case keywords and trailing semicolon. Comments are preserved; unplaceable optimizer hints are refused. Returns {formatted_sql, options}.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to format | |
| indent_size | No | Spaces per indent level for nested blocks such as CREATE TABLE columns; clauses always start at column 0. 0 puts each statement on one line (default: 2) | |
| add_semicolon | No | Append a trailing semicolon (default: false) | |
| uppercase_keywords | No | true upper-cases all SQL keywords (AND, IN, CASE, ...), but not data type names. false keeps the formatter's casing: clause keywords (SELECT, FROM, WHERE, ...) upper-case, other keywords (e.g. like) may keep their input case (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, read-only, idempotent, non-destructive operation. The description adds meaningful behavior beyond annotations: comments are preserved, unplaceable optimizer hints are refused, and the return shape is {formatted_sql, options}. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the usage trigger, followed by key formatting behavior, edge cases, and return shape. Every sentence contributes useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the fully specified input schema and annotations, the description covers the purpose, main options, edge-case behavior, and return keys. It is nearly complete, though the returned 'options' object is not expanded and there is no output schema to rely on for that detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already well documented in the schema. The description reinforces optional uppercase keywords and trailing semicolon behavior, but it does not mention indent_size or add meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: pretty-printing/reformatting SQL, with concrete formatting behavior. It is clearly distinguishable from siblings like lint_sql, validate_sql, and analyze_sql by being purely cosmetic, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Use this when the user wants SQL pretty-printed or reformatted.' That is strong usage guidance, but it does not state when not to use it or explicitly route to validation/linting alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_sqlARead-onlyIdempotentInspect
Use this when the user wants SQL style feedback. Applies the same 10 rules as gosqlx lint: L001 trailing whitespace, L002 mixed indentation, L003 consecutive blank lines, L004 indentation depth, L005 line length (>100), L006 column alignment, L007 keyword case (upper), L008 comma placement (trailing), L009 aliasing consistency, L010 redundant whitespace. Returns {violation_count, violations}.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to lint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds value by enumerating the exact rule set applied and by specifying the return shape '{violation_count, violations}', which is otherwise undocumented since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the usage trigger, followed by scope (the rule set) and then the return contract in a compact form. The L001-L010 enumeration is long but each entry is terse and genuinely informative, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-input, read-only lint tool with no output schema, the description supplies the missing return shape and the rule scope, which is most of what an agent needs. It omits only minor items such as SQL dialect handling and output ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `sql` parameter, so the schema already carries the semantics and the baseline is 3. The description adds no syntax, size, or dialect constraints beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (SQL style linting) with an explicit rule inventory (L001-L010) and scoping to the `gosqlx lint` rule set. This clearly separates it from siblings like validate_sql (correctness), security_scan (vulnerabilities), and format_sql (mutation of the SQL), so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with a clear trigger condition, 'Use this when the user wants SQL style feedback,' which is a genuine when-to-use statement. It does not, however, explicitly name the alternatives (format_sql/validate_sql) or state when not to use it, so the agent must infer the boundary from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_sqlARead-onlyIdempotentInspect
Use this when the user wants to know how SQL parses: returns an AST summary with the statement count and the type of each statement, optionally for a specific dialect. GO batch separators are excluded from the count.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to parse | |
| dialect | No | SQL dialect: generic, postgresql, mysql, mariadb, sqlserver, oracle, sqlite, snowflake, bigquery, redshift, clickhouse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description rightly focuses on behavior beyond that: what the response contains and the non-obvious quirk that GO batch separators are excluded from the statement count. No mention of size limits or dialect fallback behavior, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the usage trigger front-loaded and the return semantics immediately after. The clause about GO separators is a worthwhile edge case rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey return shape, and it does (AST summary, count, statement types). Combined with full schema coverage and read-only annotations, an agent has what it needs; only the default-dialect behavior is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the dialect enum lists every accepted value, so the schema carries the load. The description only adds "optionally for a specific dialect" on top of that, which restates rather than enriches parameter meaning (e.g., what happens when dialect is omitted).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (parse SQL) and, unusually, spells out the return payload: an AST summary with statement count and per-statement type. That output shape implicitly separates it from validate_sql/lint_sql/format_sql, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user wants to know how SQL parses" gives a clear trigger condition, and the listed return fields (statement count, statement types) reinforce which questions it answers. It stops short of naming analyze_sql as the alternative or saying when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_scanARead-onlyIdempotentInspect
Use this when the user wants SQL checked for injection patterns: tautologies, UNION attacks, stacked queries, comment bypasses, and more. Returns findings with severity counts.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to scan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by naming the detection categories and stating the response shape (findings with severity counts), which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the use condition front-loaded and the return summary appended. 'and more' is mildly vague filler, but overall nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only, closed-world scan with full annotation coverage and a stated return summary, the description is nearly complete. The only gap is the absence of any dialect/input-size caveat or a note on how it differs from the lint/validate siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema fully documents 'sql'. The description adds no syntax, size, or dialect constraints (e.g. whether multi-statement input is allowed), leaving the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('SQL checked for injection patterns') and enumerates the detection classes (tautologies, UNION attacks, stacked queries, comment bypasses). It is clearly distinct from format_sql/parse_sql, though it doesn't explicitly draw the boundary against the closest siblings lint_sql, validate_sql, and analyze_sql.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user wants SQL checked for injection patterns' gives a concrete trigger condition tied to user intent. It offers no when-not guidance and never names the adjacent siblings (validate_sql, lint_sql), so an agent must infer that security scanning is separate from correctness linting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_sqlARead-onlyIdempotentInspect
Use this when the user wants to know whether a SQL statement is syntactically valid, optionally for a specific dialect. Returns {valid: bool, error?: string, dialect?: string}.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL string to validate | |
| dialect | No | SQL dialect: generic, postgresql, mysql, mariadb, sqlserver, oracle, sqlite, snowflake, bigquery, redshift, clickhouse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description goes further by disclosing the return shape {valid, error?, dialect?}, which is genuinely useful behavioral context given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the usage condition comes first and the return contract second, with no filler or repetition. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with no output schema, the description supplies the missing piece: the response structure and its optional fields. Nothing essential for correct invocation is absent, though a note on how invalid SQL is reported (vs. an error thrown) would close the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum for dialect is fully enumerated in the schema, so the parameters are already documented. The description only echoes that the dialect is optional ('optionally for a specific dialect'), adding no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('validate' a 'SQL statement') plus the scoping detail 'syntactically valid' and optional dialect targeting. It clearly differs in intent from siblings like format_sql or parse_sql, though it never names an alternative to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use this when the user wants to know whether a SQL statement is syntactically valid.' This is a clear context for invocation. It stops short of exclusions or naming the neighboring tools (lint_sql, parse_sql) that an agent might otherwise confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.17.0- Changed
format_sql1 field changed- changed
Input schema / properties / uppercase_keywords / descriptionPrevious value: -"true upper-cases all SQL keywords (AND, IN, CASE, ...), but not data type names. false keeps the formatter's casing: clause keywords (SELECT, FROM, WHERE, ...) upper-case, other keywords (e.g. and, or) may keep their input case (default: false)"New value: +"true upper-cases all SQL keywords (AND, IN, CASE, ...), but not data type names. false keeps the formatter's casing: clause keywords (SELECT, FROM, WHERE, ...) upper-case, other keywords (e.g. like) may keep their input case (default: false)"
- Changed
parse_sql1 field changed- added
Input schema / properties / dialectAdded value: +{ + "description": "SQL dialect: generic, postgresql, mysql, mariadb, sqlserver, oracle, sqlite, snowflake, bigquery, redshift, clickhouse", + "enum": [ + "generic", + "postgresql", + "mysql", + "mariadb", + "sqlserver", + "oracle", + "sqlite", + "snowflake", + "bigquery", + "redshift", + "clickhouse" + ], + "type": "string" +}
2 tool updates
v1.16.1- Changed
format_sql2 fields changed- changed
Input schema / properties / indent_size / descriptionPrevious value: -"Spaces per indent level (default: 2)"New value: +"Spaces per indent level for nested blocks such as CREATE TABLE columns; clauses always start at column 0. 0 puts each statement on one line (default: 2)" - changed
Input schema / properties / uppercase_keywords / descriptionPrevious value: -"Uppercase SQL keywords (default: false)"New value: +"true upper-cases all SQL keywords (AND, IN, CASE, ...), but not data type names. false keeps the formatter's casing: clause keywords (SELECT, FROM, WHERE, ...) upper-case, other keywords (e.g. and, or) may keep their input case (default: false)"
- Changed
validate_sql2 fields changed- changed
Input schema / properties / dialect / descriptionPrevious value: -"SQL dialect: generic, mysql, postgresql, sqlite, sqlserver, oracle, snowflake"New value: +"SQL dialect: generic, postgresql, mysql, mariadb, sqlserver, oracle, sqlite, snowflake, bigquery, redshift, clickhouse" - changed
Input schema / properties / dialect / enumPrevious value: -[ - "generic", - "mysql", - "postgresql", - "sqlite", - "sqlserver", - "oracle", - "snowflake" -]New value: +[ + "generic", + "postgresql", + "mysql", + "mariadb", + "sqlserver", + "oracle", + "sqlite", + "snowflake", + "bigquery", + "redshift", + "clickhouse" +]
7 tool updates
v1.12.1- First observed
analyze_sql - First observed
extract_metadata - First observed
format_sql - First observed
lint_sql - First observed
parse_sql - First observed
security_scan - First observed
validate_sql
TDQS
Scored across 7 tools
Each tool has a distinct primary action: format, parse, validate, lint, security scan, metadata extraction, and a composite analysis report. The main ambiguity is that `analyze_sql` overlaps with all the individual tools by running them concurrently, so an agent may sometimes choose the composite instead of a targeted tool. Descriptions mitigate this by framing `analyze_sql` as a full review, but the boundary is not perfectly sharp.
Six of seven tools follow a clear verb_noun snake_case pattern: format_sql, parse_sql, analyze_sql, extract_metadata, lint_sql, and validate_sql. `security_scan` deviates slightly because it is a noun compound rather than verb_noun, but it remains readable and thematically consistent.
Seven tools is well-scoped for a SQL analysis and formatting server. Each tool corresponds to a meaningful operation, and there are no redundant or trivial entries beyond the intentional composite `analyze_sql`.
The surface covers the full SQL analysis lifecycle: validation, parsing, formatting, linting, security scanning, metadata extraction, and a composite review. There are no obvious dead ends for the stated domain.
Maintenance
Related MCP Connectors
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
DBRE-grade SQL analysis inside any MCP client. No connection. No install. Paste a query.
Detects database migration table locks, terraform cost leaks, and OWASP API flaws.
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Related MCP Servers
- AlicenseAqualityAmaintenanceAllows AI assistants to list tables, read data, and execute SQL queries through a controlled interface, making database exploration and analysis safer and more structured.324,187 PyPI1,405MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol (MCP) server implementation for DuckDB, providing database interaction capabilities through MCP tools. It would be interesting to have LLM analyze it. DuckDB is suitable for local analysis.6,300 PyPI179MIT

mcp-clickhouseofficial
AlicenseAqualityAmaintenanceClickHouse database integration with schema inspection and query capabilities3899Apache 2.0- AlicenseBqualityCmaintenanceAdded support for STDIO mode and SSE mode Added support for multiple SQL execution, separated by ";" Added ability to query database table names and fields based on table comments Added SQL Execution Plan Analysis Added Chinese field to pinyin conversion557 PyPI250MIT