Skip to main content
Glama
EliyahuAI
by EliyahuAI

Subindex

Verified Research Engine · subindex.ai · Launch App

Subindex generates, validates, and updates research tables by synthesizing hundreds of calls to Perplexity and Claude. Give it a prompt or an existing table and it returns structured, verified answers across an entire research domain — not just a single query, but a complete field of questions answered at once.

What you want to do

How

Live example

Gather everything — survey a complete research domain at once

Prompt → structured verified table

50+ Phase 3 oncology trials

Monitor anything — news, analyst projections, time-sensitive data

Upload or generate → keep current

Market info for 10 stocks

See everywhere — run the same questions across many entities

One table, many subjects

GenAI adoption across Fortune 500

How to Access

You want to…

Use

Try it out or iron out your use case

subindex.ai/app — web GUI for table validation and generation

Fact-check text or documents interactively

subindex.ai/chex — web GUI for reference checks

Let an AI agent drive a workflow autonomously

MCP server — install once, describe your task in plain English

One-off automation without writing code

MCP server via Claude Code, Claude Desktop, or any MCP-compatible client

Run repeatable pipelines or batch jobs

REST API + example scripts

Integrate into a product or SaaS

REST API directly

GUI → API: The web GUIs are ideal for exploring and refining your use case. Once you know what you want, the MCP server or REST API is the better path — faster, repeatable, and fully automatable.


Related MCP server: GPT Researcher MCP Server

Table of Contents


Get Your API Key

Get your API key at subindex.ai/account. New accounts receive $20 in free credits.


Download Examples

All scripts require Python 3.10+ and pip install requests.

Script

Description

Download

subindex_client.py

Shared REST client (required by all examples)

download

01_validate_table.py

Validate an existing table

download

02_generate_table.py

Generate a table from a prompt

download

03_update_table.py

Re-run validation on a completed job

download

04_reference_check.py

Fact-check text or documents

download

Or clone the full example set:

# Download all examples at once
curl -O https://subindex-storage.s3.amazonaws.com/website_downloads/examples/subindex_client.py \
     -O https://subindex-storage.s3.amazonaws.com/website_downloads/examples/01_validate_table.py \
     -O https://subindex-storage.s3.amazonaws.com/website_downloads/examples/02_generate_table.py \
     -O https://subindex-storage.s3.amazonaws.com/website_downloads/examples/03_update_table.py \
     -O https://subindex-storage.s3.amazonaws.com/website_downloads/examples/04_reference_check.py
pip install requests
export SUBINDEX_API_KEY=sbx_live_...

Quick Start: MCP

The MCP server lets any AI agent drive the full Subindex workflow autonomously — no scripting required.

Connects directly to the hosted Subindex server over HTTP. No local install, no uvx, no package management — just one command.

Claude Code:

claude mcp add subindex \
  --transport http \
  https://mcp-server-subindex-production.up.railway.app/ \
  --header "X-Api-Key: sbx_live_your_key_here"

Via config file (.mcp.json in your repo root, or claude_desktop_config.json):

{
  "mcpServers": {
    "subindex": {
      "type": "http",
      "url": "https://mcp-server-subindex-production.up.railway.app/",
      "headers": {
        "X-Api-Key": "sbx_live_your_key_here"
      }
    }
  }
}

Why HTTP over uvx? The HTTP connection runs on Railway — always up to date, no local Python environment needed, and no version drift between the package you installed and the live server. Recommended for Claude Code and any project-level config.

Option B — Local install via uvx

Runs the server locally on your machine using uvx. Useful for Claude Desktop or offline/air-gapped environments.

Claude Code:

claude mcp add subindex uvx mcp-server-subindex \
  -e SUBINDEX_API_KEY=sbx_live_your_key_here

Claude Desktop — add to claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "subindex": {
      "command": "uvx",
      "args": ["mcp-server-subindex"],
      "env": {
        "SUBINDEX_API_KEY": "sbx_live_your_key_here"
      }
    }
  }
}

Project config (shared repo) — add .mcp.json to your repo root. Each person uses their own key; no key is committed to the repo:

{
  "mcpServers": {
    "subindex": {
      "command": "uvx",
      "args": ["mcp-server-subindex"],
      "env": {
        "SUBINDEX_API_KEY": "${SUBINDEX_API_KEY}"
      }
    }
  }
}

OpenAI Codex CLI — add to your Codex config file (~/.codex/config.toml on macOS/Linux, %USERPROFILE%\.codex\config.toml on Windows):

[mcp_servers.subindex]
command = "uvx"
args = ["mcp-server-subindex"]

[mcp_servers.subindex.env]
SUBINDEX_API_KEY = "sbx_live_your_key_here"

Then restart Codex and verify:

codex mcp list

Option C — Smithery

Smithery is an MCP registry that works with Claude Code and other MCP-compatible clients including OpenClaw.

Step 1 — Install and log in:

npx -y @smithery/cli@latest login
npx -y @smithery/cli@latest mcp add subindex/subindex --client claude-code

Step 2 — Authenticate with your API key:

Open your MCP client (e.g. Claude Code), go to /mcp, click subindex → Authenticate, and enter your Subindex API key in the Smithery page that opens.

Smithery login is a one-time step. You must log in before adding servers, or authentication will not be set up correctly.


What to Ask Your Agent

Once the MCP server is installed, describe your task in plain English. The agent drives the full workflow, pausing only when your input is genuinely needed.

Validate a table:

"Validate companies.xlsx using Subindex. Interview me about what each column means, then run the preview. If the results look good, approve the full validation."

Generate a table:

"Use Subindex to generate a table of the top 20 US hedge funds with columns: fund name, AUM, primary strategy, founding year, and HQ city. Approve the full validation when the preview looks right."

Re-run validation on the same table:

"Re-run update_table on job session_20260217_103045_abc123 to get an updated validation pass."

Fact-check a document:

"Use Subindex to fact-check this analyst report." (paste the text or share the file path)


Workflows

1. Validate an Existing Table

Minimum rows: Subindex is designed for tables with 4 or more data rows. Fewer rows may produce low-quality results.

Full flow: upload → interview → preview → refine → approve → download

upload_file(filename, file_type, file_size [, file_path])   ← omit file_path on HTTP/Railway transport; run returned curl_command instead
  → start_table_validation(session_id, s3_key, filename)
      ┌── match found (score ≥ 0.85) → [preview auto-queued; response has preview_queued=true + job_id]
      └── no match → interview auto-started
            → wait_for_conversation / poll get_conversation
              → send_conversation_reply  (if AI asks questions)
              → [interview complete → preview auto-queued]

  → wait_for_job(job_id or session_id)  ← blocks until preview_complete
      → [optional] refine_config(conv_id, session_id, instructions)
      → approve_validation(job_id, cost_usd)
      → wait_for_job(job_id)            ← blocks until completed
      → get_results(job_id)

Key behavior: The preview is always auto-queued — after the interview finishes (trigger_config_generation=true), or when a config match is found (match_score ≥ 0.85, response includes preview_queued: true and job_id). Call wait_for_job(session_id) directly in all cases (see Config reuse).

Upload interview auto-approval: The interview may auto-approve in a single turn. If the conversation response has user_reply_needed: false and status: approved, proceed to wait_for_job(session_id) immediately — no reply is needed, even if the AI's message appears to ask for confirmation.

Skip the interview with instructions (fire-and-forget config generation):

Pass instructions to start_table_validation to bypass the interactive interview. The AI reads the table structure + your instructions and generates a config directly, then auto-triggers the preview — no clarifying questions needed.

start_table_validation(session_id, s3_key, filename,
  instructions="This table lists hedge funds. Validate AUM, strategy, and HQ city. Use Bloomberg and SEC filings.")
  → response includes instructions_mode=true
  → wait_for_job(session_id)          ← config generation + preview tracked automatically
  → approve_validation(job_id, cost_usd)
  → wait_for_job(job_id)
  → get_results(job_id)

Cost gate: Config generation and the 3-row preview are free. Full validation is charged at approve_validation — you always see the cost estimate at preview_complete before anything is billed. If your balance is insufficient, approve_validation returns an insufficient_balance error with the required amount.

Refine the config before approving by calling refine_config. This adjusts how columns are validated (sources, strictness, interpretation) — it cannot add or remove columns:

refine_config(conversation_id, session_id,
  "Use SEC filings as the primary source for revenue. Require exact match for ticker symbols.")

A new preview runs automatically after refinement.

