Skip to main content
Glama

estonian-mcp

Claude is quite bad at Estonian, so this MCP is here to fix that. Give it a shot.

CI Smithery License: Apache 2.0 Python 3.10–3.13 MCP

A small Model Context Protocol server that exposes EstNLTK, the Estonian NLP toolkit, as tools any LLM client can call in real time, backed by EKI's orthography rules (Reeglid) and public-domain Riigi Teataja legislation. Hand it Estonian text, get back correct lemmas, morphology, POS tags, spell-check + suggestions, syllables, named entities, WordNet synonyms, fastText-based related words, a register hint, orthography/grammar checks, kantseliit and terminology-consistency checks for reports and academic prose, and, for legal texts, legalese simplification and canonical legal-usage lookups.

One-click install from Anthropic's official Connectors Directory, or self-host. See below.

If your AI agent has to draft, edit, or proofread Estonian, this wires in ground truth so it stops guessing on the mechanical layer (spelling, case forms, conjugation) and gives it real Estonian synonyms instead of inventing them.

It also covers the editorial layer, where a word can be correctly spelled, morphologically valid and still wrong: check_officialese for bureaucratic Estonian in reports and academic prose, check_term_consistency for a document that names one thing three ways, and synonyms read as a word-fit check — its glosses carry domain constraints (korpus is specifically "kirjaliku või suulise teksti elektrooniline kogu", so a set of images is not one, however natural it sounds in ML jargon).

