Skip to main content
Glama
Auto Ontology MCP

Auto Ontology MCP

by gogoymh

Auto Ontology MCP (auto-ontology-mcp) brings NVIDIA Auto Ontology's semantic layer to any MCP client, for two jobs:

  • Ask your databases. Point it at a database, and the model you already use (Claude Code, Codex, OpenClaw, Hermes Agent, Cursor, VS Code, or the Claude and ChatGPT apps) builds business Terms, reviews joins and answers questions with SQL that the server checks against the ontology and the data.

  • Keep a personal knowledge base. Share receipts, statements, papers, book notes or screenshots with your assistant; it reads them and stores the facts as records, the ideas as linked concepts, and where each came from. Later questions get exact numbers and cited sources.

TIP

Use it in place of an LLM Wiki. In Karpathy's LLM Wiki pattern the model compiles your sources into markdown pages that you read in Obsidian. Auto Ontology MCP runs the same loop (ingest, query, lint, with an index and a log) on an ontology instead of loose pages: facts go into typed tables you can sum, filter and compare with SQL, ideas become concept pages with typed links, every record, page and link keeps its source and the quote behind it, and export_wiki writes it all out as an Obsidian vault with aliases, [[links]] and the graph view. How the two map

Auto Ontology runs its own LLMs (NVIDIA NIM) behind a Next.js, FastAPI and Postgres stack. This project hands every language step (reading, extracting, naming, judging, writing SQL) to the model in your MCP client, so there is no model endpoint to host and no API key to configure. The server keeps the deterministic work: schema extraction, profiling, key inference, validation, storage and read-only execution, in local SQLite files.

Why

Text-to-SQL fails quietly. The query runs, a number comes back, and nothing says it is wrong.

❌ A model reading a raw schema

✅ The same model with auto-ontology-mcp

Guesses which of billing_city_id and delivery_city_id "the customer's state" means

Gets the join path from reviewed relationships, with the default role and the alternatives spelled out

Joins customers.customer_id = orders.order_id because the integers happen to overlap

validate_sql rejects the join and names the one the ontology knows

Filters state_name = 'pennsylvania' and reports zero revenue

Is told the stored value is 'Pennsylvania' before running the query

Writes discount_pct > 20 against a column that holds 0 to 0.3

Is asked whether it meant 0.2

Sums a product price after joining to order lines and inflates the total

Gets a fan-out warning for the one-to-many join

Answers "return on ad spend" with whatever revenue column it finds

Hears from check_answerable that nothing covers ad spend, and says so

Related MCP server: Atlas MCP

See it in action

The repository ships a synthetic retail database for trying this out (11 tables, 3,200 orders). Below is a question asked after the tables were modeled. Tool output is abridged from a real run of the test fixtures; the model's replies are illustrative.

You     What was revenue for the sushi roll flash drive in Pennsylvania in June 2024?

Model   → check_answerable(entities=["revenue", "sushi roll flash drive", "Pennsylvania"])
          verdict: answerable
          revenue                  covered           Order Line › Revenue (order_lines.line_total)
          sushi roll flash drive   covered_by_value  products.product_name = 'USB Food Flash Drive - Sushi Roll'
          Pennsylvania             covered_by_value  states.state_name = 'Pennsylvania'

        → get_query_context(terms=["Order Line", "Product", "State", "Order"])
          join path: order_lines → products
                     order_lines → orders → customers → cities → states
          role note: customers.delivery_city_id = cities.city_id is the default;
                     other roles: customers.billing_city_id (billing)

        → validate_sql(first draft)
          ✗ Join customers.customer_id = orders.order_id is not how the ontology joins these
            tables (orders.customer_id = customers.customer_id).
          ! No row has states.state_name = 'pennsylvania'. Close real values: 'Pennsylvania'.

        → run_sql(fixed query)
          revenue 316.8, order_lines 4
          draft Terms used: City, Customer, Order, Order Line, Product, State

Model   Revenue was 316.80 from 4 order lines (delivery state Pennsylvania, June 2024).
        The Terms behind this answer are still drafts, so treat the definition as unreviewed.
        [SQL shown]

And a question the data cannot answer:

You     What was return on ad spend for the sushi roll flash drive?

Model   → check_answerable(...)
          verdict: partially_answerable   coverage: 0.33
          not covered: "return on ad spend", "ad spend"

Model   This database has sales but no advertising spend, so I can't compute ROAS.
        I can give you revenue for that product instead.

What it does

Catalog and profiling

Reads tables, columns, declared keys and comments through SQLAlchemy, then samples rows to record top values, uniqueness, null rates, ranges, date formats and the complete value set of small text enums

Key inference

Finds undeclared primary and foreign keys by name and confirms them by value containment. Detects roles (billing_ vs delivery_), self references and bridge tables, and lists identifier columns it could not place

Modeling with your model

Hands the model one table at a time with samples, keys and the modeling rules from Auto Ontology, then validates and stores the Terms and column mappings it proposes

SQL attributes

Mines reusable filters, measures and join patterns from executed and verified queries and bridge tables, runs each candidate against the database before saving it

Answerability

Matches the question's entities to Terms, attributes, SQL attributes and glossary entries, and to names stored in the data (products, places, statuses)

Validation

Unknown columns (with the ontology's name for them), joins the ontology does not know, near-miss literals, percent-vs-fraction thresholds, one-to-many fan-out, and a dry run

Governance

Draft, certified and deprecated status on Terms and SQL attributes; editing a certified definition returns it to draft. Verified question and SQL pairs feed later answers

Knowledge store

A writable store for what your assistant reads: entities with typed columns and references, concepts with a markdown body and typed relations, and a source with locator and quote behind every record. An index, a change log and an Obsidian export make it usable as an LLM Wiki

Portable

Export and import the whole semantic layer as one YAML or JSON document

Results of the scan on the demo database, as reported by auto-ontology-mcp demo:

Undeclared foreign keys in the demo

Found and auto-accepted

Proposed for review

Reported as unlinked

9

7

1 (employees.manager_id, a self reference)

1 (orders.sales_rep_id, no name match)

Quick start

You need uv.

1. Create the demo database (or skip to your own database):

uvx --from git+https://github.com/gogoymh/auto-ontology-mcp auto-ontology-mcp demo

2. Connect your client. One click for Cursor or VS Code (both need uv installed):

For the other clients, copy the snippet below. auto-ontology-mcp config prints them with absolute paths filled in, which desktop apps need when uvx is not on their PATH.

claude mcp add auto-ontology -- uvx --from git+https://github.com/gogoymh/auto-ontology-mcp auto-ontology-mcp

Add to ~/.codex/config.toml:

[mcp_servers.auto-ontology]
command = "uvx"
args = ["--from", "git+https://github.com/gogoymh/auto-ontology-mcp", "auto-ontology-mcp"]

Save the server in OpenClaw's MCP registry (docs). OpenClaw asks for the local Gateway to be stopped while saved servers change, so start it again afterwards:

openclaw mcp set auto-ontology '{"command":"uvx","args":["--from","git+https://github.com/gogoymh/auto-ontology-mcp","auto-ontology-mcp"]}'
openclaw mcp list

The tools show up in OpenClaw's normal coding and messaging tool profiles.

Add to ~/.hermes/config.yaml (docs), then run /reload-mcp in a session:

mcp_servers:
  auto_ontology:
    command: "uvx"
    args: ["--from", "git+https://github.com/gogoymh/auto-ontology-mcp", "auto-ontology-mcp"]

Tools are registered as mcp_auto_ontology_<tool>, for example mcp_auto_ontology_run_sql. Hermes passes stdio servers only a baseline environment, so if you keep the store somewhere other than ~/.auto-ontology-mcp, set it under env: (AUTO_ONTOLOGY_HOME: /path).

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "auto-ontology": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/gogoymh/auto-ontology-mcp", "auto-ontology-mcp"]
    }
  }
}

Add to .vscode/mcp.json:

{
  "servers": {
    "auto-ontology": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/gogoymh/auto-ontology-mcp", "auto-ontology-mcp"]
    }
  }
}

Add to claude_desktop_config.json and restart Claude Desktop:

{
  "mcpServers": {
    "auto-ontology": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/gogoymh/auto-ontology-mcp", "auto-ontology-mcp"]
    }
  }
}

Web clients only reach MCP servers on a public HTTPS URL. Run the HTTP transport with a token and expose it through a tunnel:

uvx --from git+https://github.com/gogoymh/auto-ontology-mcp auto-ontology-mcp \
  serve --transport http --port 8765 --token "$(openssl rand -hex 24)"
cloudflared tunnel --url http://127.0.0.1:8765      # or: ngrok http 8765

Add https://<tunnel-host>/<token>/mcp as a custom connector with no authentication. Connector settings in these apps take a URL but no custom headers, so the token can sit in the path. Clients that do send headers can use Authorization: Bearer <token> or ?key=<token>. In ChatGPT, write tools need a connector added in developer mode; menu names change between releases.

The search and fetch tools follow the shape ChatGPT expects from connectors used for search and deep research.

3. Ask. Try these in order:

  1. "Use auto-ontology to build the ontology for the demo datasource: review the proposed joins, model every table, then save useful SQL attributes." (or pick the build_ontology prompt)

  2. "Which states brought in the most delivered revenue in 2024?"

  3. "What was return on ad spend last quarter?" The answer should be that the data cannot say.

  4. Attach a receipt, a statement or your notes on a book and say "Remember this." (or pick the remember prompt). See Personal knowledge base.

  5. "Export my knowledge base for Obsidian." export_wiki writes a vault to ~/.auto-ontology-mcp/wiki/knowledge; open that folder in Obsidian.

Connect your database

uvx --from git+https://github.com/gogoymh/auto-ontology-mcp --with "psycopg[binary]" auto-ontology-mcp \
  add shop "postgresql+psycopg://readonly_user:pass@host:5432/db" --schemas sales,geo

Add the same --with to the client configuration's args so the server can load the driver.

You can also give the model a URL and let it call add_datasource. Any SQLAlchemy URL works:

Database

URL

Driver (uvx --with)

SQLite

sqlite:////absolute/path/file.db

built in

PostgreSQL

postgresql+psycopg://user:pass@host:5432/db

psycopg[binary]

MySQL / MariaDB

mysql+pymysql://user:pass@host:3306/db

pymysql

DuckDB

duckdb:////absolute/path/file.duckdb

duckdb-engine

From a clone, uv sync --extra postgres (or mysql, duckdb, all) installs the same drivers.

The test suite runs against SQLite and PostgreSQL 17. MySQL and DuckDB go through the same SQLAlchemy and sqlglot code paths but have not been tested against a live server yet.