Python script: examples/01_validate_table.py

export SUBINDEX_API_KEY=sbx_live_...
python examples/01_validate_table.py companies.xlsx
python examples/01_validate_table.py companies.xlsx --refine "Add LinkedIn URL column"

 Fire-and-forget: provide instructions to skip the interview entirely
python examples/01_validate_table.py companies.xlsx \
    --instructions "This table lists hedge funds. Validate AUM, strategy, and HQ city."

Which mode to use: Always try file_path first. If the server can read the file (stdio/uvx transport), upload completes in one step. If you get "File not found" (HTTP/Railway transport — server is remote), call again without file_path to receive a presigned S3 URL and a ready-to-run curl_command. The two-step path requires shell access to run curl; Claude Desktop users should use the uvx transport so file_path works.


2. Generate a Table from a Prompt

Describe the table you want — rows, columns, scope — and Subindex builds and validates it from scratch. Designed for tables with 4 or more rows.

start_table_maker("Top 20 US biotech companies: name, ticker, market cap, lead drug, phase")
  → wait_for_conversation / poll get_conversation
    → send_conversation_reply  (if AI asks clarifying questions)
    → [table builds → preview auto-queued]

  → wait_for_job(session_id)          ← spans table-maker + preview phases
    → approve_validation(job_id, cost_usd)
    → wait_for_job(job_id)
    → get_results(job_id)

Auto-approve: The agent can auto-approve the preview and proceed to full validation without human intervention. The preview table is included inline in the preview_complete response.

Cost: ~$0.05/cell (standard), up to ~$0.25/cell (advanced). $2 minimum per run.

Skip confirmation with auto_start=True (fire-and-forget generation):

Pass auto_start=True to skip the AI's clarifying questions and structure-confirmation step. The AI generates the table immediately from the message alone. Use when your message fully describes the desired table.

start_table_maker(
  "Top 20 US hedge funds: fund name, AUM, primary strategy, founding year, HQ city",
  auto_start=True)
  → wait_for_conversation(conversation_id, session_id)
      ← returns trigger_execution=true on first response (no Q&A)
  → wait_for_job(session_id)          ← table building + preview
  → approve_validation(job_id, cost_usd)
  → wait_for_job(job_id)
  → get_results(job_id)

Why wait_for_conversation with auto_start=True? Even though there is no Q&A, wait_for_conversation is still required — it returns trigger_execution: true in a single blocking call (no reply needed), signaling that the table-maker has started. Calling wait_for_job before this call returns would be premature, as the table-maker may not have been triggered yet.

Cost gate: Table building and the 3-row preview are free. Full validation is charged at approve_validation — you always see the cost estimate at preview_complete before anything is billed. If your balance is insufficient, approve_validation returns an insufficient_balance error with the required amount.

Python script: examples/02_generate_table.py

python examples/02_generate_table.py "Top 10 US hedge funds: fund name, AUM, strategy, HQ city"
python examples/02_generate_table.py --prompt-file my_spec.txt

 Fire-and-forget: skip clarifying Q&A and generate immediately from the prompt
python examples/02_generate_table.py --auto-start "Top 10 US hedge funds: fund name, AUM, strategy, HQ city"

3. Update a Table (Re-run Validation Pass)

Re-run validation on a completed job — no re-upload or manual edits needed. The table iterates automatically, re-validating the same data with the same config to pick up any changes in source data.

If you want to incorporate manual edits to the output file, re-upload the edited file via upload_file + start_table_validation — a matching config will be found automatically (score ≥ 0.85).

update_table(source_job_id)           ← re-validates existing enriched output
  → wait_for_job(new_job_id)          ← blocks until preview_complete
    → approve_validation(new_job_id, cost_usd)
    → wait_for_job(new_job_id)
    → get_results(new_job_id)

Python script: examples/03_update_table.py

python examples/03_update_table.py session_20260217_103045_abc123
python examples/03_update_table.py session_20260217_103045_abc123 --version 2

4. Fact-Check Text or Documents (Chex)

Submit any text, report, or document. Subindex checks each factual claim against authoritative sources and returns the same output format as standard table validation: an Excel (XLSX) file, an interactive viewer URL, and a metadata JSON.

Minimum claims: Subindex is designed for text with 4 or more factual claims. Fewer claims may produce low-quality results.

start_reference_check(text="...")           ← inline text (or auto_approve=True to skip the gate)
  or
upload_file(filename, "pdf", file_size [, file_path])   ← upload PDF/document first
  → start_reference_check(s3_key=s3_key)

→ wait_for_job(job_id)                ← spans extraction + 3-row preview; stops at preview_complete
  → preview_table (3 validated sample claims) + cost_estimate shown in response
  → approve_validation(job_id, approved_cost_usd=X)   ← triggers Phase 2
  → wait_for_job(job_id)              ← waits for completed
  → get_results(job_id)               ← download_url (XLSX) + interactive_viewer_url + metadata_url

Three-phase flow: Phase 1 (claim extraction, free) runs automatically, then a 3-row preview validates sample claims (free, auto-triggered). Both phases are tracked by a single wait_for_job call that stops at status=preview_complete. Review preview_table (3 validated sample claims with support level and citations) and cost_estimate, then call approve_validation to start Phase 2 (full validation, charged). Pass auto_approve=True to skip the gate and run straight through to completed.

Progress tracking: get_job_messages returns empty during claim extraction (Phase 1). Progress messages are available during the preview validation phase. wait_for_job handles both phases automatically.

Output: Excel (XLSX) file with per-claim rows. Support levels: SUPPORTED / PARTIAL / UNSUPPORTED / UNVERIFIABLE. Share interactive_viewer_url with human stakeholders — it renders sources and confidence scores in a clean UI.

Python script: examples/04_reference_check.py | Sample output: sample_outputs/reference_check_output.json

# Fact-check inline text
python examples/04_reference_check.py --text "Bitcoin was created by Satoshi Nakamoto in 2009."

# Fact-check a PDF
python examples/04_reference_check.py --file analyst_report.pdf

# Fact-check multiple documents concatenated
cat doc1.txt doc2.txt | python examples/04_reference_check.py --stdin

--stdin: Concatenates all piped content as a single inline text payload. All claims are attributed to the combined document.


Environment Variables

Variable

Description

SUBINDEX_API_KEY

API key from subindex.ai/account. Required. New accounts get $20 free.

SUBINDEX_API_URL

Override the API base URL (useful for dev/staging environments).


Direct REST API

All tools in the MCP server are thin wrappers over the REST API. You can call it directly from any language.

Base URL: https://api.subindex.ai/v1

Auth: Authorization: Bearer sbx_live_your_key_here

Response envelope:

{
  "success": true,
  "data": { ... },
  "meta": { "request_id": "...", "timestamp": "..." }
}

Python client (minimal)

import os, requests

BASE_URL = "https://api.subindex.ai/v1"
HEADERS  = {"Authorization": f"Bearer {os.environ['SUBINDEX_API_KEY']}"}

def api_get(path, **kwargs):
    r = requests.get(f"{BASE_URL}{path}", headers=HEADERS, **kwargs)
    r.raise_for_status()
    return r.json()["data"]

def api_post(path, **kwargs):
    r = requests.post(f"{BASE_URL}{path}", headers=HEADERS, **kwargs)
    r.raise_for_status()
    return r.json()["data"]

A full standalone client module is in examples/subindex_client.py.


API Endpoint Reference

Uploads

Method

Path

Description

POST

/uploads/presigned

Get a presigned S3 URL to upload a file

PUT

<presigned_url>

Upload file bytes directly to S3 (no auth header)

POST

/uploads/confirm

Confirm upload; detect config matches; auto-start interview if no match

Presigned upload request:

