Odel
mcp sql rust

mcp sql rust

Local
@rzlco6661RustMITUpdated 1mo ago

Token-efficient MCP server for MySQL, PostgreSQL, and SQLite

Strut Stack SQL

Light strut. Extreme load.

Token-efficient MCP server for MySQL, PostgreSQL, and SQLite — written in Rust. Part of the StrutStack ecosystem; usable standalone with any agent client.

Latest release CI License: MIT

Formerly published as mcp-sql-rust (compat binary alias still ships in v1.0).

Mission

  • Token thrift — default 3 tools, columnar {cols,rows,meta}, row/byte caps
  • Best-practice Rust — AST SQL guard before pool checkout, lean release binary
  • Multi-engine — PostgreSQL + MySQL + SQLite in one binary
  • Ship-ready — one-command install, stdio + Streamable HTTP, Cursor-friendly launcher

Install (one command)

curl -fsSL https://raw.githubusercontent.com/rzlco666/strut-stack-sql/main/install.sh | bash
strut-stack-sql --version

Installs to ~/.local/bin (also creates mcp-sql-rust alias). Ensure ~/.local/bin is on your PATH.

Other channels (Homebrew, Scoop, winget, Docker, cargo): docs/INSTALL.md.

Quick start (Cursor)

{
  "mcpServers": {
    "strut-stack-sql": {
      "command": "strut-stack-sql",
      "args": ["--full-tools"],
      "cwd": "${workspaceFolder}"
    }
  }
}

Project .env:

DATABASE_URL=postgresql://user:pass@127.0.0.1:5432/app

Without credentials the server still starts (ephemeral sqlite::memory:) so MCP initialize succeeds; set DATABASE_URL for real queries.

Official workspace launcher (loads nested apps/api/.env, never blocks start on dead DB):

{
  "mcpServers": {
    "strut-stack-sql": {
      "command": "node",
      "args": [
        "/absolute/path/to/strut-stack-sql/packaging/cursor-mcp-launcher.mjs",
        "${workspaceFolder}"
      ]
    }
  }
}

Why this shape

ChoiceDetail
Default toolssearch_objects, execute_sql, analyze_query_performance
Extra tools--full-tools (+ DDL aliases need --allow-ddl)
ResultsColumnar JSON only by default (token-efficient)
Guardsqlparser AST; multi-statement deny; write tiers; complexity limits
TimeoutsClient timeout + PG statement_timeout / MySQL max_execution_time
Transportsstdio · --http 127.0.0.1:8080 (/mcp, /healthz)

Measured RSS / cold-start vs Node rivals (same seed query): docs/BENCHMARKS.md. We do not invent QPS leaderboards.

CLI

strut-stack-sql --version
strut-stack-sql                          # stdio, read-only
strut-stack-sql --allow-writes
strut-stack-sql --full-tools
strut-stack-sql --http 127.0.0.1:8080

Docs

DocPurpose
docs/QUICKSTART.mdFirst run
docs/INSTALL.mdAll install channels
docs/SECURITY.mdGuard + write tiers
docs/TOOLS.mdTool schemas
docs/CONFIGURATION.md.env / TOML / CLI
docs/ARCHITECTURE.mdModules
docs/BENCHMARKS.mdReproducible harness

Agent clients

See AGENTS.md for Cursor / OMNI / CodeGraph conventions.

License

MIT