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.
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:[email protected]: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
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
Agent clients
See AGENTS.md for Cursor / OMNI / CodeGraph conventions.
License
MIT