{
  "filename": "companies.xlsx",
  "file_size": 2048000,
  "file_type": "excel",
  "content_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}

Content types: excel.xlsx, csv.csv, pdf.pdf

Confirm upload request (optional fields):

{
  "session_id": "session_20260305_...",
  "s3_key": "results/.../file.xlsx",
  "filename": "companies.xlsx",
  "instructions": "Validate AUM, strategy, and HQ city. Use Bloomberg and SEC filings as sources.",
  "config_id": "session_20260217_103045_abc123_config_v1_..."
}

instructions — if provided, bypasses the interactive upload interview. The AI generates the config directly from the table structure + instructions. Response includes instructions_mode: true and conversation_id. Use wait_for_job(session_id) to track progress — do NOT poll the conversation.

config_id — if provided, skips matching and the interview entirely. The specified config is applied immediately and the preview is auto-queued. Response includes preview_queued: true and job_id. Use wait_for_job(job_id) to track progress. The configuration_id for any completed job is returned by GET /jobs/{id}/results under job_info.configuration_id.


Conversations

Method

Path

Description

POST

/conversations/table-maker

Start a Table Maker session with a natural language prompt

GET

/conversations/{id}?session_id=

Poll conversation for status / AI messages

POST

/conversations/{id}/message

Send a reply to the AI

POST

/conversations/{id}/refine-config

Refine the config with natural language instructions

Table Maker request body:

{
  "message": "Top 20 US hedge funds: fund name, AUM, primary strategy, founding year, HQ city",
  "auto_start": true
}

auto_start — if true, the AI skips clarifying questions and the structure-confirmation step, proceeding directly to table generation. The first get_conversation response will have trigger_execution: true. Use when your message fully describes the desired table.


Jobs

Method

Path

Description

GET

/jobs/{id}

Get job status and progress

GET

/jobs/{id}/messages

Fetch live progress messages (paginated by since_seq)

POST

/jobs/{id}/validate

Approve full validation — credits charged here

GET

/jobs/{id}/results

Fetch download URL, metadata, viewer URL

POST

/jobs/update-table

Re-validate enriched output after corrections

POST

/jobs/reference-check

Submit text or file for claim verification

Job status values:

Status

Meaning

queued

Accepted, waiting to start

processing

Actively running

preview_complete

Free preview done — review results and approve full run

completed

Full validation complete, results ready

failed

Error — check error.message


Account

Method

Path

Description

GET

/account/balance

Current credit balance and this-month usage

GET

/account/usage

Billing history (supports start_date, end_date, limit, offset)


MCP Prompts

Three built-in prompts act as workflow starters — select them from the prompt picker in your MCP client (Claude Code: / menu; Claude Desktop: the prompt icon) and fill in the arguments.

Prompt

Arguments

What it does

generate_table

description (required), columns (optional)

Builds a step-by-step instruction for creating a new research table from a natural language description

validate_file

file_path (required), instructions (optional)

Generates the full validation workflow for an existing Excel or CSV file

fact_check_text

text (required)

Generates the reference-check workflow for fact-checking a text passage


MCP Tool Reference

Every tool response includes a _guidance block with a plain-English summary and the exact next tool call(s) — enabling fully autonomous agent workflows.

Tool

Description

upload_file

Upload Excel, CSV, or PDF. Try with file_path first (one step, stdio/uvx). If the server can't read the local path, call again without file_path to get a presigned S3 URL + curl command (HTTP/Railway transport — requires shell to run curl).

start_table_validation

Confirm upload; detect config matches; auto-start interview if needed

start_table_maker

Start an AI conversation to generate a table from a prompt

get_conversation

Poll a conversation for AI responses or status changes

send_conversation_reply

Reply to AI questions during an interview or table-maker session

wait_for_conversation

Block until conversation needs input or finishes (emits live progress)

refine_config

Refine the validation config with natural language instructions (adjusts sources, strictness, interpretation — cannot add or remove columns)

wait_for_job

Block until preview_complete, completed, or failed (preferred progress tracker)

get_job_status

One-shot status poll

get_job_messages

Fetch progress messages with native percentages (paginated)

approve_validation

Approve preview → start full validation (credits charged here)

get_results

Download URL, inline metadata, interactive viewer URL

update_table

Re-validate enriched output after analyst corrections

start_reference_check

Submit text or file for claim and citation verification

get_balance

Check credit balance

get_usage

Review billing history


Key Behaviors

Auto-queued preview

The preview is automatically queued in all three paths after start_table_validation:

Path

Trigger

What to call next

Config match (score ≥ 0.85)

preview_queued: true in response

wait_for_job(job_id)

instructions= provided

instructions_mode: true in response

wait_for_job(session_id)

Interview ran

trigger_config_generation=true from conversation

wait_for_job(session_id)

To reuse a config from a different session, pass config_id to start_table_validation — the preview will be auto-queued immediately.

Config reuse

If start_table_validation returns match_score ≥ 0.85, the preview is automatically queued using the matched config. The response includes preview_queued: true and job_id — call wait_for_job(job_id) directly, no interview needed.

The configuration_id from any completed job's get_results response can be reused on future uploads of similar tables.

Cost confirmation gate

approve_validation requires approved_cost_usd matching the preview estimate. This prevents surprise charges. The estimate is in the preview_complete job status response under cost_estimate.estimated_total_cost_usd.

This gate applies regardless of whether instructions or auto_start was used — both only skip the interview/confirmation conversation, not the cost approval step. If your balance is insufficient when approve_validation is called, the API returns:

{ "error": "insufficient_balance", "required_usd": 4.20, "current_balance_usd": 1.50 }

Fire-and-forget shortcuts

Two optional flags let fully automated pipelines skip interactive steps:

Flag

Tool

Skips

Next step

instructions="..."

start_table_validation

Upload interview Q&A

wait_for_job(session_id)

auto_start=True

start_table_maker

Structure confirmation

wait_for_conversationwait_for_job

These flags use different terminal signals: instructions= (a config-gen flow) causes trigger_config_generation: true on the conversation response; auto_start=True (a table-maker flow) causes trigger_execution: true. Both skip interactive Q&A but produce different fields — do not wait for trigger_execution when using the instructions= upload path. The preview_complete cost gate and approve_validation still apply.

Consuming results: humans vs AI agents

Output files generated per run:

File

Format

Description

Preview table

Markdown (inline)

First 3 rows as markdown text; returned inline in the preview_complete job status response (not a separate download). Also available in metadata.json under markdown_table.

Enriched results

Excel (.xlsx)

Ideal for sharing with humans; sources and citations are embedded in cell comments

Full metadata

metadata.json

Complete per-cell detail for every row; use the row_key field to drill into specific rows programmatically

get_results returns:

Field

Type

Best for

results.interactive_viewer_url

URL

Humans — web viewer with confidence indicators (requires login at subindex.ai with the same email as your API key)

results.download_url

Presigned URL

Humans — download the enriched Excel (.xlsx) directly

results.metadata_url

Presigned URL

AI agents — JSON file with all rows, per-cell details, and source citations

Recommended AI agent workflow:

  1. At preview_complete: read the inline preview_table (markdown, 3 rows) from GET /jobs/{id} to survey the table structure and spot-check values. The AI agent can review this inline table and call approve_validation directly — no human approval step is required.

  2. After full validation: fetch results.metadata_urltable_metadata.json. This contains every validated row.

  3. Use rows[].row_key (stable SHA-256) to cross-reference rows between the markdown summary and the detailed JSON.

  4. Per-cell fields in table_metadata.json:

    • cells[col].value — validated value (legacy files may use full_value)

    • cells[col].confidenceHIGH / MEDIUM / LOW / ID

    • cells[col].comment.validator_explanation — reasoning

    • cells[col].comment.key_citation — top authoritative source

    • cells[col].comment.sources[] — all sources with url and snippet


Pricing

Mode

Cost

Preview (first 3 rows)

Free

Standard validation

~$0.05 / cell

Advanced validation

up to ~$0.25 / cell

Minimum per run

$2.00

Reference check

TBD — contact support

Credits are prepaid. Get $20 free at subindex.ai/account.

Standard validation is used for most tables. Advanced validation is selected automatically when the table requires more sophisticated reasoning (e.g., scientific data, complex financial metrics, or cells with high ambiguity).


Available Tools

25 tools
add_pending_rowA

Add a new entity as a pending row to be included in the full validation run.

The source Excel is NOT modified — the row is stored in session state and injected in-memory at validation time. Fully reversible before approving the full run.

The full-run cost quote updates to include the new row count.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID.
entity_idYesUnique identifier for the new entity (e.g. ticker, ID, slug).
entity_nameYesHuman-readable name of the entity.
extra_fieldsNoAdditional column values as a dict, e.g. {"Ticker": "AAPL", "Exchange": "NASDAQ"}.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) indicate mutability but non-destructiveness. The description adds nuance: 'source Excel is NOT modified' and 'fully reversible before approving the full run', clarifying the session-level mutability. This extra context is valuable and consistent with 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?

The description is extremely concise (4 sentences) with front-loaded action statement. Each sentence adds essential context: purpose, in-memory behavior, reversibility, and cost update. No superfluous words.

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?

