pgroonga-mcp
pgroonga-mcp is a read-only MCP server for PostgreSQL/PGroonga search and diagnostics.
Discovers server, extension, Groonga versions, capabilities, and supported search modes.
Lists catalog-resolved PGroonga indexes with validity, readiness, size, targets, reloptions, and normalization profiles.
Runs bounded searches on text/varchar/text[]/jsonb columns using keyword, query, prefix, exact, and regexp modes (similar reserved), with filters, snippets, column selection, and limits.
Returns non-executing EXPLAIN (FORMAT JSON) plans for validated searches.
Performs limited health checks: extension availability, read-only/writable state, potentially broken/lagged indexes, and WAL status.
Discovers normalizer profiles, normalizes text, looks up bounded dictionary variants, and validates dictionary mappings without modifying data.
Provides a setup command to register project-local MCP servers for Codex, Claude Code, OpenCode, and DSH.
Never exposes arbitrary SQL, pgroonga_command, DDL, dictionary mutation, or repair operations.
Provides read-only search and diagnostics for PostgreSQL databases with PGroonga indexes, including full-text search, index exploration, query explanations, health checks, and text normalization.
Click on "Deploy 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., "@pgroonga-mcpsearch the documents table for 'full-text search'"
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.
pgroonga-mcp
Read-only PostgreSQL search and diagnostics over the Model Context Protocol. The server discovers the installed PGroonga schema and capabilities, resolves search targets from PostgreSQL catalogs, and binds query/filter values as parameters.
It does not expose arbitrary SQL, pgroonga_command, DDL, dictionary mutation, or repair operations.
Requirements
Node.js 22 or newer.
PostgreSQL with the PGroonga extension installed.
A dedicated PostgreSQL role that is neither a superuser nor
BYPASSRLS.An MCP host that supports local stdio servers.
The npm package supplies the MCP server and a project setup command. It does not install PostgreSQL or PGroonga.
Related MCP server: PostgreSQL MCP Server
Install
For a project installation:
npm i @askdkc/pgroonga-mcpThe server can start without a database URL, so an MCP host or AI agent can use it for
tool discovery and SQL-generation workflows. Database-backed tools return a structured
database_unavailable error until a PostgreSQL URL is configured.
For a global installation:
npm i --global @askdkc/pgroonga-mcp
pgroonga-mcpThe server communicates over stdin/stdout. Logs go to stderr so they do not corrupt the MCP protocol stream.
Project setup
After installing the package in a project, run the setup command to register a project-local
pgroonga MCP server for the clients you use:
npm i @askdkc/pgroonga-mcp
npx pgroonga-mcp setupThe interactive setup lets you select Codex, Claude Code, OpenCode, and DSH (DeepSeek Harness). It writes only project files and does not modify user-global configuration or add database credentials. The generated server command uses the installed package without downloading at MCP startup:
npx --no-install pgroonga-mcpUse flags when setup must be scripted:
# Configure every supported client.
npx pgroonga-mcp setup --all
# Configure selected clients.
npx pgroonga-mcp setup --clients codex,claude,opencode
# Preview changes without writing files.
npx pgroonga-mcp setup --all --dry-run
# Replace an existing pgroonga entry after reviewing the diff.
npx pgroonga-mcp setup --clients claude --forceThe setup command creates or updates these project-scoped files:
Client | File |
Codex |
|
Claude Code |
|
OpenCode |
|
DSH |
|
Unrelated settings are preserved. If a selected file already contains a different pgroonga
entry, setup stops instead of overwriting it; use --force only after reviewing the existing
configuration. OpenCode JSONC comments may be normalized when an existing opencode.jsonc is
updated. Restart each selected client after setup. Claude Code may also ask you to approve the
project-scoped .mcp.json server.
The command is platform-neutral and uses Node.js filesystem APIs and project-relative paths. It works on macOS, Linux, and Linux environments running under Windows WSL. In WSL, run it with the Node.js and npm installation inside WSL and from the project directory visible to WSL.
Sample
See pgroonga-mcp-sample for an example of using PGroonga MCP.
MCP host configuration
The exact configuration file depends on the MCP host. A generic stdio configuration looks like this:
{
"mcpServers": {
"pgroonga": {
"command": "npx",
"args": ["--yes", "@askdkc/pgroonga-mcp"],
"env": {
"PGROONGA_DATABASE_URL": "postgresql://pgroonga_mcp@127.0.0.1:5432/app",
"PGROONGA_ALLOWED_SCHEMAS": "public",
"PGROONGA_ALLOWED_TABLES": "public.documents"
}
}
}
}The npm package name is @askdkc/pgroonga-mcp, while the installed executable remains pgroonga-mcp. Use that executable instead of npx when the package is installed globally. Do not put database passwords in a committed configuration file; use the MCP host's environment/secret facility. The server loads .env from its current working directory when present, without overriding existing process environment variables. Set PGROONGA_ENV_FILE when the project env file is elsewhere.
Database grants
Use a least-privilege role. Replace the schema, tables, and PGroonga extension schema with the names from your deployment:
CREATE ROLE pgroonga_mcp LOGIN PASSWORD 'use-a-secret-manager';
GRANT CONNECT ON DATABASE app TO pgroonga_mcp;
GRANT USAGE ON SCHEMA public, extensions TO pgroonga_mcp;
GRANT SELECT ON TABLE public.documents TO pgroonga_mcp;Grant SELECT on any NormalizerTable dictionary tables used by the configured indexes. Do not grant SUPERUSER, BYPASSRLS, or CREATE on application schemas. Keep row-level security policies enabled; each operation runs in a read-only transaction with row_security = on.
Configuration
All settings are environment variables. PGROONGA_DATABASE_URL is optional. If it is absent, a PostgreSQL URL in DATABASE_URL, POSTGRES_URL, or POSTGRESQL_URL is used when available. Non-PostgreSQL values are ignored. The default allowlist is the public schema; an empty PGROONGA_ALLOWED_TABLES allows all tables in the allowed schemas, so set it explicitly in production. Tables may be written as schema.table or as a table name.
Variable | Default | Description |
| — | Optional PostgreSQL connection URL |
|
| Project env file to load |
|
| Comma-separated schema allowlist |
| empty | Comma-separated table allowlist |
|
| PostgreSQL statement timeout |
|
| PostgreSQL lock timeout |
|
| Default search row limit |
|
| Maximum search row limit |
|
| Serialized response limit |
|
| Per-string result limit |
|
| Normalization input limit |
|
| Variant lookup limit |
|
|
|
|
| Only |
A complete development example is in .env.example. The environment example and the compact NormalizerTable fixture under examples/itaiji/ are included in the npm tarball.
Tools
pgroonga_server_info— PostgreSQL, PGroonga, Groonga, and feature capabilities.pgroonga_list_indexes— catalog-resolved PGroonga indexes and supported modes.pgroonga_search— bounded search with structured filters.pgroonga_explain_search— non-executingEXPLAIN (FORMAT JSON)for a validated search.pgroonga_health— available PGroonga health checks.pgroonga_list_normalization_profiles— discovered index normalizer chains.pgroonga_normalize_text— normalize text using a discovered index profile.pgroonga_lookup_variants— bounded NormalizerTable variant lookup.pgroonga_validate_normalization_profile— validate dictionary mappings without modifying them.
Example pgroonga_search input:
{
"target": { "schema": "public", "table": "documents", "column": "body" },
"mode": "keyword",
"query": "PGroonga",
"returnColumns": ["id", "body"],
"limit": 20
}Search supports text, varchar, text[], and jsonb targets when a compatible, valid, ready PGroonga index is discovered. Supported modes are keyword, query, prefix, exact, and regexp. similar is reserved for a later release. Compound, expression, and partial indexes are reported but are discovery-only in this release.
Normalizer profiles are read from trusted index reloptions. NormalizerTable dependencies are resolved through pgroonga_table_name; dictionary changes are reported as requiring REINDEX, and dictionary freshness remains unknown unless a future managed revision table is installed. Highlighting is disabled unless the required source-location and source-offset options are present.
Development and release checks
npm ci
npm run verify
npm pack --dry-runnpm run verify runs formatting, linting, type checking, the unit/contract tests, and the TypeScript build. The package uses prepublishOnly and prepack to repeat the relevant checks/build before publication. Once authenticated with npm and after reviewing npm pack --dry-run, publish the current version with:
npm publishThe repository is askdkc/pgroonga-mcp. The compact NormalizerTable fixture is in examples/itaiji/schema.sql.
Available Tools
9 toolspgroonga_explain_searchB
Return a non-executing EXPLAIN (FORMAT JSON) for a validated search.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| limit | No | ||
| order | No | score | |
| query | Yes | ||
| target | Yes | ||
| filters | No | ||
| snippet | No | ||
| returnColumns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| warnings | Yes | |
| usesExpectedPgroongaIndex | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool is non-executing and returns JSON format, which is a key behavioral trait. However, it does not disclose side effects, permissions, validation behavior, or error conditions, leaving some gaps in the transparency.
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 is front-loaded with the key distinction 'non-executing.' It contains no filler and is appropriately minimal, making it 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?
The tool has a complex schema with nested objects and multiple modes, yet the description gives no context about how parameters interact or what constitutes a valid search. The output schema exists, but the description remains insufficient for an agent to construct a correct request.
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 provides zero information about the 8 parameters, and schema coverage is 0%. The schema itself has enums and defaults, but the description adds no meaning beyond the field names, failing to compensate for the lack of schema descriptions.
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 returns a non-executing EXPLAIN (FORMAT JSON) for a validated search, which distinguishes it from pgroonga_search that likely executes the search. The verb 'Return' plus the resource 'EXPLAIN (FORMAT JSON)' make the purpose specific and 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 implies usage via the phrase 'non-executing' but does not explicitly state when to use this tool instead of pgroonga_search, nor provide alternative guidance. It suggests using it to preview the plan, but lacks explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_healthA
Report limited PGroonga health checks and explicitly unavailable diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| writable | Yes | |
| walStatus | Yes | |
| unavailable | Yes | |
| laggedIndexes | Yes | |
| extensionAvailable | Yes | |
| potentiallyBrokenIndexes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It does reveal that the tool reports limited checks and explicitly indicates unavailable diagnostics, which is a useful behavioral trait. However, it omits details about error handling, response semantics, and what specific checks are performed, leaving gaps that the output schema may only partially fill.
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 with no redundant wording. It front-loads the action and scope, making it easy to parse and understand.
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 that the tool has no parameters and an output schema is present, the description is sufficiently complete for an agent to select the tool. The vagueness of 'limited' is mitigated by the output schema, which likely documents the exact fields and behavior. It does not explain return values, but the output schema covers that responsibility.
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 tool has zero parameters and an empty schema, so parameter semantics are not applicable. The baseline for zero parameters is 4, and the description does not need to add parameter information.
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 'Report' and clearly identifies the resource as PGroonga health checks. The mention of 'limited' and 'explicitly unavailable diagnostics' adds scope and distinguishes it from sibling tools that handle search, indexing, or normalization.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention exclusions or when not to use it, and there is no reference to sibling tools or conditions for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_list_indexesB
List catalog-resolved PGroonga indexes and supported search modes.
| Name | Required | Description | Default |
|---|---|---|---|
| table | No | ||
| schema | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| indexes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the disclosure burden. The verb "List" strongly implies a non-mutating, read-only operation, and "catalog-resolved" adds context about how the indexes are obtained. However, it does not disclose potential caveats such as permission requirements, error behavior, or whether the operation may be expensive. This is acceptable for a simple listing tool but is not richly transparent.
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 that states the primary action and the nature of the results. Every word contributes to understanding the tool's purpose. There is no fluff, repetition, or unnecessary detail.
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, has an output schema to describe return values, and the core purpose is stated. However, the lack of parameter semantics and usage guidance means the description is not fully self-contained, especially because the optional table and schema filters are completely unexplained. Given the low schema coverage, more context is needed to be fully 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 input schema has zero description coverage for its two optional parameters (table, schema), and the description does not explain how these parameters affect the listing. Neither the schema nor the description provides meaning beyond the parameter names. The description fails to compensate for the low schema coverage, offering no guidance on filtering or optionality.
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 ("List") and a clear resource ("catalog-resolved PGroonga indexes"), and also mentions the additional output of "supported search modes." This distinguishes it from sibling tools like pgroonga_search, pgroonga_server_info, and pgroonga_list_normalization_profiles, which serve different purposes.
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 used when you need to see available PGroonga indexes and their search modes, but it provides no explicit guidance about when to prefer this tool over alternatives, nor any exclusions or prerequisites. The context is clear from the verb and object, but no direct comparison to siblings is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_list_normalization_profilesA
Discover trusted index-level normalizer chains and NormalizerTable dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| profiles | 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. The verb 'Discover' implies a read-only operation, but the description does not explicitly state that it makes no changes, whether it requires special permissions, how it handles missing indexes, or any performance implications. It only states what it returns, lacking depth expected for an unannotated 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 clear and front-loaded. Every word contributes meaning ('Discover', 'trusted', 'index-level', 'normalizer chains', 'NormalizerTable dependencies') with no filler or redundancy.
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 no-parameter tool with an output schema, the description is reasonably complete. It explains what the tool returns (normalizer chains and dependencies) and implies a read-only discovery operation. However, it does not mention any context such as when to use this over sibling tools or whether it only applies to indexes created with specific options, leaving a small 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 input schema has zero parameters, and schema description coverage is 100% (trivially). Per the rubric, the baseline for zero parameters is 4. The description does not need to elaborate on parameters since there are none, and the schema already confirms this.
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 ('Discover') and clearly identifies the resource ('trusted index-level normalizer chains and NormalizerTable dependencies'). It distinguishes this tool from siblings like pgroonga_normalize_text (which normalizes text) and pgroonga_validate_normalization_profile (which validates profiles).
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. It does not mention any sibling tools, prerequisites, or typical use cases. An agent is left to infer that this is for listing normalization profiles with no exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_lookup_variantsC
Normalize text and return bounded dictionary variants for the discovered profile.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| input | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | |
| profile | Yes | |
| variants | Yes | |
| canonical | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the burden of behavioral disclosure. 'Bounded' and 'discovered profile' are unexplained, and the description does not mention error conditions, limits, or side effects. The two-line description adds little beyond the tool's basic function.
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 that gets to the point quickly. No wasted words, but the jargon ('bounded dictionary variants', 'discovered profile') makes it less accessible. Overall, it is concise but could be clearer.
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?
An output schema exists, so return-value details are presumably covered, but the description still leaves critical context missing: what does 'bounded' mean (limit, max size?), how is the profile discovered, and what errors can occur? For a tool with two parameters and no annotations, this is insufficient for confident use.
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%, and the description does not clarify the parameters. It mentions 'text' (likely the input) but never explains that 'index' refers to a Groonga index or how it relates to the profile. With zero coverage, the description should compensate, but it doesn't.
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 states a clear action: 'Normalize text and return bounded dictionary variants.' It distinguishes itself from sibling pgroonga_normalize_text by adding the dictionary-variants return. However, 'for the discovered profile' is ambiguous and could confuse agents (which profile? how discovered?).
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 tool's intended use is implied: use when you need both normalization and dictionary-based variant lookup. But there is no explicit guidance on when to prefer this over pgroonga_normalize_text or pgroonga_search, and no mention of prerequisites (e.g., an existing index or normalization profile).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_normalize_textC
Normalize text with a discovered PGroonga index profile.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | |
| changed | Yes | |
| profile | Yes | |
| normalized | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits on its own. It does not mention whether the operation is read-only, what the output looks like, or how errors are handled if the index or profile is not found. This lack of behavioral detail leaves the agent uncertain about side effects and return values.
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, focused sentence without redundancy, making it concise and easy to parse. It front-loads the action and resource but omits necessary details; however, from a pure conciseness standpoint, it is well-structured. It loses one point because the brevity borders on under-specification.
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 two parameters, zero schema descriptions, no annotations, and a hidden output schema, the description is far from complete. It fails to explain the meaning of 'discovered,' the expected output shape, or how this tool fits into the broader PGroonga suite. An agent cannot confidently invoke this tool based solely on the provided information.
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, and the description does not explain the 'index' or 'text' parameters beyond their names. An agent cannot infer what values are valid, how they relate to the normalization process, or what 'discovered' means for the index parameter. The description fails to compensate for the schema's lack of parameter documentation.
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 states the primary action clearly: 'Normalize text with a discovered PGroonga index profile.' It names a specific verb and resource, and it is distinguishable from sibling tools like search or list operations. However, 'discovered' is vague and could confuse an agent about how the profile is obtained, so it doesn't fully earn the top score.
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 such as 'pgroonga_search' or 'pgroonga_list_normalization_profiles.' There is no mention of typical workflows, prerequisites, or exclusions, so an agent receives no help with tool selection. This is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_searchC
Execute a bounded, catalog-validated PGroonga search with structured filters.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| limit | No | ||
| order | No | score | |
| query | Yes | ||
| target | Yes | ||
| filters | No | ||
| snippet | No | ||
| returnColumns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| query | Yes | |
| target | Yes | |
| rowCount | Yes | |
| warnings | Yes | |
| truncated | Yes | |
| executionMs | Yes | |
| scoreAvailable | Yes | |
| normalizedQuery | Yes | |
| snippetAvailable | Yes | |
| normalizationProfile | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds meaningful context by stating the search is 'bounded' (enforcing limit) and 'catalog-validated' (checking target schema/table/column existence), which are useful constraints. However, it omits details like read-only behavior, error conditions, or requirements for PGroonga indexes. It provides some value beyond a bare search but leaves significant 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 a single, front-loaded sentence with no wasted words. Every phrase ('bounded', 'catalog-validated', 'structured filters') adds value and the structure is easy to scan.
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 8 parameters, 3 required, and a rich nested schema, the description is far too short to provide complete context. It does not explain the various search modes, filter operator semantics, limits, or ordering behavior. The presence of an output schema reduces the need to detail return values, but the input behavior remains under-specified. This is inadequate for a tool of this complexity.
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 for explaining parameters. It hints at 'structured filters' (mapping to the filters parameter) and 'bounded' (mapping to limit), but it fails to explain the essential mode parameter (keyword, query, prefix, etc.), the query format, or the semantics of returnColumns and snippet. The description adds only minimal meaning over the raw 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 performs a PGroonga search with structured filters and bounded results. It names the specific operation (search) and resource (PGroonga), which is sufficient to distinguish it from most siblings like server info, list indexes, and normalization tools. However, it does not differentiate from pgroonga_explain_search, which also relates to search.
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?
No guidance is provided on when to use this tool versus alternatives such as pgroonga_explain_search. There is no mention of suitable use cases, exclusions, or prerequisites. The description offers no context about when this search is preferred over other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_server_infoB
Discover PostgreSQL, PGroonga, Groonga, and feature capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| readOnly | Yes | |
| roleName | Yes | |
| capabilities | Yes | |
| databaseName | Yes | |
| groongaVersion | Yes | |
| extensionSchema | Yes | |
| postgresVersion | Yes | |
| extensionVersion | Yes | |
| supportedSearchModes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description says nothing about side effects, read-only status, authentication requirements, or response behavior. The agent is left to infer that 'discover' is safe, but this is not explicitly stated.
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 with no fluff. It is properly front-loaded with the action. Slight redundancy in 'feature capabilities' is minor and does not detract significantly.
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 zero-parameter info tool, the description is acceptable. It conveys the core purpose, and the output schema covers return values. However, it lacks use-case context and does not differentiate from the health tool, making it less complete than it could be.
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 tool has zero parameters, so no parameter documentation is needed. The schema is empty, and the description correctly avoids inventing parameter details. A baseline of 4 is appropriate given the absence of parameters.
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 'Discover' as a clear verb and specifies the resources: PostgreSQL, PGroonga, Groonga, and feature capabilities. This distinguishes it from sibling tools that focus on search, indexes, or normalization.
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. It does not mention pgroonga_health or other relevant sibling tools that might overlap in purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pgroonga_validate_normalization_profileA
Validate dictionary mappings and report normalization hazards without modifying data.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| profile | Yes | |
| findings | 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. It explicitly states 'without modifying data,' which is a key safety guarantee. It does not disclose other behaviors like required permissions, but the main risk of mutation is directly addressed, so this is strong transparency.
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 with no wasted words. It front-loads the action ('Validate') and adds a safety qualifier, achieving maximum clarity in minimal space.
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?
With one parameter, an output schema, and a short description, the tool is adequately specified. The description covers the purpose and non-mutating behavior, and the output schema likely documents the report structure. It doesn't explain parameter semantics, but that's a separate dimension.
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% for the 'index' parameter, and the description does not explain what this parameter refers to. It does not compensate for the lack of schema description, leaving the agent to infer that 'index' identifies the normalization profile to validate.
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 the specific verb 'Validate' with clear resources ('dictionary mappings' and 'normalization hazards'), and the phrase 'without modifying data' adds a non-destructive scope. This clearly distinguishes it from sibling tools like pgroonga_list_normalization_profiles or pgroonga_normalize_text, which perform different actions.
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 use: it is a validation tool that does not modify data, which implies when to use it versus tools that alter or list data. It does not explicitly name alternatives or exclusions, but the non-destructive validation context is unambiguous enough for a 4.
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.
9 tool updates
v0.1.0- First observed
pgroonga_explain_search - First observed
pgroonga_health - First observed
pgroonga_list_indexes - First observed
pgroonga_list_normalization_profiles - First observed
pgroonga_lookup_variants - First observed
pgroonga_normalize_text - First observed
pgroonga_search - First observed
pgroonga_server_info - First observed
pgroonga_validate_normalization_profile
TDQS
Scored across 9 tools
Each tool targets a distinct operation: server info, index listing, search, explain, normalization profiles, text normalization, variant lookup, normalization validation, and health. No two tools appear to do the same thing, and the descriptions make boundaries clear.
All tools share the pgroonga_ prefix and mostly follow a verb_noun pattern (list_indexes, normalize_text, validate_normalization_profile). A few like 'search' and 'health' are simple nouns/verbs, but the overall convention is consistent and predictable.
Nine tools is well-scoped for a domain-specific MCP focused on PGroonga search and normalization. Each tool serves a clear purpose without redundancy or bloat.
The tool surface covers the full workflow: discovering capabilities and indexes, executing and explaining searches, examining normalization, normalizing text, and validating profiles. It lacks explicit search-history or index-creation tools, but for a read-oriented MCP this is complete.
Maintenance
Related MCP Connectors
Read-only scripture-study engine: complete-or-fail concordance over Greek NT, Hebrew OT, LXX.
Hybrid search, schema introspection and record read/write over FoxNose collections
Read-only U.S. lab-test catalog, collection-site search, and reference-range context.
Read-only semantic search over Vedic scripture verses, commentaries, and recorded lectures.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing LLMs read-only access to PostgreSQL databases for inspecting schemas and executing queries.64,378 npm27MIT
- FlicenseNot gradedqualityDmaintenanceProvides read-only access to PostgreSQL databases, enabling users to inspect database schemas and execute read-only queries through a Model Context Protocol server.4-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides AI assistants with secure, read-only access to PostgreSQL databases while offering comprehensive tools for schema exploration, query validation, and performance optimization.MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing read-only access to PostgreSQL databases, enabling LLMs to inspect database schemas and execute read-only SQL queries.64,378 npmMIT