Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Free Sqlite

FreeNot checked

Free SQLite MCP server — hosted cloud SQLite for Claude, ChatGPT and Cursor, no file to manage

GitHubEmbed

About

Free SQLite MCP server — hosted cloud SQLite for Claude, ChatGPT and Cursor, no file to manage

README

SQLite 3.45.1 FTS5 MCP 2026-07-28 no file to ship

Should you use this?

SQLite's defining property is that it is a file. That is also the property that breaks the moment you want a language model, a CI runner and your laptop to see the same rows. This repo is about the case where you want SQLite's semantics without owning the file — a free hosted SQLite 3.45.1 with an MCP endpoint.

Be honest about when that is and is not the right call:

You want to… Best option Why
Ship a database inside an app binary or mobile app local SQLite zero latency, zero network, that is the whole design
Run a test suite against a throwaway database local SQLite (:memory:) a network round trip per statement is pure overhead
Let an LLM explore a dataset you also query yourself hosted SQLite (this) one URL, no file to attach or upload per conversation
Give a teammate read access to a scratch dataset today hosted SQLite (this) no Dropbox link, no "which version of the .db is current"
Replicate to the edge with embedded read replicas Turso / libSQL that is exactly what libSQL was forked to do
Sync a local file with a remote copy, offline-first Turso / libSQL embedded replicas + sync are a real feature, not a workaround
Get relational features SQLite genuinely lacks PostgreSQL / MySQL strict typing, RIGHT JOIN before 3.39, concurrent writers

Turso deserves a straight answer rather than a swipe: if your problem is distribution — replicas near users, offline-capable clients, a fork of SQLite with extra protocol surface — Turso and libSQL are built for it and this is not. What this gives you instead is a free instance with no card, no provisioning step, and MCP tools already wired up, which is the faster path when the problem is access rather than distribution.


The thing itself

SQLite      3.45.1
Dialect     SQLite SQL, including FTS5, JSON1, window functions, CTEs, RETURNING
Access      freebase.cloud HTTP query API, and MCP over Streamable HTTP
Endpoint    https://freebase.cloud/api/mcp/YOUR_TOKEN
Auth        none — the token is a path segment
Cost        free; suited to development, prototyping and small production workloads

The engine evaluates every statement, so type affinity, PRAGMA behaviour, rowid semantics and FTS5 ranking are SQLite's, not an approximation. SELECT sqlite_version(); returns 3.45.1.

There is no .db file for you to download and no sqlite3 shell attached to a local path — the database lives on the service. Export by selecting your data out; see examples/snapshot_export.sh, which writes a portable .sql file you can feed straight into a local sqlite3.


Setup, in four steps

  1. Sign up at freebase.cloud — no credit card — and create a session with the SQLite engine.
  2. Settings → MCP → New Token → pick the connection → copy the URL.
  3. Point a client at it. Everything below assumes the connection is named chess.
  4. Ask the model to list tables. If it comes back with a list, you are done.
# Claude Code
claude mcp add --transport http chess https://freebase.cloud/api/mcp/YOUR_TOKEN
Other clients (Cursor, VS Code, Windsurf, Zed, Cline, Roo, Gemini CLI, Warp, n8n)
// Cursor — .cursor/mcp.json — url only, no type
{ "mcpServers": { "chess": { "url": "https://freebase.cloud/api/mcp/YOUR_TOKEN" } } }
// VS Code / Copilot Chat — .vscode/mcp.json — top-level key is "servers"
{
  "inputs": [{ "type": "promptString", "id": "chess-token", "description": "freebase.cloud token", "password": true }],
  "servers": { "chess": { "type": "http", "url": "https://freebase.cloud/api/mcp/${input:chess-token}" } }
}
// Windsurf — ~/.codeium/windsurf/mcp_config.json — the key is serverUrl
{ "mcpServers": { "chess": { "serverUrl": "https://freebase.cloud/api/mcp/YOUR_TOKEN" } } }
// Zed — settings.json
{ "context_servers": { "chess": { "url": "https://freebase.cloud/api/mcp/YOUR_TOKEN" } } }
// Cline — camelCase type
{ "mcpServers": { "chess": { "type": "streamableHttp", "url": "https://freebase.cloud/api/mcp/YOUR_TOKEN", "disabled": false, "autoApprove": [] } } }

Roo Code uses "type": "streamable-http" (kebab-case) in .roo/mcp.json. Gemini CLI: gemini mcp add --transport http chess <url>, and in settings.json the streamable-HTTP key is httpUrl — a bare url there means SSE, which is the deprecated transport. Warp takes the inner object without an mcpServers wrapper. n8n: MCP Client Tool node (≥ 1.104.0), Transport → HTTP Streamable, Authentication → None.

Claude Desktop, Claude web and Cowork are UI-only: Settings → ConnectorsAdd custom connector → paste → Add, then enable per conversation from the + button, as walked through in the Claude + SQLite guide. The desktop config file cannot describe a remote HTTP server. For ChatGPT: Settings → Apps → Advanced settings → developer mode → Apps → Create, auth None, Scan Tools; write access is still rolling out to Business, Enterprise and Edu workspaces.


Tools

The four tools every freebase.cloud connection exposes, plus two SQLite-specific helpers:

Tool What it returns
chess_query rows from a SELECT (or anything with RETURNING)
chess_store writes
chess_list_tables table names
chess_annotate_table acknowledgement; stores a description for the model
sqlite_master the raw schema catalogue — type, name, tbl_name, sql
sqlite_version the engine version string