Given the tool's complexity (4 parameters, output schema exists), the description fully covers behavioral context: non-modification, session storage, reversibility, and cost impact. The agent can understand the tool's role and side effects without needing additional explanation.

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?

Input schema covers all 4 parameters with descriptions (100% coverage). The description does not elaborate on parameters beyond the schema, but baseline is 3 due to schema coverage. No additional semantic value is provided by the description.

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 clearly specifies the action ('Add a new entity as a pending row') and the context ('to be included in the full validation run'). This distinguishes it from siblings like 'add_validated_rows' (adds pre-validated rows) and 'include_row' (re-includes excluded rows), providing a unique purpose.

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 description explains the tool's behavior (no modification to source Excel, stored in session state, reversible before approval) which gives clear context for when to use it. It implicitly advises against using it for permanent modifications, though it lacks explicit 'do not use when' guidance or direct sibling comparison.

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

add_validated_rowsA

Add new rows to a completed validation table.

Deduplication runs against existing rows. If confirmed=False, returns a cost quote (N_new_rows x per_row_rate from last run). If confirmed=True, appends rows to source Excel, runs validation on new rows only, and merges results into the output Excel.

Only available after full validation completes (status=completed).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID of a completed validation.
entitiesYesList of new entities to add. Each dict must have 'entity_id', 'entity_name', and optional 'extra_fields'.
confirmedNoSet True to approve and trigger the RowAdd run. Set False (default) to see the cost quote first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

The description goes beyond annotations by detailing deduplication, cost quoting, and the append-and-validate behavior. It explains the effect on source Excel and the merging of results. This provides comprehensive behavioral transparency without contradicting annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true agree).

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 concise: one sentence for purpose, two sentences for key behavior, one sentence for precondition. It is front-loaded with the main action and every sentence adds value without redundancy.

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?

Given the tool's complexity (3 parameters, output schema exists), the description covers purpose, behavior, precondition, deduplication, cost quote, and validation merging. It is complete for an agent to understand and invoke the tool 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 baseline is 3. However, the description adds significant context about the confirmed parameter's dual behavior, deduplication logic, and cost quoting. It enriches understanding beyond the parameter descriptions, earning a 4.

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 clearly states the tool's action: 'Add new rows to a completed validation table.' It specifies the resource (validation table) and the verb (add), and distinguishes from siblings by noting it operates on completed validation tables, unlike add_pending_row or other row-related tools.

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 description provides a clear precondition: 'Only available after full validation completes (status=completed).' It also explains the two-phase use via the confirmed parameter. While it doesn't explicitly list alternatives, the context is sufficient for an agent to decide when to use this tool.

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

approve_validationA

Approve a preview and start full validation processing.

job_id: the session_id value — "job_id" and "session_id" are the same string.

approved_cost_usd MUST be provided and must match the estimated cost from the preview_complete response. This prevents accidental billing without first reviewing preview results and the cost estimate.

Workflow:

  1. Call wait_for_job to reach preview_complete — read the inline preview_table (3-row sample) and cost_estimate.estimated_total_cost_usd from the response

  2. Call approve_validation(job_id=, approved_cost_usd=)

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesSession ID / job ID in preview_complete state to approve for full validation.
approved_cost_usdNoThe estimated cost from the preview_complete response — must match exactly to confirm you reviewed the cost before billing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate mutation (readOnlyHint=false) and non-idempotent (idempotentHint=false). The description adds behavioral context: it starts full validation processing and requires exact cost confirmation to prevent accidental billing. No contradictions with 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?

The description is concise, using short sentences and a clear workflow structure (numbered steps). Every sentence adds value without unnecessary detail.

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?

Given the presence of an output schema (not shown) and good annotations, the description covers the tool's purpose, parameters, and workflow. It could briefly mention what happens after approval (e.g., the job transitions to a new state), but is otherwise complete for an agent.

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% with good descriptions. The description adds extra value by clarifying that 'job_id' is the same as 'session_id' and emphasizing that 'approved_cost_usd' must exactly match the estimated cost. This goes beyond the schema's basic descriptions.

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 clearly states 'Approve a preview and start full validation processing,' specifying a specific verb and resource. It distinguishes from sibling tools like 'trigger_preview' and 'wait_for_job' through the workflow mention.

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 description provides explicit workflow steps: call 'wait_for_job' first to reach preview_complete, then call 'approve_validation' with the exact cost. It explains the reason for requiring 'approved_cost_usd' to match the estimate, but does not explicitly mention when not to use the tool or alternatives.

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

discover_rowsA

Discover and add new rows to an existing validated table using AI-powered search.

Uses the existing table's config and validated data to plan a targeted row discovery run. The planner derives search strategy from the config, then RowDiscovery finds candidates and QC filters them.

If confirmed=False, returns a cost estimate. If confirmed=True, enqueues the discovery pipeline (planner -> search -> QC -> pending_rows).

Discovered rows land in pending_rows with source='row_discover'. Run add_validated_rows to validate them, or trigger a preview to see them.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID of a completed validation.
instructionYesWhat rows to discover, e.g. 'add 5 EU pharma companies' or 'find more entries matching the existing pattern'.
countNoTarget number of new rows to discover.
confirmedNoSet True to approve and trigger the RowDiscover run. Set False (default) to see the cost quote first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

The description provides extensive behavioral details beyond annotations: it explains the pipeline (planner -> search -> QC -> pending_rows), the source label, the cost estimate mode, and that discovered rows land in pending_rows. This exceeds the not read-only, not destructive, open-world hints provided by annotations.

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 well-structured with clear sections, front-loading the core action. It is slightly verbose with pipeline details but remains efficient and readable. Each sentence adds relevant information.

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?

Given the complexity of the tool (AI-powered discovery pipeline), the description is comprehensive. It covers prerequisites (validated table), workflow steps, output (pending_rows), and next steps (add_validated_rows). The presence of an output schema (though not shown) reduces the need for return value details.

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?

All four parameters are described in the input schema with 100% coverage. The description adds context by explaining the role of session_id (from a completed validation), instruction (natural language request), count (target number), and confirmed (triggers vs quotes). This adds value but is not essential given schema descriptions.

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 clearly states the tool's purpose: 'Discover and add new rows to an existing validated table using AI-powered search.' It specifies the resource (rows), action (discover/add), and method (AI-powered search). This distinguishes it from siblings like add_validated_rows (which validates pending rows) and get_results (which retrieves data).

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 description explains when to use the tool (to discover new rows via AI) and outlines the two modes (confirmed=False for cost estimate, confirmed=True to enqueue). It mentions the dependency on a completed validation session and points to add_validated_rows for subsequent validation. However, it does not explicitly state when not to use it or list all alternatives.

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

exclude_rowA

Exclude a row from the full validation run.

Call with confirmed=False first to see a warning, then re-call with confirmed=True to apply. Reversible via include_row at any point before approving the full validation run.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID.
row_keyYesRow key of the row to exclude.
confirmedNoSet True to confirm exclusion. Set False (default) to preview the warning first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false. The description adds crucial behavioral details: the two-step confirmation process and reversibility, which are not in annotations. No contradiction.

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 succinct sentences, front-loaded with the main purpose. Every sentence adds essential information without redundancy.

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?

Given 100% schema coverage and presence of an output schema (not shown, but context signals indicate it exists), the description is complete, covering usage pattern, reversibility, and relationship to sibling tools.

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 covers all parameters with descriptions (100% coverage). The description adds contextual usage for the 'confirmed' parameter, explaining its role in the two-step flow. This adds value beyond the schema's basic description.

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 clearly states the action (exclude) and the target (a row from the full validation run), distinguishing it from siblings like 'include_row'.

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

Usage Guidelines5/5

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

Explicitly guides the agent to call with confirmed=False first to preview a warning, then re-call with confirmed=True. Also notes reversibility via include_row, providing clear when-to-use and alternative.

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

get_balanceA
Read-only

Return the current account credit balance in USD.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description adds the unit 'in USD' and 'current' but no further behavioral traits. With annotations present, the description provides adequate context beyond what is structured.

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, front-loaded sentence efficiently states the tool's purpose without redundancy.

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?

Given zero parameters and presence of an output schema, the description suffices. It conveys the essential information (balance retrieval in USD) for a read-only tool.

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?

No parameters exist, so the baseline is 4. The description clarifies the return value (balance in USD), which adds meaning beyond the empty input schema and complements the output 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?

The description uses a specific verb ('Return') and resource ('account credit balance'), clearly indicating what value is retrieved. It stands out among sibling tools like get_usage which likely returns different information.

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 for checking balance but does not provide explicit when-to-use or when-not-to-use guidance. For a zero-parameter tool, this is minimally acceptable.

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

get_conversationA
Read-only

Poll a conversation for new messages or a status change.

Key statuses: processing → poll again in ~15s user_reply_needed → send_conversation_reply trigger_execution → preview is auto-queued; switch to get_job_status

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesConversation ID returned by start_table_maker or start_table_validation.
session_idYesSession ID associated with the conversation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, indicating a safe read operation. The description adds behavioral context by explaining that the tool returns intermediate statuses and suggests polling intervals. However, it does not disclose auth requirements or rate limits, which would further enhance transparency.

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 very concise: one opening sentence plus a bullet list of three statuses. Every sentence adds value, and the structure front-loads the key action. There is no redundancy or fluff.

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?

Given that an output schema exists (as per context signals), the description does not need to detail return values. It covers the main use case, statuses, and follow-up actions. It could mention polling timeout or when to stop, but it is sufficiently complete for a polling tool with sibling 'wait_for_conversation' for automatic polling.

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 input schema already documents both parameters. The description adds no additional parameter details beyond what is in the schema (e.g., 'Conversation ID returned by...'). Per the rubric, baseline is 3 when coverage is high, and the description does not add meaningful extra semantics.

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 clearly states the tool's purpose: 'Poll a conversation for new messages or a status change.' It specifies the verb 'poll' and the resource 'conversation', making the action unambiguous. The list of key statuses further distinguishes this tool from siblings like 'send_conversation_reply' and 'get_job_status'.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use the tool (polling for new messages or status change) and includes specific statuses with recommended actions: 'poll again in ~15s', 'send_conversation_reply', and 'switch to get_job_status'. This gives clear context for alternative tools, exceeding basic usage guidance.

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

get_job_messagesA
Read-only

Fetch live progress messages for a running job.

Pass since_seq from the last message to receive only new messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesSession ID / job ID to fetch progress messages for.
since_seqNoReturn only messages with sequence number greater than this value.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint true. Description adds minimal behavioral context (live, running job) but no extra safety or side-effect details beyond 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 with a clear front-loaded purpose and no wasted words.

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 adequately covers purpose and key parameter usage, though it could optionally clarify behavior when since_seq is omitted.

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?

Input schema has 100% coverage, so baseline 3. Description reiterates the since_seq behavior but does not add new meaning 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?

The description clearly states the verb 'Fetch' and the resource 'live progress messages for a running job', distinguishing it from siblings like get_job_status which focus on overall status.

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?

Provides a clear usage hint for the since_seq parameter to fetch only new messages, but does not explicitly mention when not to use or compare to alternatives.

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

get_job_statusA
Read-only

One-shot job status check. Prefer wait_for_job for tracking long-running jobs.

Use this for quick status inspections or as a fallback when wait_for_job is not appropriate. For polling loops, wait_for_job is more efficient — it holds the connection, emits live MCP progress notifications, and handles the multi-phase pipeline (table-maker → preview) automatically.

Key statuses: queued / processing → call wait_for_job instead of re-polling manually preview_complete → approve_validation (or refine_config) completed → get_results failed → check error field

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesSession ID / job ID returned by upload_file, start_table_validation, or start_table_maker.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Description confirms it is a one-shot, non-blocking read operation, consistent with readOnlyHint. It adds value by mapping statuses to recommended next actions, giving the agent a behavioral model.

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?

Concise and well-structured: opening sentence, usage guidance, bullet list of status mappings. Every sentence is informative with 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 one fully-described parameter, good annotations, and output schema, the description covers purpose, usage, and next steps. No gaps for a simple query tool.

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 single parameter job_id is fully described in the schema (100% coverage). The description adds context by listing where job_id comes from (upload_file, start_table_validation, start_table_maker), which aids in value selection.

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?

Description starts with 'One-shot job status check,' clearly stating the purpose. It contrasts with wait_for_job, making it easy to distinguish.

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

Usage Guidelines5/5

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

Explicitly says 'Prefer wait_for_job for tracking long-running jobs' and provides status-specific guidance (queued/processing → wait_for_job, preview_complete → approve_validation, etc.).

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

get_preview_stateA
Read-only

Get the current structural editing state of a session.

Returns the preview table, excluded rows, pending rows, ignored columns, and current row order so you can review before triggering the full validation run.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true. Description adds value by listing what is returned (preview table, excluded rows, pending rows, ignored columns, row order) and the purpose (review). No contradiction.

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 sentences, each serving a purpose: state action, list return items, state usage context. No extraneous information. Front-loaded with the verb and resource.

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?

Despite having an output schema, the description still explains the key components returned. For a simple read-only tool with one parameter, this is complete and sufficient guidance.

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 has 100% coverage with a single parameter 'session_id' described only as 'Session ID.' Description does not add additional semantics about the parameter beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states 'Get the current structural editing state of a session,' specifying the action (get), resource (preview state), and scope (session). Distinguishes from sibling tools like 'trigger_preview' and 'add_pending_row' which modify state.

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 says to use it 'before triggering the full validation run' to review current state. Does not mention alternatives or when not to use, but the context is clear enough for an AI agent.

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

get_resultsA
Read-only

Fetch the final validated/enriched results for a completed job.

job_id: the session_id value — "job_id" and "session_id" are the same string.

Automatically downloads table_metadata.json and embeds it inline so no separate HTTP fetch is needed. Key fields in the response:

results.markdown_table — START HERE. Self-contained markdown document: full validated table (all rows, all values), confidence icons, viewer/download links, and a guide to navigating citations. Read this first. results.metadata.rows[] — per-row data keyed by row_key; each cell has value, confidence, comment (with citations). (legacy files may use full_value; both are equivalent) results.interactive_viewer_url — share with humans; renders sources + confidence. results.download_url — enriched Excel file for offline sharing.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesSession ID / job ID of a completed validation job.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Adds value beyond annotations by revealing that table_metadata.json is automatically embedded, avoiding separate HTTP fetches. Also outlines key response fields. Annotations already indicate readOnlyHint=true, so the description complements without contradiction.

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?

Well-structured with a clear opening sentence, bullet points for key response fields, and a 'START HERE' emphasis. Every sentence is informative and earns its place; no fluff.

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 tool with one parameter, high schema coverage, and an output schema, the description is comprehensive: explains purpose, parameter usage, and response structure. Provides a mental map of the output without redundancy.

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%, baseline is 3. Description adds clarifying detail that job_id and session_id are the same string, and implies job_id must be for a completed job, which goes beyond the schema's description.

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?

Description clearly states 'Fetch the final validated/enriched results for a completed job,' providing a specific verb, resource, and constraint. It distinguishes from sibling tools like get_job_status or get_preview_state by focusing on completed job results.

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?

Provides context that job_id equals session_id and emphasizes starting with results.markdown_table. However, it does not explicitly state when to use this tool versus alternatives (e.g., get_job_status, get_preview_state), lacking exclusions or when-not scenarios.

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

get_usageA
Read-only

Return API usage history. Dates in YYYY-MM-DD format.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoFilter start date in YYYY-MM-DD format.
end_dateNoFilter end date in YYYY-MM-DD format.
limitNoMaximum number of records to return.
offsetNoNumber of records to skip for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, making the behavioral expectations clear. The description adds a date format hint but does not discuss other behaviors like pagination or rate limits, which are not covered by 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 communicate purpose and a key format detail with no wasted words.

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?

Given the presence of an output schema and annotations, the description covers the essential purpose and date format. It could detail what constitutes 'usage history' but remains adequate for a read-only list tool.

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 description does not need to compensate. The date format hint redundantly reinforces parameter descriptions, adding no new 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?

The description clearly states 'Return API usage history', which specifies a verb and a resource. The purpose is distinct from sibling tools like get_balance or get_conversation.

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 provides no guidance on when to use this tool versus alternatives. It lacks any context about suitable scenarios or prerequisites.

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

include_rowA

Re-include a previously excluded row.

No confirmation needed. Can be called at any point before approving the full validation run.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID.
row_keyYesRow key of the row to re-include.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Adds behavioral context beyond annotations: no confirmation required and valid only before approval. This informs the agent about side effects and constraints without contradicting 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 extraneous words, front-loaded with the core action. Every sentence provides essential 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?

With an output schema present and a simple tool (2 params), the description covers action, constraints, and timing. Could mention error conditions, but overall adequately 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 descriptions cover both parameters (session_id and row_key) completely. The description does not add additional semantic value beyond what the schema provides, so baseline score of 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 uses the specific verb 're-include' and resource 'row', clearly stating the action. It naturally distinguishes from sibling 'exclude_row' by implying the opposite operation.

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 states no confirmation needed and the timing constraint ('at any point before approving the full validation run'). While it doesn't list alternatives, the context is sufficient for typical use.

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

patch_columnA

Add a new column to a completed validation table.

If confirmed=False, returns a cost ceiling estimate (max-case: all rows x all columns x per_cell_cost x 1.25; likely much less if run within 1 day of original validation due to cache).

If confirmed=True, adds column header to source Excel, runs validation with updated config (old columns hit cache, new column fully validated), merges new column results into output Excel. No QC on column patch runs (single-column QC is not meaningful; full-table QC ran on the original validation).

Only available after full validation completes (status=completed).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID of a completed validation.
column_nameYesName of the new column to add.
validation_targetYesValidation target spec for the new column (same structure as config.validation_targets entries).
confirmedNoSet True to approve and trigger the ColPatch run. Set False (default) to see the cost estimate first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

The description fully discloses behavioral traits: the cost estimate formula, caching behavior, merging of results, and lack of QC on patch runs. Annotations (readOnlyHint=false, destructiveHint=false) are consistent with the described non-destructive modification, and no contradictions exist.

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 concise with a front-loaded purpose statement and subsequent paragraphs explaining behavior in a logical flow. Every sentence adds necessary information without redundancy.

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?

Given the complexity (4 parameters, nested objects, output schema), the description covers all essential aspects: precondition (completed validation), two-phase execution, caching, cost estimation, and result integration. It is complete for an agent to determine correct usage.

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 baseline is 3. The description adds value by explaining the 'confirmed' parameter's role in toggling between estimate and execution, and provides context for the cost calculation. For other parameters, the schema descriptions already suffice.

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 starts with 'Add a new column to a completed validation table,' which is a specific verb and resource. It clearly distinguishes this tool from siblings like start_table_validation or refine_config by focusing on adding a column after validation completion.

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 description explains the two-mode behavior (confirmed=False for cost estimate, confirmed=True for execution) and explicitly states it is only available after full validation completes. However, it does not explicitly mention when not to use it or alternative tools for modifying existing columns.

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

refine_configA

Refine the generated validation config using natural language instructions.

Example instructions: 'Add a column for LinkedIn URL. Remove the revenue column. Make email validation stricter.'

Set defer_preview=True if you plan to do structural editing (exclude_row, add_pending_row, etc.) before the preview — this prevents a premature auto-preview from firing before your edits are complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesConversation ID of the refine session.
session_idYesSession ID associated with the conversation.
instructionsYesNatural-language instructions describing the config changes to make.
defer_previewNoSet True to suppress the auto-preview that fires after config refinement. Use when you intend to do structural editing (exclude rows, add pending rows, add columns) before the preview.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate non-readonly, non-destructive, open-world. Description adds auto-preview behavior and the effect of defer_preview. Does not detail persistence or rollback, but adds useful behavioral context.

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 terse paragraphs: purpose with examples, then defer_preview guidance. No excess words. Highly efficient.

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?

Assumes existence of conversation/session (required params) but does not explain lifecycle context (e.g., must have started refinement via start_table_validation). Output schema exists so return values not needed, but prerequisites are implicit.

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% with clear descriptions. Description adds example instructions and clarifies defer_preview usage beyond schema (e.g., 'prevents premature auto-preview'). Baseline 3 improved to 4.

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?

Description clearly states the verb 'refine' and resource 'validation config', with natural language instructions. Examples provided distinguish from sibling tools like 'start_table_validation' or 'approve_validation'.

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?

Provides specific guidance on when to set defer_preview to avoid premature auto-preview. However, does not explicitly compare to sibling tools for granular edits (e.g., exclude_row, add_pending_row) that might be alternatives.

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

reorder_preview_rowsA

Set the output row order for the validation run.

This is a display preference — it does not affect which rows are validated or the validation itself. Rows not in the list are sorted to the end.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID.
row_keys_in_orderYesComplete ordered list of row keys defining the desired output order.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations, the description adds critical behavioral context: it is a display preference, does not affect validation, and rows not in the list are sorted to the end. No contradictions.

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 concise sentences, front-loaded with purpose, then clarifying details. No wasted words.

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 simple reordering tool with good annotations and schema, the description covers all key behavioral aspects and is complete.

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 both parameters are described. The description adds value by explaining the sorting behavior for omitted rows, going 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?

The description clearly states the tool sets the output row order for the validation run and explicitly clarifies it is a display preference, distinguishing it from tools that affect validation or row inclusion.

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

Usage Guidelines5/5

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

The description explicitly states when to use (to reorder display) and what it does not do (affect validation), with clear implications that alternatives like include_row/exclude_row are for validation changes.

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

send_conversation_replyA

Send a user reply in an ongoing conversation (interview or table-maker).

After sending, poll get_conversation for the AI's next response.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesConversation ID to send the reply to.
session_idYesSession ID associated with the conversation.
messageYesReply message text to send to the AI.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Discloses that the tool triggers a stateful action (openWorldHint=true) and requires polling for AI response, adding value beyond annotations. However, does not detail rate limits, authentication needs, or potential delays.

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 concise sentences: one for purpose, one for next step. No redundant or vague phrasing; efficient and clear.

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?

Tool is straightforward and the description, combined with annotations and output schema (not shown but present), covers key behavioral aspects. Explains the polling pattern, which is critical for correct usage.

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?

Input schema covers 100% of parameter descriptions, so the description adds no additional parameter semantics. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states the action (send a user reply) and context (ongoing conversation, interview or table-maker). Distinguishes from sibling tools like get_conversation and wait_for_conversation, which serve different purposes.

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

Usage Guidelines4/5

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

Provides explicit instruction to poll get_conversation after sending, guiding the agent on the expected workflow. Lacks explicit when-not-to-use or alternatives, but for a focused tool this is sufficient.

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

start_reference_checkA

Submit a reference-check job to fact-check text or a document.

For inline text: start_reference_check(text="The claims to fact-check...")

For a PDF or document, upload it first then pass the s3_key: upload_file(file_path, file_type="pdf") → returns s3_key start_reference_check(s3_key=s3_key) Do NOT call start_table_validation for PDFs — that starts the table validation pipeline, which is not what you want for a reference check.

Designed for text with 4 or more factual claims; fewer claims may produce low-quality results.

Three phases:

  • Phase 1 (free): claim extraction + 3-row preview validation (auto-triggered). wait_for_job blocks until status=preview_complete. Review preview_table (3 validated sample claims) and cost_estimate.

  • Approval gate: call approve_validation to proceed.

  • Phase 2 (charged): full claim validation. Returns XLSX, viewer URL, metadata.

Set auto_approve=True to skip the approval gate and run straight through to completion automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoInline text to fact-check (provide either text or s3_key, not both).
s3_keyNoS3 key of an already-uploaded file to fact-check (provide either text or s3_key).
auto_approveNoSkip the preview approval gate and run straight through to full validation automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=false and openWorldHint=true. The description goes well beyond by detailing the three-phase workflow, auto-approve option, cost implications, and expected outputs (XLSX, viewer URL, metadata). It explains the approval gate and how wait_for_job interacts with phases, providing rich behavioral context.

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 well-structured with clear sections for inline text, file upload, and phases. It is informative but slightly lengthy; some details like the exact return of upload_file could be omitted. Overall, it is organized and front-loaded with key purpose.

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?

Given the tool's multi-phase complexity, the description covers all essential aspects: input formats, phase details, approval gate, auto-approve, output types, and links to other tools (upload_file, wait_for_job, approve_validation). The output schema exists to cover return values, so completeness is excellent.

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% with clear descriptions for all three parameters. The description adds value by explaining the mutual exclusivity of text and s3_key, and clarifying the behavior of auto_approve. However, most parameter meaning is already in the schema, so the description enhances rather than replaces.

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 clearly states the tool submits a reference-check job to fact-check text or documents. It distinguishes itself from sibling tool start_table_validation by explicitly stating not to use that for PDFs, and provides two input modes: inline text or S3 key of an uploaded file.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: for fact-checking text with 4+ claims, and when not to use: fewer claims may produce low-quality results. It also warns against using start_table_validation for PDFs, naming an alternative tool.

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

start_table_makerA

Start a Table Maker conversation to generate a research table.

Describe the table you want in natural language, e.g.: 'Create a table of AI startups that raised Series A in 2024 with columns: company name, funding amount, investors, product description.'

auto_start: When True, the AI skips the confirmation step and generates the table immediately from the message alone, without asking clarifying questions or showing a structure for approval. Use when the message fully describes the desired table and no back-and-forth is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesNatural-language description of the table to generate, including desired columns and subject matter.
auto_startNoWhen True, skip clarifying questions and generate the table immediately from the message alone.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate the tool is not read-only and not destructive, but the description adds transparency by detailing the conversation initiation and the auto_start behavior, which skips confirmation steps. It does not contradict 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?

The description is concise, front-loaded with the purpose, includes a clear example, and explains parameters efficiently. Every sentence serves a purpose without redundancy.

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?

Given the tool's complexity, the description covers the main parameters and usage. With an output schema present (as per context signals), the description does not need to explain return values. It is complete for effective tool invocation.

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%, but the description adds value by providing examples for the message parameter and clarifying when to use auto_start. This goes beyond the schema descriptions, which are already adequate.

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 clearly states the tool starts a Table Maker conversation for generating research tables, using a specific verb and resource. It provides an example and distinguishes itself from sibling tools like start_reference_check or start_table_validation by its unique purpose.

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 explains how to use the tool, including the auto_start parameter behavior, but does not explicitly mention when to use it versus alternatives or when not to use it. It lacks guidance on prerequisites or exclusion criteria.

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

start_table_validationA

Confirm the upload and detect matching prior configs.

Call this immediately after upload_file completes (or after the curl upload finishes when using HTTP/Railway transport). Returns config_matches with match_score — if score >= 0.85 a prior config can be reused directly.

instructions: Optional natural-language description of what to validate and how (e.g. "This table lists clinical trials — validate that trial IDs, phase, and primary endpoints are accurate"). When provided, the upload interview is bypassed: the AI reads the table structure + instructions and generates a config directly without asking clarifying questions. Preview is auto-triggered immediately after.

