livonian
Server Details
Grounds LLMs in the real Livonian dictionary: attested words, inflections, romanization.
- Status
- Healthy
- Uptime
- 17.5% over 61 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool targets a distinct operation: search retrieves dictionary entries, get_inflections fetches paradigm tables by handle, romanize transforms orthography to ASCII, and deromanize reverse-looks-up from ASCII. The descriptions explicitly clarify boundaries (e.g., deromanize is the inverse of romanize; get_inflections is never a first call).
All four tools use a consistent `livonian_` prefix followed by a clear verb or verb_noun pattern: deromanize, get_inflections, romanize, search. No mixed conventions or vague verbs.
Four tools is well-scoped for a focused dictionary/lookup server: search, inflection retrieval, and bidirectional romanization cover the domain without redundancy or thinness.
The surface covers lookup, paradigm retrieval, and romanization/deromanization, which is a complete lifecycle for this domain. Minor gaps might include no explicit cache-clearing or rate-limit status tool, but core functionality is covered.
Available Tools
4 toolslivonian_deromanizeFind the Livonian word(s) matching a romanized spellingARead-onlyIdempotentInspect
Find the real Livonian word(s) whose pronunciation-romanization matches this
clean-ASCII input — the inverse direction of livonian_romanize. Because
romanize is lossy, this is a LOOKUP against the words already in the dictionary
cache: attested spellings come back as source=dictionary. If none match, a single
best-effort reconstruction is returned (source=reconstruction, approximate=true) —
a guess, not attested. Coverage grows as words are cached, so an identical query
may return a reconstruction now and a dictionary hit later.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Romanized (clean-ASCII) Livonian text to resolve back to real orthography. Returns the attested dictionary spelling(s) whose romanization matches (source=dictionary, exact) — several may match one ambiguous key. On a miss, a single best-effort reconstruction (source=reconstruction, approximate=true), which is a guess: romanize is lossy, so case, stød, palatalization and macron length cannot be recovered. |
Output Schema
| Name | Required | Description |
|---|---|---|
| candidates | Yes | |
| approximate | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds genuinely novel behavior: it is a cache lookup, misses yield a single approximate reconstruction ('a guess, not attested'), and coverage grows so an identical query may later return a dictionary hit. That volatility disclosure is exactly the kind of context structured fields cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then layers in lookup semantics and the reconstruction caveat in logically ordered sentences. Dense but every sentence carries weight; minor tightening possible around the source=reconstruction explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, yet the description still clarifies the source=dictionary vs source=reconstruction distinction and the approximate=true flag. For a one-parameter lookup with rich annotations, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 100% schema description coverage, the schema already documents format, length bounds, and the source/approximate return semantics. The description reinforces the inverse-direction framing but adds no syntax or format detail beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find the real Livonian word(s) whose pronunciation-romanization matches this clean-ASCII input') and explicitly frames itself as the inverse of `livonian_romanize`, which cleanly distinguishes it from that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it (the reverse direction of romanize, resolving romanized input back to orthography). It does not, however, compare against the other siblings like `livonian_search`, so the routing guidance is good but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
livonian_get_inflectionsGet Livonian inflection tableARead-onlyIdempotentInspect
Fetch the full declension (nouns) or conjugation (verbs) table for a word identified by a search result's inflection handle (entry_id + word_class) — the exact case, number, tense, not a guessed ending. Use this only when a search ran without inline forms, or to fetch a match a broad search left un-expanded. Never a first call — the handle values only come from livonian_search results, and a default search already returns each match's table inline, so calling this afterwards just re-fetches what you have.
Returns Markdown — a nominal gets one case × {singular, plural} table; a verb gets a table per mood/tense (person × {affirmative, negative}, the negation auxiliary folded into the negative) plus its principal-parts and participle lists — or a clean not-found message. (Grammatical labels are normalised to English; Livonian forms stay verbatim.) The same table rides along as structuredContent with the shape {"result": } per the declared outputSchema — switch on result.category ('nominal' | 'verbal' | 'not_found') before reading the body. Results are cached server-side (repeats are instant) and calls are rate limited — on a rate-limit error, wait a few seconds and retry. Table content is from livonian.tech (CC BY-SA 4.0 — attribute if republished).
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | The word id from a search result's inflection handle. Accepts a number or a digit-string (e.g. 17746 or "17746"). | |
| word_class | Yes | The word-class code from a search result's inflection handle (e.g. 's' = noun, 'adj' = adjective, 'vi' = intransitive verb, 'vt' = transitive verb). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing return shape (Markdown tables per word class, not-found message), server-side caching, rate limiting with retry guidance, license/attribution requirements, and label normalization. The annotations already cover read-only/idempotent safety, so this adds genuinely new operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the negative guidance, then moves to return format and operational notes. Dense but every sentence carries usable information; the parenthetical license and normalization notes are slightly parenthetical clutter but still earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't restate the return contract, yet it usefully bridges it by naming result.category values ('nominal' | 'verbal' | 'not_found') to switch on. Prerequisite, non-first-call constraint, failure behavior, and rate limits are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description still adds provenance: both params come from a search result's 'inflection handle' and must be passed together, which is meaning the schema alone doesn't convey. It does not restate the accepted digit-string or enum codes, so it stays complementary rather than duplicative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (declension/conjugation table) and pins the scope precisely: 'the exact case, number, tense, not a guessed ending.' It is clearly distinguishable from livonian_search, which produces the handle this tool consumes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('only when a search ran without inline forms, or to fetch a match a broad search left un-expanded'), explicit when-not ('Never a first call', 'calling this afterwards just re-fetches what you have'), and it names the prerequisite source (livonian_search results) for the handle values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
livonian_romanizeRomanize Livonian to clean ASCIIARead-onlyIdempotentInspect
Strip Livonian orthography down to clean, pronounceable ASCII for an
English-trained downstream (a voice/TTS, a search box). See the text parameter
doc for the exact letter mappings. Returns Markdown plus the romanized output as
structuredContent matching the declared outputSchema. Pure local transform: no
dictionary lookup, no network, and the output is always ASCII.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Livonian text to reduce to clean, pronounceable ASCII. Strips macrons, diacritics and capitals (ā→aa, š→sh, õ→u), softens a palatalized consonant (ņ ļ ŗ ţ ḑ) only before a vowel (ņ+a→nya, else ikšiggiņ→ikshiggin), and hyphenates the broken tone (si'zzõl→siz-zul) and long-vowel diphthong glides (kīen→kee-en). Pass a word, phrase, or several lines. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | The romanized ASCII output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real value beyond them: it declares the transform is pure and local (no dictionary lookup, no network) and that output is always ASCII. It does not address edge behavior such as exceeding the 4000-char maxLength or non-Livonian input, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the transformation, then the consumer, then the execution profile. Every sentence carries distinct information and nothing is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an outputSchema present and 100% parameter coverage, the description doesn't need to explain return values, and it correctly confines itself to purpose, audience, and the pure-local-transform contract. It is nearly complete; only failure/edge behavior (length overflow, non-Livonian characters) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the `text` parameter doc already carries the full mapping table, so the schema does the heavy lifting. The description only cross-references that doc ('See the `text` parameter doc for the exact letter mappings') rather than adding new parameter semantics, which is the textbook baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Strip Livonian orthography down to clean, pronounceable ASCII.' Combined with the direction of transformation (Livonian → ASCII), an agent can immediately separate this from livonian_deromanize, the inverse sibling, without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the intended consumers ('an English-trained downstream (a voice/TTS, a search box)'), which implies when to reach for it. However, it never explicitly states when NOT to use it or names livonian_deromanize as the alternative for the reverse direction, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
livonian_searchSearch the Livonian dictionaryARead-onlyIdempotentInspect
Look a word up in the real Livonian–Estonian–Latvian dictionary and return only attested content, so translations are grounded, not invented.
Search a meaning (in English/Latvian/Estonian) to find the Livonian headword, or a
Livonian word to confirm it exists and read its sense, part of speech and examples.
See the query and search_language parameter docs for how to phrase a query. By
default each match's full inflection table is returned inline, so one call usually
suffices; on a broad query only the first N tables expand (the rest are listed as
handles to fetch with livonian_get_inflections). Returns Markdown plus the same result as
structuredContent matching the declared outputSchema.
Results are cached server-side, so repeating a query is instant and free; a first-time query reaches the live dictionary and calls are rate limited — on a rate-limit error, wait a few seconds and retry instead of re-issuing immediately. Dictionary content is from livonian.tech (CC BY-SA 4.0 — attribute if republished).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A SINGLE content word, not a phrase. Exactly one word per call — even with several candidates or synonyms in mind, search them one at a time ('see', then 'look'), never combined into one query like 'see look'. Drop function words and infinitive markers — search 'to water' as 'water', 'the sea' as 'sea'. The dictionary matches one attested headword, so a multi-word query often returns nothing even when the word exists; search the main word first, then refine. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional. An inflected Livonian form (search_language='liv') is resolved to its dictionary lemma automatically when the form is known — the result says so when that happened. | |
| max_forms | No | Optional override for how many inflection tables to expand this call (0–12). Raise it to pull more tables in ONE call on a broad query, or set a small value to keep a broad query cheap. On an uncached query each table is fetched sequentially with polite pacing toward the upstream, so a high value on a cold broad query is slow — the bound limits upstream fan-out, not just response size. Omit to use the server's default cap. | |
| include_forms | No | When true (default), each match's full inflection table is returned INLINE — usable cases/tenses in ONE call, no follow-up livonian_get_inflections. Set false to get just the headword handles + glosses: a cheap way to SCREEN several candidate words or synonyms (which exist? which sense?) before spending forms on the one you pick. Bounded by a per-search cap — use max_forms to raise or lower it for this call. | |
| search_language | No | Language your query word is in — selects which language the search matches against: 'eng' (default), 'liv', 'lat', or 'est'. For English→Livonian translation, keep 'eng'. Glosses are in English. | eng |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | False when nothing matched. |
| query | Yes | |
| source | No | |
| entries | No | Structured dictionary entries: headword, pronunciation, part of speech, paradigm anchors, and senses with example sentences. |
| handles | No | |
| language | Yes | |
| resolved_from | No | The original inflected query when search_method='lemma_index'; empty on a direct match. |
| search_method | No | How the match was found: 'direct' = the query itself matched; 'lemma_index' = the query was an inflected Livonian form, resolved to its dictionary lemma via the cached paradigm index and re-searched. |
| resolved_lemma | No | The dictionary lemma actually searched when search_method='lemma_index'; empty on a direct match. |
| forms_truncated | No | How many handles did NOT get an inline table because the per-search cap was reached. Refine the query or call livonian_get_inflections. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world safety, but the description adds substantial behavior beyond them: server-side caching (repeat queries free), upstream rate limiting with explicit retry-after-a-few-seconds guidance rather than immediate re-issue, sequential polite pacing on cold broad queries, and CC BY-SA attribution. Return format (Markdown plus structuredContent per outputSchema) is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and grounded-content guarantee, then usage, then cost/rate behavior. Dense and mostly waste-free, though it partially restates the schema's own include_forms/max_forms wording and is longer than strictly necessary for an agent that still must open the parameter docs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return fields, and it still tells the agent the two output forms, the caching/rate-limit lifecycle, the fallback tool for unexpanded tables, and the licensing constraint. Nothing material for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description defers to the parameter docs, but it still adds real semantics the schema alone wouldn't convey: why queries must be a single content word, that the dictionary matches one attested lemma so phrases silently fail, that matching is bidirectional, and that inflected Livonian forms auto-resolve to a lemma with a signal in the result. The max_forms 'limits upstream fan-out, not just response size' note likewise explains the cost tradeoff.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — look up a word in the real Livonian–Estonian–Latvian dictionary and return attested content. It also clarifies the bidirectional capability (meaning→headword, Livonian word→sense/POS/examples), which cleanly separates it from livonian_get_inflections, anglo_search, and other sibling lexicons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when one call suffices (full inflection tables returned inline by default) and names the alternative for the remaining cases (handles fetched later via livonian_get_inflections). It also gives a concrete screening strategy — set include_forms=false to check several candidates cheaply before spending forms on one.
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.
2 tool updates
- Changed
livonian_get_inflections7 fields changed- added
Input schema / properties / word_class / enumAdded value: +[ + "adj", + "s", + "vi", + "vt" +] - removed
Input schema / properties / word_class / maxLengthRemoved value: -8 - removed
Input schema / properties / word_class / minLengthRemoved value: -1 - removed
Input schema / properties / word_class / patternRemoved value: -"^[a-z]+$" - changed
Output schema / $defs / NominalParadigm / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original." - changed
Output schema / $defs / ParadigmNotFound / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original." - changed
Output schema / $defs / VerbalParadigm / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original."
- Changed
livonian_search4 fields changed- changed
Output schema / $defs / NominalParadigm / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original." - changed
Output schema / $defs / ParadigmNotFound / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original." - changed
Output schema / $defs / VerbalParadigm / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original." - changed
Output schema / properties / source / defaultPrevious value: -"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Vāvere, Signis, Damberg, Pētõr, Kurpniece, Milda, Balodis, Uldis, Tuisk, Tuuli, Kūla, Gita, Tomingas, Marili, Soosaar Sven-Erik, Sedláčková, Anna & Jurgenovskis, Toms. 2024. Livonian lexicographic database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)"New value: +"Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Vāvere, Signis, Damberg, Pētõr, Kurpniece, Milda, Balodis, Uldis, Tuisk, Tuuli, Kūla, Gita, Tomingas, Marili, Soosaar Sven-Erik, Sedláčková, Anna & Jurgenovskis, Toms. 2024. Livonian lexicographic database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/) Adapted: reformatted and condensed from the original."
1 tool update
- Added
livonian_deromanize
6 tool updates
- Removed
get_inflections - Added
livonian_get_inflections - Added
livonian_romanize - Added
livonian_search - Removed
romanize_livonian - Removed
search_livonian
2 tool updates
- Changed
get_inflections13 fields changed- added
Input schema / properties / entry_idAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "description": "The word id from a search result's inflection handle. Accepts a number or a digit-string (e.g. 17746 or \"17746\").", + "title": "Entry Id" +} - removed
Input schema / properties / vards_idRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "string" - } - ], - "description": "The word id from a search result's inflection handle. Accepts a number or a digit-string (e.g. 17746 or \"17746\").", - "title": "Vards Id" -} - changed
Input schema / requiredPrevious value: -[ - "vards_id", - "word_class" -]New value: +[ + "entry_id", + "word_class" +] - added
Output schema / $defs / NominalParadigm / properties / entry_idAdded value: +{ + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / NominalParadigm / properties / vards_idRemoved value: -{ - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / NominalParadigm / requiredPrevious value: -[ - "vards_id", - "word_class", - "cases" -]New value: +[ + "entry_id", + "word_class", + "cases" +] - changed
Output schema / $defs / ParadigmNotFound / descriptionPrevious value: -"No paradigm for this vards_id/word_class (the morphology DB has none, or the\nhandle was wrong). ``found`` is False and there is no table body."New value: +"No paradigm for this entry_id/word_class (the morphology DB has none, or the\nhandle was wrong). ``found`` is False and there is no table body." - added
Output schema / $defs / ParadigmNotFound / properties / entry_idAdded value: +{ + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / ParadigmNotFound / properties / vards_idRemoved value: -{ - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / ParadigmNotFound / requiredPrevious value: -[ - "vards_id", - "word_class" -]New value: +[ + "entry_id", + "word_class" +] - added
Output schema / $defs / VerbalParadigm / properties / entry_idAdded value: +{ + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / VerbalParadigm / properties / vards_idRemoved value: -{ - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / VerbalParadigm / requiredPrevious value: -[ - "vards_id", - "word_class", - "finite", - "nonfinite" -]New value: +[ + "entry_id", + "word_class", + "finite", + "nonfinite" +]
- Changed
search_livonian17 fields changed- changed
Output schema / $defs / Entry / descriptionPrevious value: -"One dictionary entry (one upstream result card): the headword with its\npronunciation, part of speech, paradigm anchors, and senses.\n\n``vards_id`` + ``word_class`` are the same anchors carried by an\n:class:`InflectionHandle` — feed them to ``get_inflections`` for the full paradigm.\nEvery field except ``headword``/``gloss`` defaults, so a card missing a\npronunciation, type code, or senses still validates."New value: +"One dictionary entry (one upstream result card): the headword with its\npronunciation, part of speech, paradigm anchors, and senses.\n\n``entry_id`` + ``word_class`` are the same anchors carried by an\n:class:`InflectionHandle` — feed them to ``get_inflections`` for the full paradigm.\nEvery field except ``headword``/``gloss`` defaults, so a card missing a\npronunciation, type code, or senses still validates." - added
Output schema / $defs / Entry / properties / entry_idAdded value: +{ + "default": "", + "description": "Numeric word id for the forms endpoint.", + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / Entry / properties / vards_idRemoved value: -{ - "default": "", - "description": "Numeric word id for the forms endpoint.", - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / InflectionHandle / descriptionPrevious value: -"A reliable, structured anchor for fetching a full paradigm. Feed\n``vards_id`` + ``word_class`` to ``get_inflections`` — or ask ``search`` to\ninclude the table inline (``forms``)."New value: +"A reliable, structured anchor for fetching a full paradigm. Feed\n``entry_id`` + ``word_class`` to ``get_inflections`` — or ask ``search`` to\ninclude the table inline (``forms``)." - added
Output schema / $defs / InflectionHandle / properties / entry_idAdded value: +{ + "description": "Numeric word id used by the forms endpoint.", + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / InflectionHandle / properties / vards_idRemoved value: -{ - "description": "Numeric word id used by the forms endpoint.", - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / InflectionHandle / requiredPrevious value: -[ - "vards_id", - "word_class" -]New value: +[ + "entry_id", + "word_class" +] - added
Output schema / $defs / NominalParadigm / properties / entry_idAdded value: +{ + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / NominalParadigm / properties / vards_idRemoved value: -{ - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / NominalParadigm / requiredPrevious value: -[ - "vards_id", - "word_class", - "cases" -]New value: +[ + "entry_id", + "word_class", + "cases" +] - changed
Output schema / $defs / ParadigmNotFound / descriptionPrevious value: -"No paradigm for this vards_id/word_class (the morphology DB has none, or the\nhandle was wrong). ``found`` is False and there is no table body."New value: +"No paradigm for this entry_id/word_class (the morphology DB has none, or the\nhandle was wrong). ``found`` is False and there is no table body." - added
Output schema / $defs / ParadigmNotFound / properties / entry_idAdded value: +{ + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / ParadigmNotFound / properties / vards_idRemoved value: -{ - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / ParadigmNotFound / requiredPrevious value: -[ - "vards_id", - "word_class" -]New value: +[ + "entry_id", + "word_class" +] - added
Output schema / $defs / VerbalParadigm / properties / entry_idAdded value: +{ + "title": "Entry Id", + "type": "string" +} - removed
Output schema / $defs / VerbalParadigm / properties / vards_idRemoved value: -{ - "title": "Vards Id", - "type": "string" -} - changed
Output schema / $defs / VerbalParadigm / requiredPrevious value: -[ - "vards_id", - "word_class", - "finite", - "nonfinite" -]New value: +[ + "entry_id", + "word_class", + "finite", + "nonfinite" +]
3 tool updates
- Changed
get_inflections1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "NominalParadigm": { + "description": "Declension of a noun/adjective/numeral/pronoun: case → {singular, plural}.\n\n``category`` discriminates this from the verbal and not-found shapes — switch on it\nbefore reading the body.", + "properties": { + "cases": { + "additionalProperties": { + "$ref": "#/$defs/NumberForms" + }, + "description": "Case name (English, lower-case) → its singular/plural forms, in paradigm order, e.g. 'nominative', 'genitive', 'partitive'.", + "title": "Cases", + "type": "object" + }, + "category": { + "const": "nominal", + "default": "nominal", + "title": "Category", + "type": "string" + }, + "found": { + "const": true, + "default": true, + "title": "Found", + "type": "boolean" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + }, + "vards_id": { + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class", + "cases" + ], + "title": "NominalParadigm", + "type": "object" + }, + "NumberForms": { + "description": "A nominal cell: the two number forms of one case. Livonian forms are verbatim.", + "properties": { + "plural": { + "title": "Plural", + "type": "string" + }, + "singular": { + "title": "Singular", + "type": "string" + } + }, + "required": [ + "singular", + "plural" + ], + "title": "NumberForms", + "type": "object" + }, + "ParadigmNotFound": { + "description": "No paradigm for this vards_id/word_class (the morphology DB has none, or the\nhandle was wrong). ``found`` is False and there is no table body.", + "properties": { + "category": { + "const": "not_found", + "default": "not_found", + "title": "Category", + "type": "string" + }, + "found": { + "const": false, + "default": false, + "title": "Found", + "type": "boolean" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + }, + "vards_id": { + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class" + ], + "title": "ParadigmNotFound", + "type": "object" + }, + "Polarity": { + "description": "A verbal cell: the two polarities of one person in one mood/tense. ``negative``\nis the ready-to-use form — the negation auxiliary (äb/äd/iz/algõ…) is already folded\nin (e.g. ``äb toup``), not orphaned in a separate column. Livonian forms are verbatim.", + "properties": { + "affirmative": { + "title": "Affirmative", + "type": "string" + }, + "negative": { + "title": "Negative", + "type": "string" + } + }, + "required": [ + "affirmative", + "negative" + ], + "title": "Polarity", + "type": "object" + }, + "VerbalParadigm": { + "description": "Conjugation of a verb, grouped the way the grammar is: finite moods/tenses by\nperson and polarity, plus the non-finite forms.\n\n``category`` discriminates this from the nominal and not-found shapes.", + "properties": { + "category": { + "const": "verbal", + "default": "verbal", + "title": "Category", + "type": "string" + }, + "finite": { + "additionalProperties": { + "additionalProperties": { + "$ref": "#/$defs/Polarity" + }, + "type": "object" + }, + "description": "Mood/tense (English, lower-case: 'present', 'past', 'conditional', …) → pronoun (Livonian, verbatim: ma/sa/ta/mēg/tēg/ne) → {affirmative, negative}. The negative already includes its auxiliary.", + "title": "Finite", + "type": "object" + }, + "found": { + "const": true, + "default": true, + "title": "Found", + "type": "boolean" + }, + "nonfinite": { + "additionalProperties": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "description": "Non-finite section (English, lower-case: 'principal parts', 'participles') → form label (English) → the Livonian form.", + "title": "Nonfinite", + "type": "object" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + }, + "vards_id": { + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class", + "finite", + "nonfinite" + ], + "title": "VerbalParadigm", + "type": "object" + } + }, + "properties": { + "result": { + "discriminator": { + "mapping": { + "nominal": "#/$defs/NominalParadigm", + "not_found": "#/$defs/ParadigmNotFound", + "verbal": "#/$defs/VerbalParadigm" + }, + "propertyName": "category" + }, + "oneOf": [ + { + "$ref": "#/$defs/NominalParadigm" + }, + { + "$ref": "#/$defs/VerbalParadigm" + }, + { + "$ref": "#/$defs/ParadigmNotFound" + } + ], + "title": "Result" + } + }, + "required": [ + "result" + ], + "title": "get_inflectionsOutput", + "type": "object" +}
- Changed
romanize_livonian1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "The MCP-facing romanization payload: the ASCII output only. ``original`` is\ndeliberately absent — like the Markdown render (see\n:func:`~livonian.languages.livonian.render.romanization_to_markdown`), the MCP\nresult reaches an LLM's context, so the raw caller text must not be echoed\nthrough it. The JSON API's :class:`Romanization` keeps the echo for\nprogrammatic callers.", + "properties": { + "text": { + "description": "The romanized ASCII output.", + "title": "Text", + "type": "string" + } + }, + "required": [ + "text" + ], + "title": "RomanizedText", + "type": "object" +}
- Changed
search_livonian1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "Entry": { + "description": "One dictionary entry (one upstream result card): the headword with its\npronunciation, part of speech, paradigm anchors, and senses.\n\n``vards_id`` + ``word_class`` are the same anchors carried by an\n:class:`InflectionHandle` — feed them to ``get_inflections`` for the full paradigm.\nEvery field except ``headword``/``gloss`` defaults, so a card missing a\npronunciation, type code, or senses still validates.", + "properties": { + "headword": { + "title": "Headword", + "type": "string" + }, + "part_of_speech": { + "default": "", + "description": "e.g. 'noun', 'verb', 'adjective'.", + "title": "Part Of Speech", + "type": "string" + }, + "pronunciation": { + "default": "", + "description": "Phonetic form in braces, e.g. {äm}.", + "title": "Pronunciation", + "type": "string" + }, + "senses": { + "items": { + "$ref": "#/$defs/Sense" + }, + "title": "Senses", + "type": "array" + }, + "type_code": { + "default": "", + "description": "Paradigm type code, e.g. '99', '53a'.", + "title": "Type Code", + "type": "string" + }, + "vards_id": { + "default": "", + "description": "Numeric word id for the forms endpoint.", + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "default": "", + "description": "Word-class code, e.g. 's', 'vt', 'adj'.", + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "headword" + ], + "title": "Entry", + "type": "object" + }, + "Example": { + "description": "One usage example for a sense: the Livonian sentence and its English translation.\n``english`` is empty when the upstream entry gives the Livonian without a gloss.", + "properties": { + "english": { + "default": "", + "title": "English", + "type": "string" + }, + "livonian": { + "title": "Livonian", + "type": "string" + } + }, + "required": [ + "livonian" + ], + "title": "Example", + "type": "object" + }, + "InflectionHandle": { + "description": "A reliable, structured anchor for fetching a full paradigm. Feed\n``vards_id`` + ``word_class`` to ``get_inflections`` — or ask ``search`` to\ninclude the table inline (``forms``).", + "properties": { + "context": { + "default": "", + "description": "Nearby headword / entry text.", + "title": "Context", + "type": "string" + }, + "forms": { + "anyOf": [ + { + "discriminator": { + "mapping": { + "nominal": "#/$defs/NominalParadigm", + "not_found": "#/$defs/ParadigmNotFound", + "verbal": "#/$defs/VerbalParadigm" + }, + "propertyName": "category" + }, + "oneOf": [ + { + "$ref": "#/$defs/NominalParadigm" + }, + { + "$ref": "#/$defs/VerbalParadigm" + }, + { + "$ref": "#/$defs/ParadigmNotFound" + } + ] + }, + { + "type": "null" + } + ], + "default": null, + "description": "The full inflection paradigm, populated when a search is asked to include forms. None when not requested or beyond the cap; category 'none' when the word has no paradigm.", + "title": "Forms" + }, + "pos_hint": { + "default": "", + "description": "Part-of-speech hint near the link.", + "title": "Pos Hint", + "type": "string" + }, + "vards_id": { + "description": "Numeric word id used by the forms endpoint.", + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "description": "Word-class code, e.g. 's', 'vi', 'vt', 'adj'.", + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class" + ], + "title": "InflectionHandle", + "type": "object" + }, + "NominalParadigm": { + "description": "Declension of a noun/adjective/numeral/pronoun: case → {singular, plural}.\n\n``category`` discriminates this from the verbal and not-found shapes — switch on it\nbefore reading the body.", + "properties": { + "cases": { + "additionalProperties": { + "$ref": "#/$defs/NumberForms" + }, + "description": "Case name (English, lower-case) → its singular/plural forms, in paradigm order, e.g. 'nominative', 'genitive', 'partitive'.", + "title": "Cases", + "type": "object" + }, + "category": { + "const": "nominal", + "default": "nominal", + "title": "Category", + "type": "string" + }, + "found": { + "const": true, + "default": true, + "title": "Found", + "type": "boolean" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + }, + "vards_id": { + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class", + "cases" + ], + "title": "NominalParadigm", + "type": "object" + }, + "NumberForms": { + "description": "A nominal cell: the two number forms of one case. Livonian forms are verbatim.", + "properties": { + "plural": { + "title": "Plural", + "type": "string" + }, + "singular": { + "title": "Singular", + "type": "string" + } + }, + "required": [ + "singular", + "plural" + ], + "title": "NumberForms", + "type": "object" + }, + "ParadigmNotFound": { + "description": "No paradigm for this vards_id/word_class (the morphology DB has none, or the\nhandle was wrong). ``found`` is False and there is no table body.", + "properties": { + "category": { + "const": "not_found", + "default": "not_found", + "title": "Category", + "type": "string" + }, + "found": { + "const": false, + "default": false, + "title": "Found", + "type": "boolean" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + }, + "vards_id": { + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class" + ], + "title": "ParadigmNotFound", + "type": "object" + }, + "Polarity": { + "description": "A verbal cell: the two polarities of one person in one mood/tense. ``negative``\nis the ready-to-use form — the negation auxiliary (äb/äd/iz/algõ…) is already folded\nin (e.g. ``äb toup``), not orphaned in a separate column. Livonian forms are verbatim.", + "properties": { + "affirmative": { + "title": "Affirmative", + "type": "string" + }, + "negative": { + "title": "Negative", + "type": "string" + } + }, + "required": [ + "affirmative", + "negative" + ], + "title": "Polarity", + "type": "object" + }, + "SearchLanguage": { + "description": "Which language the query word is matched against. Headwords come back in\nLivonian and glosses in English either way; this only selects the language the\nquery term is in. Codes are the site's own.", + "enum": [ + "liv", + "lat", + "est", + "eng" + ], + "title": "SearchLanguage", + "type": "string" + }, + "Sense": { + "description": "One sense of a headword: its gloss and any usage examples. ``label`` is the\nupstream sense marker (``a)``, ``b)``) and is empty for a single, unlabelled sense.", + "properties": { + "examples": { + "items": { + "$ref": "#/$defs/Example" + }, + "title": "Examples", + "type": "array" + }, + "gloss": { + "title": "Gloss", + "type": "string" + }, + "label": { + "default": "", + "title": "Label", + "type": "string" + } + }, + "required": [ + "gloss" + ], + "title": "Sense", + "type": "object" + }, + "VerbalParadigm": { + "description": "Conjugation of a verb, grouped the way the grammar is: finite moods/tenses by\nperson and polarity, plus the non-finite forms.\n\n``category`` discriminates this from the nominal and not-found shapes.", + "properties": { + "category": { + "const": "verbal", + "default": "verbal", + "title": "Category", + "type": "string" + }, + "finite": { + "additionalProperties": { + "additionalProperties": { + "$ref": "#/$defs/Polarity" + }, + "type": "object" + }, + "description": "Mood/tense (English, lower-case: 'present', 'past', 'conditional', …) → pronoun (Livonian, verbatim: ma/sa/ta/mēg/tēg/ne) → {affirmative, negative}. The negative already includes its auxiliary.", + "title": "Finite", + "type": "object" + }, + "found": { + "const": true, + "default": true, + "title": "Found", + "type": "boolean" + }, + "nonfinite": { + "additionalProperties": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "description": "Non-finite section (English, lower-case: 'principal parts', 'participles') → form label (English) → the Livonian form.", + "title": "Nonfinite", + "type": "object" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Kurpniece, Milda & Vāvere, Signis. 2024. Livonian morphology database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + }, + "vards_id": { + "title": "Vards Id", + "type": "string" + }, + "word_class": { + "title": "Word Class", + "type": "string" + } + }, + "required": [ + "vards_id", + "word_class", + "finite", + "nonfinite" + ], + "title": "VerbalParadigm", + "type": "object" + } + }, + "description": "The result of a dictionary search.", + "properties": { + "entries": { + "description": "Structured dictionary entries: headword, pronunciation, part of speech, paradigm anchors, and senses with example sentences.", + "items": { + "$ref": "#/$defs/Entry" + }, + "title": "Entries", + "type": "array" + }, + "forms_truncated": { + "default": 0, + "description": "How many handles did NOT get an inline table because the per-search cap was reached. Refine the query or call get_inflections.", + "title": "Forms Truncated", + "type": "integer" + }, + "found": { + "description": "False when nothing matched.", + "title": "Found", + "type": "boolean" + }, + "handles": { + "items": { + "$ref": "#/$defs/InflectionHandle" + }, + "title": "Handles", + "type": "array" + }, + "language": { + "$ref": "#/$defs/SearchLanguage" + }, + "query": { + "title": "Query", + "type": "string" + }, + "resolved_from": { + "default": "", + "description": "The original inflected query when search_method='lemma_index'; empty on a direct match.", + "title": "Resolved From", + "type": "string" + }, + "resolved_lemma": { + "default": "", + "description": "The dictionary lemma actually searched when search_method='lemma_index'; empty on a direct match.", + "title": "Resolved Lemma", + "type": "string" + }, + "search_method": { + "default": "direct", + "description": "How the match was found: 'direct' = the query itself matched; 'lemma_index' = the query was an inflected Livonian form, resolved to its dictionary lemma via the cached paradigm index and re-searched.", + "enum": [ + "direct", + "lemma_index" + ], + "title": "Search Method", + "type": "string" + }, + "source": { + "default": "Ernštreits, Valts (ed. in chief), Viitso, Tiit-Rein, Vāvere, Signis, Damberg, Pētõr, Kurpniece, Milda, Balodis, Uldis, Tuisk, Tuuli, Kūla, Gita, Tomingas, Marili, Soosaar Sven-Erik, Sedláčková, Anna & Jurgenovskis, Toms. 2024. Livonian lexicographic database. Riga: University of Latvia Livonian Institute. https://livonian.tech/ (CC BY-SA 4.0)", + "title": "Source", + "type": "string" + } + }, + "required": [ + "query", + "language", + "found" + ], + "title": "SearchResult", + "type": "object" +}
1 tool update
- Changed
search_livonian2 fields changed- changed
Input schema / properties / max_forms / descriptionPrevious value: -"Optional override for how many inflection tables to expand this call (0–12). Raise it to pull more tables in ONE call on a broad query, or set a small value to keep a broad query cheap. Omit to use the server's default cap."New value: +"Optional override for how many inflection tables to expand this call (0–12). Raise it to pull more tables in ONE call on a broad query, or set a small value to keep a broad query cheap. On an uncached query each table is fetched sequentially with polite pacing toward the upstream, so a high value on a cold broad query is slow — the bound limits upstream fan-out, not just response size. Omit to use the server's default cap." - changed
Input schema / properties / query / descriptionPrevious value: -"A SINGLE content word, not a phrase. Exactly one word per call — even with several candidates or synonyms in mind, search them one at a time ('see', then 'look'), never combined into one query like 'see look'. Drop function words and infinitive markers — search 'to water' as 'water', 'the sea' as 'sea'. The dictionary matches one attested headword, so a multi-word query often returns nothing even when the word exists; search the main word first, then refine. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional."New value: +"A SINGLE content word, not a phrase. Exactly one word per call — even with several candidates or synonyms in mind, search them one at a time ('see', then 'look'), never combined into one query like 'see look'. Drop function words and infinitive markers — search 'to water' as 'water', 'the sea' as 'sea'. The dictionary matches one attested headword, so a multi-word query often returns nothing even when the word exists; search the main word first, then refine. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional. An inflected Livonian form (search_language='liv') is resolved to its dictionary lemma automatically when the form is known — the result says so when that happened."
3 tool updates
- Changed
get_inflections2 fields changed- changed
Input schema / properties / word_class / descriptionPrevious value: -"The word-class code from a search result's inflection handle (e.g. 's' = noun, 'vi' = intransitive verb, 'vt' = transitive verb)."New value: +"The word-class code from a search result's inflection handle (e.g. 's' = noun, 'adj' = adjective, 'vi' = intransitive verb, 'vt' = transitive verb)." - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_inflectionsOutput", - "type": "object" -}New value: +null
- Changed
romanize_livonian1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "romanize_livonianOutput", - "type": "object" -}New value: +null
- Changed
search_livonian5 fields changed- changed
Input schema / properties / include_forms / descriptionPrevious value: -"When true (default), each match's full inflection table is returned INLINE — so you get usable cases/tenses in ONE call, no follow-up get_inflections needed. Bounded by a per-search cap; set false to get just the handles (faster for very broad queries)."New value: +"When true (default), each match's full inflection table is returned INLINE — usable cases/tenses in ONE call, no follow-up get_inflections. Set false to get just the headword handles + glosses: a cheap way to SCREEN several candidate words or synonyms (which exist? which sense?) before spending forms on the one you pick. Bounded by a per-search cap — use max_forms to raise or lower it for this call." - changed
Input schema / properties / max_forms / anyOfPrevious value: -[ - { - "maximum": 50, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 12, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / max_forms / descriptionPrevious value: -"Optional cap on how many inflection tables to expand this call. Use a small value for broad queries (e.g. 'sea' matches many words); omit to use the server default."New value: +"Optional override for how many inflection tables to expand this call (0–12). Raise it to pull more tables in ONE call on a broad query, or set a small value to keep a broad query cheap. Omit to use the server's default cap." - changed
Input schema / properties / query / descriptionPrevious value: -"The word or phrase to look up. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional."New value: +"A SINGLE content word, not a phrase. Exactly one word per call — even with several candidates or synonyms in mind, search them one at a time ('see', then 'look'), never combined into one query like 'see look'. Drop function words and infinitive markers — search 'to water' as 'water', 'the sea' as 'sea'. The dictionary matches one attested headword, so a multi-word query often returns nothing even when the word exists; search the main word first, then refine. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional." - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "search_livonianOutput", - "type": "object" -}New value: +null
3 tool updates
- Changed
get_inflections5 fields changed- removed
Input schema / $defsRemoved value: -{ - "InflectionInput": { - "additionalProperties": false, - "properties": { - "vards_id": { - "description": "The word id from a search result's inflection handle. Accepts a number or a digit-string (e.g. 17746 or \"17746\").", - "pattern": "^\\d+$", - "title": "Vards Id", - "type": "string" - }, - "word_class": { - "description": "The word-class code from a search result's inflection handle (e.g. 's' = noun, 'vi' = intransitive verb, 'vt' = transitive verb).", - "maxLength": 8, - "minLength": 1, - "pattern": "^[a-z]+$", - "title": "Word Class", - "type": "string" - } - }, - "required": [ - "vards_id", - "word_class" - ], - "title": "InflectionInput", - "type": "object" - } -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/InflectionInput" -} - added
Input schema / properties / vards_idAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "description": "The word id from a search result's inflection handle. Accepts a number or a digit-string (e.g. 17746 or \"17746\").", + "title": "Vards Id" +} - added
Input schema / properties / word_classAdded value: +{ + "description": "The word-class code from a search result's inflection handle (e.g. 's' = noun, 'vi' = intransitive verb, 'vt' = transitive verb).", + "maxLength": 8, + "minLength": 1, + "pattern": "^[a-z]+$", + "title": "Word Class", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "vards_id", + "word_class" +]
- Changed
romanize_livonian4 fields changed- removed
Input schema / $defsRemoved value: -{ - "RomanizeInput": { - "additionalProperties": false, - "properties": { - "text": { - "description": "Livonian text to reduce to clean, pronounceable ASCII. Strips macrons, diacritics and capitals (ā→aa, š→sh, õ→u), softens a palatalized consonant (ņ ļ ŗ ţ ḑ) only before a vowel (ņ+a→nya, else ikšiggiņ→ikshiggin), and hyphenates the broken tone (si'zzõl→siz-zul) and long-vowel diphthong glides (kīen→kee-en). Pass a word, phrase, or several lines.", - "maxLength": 4000, - "minLength": 1, - "title": "Text", - "type": "string" - } - }, - "required": [ - "text" - ], - "title": "RomanizeInput", - "type": "object" - } -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/RomanizeInput" -} - added
Input schema / properties / textAdded value: +{ + "description": "Livonian text to reduce to clean, pronounceable ASCII. Strips macrons, diacritics and capitals (ā→aa, š→sh, õ→u), softens a palatalized consonant (ņ ļ ŗ ţ ḑ) only before a vowel (ņ+a→nya, else ikšiggiņ→ikshiggin), and hyphenates the broken tone (si'zzõl→siz-zul) and long-vowel diphthong glides (kīen→kee-en). Pass a word, phrase, or several lines.", + "maxLength": 4000, + "minLength": 1, + "title": "Text", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "text" +]
- Changed
search_livonian7 fields changed- removed
Input schema / $defs / SearchInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "include_forms": { - "default": true, - "description": "When true (default), each match's full inflection table is returned INLINE — so you get usable cases/tenses in ONE call, no follow-up get_inflections needed. Bounded by a per-search cap; set false to get just the handles (faster for very broad queries).", - "title": "Include Forms", - "type": "boolean" - }, - "max_forms": { - "anyOf": [ - { - "maximum": 50, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional cap on how many inflection tables to expand this call. Use a small value for broad queries (e.g. 'sea' matches many words); omit to use the server default.", - "title": "Max Forms" - }, - "query": { - "description": "The word or phrase to look up. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional.", - "maxLength": 120, - "minLength": 1, - "title": "Query", - "type": "string" - }, - "search_language": { - "$ref": "#/$defs/SearchLanguage", - "default": "eng", - "description": "Language your query word is in — selects which language the search matches against: 'eng' (default), 'liv', 'lat', or 'est'. For English→Livonian translation, keep 'eng'. Glosses are in English." - } - }, - "required": [ - "query" - ], - "title": "SearchInput", - "type": "object" -} - added
Input schema / properties / include_formsAdded value: +{ + "default": true, + "description": "When true (default), each match's full inflection table is returned INLINE — so you get usable cases/tenses in ONE call, no follow-up get_inflections needed. Bounded by a per-search cap; set false to get just the handles (faster for very broad queries).", + "title": "Include Forms", + "type": "boolean" +} - added
Input schema / properties / max_formsAdded value: +{ + "anyOf": [ + { + "maximum": 50, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional cap on how many inflection tables to expand this call. Use a small value for broad queries (e.g. 'sea' matches many words); omit to use the server default.", + "title": "Max Forms" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/SearchInput" -} - added
Input schema / properties / queryAdded value: +{ + "description": "The word or phrase to look up. May be Livonian, Latvian, Estonian, or English (e.g. 'jarā', 'away', 'sea'). Matching is bidirectional.", + "maxLength": 120, + "minLength": 1, + "title": "Query", + "type": "string" +} - added
Input schema / properties / search_languageAdded value: +{ + "$ref": "#/$defs/SearchLanguage", + "default": "eng", + "description": "Language your query word is in — selects which language the search matches against: 'eng' (default), 'liv', 'lat', or 'est'. For English→Livonian translation, keep 'eng'. Glosses are in English." +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "query" +]
3 tool updates
- First observed
get_inflections - First observed
romanize_livonian - First observed
search_livonian
Related MCP Connectors
Grounds LLMs in real Latgalian: Wiktionary lemmas, inflections, romanization.
Grounds LLMs in real Latin: Wiktionary lemmas, Morpheus inflections, citations.
Grounds LLMs in real Old Norse: lemmas, mediopassive paradigms, English→Old Norse lookup.
Grounds LLMs in real Church Slavonic: Wiktionary lemmas, dual-number paradigms, transliteration.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to search and retrieve Latin word definitions and lemmas from the Logeion dictionary database, with support for automatic lemmatization via spaCy.3MIT
- AlicenseAqualityAmaintenanceEnables AI agents to look up words in monolingual dictionaries for English, German, Russian, French, and Azerbaijani, retrieving structured definitions, IPA phonetics, audio URLs, and verb forms. Includes schema guidance so the results can be turned into ready-to-add Anki flashcards.2GPL 2.0
- AlicenseAqualityDmaintenanceProvides access to the Database of Icelandic Morphology (BÍN) to look up word inflections, variants, and lemmas. It enables LLMs to answer grammatical questions and retrieve specific Icelandic word forms using standard grammatical tags.34MIT
- AlicenseAqualityDmaintenanceProvides Ukrainian language grammar checking, surzhyk detection, authentic phrasing, and English-to-Ukrainian rendering through curated linguistic data.578 PyPIMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.