Skip to main content
Glama
MCPg - Production-grade PostgreSQL MCP Server

MCPg - Production-grade PostgreSQL MCP Server

Generate Diesel schema

generate_diesel_schema
Read-only

Generate a Diesel ORM (Rust) schema.rs from a PostgreSQL schema, including table! macros, nullable column types, joinable! declarations, and multi-table join support.

Instructions

Read a PostgreSQL schema and emit a Diesel ORM (Rust) schema.rs. One table! macro per table with column SQL types, Nullable<T> for nullable columns, plus joinable! declarations for single-column intra-schema FKs and an allow_tables_to_appear_in_same_query! macro so multi-table joins type-check. Enum types are emitted as Text-backed wrapper enums in a pg_enum module so the output works without diesel_derive_enum. Composite FKs are a documented v1 gap. Schema/table/column names must be plain identifiers ([A-Za-z_][A-Za-z0-9_]*); delimited names (hyphens, spaces, mixed-case-only) are not supported here because they become source identifiers in generated code — use SQL tools (export_table, dump_database) for those objects. See docs/identifier-policy.md.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "schema": "<schema>"
    },
    "name": "generate_diesel_schema"
  }
}

Input Schema

NameRequiredDescriptionDefault
schemaYes
databaseNoOptional: a database id from list_databases, to target a configured secondary (read-only) database; omit for the primary. Database names that are not configured ids are rejected.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.4
    • changedInput schema / properties / database / description
      Previous value: -"Optional: target a configured secondary (read-only) database by name; omit for the primary. Call list_databases to see the configured ids."New value: +"Optional: a database id from list_databases, to target a configured secondary (read-only) database; omit for the primary. Database names that are not configured ids are rejected."
  2. First observedv0.6.8

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, it discloses exactly what gets emitted (one table! per table, Nullable<T> for nullables, joinable! for single-column intra-schema FKs, allow_tables_to_appear_in_same_query!), how enums are handled (Text-backed wrappers in a pg_enum module, no diesel_derive_enum), and a documented limitation (composite FKs are a v1 gap). That is precisely the kind of output-shape and edge-case context an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb and output artifact, then progressively narrower details (enums, FK gap, identifier policy, doc pointer). It is dense and long-ish, but each sentence carries distinct information; the only near-redundancy is restating the identifier restriction twice in different framings.

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?

With an output schema present, return-value explanation is unnecessary, and the description covers the meaningful unknowns: generated constructs, enum strategy, composite-FK limitation, and unsupported identifiers. It is silent on whether views/indexes/defaults are reflected and on failure behavior when an unsupported identifier is encountered, which keeps it short of full completeness.

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 coverage is 50%: the `database` parameter carries its own description in the schema (configured secondary, read-only, omit for primary), but the required `schema` parameter is undocumented there. The description partially compensates by specifying the identifier pattern [A-Za-z_][A-Za-z0-9_]* that schema names must satisfy, though it never states plainly that `schema` is the PostgreSQL schema whose tables are converted. Baseline 3 is appropriate.

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 first sentence states a specific verb and resource pair—read a PostgreSQL schema, emit a Diesel ORM (Rust) schema.rs—and the surrounding detail (table!, Nullable<T>, joinable!) makes it unmistakable against siblings like generate_prisma_schema or generate_drizzle_schema.

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?

It names an explicit exclusion with a routing instruction: objects with delimited names (hyphens, spaces, mixed-case-only) are not supported here and should go through export_table or dump_database instead. It does not explicitly state when to prefer this over the other ORM generators, but the target-framework specificity makes that inference safe.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools