AutoMCP-SQL
Provides tools for interacting with SQLite databases, enabling automatic CRUD operations on any table in the database via pre-validated parameterized templates.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AutoMCP-SQLCan you show me the orders with pending status?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AutoMCP-SQL — Zero-Knowledge MCP Server
An MCP server that autonomously scans any SQLite database, generates typed CRUD tools for every table it discovers, builds a schema-aware prompt explaining joins/relationships, and enforces Zero-Knowledge security — the LLM never writes raw SQL, only calls pre-validated parameterized templates.
What It Does
Feature | Detail |
Auto-Discovery | Scans |
CRUD Generation | Creates |
Schema Prompt | Injects table columns + foreign-key relationships as MCP instructions |
Zero-Knowledge SQL | Instead of allowing the LLM to write arbitrary SQL (which risks SQL injection and destructive operations), the server generates isolated CRUD tools (Create, Read, Update, Delete) in memory for each table. The LLM interacts with these safe, pre-validated python templates |
Configurable DB | Point at any SQLite file via |
Related MCP server: Manual SQLite MCP Server
Project Structure
AutoMCP-SQL/
├── server.py # MCP server — scans DB, generates tools, starts server
├── setupdb.py # One-time script to create and seed legacy.db for testing
├── legacy.db # SQLite database (auto-created by setupdb.py)
├── pyproject.toml # Dependencies managed by uv
├── uv.lock # Lockfile — guarantees reproducible installs
└── README.mdTech Stack
Tool | Why |
Minimal decorator-based MCP server; zero boilerplate for tool registration | |
sqlite3 (stdlib) | No extra dependency; sufficient for parameterized CRUD on any SQLite file |
uv | 10-100× faster than pip; lockfile guarantees reproducible installs across machines |
MCP (Model Context Protocol) | Standard protocol for giving LLMs structured, auditable tool access |
Prerequisites
Python 3.11+
uv — fast Python package/project manager
Claude Desktop — to connect the MCP server (optional)
Install uv if you don't have it:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Setup
1. Clone the repository
git clone https://github.com/Mav977/AutoMCP-SQL.git
cd AutoMCP-SQL2. Install dependencies
uv syncThis reads uv.lock and recreates the exact virtual environment.
3. Seed the demo database
uv run setupdb.pyThis creates legacy.db in the project root with sample tables (users, orders, products, etc.) so you can test immediately.
Using your own database? Skip this step and point
DB_PATHat your existing.dbfile (see Configuration below).
Example: Claude Desktop Configuration
You can access the configuration file directly from within the app:
Open Claude Desktop.
Navigate to Settings.
Select the Developer tab.
Click Edit Config to open the
claude_desktop_config.jsonfile in your default text editor.
2. Add the MCP server entry
Replace the path below with the absolute path to your cloned server.py:
Windows:
{
"mcpServers": {
"AutoMCP-SQL": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"C:\\Users\\YourName\\Desktop\\Projects\\AutoMCP-SQL\\server.py"
],
"env": {
"DB_PATH": "C:\\Users\\YourName\\Desktop\\Projects\\AutoMCP-SQL\\legacy.db"
}
}
}
}macOS / Linux:
{
"mcpServers": {
"AutoMCP-SQL": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"/home/yourname/projects/AutoMCP-SQL/server.py"
],
"env": {
"DB_PATH": "/home/yourname/projects/AutoMCP-SQL/legacy.db"
}
}
}
}Important: Use double backslashes (
\\) in Windows paths inside JSON.
3. Restart Claude Desktop
Fully quit and reopen Claude Desktop. The MCP server starts automatically when Claude launches.
4. Verify the connection
Open a new conversation in Claude Desktop. Click the plus icon (+) in the chat input area, select Connectors, and then click Manage connectors. Here, you will see AutoMCP-SQL listed along with all the tools the MCP has access to (like get_users, create_orders, etc.).
You can also just ask Claude:
"What tables do you have access to?"
Claude will use the injected schema prompt to describe the database structure without querying it.
Using Your Own Database
Set DB_PATH in the config to point at any existing SQLite file:
"env": {
"DB_PATH": "C:\\path\\to\\your\\database.db"
}The server will scan it on startup and auto-generate tools for every table it finds — no code changes needed.
Configuration
Environment Variable | Default | Description |
|
| Path to the SQLite database file |
How Zero-Knowledge Security Works
The server never exposes raw SQL execution to the LLM. Instead:
On startup,
scan_db()reads the schema and builds a natural-language prompt describing tables and relationships.For each table, four tool functions are registered with hard-coded SQL templates:
get_<table>→SELECT * FROM <table> WHERE col = ?create_<table>→INSERT INTO <table> (cols) VALUES (?)update_<table>→UPDATE <table> SET col = ? WHERE id = ?delete_<table>→DELETE FROM <table> WHERE id = ?
All values are passed as parameterized arguments — never string-interpolated into queries.
Claude can only call these named tools; it has no mechanism to execute arbitrary SQL.
This means even a prompt-injected or jailbroken model cannot run DROP TABLE or exfiltrate data via UNION — the attack surface is limited to the four CRUD templates.
Troubleshooting
Server doesn't appear in Claude Desktop
Wait a few seconds; it may take some time to load.
Double-check the path in
claude_desktop_config.json— it must be the absolute path toserver.py, not a folder.Make sure
uvis on your system PATH (open a new terminal and runuv --versionto verify).Fully quit Claude Desktop (system tray on Windows, Cmd+Q on Mac) and reopen it.
DB_PATH does not exist error
Run uv run setupdb.py first to create legacy.db, or update DB_PATH in the config to point at an existing database.
Tools not showing up after config change Claude Desktop only reads the config on launch. Fully restart it after any config edits.
Available Tools
12 toolscreate_ordersA
Insert a new row into orders. data = JSON string like '{"col":"val"}'.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the behavioral disclosure burden. It states the action ('Insert') but doesn't disclose side effects, validation behavior, or response handling. It also doesn't clarify whether the operation is idempotent or whether it returns the created record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the main purpose front-loaded and a compact example. No redundant information, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the existence of an output schema, the description covers the essential operation. However, it lacks information about required fields or constraints, and the generic example may not fully prepare an agent to construct valid data without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines 'data' as a string with no description. The description compensates by specifying that data is a JSON string and provides an example format ('{"col":"val"}'), which adds meaning beyond the schema. However, it doesn't enumerate valid column names for the orders table, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Insert a new row into orders.' This provides a specific verb and resource, and the resource name distinguishes it from sibling create_* tools like create_users or create_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for adding new order records, matching the name create_orders. However, it doesn't explicitly say when to use it versus alternatives, nor does it mention any prerequisites or exclusions, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_productsA
Insert a new row into products. data = JSON string like '{"col":"val"}'.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the operation and data format, with no mention of side effects, validation behavior, permissions, or error handling. For a mutation tool, this is a minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with a practical example. Every word earns its place, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) and has an output schema, so the description need not explain return values. It covers the essential input format. However, it omits any mention of validation constraints or operational behavior, leaving minor gaps for an agent to discover at runtime.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description compensates well by explaining that 'data' is a JSON string and providing a concrete example ('{"col":"val"}'). This adds meaningful context about the expected format beyond the schema's bare type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Insert a new row') and the resource ('into products'), which is specific and distinct from sibling tools like update_products or delete_products. The verb 'Insert' is unambiguous for a create operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating new products but provides no explicit guidance on when to use this tool versus alternatives (e.g., update_products). The intended use is clear from the verb and resource name, but there is no stated exclusions or context about prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_usersA
Insert a new row into users. data = JSON string like '{"col":"val"}'.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses that the tool performs an insert and specifies that the data must be a JSON string of column-value pairs with an example. However, it does not mention potential side effects, permissions, idempotency, or error behavior. This is minimal but sufficient for a simple CRUD tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence followed by a concrete example. It is front-loaded with the action and resource, and every word adds value. No unnecessary fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and an output schema is present, the description adequately covers the input format and the action. It does not delve into column specifics or assume constraints, but for a simple insert operation with an output schema, the essential information is provided. The lack of explicit usage guidance is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'data' as a string with no description. The description enriches this by explaining the expected format: a JSON string like '{"col":"val"}'. This guidance is crucial for correct usage and fully compensates for the 0% schema description coverage, though it could be more explicit about column names or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Insert a new row into users', identifying both the action (insert) and the target resource (users). This distinguishes it from the sibling tools like delete_users, get_users, and update_users, and from create tools for other resources such as products or orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates use for creating a new user record, but it offers no explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. The intended usage is clear from the verb and resource name, but it remains implicit rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ordersB
Delete a row from orders by id.
| Name | Required | Description | Default |
|---|---|---|---|
| row_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Delete a row,' which implies destructiveness but does not disclose whether the deletion is permanent, cascades to related data, is idempotent, or what happens when the row_id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous words. It efficiently conveys the essential information for a simple delete operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter delete tool, the description covers the core purpose and parameter adequately. The presence of an output schema means return values need not be described. It is not rich in side-effect details, but the simplicity of the tool makes it reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for row_id. The description's phrase 'by id' clarifies that row_id is the identifier, but no further meaning or constraints are provided. It adds minimal but useful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the target resource (orders), and the criterion (by id). This distinguishes it from sibling tools such as get_orders, create_orders, and update_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no caution about the irreversibility of the deletion. It only states what the tool does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_productsA
Delete a row from products by id.
| Name | Required | Description | Default |
|---|---|---|---|
| row_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'delete' which indicates destructiveness, but it does not mention whether the deletion is permanent, if there are side effects, or any authorization requirements. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that leads with the verb and resource. There is no redundancy or filler, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema provided. The description covers the core action and parameter purpose, but it lacks details about error behavior, idempotency, or prerequisites. Given the simplicity, it is adequate but has clear gaps in behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for the 'row_id' parameter, so the description's 'by id' provides some meaning by indicating that 'row_id' is the product's identifier. However, it does not add constraints or clarifications beyond what the schema already implies from the property name, and coverage is 0%, so the compensation is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the target resource (products), and the identifier (by id). This is specific and distinguishes it from sibling tools like delete_users and delete_orders, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when deleting a product row), but it does not explicitly state exclusions or alternatives. The context of siblings suggests it is for products only, but no direct guidance is given beyond the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_usersB
Delete a row from users by id.
| Name | Required | Description | Default |
|---|---|---|---|
| row_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Delete a row' implies mutation but does not mention irreversibility, potential cascade effects, required permissions, or behavior when the row does not exist. This is a significant gap for a deletion tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb 'Delete,' and contains no unnecessary words. It is perfectly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple with one parameter and has an output schema, the description lacks key contextual details such as whether the deletion is permanent, what happens if the row is referenced by other tables, or how errors are surfaced. Given no annotations, the description is too sparse for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (row_id) with no description in the schema (0% coverage). The description adds that deletion is done 'by id,' clarifying that row_id is the identifier to match. However, it does not provide additional constraints or context beyond the parameter name, so the compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a row from users by id' clearly states the action (delete), the resource (users), and the targeting mechanism (by id). It distinguishes itself from sibling CRUD tools like get_users, create_users, and update_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description and tool name, but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The agent can infer it is for deleting a user row, but no direct 'when to use' or 'when not to use' is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordersA
Get rows from orders. filters = JSON string like '{"col":"val"}' or empty string for all rows.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the JSON filter format and the special case for empty string, which is useful. However, it does not mention output structure (though an output schema exists), error handling, or any other behavioral traits, leaving the transparency minimal but adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that packs in the action, the resource, and the parameter format. It is front-loaded and free of unnecessary words, earning a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and an output schema, so the description need not explain return values. The parameter semantics are fully covered, and the purpose is clear. However, it lacks any mention of use cases relative to siblings or potential prerequisites, preventing a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines filters as a string with a default value and has 0% description coverage. The tool description fully compensates by specifying the exact JSON format ('{"col":"val"}') and the meaning of an empty string (all rows), adding critical meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches rows from the orders table, using the specific verb 'Get' and the resource 'rows from orders'. This distinguishes it from sibling tools like create_orders, update_orders, and delete_orders, as well as other get_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for the filters parameter (empty string returns all rows) but does not explicitly mention when to use this tool versus alternatives like create_orders or get_users. Usage is implied rather than explicitly differentiated, making it minimally viable but not richly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productsA
Get rows from products. filters = JSON string like '{"col":"val"}' or empty string for all rows.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It states the read-only nature ('Get rows') and describes the filtering mechanism and default behavior of returning all rows when filters is empty. It does not describe return format or error handling, but the presence of an output schema covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundant information. It front-loads the core purpose ('Get rows from products') and immediately follows with the parameter semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one optional parameter and an output schema, the description sufficiently covers purpose, filter usage, and default behavior. It lacks details on edge cases like invalid JSON or pagination, but these are not essential for correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description fully explains the only parameter, 'filters', providing a JSON format example and the meaning of an empty string. This is critical since the schema provides no description for this parameter, and the tool-level description compensates thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves rows from the 'products' resource, using a specific verb ('Get') and resource name. This distinguishes it from siblings like get_users and get_orders, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the filters parameter (JSON string format and empty string for all rows), but it does not explicitly discuss when to use this tool versus alternatives or mention any exclusions. Usage is implied by the tool name and resource, but no explicit comparison to siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usersA
Get rows from users. filters = JSON string like '{"col":"val"}' or empty string for all rows.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It explains the filter parameter format and that an empty string fetches all rows, providing useful behavioral context. However, it does not mention read-only status explicitly, nor potential side effects or error handling, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no fluff. The purpose is front-loaded, and the parameter explanation is directly attached.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the essential usage and parameter format. Minor gaps remain, such as how multiple filter keys are combined or if pagination exists, but these are not critical for a basic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only the parameter name and type with no description. The description adds crucial semantic meaning by specifying the JSON string format and the special empty string case, making the parameter fully understood.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves rows from the 'users' resource using the verb 'Get'. It distinguishes from sibling mutation tools (create_users, update_users, delete_users) by indicating a read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading user data but does not explicitly compare with alternatives or state when not to use. The sibling tools for the same resource are mutations, so usage is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ordersA
Update a row in orders by id. data = JSON string of fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| row_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that 'data' is a JSON string of fields to update, suggesting a partial update, but it does not disclose what happens if the row_id does not exist, whether the update is atomic, or what the response contains. The tool is a mutation, yet the description lacks important behavioral details beyond the basic update action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that front-load the primary action and then clarify the data parameter. There is no unnecessary wording, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two required parameters, no enums, no nested objects) and the presence of an output schema, the description is largely complete. It covers the core update action and the meaning of the data parameter. However, it stops short of detailing edge cases or update semantics, such as whether the update is fully out-of-the-box safe, but the output schema likely handles return value documentation, so the description is adequate for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no descriptions for its parameters (0% coverage), so the description must compensate. It adds meaning by explaining row_id as the identifier of the row to update ('by id') and data as a JSON string of fields to update. This is useful but still leaves gaps regarding the allowed structure of the JSON string and any constraints on field names, so it only partially compensates for the schema's lack of guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Update a row in orders by id.' It identifies the resource (orders) and the action (update), distinguishing it from sibling tools like update_users and update_products. The additional mention that 'data = JSON string of fields to update' clarifies the scope of the update, making the purpose highly specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for modifying existing orders, as opposed to creating or deleting them, but it does not explicitly state when to use this tool versus alternatives like create_orders or delete_orders. There is no explicit 'use this when' or 'instead of' guidance, so the usage context is only implied rather than explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_productsA
Update a row in products by id. data = JSON string of fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| row_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It states an update occurs but does not clarify whether it is a merge or replacement, what happens if the row does not exist, or any side effects. This leaves significant ambiguity for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is direct and front-loaded, with no redundant or vague content. It earns its place with high information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter CRUD tool, the description provides the essential purpose and a hint about the data parameter. However, key behaviors like partial vs. full update and handling of missing rows are not addressed, leaving gaps in completeness. The presence of an output schema mitigates some concern about return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains 'data' as a JSON string of fields to update, adding meaning beyond the schema. However, it does not specify the JSON structure or clarify how 'row_id' is used beyond the phrase 'by id', so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update a row in products by id'), specifying both the resource and the method of identification. This distinguishes it from sibling tools like get_products, create_products, and delete_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for updating existing product rows but does not explicitly discuss when to choose this tool over alternatives (e.g., create_products for new rows, delete_products for removal). No explicit exclusion or comparison with siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_usersA
Update a row in users by id. data = JSON string of fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| row_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. While it implies a mutating operation and suggests partial updates via 'fields to update', it does not disclose return values, error handling, or permission requirements, leaving significant behavioral gaps for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that delivers the core action and data format with no redundant content. It is front-loaded and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two parameters and an output schema, so the description covers the basic use case. However, the absence of annotations and behavioral details (e.g., not-found handling, update semantics) leaves some context gaps that would help in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no parameter descriptions, but the description clarifies that 'data' is a JSON string of fields to update and implies that 'row_id' is the record identifier via 'by id.' However, it lacks examples or allowed field details, so it only partially compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update'), names the resource ('users'), and specifies the identifier ('by id'), clearly distinguishing it from sibling tools like create_users, get_users, and delete_users. It also states the data format, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: updating an existing user row by its id. It does not explicitly mention exclusions or alternatives, but the context is specific enough for basic CRUD operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
12 tool updates
v0.1.0- First observed
create_orders - First observed
create_products - First observed
create_users - First observed
delete_orders - First observed
delete_products - First observed
delete_users - First observed
get_orders - First observed
get_products - First observed
get_users - First observed
update_orders - First observed
update_products - First observed
update_users
TDQS
Each tool is uniquely named with a verb (get, create, update, delete) and a specific table (users, products, orders). There is no overlap because every combination of action and table is distinct and clearly indicated by the name.
All tool names follow the same verb_noun pattern using snake_case (e.g., get_users, update_products). This is perfectly consistent across the entire set, making the tools predictable and easy to navigate.
With 12 tools, the count is well-scoped for a CRUD API covering three tables (users, products, orders). Each tool serves a clear purpose, and there is no bloat or redundancy.
Each of the three tables has complete CRUD coverage: get (read with optional filters), create (insert), update, and delete. This covers all standard lifecycle operations for a SQL-based server, leaving no obvious dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Ask questions in plain language, get answers from your business database. No SQL required.
1Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Explore, query, and inspect SQLite databases with ease. List tables, preview results, and view det…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables LLM agents to perform complete database operations on SQLite databases, including creating tables, executing queries, and managing data through CRUD operations with schema inspection capabilities.32MIT
- FlicenseNot gradedqualityDmaintenanceEnables direct interaction with a SQLite database through custom-mapped tools for creating and retrieving items. It provides structured, AI-optimized responses and manual control over database operations without requiring external API dependencies.-
- FlicenseNot gradedqualityDmaintenanceEnables SQLite database interactions including querying, updating, and schema management through structured tools.3-
- FlicenseNot gradedqualityCmaintenanceQuery SQLite databases via AI — safe read-only mode-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mav977/AutoMCP-SQL'
If you have feedback or need assistance with the MCP directory API, please join our Discord server