estonian-writing-assistant

estonian-writing-assistant is a skill for Claude Code, Codex from silly-geese/estonian-mcp. It costs 320 tokens per session (10,478 once invoked), scanned A, original, Apache-2.0.

A writing and study assistant for Estonian, a language with many word forms and grammatical cases. It uses language-analysis tools to check spelling, dictionary forms, and morphology.

In plain words
What is it for?
Use it to proofread Estonian text, study vocabulary, check word roots and case forms, and analyze compound words.
Why use it?
Estonian words can look plausible while having the wrong spelling or grammatical form. The checks reduce errors that a general language model may miss.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Use it to proofread Estonian text, study vocabulary, check word roots and case forms, and analyze compound words.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/silly-geese/estonian-mcp/estonian-writing-assistant
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add silly-geese/estonian-mcp --skill estonian-writing-assistant
Clone the repo
git clone --depth 1 https://github.com/silly-geese/estonian-mcp

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for estonian-writing-assistant

README.md
[![agentmods](https://agentmods.dev/badge/skills/silly-geese/estonian-mcp/estonian-writing-assistant/github.svg)](https://agentmods.dev/skills/silly-geese/estonian-mcp/estonian-writing-assistant)
Your own site
<a href="https://agentmods.dev/skills/silly-geese/estonian-mcp/estonian-writing-assistant"><img src="https://agentmods.dev/badge/skills/silly-geese/estonian-mcp/estonian-writing-assistant/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for estonian-writing-assistant

Your own site · 80×15
<a href="https://agentmods.dev/skills/silly-geese/estonian-mcp/estonian-writing-assistant"><img src="https://agentmods.dev/badge/skills/silly-geese/estonian-mcp/estonian-writing-assistant.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 320 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 10,478 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00320 $0.10478
Opus 5.5 $0.00128 $0.04191
Sonnet 5.5 $0.00064 $0.02096
Haiku 4.5 $0.00032 $0.01048

Measured 8d ago against content hash 222174ccdcda, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

estonian-writing-assistant scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/estonian-writing-assistant/SKILL.md · 562 lines

How it starts

The opening of the file, as written. The whole thing — 562 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Estonian writing assistant

Estonian has 14 cases, vowel harmony in compounds, productive subword morphology, and a quantity-grade system that's easy to get wrong. Models that haven't been heavily fine-tuned on Estonian will confidently hallucinate plausible-looking but incorrect inflections. This skill exists to prevent that: use the estonian-mcp tools as ground truth for any factual claim about an Estonian word.

The hard rule, applied throughout this skill:

Never assert an Estonian lemma, case form, conjugation, spelling, or compound split without verifying it with the MCP. If you're tempted to write "the partitive is X" or "this verb's stem is Y" from memory, stop and call the tool first.

Tools at a glance

Tool When to reach for it
spell_check First pass on any Estonian text the user wrote. Cheapest validation.
lemmatize Get dictionary forms: for vocabulary study, deduping word stems, citation.
analyze_morphology Full analysis with case form, root and ending, plus, where they apply, compound parts, an ambiguity count, an indeclinable flag and a usage flag (archaic / foreign / interjection / abbreviation / proper-noun). The authoritative tool when discussing grammar.
paradigm Generates the full inflection paradigm for a word: all 14 cases for nouns plus the short illative where a word has one (majja beside majasse), ~39 forms for verbs. Proper nouns inflect too (Tallinn → Tallinnasse); a name Vabamorf lacks gets an empty table, never invented forms. Use when the user asks "what's the X-case of Y" or wants to see every form. Don't try to recall paradigms from memory.
pos_tag When you only need POS, e.g., filtering a list to nouns.
tokenize Sentence + word boundaries. Useful before per-sentence operations.
synonyms Same-meaning alternatives via Estonian WordNet. Returns synsets grouped by sense.
find_related_words Semantically nearby words via fastText. Broader than synonyms: includes near-synonyms, related concepts, and (sometimes) antonyms.
classify_register Heuristic formal/colloquial score with markers + consistency.is_mixed flag for register-mixed text (formal + colloquial markers in the same draft = jarring).
check_style Four style metrics in one call: lemma-aware repetition (catches 'kasutab' / 'kasutas' both under lemma 'kasutama'), Estonian passive-voice ratio (-takse/-ti/-tud family), sentence-length mean+stddev, hedging-word density. Use for newsletter / ad / email polish.
check_redundancy Pleonasm / semantic-doubling check: flags samuti ka (also+also), kõige optimaalsem (most+optimal), and fixed redundant phrases. Run it before claiming a redundancy "the MCP can't catch": it catches the common ones.
check_object_case Käändeõpetus heuristic. Catches the most common confidently-wrong Estonian: direct-object case after negation (must be partitive) and after partitive-only verbs (armastama, vihkama, vajama, …). Lexicon-based, no syntactic parser; only flags nouns AFTER the trigger so subject-noun false positives are minimal. An issue gives the noun's lemma and form, not a correction: take the partitive in the number form shows from paradigm. A negated sentence containing olema (pole näinud) is not checked for negation. It also checks verb government: teavitama / informeerima take the person in the partitive (teavitas politseid), teatama takes the recipient in the allative (teatas politseile), so teavitas politseile and Teatame Teid are flagged with both fixes in suggestion. Recall is about half by design: an allative that belongs to a participle (teavitada isikut talle seatud piirangust) is correct and stays quiet.
check_abbreviation_hyphenation Lühendiortograafia: flags an ending that starts with l written straight onto an all-capital abbreviation (OÜle → OÜ-le, ÜROlt → ÜRO-lt, THIl → THI-l), where EKI finds the hyphen clearer. EKI accepts every other hyphenless form (ELi, ELis, APIga, MCPst, ASidel are as correct as EL-i, EL-is, API-ga, MCP-st, AS-idel), so do not "fix" them: keep the text's own choice. A letter whose name ends in a consonant takes the stem vowel, so ASle is misinflected and the suggestion is AS-ile. Any all-capital stem is checked, known or not; a mixed-case one (SaaSi, PhDga) and a chloride formula (HCl, NH4Cl) are not.
check_compound_familiarity Attestation check for each compound noun: is the lemma in the fastText corpus vocabulary (in_vocab), in Estonian WordNet (in_wordnet), or a legal term of art? Read attested first, and read attested: false for what it is: outside a 100K-word vocabulary, which is the normal state for correct specialist vocabulary. lisakäive, klikkimismäär, koolitoit, rehvivahetus are all unattested here and all ordinary Estonian, so unattested is NEVER on its own a reason to rewrite. is_suspect is narrow: unattested AND the nearest neighbour is a real word AND that similarity is still under 0.55 (mõtteliin, 0.536). Recall is low on purpose: a coinage scoring inside the band real vocabulary occupies is missed rather than bought at the price of flagging good Estonian, so toortõlkeoht (0.571) passes. neighbour_quality.signal: none means the nearest neighbour is a scrape-artifact token, the score means nothing, and no verdict is offered. Note the other limit too: a compound that is merely stilted rather than invented (teadusandmestik) passes, because similarity can't judge register, so use check_officialese for that. Run on any Estonian compound you yourself produced (rather than verbatim user input).
check_domain_terms For Estonian written about an organisation's own systems. Reports the compounds that are unattested AND not on the organisation's glossary or identifier list. That says only that the word is not the organisation's: it may be a name you coined, or ordinary Estonian the lexicons lack (vagunisõit is common). Where it names something the organisation has a word for, or something with an identifier, use theirs. When there are glossary terms, each comes with up to three of them spelled alike (suggestions): look-alikes, not synonyms, so replace the compound only when a suggestion names the same thing. contains_glossary_term marks a compound built on a glossary term (vagunireisitabel on vagunireis), which is ordinary Estonian and must not be shortened to the term. The hosted server has no glossary of its own, so pass the organisation's terms in glossary (up to 1,000). With no glossary at all it is only the unattested list, which is never on its own a reason to rewrite.
check_officialese Kantseliit check for non-legal prose: reports, academic writing, business copy, grant/R&D paperwork. Use this, not check_legalese, for anything that isn't a statute or contract: check_legalese's lexicon and 34-word gate are tuned for legislation and return nothing on report officialese. Gives nominalisation density with the verb to swap in (hindamine → hindama), correctly-counted umbisikuline tegumood, clause stacking, Estonian-calibrated sentence length, and admin filler. Also läbi viima in every form with a verb in the same form (viidi läbi → korraldati / tehti, pidama for a meeting), translated letter phrases (calque-phrase: Palun leidke manuses, ärge kõhelge ... võtmast, kiri leiab teid hästi, tänan teid teie ... eest, vaatan edasi koostööle, sealhulgas, kuid mitte ainult, antud juhul) and the request Küsin täpsemalt, kas … (kusin-tapsemalt → Palun täpsustage, … / Sooviksin täpsemalt teada, …). All of these are style hints: say so when you pass them on.
check_translationese English sentence structure and English habits of form that make Estonian read as translated: teie andmed where the subject's own thing is oma andmed, lähtume me, a third of the sentences opening with Ma, Kui ..., me saadame (the verb comes first after a fronted clause), saab olema, ettepanek võtmaks, Tagamaks, Mitte leides, tänu with a bad cause, minu arvamusel, a letter's Hea Mari, / Tere Mari / Lugupidamisega,, the serial comma (teed, ja), title case in headings. Run it on every Estonian text you write or translate. maks-purpose and subject-pronoun are style hints.
check_term_consistency One referent, one term. Run on any document longer than a couple of paragraphs: catches andmestik in §1, teadusandmestik in §2, pildiandmestik in §3. Reports per-variant counts so you can standardise on the dominant one. Pass the organisation's terms in glossary when you have them (up to 1,000; the hosted server has none of its own): when exactly one variant in a group is listed, the group names it preferred, so standardise on preferred when present and otherwise on dominant. Read each group before rewriting: some are genuinely distinct concepts.
check_capitalization Algustäheortograafia (initial-letter orthography) check per EKI Reeglid. Flags weekdays, months, nationalities, and language/culture adjectives wrongly capitalized mid-sentence. A hit at the start of a line, list item or quotation, or inside a proper name (Eesti Keele Instituut), is usually false. Run on every Estonian text you produce.
check_compounds Liitsõnaõigekiri: flags common compound splits the model produces (kooli maja → koolimaja). Lexicon-based, phase 1.
check_punctuation Kirjavahemärgid: flags missing commas before subordinating conjunctions (et, sest, kuna, kuid, vaid, nagu, …). The comma-before-clause rule only. A comma before a two-part connective (nii et, selleks et) passes. With none, ilma et and olgugi et get it before the pair; the others get it before et, which suits manner (Tegin nii, et kõik said aru) but not result (Sadas vihma, nii et jäime koju). nagu is flagged only before a verb, so tugev nagu karu passes, but Kassid nagu kõik koduloomad vajavad hoolitsust and punane nagu tuli still flag, and nagu meaning näiteks (Riigid, nagu Soome ja Rootsi, ...) is never flagged: give those a second look. comma-after-subordinate-clause flags the comma that closes an embedded clause before the main verb (Mees, kes seal seisis oli minu isa → , oli); the comma belongs there at the latest and may belong earlier. comma-before-ja-after-subordinate-clause flags ja after a kes/mis clause when the verb after ja changes person back to the main clause's (Juhtisin projekti, mis kestis kaks aastat ja koolitasin … → , ja). EKI keeps that comma (reegel 44, märkus 2), so never delete a comma before ja that closes a clause.
check_hyphenation Poolitamine: returns line-break positions for a word; compound seams are among them but not singled out, so pick the seam yourself. Use only when typesetting/line-breaking matters; skip in normal writing.
check_numbers Numbrite õigekirjutus: flags decimal-separator (period vs comma) and thousands-separator (comma vs space) violations. It skips times after kell, time ranges, dates (14.05), clause, section and version numbers (4.13. Tellija, punkt 3.2, Python 3.12). It flags 1,250 as a thousands separator with the suggestion 1250 (EKI writes four digits together and groups from five: 12 500); if you meant the decimal 1,25, keep it. A time without kell mid-sentence (väljub 8.47 ja) is still flagged, and a date-shaped decimal with no unit (1.05 ja) is skipped, so judge a hit or a miss next to a time or a date yourself. approximate-tilde: a tilde used as "about" before a number (~50 inimest) gets u 50, or Umbes 50 at a sentence start; EKI writes rounded numbers with u (no period), umbes or ligikaudu and keeps the tilde for variants (mina ~ ma). ca 50 and u. 50 are fine; leave them. A spaced A ~ 5 after a word, ≈, code, paths and 5~10 are not flagged. month-year-digits: a month and year in digits (09.2016) is a date, and EKI finds the month in words clearer: sept 2016 (the abbreviation needs no case ending: alates sept 2016; a full name does: alates märtsist 2019). range-spacing: no spaces around the dash of a range whose ends contain none (2020 - 2024 → 2020-2024, 5 - 10 päeva → 5-10); typeset EKI text uses the mõttekriips there, and a hyphen strictly means "ja" between consecutive numbers (14-15 eurot). Keep the spaces when an end contains one (9000 - 10 000, aprill 2008 - august 2009); write ordinal ranges as 2015.-2019. aastal and seasons as 2019/2020. percent-sign-suffix: 20%-line → 20% or 20-protsendiline; case endings (10%-st) are fine.
named_entities PER/LOC/ORG extraction. Useful for summarisation and content audit.
syllabify Per-syllable breakdown with quantity + accent. Useful for slogan rhythm, song lyrics, or pronunciation guides.

Read the full file on GitHub · 562 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago Changed · +52 lines · +26 tokens per session 222174ccdcda
  2. 10d ago Changed · +115 lines bb7957cd5b21
  3. 15d ago Changed · +5 lines 14b348fb7dae
  4. 1mo ago Changed · +1 lines a59dca29353f
  5. 1mo ago Changed · +5 lines 5275e71b849a
  6. 1mo ago Changed · +3 lines f893029483e4
  7. 2mo ago Changed e067a76c3b4f
  8. 2mo ago First seen · 381 lines · 294 tokens per session scan A daafa804c763

Subscribe to this mod's changes

estonian-writing-assistant is a skill published in the GitHub repository silly-geese/estonian-mcp (25 stars, last pushed yesterday), licensed Apache-2.0. It adds 320 tokens to every session and 10,478 once invoked, about $0.0013 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

estonian-writing-assistant compared with skills from other repositories

estonian-writing-assistant next to 6 skills from other repositories
ModTypeStarsLast pushLicenceScanTokensWorks with
estonian-writing-assistantsilly-geese/estonian-mcpSkill25yesterdayApache-2.0A320Claude Code, Codex
opik-diagnosecomet-ml/opik-mcpSkill2259d agoApache-2.0A187Claude Code
dcc-blender-assembly-pitfallsdcc-mcp/dcc-mcp-blenderSkill60yesterdayMITA153Claude Code
virality-analysismtarcure/claude-vibe-squadSkill2289d agoMITA56Claude Code, Codex
color-theorymtarcure/claude-vibe-squadSkill2289d agoMITA62Claude Code, Codex
client-scriptsserac-labs/seracSkill7717d agoApache-2.0A45Claude Code
quantum-algorithmsxi-zhao/OpenQuantumSkill71yesterdayMITA34Claude Code, Codex