jmd-mcp-sql
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| database_path | No | Path to the SQLite database file. If not provided, the bundled Northwind demo database is used. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| openA | Open a SQLite database or inspect the current one. Open (# Database with path): If the file does not exist, it is CREATED as an empty
database and the response contains Inspect (# Database with no fields): Returns path, table count, and a list of all tables. Frontmatter policy: observable tolerance — unknown keys are echoed in the response as 'ignored-keys: ...'. |
| readA | Read records or schema via a JMD document (https://github.com/ostermeyer/jmd-spec). Data (# Label): exact-match lookup. Query (#? Label): QBE filter; optional pagination, projection, aggregation, and JOIN. Schema (#! Label): describe the table — columns, types, modifiers, and any sub-section constraints. Reserved DDL-object labels (dispatch to per-kind shape unless a real table by that name exists): QBE operators in #? bodies: = equality (default)
Frontmatter keys: page-size, page pagination count return only the row count select projection (comma-separated columns) join cross-table JOIN, e.g. 'Table on Col' sum, avg, min, max aggregations with optional 'as alias' group, having, sort GROUP BY / HAVING / ORDER BY Frontmatter policy: observable tolerance — unknown keys are echoed back as 'ignored-keys: …'. Debug: 'debug: sql, timing, table, plan, filters, resolved, coercions' (composable; 'debug: true' enables all). |
| writeA | Write a record or define a DDL object (https://github.com/ostermeyer/jmd-spec). Data (# Label): INSERT OR REPLACE one record. Bulk insert (# Label[]): Schema (#! Label): full SQLite DDL surface. Per-column types: integer, float, string, boolean (int in SQLite). Per-column modifiers: readonly primary key (single-col); do not supply on insert optional NULL allowed = DEFAULT value (number, string, CURRENT_TIMESTAMP) a|b|c enum form — generates a CHECK (col IN (…)) Table-level constraints as sub-sections: primary-key[] composite PK (column names)unique[] UNIQUE constraints (each entry one or more cols)check[] raw CHECK expressionsreferences[] single-col FKs in form 'local: Table.foreign'Inline DDL objects under #! Table (created atomically with the table): Index[] name, columns, optional unique / whereTrigger[] name, when, event, body, optional conditionTop-level DDL-object documents: Virtual tables — Existing tables: writes are additive — only new columns are added. Constraint or column-type changes need 'action: rebuild' frontmatter, which runs the SQLite table-rebuild dance atomically (data preserved over the column intersection; pre-existing dependent indexes and triggers must be redeclared inline in the rebuild document). Frontmatter policy: observable tolerance. Frontmatter keys: action (= 'rebuild'), debug. Debug: 'debug: sql, timing, table'. |
| deleteA | Delete records or drop a DDL object (https://github.com/ostermeyer/jmd-spec). Delete (#- Label): filter-based delete (≥1 field required). Bulk delete (#- Label[]): primary-key list (or objects for composite keys). Schema (#! Label): drop a DDL object. Each kind needs its own confirm-key: Tables / views (legacy): confirm: drop-table Indexes: confirm: drop-index Triggers: confirm: drop-trigger Views (preferred over the legacy drop-table path): confirm: drop-view Frontmatter policy: strict refusal — unknown keys cause an error. Accepted keys: confirm, debug. Debug: 'debug: sql, timing, table'. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 4 tools
The four tools are broadly distinct: open manages the database connection/inspection, read queries records/schema, write creates/updates records and DDL, and delete removes records/drops objects. A minor overlap exists between open's inspect mode and read's #! Database schema listing, which could cause an agent to pick either for listing tables.
All tool names are single-word lowercase verbs (open, read, write, delete), forming a perfectly consistent naming style. There is no mixing of conventions or verb patterns.
Four tools is a well-scoped count for a SQLite interface, with each tool covering a fundamental operation: connection, read, write, delete. Although each tool is internally rich with sub-commands, the top-level surface is minimal and each tool earns its place.
The surface covers the full database lifecycle: opening/creating a database, reading and querying data/schema, inserting/replacing records and defining DDL objects, and deleting records or dropping DDL objects. No obvious dead ends exist for the stated JMD-document-based SQLite purpose.