Skip to main content
Glama
Mav977

AutoMCP-SQL

by Mav977

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 sqlite_master at startup; no manual table registration

CRUD Generation

Creates get_, create_, update_, delete_ tools per table in memory

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 DB_PATH env var


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.md

Tech Stack

Tool

Why

FastMCP

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-SQL

2. Install dependencies

uv sync

This reads uv.lock and recreates the exact virtual environment.

3. Seed the demo database

uv run setupdb.py

This 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_PATH at your existing .db file (see Configuration below).


Example: Claude Desktop Configuration

You can access the configuration file directly from within the app:

  1. Open Claude Desktop.

  2. Navigate to Settings.

  3. Select the Developer tab.

  4. Click Edit Config to open the claude_desktop_config.json file 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

DB_PATH

./legacy.db (next to server.py)

Path to the SQLite database file


How Zero-Knowledge Security Works

The server never exposes raw SQL execution to the LLM. Instead:

  1. On startup, scan_db() reads the schema and builds a natural-language prompt describing tables and relationships.

  2. 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 = ?

  3. All values are passed as parameterized arguments — never string-interpolated into queries.

  4. 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 to server.py, not a folder.

  • Make sure uv is on your system PATH (open a new terminal and run uv --version to 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 tools
create_ordersA

Insert a new row into orders. data = JSON string like '{"col":"val"}'.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"}'.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"}'.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
row_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
row_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
row_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
row_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
row_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
row_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 12 tool updatesv0.1.0
    • First observedcreate_orders
    • First observedcreate_products
    • First observedcreate_users
    • First observeddelete_orders
    • First observeddelete_products
    • First observeddelete_users
    • First observedget_orders
    • First observedget_products
    • First observedget_users
    • First observedupdate_orders
    • First observedupdate_products
    • First observedupdate_users

TDQS

A4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    32
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -

Latest Blog Posts

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