Benchmark: on TalTech's inflection_et gold dataset (a noun-phrase inflection benchmark; Lillepalu & Alumäe, arXiv:2510.21193), our morphology engine scores 99.1% first-candidate / 99.1% any-candidate over 1,400 items (first-candidate is 96.6% without the optional fastText model, which is what ranks a lemma's inflection types; any-candidate is 99.1% either way). Every one of the 13 residual misses is a gold row that contradicts EKI, so EKI-adjudicated the score is 100% / 100%; the disputed rows are listed with their citations in data/inflection_et_eki_disputes.json. Reproduce: uv run python scripts/eval_inflection.py. (We're a tool server, not a rankable LLM, so this scores our tools against published gold data.)

Three ways to use it:

  1. 👉 One-click from Anthropic's Connectors Directory, the easiest path, no terminal, no install, no URL to paste. See Get started in 30 seconds below.

  2. One-click on Smithery, install from the estonian-mcp listing.

  3. Self-host, clone, run locally as stdio, or deploy your own container to Fly.io / any host. See Self-host (advanced).

What it does

Tool

What it does

tokenize(text)

Split text into sentences and words

analyze_morphology(text)

Lemma, POS, form, root, ending, clitic, compound parts, ambiguity count, and usage flags (archaic / foreign / interjection / abbreviation / proper-noun) per word

paradigm(word)

Full Vabamorf-generated inflection paradigm, 14 cases × 2 numbers for nominals (including ordinals, comparatives and superlatives), ~30 verb forms, with Estonian labels per form. A lemma with several inflection types (kottkoti or kota, two different words) returns one consistent table per type, corpus-ranked, rather than a merged one; pass an inflected form (koti) to select the type you mean

lemmatize(text)

Just the dictionary form per word

pos_tag(text)

Just the part-of-speech tag per word

spell_check(text)

Spelling check + correction suggestions

syllabify(word)

Syllables with quantity + accent

named_entities(text)

People / places / organisations

synonyms(word)

Synsets from Estonian WordNet, synonymous lemmas + definition + examples per word sense

find_related_words(word)

Top-N semantically nearby words via fastText embeddings (semantically related, not always synonymous)

classify_register(text)

Coarse formal/colloquial register hint with matched markers, consistency flag for register-mixed text, plus structural signals (umbisikuline tegumood ratio, noun density) so dense officialese no longer scores "neutral"

check_style(text)

Style metrics, lemma-aware repetition, umbisikuline-tegumood ratio, sentence-length variance, hedging-word density

check_officialese(text)

Kantseliit check for non-legal prose (reports, academic, business), where check_legalese stays silent. Nominalisation density (hindaminehindama), impersonal-voice ratio, clause stacking (mille käigus … ning …), Estonian-calibrated sentence length, and admin filler (omabon, viidi läbitehti, mudeli poolt loodudmudeli loodud)

check_term_consistency(text)

One referent, one term. Flags a document that calls the same thing andmestik on page 1 and teadusandmestik on page 2, via shared compound head or shared Estonian WordNet synset, with per-variant counts so you can standardise on the dominant one

check_redundancy(text)

Pleonasm check, flags semantic doubling like samuti ka (also+also), kõige optimaalsem (most+optimal), and fixed redundant phrases

check_object_case(text)

Käändeõpetus, flags direct-object case errors under negation and after partitive-only verbs (armastama, vihkama, vajama, …)

check_abbreviation_hyphenation(text)

Lühendiortograafia, flags abbreviations with case endings missing the EKI-mandated hyphen (MCPstMCP-st, OÜleOÜ-le)

check_compound_familiarity(text)

Calque-risk diagnostic, for each compound noun, returns top fastText neighbours and flags compounds with weak similarity (mõtteliin-style translationese, e.g. literal English "train of thought" → real Estonian is mõttekäik) for second-look review

check_capitalization(text)

Algustäheortograafia check, flags wrongly capitalized weekdays, months, nationalities, and language/culture adjectives per EKI's Reeglid

check_compounds(text)

Liitsõnaõigekiri, flags common AI-generated splits of words that should be a single compound (kooli majakoolimaja)

check_punctuation(text)

Kirjavahemärgid, flags missing commas before subordinating conjunctions (et, sest, kuna, kuid, vaid, nagu, …)

check_hyphenation(word)

Poolitamine, safe line-break positions for an Estonian word, syllable-boundary based with no-orphan-edge rule

check_numbers(text)

Numbrite õigekirjutus, flags decimal separators (3.143,14) and thousands separators (1,000,0001 000 000)

check_legalese(text)

Legal plain-language aid, flags archaic kantseliit filler (käesolevsee, juhul kuikui) and over-long sentences to simplify, while listing the terms of art that must be preserved so simplification doesn't change legal meaning

check_defined_terms(text)

Long-document structure, maps terms defined with (edaspidi «X»), counts their usage, lists § / lõige / punkt cross-references, and flags defined-but-unused or doubly-defined terms (cap raised to 500k chars)

common_legal_usage(word)

Canonical legal collocations from an offline corpus index, how often a term occurs in legislation and the words most often seen before/after it (hagiesitama hagi, kohustuskohustuse täitmine), so the model uses real legalese instead of inventing it (bundled index: 5 core Riigi Teataja codes, obligations, civil procedure, property, penal, general; expandable)

POS tag set: S=noun, V=verb, A=adj, P=pron, D=adv, K=adp, J=conj, N=numeral, I=interj, Y=abbrev, X=foreign, Z=punct.


Related MCP server: Võro MCP Server

✨ Get started in 30 seconds (no install)

This section is for everyone, including if you've never opened a terminal in your life. You'll be done before your tea is steeped.

estonian-mcp is in Anthropic's official Connectors Directory, so on most Claude apps you can add it with one click, no URL to paste, no config, no auth.

One-click from the Connectors Directory (Cowork, claude.ai, Claude Desktop)

  1. In your Claude app, open Settings → Connectors.

  2. Browse connectors (the directory) and search estonian, it shows up as the Estonian connector.

  3. Click Add / Connect. That's it, the server is public, so there's no authentication step.

  4. Start a new chat and write in Estonian, proofread an email, study a paragraph, draft a legal clause. Claude reaches for the tools whenever it needs to verify spelling, lemmas, morphology, or legal phrasing rather than guessing.

(On older Claude Desktop without a Connectors menu, use the stdio path in Self-host (advanced).)

Prefer to paste the URL? (or don't see it in the directory yet)

Any MCP-over-HTTPS client can also connect directly to the hosted server: we run it for you at https://estonian-mcp.fly.dev/mcp. In Settings → Connectors → Add custom connector, paste:

https://estonian-mcp.fly.dev/mcp

Leave every "Authentication" / "API key" / "Bearer token" field empty (the server is public, no token needed), then Save.

In Claude Code (CLI)

One command, no clone, no Python, no uv. Point Claude Code at the hosted server over HTTP:

claude mcp add --transport http estnltk https://estonian-mcp.fly.dev/mcp

Then run /mcp inside a session to confirm estnltk shows as connected. The tools are live immediately, ask Claude to proofread or lemmatize Estonian text and it'll reach for them.

Want a fully local, zero-network setup instead? See the stdio path in Self-host (advanced).

Don't see your client here?

Any tool that supports MCP over HTTPS can connect, just point it at https://estonian-mcp.fly.dev/mcp with no auth. If your client only speaks stdio (Cursor, VS Code MCP, Continue, Zed), jump to the local-install path in Self-host.


💡 Pro tip, teach Claude your Estonian alongside the MCP

This MCP gives Claude correct linguistics: real lemmas, real case forms, real spelling. What it can't do is teach Claude your voice: the register, idioms, and tone you actually want when writing.

You handle the voice; the MCP handles the correctness. Layer them.

A few things to add to your Claude project / custom instructions / system prompt to get this right:

  • Set the register. "Always reply in formal officialese Estonian for legal and government topics, and in conversational Tallinn speech for chat replies. Never mix the two in one message."

  • Pin the dialect / region. "I'm from Tartu, prefer southern Estonian phrasings where there's a choice (e.g. 'kus sa lähed' rather than 'kuhu sa lähed' for casual speech)."

  • Show your tone with examples. Paste 3–4 short paragraphs of your own writing into the project instructions and ask Claude to match that voice. Real examples beat any abstract description.

  • Anchor common mistakes. "You always confuse kasutama (to use) with käsitlema (to handle / to deal with). Double-check those with the lemmatize tool before sending."

  • Direct the MCP explicitly when it matters. "Before sending any Estonian email, run spell_check on every word. Show me misspelled words with suggestions before drafting."

  • Use classify_register as a sanity check. "After drafting, run classify_register on the final text and warn me if it lands in 'formal' or 'colloquial' when I asked for the opposite." The classifier is coarse but reliably catches drift into officialese (käesolev, vastavalt, sätestama) or slang (mõnus, vinge, kuule).

  • Use synonyms to break repetition. "This newsletter uses kasutama four times. Look up synonyms via the MCP and suggest natural-sounding swaps." You'll get real Estonian alternatives with definitions, not invented ones.

  • Use find_related_words for richer rewrites. "What words pattern with kohv in Estonian? Use that to suggest three alternative phrasings for our café-launch ad copy." This is fastText-based, so it surfaces near-neighbours that aren't strict synonyms, useful when you want adjacent concepts, not just same-meaning swaps. (Quick rule of thumb: synonyms for "say the same thing differently"; find_related_words for "what else belongs in this conceptual space.")

The MCP catches misspelled words and invented case forms; your prompt drives the style. Together they make Claude actually useful for writing in Estonian, not just plausible-looking.


How to prompt it once it's connected

Most prompts don't need to mention the tools by name, Claude picks the right one. A few patterns that work especially well:

Proofread this Estonian email and use spell_check on any words
you're unsure about: <text>
Lemmatize this Estonian paragraph, then translate the lemmas to
English so I can study vocabulary: <text>
Analyze the morphology of this sentence and explain the case
markings: "Tallinnas elavad eestlased räägivad eesti keelt."
Extract the people and places from this Estonian news article,
then summarise in one paragraph.
This Estonian draft uses "kasutama" three times, look up synonyms
via the MCP and rewrite each occurrence with a natural-sounding
alternative that preserves the meaning.
Classify the register of this draft. If it scores formal, soften
it for a casual newsletter audience. If it scores colloquial,
tighten it for a B2B email.

The model calls the tool, gets authoritative output, and bases its response on that, no more hallucinated lemmas or invented case forms.


All clients at a glance

Client

No-install path

Local-install path

Claude Cowork

✅ One click (directory)

✅ stdio via JSON

Claude Desktop

✅ One click (newer)

✅ stdio via JSON

claude.ai web

✅ One click (directory)

n/a

Claude Code (CLI)

claude mcp add --transport http

claude mcp add ... (stdio)

Cursor

✅ Paste URL

✅ stdio via JSON

VS Code MCP / Continue / Zed

n/a

✅ stdio via JSON

For Claude apps the no-install path is one click from the Connectors Directory (search "estonian"). Other MCP clients paste https://estonian-mcp.fly.dev/mcp in their Connectors UI. The local-install path clones the repo and points the client at python server.py.

Reducing permission prompts

Claude clients ask for confirmation before calling a tool from a custom/third-party connector, that's the client's security default, not something the server controls (there's no MCP field a server can send to suppress it). You'll especially see it right after adding or updating the connector, since the client re-checks tools it hasn't seen before.

Good news: all 26 tools are marked readOnlyHint: true (they only read text, never write or call out), so any well-behaved client can safely let you allow them once and stop asking:

  • Claude Desktop / Cowork / claude.ai, when the prompt appears, choose "Always allow" for the connector (or toggle it in the connector's settings). One time, then it's quiet.

  • Claude Code, run /permissions and allow the estonian-mcp tools, or allow the whole server at once.

Re-releasing or updating the connector can reset that "always allow" state (the client sees changed tools and re-asks), just allow it again. A verified listing in the Anthropic Connectors Directory also gets smoother permission UX than an unverified custom connector.


Self-host (advanced)

The hosted instance is convenient, but if you'd rather run your own (privacy, latency, custom auth, offline use), the same one-file server works locally and as a container.

Run locally as stdio (zero network)

EstNLTK requires Python 3.10–3.13.

git clone https://github.com/silly-geese/estonian-mcp.git
cd estonian-mcp
uv sync
uv run python scripts/fetch_resources.py   # required, see below
uv run python tests/test_smoke.py          # verify

Don't skip the fetch_resources.py step. uv sync installs Python packages, but three of the things the server needs are data, not Python distributions, so they can't live in uv.lock: NLTK's punkt_tab tokenizer, Estonian WordNet (~26 MB), and the fastText embeddings (~33 MB). Without them check_compounds and check_term_consistency raise, synonyms refuses to run, and check_term_consistency reports degraded: true. The script is idempotent, so re-running it is free.

The server never downloads anything itself — not at import, not on a tool call. That's the privacy promise: no outbound HTTP from the running process. Fetching is a separate step you run knowingly, and the Docker image does the equivalent at build time.

Then wire it into your client.

Claude Code:

claude mcp add estnltk -- /absolute/path/to/uv \
  --directory /absolute/path/to/estonian-mcp \
  run python server.py

Claude Desktop / Cowork (local mode), edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "estnltk": {
      "command": "/absolute/path/to/uv",
      "args": [
        "--directory", "/absolute/path/to/estonian-mcp",
        "run", "python", "server.py"
      ]
    }
  }
}

Cursor, same JSON shape in ~/.cursor/mcp.json.

Run as a remote server (HTTP)

The same server.py speaks streamable-http over the network. Two auth postures:

  • Public mode (ESTNLTK_MCP_PUBLIC_MODE=1), no bearer token, per-IP rate limit (default 300/min). This is how the silly-geese hosted instance runs.

  • Bearer mode (default), every request must carry Authorization: Bearer <token> (or Smithery's ?config=<base64>); per-token rate limit. Refuses to start without ESTNLTK_MCP_AUTH_TOKEN ≥16 chars.

Fly.io public deployment (matches silly-geese):

fly auth login
fly apps create my-estonian-mcp
# one-time: persistent volume for /metrics counters (~$0.15/month)
fly volumes create estonian_mcp_data --size 1 --region ams -a my-estonian-mcp
fly deploy

fly.toml already sets ESTNLTK_MCP_PUBLIC_MODE=1 and mounts the volume at /data, so no token needed and /metrics counters survive machine restarts. Endpoint: https://my-estonian-mcp.fly.dev/mcp.

Fly.io with bearer auth, remove ESTNLTK_MCP_PUBLIC_MODE from fly.toml's [env] block, then:

fly secrets set ESTNLTK_MCP_AUTH_TOKEN="$(python3 -c 'import secrets;print(secrets.token_urlsafe(32))')"
fly deploy

Generic Docker (any container host):

# Public
docker run -p 8081:8081 -e ESTNLTK_MCP_PUBLIC_MODE=1 \
  ghcr.io/silly-geese/estonian-mcp     # or build from source

# Bearer
docker run -p 8081:8081 \
  -e ESTNLTK_MCP_AUTH_TOKEN="$(python3 -c 'import secrets;print(secrets.token_urlsafe(32))')" \
  ghcr.io/silly-geese/estonian-mcp

Behind nginx, with TLS and a token per clientdeploy/ is a Docker Compose stack (app + nginx + certbot) for running this on your own host. nginx terminates TLS with Let's Encrypt certificates, holds one bearer token per client with per-client rate limits and one-line revocation, meters the requests it refuses as well as the ones it serves, and answers OAuth discovery for connectors that cannot send a static Authorization header. It writes no access log unless you turn one on. See deploy/README.md.

cp .env.example .env         # set DOMAIN, LETSENCRYPT_EMAIL, INTERNAL_TOKEN
./deploy/new-token.sh my-laptop
./deploy/init-letsencrypt.sh

Smithery auto-builds from smithery.yaml and hosts the image for you. Fork, connect on Smithery, deploy. The shipped configSchema is empty (one-click install) because the deployment runs in public mode; flip it back if you fork to a bearer-mode setup.


Security

  • stdio mode: pure local subprocess. No network egress, no shell exec, no fs writes, no telemetry.

  • HTTP / public mode: no auth required (intentional for the free public service). Per-IP rate limit (300/min default). Same hardening as bearer mode: no shell exec, no fs writes, no telemetry, size-bounded inputs.

  • HTTP / bearer mode: ESTNLTK_MCP_AUTH_TOKEN (≥16 chars) required, server refuses to start without it. Bearer auth on every request, constant-time comparison, per-token rate limit (120/min).

  • Common to all HTTP: /health is the only unauthenticated path. No request or token logging. proxy_headers is off: the server reads X-Forwarded-For itself, counting ESTNLTK_MCP_TRUSTED_PROXY_HOPS entries from the RIGHT (default 1, for Fly's single edge proxy), because the leftmost entry is caller-controlled and letting uvicorn trust it defeated the per-IP rate limit (0.5.4).

  • Inputs: 100 KB cap per text tool, 200 chars for syllabify. Oversized inputs return a structured error rather than hanging.

  • Supply chain: deps pinned + hashed in uv.lock. Dependabot watches pip + GitHub Actions weekly. CI runs smoke + HTTP tests + Docker build/boot on Python 3.11 and 3.13 on every push.

Full threat model and disclosure path: SECURITY.md. Privacy policy (what we receive, what we don't store): PRIVACY.md. Terms of service for the hosted endpoint: TERMS.md.


Notes

  • The server never downloads anything at runtime. Not on import, not on a tool call, not to fill a gap it notices. That's the privacy promise. Resources are fetched at Docker build time, or by you running scripts/fetch_resources.py on a source install. If a resource is missing, tools say so — synonyms raises an actionable error, and check_term_consistency returns degraded: true with the reason in its Estonian summary rather than a confident-looking partial answer.

  • Most EstNLTK models (morph, NER, spell-check) ship inside the wheel. Three things don't, because they're data, not Python distributions, so uv.lock can't carry them: NLTK's punkt_tab tokenizer, WordNet, and the fastText model.

  • WordNet is a separate ~26 MB resource (used by synonyms and one of check_term_consistency's two rules).

  • The fastText model used by find_related_words and check_compound_familiarity is a ~33 MB compressed resource with a 100K-word vocabulary (built locally from Facebook's cc.et.300 via compress-fasttext, CC-BY-SA-3.0; see NOTICE).

  • Heavy neural taggers (estnltk_neural, BERT-based NER) are intentionally not pulled in; this server stays lean and fast.

  • First call after server start incurs a one-time tag-layer load (~1–2 s). Subsequent calls are millisecond-scale.

  • The hosted Fly instance scales to zero when idle; the first request after a quiet period takes ~5 s, then everything is fast again.

🤝 Contributing

Contributions are welcome, especially from Estonian speakers who can sharpen the linguistic rules. Here's how to get started:

  1. Fork the repo and clone your fork.

  2. Set up the environment (Python 3.10–3.13):

    uv sync
    # punkt_tab + WordNet + fastText — none can come from uv.lock:
    uv run python scripts/fetch_resources.py
    export ESTNLTK_MCP_FASTTEXT_PATH=~/.cache/estnltk-mcp/fasttext-et-medium
  3. Create a feature branch (git checkout -b feature/my-feature).

  4. Run the tests, both must pass:

    uv run python tests/test_smoke.py       # tool behaviour
    uv run python tests/test_http.py        # transport, auth, /metrics
    uv run python tests/test_resources.py   # resource-availability handling
  5. Commit and open a pull request against master. CI (smoke on Python 3.11 + 3.13, plus a Docker build/boot check) must be green before merge.

Please open an issue first for major changes so we can discuss the approach before you invest the work.

Especially wanted: linguistic corrections

The heuristic tools lean on small hand-curated lexicons in server.py, marked/archaic words, register markers, compound-split pairs, partitive-governing verbs, and the EKI orthography rule sets. These are deliberately conservative and incomplete. If you're a fluent Estonian speaker and spot a gap or a wrong entry, that's the highest-value contribution you can make:

  • A missing calque AI agents produce, with the idiomatic native form

  • A verb that governs the partitive but isn't in the list

  • A compound that should (or shouldn't) be flagged

  • A register marker that's miscategorised

Open an issue with the English source (if it's a calque), the bad Estonian, and the better Estonian, or send a PR adding the entry to the relevant lexicon with a one-line test case.

License

Apache-2.0 for the source. Bundled data + models keep their own (copyleft) licenses, these apply to those files only, not to the Apache-2.0 code:

  • EstNLTK, dual-licensed GPL-2.0 OR Apache-2.0 (we use Apache-2.0).

  • Vabamorf analyzer, LGPL-2.1 with a separate commercial-use license.

  • Estonian fastText model (find_related_words, check_compound_familiarity), CC-BY-SA-3.0.

  • Estonian Wordnet (synonyms), CC-BY-SA-4.0.

The CC-BY-SA model + Wordnet data carry share-alike obligations on those files when you redistribute them (the Docker image includes both). See NOTICE for full attribution and redistribution terms.

Available Tools

26 tools
analyze_morphologyA
Read-onlyIdempotent

Run full morphological analysis on Estonian text.

For each word returns lemma(s), part-of-speech, grammatical form, root, ending, clitic, compound parts, ambiguity info, and a usage note flagging archaic / foreign / abbreviation / interjection / proper-noun cases. By default returns the first (most likely) analysis per word; set all_analyses=True to return every ambiguous analysis.

Each word's response includes:

  • lemma, partofspeech, form, root, ending, clitic, root_tokens

  • analyses_count: how many alternative analyses Vabamorf produced for this surface form (>1 means the word is morphologically ambiguous)

  • is_ambiguous: shorthand for analyses_count > 1

  • usage_note: machine code (None if neutral) — "archaic" / "foreign" / "abbreviation" / "interjection" / "proper-noun"

  • usage_note_estonian: human-readable Estonian rendering of the same flag (quote this verbatim in Estonian replies; do NOT translate the English usage_note yourself)

  • indeclinable: True for words that stay in base form when used attributively (lexical indeclinables like täis, -tud/-nud past participles like tuntud, and the -mata form like täitmata) — i.e. they do NOT take the noun's case ending in agreement. Use this before inflecting a noun phrase so you don't wrongly decline an invariant adjective.

Input is capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to analyse morphologically.
all_analysesNoReturn every ambiguous analysis per word instead of only the most likely one.

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 annotations already mark the tool as readOnly and idempotent. The description adds substantial behavioral context beyond that: default first-analysis behavior, ambiguity count and flag, usage_note codes, Estonian rendering guidance, indeclinable classification, and the input character cap. There is no contradiction 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.

Conciseness4/5

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

The description is long but effectively structured: a lead statement, a default-vs-all_analyses clarification, a bulleted output-field list, and a targeted usage warning. It could be folded slightly, but the length is justified because most of the parameter and output semantics are not otherwise fully outlined in the visible schema.

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 two-parameter analyzer with an output schema, the description is complete. It covers input restrictions (100k chars), output fields and their semantics, machine vs human-readable usage notes, and a caveat about indeclinables that affects downstream inflection. An agent has enough information to call it correctly and reason recursively about its output.

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 both text and all_analyses are already documented. The description improves on this by clarifying default behavior ('By default returns the first most likely analysis'), the meaning of True for all_analyses, the 100,000-character input cap, and practical output semantics tied to the boolean parameter.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Run full morphological analysis on Estonian text.' It then enumerates exactly what is returned (lemma, part-of-speech, grammatical form, root, ending, clitic, compound parts, ambiguity, usage flags), which clearly distinguishes it from narrower siblings like lemmatize or pos_tag.

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 clearly conveys when to use the tool: when full morphological analysis is needed, with a default single analysis and an optional all_analyses mode. It also gives application guidance around indeclinable words and inflection. It does not explicitly compare against sibling tools like lemmatize or spell_check, so it stops one step short of a 5.

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

check_abbreviation_hyphenationA
Read-onlyIdempotent

Heuristic check for the EKI Reeglid rule that case endings on Latin-letter / all-caps abbreviations are separated by a hyphen.

Catches the common AI mistake of writing MCPst, APIga, OÜle instead of MCP-st, API-ga, OÜ-le. Uses Vabamorf's POS+form analysis to identify tokens recognised as abbreviations carrying a case ending; only flags those that aren't already hyphenated.

Phase-1 scope: matches what Vabamorf tags as Y (abbreviation). Custom acronyms Vabamorf doesn't know (your brand acronym, niche industry shorthand) won't be flagged because Vabamorf doesn't see them as abbreviations. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for abbreviation case-ending hyphenation (MCPst → MCP-st).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already indicate read-only and idempotent behavior. The description adds significant behavioral context: it uses Vabamorf POS+form analysis, heuristic scope (phase-1, only 'Y' tags), character limit (100k), and limitations (custom acronyms not flagged). 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?

Every sentence is informative and earns its place. The description is front-loaded with the rule, examples, mechanism, limitations, and a scope note. No redundancy or 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?

For a single-parameter tool with a limited scope (specific hyphenation check), the description provides sufficient context: what it checks, how it works, limitations, and input constraints. An output schema exists but is not shown; the description does not need to cover return values.

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?

The schema already fully describes the single parameter 'text' (100% coverage). The description adds an example of input text but no additional syntax or constraints beyond the character limit, meeting the baseline.

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 it performs a heuristic check for a specific Estonian rule (case-ending hyphenation on abbreviations), provides concrete examples (MCPst -> MCP-st), and distinguishes from sibling tools by targeting a particular error type.

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 gives clear context on when to use (checking abbreviation hyphenation) and what it covers (Vabamorf-tagged abbreviations), but does not explicitly state when not to use or name alternatives, though siblings are available.

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

check_capitalizationA
Read-onlyIdempotent

Heuristic Estonian capitalization checker (Algustäheortograafia).

Scans Estonian text for the most common AI-generated capitalization errors per EKI's Reeglid:

  • Weekday names capitalized mid-sentence (Esmaspäeval → esmaspäeval)

  • Month names capitalized mid-sentence (Jaanuaris → jaanuaris)

  • Nationality names capitalized mid-sentence (Eestlane → eestlane)

  • Country/language adjectives capitalized before a culture or language noun (Eesti keel → eesti keel; Eesti köök → eesti köök). The bare capitalized form on its own (Eesti, Eestis) is left alone because it's a valid country proper-noun usage.

Sentence-initial capitalization is always allowed. All-caps acronyms are ignored. Returns each issue with rule code, an Estonian rule label (rule_estonian — quote this verbatim in Estonian replies, don't translate the English rule), a user-facing explanation, and a suggested correction. Input capped at 100,000 characters.

PHASE-1 LIMITATION: this is a lexicon-based heuristic, not a full EÕS implementation. Compound-word capitalization, punctuation rules, and hyphenation are NOT covered by this tool (separate check_compounds / check_punctuation / check_hyphenation tools may follow).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for capitalization errors (Algustäheortograafia).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, so the tool is safe and idempotent. The description adds significant behavioral details beyond annotations: it's a lexicon-based heuristic (not full EÕS), it ignores sentence-initial capitalization and all-caps acronyms, it returns issues with specific fields (rule code, Estonian label, explanation, correction), and it notes a Phase-1 limitation. This fully informs the agent about behavior.

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 and well-structured: a clear header statement, bullet-like list of error types, clarifications on what is ignored, return format, input limit, and limitations. Every sentence adds value. No redundant or filler content.

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 (Estonian capitalization rules), the description is comprehensive. It covers input constraints (Estonian text, 100k char limit), output structure (rule code, Estonian label, explanation, correction), handling of special cases (sentence-initial, all-caps), and limitations (heuristic, not full EÕS, other checks exist). An output schema exists, so return values are documented elsewhere. The description is complete for agent 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?

The single parameter 'text' is described in the schema as 'Estonian text to check for capitalization errors (Algustäheortograafia).' Schema coverage is 100%, so baseline is 3. The description does add some context about what the checker does, but the schema already conveys the required purpose. No additional semantic details beyond the schema are provided.

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 as an Estonian capitalization checker (Algustäheortograafia), lists specific error types it detects (weekday, month, nationality names, country/language adjectives), and distinguishes itself from sibling tools by explicitly stating what it does not cover (compounds, punctuation, hyphenation). The verb 'scans' and resource 'Estonian text' provide a specific, actionable 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 provides context for when to use the tool: for checking Estonian text for AI-generated capitalization errors per EKI's Reeglid. It mentions input character limit (100,000) and that the tool is a heuristic, implying it's for quick checks. It also mentions that compound, punctuation, and hyphenation checks are separate tools, giving guidance on alternatives. However, it doesn't explicitly state when not to use it or provide a clear 'use case' statement.

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

check_compound_familiarityA
Read-onlyIdempotent

fastText-based diagnostic for compound-noun familiarity in Estonian.

For each compound noun (root_tokens length >= 2), returns its top fastText neighbours, a top_score similarity, a neighbour_quality breakdown, and is_suspect: true + human-readable reasons when the compound is out-of-vocab AND its top similarity is below 0.60 OR its neighbours are mostly scrape-artifact tokens. This catches both toortõlkeoht (OOV, top 0.571 — over the old 0.55 gate but a coinage) and mõtteliin (literal English "train of thought"; real Estonian is mõttekäik).

Output is diagnostic, not authoritative. Even with the 100K-vocab medium model, some legitimate but rare compounds (e.g. tervisekindlustus) can still be OOV; the rule favours recall, so a flagged real compound just earns a second look. Judge by the included neighbours: semantically coherent neighbours (related real words) mean the compound is fine; neighbours that recycle the input's morphemes or are junk tokens mean a likely coinage.

Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text whose compound nouns are checked for calque / translationese risk.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
all_compoundsNo
summary_estonianNo
suspect_compoundsNo
compounds_analysedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint: true and idempotentHint: true, establishing safety and idempotency. The description adds behavioral details: input capped at 100k characters, use of a fastText model, and the diagnostic (non-authoritative) nature of output, which go beyond the annotations.

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

Conciseness4/5

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

The description is well-structured: it front-loads the main purpose, then explains technical details, output interpretation, and limits. While slightly long, every section adds value, and there is no waste. A 4 reflects good clarity with minor room for trimming.

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 (fastText model, diagnostic logic), the description adequately covers how the tool works, how to interpret results, and limitations (legitimate OOV compounds). The presence of an output schema is noted, so the description doesn't need to detail return values. Score 4 reflects sufficient completeness.

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?

Only one parameter 'text' with schema description 'Estonian text whose compound nouns are checked for calque / translationese risk.' Schema coverage is 100%, so description adds minimal extra meaning beyond the schema. 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?

The description clearly states it is a 'fastText-based diagnostic for compound-noun familiarity in Estonian'. It specifies the key outputs (top fastText neighbours, top_score, neighbour_quality, is_suspect with reasons) and distinguishes this tool from siblings like check_compounds and analyze_morphology by focusing on calque-risk detection.

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 guidance on interpreting results ('semantically coherent neighbours mean the compound is fine; neighbours that recycle the input's morphemes or are junk tokens mean a likely coinage') and notes the tool is diagnostic. However, it does not explicitly compare to sibling tools or state when to use this over alternatives.

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

check_compoundsA
Read-onlyIdempotent

Heuristic Estonian compound-word check (liitsõnaõigekiri).

Scans for common AI-generated splits of words that should be written as a single compound — kooli maja (wrong) → koolimaja (right), nädala vahetus (wrong) → nädalavahetus (right), etc. Uses a curated bigram lexicon (~30 entries covering the highest-frequency AI mistakes); not a full liitsõnaõigekiri solver.

Phase-1 limitations: only catches the bigrams in the lexicon. Estonian compounding is highly productive and most valid compounds aren't enumerated here. Treat hits as high-confidence; absence of hits does not prove the compound writing is correct everywhere. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for wrongly split compound words.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, signaling a safe, read-only operation. The description adds further transparency by stating input is capped at 100,000 characters and that hits are high-confidence but absence does not confirm correctness. No contradiction 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 and well-structured, with clear sections for purpose, examples, limitations, and input constraints. Every sentence adds value, and there is no redundant or vague wording.

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 (heuristic check with limited coverage), the description adequately communicates purpose, limitations, input cap, and confidence of results. An output schema exists (not shown), so return values do not need to be described. The description is sufficiently complete for an agent to select and use this tool correctly.

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% (only one parameter 'text' with a description). The description's mention of 'Estonian text' adds no new meaning beyond the schema. There are no extra details about format, encoding, or constraints, so 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 tool checks for wrong splits of Estonian compound words (liitsõnaõigekiri), provides concrete examples (e.g., 'kooli maja' → 'koolimaja'), and clarifies it is heuristic with a limited lexicon, distinguishing it from sibling tools like spell_check or check_hyphenation.

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 (check for wrong splits) and notes its limitations (capped at 30 bigrams, not a full solver). It implies that for comprehensive compounding, other tools or methods are needed, but does not explicitly list alternatives or state when not to use it.

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

check_defined_termsA
Read-onlyIdempotent

Structural map of a long Estonian legal document.

Extracts every term defined with (edaspidi «X»), counts how often each is actually used, lists § / lõige / punkt / artikkel cross-references, and flags defined-but-unused or doubly-defined terms — the consistency errors that creep into long contracts and statutes.

Regex-based and PII-free (nothing is stored). Input cap is raised to 500,000 characters so a whole contract fits in one call; the echoed text is truncated to a 2,000-character preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesA long Estonian legal document to map defined terms ('edaspidi «X»') and § / lõige / punkt cross-references.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
defined_termsNo
cross_referencesNo
summary_estonianNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=true, idempotentHint=true), the description adds genuinely valuable behaviors: implementation details like 'Regex-based', privacy claims 'PII-free (nothing is stored)', the raised 500,000-character input cap, and the fact that the echoed `text` is truncated to a 2,000-character preview. These are exactly the behavioral traits the agent needs to know and that the annotations do not provide.

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 front-loaded with a one-line scoping summary, followed by the extraction/flagging behavior and then operational constraints (regex, PII, size caps). Every sentence carries information — no filler or restatement of the tool name — and it is compact relative to the amount of useful behavior it conveys.

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?

The tool has one parameter, a fully populated input schema, a partial output schema (so return values need not be spelled out), and safe annotations. The description covers what is analyzed, what kinds of errors are flagged, input scale limits, privacy, and echo truncation behavior — nothing an agent needs to decide whether and how to invoke this tool is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description adds parameter-relevant semantics beyond the schema by disclosing the 500,000-character input cap (telling the agent it can pass an entire document in one call) and the 2,000-character echo truncation (reducing concern about huge responses). It does not rehash the schema, but enriches it with practical size constraints.

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

Purpose5/5

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

The description states a specific verb and resource structure: 'extracts every term defined with `(edaspidi «X»)`', 'counts how often each is actually used', 'lists § / lõige / punkt / artiklom cross-references', and 'flags defined-but-unused or doubly-defined terms'. The opening line, 'Structural map of a long Estonian legal document', crystallizes the scope and differentiates it from sisters like tokenize, spell_check, and même check_term_consistency.

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?

Clear context exists for when to use: analysis of long Estonian legal documents/contracts, with 'Input cap is raised to 500,000 characters so a whole contract fits in one call' reinforcing the intended whole-document use case. There is a clear context, but no explicit exclusions or named alternatives, so the closely related sibling check_term_consistency is never addressed, which prevents a 5.

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

check_hyphenationA
Read-onlyIdempotent

Return safe line-break positions for an Estonian word (poolitamine).

Different from syllabify (which is phonological): this returns character offsets where a typesetter can legally break the word across lines. Applies the no-orphan-edge rule (don't leave fewer than 2 characters before or after the break point).

Phase-1 limitation: pure syllable-boundary based. Compound-boundary preference (Estonian poolitamine prefers kooli-maja over koo-limaja) is not yet applied. Input must be a single word with no whitespace, capped at 200 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYesA single Estonian word (no whitespace) to find safe line-break positions for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
wordNo
breaksNo
preferredNo
syllable_countNo
summary_estonianNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint and idempotentHint, and the description adds rich behavioral detail: no-orphan-edge rule, phase-1 limitation (pure syllable-boundary based), compound-boundary preference not applied, input constraints (single word, no whitespace, 200 chars). 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?

The description is concise with no fluff: a clear opening, effective sibling comparison, behavioral rules, and limitations. Every sentence is necessary and well-organized.

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 low complexity (1 required param), presence of output schema, and thorough coverage of input constraints, behavioral traits, and sibling differentiation, the description is complete for an AI agent to correctly invoke the 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 sole parameter 'word' is fully described in the schema (100% coverage). The description adds value by specifying the 200-character cap, which is not in the schema, and reinforces the Estonian language and no-whitespace constraint.

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 it returns safe line-break positions for an Estonian word, using the specific verb 'return' and resource 'line-break positions'. It distinguishes itself from the sibling 'syllabify' by noting the phonological vs. typesetting 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 explicitly compares with 'syllabify' and explains when to use this tool (for character offsets for typesetting) vs. the other tool (phonological syllable boundaries). It provides constraints like no-orphan-edge rule and limitations, but does not exhaustively list all alternatives.

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

check_legaleseA
Read-onlyIdempotent

Aid for simplifying Estonian legal text WITHOUT losing legal precision.

Returns two things:

  • issues: archaic 'kantseliit' filler with plain equivalents (käesolevsee, juhul kuikui), plus over-long / heavily subordinated sentences worth splitting.

  • terms_of_art: specialised legal terms detected in the text that MUST be kept verbatim when rewriting — swapping hagi or vastutus for a general synonym changes the legal meaning. Use this as a do-not-touch list while you simplify.

Heuristic, precision-first, backed by curated starter lexicons (not exhaustive). Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian legal text to lint for plain-language simplification while protecting legal terms of art.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
terms_of_artNo
summary_estonianNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool as read-only and idempotent, and the description adds valuable behavior: it returns `issues` and `terms_of_art`, explains the kinds of detected legalese, emphasizes that legal terms must be kept verbatim, and discloses that the tool is heuristic with non-exhaustive lexicons. No contradiction 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, front-loaded with the main purpose, and structured around the two return types. The examples (`käesolev` → `see`) and caveats (`not exhaustive`, `precision-first`) earn their space without any 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 single-parameter read-only tool with an output schema, the description is complete: purpose, outputs, safe usage, constraints, limitations, and unique terms-of-art behavior. The only minor gap is explicit comparison to sibling tools, but the behavior is described precisely enough that an agent can safely select and invoke it.

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

Parameters4/5

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

The schema already fully describes the single `text` parameter, so the baseline is 3. The description still adds the useful 100,000-character input cap that is not encoded in the input schema, and the output definitions clarify what kinds of Estonian legal texts the parameter is expected to contain.

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

Purpose4/5

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

The description clearly identifies the tool's job: analyze Estonian legal text and return both simplification suggestions and terms of art that must be preserved. It distinguishes the tool from other lingustic analyzers by its unique output structure, though it does not explicitly compare it to sibling tools like check_officialese or check_style.

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 says the `terms_of_art` list should be used as a 'do-not-touch list while you simplify,' which is concrete and actionable. It implies when to use the tool (when simplifying Estonian legal text) and warns about the 100,000-character input cap, but it does not explicitly list when not to use it or which alternative sibling tool to prefer.

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

check_numbersA
Read-onlyIdempotent

Heuristic Estonian number-writing check.

Flags two clear-cut cases per EKI Reeglid:

  • Decimal separator: Estonian uses a comma (3,14), not a period (3.14).

  • Thousands separator: Estonian uses a space (1 000 000), not a comma (1,000,000).

Phase-1 limitations: spell-out-vs-digits guidance (the one-to-ten-spelled-out convention) is intentionally not implemented — it requires distinguishing measurements, dates, years, and lists from running prose, and naive flagging produces too many false positives. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for number-formatting (decimal comma, thousands space).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds significant behavioral context: it is heuristic, flags only clear-cut cases, has phase-1 limitations, and caps input at 100,000 characters. 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.

Conciseness4/5

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

The description is well-structured with bullet points and clear sections, each sentence adding value. It is appropriately sized for the complexity of the tool, though slightly verbose in explaining limitations.

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 presence of an output schema, the description provides complete context about input, checked cases, skipped cases, and input constraints, leaving no ambiguity for an AI 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 a single 'text' parameter described. The description adds meaning beyond the schema by detailing what the tool checks within the text and its limitations, providing richer context for parameter usage.

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 it is a heuristic Estonian number-writing check that flags two specific cases: decimal comma vs period and thousands space vs comma. It distinguishes itself from sibling tools like spell_check by focusing specifically on number formatting conventions.

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 it (for Estonian text number formatting) and explicitly mentions what it intentionally does not handle (spell-out-vs-digits guidance) due to false positive concerns, providing helpful exclusion criteria. However, it does not explicitly contrast with sibling tools.

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

check_object_caseA
Read-onlyIdempotent

Heuristic Estonian object-case-government check.

Catches the single biggest class of confidently-wrong Estonian that AI agents produce: direct objects in the wrong case after negation or after partitive-governing verbs.

Two rules in phase 1:

  • Negation → partitive: any sentence containing 'ei', 'pole', 'ära', 'ärge', 'ärgu', 'ärgem', or 'mitte' must have direct objects in partitive. Flags nominative / genitive nouns.

  • Partitive-only verbs: the verbs armastama, vihkama, vajama, soovima, ootama, austama, kartma, puudutama, tundma always take partitive direct objects. Flags any noun in nominative/genitive in the same sentence.

Phase-1 limitation: no syntactic parser, so we can't perfectly distinguish subject from object. Subjects in negation/partitive-verb sentences may be flagged as false positives. Treat hits as "worth a second look", not authoritative. Proper nouns are skipped. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for direct-object case errors under negation and partitive-governing verbs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond annotations by detailing heuristic nature, phase-1 limitations, lack of syntactic parser, skipping of proper nouns, and 100,000 character input cap. No contradiction with annotations (readOnlyHint, idempotentHint).

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 bullet points explaining two rules and a limitations section. Every sentence adds value; front-loaded with 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 complexity (heuristic rules), existing annotations, and presence of output schema, the description is complete. It covers rules, limitations, and input constraints without needing to detail return values.

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 a clear parameter description. The tool description adds context about Estonian text but does not provide additional semantics beyond what the schema already states.

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 it is a 'Heuristic Estonian object-case-government check' that catches direct object case errors after negation or partitive-governing verbs. This specific verb+resource+scope distinguishes it from siblings like spell_check or check_compounds.

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 limitations (no syntactic parser, false positives possible) and advises to 'Treat hits as "worth a second look", not authoritative'. It implies use for Estonian text but does not explicitly state when not to use it or list alternatives.

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

check_officialeseA
Read-onlyIdempotent

Flag Estonian kantseliit in reports, academic and business prose.

check_legalese is the legal-text sibling; use THIS one for anything that is not a statute or contract, where check_legalese finds nothing because its lexicon and length gate are tuned for legislation.

Returns issues (each with an Estonian rule_estonian label, an explanation and a concrete suggestion) plus metrics:

  • nominalisation: -mine verbal nouns per 100 words, each paired with the verb to use instead (hindaminehindama)

  • noun_verb_ratio: nimisõnastiil density; over ~2.0 reads heavy

  • impersonal_voice: umbisikuline tegumood, correctly counted (negated impersonals included, ei/ära and attributive -tud participles excluded)

  • clause-stacking: 3+ subordinate-clause openers in one sentence, the 'mille käigus … ning …' pile-up that a word count alone misses

  • long-sentence: 25+ content words, calibrated for Estonian

  • officialese filler: omamaolema, kujutab endaston, viidi läbitehti, X-i poolt tehtudX-i tehtud

Heuristic and precision-first — no flags does not prove the text is plain. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian non-legal text (report, academic, business) to check for kantseliit / bureaucratic density.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
metricsNo
summary_estonianNo

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the annotations by stating the tool is heuristic and precision-first, that absence of flags does not prove plain language, and by detailing counting rules for each metric (e.g., negated impersonals included, attributive -tud participles excluded). It also discloses the 100,000-character input cap.

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 front-loaded with the core purpose, then a short sibling-disambiguation, then bulleted metric details. Every sentence and bullet adds distinct value; the structure makes a sizable amount of information easy to scan.

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 combinatorial and metric-rich output, the description is remarkably complete: it enumerates the issue field structure, each computed metric with its interpretation, examples of filler substitutions, caveats, and the input limit. The presence of an output schema reduces pressure to describe return values, but the description still covers them.

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

Parameters4/5

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

The schema already fully describes the single text parameter, so the baseline is high. The description adds further useful semantics by emphasizing non-legal prose, explaining the sibling exclusion, and stating the character limit, which are not visible in 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 opens with a specific verb and resource: 'Flag Estonian kantseliit in reports, academic and business prose.' It later names the sibling tool check_legalese and explicitly distinguishes it, making its identity unmistakable.

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?

It gives explicit when-to-use guidance: use this tool for anything that is not a statute or contract, and explains why check_legalese would fail there due to its legal-tuned lexicon and length gate. This is a clear condition plus a concrete alternative.

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

check_punctuationA
Read-onlyIdempotent

Heuristic Estonian punctuation check — comma-before-clause rule.

Flags missing commas before subordinating conjunctions where Estonian rules require one: et (that/in order to), kuna (because), sest (because), kuigi (although), kuid (but), vaid (rather), nagu (like), mistõttu (because of which), millepärast, kuhu.

Phase-1 limitations: only the comma-before-clause-conjunction rule is covered. kui, mis, kes are deliberately excluded because their function is contextual (kui = than/as in comparisons doesn't need a comma). Listing commas, apposition commas, dash and colon rules — all out of scope for phase 1. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for missing commas before subordinating conjunctions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description adds detailed behavioral context: heuristic nature, single-rule coverage, list of included/excluded conjunctions, and input character limit. This fully informs the agent of the tool's capabilities and constraints.

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 well-structured: a succinct headline, followed by a list of conjunctions and limitations. Every sentence adds value, and the information is front-loaded. No redundant text.

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 specific focus and the presence of an output schema, the description is complete. It covers the rule, exceptions, limitations, and input restrictions, providing sufficient context for correct use.

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 a clear parameter description. The tool description adds extra context about the conjunctions and exclusions, enhancing understanding beyond the schema. A score of 4 reflects this added value.

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: 'Heuristic Estonian punctuation check — comma-before-clause rule.' It specifies the exact rule and lists the conjunctions covered, distinguishing it from sibling linguistic tools that handle morphology, spelling, etc.

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 context on when to use the tool (for checking Estonian comma-before-clause rule) and what is excluded (other punctuation rules, specific conjunctions). It mentions phase-1 limitations and input cap. However, it doesn't explicitly state when not to use or suggest alternative sibling tools for other punctuation tasks, though none exist among siblings.

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

check_redundancyA
Read-onlyIdempotent

Heuristic Estonian pleonasm / semantic-doubling check.

Flags phrasing that is grammatically valid but reads redundant to a native speaker — the class of error AI agents produce when they stack synonyms. Phase-1 rules, all high-precision:

  • Doubled 'also' particles: samuti ka, ka samuti, ühtlasi ka — both words mean "also/too", so together they're a tautology. (This is the exact samuti ka suvesärgid case.)

  • Double superlative: kõige before an already-absolute adjective (optimaalne, ideaalne, maksimaalne, täiuslik, ainus, …) — like English "most optimal". Lemma-matched, so all inflected forms count.

  • Fixed pleonasm phrases: a small curated set (ajaline periood, väike nüanss, üldine konsensus, …).

Conservative by design — it catches the obvious, high-confidence cases, not every redundancy. Absence of flags is not proof the prose is tight. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to check for pleonasm / redundant word pairs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
issuesNo
summary_estonianNo

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 heuristic rules (phase-1, high-precision), specific patterns checked, and the conservative design. It also discloses input limitations (100k chars) and that absence of flags does not guarantee tight prose, adding valuable behavioral context not captured in readOnlyHint or idempotentHint.

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 well-structured with bullet points and clear categories, making it easy to scan. Every sentence provides essential information without unnecessary verbosity, including examples and limitations.

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 presence of an output schema (not shown but noted), the description covers all necessary aspects: purpose, specific rules, conservative design, input constraints, and what results mean. It is comprehensive for the tool's complexity.

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 sole parameter 'text' has a clear description in the schema ('Estonian text to check for pleonasm / redundant word pairs'), which is consistent with the tool's purpose. The main description provides additional context about what the check looks for, but the schema already covers 100% of parameters, so the added value is moderate.

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 checks Estonian pleonasm/semantic-doubling, provides specific examples (doubled 'also' particles, double superlative, fixed pleonasm phrases), and distinguishes itself from sibling tools like spell_check by focusing on a specific class of AI-produced redundancy.

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 it is conservative and high-precision, noting that absence of flags is not proof of tight prose, which guides appropriate use. It mentions the input cap of 100,000 characters. However, it does not explicitly compare with sibling tools or provide when-not-to-use scenarios, missing some contextual guidance.

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

check_styleA
Read-onlyIdempotent

Heuristic Estonian style metrics for newsletter / ad / email copy.

Returns four metrics that flag common writing issues, each with an Estonian-language summary line for quoting verbatim:

  • repetition: lemma-aware (so 'kasutab' and 'kasutamine' both count under 'kasutama'). Threshold scales with text length so short replies don't fire on natural repeats.

  • passive_voice: ratio of Estonian -takse/-ti/-tud/-tav forms over total verbs. Newsletter copy usually wants <15%.

  • sentence_length: mean, stddev, min, max in content words. Low stddev = monotonous rhythm.

  • hedging: density of hedging words (võib-olla, vist, pigem, ehk, ilmselt, …). >5% reads wishy-washy.

Phase-1 limitation: heuristic only. No detection of cliché phrases, weasel-words beyond the curated 15 lemmas, or genre-specific style drift. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to compute style metrics for (repetition, passive voice, sentence length, hedging).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
hedgingNo
repetitionNo
passive_voiceNo
sentence_lengthNo

TDQS

A4.7/5.0
Behavior5/5

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

The description thoroughly explains each metric's behavior (lemma-aware repetition, passive voice ratio with threshold, sentence length stats, hedging word list) and discloses phase-1 limitations (heuristic only, no cliché detection, input cap). Annotations confirm readOnly and idempotent, and the 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.

Conciseness5/5

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

The description is well-structured: a clear purpose, followed by a bullet list of metrics with precise behavioral details, then limitations. Every sentence adds value, and it is appropriately sized for the tool's complexity.

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 simple input schema (single required parameter) and the existence of an output schema, the description covers everything needed: metric definitions, behavioral details, limitations, and input constraints. It is fully complete for an AI agent to use 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?

Only one parameter 'text' with schema coverage 100%. The description adds value by specifying the text must be Estonian and capped at 100k characters, and explains what metrics will be computed, enhancing understanding beyond the schema 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 tool provides 'Heuristic Estonian style metrics for newsletter / ad / email copy' and lists four specific metrics (repetition, passive_voice, sentence_length, hedging). It distinguishes itself from sibling tools like spell_check or pos_tag by focusing on style analysis.

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 says it is for 'newsletter / ad / email copy' and lists the metrics, implying when to use it. However, it does not explicitly state when not to use it or mention alternatives, though sibling tools provide context for differentiation.

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

check_term_consistencyA
Read-onlyIdempotent

Flag a document that calls the same thing several different names.

The classic long-document defect, and the one a model editing paragraph-by-paragraph reliably misses: a dataset that is andmestik on page 1, teadusandmestik on page 2 and korpus on page 3.

Two precision-first rules:

  • shared-compound-head: a bare noun and a compound built on it both occur (andmestik + pildiandmestik), or 3+ lemmas share one head.

  • shared-wordnet-synset: two lemmas sit in one Estonian WordNet synset, i.e. WordNet calls them synonyms.

Each group lists its variants with occurrence counts and the dominant one, so you can standardise on the most-used term. The tool does not decide which variant is right — some groups are genuinely distinct concepts, so read them before rewriting.

CHECK degraded BEFORE TRUSTING AN EMPTY RESULT. When Estonian WordNet is not installed, the shared-wordnet-synset rule cannot run; the tool then returns degraded: true, says so in summary_estonian, and marks the rule false in rules_run. "No groups found" from a degraded run means "the compound-head rule found nothing", NOT "the terminology is consistent".

Known gap: synonyms sharing neither a head nor a synset (korpus / andmestik) are not caught. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian document to check for the same thing being named several different ways.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
textNo
groupsNo
degradedNo
rules_runNo
terms_analysedNo
summary_estonianNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description richly discloses behavioral nuances: the tool does not choose a 'correct' variant, it returns groups with counts and dominant variant, it degrades when WordNet is missing, and it sets `degraded: true` and adjusts `rules_run`. It also warns the user against misinterpreting an empty result from a degraded run. This is far more contextual than typical.

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 well-structured: hook, example, two bulleted rules, output semantics, a warning about degraded mode, followed by a known gap and a capacity note. Every section earns its place; the scannable formatting helps an agent quickly locate the critical 'check degraded before trusting an empty result' warning.

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?

The description is complete for a read-only analysis tool. It explains what the output contains (variant groups, counts, dominant term), what can go wrong (degraded runs, known gaps), and what the tool deliberately does not do (deciding correctness). The presence of an output schema further reduces the need to document return value details.

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?

The schema already has 100% coverage for the single `text` parameter, so the description need not repeat its meaning. It does not add new parameter-specific details other than the 100,000-character cap, which is more of a global behavior than a parameter semantic. 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?

The description opens with a clear, specific action: 'Flag a document that calls the same thing several different names.' It then elaborates with concrete rules (`shared-compound-head`, `shared-wordnet-synset`) and a concrete example, making the tool's purpose unmistakable and distinct from sibling checking 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 gives clear context for when the tool is valuable — long documents where paragraph-by-paragraph editing misses term drift — and explicitly tells agents to check `degraded` before trusting empty results. It does not explicitly name alternative tools or state 'don't use when X', but it is clear enough about the intended scenario and limitations.

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

classify_registerA
Read-onlyIdempotent

Heuristic register classifier for Estonian (formal vs colloquial).

Returns a tier label (English in tier, correct Estonian in tier_estonian — quote that field verbatim when composing an Estonian-language reply rather than translating tier yourself, to avoid mistranslations like "formalne" instead of the correct "formaalne"), a normalised score in [-1, 1] (positive = formal, negative = colloquial), and the matched formal/colloquial markers found in the text. Useful for sanity-checking that marketing copy hasn't drifted into officialese, or that a contract draft hasn't slipped into chat tone.

The lexicon covers legal-administrative AND academic/report vocabulary. structure adds two syntactic signals — umbisikuline tegumood ratio and noun/verb density — bounded at +0.4, applied only from 25 words up and only when the lexicon is not net-colloquial.

LIMITATION: still a heuristic, not a trained model. Address forms and finer syntax go uncaught, and most newsletter prose scores 'neutral'. Use the result as a directional hint, not a verdict; for a full kantseliit breakdown with per-issue suggestions, call check_officialese. Input capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to classify by register (formal vs colloquial).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
tierNo
scoreNo
structureNo
word_countNo
consistencyNo
tier_estonianNo
formal_markersNo
colloquial_markersNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses the heuristic nature, limitations, return fields, score range, the role of syntactic signals, and the 100,000-character input cap. It even explains that a score of 'neutral' is common for newsletter prose, which is exactly the behavioral nuance an agent needs.

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

Conciseness4/5

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

The description is longer than most, but each paragraph earns its place: purpose, outputs, use cases, limitations, and alternative routing. The only minor inefficiency is the denseness of the `structure` sentence; still, it is an effective and organized front-loaded definition.

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 one-parameter read-only heuristic classifier, this description is effectively complete. It explains the output semantics, score bounds, limitation, pointer to check_overwrite, and input cap. No output schema exists, but the description gives enough on returns that an agent can understand them without additional context.

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

Parameters5/5

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

With only one parameter and 100% schema description coverage, the schema already covers what `text` is. The description raises semantics by specifying the 100,000-character cap, the Estonian-only expectation, and the lexical scope (legal-administrative and academic/report vocabulary). The mention of `structure` is a slight oddity as it is not a schema parameter, but it reads as an internal behavior note rather than an input directive.

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 opening sentence states the exact function: 'Heuristic register classifier for Estonian (formal vs colloquial)', which is a specific verb+resource pair. It also lists the concrete outputs (tier, score, markers), and the later note referencing check_officialese distinguishes it from the most similar sibling.

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 says when the tool is useful: sanity-checking marketing copy and contract drafts. It also gives a strong when-not and alternative: 'Use the result as a directional hint, not a verdict; for a full kantseliit breakdown with per-issue suggestions, call check_officialese.' Input cap and neutral-score limitation further shape safe usage.

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

lemmatizeA
Read-onlyIdempotent

Return lemma (dictionary form) for each word in the text.

Concise output: [{"word": ..., "lemma": ...}, ...]. Input is capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to reduce to dictionary-form lemmas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Description adds character cap and output format beyond annotations; annotations already indicate read-only and idempotent.

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: purpose, output format, input limit. 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?

For a simple one-parameter tool with output schema, description covers key aspects: output format and input limit.

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%; description adds character cap and output format but parameter meaning is already clear.

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

Purpose4/5

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

Clearly states it returns lemma for each word, but does not differentiate from siblings like analyze_morphology or pos_tag.

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?

No guidance on when to use this tool versus alternatives; no exclusions or prerequisites mentioned.

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

named_entitiesA
Read-onlyIdempotent

Extract named entities (PER/LOC/ORG) using EstNLTK's CRF model.

Returns [{"text": ..., "type": ..., "start": ..., "end": ...}, ...]. Input is capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to extract named entities (people, places, organisations) from.

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 declare readOnlyHint and idempotentHint, so the tool is safe. The description adds context on input character limit and output format, going beyond annotations to inform agent behavior.

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 extra words, front-loaded with purpose. Efficiently conveys all necessary 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?

For a single-parameter NER tool with output schema present and annotations covering safety, the description fully covers input constraints, output structure, and tool purpose.

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 a clear description of the 'text' parameter. The description adds value by specifying the output format and character limit, which are not in 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 it extracts named entities (PER/LOC/ORG) using EstNLTK's CRF model, with a specific verb and resource. It distinguishes from sibling tools like pos_tag or tokenize by focusing on entity extraction.

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 use for Estonian text only but does not explicitly state when not to use or provide alternatives. Sibling tools exist for other linguistic tasks, but no direct comparison is made.

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

paradigmA
Read-onlyIdempotent

Generate the full inflection paradigm for an Estonian word.

For nominals (nouns, adjectives, pronouns, cardinals, ordinals, comparatives, superlatives): produces all 14 cases × 2 numbers = up to 28 forms. For verbs: produces infinitives, present/past/conditional indicative, imperative, and participles (~30 forms). Other parts of speech (adverbs, conjunctions, particles) don't inflect, so forms is empty.

Each form entry has the Vabamorf form code (e.g. sg p, ksin), its Estonian label (e.g. ainsuse osastav, tingiv 1.p ainsus), and the surface form Vabamorf generated. Use form_estonian verbatim in Estonian replies — don't translate the English form code.

AMBIGUOUS LEMMAS. Some lemmas belong to more than one inflection type (kott inflects as either koti or kota, two different words that share a nominative). forms is then one internally consistent paradigm, paradigm_key names it by its singular genitive, paradigm_count says how many exist, and the rest are in other_paradigms. Read ambiguity_estonian before quoting a form. Pass an inflected form (koti) rather than the bare lemma when you know which word you mean: that selects the paradigm exactly.

Phase-1 scope: covers the most commonly-needed forms per word class, not every theoretical form Vabamorf can produce. Single-word input, capped at 200 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYesA single Estonian word (lemma or inflected form) to generate the full paradigm for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
formsNo
inputNo
lemmaNo
invariantNo
word_classNo
paradigm_keyNo
partofspeechNo
paradigm_countNo
other_paradigmsNo
reading_estonianNo
summary_estonianNo
ambiguity_estonianNo
invariant_estonianNo
word_class_estonianNo
partofspeech_estonianNo
ranked_by_corpus_frequencyNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly, idempotent, and openWorld annotations, the description discloses critical behavior: exactly what forms are produced, the ambiguity handling with `paradigm_key` and `other_paradigms`, the use of Vabamorf form codes, and Phase-1 scope restrictions. This gives an agent a rich and accurate model of what the tool will and won't do.

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 lengthy but every paragraph serves a purpose, and the core purpose is front-loaded in the first sentence. It uses readable paragraph breaks to cover the main behavior, ambiguity, and usage constraints 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 combinatorial complexity of Estonian inflection and multiple word classes, the description is complete enough for an agent to use the tool correctly. It covers ambiguous lemmas, forms structure, Estonian labels, input disambiguation, scope limits, and output guidance, with an output schema also present for the rest.

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

Parameters4/5

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

The schema already documents the single `word` parameter at 100% coverage, so the baseline is 3. The description adds valuable usage nuance: passing an inflected form instead of a bare lemma selects the exact paradigm, and input is capped at 200 characters. This goes beyond the schema without overcomplicating it.

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

Purpose5/5

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

The description opens with 'Generate the full inflection paradigm for an Estonian word', giving a clear verb, resource, and scope. It further distinguishes nominal versus verb paradigms and is easily differentiated from sibling tools like analyze_morphology and lemmatize, which do analytical rather than paradigm-generation work.

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 gives strong usage context: which parts of speech inflect, that non-inflecting words return empty `forms`, and that inflected lemmas should be passed to disambiguate. It does not explicitly name alternatives or say when not to use the tool relative to sibling tools, but the practical guidance is clear.

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

pos_tagA
Read-onlyIdempotent

Return part-of-speech tag for each word.

POS tag set: S=noun, V=verb, A=adj, P=pron, D=adv, K=adp, J=conj, N=numeral, I=interj, Y=abbrev, X=foreign, Z=punct, etc. Input is capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to part-of-speech tag.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds the important constraint of a 100,000-character input limit and defines the POS tag set, which are behavioral details 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?

The description is two sentences: the first concisely states the purpose, and the second adds essential details (tag set and input limit) without waste. It is front-loaded and efficient.

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 low complexity, one required parameter, and presence of an output schema, the description is complete. It covers purpose, input constraints, and tag set; output schema handles return values.

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?

The input schema provides 100% coverage of the single parameter with a clear description. The tool description does not add new parameter-specific semantics beyond the schema, 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?

The description clearly states the tool returns a part-of-speech tag for each word, providing a specific verb and resource. The POS tag set disambiguates from sibling tools like analyze_morphology or lemmatize, which handle different linguistic analyses.

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 does not explicitly specify when to use this tool versus alternatives. It only describes the function, leaving the agent to infer suitability from the name and sibling list.

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

spell_checkA
Read-onlyIdempotent

Check Estonian spelling for each word and optionally return suggestions.

Returns one entry per word with text, spelling (bool), and suggestions (list of correction candidates) when suggestions=True. Input is capped at 100,000 characters.

CAVEAT: Vabamorf accepts ANY morphologically well-formed word, including compounds you just invented (e.g. toortõlkeoht) — it splits them into valid roots and reports spelling: true. So passing spell_check does NOT mean a word is real, attested Estonian. For a coined or unusual compound, confirm it with check_compound_familiarity before trusting it.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to spell-check.
suggestionsNoInclude correction suggestions for misspelled words.

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?

Discloses that the tool accepts any morphologically well-formed word including invented compounds, which is a key behavioral trait not covered by annotations (readOnlyHint, idempotentHint). No contradiction 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?

Description is concise, front-loaded with purpose, then output format, input limit, and critical caveat, with 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?

Given annotations (readOnly, idempotent) and output schema existence, the description fully explains output format, input constraints, and caveats, and references an appropriate sibling tool for further verification.

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 both parameters with basic descriptions; the tool description adds value by specifying the character limit and the effect of the suggestions parameter on output, providing 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?

Description clearly states it checks Estonian spelling per word with optional suggestions, and distinguishes from sibling tools like check_compound_familiarity by noting its limitations for coined compounds.

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 explains when to use (Estonian spell-check) and when not to rely solely (for unusual compounds) by directing to check_compound_familiarity, and notes the 100,000 character input limit.

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

syllabifyA
Read-onlyIdempotent

Split a single Estonian word into syllables with quantity and accent.

Each syllable entry: {"syllable": str, "quantity": int, "accent": int}. Input is capped at 200 characters and must contain no whitespace.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYesA single Estonian word (no whitespace) to split into syllables.

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?

Beyond annotations (readOnlyHint, idempotentHint), the description adds output format details and input restrictions (capped length, no whitespace), providing full behavioral disclosure.

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-load purpose, then output format, then constraints. No wasted words; efficient and structured.

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 a single parameter, clear output format in description, and simple use case, the description is fully complete for correct invocation.

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 parameter 'word' already described. The description repeats the constraint but adds no new semantics, 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?

Description clearly states the action ('Split a single Estonian word into syllables') and the result ('with quantity and accent'), distinguishing it from siblings like 'tokenize' or 'lemmatize'.

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?

Input constraints (200 chars, no whitespace) are specified. While explicit when-to-use vs alternatives is absent, the linguistic task is narrowly defined, and siblings cover different operations, making usage clear.

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

synonymsA
Read-onlyIdempotent

Look up Estonian synonyms via WordNet.

Returns synsets (groups of synonymous lemmas) for the input word, each with its definition and example usages. Useful when you want Claude to pick a different word with the same meaning, e.g. swap an over-used verb in marketing copy. Word-sense ambiguity is preserved: a polysemous word returns multiple synsets, one per meaning. Input capped at 200 characters.

WORD-FIT CHECK: when the question is "is this the right word here?" rather than "give me an alternative", READ EACH definition and test it against the user's actual context — do not just harvest lemmas. Estonian glosses routinely carry a domain constraint that decides the answer: korpus returns the sense "kirjaliku või suulise teksti elektrooniline kogu", so calling a set of IMAGES a korpus is wrong however natural it sounds in ML jargon; andmestik carries no such constraint. A gloss naming a medium, field, or material is a constraint on where the word may be used. Note also that a word can be well-formed, correctly spelled and still the wrong register — for that, check_officialese and classify_register, not this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYesA single Estonian word to look up WordNet synonyms for.
max_synsetsNoMaximum number of word-sense synsets to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription
wordNo
synsetsNo
synset_countNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses important behaviors: polysemous words return multiple synsets, word-sense ambiguity is preserved, input is capped at 200 characters, and glosses may carry domain constraints that affect interpretation. These add real value over the annotations alone.

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 long but every section earns its place: the core purpose is front-loaded, the return type is explained, use cases are concrete, and the word-fit warning directly impacts how an agent should interpret results. No filler or repetition of the schema fields.

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 two-parameter tool with an output schema and helpful annotations, the description provides complete operational context: how results are structured, how to reason through the results, what constraints apply, and which sibling tools to use instead. An agent can correctly select and invoke this tool without additional information.

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 already described adequately. The description adds extra semantics not present in the schema, such as the 200-character input cap and the fact that max_synsets limits the number of word-sense synsets. This goes beyond baseline, but the schema still carries most of the parameter 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 opens with a specific verb-object pair ('Look up Estonian synonyms via WordNet') and defines the return type (synsets with definitions and example usages). It also differentiates itself from nearby sibling tools by referencing WordNet and by directing register-related questions to check_officialese and classify_register.

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 gives explicit when-to-use guidance: picking a different word with the same meaning, e.g., swapping an overused verb. It also gives a detailed when-not-to-use rule—for 'is this the right word here?' questions it instructs reading and testing definitions against user context, and for register issues it points to sibling tools check_officialese and classify_register.

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

tokenizeA
Read-onlyIdempotent

Split Estonian text into sentences and words.

Returns a dict with sentences (list of strings) and words (list of strings). Input is capped at 100,000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesEstonian text to split into sentences and words.

Output Schema

ParametersJSON Schema
NameRequiredDescription
wordsNo
sentencesNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint and idempotentHint; description adds the input character limit and return format (dict with sentences and words). No contradiction and useful behavioral 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.

Conciseness5/5

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

Three concise sentences: purpose, return format, and input limitation. No fluff; each sentence serves a 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?

For a simple single-parameter tokenizer, the description covers purpose, return structure (supported by output schema), and a practical constraint (100k chars). No missing critical information.

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%; the schema already describes the text parameter. The tool description essentially repeats that, providing no additional semantics or nuances.

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 'Split' and the resources 'Estonian text into sentences and words.' It distinguishes from 21 sibling tools like analyze_morphology or spell_check, which are more analytical or corrective.

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?

Implies usage for tokenization but offers no explicit when-to-use guidance or comparisons to siblings such as lemmatize or pos_tag. The 100,000 character cap is mentioned but not as a usage condition.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.5.6
    • Addedcheck_defined_terms
    • Addedcheck_legalese
    • Addedcheck_officialese
    • Addedcheck_term_consistency
    • Changedclassify_register1 field changed
      • addedOutput schema / properties / structure
        Added value: +{
        +  "additionalProperties": true,
        +  "default": null,
        +  "title": "Structure",
        +  "type": "object"
        +}
    • Addedcommon_legal_usage
    • Changedparadigm10 fields changed
      • addedOutput schema / properties / ambiguity_estonian
        Added value: +{
        +  "default": null,
        +  "title": "Ambiguity Estonian",
        +  "type": "string"
        +}
      • addedOutput schema / properties / invariant
        Added value: +{
        +  "default": null,
        +  "title": "Invariant",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / invariant_estonian
        Added value: +{
        +  "default": null,
        +  "title": "Invariant Estonian",
        +  "type": "string"
        +}
      • addedOutput schema / properties / other_paradigms
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "title": "Other Paradigms",
        +  "type": "array"
        +}
      • addedOutput schema / properties / paradigm_count
        Added value: +{
        +  "default": null,
        +  "title": "Paradigm Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / paradigm_key
        Added value: +{
        +  "default": null,
        +  "title": "Paradigm Key",
        +  "type": "string"
        +}
      • addedOutput schema / properties / partofspeech_estonian
        Added value: +{
        +  "default": null,
        +  "title": "Partofspeech Estonian",
        +  "type": "string"
        +}
      • addedOutput schema / properties / ranked_by_corpus_frequency
        Added value: +{
        +  "default": null,
        +  "title": "Ranked By Corpus Frequency",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / reading_estonian
        Added value: +{
        +  "default": null,
        +  "title": "Reading Estonian",
        +  "type": "string"
        +}
      • addedOutput schema / properties / word_class_estonian
        Added value: +{
        +  "default": null,
        +  "title": "Word Class Estonian",
        +  "type": "string"
        +}
  2. 21 tool updatesv0.2.4
    • First observedanalyze_morphology
    • First observedcheck_abbreviation_hyphenation
    • First observedcheck_capitalization
    • First observedcheck_compound_familiarity
    • First observedcheck_compounds
    • First observedcheck_hyphenation
    • First observedcheck_numbers
    • First observedcheck_object_case
    • First observedcheck_punctuation
    • First observedcheck_redundancy
    • First observedcheck_style
    • First observedclassify_register
    • First observedfind_related_words
    • First observedlemmatize
    • First observednamed_entities
    • First observedparadigm
    • First observedpos_tag
    • First observedspell_check
    • First observedsyllabify
    • First observedsynonyms
    • First observedtokenize

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct linguistic task: morphological analysis, specific error checks (capitalization, compounds, hyphenation, numbers, object case, punctuation, redundancy), style/register, and lexical resources (synonyms, related words, paradigms). Even similar-seeming tools like check_compounds and check_compound_familiarity address different problems (split compounds vs. unfamiliar coinages). No ambiguity.

Naming Consistency4/5

Most heuristic checks follow a consistent `check_*` prefix (e.g., check_capitalization, check_compounds). Other tools use simple verbs or nouns (lemmatize, pos_tag, syllabify, tokenize). A few deviate (find_related_words, classify_register), but overall the pattern is clear and readable.

Tool Count4/5

21 tools is slightly above the ideal range, but each tool serves a specific function for comprehensive Estonian language processing. The scope covers morphology, syntax, style, and typography, justifying the count without feeling bloated.

Completeness4/5

The tool set covers a broad spectrum of Estonian language tasks: analysis, error detection, generation, lexical resources, and text statistics. Phase-1 limitations are acknowledged, but most common needs are addressed. Missing advanced features like dependency parsing are out of scope for this server's stated purpose.

Maintenance

ActivityActive
ResponsivenessWithin a week

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

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/silly-geese/estonian-mcp'

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