sqlite_master is the one to reach for when you want a model to reproduce your schema rather than describe it: it returns the original CREATE statements verbatim, including constraints and index definitions that a column listing would lose.

Annotation, with a SQLite twist

SQLite's flexible typing means a column's declared type is a hint, not a guarantee. Tell the model what is actually in there:

chess_annotate_table(
  table: "games",
  description: "One row per game. result is stored as TEXT: '1-0', '0-1' or '1/2-1/2'
                — not a number. eco is the ECO opening code (e.g. 'B22'). ply_count is
                half-moves, so a 40-move game has ply_count 80. played_on is TEXT in
                ISO-8601 (YYYY-MM-DD) because SQLite has no DATE type."
)

The last clause prevents the most common SQLite mistake a model makes: assuming dates can be compared with > against a DATE literal, or that strftime is optional.


Dialect notes that matter

  • No DATE/DATETIME type. Dates are TEXT (ISO-8601), REAL (Julian day) or INTEGER (Unix epoch). Pick one, write it down, and use date(), strftime(), julianday() accordingly.
  • Type affinity, not type enforcement — unless you declare the table STRICT (3.37+), which this schema does for the tables where it matters.
  • AUTOINCREMENT is usually wrong. A plain INTEGER PRIMARY KEY already aliases rowid and reuses nothing you care about; AUTOINCREMENT adds a bookkeeping table for a guarantee most schemas do not need.
  • FTS5 is a virtual table, kept in sync by triggers you write. It does not update itself.
  • RETURNING works (3.35+), which makes single-statement write-and-read practical — handy when each MCP call is its own statement.
  • Window functions (3.25+), json_extract / -> / ->> (3.38+) and RIGHT/FULL OUTER JOIN (3.39+) are all available on the hosted 3.45.1 build.

Examples: a chess game archive

The dataset is a tournament archive — players, events, games, moves and an FTS5 index over annotations. Chess is a good fit here: the natural queries are recursive (move sequences), text-searchy (opening names and commentary), and analytical (score by colour, by opening, by opponent rating band). The whole archive loads into an empty SQLite session in one script.

File Language Purpose
examples/chess_archive.sql SQL STRICT tables, an FTS5 index with sync triggers, seed games, and eight analytical queries
examples/archive_client.py Python 3 MCP client: applies the schema, runs opening/result reports, demonstrates sqlite_master and FTS5 MATCH with bm25() ranking
examples/snapshot_export.sh bash + curl Dumps schema and data to a .sql file that a local sqlite3 can import unchanged
export FREEBASE_MCP_URL="https://freebase.cloud/api/mcp/YOUR_TOKEN"
export FREEBASE_CONN="chess"
export FREEBASE_NAMESPACE="chess"     # for the bash script, which uses the query API

python3 examples/archive_client.py --setup
python3 examples/archive_client.py --search "kingside attack"
./examples/snapshot_export.sh > archive.sql
sqlite3 local.db < archive.sql        # your data, on your disk, in one command

That last pair of lines is the answer to "am I locked in": the export is ordinary SQL and the import target is the same engine version you have been querying.


Limits

  • Free tier is for development, prototyping and small production workloads. No storage ceiling, uptime figure or backup schedule is claimed here — check the dashboard for what applies to your session.
  • One writer, as always. SQLite serialises writes by design. That is a feature for correctness and a ceiling for write throughput. High-concurrency write workloads want PostgreSQL.
  • No file handle. You cannot ATTACH a local database, copy the .db off with scp, or point a local sqlite3 shell at it directly. Export instead.
  • One statement per tool call; no transactions spanning multiple MCP calls.
  • Extensions you compile yourself are not loadable. FTS5, JSON1 and the standard built-ins are present.
  • Claude free tier: one custom connector.

FAQ

Is this SQLite or a SQLite-compatible reimplementation? SQLite 3.45.1. sqlite_version returns it; sqlite_master returns the real catalogue.

Can I import a CSV? Yes — turn rows into INSERT statements and send them through chess_store, or use the HTTP query API. There is no .import dot-command, because dot-commands are a feature of the sqlite3 CLI rather than the engine.

Does FTS5 ranking work? Yes, including bm25() with per-column weights and snippet() / highlight(). examples/archive_client.py --search uses all three.

Why does my ORDER BY played_on sort strangely? Almost certainly a date stored in a non-sortable format. ISO-8601 TEXT sorts correctly as text; DD/MM/YYYY does not. This is the SQLite tax and it is worth paying attention to at schema-design time.

Is STRICT worth using? For any table where a wrong type would be a bug, yes. It turns SQLite's flexible typing off per table, which is often what people assumed they had.

Links


freebase.cloud is an independent service and is not affiliated with the SQLite project, Turso, Anthropic, OpenAI, Google, Microsoft or Cursor.

from github.com/freebase-cloud/free-sqlite-mcp-server

Installing Free Sqlite

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/freebase-cloud/free-sqlite-mcp-server

FAQ

Is Free Sqlite MCP free?

Yes, Free Sqlite MCP is free — one-click install via Unyly at no cost.

Does Free Sqlite need an API key?

No, Free Sqlite runs without API keys or environment variables.

Is Free Sqlite hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Free Sqlite in Claude Desktop, Claude Code or Cursor?

Open Free Sqlite on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Free Sqlite with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All data MCPs