Skip to main content
Glama
benthic-io

benthic-mcp

Official
by benthic-io

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BENTHIC_BDP_ROOTNoSigned BDP document roothttps://benthic.io/bdp
BENTHIC_MAX_ROWSNoMaximum PostgREST page size1000
BENTHIC_MCP_HOSTNoHTTP bind address0.0.0.0
BENTHIC_MCP_PATHNoStreamable HTTP path/mcp
BENTHIC_MCP_PORTNoHTTP port8082
BENTHIC_CACHE_DIRNoVerified catalog cache$XDG_CACHE_HOME/benthic-mcp
BENTHIC_COLLECTIONSNoSigned collections to loadngopen
BENTHIC_TRUSTED_KEYSNoTrusted Ed25519 public keysCurrent pinned key
BENTHIC_MCP_TRANSPORTNohttp or stdio; stdio is what llama-server's MCP client needshttp
BENTHIC_PLAYBOOK_MODENooff, seed, or activeseed
BENTHIC_PLAYBOOK_PATHNoPromoted playbook location<cache>/playbook.json
BENTHIC_TRACE_ENABLEDNoRecord objective tool-call traces1
BENTHIC_MCP_BEARER_TOKENYesRequired for the HTTP transport only
BENTHIC_CACHE_TTL_SECONDSNoRefresh interval900
BENTHIC_MCP_ALLOWED_HOSTSNoAccepted Host headersloopback only
BENTHIC_MAX_RESPONSE_BYTESNoPer-response byte limit1048576
BENTHIC_TRACE_INCLUDE_TEXTNoStore question text from benthic_report0
BENTHIC_DEFAULT_QUERY_LIMITNoDefault result limit100
BENTHIC_MCP_ALLOWED_ORIGINSNoAccepted browser originsloopback only
BENTHIC_AGGREGATE_SCAN_LIMITNoMaximum complete source scan10000
BENTHIC_CONSOLIDATOR_LLM_URLNoModel used by the consolidatorlocal llama-server
BENTHIC_TRACE_RETENTION_DAYSNoTrace retention30
BENTHIC_LESSON_RETENTION_DAYSNoLesson retention30
BENTHIC_MAX_CACHE_AGE_SECONDSNoMaximum stale-cache fallback age604800
BENTHIC_PLAYBOOK_TOKEN_BUDGETNoToken cap for the always-on core slice600
BENTHIC_REQUEST_TIMEOUT_SECONDSNoUpstream request timeout30

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
benthic_discoverA

Find the smallest relevant signed source, columns, and join paths for a question.

Use the returned source field verbatim in benthic_query. If join_paths is empty, make separate
benthic_query calls; never invent a join.

One call is normally enough: it returns the best relations together with their columns, and
columns_truncated says when that list is partial. Ask again for more columns only when
columns_truncated is true, by passing detail='full'. A wrong column guess is recoverable rather
than fatal, because benthic_query reports the near-miss signed name.

Core access rules:

  • Call benthic_discover before benthic_query, and pass its source value verbatim.

  • Use benthic_join only for a signed path returned by discovery; never invent a join.

  • Partial joins require context_conditions and must be reported as provisional.

  • Heuristic matches are not exact; keep the returned reliability warning in the answer.

  • Never derive totals from truncated or incomplete source data.

  • Call benthic_playbook(dataset) when a question needs domain conventions for that dataset.

  • Dates in this catalog are ISO-8601; filter with gte/lte rather than string comparison.

  • Never use a current-only view to answer a historical question.

  • You have a limited number of turns, so once you have the rows you need you must stop calling tools and write the final answer, because a question left unanswered scores zero even when every call succeeded.

  • usaspending: Federal award transactions and the recipient entity index.

  • irs_ng: IRS exempt organization records, including Form 990 details.

  • samer: SAM entity registrations, the bridge between USAspending and IRS identifiers.

  • up_cdmaps: Congressional district boundaries, queried through spatial RPCs.

  • usp_cl: Congressional legislators and executive terms, including historical terms.

benthic_playbookA

Dataset-specific access conventions built from signed metadata and prior sessions.

Call once per dataset before answering a question that depends on domain conventions: which
source to use, which columns are authoritative, which mistakes to avoid, and which signed join
paths and RPC operations exist. Join recipes come from the signed catalog and are never
invented here. Omit dataset for a routing index of every dataset.

To move data between two relations, pass from_relation and to_relation as 'dataset.relation'
instead of a dataset. That returns the signed route hop by hop, shortest first, with the exact
arguments for each benthic_join call, and nothing else. Do this rather than searching
benthic_discover for a join path: a search can be rephrased, so a request for a path that does
not exist comes back looking like a request that was worded wrongly.
benthic_queryA

Run one bounded read-only relation query.

Call benthic_discover first and pass its source value verbatim. where uses column=operator.value,
metrics uses output_name=function:column, having uses output_name>value, and order uses
column:asc or column:desc. The name in a metric is the output column, not the source column.
Operators: eq, neq, gt, gte, lt, lte, like, ilike, in, is.null, not.is.null. Aggregates are complete
or rejected; never infer totals from a truncated source.

Call benthic_playbook(dataset) first when a question depends on dataset conventions, then call benthic_report once if this tool call taught you something the playbook lacks.

benthic_joinA

Run one signed join using qualified sources.

Omit left_column and right_column when exactly one reliable identifier path connects the two
sources, and the signed path is resolved for you. That is the common case and it saves having to
look the path up first. Columns are still required whenever the path is ambiguous, absent, or
anything other than a reliable identifier join, so a heuristic or partial join is never chosen
for you; the error lists the candidates instead.

The adapter follows signed reliability metadata and returns warnings. Partial joins require
context_conditions. The left key filter is propagated to the right source; do not invent columns
or unsigned relationships.

Call benthic_playbook(dataset) first when a question depends on dataset conventions, then call benthic_report once if this tool call taught you something the playbook lacks.

benthic_rpcD

Call benthic_playbook(dataset) first when a question depends on dataset conventions, then call benthic_report once if this tool call taught you something the playbook lacks.

benthic_reportA

Record one mistake you made and the correction, so future sessions do not repeat it.

Call this once after answering, only if a tool call or a source convention misled you. Write the lesson as an instruction to your future self ("use X instead of Y"), not as a complaint. Reports are stored as pending and are only served to later sessions after catalog verification and an offline A/B evaluation, so a wrong report cannot change current behaviour. Do not call it when nothing went wrong.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Each tool has a distinct role: discovery, query, join, RPC, playbook, and report. The boundaries between benthic_join and a potential join via benthic_query are implied but not explicitly contrasted in the descriptions; however, the extensive cross-references and rules make their intended uses clear.

Naming Consistency5/5

All tools follow a consistent benthic_ prefix with a single-word snake_case verb or noun (discover, query, join, rpc, playbook, report). The pattern is predictable and readable.

Tool Count5/5

Six tools are well-scoped for a database query and metadata system. Each tool appears necessary: discovery, querying, joining, RPC access, playbook guidance, and reporting. No obvious redundancy or missing core operation.

Completeness5/5

The set covers the full lifecycle for this domain: discovering sources, querying data, performing joins, calling RPCs, accessing dataset conventions, and reporting issues. No obvious missing operations for read-only data exploration and joining.

Maintenance

ActivityMaintained
ResponsivenessNo issues