MCP server for SQLite files. Supports Datasette-compatible metadata!
Project description
mcp-sqlite
Provide useful data to AI agents without giving them access to external systems. Compatible with Datasette for human users!
Quickstart
- Install uv.
- Create or download a SQLite database file.
- Optionally create a metadata file for your dataset. See Datasette metadata docs for details.
- Create an entry in your MCP client for your database and metadata
{ "mcpServers": { "sqlite": { "command": "uvx", "args": [ "mcp-sqlite", "/absolute/path/to/database.db", "--metadata", "/absolute/path/to/metadata.yml" ] } } }
Your AI agent should now be able to use mcp-sqlite tools like sqlite_get_catalog and sqlite_execute!
Exploring with MCP Inspector
Use the MCP Inspector dashboard to interact with the SQLite database the same way that an AI agent would:
- Install npm.
- Run:
npx @modelcontextprotocol/inspector uvx mcp-sqlite path/to/database.db --metadata path/to/metadata.yml
Exploring with Datasette
Since mcp-sqlite metadata is compatible with the Datasette metadata file, you can also explore your data with Datasette:
uvx datasette serve path/to/data.db --metadata path/to/metadata.yml
Compatibility with Datasette allows both AI agents and humans to easily explore the same local data!
Motivation
As AI agents get smarter and more capable, the pressure to build and iterate AI-powered applications increases proportionally. Malicious users can take advantage of AI agents' intelligence and access to access other users' data. mcp-sqlite allows AI agents to have all the data they need in a local SQLite database, without any access to external systems.
MCP Tools provided by mcp-sqlite
- sqlite_get_catalog(): Tool the agent can call to get the complete catalog of the databases, tables, and columns in the data, combined with metadata from the metadata file.
In an earlier iteration of
mcp-sqlite, this was a resource instead of a tool, but resources are not as widely supported, so it got turned into a tool. If you have a usecase for the catalog as a resource, open an issue and we'll bring it back! - sqlite_execute(sql): Tool the agent can call to execute arbitrary SQL. The table results are returned as HTML. For more information about why HTML is the best format for LLMs to process, see Siu et al.
- sqlite_execute_main_{canned query name}({canned query args}): A tool is created for each canned query in the metadata, allowing the agent to run predefined queries without writing any SQL.
Usage
Command-line options
usage: mcp-sqlite [-h] [-m METADATA] [-w] [-v] sqlite_file
CLI command to start an MCP server for interacting with SQLite data.
positional arguments:
sqlite_file Path to SQLite file to serve the MCP server for.
options:
-h, --help show this help message and exit
-m METADATA, --metadata METADATA
Path to Datasette-compatible metadata JSON file.
-w, --write Set this flag to allow the AI agent to write to the database. By default the database is opened in read-only
mode.
-v, --verbose Be verbose. Include once for INFO output, twice for DEBUG output.
Metadata
Hidden tables
Hiding a table with hidden: true will hide it from the catalog returned by the MCP tool sqlite_get_catalog().
However, note that the table will still be accessible by the AI agent!
Never rely on hiding a table from the catalog as a security feature.
Canned queries
Canned queries are each turned into a separate callable MCP tool by mcp-sqlite.
For example, a query named my_canned_query will become a tool sqlite_execute_main_my_canned_query.
The canned queries functionality is still in active development with more features planned for development soon:
| Datasette canned query feature | Supported in mcp-sqlite? |
|---|---|
| Displayed in catalog | ✅ |
| Executable | ✅ |
| Titles | ✅ |
| Descriptions | ✅ |
| Parameters | ✅ |
| Explicit parameters | ❌ (planned) |
| Hide SQL | ✅ |
| Fragments | ❌ (not planned) |
| Write restrictions on canned queries | ❌ (planned) |
| Magic parameters | ❌ (not planned) |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_sqlite-0.1.2.tar.gz.
File metadata
- Download URL: mcp_sqlite-0.1.2.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a136ba733b4519f06651be3b15fc63a20395ab73520e67363fa8f2d737cd5e2d
|
|
| MD5 |
48dceeed3c779960f47e9d7fe46dc017
|
|
| BLAKE2b-256 |
42a098e368d892b50e91f36dc13cfde89434e29162d1957c22e8fd1a2c4507d0
|
Provenance
The following attestation bundles were made for mcp_sqlite-0.1.2.tar.gz:
Publisher:
publish-to-test-pypi.yml on panasenco/mcp-sqlite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_sqlite-0.1.2.tar.gz -
Subject digest:
a136ba733b4519f06651be3b15fc63a20395ab73520e67363fa8f2d737cd5e2d - Sigstore transparency entry: 230308988
- Sigstore integration time:
-
Permalink:
panasenco/mcp-sqlite@3e9f2f868e9929b82458a075e403606d55ad80c1 -
Branch / Tag:
refs/tags/0.1.2 - Owner: https://github.com/panasenco
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-test-pypi.yml@3e9f2f868e9929b82458a075e403606d55ad80c1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_sqlite-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mcp_sqlite-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1ee7522df5a60cf7267cc7f04c7d12a273b04df1873f71ad98efe7428f45e44
|
|
| MD5 |
eb18c58b05665bfefdacd23794b25fde
|
|
| BLAKE2b-256 |
e47c1d4dd198e665b5f1e2f1060a019d0e7aa95da48fdec4990a194673a971e6
|
Provenance
The following attestation bundles were made for mcp_sqlite-0.1.2-py3-none-any.whl:
Publisher:
publish-to-test-pypi.yml on panasenco/mcp-sqlite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_sqlite-0.1.2-py3-none-any.whl -
Subject digest:
d1ee7522df5a60cf7267cc7f04c7d12a273b04df1873f71ad98efe7428f45e44 - Sigstore transparency entry: 230308993
- Sigstore integration time:
-
Permalink:
panasenco/mcp-sqlite@3e9f2f868e9929b82458a075e403606d55ad80c1 -
Branch / Tag:
refs/tags/0.1.2 - Owner: https://github.com/panasenco
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-test-pypi.yml@3e9f2f868e9929b82458a075e403606d55ad80c1 -
Trigger Event:
push
-
Statement type: