{
  "markdown": "# Strut Stack SQL\n\n**Light strut. Extreme load.**\n\nToken-efficient [MCP](https://modelcontextprotocol.io) server for **MySQL**, **PostgreSQL**, and **SQLite** — written in Rust. Part of the [StrutStack](https://github.com/rzlco666/strut-stack) ecosystem; usable standalone with any agent client.\n\n[![Latest release](https://img.shields.io/github/v/release/rzlco666/strut-stack-sql)](https://github.com/rzlco666/strut-stack-sql/releases/latest)\n[![CI](https://img.shields.io/github/actions/workflow/status/rzlco666/strut-stack-sql/ci.yml?branch=main)](https://github.com/rzlco666/strut-stack-sql/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nFormerly published as `mcp-sql-rust` (compat binary alias still ships in v1.0).\n\n## Mission\n\n- **Token thrift** — default **3 tools**, columnar `{cols,rows,meta}`, row/byte caps\n- **Best-practice Rust** — AST SQL guard before pool checkout, lean release binary\n- **Multi-engine** — PostgreSQL + MySQL + SQLite in one binary\n- **Ship-ready** — one-command install, stdio + Streamable HTTP, Cursor-friendly launcher\n\n## Install (one command)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/rzlco666/strut-stack-sql/main/install.sh | bash\nstrut-stack-sql --version\n```\n\nInstalls to `~/.local/bin` (also creates `mcp-sql-rust` alias). Ensure `~/.local/bin` is on your `PATH`.\n\nOther channels (Homebrew, Scoop, winget, Docker, cargo): [docs/INSTALL.md](docs/INSTALL.md).\n\n## Quick start (Cursor)\n\n```json\n{\n  \"mcpServers\": {\n    \"strut-stack-sql\": {\n      \"command\": \"strut-stack-sql\",\n      \"args\": [\"--full-tools\"],\n      \"cwd\": \"${workspaceFolder}\"\n    }\n  }\n}\n```\n\nProject `.env`:\n\n```env\nDATABASE_URL=postgresql://user:pass@127.0.0.1:5432/app\n```\n\nWithout credentials the server still **starts** (ephemeral `sqlite::memory:`) so MCP initialize succeeds; set `DATABASE_URL` for real queries.\n\nOfficial workspace launcher (loads nested `apps/api/.env`, never blocks start on dead DB):\n\n```json\n{\n  \"mcpServers\": {\n    \"strut-stack-sql\": {\n      \"command\": \"node\",\n      \"args\": [\n        \"/absolute/path/to/strut-stack-sql/packaging/cursor-mcp-launcher.mjs\",\n        \"${workspaceFolder}\"\n      ]\n    }\n  }\n}\n```\n\n## Why this shape\n\n| Choice | Detail |\n|--------|--------|\n| Default tools | `search_objects`, `execute_sql`, `analyze_query_performance` |\n| Extra tools | `--full-tools` (+ DDL aliases need `--allow-ddl`) |\n| Results | Columnar JSON only by default (token-efficient) |\n| Guard | `sqlparser` AST; multi-statement deny; write tiers; complexity limits |\n| Timeouts | Client timeout + PG `statement_timeout` / MySQL `max_execution_time` |\n| Transports | stdio · `--http 127.0.0.1:8080` (`/mcp`, `/healthz`) |\n\nMeasured RSS / cold-start vs Node rivals (same seed query): [docs/BENCHMARKS.md](docs/BENCHMARKS.md). We do **not** invent QPS leaderboards.\n\n## CLI\n\n```bash\nstrut-stack-sql --version\nstrut-stack-sql                          # stdio, read-only\nstrut-stack-sql --allow-writes\nstrut-stack-sql --full-tools\nstrut-stack-sql --http 127.0.0.1:8080\n```\n\n## Docs\n\n| Doc | Purpose |\n|-----|---------|\n| [docs/QUICKSTART.md](docs/QUICKSTART.md) | First run |\n| [docs/INSTALL.md](docs/INSTALL.md) | All install channels |\n| [docs/SECURITY.md](docs/SECURITY.md) | Guard + write tiers |\n| [docs/TOOLS.md](docs/TOOLS.md) | Tool schemas |\n| [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | .env / TOML / CLI |\n| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Modules |\n| [docs/BENCHMARKS.md](docs/BENCHMARKS.md) | Reproducible harness |\n\n## Agent clients\n\nSee [AGENTS.md](AGENTS.md) for Cursor / OMNI / CodeGraph conventions.\n\n## License\n\nMIT\n",
  "bytes": 3635,
  "sha": "411b7f9ae9df391134ea8a42537e32f29a860d7050a0ad78a51f85ff35a54ada",
  "repo_slug": "rzlco666/strut-stack-sql",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rzlco666_strut_stack_sql_7f45f473/readme"
}