Personal knowledge base

Your assistant can already read PDFs, photos, web pages and notes. What it lacks is a place to keep what it read, in a form it can count, compare and cite later. The knowledge store is that place, built from the same parts as Auto Ontology's semantic layer:

Part

What it holds

Example

Entity

Facts you will count, sum, filter or compare: a Term with its own table, typed columns and references to other entities

Receipt: paid_on, merchant → Merchant, category, total_krw

Concept

Meaning: a one-line definition, a markdown body and typed relations (is_a, part_of, related_to, causes, ...)

Spaced Repetition is_a Learning Technique, related_to Forgetting Curve

Source

Where each record, concept and relation came from, with a locator and the quote behind it

IMG_2041.jpg, line 3; Make It Stick, ch. 2

The store is created the first time the model saves something (datasource knowledge, file ~/.auto-ontology-mcp/knowledge.sqlite). Everything else in this README applies to it as well: synonyms in your own language, the glossary, SQL attributes for definitions like "eating out", validation, certification and verified example queries.

A session

The tool calls and results below are the ones in tests/test_knowledge.py; what the user and the model say is illustrative.

You     [two receipt photos] Remember these.

Model   → search_ontology("receipt", datasource="knowledge")              no match yet
        → define_entity("Merchant", columns=[name (key), city])
        → define_entity("Receipt", table="receipts", synonyms=["영수증"],
              columns=[paid_on date required, merchant ref:Merchant, category, total_krw integer])
        → add_records("Receipt", source={"title": "IMG_2041.jpg", "kind": "image"}, records=[
              {"paid_on": "2026/10/03", "merchant": "을지로 국수집", "category": "Eating Out",
               "total_krw": "12,000원", "_evidence": "합계 12,000"}, ...])
          inserted 3 · created Merchant: 을지로 국수집, Chipotle
          (dates and amounts normalized; adding the same receipt again changes nothing)

You     [book notes] Keep my notes on chapter 2 of Make It Stick.

Model   → save_concept("Spaced Repetition", description="Reviewing material at increasing intervals.",
              body="...", relations=[is_a Learning Technique, related_to Forgetting Curve],
              source={"title": "Make It Stick", "kind": "book"}, locator="ch. 2")
          empty concepts created to fill in later: Learning Technique, Forgetting Curve

You     How much did I spend eating out in October, and where is that from?

