Kozou MCP server for AI agents providing schema introspection, table/view/function discovery, and optional RPC execution capabilities via stdio and HTTP transports
Kozou MCP server demonstrates solid definition quality with well-structured tools for database schema introspection and RPC execution. All 9 tools have descriptions (194-char baseline met), input schemas with types, and clear verb-noun naming (list_*, describe_*, search_*, call). However, parameter descriptions are sparse, most lack detail on format/constraints. Output schemas are undocumented. Error handling guidance is absent. The server targets a specialized domain (PostgreSQL schema exploration) where it excels, but lacks production-grade robustness patterns like recovery guidance, input validation rules, and per-item error reporting.
Execute an exposed RPC action (issue #103). First use describe_functions to learn the available functions, their arguments, return shape, and the schema author's @ai / @policy advisory; then call one here. It runs as the operator-configured execution role — PostgreSQL's EXECUTE privilege and the function's row-level-security policies are enforced. The input/output shape is a stable contract as of Kozou v1.6.
List the functions exposed as RPC actions (issue #103): each with its arguments, return shape, volatility/security, and the schema author's @ai / @policy advisory. Run one with the `call` tool (when enabled on this server) or POST /rpc/<schema>.<fn>.
Return the full schema + COMMENT for the given table
Return columns + purpose + underlying tables + definition for the given view
Return related tables + recommended query path for the given concept
List domain concepts (each backed by a VIEW)
Output schemas undocumented. Tools return complex nested structures (sourceSchemas, outOfScope, tables/views/functions arrays) but LLMs cannot infer field types or downstream chaining requirements.
Parameter descriptions lack format/constraint details. 'qualifiedName' (e.g. public.users) and 'schema' (default: public) lack explicit format rules, valid ranges, or error cases. LLMs cannot validate inputs before calling.
No error handling guidance. Tools lack recovery hints (e.g. 'If schema not found, try list_tables() first'). Errors will not guide LLM to next steps.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
List tables with their labels and descriptions. Also returns `sourceSchemas` (the introspected schemas) and `outOfScope` (true when the requested schema was not introspected), so an empty `tables` for an out-of-scope schema is distinguishable from an in-scope empty one. The introspected set is configured when the schema is built, not per call.
List views with their labels and purposes. Also returns `sourceSchemas` (the introspected schemas) and `outOfScope` (true when the requested schema was not introspected), so an empty `views` for an out-of-scope schema is distinguishable from an in-scope empty one.
Search the schema documentation for a substring and return ranked hits — the way to find "which tables, columns, views, functions, or enums relate to X?" without enumerating the whole catalog. Matches object names, labels, COMMENT bodies, @ai notes, @policy notes, and enum members. Each hit names what matched, which field it matched on, and a snippet, so you know which describe_table / describe_view / describe_functions call to make next. A concept (business view) is found as a "view" hit, but text unique to a concept — its example queries and join meanings — is not searched here; use list_concepts / get_concept_context for those. Reads only already-introspected metadata — no row data.
search_schema result limit defaults to 20 but caps at 100, no guidance on pagination or handling large result sets. LLMs may not know when results are truncated.
call tool (WRITE operation) lacks confirmation/dry-run pattern. Agents can execute arbitrary RPC functions without preview or rollback capability.