config_id: Optional ID of a known prior configuration to reuse directly. When provided, skips matching and the interview entirely — applies the config and queues the preview immediately. Response includes preview_queued=true and job_id. Use when you already know the config_id (e.g. from a previous job's get_results response).

Config generation and the 3-row preview are free. Full validation is charged at approve_validation — you still see the cost at preview_complete before anything is billed. If balance is insufficient at that point, approve_validation returns an insufficient_balance error.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID returned by upload_file.
s3_keyYesS3 key returned by upload_file identifying the uploaded file.
filenameYesOriginal filename of the uploaded file.
instructionsNoOptional natural-language description of what to validate; bypasses the upload interview when provided.
config_idNoOptional ID of a prior configuration to reuse; skips the interview and queues the preview immediately.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate the tool is not read-only and not destructive. The description adds behavioral context: config generation and preview are free, full validation is charged at approve_validation, and balance insufficiency leads to an error. It does not fully describe all side effects, but adds value beyond annotations.

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 well-structured with clear separation of concepts and front-loaded key information. It is slightly verbose but every sentence adds value. Could be more concise, but efficiently conveys important details.

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?

Given the tool's complexity (5 parameters, output schema exists), the description covers the workflow, charging model, and error handling. It does not detail return values, but output schema likely provides that. It is adequately complete.

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 input schema already provides 100% coverage with descriptions, but the description elaborates on parameters like instructions and config_id, explaining their effects (bypassing interview, skipping matching). This adds meaningful context 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?

The description clearly states the tool's purpose: to confirm upload and detect matching prior configs. It specifies the action verb ('confirm', 'detect'), the resource (upload and prior configs), and distinguishes from siblings like start_reference_check or start_table_maker.

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

Usage Guidelines5/5

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

The description explicitly instructs to call this immediately after upload_file completes, and explains when to use config_id vs instructions. It also mentions that if match_score >= 0.85, a prior config can be reused directly, providing clear usage context.

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

trigger_previewA

Trigger a preview run after structural editing is complete.

Call this after finishing row/column edits (exclude_row, add_pending_row, add_column, etc.) to explicitly queue a preview job.

This clears skip_auto_preview and queues the preview. Then call wait_for_job(session_id) to track progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID to trigger preview for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide basic traits (non-readonly, non-destructive). The description adds specific behavioral details: 'clears skip_auto_preview and queues the preview.' This goes beyond annotations and gives the agent a better understanding of side effects.

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 three sentences, each serving a distinct purpose: stating the action, clarifying context, and explaining behavior plus next step. No filler or redundancy.

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?

Given the tool's low complexity (single param, output schema exists), the description covers purpose, usage context, behavioral effect, and next step. It lacks mention of return values but is otherwise 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%, with the session_id parameter already described as 'Session ID to trigger preview for.' The description does not significantly elaborate beyond that, but it reinforces usage context by mentioning session_id in the follow-up step. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Trigger a preview run' and specifies the resource ('preview run') and context ('after structural editing is complete'). It distinguishes itself from sibling tools by mentioning it is called after row/column edits, providing explicit 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 description explicitly instructs when to call this tool ('after finishing row/column edits') and provides follow-up steps ('call wait_for_job(session_id) to track progress'). While it does not mention alternatives or when not to use, the guidance is clear and actionable.

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

update_tableA

Re-run validation on a previously processed table (update in place).

source_version can pin a specific prior result version; omit for latest.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_job_idYesJob ID of the previously processed table to re-run validation on.
source_versionNoSpecific prior result version to pin; omit to use the latest version.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

Description says 'update in place' implying modification, consistent with readOnlyHint=false. However, no additional behavioral details beyond annotations; no mention of overwrite behavior or side effects.

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 terse sentences, no fluff, critical info front-loaded. Every word contributes.

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?

Output schema exists, so return values are covered. However, the description omits what 'update in place' means for previous results (overwrite vs new version). Functional but leaves some questions for a validation tool.

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 adequate parameter descriptions. Description adds context for source_version ('pin...latest'), but largely redundant with schema. 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?

Description clearly states 'Re-run validation on a previously processed table', specifying verb and resource. No ambiguity; distinguishes from siblings like add_validated_rows.

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?

Provides guidance on the source_version parameter but lacks explicit when-to-use vs alternatives. Implied for re-running validation, but could contrast with add_validated_rows or start_table_validation.

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

upload_fileA

Upload a file to Subindex.

RECOMMENDED: always try with file_path first. If the server can read the file (stdio/uvx transport), it uploads in one step and returns session_id

  • s3_key immediately. If the server is remote (HTTP/Railway transport), file_path raises "File not found" — in that case call again without file_path to get a presigned S3 upload_url and curl_command instead.

With file_path (one step — stdio/uvx transport): upload_file(filename="data.xlsx", file_type="excel", file_size=12345, file_path="/abs/path/data.xlsx") → server reads + uploads → returns session_id, s3_key

Without file_path (two step — HTTP/Railway transport or any remote server): upload_file(filename="data.xlsx", file_type="excel", file_size=12345) → returns upload_url + curl_command → run the curl_command (requires shell/Bash access), then call start_table_validation(session_id, s3_key, filename)

Note: the two-step path requires shell access to run curl. If you have no shell (e.g. Claude Desktop), use the stdio/uvx transport instead so file_path works.

file_type must be one of: "excel", "csv", "pdf" The presigned URL expires in ~15 minutes — run curl immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesOriginal filename including extension (e.g. 'data.xlsx', 'report.csv', 'doc.pdf').
file_typeYesFile format — must be one of: "excel", "csv", "pdf".
file_sizeYesFile size in bytes. Run: stat -c%s <file> (Linux/macOS) or (Get-Item '<file>').Length (PowerShell).
file_pathNoAbsolute local path to upload directly (uvx/local transport only — the MCP server reads the file). Omit when using HTTP/Railway transport; the response curl_command handles the upload instead.
session_idNoOptional existing session ID to associate this upload with.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Discloses the two-step behavior, presigned URL expiration (15 minutes), and transport dependency. Annotations (readOnlyHint=false) are consistent; description adds valuable context beyond annotations.

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?

Well-structured with headings and examples, but slightly verbose. Front-loads purpose and uses clear sections, though some repetition could be trimmed.

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?

Given tool complexity (two modes, transport-dependent) and presence of output schema, the description covers fallback logic, expiration, and prerequisites thoroughly.

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%, but description adds extra context for file_path (recommendation, transport dependency) and example usage. Adds meaning beyond 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?

Clearly states 'Upload a file to Subindex' and distinguishes two modes based on transport. The verb+resource is specific and distinct from sibling tools.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'always try with file_path first', explains when to use without file_path, and notes shell access requirement. Offers alternatives for different transports.

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

wait_for_conversationA
Read-only

Wait for a conversation turn to complete, emitting live synthetic progress.

Preferred over manually polling get_conversation. Since conversation processing has no native progress signal, this tool emits time-based synthetic progress — advancing quickly at first, then slowing as it approaches expected_seconds — so the MCP host shows a "still thinking" indicator rather than a frozen bar.

Returns when any of these conditions are met: user_reply_needed=True → AI asked a question; call send_conversation_reply trigger_execution=True → AI approved execution; preview is auto-queued, switch to wait_for_job(session_id) Non-processing status → unexpected terminal (inspect status field) Timeout → returns last known state with _wait_timeout note

Applies to all conversation types: upload interview, table-maker interview, config refinement.

expected_seconds: typical AI response time for this turn (default 120). First table-maker turn (research + planning): ~120–180s. Upload interview first turn (CSV analysis + plan): ~90–150s. Follow-up confirmations ("yes, proceed"): ~30–60s. poll_interval: seconds between status checks (default 8). timeout_seconds: max wall time before returning (default 900). Upload interview turns can take up to 15 minutes — set accordingly.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesConversation ID to wait on.
session_idYesSession ID associated with the conversation.
expected_secondsNoExpected AI response time in seconds — used to shape synthetic progress curve (default 120).
timeout_secondsNoMaximum wall-clock seconds to wait before returning last known state (default 900).
poll_intervalNoSeconds between status poll cycles (default 8).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses the synthetic progress behavior, timing curve, and detailed return conditions. Annotations already indicate readOnlyHint=true, and the description adds significant behavioral context beyond 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?

The description is thorough and well-structured with bullet points for return conditions and parameter guidance. Although lengthy, every sentence adds value and the organization aids readability.

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?

Given the output schema exists, the description covers all necessary aspects: purpose, usage, parameter guidance, return conditions, and scope. No gaps remain for effective tool selection and invocation.

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?

While the input schema covers 100% of parameter descriptions, the description adds contextual guidance (e.g., expected_seconds ranges for different turn types) that enhances understanding 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?

The description clearly states the tool waits for a conversation turn to complete and emits synthetic progress. It specifies return conditions and distinguishes itself from manually polling get_conversation.

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

Usage Guidelines5/5

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

The description explicitly recommends this over polling get_conversation, provides context for all conversation types, and gives detailed guidance on expected_seconds values based on turn type.

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

wait_for_jobA
Read-only

Wait for a job to reach a terminal state, emitting live MCP progress notifications.

Preferred over manually looping get_job_status. The MCP host shows a live progress indicator while this tool holds the connection — no extra token cost.

Architecture ──────────── Every poll cycle does two things in sequence:

  1. Fetch /messages → extract native progress %, emit MCP notification

  2. Fetch /status → act on phase transitions or terminal states

This separation means messages drive the visual indicator (they are more real-time) while status is the authoritative source for workflow transitions. Neither endpoint is used as a shortcut to skip the other; both are polled every cycle so transient failures in one don't cause false terminations.

Progress is always monotonically non-decreasing. Within a phase, msg_progress can oscillate (e.g. QC triggers new row-discovery rounds in the table-maker), but the emitted value is clamped to last_emitted. Across phases a geometric slice scheme is used so the bar never goes backward regardless of how many phases occur.

Progress geometry (lazy split) ────────────────────────────── Starts with the full 0–99 range so single-phase jobs (e.g. full validation after approve_validation) map their native 0–100% directly across the whole bar. On each intermediate phase transition, 80% of the current range is "spent" on the completed phase and the remaining 20% is handed to the next phase — keeping progress monotonic for any number of QC re-discovery rounds or pipeline stages. True terminal always emits exactly 100.

Terminal states: preview_complete, failed, completed-without-intermediate-step. Intermediate: completed + current_step in (Config Generation, Table Making, Claim Extraction, …) — tool advances phase and keeps polling.

Returns the same payload shape as get_job_status so downstream tools (approve_validation, get_results, etc.) apply directly.

job_id: the session_id value returned by upload_file / start_table_validation / start_table_maker. "job_id" and "session_id" are the same string — every workflow uses session_id as its job identifier throughout the pipeline. timeout_seconds: max wall time before returning last known state (default 900). Upload-interview + config-gen phases and large table previews can take up to 15 minutes — set timeout_seconds=900 or higher for long-running jobs. poll_interval: seconds between poll cycles (default 10) warmup_seconds: when > 0, applies synthetic sqrt-curve progress from 0→70% over this many seconds during the pre-message phase (before the first progress message or intermediate step arrives). Use this when the pipeline has a silent setup phase (e.g. instructions= mode where the backend runs an internal AI interview + config generation before preview messages begin). The warmup is automatically disabled once the first intermediate step completes (phase-split takes over). For instructions= mode, pass 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesSession ID returned by upload_file, start_table_validation, or start_table_maker.
timeout_secondsNoMaximum wall-clock seconds to wait before returning last known state (default 900).
poll_intervalNoSeconds between status poll cycles (default 10).
warmup_secondsNoSeconds of synthetic sqrt-curve progress during silent setup phases (default 0; use 300 for instructions= mode).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses extensive behavioral details: the polling cycle (fetch messages then status), progress monotonicity, progress geometry (lazy split with 80/20 rule), terminal vs intermediate states, and the warmup mechanism. These go far beyond the annotations (readOnlyHint, openWorldHint) and are consistent with them.

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 fairly long but well-organized with section headings (Architecture, Progress geometry, etc.). The key purpose and preference statement are front-loaded. Every section provides necessary detail for correct usage, so it earns its length.

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?

Given the complexity (4 parameters, output schema present), the description is complete: it explains return shape (same as get_job_status), covers all parameters with usage notes, details internal polling architecture, and provides edge-case handling (warmup, intermediate phases). No gaps remain.

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?

All 4 parameters have schema descriptions (100% coverage). The description adds extra context: job_id is same as session_id, timeout_seconds default with real-world time guidance, warmup_seconds with use-case-specific advice. This adds meaning beyond the schema, justifying a score above baseline 3.

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 'Wait for a job to reach a terminal state, emitting live MCP progress notifications.' This is a specific verb+resource combination and explicitly distinguishes from sibling tool get_job_status by stating it is 'preferred over manually looping get_job_status.'

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 description provides clear usage guidance: it is preferred over get_job_status for waiting, and it explains when to use warmup_seconds (e.g., 300 for instructions= mode). However, it does not explicitly state when not to use this tool or list alternatives beyond get_job_status.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct aspect of the validation pipeline—row management, job control, configuration, results, and account info—with no overlapping purposes. Even similar tools like add_pending_row vs add_validated_rows are clearly differentiated by stage.

Naming Consistency5/5

All 25 tool names follow a consistent verb_noun pattern (e.g., add_pending_row, get_results, wait_for_job). The naming is uniform and predictable, making it easy to infer functionality.

Tool Count4/5

With 25 tools, the set is on the higher side but each tool is justified by the server's comprehensive workflow (upload, config, preview, editing, validation, results, updates, and account management). Some consolidation of polling tools might be possible, but overall the count is reasonable for the scope.

Completeness5/5

The tool surface covers the entire lifecycle: file upload, table configuration, preview, structural editing, approval, full validation, result retrieval, post-validation updates, and even reference checking. Account tools (get_balance, get_usage) are also included, leaving no obvious gaps for the stated domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables iterative deep research by integrating AI agents with search engines, web scraping, and large language models for efficient data gathering and comprehensive reporting.
    8
    323
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enhances LLM applications with deep autonomous web research capabilities, delivering higher quality information than standard search tools by exploring and validating numerous trusted sources.
    364
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A multi-agent research system that decomposes complex queries into targeted sub-questions, searches the web in parallel, scores source credibility, and synthesizes findings into structured markdown reports.
    1
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EliyahuAI/mcp-server-subindex'

If you have feedback or need assistance with the MCP directory API, please join our Discord server