Model   → check_answerable(["영수증", "Eating Out"], datasource="knowledge")    answerable
        → run_sql("SELECT SUM(total_krw) FROM receipts
                   WHERE category = 'Eating Out' AND paid_on LIKE '2026-10-%'")   27500
        → get_source(1)      IMG_2041.jpg: 3 Receipt and 2 Merchant records

Model   27,500 KRW, from two receipts in IMG_2041.jpg.

If a record in a batch is wrong (a date written as "last tuesday", an amount as "12%", an unknown column), nothing in the batch is saved and every problem is listed, so the model fixes and retries. Records that other records reference cannot be deleted, an entity with records is only dropped with force, and column types cannot change.

Using it as an LLM Wiki

Every part of the LLM Wiki pattern has a counterpart here:

LLM Wiki

Auto Ontology MCP

Raw sources the model reads but never edits

Sources: title, path or URL, summary and the transcribed excerpt, linked from every record, concept and relation

Wiki pages the model writes

Concepts (definition, markdown body, typed relations) and entities (records with typed columns)

Schema file (CLAUDE.md, AGENTS.md)

Rules the server sends with its handshake and tools, plus the remember prompt

Ingest

remember → define_entity, add_records, save_concept

Query

search_ontology (Terms, bodies, sources, record values), get_term, check_answerable, run_sql

Filing good answers back

save_concept(append_body=...), save_example_query

Lint

review_ontology prompt; check_readiness counts empty concepts and records without a source

index.md

list_terms

log.md

recent_changes

Obsidian as the viewer

export_wiki: a vault with one page per Term (synonyms as aliases, relations as [[links]]), one per source, plus index.md and log.md

What the structure adds on top of markdown pages:

  • Numbers you can trust. "How much on eating out in October?" is a SQL sum over typed records, checked by validate_sql, not arithmetic over prose.

  • Provenance per fact. Each record carries its source, locator and quote, so an answer can say which receipt or page it came from.

  • No silent duplicates or broken data. Keys and duplicate detection stop the same receipt from being stored twice, and invalid dates, amounts or columns reject the whole batch with reasons.

  • Typed links. is_a, part_of, causes and the like instead of bare backlinks, so "what are the parts of X" has an answer.

  • Review states. Draft, certified and deprecated, as in Auto Ontology, so you know which definitions a person confirmed.

Limits to know about:

  • The Obsidian vault is a one-way view. Edits made in Obsidian are not read back; change knowledge through the assistant and run export_wiki again (it replaces only the pages it generated).

  • Search is lexical. Add the words you use as synonyms so they match.

  • Original files are not copied. A source keeps its title, path or URL, a summary and the excerpt the model transcribed.

  • It is a single-user store on your machine. Back it up by copying ~/.auto-ontology-mcp.

Large existing tables (bank exports, workout logs) load faster with sqlite-utils into their own database, connected read-only next to the store:

uvx sqlite-utils insert ~/kb/personal.db spending ~/Downloads/card-export.csv --csv
uvx --from git+https://github.com/gogoymh/auto-ontology-mcp auto-ontology-mcp add personal "sqlite:///$HOME/kb/personal.db"

From a chat app, with OpenClaw or Hermes Agent

OpenClaw and Hermes Agent are personal agents you run on your own machine or server and talk to from messaging apps. With auto-ontology-mcp registered (setup), you can send a photo from your phone and ask about it weeks later. The tools are the same; Hermes prefixes them with the server name:

You     [photo of a receipt] lunch today

Agent   → mcp_auto_ontology_search_ontology(query="receipt", datasource="knowledge")
        → mcp_auto_ontology_add_records(entity="Receipt", records=[{...}],
              source={"title": "chat photo, 2026-11-06", "kind": "image"})

You     eating out this month vs last month?

Agent   → mcp_auto_ontology_check_answerable(...) → mcp_auto_ontology_run_sql(...)

Reading the photo is up to the agent's model, so use one that accepts images. The server runs where the agent runs: ~/.auto-ontology-mcp is that machine's home directory.

Tools

Stage

Tools

Status

check_readiness

Connect and scan

add_datasource, scan_datasource

Model

get_modeling_worklist, save_table_terms, update_term, save_glossary

Relationships

list_relationships, set_relationship, find_join_path

SQL attributes

suggest_sql_attributes, save_sql_attribute

Explore

search_ontology, get_term, describe_table, lookup_values

Answer

check_answerable, get_query_context, validate_sql, run_sql, save_example_query

Knowledge store

define_entity, add_records, edit_records, save_concept, get_source, list_terms, recent_changes, export_wiki

Share

export_ontology, import_ontology

ChatGPT connectors

search, fetch

Prompts: build_ontology, answer_question, remember, review_ontology. Resource: ontology://guide. The server also sends its workflow as MCP instructions at handshake, so the model knows to check answerability and validate before it runs anything.

Read tools carry readOnlyHint, and tools that can delete carry destructiveHint, so clients can skip or require confirmation accordingly.

How it works

flowchart LR
    U([You]) <--> M["Your MCP client's model<br/>Claude Code, Codex, OpenClaw,<br/>Hermes, Cursor, ...<br/>names Terms, reviews joins,<br/>extracts entities, writes SQL"]
    M <-- "MCP<br/>stdio or HTTP" --> S["auto-ontology-mcp<br/>scans, profiles, infers keys,<br/>validates, stores, runs read-only"]
    S <--> O[("ontology.db<br/>Terms, relationships,<br/>SQL attributes")]
    S <-- "validated writes" --> K[("knowledge.sqlite<br/>records, sources")]
    S -- "read-only" --> D[("Your databases")]

Each step of Auto Ontology maps to one side of that line:

Step

NVIDIA Auto Ontology

auto-ontology-mcp

Schema extraction and profiling

Ingestion service

Server: scan_datasource

Undeclared foreign keys

LLM picks candidate columns, vector search finds the target key, a SQL probe checks values

Server: name rules plus the same value probe; ambiguous cases go to the model

Terms and column mapping

LLM, one table at a time

The model, with the same rules, via get_modeling_worklist and save_table_terms

SQL attribute suggestions

Expressions mined from the warehouse's query history, judged by an LLM

Server mines the queries run through it and the verified examples (not the warehouse's own history), the model judges, the server test-runs before saving

Joins seen in query history

Recorded from the warehouse's query logs

Joins used by executed and verified queries that are not relationships yet, listed by list_relationships for review

Answerability

LLM entity extraction plus embedding search

The model extracts entities; the server matches them lexically and against stored values

Writing SQL

LLM agent

The model

Checking SQL

Database probes plus an LLM review

Server: database probes and ontology checks in validate_sql

Storage

Postgres and pgvector

Local SQLite files

Ingesting knowledge

Ingestion service reads databases

The model reads files, images and notes; the server validates and stores the records, concepts and sources it extracts

Search is lexical (token overlap, trigram similarity, phrase match) because there is no embedding model. The server instructions ask the model to search with the schema's vocabulary, translate non-English phrases, and add the user's own words as synonyms with update_term(add_synonyms=[...]), after which they match directly.

Not carried over from Auto Ontology: the web UI and REST API, users, groups and RBAC, zones (access scoping), tags and rules, PII detection, JSONB path checks, embedding search and reranking, chart generation, KumoRFM predictions and Apache Ossie interchange (export and import use this project's own YAML format). Added here and not in Auto Ontology: write access over MCP, the personal knowledge store (Auto Ontology ingests databases, not documents), concept pages with typed relations, provenance on records, and the Obsidian export.

Safety

The server writes in exactly one place: ~/.auto-ontology-mcp/knowledge.sqlite, through the knowledge tools, which build parameterized statements from validated input. run_sql cannot write there either. Connected databases are only ever read, enforced in three layers:

  1. SQL guard. One SELECT, WITH or set operation per call. DML, DDL, PRAGMA, ATTACH, SELECT … INTO, FOR UPDATE and functions that reach files, other servers or server state (pg_read_file, dblink, LOAD_FILE, set_config, load_extension, ...) are refused. Row sources are allow-listed against the scanned catalog, which also blocks sqlite_master, DuckDB's FROM '/path/to/file' and OPENQUERY.

  2. Read-only connections. SQLite opens with mode=ro, PostgreSQL with default_transaction_read_only, DuckDB with read_only, MySQL with a read-only session.

  3. Rollback. Every transaction is rolled back.

Queries time out after 30 seconds and return at most 500 rows (100 by default).

Over HTTP, a token is required to reach the server from anywhere but localhost: without one, requests addressed to any other host are refused as DNS-rebinding protection, which also means a tunnel will not work until you set --token.

WARNING

Datasource URLs, passwords included, are stored in plain text in~/.auto-ontology-mcp/ontology.db. Tool output masks them. Use a read-only database account, and on shared machines set AUTO_ONTOLOGY_ALLOW_DATASOURCE_TOOLS=0 so datasources can only be added from the CLI.

Configuration

Variable

Default

Meaning

AUTO_ONTOLOGY_HOME

~/.auto-ontology-mcp

Where the ontology store, the knowledge store (knowledge.sqlite) and the demo database live

AUTO_ONTOLOGY_STORE

$AUTO_ONTOLOGY_HOME/ontology.db

Ontology store file

AUTO_ONTOLOGY_MAX_ROWS

500

Upper bound on rows run_sql returns

AUTO_ONTOLOGY_QUERY_TIMEOUT_S

30

Per-query timeout in seconds

AUTO_ONTOLOGY_PROFILE_ROWS

1000

Rows sampled per table while profiling

AUTO_ONTOLOGY_ALLOW_DATASOURCE_TOOLS

1

0 hides add_datasource and scan_datasource from MCP

AUTO_ONTOLOGY_MCP_TOKEN

unset

Token required by the HTTP transport (same as --token)

AUTO_ONTOLOGY_MCP_HOST / _PORT

127.0.0.1 / 8765

HTTP bind address

auto-ontology-mcp                      stdio MCP server (what desktop clients launch)
auto-ontology-mcp serve --transport http --port 8765 --token ...
auto-ontology-mcp demo                 create and register the demo database
auto-ontology-mcp add NAME URL         register and scan a datasource
auto-ontology-mcp scan NAME            re-scan; reviewed joins and Terms are kept
auto-ontology-mcp list                 readiness of every datasource
auto-ontology-mcp export NAME -o ontology.yaml
auto-ontology-mcp export-wiki -o ~/vault/ontology   Obsidian vault of the knowledge store
auto-ontology-mcp import NAME ontology.yaml
auto-ontology-mcp remove NAME
auto-ontology-mcp config               print client configuration snippets

Development

git clone https://github.com/gogoymh/auto-ontology-mcp && cd auto-ontology-mcp
uv sync
uv run pytest

The PostgreSQL tests run when AO_TEST_PG_URL points at a disposable database:

docker run -d --rm --name aomcp-pg -e POSTGRES_PASSWORD=pw -p 55432:5432 postgres:17
AO_TEST_PG_URL=postgresql+psycopg://postgres:pw@127.0.0.1:55432/postgres uv run --extra postgres pytest

Module

Responsibility

catalog.py, profiling.py, inference.py

Schema extraction, profiling, key and bridge-table inference

knowledge.py

The writable knowledge store: entities, records, concepts, relations, sources

wiki.py

Obsidian vault export

service.py

Everything behind the tools

validation.py, sqlcheck.py

Read-only guard, column lineage, probe-based validation

search.py, graph.py

Lexical search, join paths

guidance.py

Rules handed to the model, adapted from Auto Ontology's prompts

server.py, http_auth.py, __main__.py

MCP surface, HTTP token, CLI

Support the project

If Auto Ontology MCP saved you from a wrong number or replaced a pile of notes, a star on GitHub is the simplest way to help: it is how other people find the project. Bug reports and ideas are welcome in Issues.

Acknowledgements

Built on the ideas and code of NVIDIA Auto Ontology (Apache-2.0): its modeling, relationship, SQL attribute, entity extraction and SQL rules, column profiling, expression mining and database probes. NOTICE lists what came from which file. This project is not affiliated with or endorsed by NVIDIA.

Uses FastMCP, SQLAlchemy and sqlglot.

License

Apache License 2.0

Available Tools

33 tools
add_datasourceAdd DatasourceA
Idempotent

Register a database (connections are always read-only) and, by default, scan it. Use only when the user gives you a connection URL; never invent credentials.

NameRequiredDescriptionDefault
urlYesSQLAlchemy URL, e.g. sqlite:////abs/path/file.db, postgresql+psycopg://user:pass@host:5432/db, mysql+pymysql://user:pass@host/db, duckdb:///file.duckdb.
nameYesShort name, e.g. 'shop'.
scanNoScan the schema right away.
schemasNoSchemas to include (default: all non-system schemas).
descriptionNoWhat this database holds.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Goes meaningfully beyond annotations: it clarifies that the stored connection is always read-only (reconciling the readOnlyHint=false write semantics), discloses the default schema scan side effect, and warns against fabricating credentials. Missing is what happens on duplicate registration or how long a scan of a large database takes.

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

Conciseness5/5

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

Two sentences, zero filler, with the core action and the default scan behavior front-loaded before the usage restriction. Every clause carries information an agent needs.

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?

A mutation tool with annotations, a full output schema, and complete parameter docs — the description covers the behavior an agent must know to call it safely. Only edge cases like duplicate names or long-running scans are absent.

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 100%, so each of the five parameters is already fully documented, including URL syntax examples and the default-true scan flag. The description only reiterates the URL requirement and the scan default, adding no semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb and resource: 'Register a database' with the added default behavior of scanning it, plus a note that the resulting connection is read-only. That distinguishes it reasonably from scan_datasource, though the sibling is never named explicitly.

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?

'Use only when the user gives you a connection URL; never invent credentials' is a clear inclusion condition plus a hard exclusion. It stops short of naming alternatives or stating what to do if the datasource already exists, deferring that to the idempotent hint.

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

add_recordsAdd knowledge recordsA
Idempotent

Store facts you extracted from what the user shared (receipts, statements, reading notes, logs). All records are validated first; if any is wrong nothing is written and every problem is listed. Records matching existing ones by key (or identical ones) update or are skipped instead of duplicating.

NameRequiredDescriptionDefault
entityYesEntity name, e.g. 'Receipt'.
sourceNoWhere this came from: an existing source id, or a new source to register (deduplicated by uri or title).
recordsYesObjects of column values. Strings like '12,000원' or '2026/10/03' are normalized. Ref columns accept an id, a name (created when missing) or an object. Optional per record: id (update that row), _locator, _evidence, _note, _source.
on_conflictNoWhen a record matches an existing one by keys (or is identical).update
create_missing_refsNoCreate referenced records (a new merchant, author) by name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already mark this as a non-read-only but non-destructive, idempotent write. The description adds genuine behavior beyond that: validation is all-or-nothing (nothing is written if any record is invalid) and every problem is reported back. It does not cover permissions or how partial conflicts interact with the batch, keeping it short of a 5.

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?

Three tight sentences, each doing a distinct job: what to store, how validation behaves, how duplicates are handled. Front-loaded with purpose and free of filler, though the parenthetical example list runs slightly long.

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 full schema coverage, an output schema and annotations in place, the description only needs to carry the write semantics, which it does well (atomic validation, dedup/upsert behavior). The gap is the relationship to edit_records and what a failed validation response looks like, which are minor given the output schema.

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 100%, so entity, source, records, on_conflict and create_missing_refs are all documented in the schema itself. The description reinforces the conflict/dedup semantics of on_conflict and key matching but adds no syntax or value-level meaning beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: store facts extracted from user-shared artifacts (receipts, statements, notes, logs). That is far more concrete than the tool name alone. It does not name a sibling alternative such as edit_records, so an agent must infer the boundary between adding and editing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the triggering context (after extracting facts from something the user shared) and clarifies that repeated calls are safe because matches update or are skipped. However it gives no explicit when-not guidance and never points to edit_records as the alternative for correcting existing rows.

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

check_answerableCheck AnswerableA
Read-only

Cheap pre-flight: does the ontology cover every entity of the question? Returns coverage, a verdict (answerable, uncertain, partially_answerable, not_answerable) and the best matches per entity. When something material is not covered, tell the user instead of substituting a similar measure.

NameRequiredDescriptionDefault
entitiesNo1-5 entity phrases you extracted from the question, in the ontology's language. Extract 1-5 entity phrases from the question (ported from Auto Ontology's entity coverage prompt): - Include subject nouns and domain terms (invoice, customer, shipment) and qualified phrases (order shipment, employee hire). - Keep an aggregation word attached when it names a metric (total revenue, average order value), but not when it is only how the question is asked ("how many shipments" → shipment). - Keep a multi-word filter item together (waterproof hiking tent for family camping). - Keep names that identify something: product names, brands, categories, places. - Resolve glossary abbreviations to their definition (MRR → monthly recurring revenue). - Exclude bare verbs, numbers, calendar literals, standalone status adjectives and generic words (id, name, type, code, value).
questionYesThe user's question.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare this is a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower, yet the description still adds real behavior: it is cheap, it enumerates the four possible verdicts, and it returns per-entity best matches despite no match being a failure signal. The instruction not to substitute a similar measure when material coverage is missing is important behavioral guidance an agent would not otherwise know.

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?

Three sentences, front-loaded with the core framing ("Cheap pre-flight") and the return shape before the operational caveat. Nothing is padded, though the verdict enumeration could arguably be left to the output schema.

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 values need not be re-explained, and annotations cover the safety profile; the description supplies the conceptual model and the failure-mode guidance. The one gap is that its relationship to the similarly named check_readiness sibling is left for the agent to guess.

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 description coverage is 100%, including a detailed extraction recipe for `entities` and the optional-datasource note, so the schema carries the parameter burden. The description adds no parameter-level detail beyond implying that the question's entities are what gets checked. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: it checks whether the ontology covers every entity in a question, and names the outputs (coverage, verdict, best matches). An agent can tell this is a coverage pre-flight rather than a data query. It stops short of explicitly contrasting itself with the sibling check_readiness, which reads like an adjacent pre-flight tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Cheap pre-flight" implies it should run before heavier operations, and the last sentence tells the agent what to do when coverage fails. However, it never states when to use this versus check_readiness or get_query_context, and gives no explicit exclusions. Usage is inferable rather than specified.

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

check_readinessCheck ReadinessA
Read-only

Start here. Lists every datasource with whether SQL can run against it, how much of it is modeled (Terms, relationships, SQL attributes) and what to do next.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by disclosing the aggregate scope (all datasources, not one) and that each row carries both a runnability signal and a modeling-completeness signal plus a recommended next action.

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

Conciseness5/5

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

Two sentences with no filler. The action-oriented instruction is front-loaded before the description of returned content, which is the right order for an agent scanning the text.

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 zero parameters, full annotation coverage, and an output schema that documents the return shape, the description needs only to explain intent and scope, which it does. Minor gap: "what to do next" is unexplained and the description doesn't note whether the list can be large or how results are ordered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema defines zero parameters, so there is nothing for the description to clarify; baseline 4 applies. The description correctly implies a no-argument call by describing filtering-free enumeration of every datasource.

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?

"Lists every datasource" gives a concrete verb and resource, and the qualifiers (whether SQL can run, how much is modeled, what to do next) define the exact payload. The opening "Start here" frames it as the orientation/status tool, which separates it from point queries like check_answerable, validate_sql, or get_modeling_worklist in the sibling list.

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?

"Start here" is an explicit onboarding instruction that tells an agent to invoke this before other tools. It does not name when to skip it or which sibling to use after a specific readiness result, so the routing is clear on entry but not on exit.

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

define_entityDefine or change an entityA
DestructiveIdempotent

Create an entity in the personal knowledge store (a Term with its own table), add columns to it as you learn more, or delete it. Column types: text, integer, number, date, datetime, boolean, ref: (a link that becomes a relationship). Every record also gets id, _source_id, _source_locator, _evidence, _note and timestamps.

Storing knowledge (Auto Ontology's model applied to personal knowledge):

  1. Reuse before you create: search_ontology for the thing first. One Term per real-world kind of thing, named in the singular as people say it (Receipt, Book, Person, Workout).

  2. Entities hold facts you will count, sum, filter or compare. Give columns snake_case English names and the right type (text, integer, number, date, datetime, boolean, ref:). Put the unit in the name or description (amount_krw, distance_km). Use ref columns for things that recur (merchant, author, place) instead of repeating text; add_records creates the referenced rows by name. Set keys when a natural identifier exists (isbn, receipt_no) so re-ingesting updates instead of duplicating.

  3. Concepts hold meaning: a one-sentence definition, a markdown body (what it is, how it works, examples, open questions) and typed relations: is_a, part_of, has_part, instance_of, related_to, depends_on, causes, used_for, contrasts_with, same_as, example_of. A Term can be both: an entity with records and a body that explains it.

  4. Provenance on everything: pass source={title, kind, uri, ...} (or a source id) and, per record, _locator (page, timestamp, line) and _evidence (the quote or number as written).

  5. Never invent values. Leave unknown fields out; record ambiguity in _note.

  6. Certified means a person confirmed it. New knowledge is draft; do not certify on your own.

NameRequiredDescriptionDefault
keysNoColumns that identify a record (e.g. ['isbn']); re-adding updates it.
nameYesEntity (Term) name, singular, e.g. 'Receipt', 'Book', '운동 기록'.
forceNoAllow deleting an entity that still has records.
tableNosnake_case table name; required when the name is not English.
deleteNoDelete the entity (and, with force, its records).
columnsNoColumns to create or add. Existing columns keep their type.
synonymsNoOther names, e.g. the user's language.
descriptionNoWhat one record is.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true; the description corroborates both (delete, and keys causing 're-adding updates instead of duplicating') rather than contradicting them. It adds real policy beyond the annotations: reserved id/_source_id/_evidence fields, ref columns materializing as relationships, 'Never invent values,' and 'do not certify on your own' — though it never warns that deletion with force is irreversible.

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

Conciseness3/5

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

The purpose sentence is well front-loaded, but the six numbered points are largely a general knowledge-modeling manifesto: point 3 is about concepts (save_concept's job) and point 4's per-record locator/evidence advice belongs to add_records. Roughly half the text does not earn its place in this tool's definition.

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?

For an 8-parameter, destructive, idempotent schema with full coverage and an output schema, the description covers naming, typing, keys, and provenance well enough to call correctly. The gap is the phantom `source` parameter and the missing note that force-delete is unrecoverable.

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 100%, so baseline is 3, and the description does add value on keys (upsert semantics) and ref:<Entity> column types. But it also tells the agent to 'pass source={title, kind, uri, ...}' and to supply per-record _locator and _evidence — none of which are parameters of this tool, which has additionalProperties: false, so following that instruction would produce a call error.

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?

Opens with a specific triad of operations — create an entity (a Term with its own table), add columns, delete it — naming the concrete resource and its physical form. It implicitly separates itself from save_concept (which holds meaning, not countable facts) and from add_records, so an agent can pick the right tool without reading the 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?

Explicitly routes the agent to a sibling first: 'Reuse before you create: search_ontology for the thing first,' and gives the entity-vs-concept decision rule. It stops short of saying when to call update_term instead of define_entity, or when a new column should become a separate entity, so one selection boundary is left to inference.

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

describe_tableDescribe TableC
Read-only

A physical table with its Terms, columns (and the attributes mapping them), relationships and SQL attributes.

NameRequiredDescriptionDefault
tableYesTable name, schema-qualified if needed.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful fact that the payload includes term bindings, attribute mappings, relationships and SQL attributes. It says nothing about behavior when the table or datasource is missing, or how the single-datasource default is resolved.

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

Conciseness3/5

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

It is a single short sentence with no wasted words, but it is a fragment that leads with the object rather than the action, so it is under-specified rather than efficient. A leading verb would have cost nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not explain return values, and the safety profile comes from annotations. What is missing is invocation context: no indication of when this lookup is the right call versus its many siblings, which is the main risk of misuse here.

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 description coverage is 100% for both parameters, including the schema-qualification note and the optional-datasource default, so the schema carries the semantics. The description adds no interpretation of 'table' or 'datasource' beyond that, which is the expected baseline case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The text is a noun-phrase inventory of the resource ("A physical table with its Terms, columns ..., relationships and SQL attributes") rather than a verb+object statement of what the tool does. It does tell an agent what content the result contains, which helps distinguish it from get_term or list_relationships, but the agent has to infer 'describe' from the title alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no named alternative, despite many plausible siblings (get_source, get_term, search_ontology, list_relationships, get_query_context). Nothing states whether to call this before writing SQL, or how it differs from fetching a source or searching the ontology.

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

edit_recordsUpdate or delete knowledge recordsA
DestructiveIdempotent

Correct or delete records by id. Deleting a record that other records reference is refused. Confirm with the user before deleting.

NameRequiredDescriptionDefault
idsYesRecord ids (find them with run_sql or describe_table).
actionYesWhat to do with the records.
entityYesEntity name.
sourceNoWhere this came from: an existing source id, or a new source to register (deduplicated by uri or title).
valuesNoFor update: column values to set; may include _locator, _evidence, _note.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real value on top: referential-integrity refusal semantics and a human-confirmation requirement. It omits one notable side effect — that passing a source object registers a new source — which is only visible in the schema.

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

Conciseness5/5

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

Three short sentences, zero filler, with the core action front-loaded and the destructive caveat immediately after. Nothing could be removed without losing information.

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?

An output schema exists, so return values need not be described, and full schema coverage carries parameter detail. The remaining gap is explaining the update-vs-delete asymmetry (values apply only to update, source registration is a side effect), which an agent must piece together itself.

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 description coverage is 100%, so the baseline is 3. The description only echoes "by id"; it adds no meaning for entity, action, values, or the source-registration branch beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Correct or delete records by id" names two specific verbs, the resource (records) and the addressing key (id), which separates it from add_records or update_term. It never names a sibling explicitly, so the differentiation is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete usage rule — confirm with the user before deleting — plus the failure condition that deleting a referenced record is refused. It says nothing about when to prefer this over add_records, update_term, or define_entity, and gives no guidance on when an update should be routed elsewhere.

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

export_ontologyExport OntologyA
Read-only

The whole semantic layer of a datasource as one YAML/JSON document (Terms, column mappings, SQL attributes, relationships, glossary, example queries), for review or version control.

NameRequiredDescriptionDefault
formatNoDocument format.yaml
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile needs no restating. The description adds useful context by indicating this returns the complete layer in a single document (not a filtered subset) and that it is serialized as YAML/JSON, but it says nothing about size limits, permission requirements, or behavior when the datasource argument is omitted despite multiple datasources being registered.

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?

One dense sentence that front-loads the resource and scope before the parenthetical inventory of included sections and the closing use case. Every element earns its place, with only minor overhead from the long parenthetical list; the phrase is a noun fragment rather than an explicit verb statement, which is a small structural weakness.

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 and only two optional parameters at full schema coverage, the description carries little burden and covers the main open questions: what is exported, in what format, and for what purpose. The only meaningful gap is what happens when 'datasource' is null and several datasources exist, which neither the description nor schema resolves.

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 description coverage is 100%, with both the 'format' enum and the optional 'datasource' parameter already documented in the schema, including the single-datasource default behavior. The description confirms that the document covers exactly one datasource and that formats are YAML/JSON, but adds no syntax or format-selection guidance beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: 'the whole semantic layer of a datasource as one YAML/JSON document', and enumerates what is included (Terms, column mappings, SQL attributes, relationships, glossary, example queries). This clearly separates it from retrieval tools like get_term or search_ontology, though it never explicitly names export_wiki or import_ontology as the adjacent alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trailing clause 'for review or version control' implies the intended use case, so an agent can infer this is a full-dump/backup operation rather than a targeted lookup. However, there is no explicit when-not guidance and no routing statement telling the agent to prefer export_wiki for wiki output or import_ontology for the reverse operation.

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

export_wikiExport as an Obsidian vaultA
Idempotent

Write the ontology (by default the knowledge store) as markdown pages that Obsidian can open: one page per Term with synonyms as aliases and relations as [[links]], one page per source, an index.md and a log.md. The folder is ~/.auto-ontology-mcp/wiki/; re-exporting replaces generated pages only. It is a one-way view: edits made in Obsidian are not read back.

NameRequiredDescriptionDefault
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false, idempotentHint=true, destructiveHint=false; the description goes well beyond them by naming the exact output path (~/.auto-ontology-mcp/wiki/<datasource>), spelling out that re-export replaces *only* generated files (so user edits elsewhere survive), and warning that the export is one-way with no read-back. These are exactly the operational facts an agent needs before writing to disk.

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 what gets produced, then path, then overwrite semantics, then the one-way caveat — a logical order with no filler sentences. The opening sentence is dense with parenthetical and inline-list detail, which costs a little readability but not clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter export tool with an output schema (so return values need no explanation) and annotations covering safety, the description covers everything material: what is emitted, where it lands, what gets overwritten, and the non-round-trip limitation. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single optional 'datasource' parameter is already documented, so the baseline is 3. The description adds a little: it names <datasource> as the path segment and implies the default datasource is used when unspecified, which matches the schema's null default without contradicting it. Marginal but real added meaning.

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?

States a concrete verb (write/export) and a concrete artifact set: one markdown page per Term with synonyms as aliases and relations as [[links]], one per source, an index.md and a log.md. The Obsidian-vault framing plus the one-way-view note separates it from export_ontology and import_ontology among the siblings without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies useful operating context — the ontology is exported 'by default', the target folder, and that re-exporting replaces generated pages only — but never states when an agent should choose this over export_ontology, nor any preconditions (e.g. must the datasource be scanned first?). Usage is implied rather than directed.

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

fetchFetchA
Read-only

Full text of one ontology document (a Term with its attributes, SQL attributes and relationships, or a table).

NameRequiredDescriptionDefault
idYesDocument id returned by search, e.g. 'term:term_ab12'.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this a non-destructive, closed-world read, so the safety profile is covered. The description adds genuine value by saying the return is the FULL text of exactly one document (as opposed to a summary or a collection) and by enumerating the document shapes. It says nothing about behavior on a missing or malformed id, or about document size limits.

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?

A single compact sentence with the core claim ('full text of one ontology document') front-loaded and the document-type enumeration trailing as qualification. No filler, though the parenthetical list is slightly dense for one sentence.

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, the description need not explain return values, and the annotations cover safety. For a one-parameter read tool the description is nearly sufficient; the only real omission is routedness versus the closely related get_term and describe_table siblings.

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 description coverage is 100% and the single id parameter is fully documented with a concrete example format ('term:term_ab12'). The description adds no additional semantics about the id beyond what the schema already supplies, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb (full text retrieval) and a precise resource (one ontology document), and enumerates what a document can be: a Term with its attributes, SQL attributes and relationships, or a table. This differentiates it from search-style siblings, though the generic name 'fetch' does not on its own, and it does not name get_term or describe_table as distinct alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the schema note that the id is 'returned by search' suggests the search-then-fetch workflow, and 'full text of one document' implies it is for expanding a single result rather than listing. There is no explicit statement of when to prefer this over get_term or describe_table, nor any exclusion or prerequisite stated in the description itself.

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

find_join_pathFind Join PathA
Read-only

Shortest chain of accepted relationships between two Terms or tables, with ON conditions, a ready FROM/JOIN clause, fan-out warnings and alternative roles (e.g. billing vs delivery city).

NameRequiredDescriptionDefault
sourceYesTerm or table to start from.
targetYesTerm or table to reach.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish that this is a safe, read-only, closed-world operation, so the description is free to add behavioral detail — and it does: the path is limited to 'accepted' relationships, fan-out is warned about, and ambiguous roles (billing vs delivery city) are surfaced. It stops short of saying what happens when no path is found.

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?

One compact sentence with the core object front-loaded and no filler. The trailing list of outputs is slightly dense but each item conveys a distinct capability.

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?

The tool is simple (3 params, 2 required) and an output schema exists, so return values needn't be spelled out. The remaining gap is failure behavior — no path exists, or multiple datasources registered — which the datasource parameter's optionality hints at but the description never addresses.

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 100%, with source/target/datasource each documented, so the baseline is 3. The description reinforces that source/target accept either a Term or a table name, but adds no syntax, naming, or datasource-selection guidance beyond the schema.

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?

States a specific operation (shortest chain of accepted relationships) on a specific resource (two Terms or tables) and enumerates the payload (ON conditions, FROM/JOIN clause). This is clearly distinct from siblings like list_relationships or set_relationship, which enumerate or modify rather than compute a path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context (you need a join between two entities and want a ready-made clause) but never states when to prefer it over list_relationships or get_query_context, nor when it is inappropriate (e.g. no accepted relationship exists).

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

get_modeling_worklistGet Modeling WorklistA
Read-only

Next tables that still need business Terms, with everything needed to name them: candidate columns with types, sample values, uniqueness and formats, foreign keys and the Terms they point to, plus the modeling rules. Then call save_table_terms once per table. Repeat until remaining is 0.

NameRequiredDescriptionDefault
limitNoTables to return (1-10).
tablesNoSpecific tables to (re)model instead of the next pending ones.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value by disclosing the shape of the returned context and the loop-termination signal ('remaining is 0'). It does not discuss ordering guarantees, whether the worklist can change between calls, or datasource-scoping behavior.

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?

Three tight sentences, front-loaded with the resource and its payload before the workflow instruction. The dense list of column metadata is somewhat run-on but every element earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering safety, and 100% parameter coverage, the description only needs to explain the workflow and handoff, which it does fully. An agent knows what it gets back, what to do next, and when to stop.

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 description coverage is 100%, so limit, tables, and datasource are already documented in the schema. The description echoes the 'tables' semantics ('instead of the next pending ones') but says nothing about limit or datasource defaults or interactions. Baseline 3 applies when the schema does the heavy lifting.

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 description names a specific resource and scope ('next tables that still need business Terms') and enumerates the payload (candidate columns with types, sample values, uniqueness, formats, foreign keys with their Terms, modeling rules). It is clearly distinct from siblings like describe_table or get_term, and it names the downstream tool save_table_terms.

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 gives an explicit workflow: call this, then call save_table_terms once per table, and repeat until remaining is 0. It also implicitly covers the re-modeling case via the 'tables' parameter. There is no explicit 'when not to use' or named alternative for other listing needs, which keeps it below a 5.

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

get_query_contextGet Query ContextB
Read-only

Everything needed to write the SQL: qualified tables, mapped columns with sample values and formats, SQL attributes, the join path connecting the Terms (with a ready FROM/JOIN clause and role notes), verified example queries, glossary and the SQL rules for this dialect.

NameRequiredDescriptionDefault
termsYesTerms you will use (names, synonyms or ids).
questionNoThe question, to find verified example queries.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered and the bar is lower. The description adds that the join path comes with a ready FROM/JOIN clause and role notes and that examples are 'verified', which is modestly useful context about output quality. It says nothing about failure modes, what happens with unknown terms, or datasource resolution.

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?

It is a single dense sentence with no filler, and the payoff ('Everything needed to write the SQL') is front-loaded before the colon-led enumeration. The list is long but each item is a distinct artifact, so nothing obviously wastes space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description does not need to enumerate return contents, yet it does so at length while leaving preconditions unaddressed. For a bundled context-fetching tool, an agent would still benefit from knowing whether a missing or ambiguous term degrades the result and whether a datasource must be scanned first. It is adequate but leaves real gaps.

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 description coverage is 100%, so the baseline is 3 and the schema already explains terms, question and datasource. The description hints at the relationship between terms and the generated join clause and between the question and verified example queries, adding slight meaning. It does not clarify term-resolution behavior (names vs synonyms vs ids) or whether multiple terms must be related.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource it assembles (qualified tables, mapped columns with sample values, join path, verified examples, glossary, dialect rules) and frames it as the complete input for writing SQL, which distinguishes it from narrower siblings such as find_join_path or lookup_values. It leans on a noun phrase rather than a verb+resource pairing, but the content is concrete enough that an agent knows exactly what it gets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'Everything needed to write the SQL', which suggests calling it before authoring a query. It never says when to prefer it over siblings like describe_table, get_term, find_join_path or lookup_values, nor what to do if the returned context is insufficient. No exclusions or prerequisites are stated.

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

get_sourceShow a sourceA
Read-only

One source with its summary and content, and everything stored from it: records per entity, concepts and relations. Use it to cite where an answer came from.

NameRequiredDescriptionDefault
sourceYesSource id (e.g. '3' or 'source:3') or part of its title.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the useful scope detail that the result is an aggregate (source plus everything derived from it), but says nothing about what happens when the id or title fragment matches nothing, or whether partial-title matches can be ambiguous.

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?

Two sentences, no filler, and the payload contents are listed up front before the citation use case. The opening clause ('One source with its summary and content') is slightly awkward as a fragment but costs almost nothing.

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?

The tool is simple: one required parameter, full schema coverage, an output schema, and complete annotations. The description covers purpose, payload shape, and one usage scenario, leaving only edge-case behavior (no match, ambiguous title match) unstated, which is a minor gap at this complexity.

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 description coverage is 100%, and the single 'source' parameter is documented in the schema as an id or part of a title. The description adds no further meaning about the id-vs-title resolution or match behavior, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('one source') and enumerates exactly what comes back: summary, content, records per entity, concepts and relations. That content inventory distinguishes it from generic retrieval siblings like search/fetch, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to cite where an answer came from' gives one concrete usage context, which is more than nothing. However, there is no when-not guidance and no routing advice relative to search, fetch, or get_term, which an agent could plausibly confuse it with when it only has a partial title.

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

get_termGet TermB
Read-only

One Term: definition, status, synonyms, mapped columns with sample values and formats, SQL attributes and related Terms with their join conditions and multiplicity.

NameRequiredDescriptionDefault
termYesTerm name, synonym or id.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare this is a safe, read-only, closed-world operation. The description usefully adds that the returned term includes mapped columns with sample values and formats, plus related Terms with join conditions and multiplicity, but it does not mention lookup failure behavior, datasource ambiguity, or other operational caveats.

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?

The description is a single compact sentence with no filler, and it front-loads the key scope ('One Term'). The fragmentary noun-phrase style is slightly less readable than a complete sentence, but every listed detail is informative.

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?

For a simple read operation with annotations covering safety, a fully described two-parameter schema, and an output schema, the description is largely complete. It tells the agent what details are available for a term, though it omits usage routing and edge-case behavior.

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 description coverage is 100%, so the schema fully documents that 'term' accepts a name, synonym, or id, and that 'datasource' is optional when only one datasource is registered. The description adds no parameter meaning beyond the schema, which is the expected baseline when the schema carries the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as a single Term and enumerates the detailed information returned: definition, status, synonyms, mapped columns, SQL attributes, and related Terms. It implicitly contrasts with the sibling list_terms by saying 'One Term', but it does not use an explicit retrieval verb or name the alternative tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use guidance, no prerequisites, and no alternatives. The singular 'One Term' suggests it is for fetching a specific term rather than listing terms, but the agent must infer this without any stated comparison to list_terms or search_ontology.

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

import_ontologyImport OntologyB
Idempotent

Apply an exported document to a scanned datasource (matching tables and columns by name).

NameRequiredDescriptionDefault
documentYesA document produced by export_ontology.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare non-read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds a genuinely useful behavioral detail — matching tables and columns by name — which hints at how the document is reconciled against the scan. It does not say what happens on unmatched or renamed objects, whether existing terms are overwritten, or whether it partially applies on error.

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?

One sentence with no filler, and the core action is front-loaded. The trailing parenthetical carries real information rather than noise, though the sentence is dense enough that the matching semantics are easy to miss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full schema coverage, and rich annotations, the description need not explain returns or safety. However, for a mutation that applies an exported document over a scanned datasource, the description omits the conflict/overwrite outcome and the preconditions (scanned datasource, single-datasource default), which are the details an agent most needs.

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 description coverage is 100% and the datasource parameter's optionality is documented in the schema itself. The description adds only the indirect note that the document should match by name, which does not materially extend parameter meaning beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Apply') and resource ('an exported document') against a target ('a scanned datasource'), and the mention of 'exported document' implicitly ties it to the export_ontology sibling as its inverse. It is clear what the tool does, though it never explicitly contrasts itself with export_ontology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the document must have been produced by export_ontology and the target must already be a scanned datasource. There is no explicit when-to-use/when-not guidance or statement of prerequisites (e.g. datasource must be scanned first), leaving the agent to infer the workflow.

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

list_relationshipsList RelationshipsA
Read-only

Joins between tables with their evidence (declared, inferred by name and value containment, or added manually), roles when several columns point at the same table, and identifier columns that have no relationship yet. Review proposed ones with set_relationship.

NameRequiredDescriptionDefault
tableNoOnly relationships touching this table.
statusNoWhich relationships to list.proposed
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With readOnlyHint=true and destructiveHint=false already declared, the safety profile is covered by annotations. The description does add genuinely non-structured context — that evidence can be declared, inferred by name/value containment, or manual, and that role disambiguation and unlinked identifier columns are surfaced — but says nothing about volume, ordering, or scoping behavior of the listing.

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?

Two sentences, both carrying information: the first enumerates returned content categories, the second points at the mutation counterpart. The parenthetical evidence taxonomy is dense but earns its place; the only weakness is that the resource is front-loaded instead of the verb.

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?

An output schema exists, so return-value explanation is unnecessary, and the description covers the meaningful content categories of the response. What is missing is modest: guidance on default scope (only proposed relationships), and how this listing relates to join-path or worklist tools.

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 description coverage is 100% and all three parameters are documented in the schema, so the baseline is 3. The phrase "proposed ones" faintly echoes the default status filter, but the description adds no syntax, format, or interaction detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely — joins between tables, their evidence provenance (declared, inferred, manual), roles for multi-column joins, and orphan identifier columns — so an agent knows exactly what comes back. The action verb is only implied ("Joins between tables..."), carried by the name/title rather than the description text, which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes one case explicitly: "Review proposed ones with set_relationship," which tells the agent this is the read side and set_relationship the write side. It gives no guidance on when to prefer this over related siblings such as find_join_path or get_modeling_worklist, nor any condition for choosing a status value.

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

list_termsIndex of TermsA
Read-only

The index of a datasource: every Term (entities and concepts) with its one-line definition, status, synonyms, record and relation counts, and which concepts are still empty. Read it before adding knowledge, to reuse Terms instead of creating near-duplicates.

NameRequiredDescriptionDefault
kindNoWhich Terms to list.all
limitNoPage size (max 500).
offsetNoPage offset.
statusNoOnly Terms with this status.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: the payload contents and the fact that it surfaces still-empty concepts, which is behavioral information an agent would not get from the annotations.

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

Conciseness5/5

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

Two sentences, no filler, and the payload description is front-loaded ahead of the usage instruction. Every clause carries information.

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?

An output schema exists, so return values need not be spelled out, and the description still summarizes them. For a read-only, fully documented list tool this is nearly complete; only paging behavior and the optional-datasource case are left entirely to the schema.

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 description coverage is 100%, with kind, status, limit, offset and datasource all documented in the schema itself. The description adds no filtering or paging semantics beyond that, so the baseline 3 applies.

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?

States a specific resource (the datasource's Term index) and enumerates exactly what each entry carries: one-line definition, status, synonyms, record and relation counts, and empty concepts. This is clearly distinguishable from get_term (single Term) and search_ontology (search) among the siblings.

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?

Gives an explicit when-to-use rule: read it before adding knowledge so existing Terms are reused rather than duplicated. It does not name a specific alternative tool or state when not to use it, which keeps it short of a 5.

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

lookup_valuesLookup ValuesA
Read-only

Real values stored in a column, to ground literal filters ('Pennsylvania', a product name, a status code) before you write them into SQL.

NameRequiredDescriptionDefault
limitNoMaximum values.
columnYes'table.column'.
containsNoCase-insensitive text to look for. Omit to list the most common values.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the agent knows the safety profile. The description adds the behavioral purpose of grounding literals but says nothing about whether values are distinct, how they are ranked, or how limit truncation behaves. With annotations and an output schema covering most of the surface, a 3 is appropriate.

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

Conciseness5/5

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

A single sentence that front-loads what the tool returns and follows with the use case and concrete examples. Every clause earns its place with no filler.

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?

Output schema, complete parameter docs, and safety annotations are all present, so the description only needs to convey intent and usage, which it does. The one gap is that it does not mention the common-value ordering or the multi-datasource requirement, both of which an agent would need to consult the schema for.

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 100%, so all four parameters are fully documented in the schema, including the 'table.column' format and the contains/limit behavior. The description adds intent (grounding filters) but no additional format or constraint detail beyond the schema, so it sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (real values stored in a column) and its purpose (grounding literal filters). The examples ('Pennsylvania', product name, status code) make the output concrete. It does not explicitly distinguish itself from siblings like describe_table or get_term, which also describe column contents, so it falls short of a 5.

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 gives clear temporal guidance: call this before writing literals into SQL. That establishes when to use it. There is no explicit when-not guidance or named alternatives (e.g., use describe_table to get the column type instead), which keeps it at 4.

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

recent_changesRecent changesB
Read-only

The log: what was added, changed, certified or deleted recently, newest first.

NameRequiredDescriptionDefault
limitNoHow many entries, newest first.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the event taxonomy and the newest-first ordering, which is genuinely useful, but it doesn't define the scope of "recently" (time window, workspace-wide vs. object-scoped) or whether entries can be truncated.

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?

One sentence with no padding, and the ordering constraint is placed at the end where it reads naturally. The leading "The log:" fragment is slightly awkward but does front-load the concept.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (zero required params) and an output schema exists, so return values need no explanation. However, the undefined scope of "recently" — no timeframe, no indication of whether the log spans the whole ontology or a single resource — is a real gap for an agent deciding whether this answers its question.

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 100% and the single limit parameter is documented in-schema, so the baseline is 3. The description's "newest first" restates what the schema already says about ordering and adds no new meaning about bounds or defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a change log) and enumerates the event types it covers — added, changed, certified, deleted — plus the ordering, which is enough to tell it apart from siblings like search or get_term. The phrasing "The log:" is fragmentary rather than a clean verb+resource statement, but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: nothing says whether to reach for this versus search, get_term, or check_readiness when investigating recent activity, and no prerequisites or exclusions are stated. Usage is only inferable from the word "log."

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

run_sqlRun SqlA
Read-only

Execute a read-only query and return columns, rows, row_count and truncated, plus the Terms it used and warnings. Writes, DDL and multiple statements are refused; the connection itself is read-only. Present the SQL with the answer and say when results are truncated.

NameRequiredDescriptionDefault
sqlYesOne read-only SELECT in the datasource dialect.
max_rowsNoRows to return (capped by the server).
questionNoThe user's question, kept with the query for provenance.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with concrete behavior: the connection itself is read-only and writes, DDL and multiple statements are refused. It also discloses truncation behavior and instructs the agent to present the SQL and flag truncation, though it duplicates the shape of the response that the output schema already defines.

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

Conciseness5/5

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

Three tight sentences: capability and return shape first, hard constraints second, agent-facing presentation instruction last. Nothing is wasted, and the most decision-relevant fact (read-only execution) is front-loaded.

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 annotations, a full-coverage schema and an output schema, the description covers what an agent needs: what gets executed, what is refused, and how to report truncated results. It stops short of covering timeouts, result-size limits, or the validate-then-run workflow implied by the validate_sql sibling, which would make it complete for a multi-step SQL agent.

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 description coverage is 100%, so all four parameters (sql, max_rows, question, datasource) are already documented in the schema, establishing a baseline of 3. The description adds only a small amount of meaning beyond that, mainly the link between max_rows and the truncated flag, without covering dialect constraints or the provenance role of 'question' beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Execute') and resource ('a read-only query') plus the exact result shape (columns, rows, row_count, truncated, Terms, warnings), which is far more than a restatement of the name. It does not explicitly position itself against the nearby validate_sql or check_answerable siblings, leaving the agent to infer that this is the execution step rather than the validation step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly bounds usage by refusing writes, DDL and multiple statements, which is useful when-to-use context. However, there is no explicit guidance on when to call validate_sql first, when to prefer lookup_values or check_answerable, or how to handle a query that is rejected, so the alternative-selection guidance is only implied.

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

save_conceptSave a conceptA
Idempotent

Create or update a concept: a Term with a definition, a markdown body (a wiki page) and typed relations to other Terms. Works on entity Terms too, to explain them. Targets that do not exist yet become empty concepts to fill in later.

NameRequiredDescriptionDefault
bodyNoMarkdown page that replaces the current body: what it is, how it works, examples, open questions.
nameYesConcept (Term) name, e.g. 'Spaced Repetition'. Any language.
sourceNoWhere this came from: an existing source id, or a new source to register (deduplicated by uri or title).
statusNoCertify only when the user confirms.
locatorNoWhere in the source (page, chapter, timestamp).
evidenceNoSupporting quote.
synonymsNoOther names to add.
relationsNoTyped links to other Terms.
datasourceNoDefaults to the knowledge store; pass another datasource to document its Terms.
append_bodyNoMarkdown appended to the current body (new notes, a new source's view).
descriptionNoOne-sentence definition.
remove_relationsNoLinks to remove.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false. The description adds genuinely new behavioral context: this is an upsert, it implicitly creates empty concepts for missing relation targets, and it applies to entity Terms. It does not spell out overwrite semantics for the existing body, though the schema parameter text partly covers that.

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?

Three sentences, front-loaded with the core create-or-update action, then scope, then side effects. No filler, though the sentence about empty concepts could be folded into the first for even tighter packaging.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, 100% schema description coverage, and rich annotations, the remaining burden on the description is small, and it covers the non-obvious parts: upsert semantics and implicit Term creation. Nothing essential for correct invocation is missing.

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 description coverage is 100%, so the schema already documents all 12 parameters in detail. The description only adds a structural framing (definition, markdown body, typed relations) rather than parameter-level meaning, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb pattern (create or update) and a resource (a concept: Term + definition + markdown body + typed relations), which clearly separates it from note- or record-oriented siblings. It also clarifies that entity Terms can be documented. It stops short of naming the nearest alternatives (update_term, save_glossary, define_entity) directly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the upsert framing and the statement that non-existent targets 'become empty concepts to fill in later' tell the agent this is a write that can also stub out missing Terms. There is no explicit when-to-use/when-not-to-use guidance versus update_term or save_glossary, and no prerequisite conditions are stated.

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

save_example_querySave Example QueryA
Idempotent

Store a question and SQL pair the user confirmed as correct. Verified examples are offered by get_query_context for similar questions and mined by suggest_sql_attributes.

NameRequiredDescriptionDefault
sqlYesThe SQL that answered it correctly.
noteNoWhy this SQL is right (definitions, exclusions).
questionYesThe question in the user's words.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the write-safety profile is covered. The description adds genuine context beyond that by explaining the downstream effect: verified examples feed get_query_context and get mined by suggest_sql_attributes, which tells an agent why the stored pair's accuracy matters.

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

Conciseness5/5

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

Two tightly written sentences, with the core action and its correctness precondition front-loaded and the downstream consequences following. Nothing is redundant with the title or schema.

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 four fully documented parameters, complete annotations, and an output schema, the description covers what an agent needs to decide to call it. The only small gap is that the idempotent behavior (what happens on re-saving an identical pair) is not mentioned.

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 description coverage is 100%, and every field (question, sql, note, datasource) is documented in the schema itself. The description adds no syntax, format, or constraint detail beyond that, so the baseline 3 applies.

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 description states a specific verb and resource ('Store a question and SQL pair') along with the qualification that it must be user-confirmed as correct. It also names two downstream consumers, which distinguishes this save tool from siblings like get_context or suggest_sql_attributes that only read or mine examples.

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?

The condition for use is clear: only save pairs the user has confirmed as correct, which implicitly excludes speculative or unvalidated SQL. There is no explicit 'do not use when' clause or named alternative (e.g., validate_sql for unverified queries), so it stops short of full alternative routing.

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

save_glossarySave GlossaryC
Idempotent

Maintain the glossary of abbreviations and internal jargon (MRR → monthly recurring revenue). Glossary entries are returned with query context and searched like Terms.

NameRequiredDescriptionDefault
deleteNoEntry names to delete.
entriesNoEntries to add or update.
datasourceNoDatasource name. Optional when only one datasource is registered.
global_scopeNoStore for all datasources instead of one.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already supply the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the description only needs to add context. It does add something useful — that entries are returned with query context and are searched like Terms — but it never mentions that the tool also deletes entries via the `delete` parameter, which is the one behavior an agent most needs warned about on a write tool.

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?

Two short sentences with no padding, and the resource definition is front-loaded with a concrete example. The second sentence about query context is slightly indirect but still earns its place by linking the glossary to retrieval behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema fully documents parameters. However, for a four-parameter mutation tool that can also delete entries and choose between datasource and global scope, the description leaves the destructive and scoping decisions entirely to the schema, which is adequate but not complete.

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 description coverage is 100% and each parameter (delete, entries, datasource, global_scope) is documented in the schema itself, so the baseline is 3. The description adds only the domain framing of what a glossary entry is, not any additional semantics about scoping or update-versus-create behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The resource is clearly named (a glossary of abbreviations and internal jargon) with a concrete example (MRR → monthly recurring revenue), but the verb "Maintain" is vague and does not distinguish this from siblings such as update_term, save_concept, or list_terms. An agent can infer it is a glossary-writing tool from the name, but the description itself does not sharpen that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance: nothing tells the agent when to choose save_glossary over update_term or save_concept, nor when to scope an entry to a datasource versus using global_scope. The line "searched like Terms" hints at a relationship with the Terms tooling but stops short of an actionable rule.

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

save_sql_attributeSave Sql AttributeA
DestructiveIdempotent

Create, update, certify or delete a named SQL expression under a Term. The expression is executed read-only against the database before it is saved, so a broken one is rejected with the error.

NameRequiredDescriptionDefault
kindNoType of expression.measure
nameYesTitle Case name, e.g. 'Net Revenue'.
termYesOwning Term name.
deleteNoDelete this SQL attribute.
statusNoSet certified only when a person approved it.
datasourceNoDatasource name. Optional when only one datasource is registered.
expressionNoSQL in the datasource dialect. measure/dimension/filter: a fragment over the Term's own table qualified by the bare table name (SUM(order_lines.line_total)). join/query: a full SELECT.
descriptionNoWhat it captures and when to use it.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: the expression is executed read-only against the live database before persisting, and a broken one is rejected with the error — an agent needs to know saves can fail for SQL validity reasons. It does not say what delete removes or whether an existing attribute is overwritten on name match.

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

Conciseness5/5

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

Two sentences, zero filler, with the operation set stated first and the validation consequence second. Nothing repeats the schema or the title.

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, full annotation coverage and 100% parameter documentation, the description only needs to add operating context, which it largely does. The one real gap is the create-vs-update trigger: it says 'create, update' but never explains that an existing attribute under the same Term/name is replaced, which matters for a destructive, idempotent write.

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 description coverage is 100% and the schema already documents the dialect/expression shape per kind, the status approval rule, and the datasource fallback. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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?

Names a specific resource ('named SQL expression under a Term') and the full set of operations it performs (create, update, certify, delete), which cleanly separates it from siblings like suggest_sql_attributes and validate_sql. An agent can tell it is the write path for persisting an expression, not the drafting or validation path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The four supported operations imply when the tool applies, but there is no explicit routing guidance — nothing tells the agent to draft with suggest_sql_attributes first, or to pre-check with validate_sql, or when to prefer this over update_term. The 'certified only when a person approved it' rule in the schema is the closest thing to a usage constraint, and it is not echoed in the description.

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

save_table_termsSave Table TermsA
Idempotent

Save the Terms you propose for one table and map its columns to them. Replaces this table's previous Terms (Terms with SQL attributes are kept). New Terms start as draft; editing a certified Term's meaning returns it to draft. Unassigned candidate columns are attached to the first Term.

NameRequiredDescriptionDefault
tableYesTable name, schema-qualified if needed (e.g. 'sales.orders').
termsYesUsually exactly one Term per table.
datasourceNoDatasource name. Optional when only one datasource is registered.
is_junctionNoTrue if each row only associates two or more entities (bridge table).
column_descriptionsNoOptional {column: one-sentence description} for non-obvious columns.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Adds substantial behavior beyond the annotations: it discloses that previous Terms for the table are replaced with Terms carrying SQL attributes preserved, that new Terms are created as draft, that editing a certified Term's meaning reverts it to draft, and that unassigned candidate columns auto-attach to the first Term. One mild tension exists: annotations declare destructiveHint=false while the description says prior Terms are replaced — worth noting, though the replacement is scoped and partially exempted, so it is disclosed rather than contradicted.

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?

Four dense sentences, front-loaded with the core action, then replacement semantics and state transitions. No filler; a reader gets purpose and side effects in one pass.

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?

For a write tool with rich annotations, a fully documented nested schema and an output schema, the description covers the key side effects an agent must know before writing. The main gap is workflow placement — which sibling to run before this and what to use for corrections.

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 100%, so the schema already defines table, terms, datasource, is_junction and column_descriptions in detail. The description adds only one extra semantic — that leftover candidate columns land on the first Term — which is useful but marginal against a fully documented schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: save Terms for one table and map its columns to them. This distinguishes it reasonably from update_term (single existing Term) and save_glossary (whole glossary), though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the context (proposing Terms for a table) but never says when to call this instead of update_term or save_sql_attribute, nor what preconditions exist (e.g. after describe_table/scan_datasource). Usage is inferable, not spelled out.

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

scan_datasourceScan DatasourceA
Idempotent

Read (or re-read) tables, columns and declared keys; profile column values (samples, uniqueness, date formats, small value sets); infer undeclared primary/foreign keys by name and confirm them by value containment. Existing Terms and reviewed relationships are kept.

NameRequiredDescriptionDefault
profileNoSample rows to profile columns and test inferred joins.
schemasNoLimit the scan to these schemas.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and readOnlyHint=false, but the description adds substantive context beyond them: what profiling actually inspects (samples, uniqueness, date formats, small value sets), how keys are inferred (by name, then confirmed by value containment), and crucially what survives a re-run (existing Terms and reviewed relationships). The one remaining gap is cost/scale — no warning that profiling samples rows and may be slow on large schemas, which matters since readOnlyHint=false signals it does persist inferred keys.

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?

Two sentences, front-loaded with the core action, with no filler. The semicolon-chained clauses pack a lot of information but remain parseable, so the density costs only a little readability.

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?

For a scanning/mutation tool whose annotations cover safety and whose output schema covers return values, the description supplies what matters: scope of the scan, inference methodology, and preservation guarantees. It stops short of stating runtime cost or required datasource permissions, which is the only notable omission.

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 100%, so the schema already documents all three parameters and the baseline of 3 applies. The description does add modest meaning by spelling out what the `profile` flag causes (sampling and value-level tests) and by implying `schemas` scopes the read, but it offers no guidance on the cost trade-off of disabling profiling or on when `datasource` can be omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb set (read/re-read, profile, infer, confirm) and a concrete resource (tables, columns, declared keys, column values). It is unmistakably about schema scanning and key inference, but it never contrasts itself with siblings such as check_readiness, add_datasource, or get_modeling_worklist, so an agent must still infer which of the 30+ tools is the right entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Read (or re-read)" implies the two triggering situations — first onboarding of a datasource and a later refresh — and the closing sentence signals re-running is safe for curated content. However, no alternative tool is named and no exclusion is stated (e.g., when to prefer check_readiness or add_datasource first), leaving routing to inference.

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

search_ontologySearch OntologyA
Read-only

Lexical search across Terms (entities and concepts, including their bodies and relations), synonyms, mapped columns, SQL attributes, glossary, verified example questions, sources (title, summary, content) and unmodeled tables. In the knowledge store it also finds records by their stored text ('value' hits; request kind 'value' to search another datasource's data). Not semantic: use the schema's vocabulary, try synonyms, translate.

NameRequiredDescriptionDefault
kindsNoRestrict result kinds.
limitNoMaximum hits.
queryYesWords to look for: a business noun, metric, column or value.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnly, non-destructive and closed-world, so the safety profile is covered. The description adds genuine context beyond them: it enumerates which object classes are searchable, discloses that stored record text surfaces as 'value' hits, and notes that another datasource's data can be reached via kind 'value'. It omits anything about ranking, result ordering, or how limit truncation behaves.

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?

Three sentences, front-loaded with the scope enumeration and closing with the actionable 'Not semantic' directive. The middle sentence is heavy with a parenthetical that packs two ideas together, costing some readability, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and all four parameters are documented in the schema. The description supplies the remaining conceptual layer — what corpora are searched and what the 'value' kind does — which is what an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description pushes above it by explaining that kind 'value' is the mechanism for searching a different datasource's data and by characterizing the query string as business nouns, metrics, columns or values with synonyms/translation encouraged. The datasource/kind interaction is clarified in prose rather than left purely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb (lexical search) and enumerates the resource scope precisely: terms/concepts with bodies and relations, synonyms, mapped columns, SQL attributes, glossary, verified example questions, sources and unmodeled tables. It also declares what it is not ('Not semantic'), which separates it from any semantic-retrieval path, though it never names the concrete siblings (list_terms, get_term, lookup_values) that overlap its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage guidance is strategy-oriented rather than routing-oriented: 'use the schema's vocabulary, try synonyms, translate' tells the agent how to phrase a query, and the 'value' hint tells it how to reach another datasource's records. There is no explicit statement of when to reach for this tool versus list_terms/get_term/lookup_values, so the agent must infer the boundary from the enumerated scope.

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

set_relationshipSet RelationshipA
DestructiveIdempotent

Accept, reject, add, annotate or delete a join between two columns. Reviewed relationships survive re-scans. Only accepted relationships are used for join paths.

NameRequiredDescriptionDefault
roleNoBusiness role when several columns reference the same table, e.g. 'billing'.
actionYesWhat to do.
sourceNoForeign-key side, 'table.column'.
targetNoReferenced key, 'table.column'.
datasourceNoDatasource name. Optional when only one datasource is registered.
is_defaultNoMake this the default join between the two tables.
descriptionNoWhat the relationship means.
relationship_idNoId from list_relationships (or give source and target).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavior: that reviewed decisions persist across re-scans and that only accepted joins feed join-path resolution, which is exactly the kind of downstream consequence an agent needs.

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

Conciseness5/5

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

Three short sentences, verbs and resource front-loaded, with the persistence and join-path facts given as compact follow-ups. No filler or repetition of the title.

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 and full parameter documentation in the schema, the description is nearly complete for an 8-parameter mutation tool. The remaining gap is that it does not signal which actions require relationship_id versus source/target, and the 'annotate' wording conflicts with the 'update' enum value.

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 description coverage is 100%, so the baseline is 3. The description adds little beyond the schema and actually introduces slight ambiguity: it says 'annotate' while the action enum offers 'update', so an agent cannot map that word to a concrete enum value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (a join between two columns) and enumerates the operations (accept, reject, add, annotate, delete), so an agent immediately knows what the tool does. It does not explicitly contrast itself with siblings like list_relationships or find_join_path, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentences 'Reviewed relationships survive re-scans' and 'Only accepted relationships are used for join paths' implicitly explain why one would accept or reject, but the description never states when to use this tool versus list_relationships or find_join_path. Routing guidance is left to the schema's relationship_id note rather than the description.

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

suggest_sql_attributesSuggest Sql AttributesA
Read-only

Candidate SQL attributes (reusable measures, filters, join patterns) mined from executed and verified queries, bridge tables and column profiles, with the rules for judging them. Save the good ones with save_sql_attribute.

NameRequiredDescriptionDefault
termNoLimit to one Term.
limitNoMaximum candidates.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context beyond that: candidates are mined from executed and verified queries, bridge tables, and column profiles, and include rules for judging them.

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

Conciseness5/5

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

The description is two tight sentences with no wasted wording. It front-loads what the tool returns and then names the follow-up save action directly.

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?

The tool is a read-only candidate generator with an output schema and fully described parameters. The description covers what it produces, where candidates come from, and the next step, though it could more explicitly clarify when to choose it over sibling discovery tools.

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 description coverage is 100%, and all three parameters have clear descriptions in the input schema. The description does not add any meaning about the term, limit, or datasource parameters beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as candidate SQL attributes and specifies what they include: reusable measures, filters, join patterns. It distinguishes the tool from save_sql_attribute by directing the agent to save good candidates there, though it opens with a noun phrase rather than an explicit verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by saying to save the good candidates with save_sql_attribute, which gives a clear follow-up action. However, it does not explicitly state when to call this tool, when not to call it, or how it compares to alternatives like get_modeling_worklist.

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

update_termUpdate TermA
DestructiveIdempotent

Edit, certify, deprecate or delete a Term. Changing the name or description of a certified Term returns it to draft unless you also pass status.

NameRequiredDescriptionDefault
nameNoNew name.
noteNoReviewer note.
termYesTerm name, synonym or id.
deleteNoDelete the Term with its column mappings and SQL attributes.
statusNocertified = a person confirmed this definition. Do not certify on your own.
synonymsNoReplace all synonyms.
datasourceNoDatasource name. Optional when only one datasource is registered.
descriptionNoNew description.
add_synonymsNoAdd synonyms, e.g. the user's own words or translations.
column_updatesNoRename or describe mapped columns.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds genuinely new context the annotations cannot express: that editing a certified Term's name or description silently demotes it to draft unless status is supplied. That is a real state-transition trap an agent would otherwise miss; it stops short of 5 only because the destructive-delete consequences (column mappings, SQL attributes) live in the schema rather than the description.

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

Conciseness5/5

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

Two sentences, zero padding. The operation list is front-loaded and the certification side-effect follows as supporting detail, which is the right ordering for an agent scanning for fit.

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 10 parameters, an output schema, and rich annotations, most structured burden is already carried elsewhere, and the description covers the highest-risk gotcha. It does not mention the datasource parameter's single-datasource fallback or reinforce that delete is irreversible, but those gaps are modest given full schema coverage and an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description earns above baseline by explaining the interaction between the name/description parameters and the status parameter — a cross-parameter dependency the per-field schema text cannot convey on its own.

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 description opens with a specific verb set tied to a concrete resource: 'Edit, certify, deprecate or delete a Term.' The enumerated operation modes let an agent distinguish this from read-path siblings like get_term, list_terms, and search_ontology without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this is the mutation counterpart to get_term/list_terms, but no sibling is named and no when-not-to-use condition is given. The one conditional sentence present ('unless you also pass status') is a behavioral caveat rather than a routing rule, so the guidance remains minimal-viable.

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

validate_sqlValidate SqlA
Read-only

Check a query before running it: read-only guard, unknown tables/columns, joins that are not (or not the default) relationships in the ontology, wrong-looking literals (near-miss values, percent vs fraction), one-to-many fan-out under SUM/AVG/COUNT, and a dry run. Also reports which Terms the query relies on and whether they are certified.

NameRequiredDescriptionDefault
sqlYesOne read-only SELECT in the datasource dialect.
datasourceNoDatasource name. Optional when only one datasource is registered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare a safe, non-destructive read with open-world access, so the safety profile is covered. The description adds meaningful behavior beyond that: it performs a dry run and reports Term certification status, which tells the agent the tool may execute against the datasource and returns governance metadata. It does not disclose cost, latency, or whether failures block execution.

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?

Purpose is front-loaded in the first clause, followed by a compact enumeration of checks. It is a single dense sentence but every clause names a distinct capability, so there is little waste, though it would scan better as a list.

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?

An output schema exists, so return values need not be explained, and the description covers the full set of validations an agent would want to know about. The only gap is operational context: whether validation is cheap, whether a dry run touches the datasource, and whether a failing check prevents execution.

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 description coverage is 100% for both parameters, including the read-only SELECT constraint and the optional datasource default, so the schema carries the parameter burden. The description adds no parameter-level detail and does not mention the datasource parameter at all; baseline 3 applies.

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?

States a specific verb and resource ('Check a query') and then enumerates the exact checks performed: read-only guard, unknown tables/columns, non-ontology joins, near-miss literals, fan-out under aggregates, dry run, and Term certification. That level of specificity clearly distinguishes it from run_sql and check_answerable.

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?

'Check a query before running it' establishes the workflow position relative to run_sql without naming the sibling. There is no explicit exclusion (e.g., when validation is unnecessary or when it should be skipped for trivial queries), so it falls short of a full when/when-not statement.

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.

  1. 33 tool updatesv0.3.0
    • First observedadd_datasource
    • First observedadd_records
    • First observedcheck_answerable
    • First observedcheck_readiness
    • First observeddefine_entity
    • First observeddescribe_table
    • First observededit_records
    • First observedexport_ontology
    • First observedexport_wiki
    • First observedfetch
    • First observedfind_join_path
    • First observedget_modeling_worklist
    • First observedget_query_context
    • First observedget_source
    • First observedget_term
    • First observedimport_ontology
    • First observedlist_relationships
    • First observedlist_terms
    • First observedlookup_values
    • First observedrecent_changes
    • First observedrun_sql
    • First observedsave_concept
    • First observedsave_example_query
    • First observedsave_glossary
    • First observedsave_sql_attribute
    • First observedsave_table_terms
    • First observedscan_datasource
    • First observedsearch
    • First observedsearch_ontology
    • First observedset_relationship
    • First observedsuggest_sql_attributes
    • First observedupdate_term
    • First observedvalidate_sql

TDQS

B3.3/5.0

Scored across 33 tools

Disambiguation3/5

Most tools target distinct operations, but several search/retrieval tools overlap: search_ontology, search, fetch, get_term, list_terms and describe_table can all surface Term or table information. Similarly, define_entity, save_concept, save_table_terms and update_term all create/update Terms in different scopes, forcing the agent to reason carefully about which one to use.

Naming Consistency4/5

Predominantly verb_noun (get_term, save_sql_attribute, validate_sql, find_join_path), with only minor deviations like recent_changes, search and fetch. The convention is predictable overall.

Tool Count2/5

With 33 tools, the surface is well above the 3–15 sweet spot and includes redundant search/read tools. Although the domain is broad, the set feels overgrown and could be consolidated.

Completeness4/5

Covers datasource registration/scanning, Term modeling, relationships, SQL attributes, glossary, query validation/execution, export/import, personal knowledge records, concepts, sources and wiki export. Minor gaps include no delete-datasource operation and no explicit datasource listing beyond check_readiness.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Serves an automatically inferred semantic layer from your warehouse over MCP, enabling AI agents to query with correct business context, joins, and filters.
    3
    Functional Source , Version 1.1, ALv2 Future
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables natural language querying of SQL databases and REST APIs through the MCP protocol, grounded in a semantic layer.
    243 npm
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language querying of SQLite databases through a secure MCP server that writes, runs, and explains SQL with a three-layer read-only guarantee.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only, guarded access to business databases via MCP. Enables natural language querying with built-in security barriers like table allowlists, PII masking, and audit logging.
    MIT