Skip to main content
Glama

ruTS-mcp дает LLM-агенту инструменты библиотеки ruTS, чтобы измерить русский текст, а не оценивать его на глаз. Каждое значение приходит вместе с описанием, прочтением по шкале, если она есть, и предупреждениями, когда значение неустойчиво или не имеет смысла для текста.

  • analyze_text - статистики текста по группам: базовые, удобочитаемость с классом и возрастом читателя, лексическое разнообразие, морфология, фоностатистики, связность, стиль и канцелярит, лексическая сложность, стих, синтаксис

  • kwic - вхождения слова или словосочетания с контекстом

  • collocations - устойчивые сочетания и сочетаемость слова

  • dispersion - насколько равномерно слова распределены по тексту

  • keyness - ключевые слова относительно русского языка или другого текста

  • compare_texts - чем различаются два корпуса текстов по признакам стиля

  • Ресурсы и промпты - шкалы удобочитаемости и нормы стиля, готовые разборы: удобочитаемость, канцелярит, стихотворение, SEO-проверка, сравнение двух текстов

Установка

Сервер запускается через uvx из uv, который сам скачает пакет и Python. Подключение к Claude Code:

claude mcp add ruts -- uvx ruts-mcp

Для групп lexical, verse и syntax нужны словари и модель spaCy, их скачивает одна команда:

uvx ruts-mcp download

Подключение к Claude Desktop, Cursor и другим клиентам и настройки - в документации.

Related MCP server: humanizer-ru

Лицензия

MIT. Словари, которые скачивает ruts-mcp download, распространяются на условиях их авторов: частотный словарь Ляшевской и Шарова, словарь ударений Козиева (CC0), модель spaCy (MIT).

Available Tools

6 tools
analyze_textАнализ русского текстаA
Read-onlyIdempotent

Измерить русский текст статистиками библиотеки ruTS.

Используйте, чтобы получить точные числа о тексте, а не оценивать его на глаз. Считаются только запрошенные группы. Текст из файла передавайте через path, а не пересылайте целиком: так быстрее, и статистики считаются по исходному тексту.

Группы статистик:

  • basic: предложения, слова, слоги, символы, буквы, пробелы и знаки препинания; уникальные, длинные (от 6 букв), сложные (от 4 слогов), простые, односложные и многосложные слова с долей от всех слов; энтропия длин слов в буквах и слогах.

  • readability: удобочитаемость - сводный класс и формулы Флеша-Кинкайда, Флеша, Колман-Лиау, SMOG, ARI, LIX, RIX, Соловьёва-Иванова-Солнышкиной, Мацковского, Тулдавы, Дейла-Чейла и Ганнинга, время чтения; формулы класса и сводный класс читаются классом школы и возрастом читателя, индекс Флеша, LIX и RIX - полосой своей шкалы, у формул Мацковского и Тулдавы и времени чтения шкалы нет.

  • diversity: лексическое разнообразие - TTR и поправки к нему, MATTR, MSTTR, MTLD, HD-D, индексы Симпсона, Юла и Оноре, мера Орлова, энтропия, законы Ципфа и Хипса, взрывность частых слов.

  • morph: морфология по pymorphy3 без снятия омонимии - части речи и 15 грамматических признаков (число и доля слов с каждым значением) и доли форм глагола: наклонения, инфинитив, причастия, деепричастия, совершенный вид, страдательные и возвратные формы.

  • phon: фоностатистики по буквам, без ударения, оглушения и редукции - доли гласных, сонорных, звонких и глухих согласных, тяжелые сочетания согласных, зияния, жесткость, открытые слоги, индексы аллитерации и ассонанса.

  • cohesion: связность по образцу Coh-Metrix и TAACO - повторы существительных, аргументов и знаменательных слов между предложениями (соседними, всеми парами, двумя следующими) и между соседними абзацами (абзац - строка текста), местоимения, данность, повтор времени и вида, коннекторы на 1000 слов - межпредложенческие и внутрипредложенческие, по классам.

  • lexical: лексическая сложность по частотам языка - доля слов, найденных в частотном словаре Ляшевской и Шарова, средняя частотность (ipm) и ее логарифм, диапазон и дисперсия по корпусу, сюрпризал и перплексия, доли слов из 1000-10000 самых частых лемм, лексическая плотность. Метрикам по словарю нужен скачанный словарь.

  • verse: стих - строки и строфы, метр и число стоп, отклонения от метра и пропуски ударений, доля рифмованных строк и схемы рифмовки, мужские, женские и дактилические окончания. Нужен скачанный словарь ударений; знак ударения в тексте (замо́к) важнее словаря.

  • syntax: синтаксис по дереву зависимостей модели spaCy - длина зависимостей, глубина и ветвистость дерева, слова до вершины предложения, валентность глаголов, клаузы, придаточные и инфинитивные клаузы, индексы сложности L2SCA (T-единицы, глагольные, сочиненные и сложные именные группы), сочинительные цепочки, модификаторы существительного, предложные цепочки и цепочки родительных падежей, причастные и деепричастные обороты, пассив, инфинитивы, отрицания, расщепленные сказуемые («оказать помощь»), порядок подлежащих и дополнений, схожесть соседних предложений, отношение существительных к глаголам. Нужна скачанная модель spaCy; на длинном тексте разбор занимает секунды.

  • style: SEO-метрики по словоформам - классическая и академическая тошнота, водность, заспамленность и естественность по Ципфу с прочтением по нормам Advego, Text.ru, pr-cy и megaindex (нормы рассчитаны на тексты сайтов в несколько сотен слов, к художественной прозе неприменимы), самые частые словоформы и самые частые значимые слова, по которым считается академическая тошнота, лексические маркеры канцелярита с найденными словами и фразами: отглагольные существительные, производные предлоги, вводные слова, штампы. Синтаксические маркеры канцелярита - расщепленные сказуемые, цепочки родительных падежей, пассив, отношение существительных к глаголам - в группе syntax: для проверки на канцелярит берите style и syntax.

В результате по ключу на каждую запрошенную группу: статистика с ее значением "value", долей "share" или прочтением по шкале "interpretation", если они есть, и описанием "description" - что она считает; у маркеров канцелярита группы style еще число вхождений "count" и найденные слова и фразы "found". Значение null - статистика на этом тексте не определена. Ключ "warnings" - причины, по которым значения могут быть неустойчивы или не иметь смысла для этого текста: короткий текст, текст не на русском языке, не скачанные словари или модель (тогда предупреждение называет команду, которая их скачивает). Прочитайте предупреждения, прежде чем делать выводы.

NameRequiredDescriptionDefault
pathNoАбсолютный путь к текстовому файлу в UTF-8 на машине, где запущен сервер, вместо text: длинный текст не нужно пересылать в аргументе
textNoТекст на русском языке; вместо него можно задать path
groupsNoГруппы статистик; каждая - ключ результата
descriptionsNoДобавить к статистикам описания; false - короче ответ, когда описания уже известны по прошлому вызову
distributionsNoДобавить распределения слов по числу букв и слогов и знаков препинания по типам (группа basic)
readability_presetNoКоэффициенты теста Флеша-Кинкайда (у academic - и индекса Флеша), группа readability: plainrussian откалиброван по школьным классам и подходит для любых текстов, в том числе художественных; fiction - коэффициенты Оборневой по художественным текстам, дает класс на несколько лет выше; academic - Соловьёва, Иванова и Солнышкиной по учебникам 5-11 классов. Без особой причины оставляйте plainrussianplainrussian

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description need not repeat safety. It adds substantial behavioral context: warnings about short texts, non-Russian text, missing dictionaries/models, null values for undefined statistics, and a performance note that syntax parsing takes seconds on long text. It also explains the output schema structure (value, share, interpretation, description, count, found).

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

Conciseness3/5

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

The description is long and dense, with a very detailed enumeration of what each statistic group computes. While structured, the group descriptions could be trimmed, and some sentences repeat schema-provided parameter guidance. It is front-loaded with purpose and usage, but the sheer length risks diluting key instructions.

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 (10 statistical groups, many metrics, dictionary/model dependencies) and the rich schema/output schema, the description is complete enough for an agent to invoke it correctly. It covers all relevant caveats, warnings, and output structure, and nothing critical is missing.

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?

Schema coverage is 100%, but the description adds deep meaning beyond the schema's brief parameter notes. It explains each of the 10 group enum values in detail, clarifies that path avoids resending long texts and ensures statistics are computed on the original text, and provides a rationale for readability_preset choices (e.g., fiction gives a class several years higher, academic uses Solovyov et al. for grades 5-11).

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

Purpose4/5

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

The description opens with a clear verb-resource statement: 'Измерить русский текст статистиками библиотеки ruTS.' It defines the tool's scope as measuring Russian text with ruTS statistics. However, it does not explicitly differentiate from sibling tools like compare_texts or collocations, so an agent must infer the distinction.

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

Usage Guidelines4/5

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

It explicitly states when to use the tool ('чтобы получить точные числа о тексте, а не оценивать его на глаз') and gives concrete guidance on parameter choice, such as forwarding long text via path instead of text and recommending 'plainrussian' for readability_preset without a special reason. It also advises using style and syntax groups together for канцелярит checks. What's missing is any mention of sibling alternatives or when not to use this tool.

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

collocationsКоллокацииA
Read-onlyIdempotent

Найти коллокации текста - пары слов, которые встречаются вместе чаще, чем случайно.

Используйте для устойчивых сочетаний, терминологии и сочетаемости слова (параметр node). Пара упорядочена: правое слово стоит не дальше window слов после левого. Леммы pymorphy3 берутся без снятия омонимии.

В результате "n_words" - число слов текста, "measure" - мера и как ее читать, "collocations" - пары по убыванию меры: левое слово "left", правое "right", их частоты "freq_left" и "freq_right", частота пары "freq_pair" и значение меры "score". freq_pair - число пар позиций, где правое слово стоит в окне после левого: слово, повторенное в окне, дает несколько пар, поэтому freq_pair бывает больше частоты слова, и такая пара - повтор, а не устойчивое сочетание. Ключ "warnings" - предупреждения: текст не на русском языке, слова node нет в тексте, пар с такой частотой нет.

NameRequiredDescriptionDefault
nodeNoСлово, сочетаемость которого нужна; не задано - все пары
pathNoАбсолютный путь к текстовому файлу в UTF-8 на машине, где запущен сервер, вместо text: длинный текст не нужно пересылать в аргументе
textNoТекст на русском языке; вместо него можно задать path
top_nNoЧисло коллокаций в ответе
windowNoНаибольшее расстояние между словами пары; 1 - биграммы
measureNoМера ассоциации: logdice - устойчивость пары, не зависит от размера текста; mi завышает редкие пары; mi3 и t_score отдают предпочтение частымlogdice
min_freqNoНаименьшее значение freq_pair - числа пар позиций в окне
lemmatizeNoСравнивать леммы: «точка зрения» и «точки зрения» - одна пара

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare readOnly, openWorld=false, and idempotent; the description adds substantial behavioral context: ordered left/right pairs within the window, pymorphy3 lemmatization without homonym disambiguation, interpretation of freq_pair as repeated pairs rather than stable collocations, and warning conditions. There is no contradiction with 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 purpose is front-loaded, and the description is organized into clear paragraphs covering usage, pair ordering, output interpretation, and warnings. The detailed output-field explanation is partly redundant because an output schema exists, making it slightly longer than necessary, though most content earns its place.

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 an 8-parameter analytical tool with annotations and an output schema, the description supplies enough context to call and interpret it correctly: purpose, use cases, pair ordering, frequency interpretation, and warning behavior. No critical gap remains for an agent deciding how to use this 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?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by clarifying directional window ordering and the lemmatization caveat. It adds little for parameters like top_n or min_freq beyond what the schema already says, so it is not a 5.

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

Purpose4/5

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

States a specific verb and resource: 'Найти коллокации текста' and defines collocations as word pairs occurring together more often than chance. It does not distinguish this tool from siblings such as kwic or dispersion, so it is clear but lacks explicit sibling differentiation.

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?

Gives intended use cases ('устойчивых сочетаний, терминологии и сочетаемости слова') and points to the node parameter. However, it provides no when-not guidance and does not name alternatives among the sibling tools, leaving usage selection implied rather than explicit.

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

compare_textsСравнение корпусовA
Read-onlyIdempotent

Сравнить два корпуса текстов по признакам стиля и найти, чем они различаются сильнее всего.

Используйте для атрибуции авторства, сравнения жанров, переводов, текстов человека и модели. Тексты режутся подряд на окна ровно по window слов (whole_texts - тексты целиком), у каждого окна считаются около 150 признаков ruTS, и распределения признака в корпусах A и B сравниваются. Остаток текста короче окна и текст короче окна отбрасываются: ответ предупреждает о таких текстах и о потере больше 10 % слов корпуса на остатках. Для сравнения нужно хотя бы по два окна в каждом корпусе. Тексты из файлов передавайте через a_paths и b_paths.

Признаки по префиксам: basic_ - доли длинных, сложных, одно- и многосложных слов, букв, пробелов и знаков, буквы и слоги на слово; readability_ - формулы удобочитаемости; diversity_ - меры лексического разнообразия; morph_ - доли частей речи, отрицаний и кратких форм от слов (morph_pos_NOUN, morph_polarity_Neg, morph_style_variant_Short) и значений остальных признаков внутри признака (morph_case_Gen, morph_tense_Past); sents_ - средняя длина предложения в словах, ее стандартное отклонение, коэффициент вариации и автокорреляция соседних длин; punct_ - знаки по типам на 1000 слов и доля буквы ё; cohesion_ - статистики связности: повторы между предложениями, местоимения, данность, повтор времени и вида, коннекторы на 1000 слов.

В результате "window" - размер окна (null - тексты целиком), "n_windows" и "n_texts" - число окон и текстов в A и B, "features" - признаки по убыванию модуля дельты Клиффа, при равной дельте - по относительной разности медиан: средние по окнам "mean_a" и "mean_b", разность медиан A - B "median_diff" с 95% бутстрэп-интервалом "ci_low" - "ci_high", дельта Клиффа "cliff_delta" (от -1 до 1: доля пар окон, где в A больше, минус доля, где меньше; по модулю от 0,147 - малый, от 0,33 - средний, от 0,474 - большой эффект, Romano и др. 2006) и p-значение U-критерия Манна-Уитни с поправкой Холма на число признаков "p_holm". Окна одного текста не независимы: p_holm считает их независимыми и занижено, если текстов в корпусе мало, а бутстрэп-интервал берет целые тексты и при одном тексте в корпусе не определен. Ключ "warnings" - предупреждения: корпус не на русском языке, тексты корпусов разной длины при whole_texts, тексты или их остатки не вошли в сравнение, в корпусе один текст, ни одно различие не значимо.

NameRequiredDescriptionDefault
aNoТексты первого корпуса (A)
bNoТексты второго корпуса (B)
top_nNoЧисло признаков с наибольшим различием
windowNoРазмер окна в словах; не задано - не больше 1000 и такой, чтобы самый короткий текст делился хотя бы на два окна, но не меньше 100
a_pathsNoАбсолютные пути к файлам с текстами корпуса A, вместе с a или вместо
b_pathsNoАбсолютные пути к файлам с текстами корпуса B, вместе с b или вместо
whole_textsNoСравнивать тексты целиком, без окон; нужно хотя бы по два текста

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses the windowing mechanism, the ~150 ruTS features, corpus truncation behavior, warnings for dropped remainders and >10% word loss, and minimum two-window requirements. It also explains output semantics including Cliff's delta thresholds, Holm correction, bootstrap caveats about non-independent windows, and warnings. This is exceptionally rich behavioral context for a complex analysis tool.

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

Conciseness4/5

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

The description is long but well-structured: purpose and usage are front-loaded, followed by mechanics, feature prefixes, and result semantics. The density is justified by the statistical complexity, though several sentences are verbose and could be tightened without losing 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 complex corpus-comparison tool with 7 parameters and an output schema, the description covers usage, input requirements, windowing behavior, feature families, result fields, statistical caveats, and warnings. An agent has enough context to call it correctly and interpret the response.

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, but the description adds meaningful semantics beyond the schema: it explains how window defaults are chosen when unset, that whole_texts means texts are compared in full, and that a_paths/b_paths are for file-based corpora. top_n is only implicitly covered through the result-ordering explanation, so it is not a full 5.

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 first sentence states a specific verb and resource: compare two text corpora by style features and identify the strongest differences. The use-case list (authorship attribution, genre/translation/human-vs-model comparison) further clarifies intent. It does not explicitly distinguish itself from the sibling keyness tool, which also compares corpora, so it stops short of a 5.

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

Usage Guidelines4/5

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

The description gives concrete usage contexts: authorship attribution, genre comparison, translation comparison, and human-vs-model text comparison. It also states input requirements such as at least two windows per corpus and passing file texts via a_paths/b_paths. It lacks explicit when-not-to-use guidance or named alternatives, so it is clear but not exhaustive.

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

dispersionДисперсия словA
Read-onlyIdempotent

Измерить, насколько равномерно слова распределены по тексту (дисперсия Гриса).

Используйте, чтобы отличить слово, которое проходит через весь текст, от слова, сосредоточенного в одном месте: частота их не различает. Текст делится на parts частей примерно равного размера.

В результате "n_words" - число слов текста, "words" - слова в порядке запроса или по убыванию частоты, с частотой "freq" и мерами дисперсии:

  • dp: отклонение пропорций DP Гриса, основная мера; 0 - слово распределено пропорционально размерам частей, наибольшее значение около 1 - 1/parts - все вхождения в одной части.

  • dp_norm: DP, деленное на наибольшее возможное значение; 1 - все вхождения в самой малой части.

  • juilland_d: D Жюйана; 1 - равномерно, 0 - в одной части.

  • carroll_d2: D2 Кэрролла по энтропии распределения; 1 - равномерно, 0 - в одной части.

  • rosengren_s: S Розенгрена; 1 - пропорционально, около 1/parts - в одной части.

  • kl_divergence: дивергенция Кульбака-Лейблера в битах; 0 - пропорционально, растет при сосредоточении. У слова, которого нет в тексте, частота 0 и меры null. Слово с частотой меньше parts не может попасть во все части, и его меры показывают сосредоточенность даже при самом ровном распределении. Ключ "warnings" - предупреждения: текст не на русском языке, слов нет в тексте, частота слов меньше числа частей.

NameRequiredDescriptionDefault
pathNoАбсолютный путь к текстовому файлу в UTF-8 на машине, где запущен сервер, вместо text: длинный текст не нужно пересылать в аргументе
textNoТекст на русском языке; вместо него можно задать path
partsNoЧисло частей текста примерно равного размера
top_nNoЧисло самых частых слов, если words не задано
wordsNoСлова, дисперсия которых нужна; не задано - самые частые слова
lemmatizeNoСравнивать леммы: формы слова считаются одним словом

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare this as a read-only, idempotent, closed-world operation, and the description adds substantial behavioral detail beyond that. It explains the text partitioning into parts, the meaning and direction of each dispersion measure, null handling for missing words, the frequency-below-parts caveat, and the warnings key.

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 purpose and usage, then structured into a compact bullet list explaining the output measures. Despite its length, every section earns its place given the number of non-obvious statistical measures and edge cases.

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 specialized statistical tool with multiple output metrics, the description is complete: it covers purpose, use case, partitioning, measure interpretation, missing-word behavior, the low-frequency caveat, and warnings. Even though an output schema exists, the description provides the interpretive context an agent needs to use the results correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds useful semantics beyond the schema by explaining that the text is divided into parts of roughly equal size, that words appear in request order or frequency order, and that frequency relative to parts affects interpretation of the measures.

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 states a specific verb and resource: measuring how evenly words are distributed across a text using Gries dispersion. It also distinguishes the measure from raw frequency, which does not reveal whether a word is spread throughout the text or concentrated in one place. It does not explicitly name or differentiate itself from sibling tools such as analyze_text, keyness, or collocations.

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

Usage Guidelines4/5

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

It gives a clear use case: use it to distinguish a word that runs through the whole text from one concentrated in a single place, which frequency alone cannot do. However, it does not explicitly state when not to use it or name alternative tools for related analyses.

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

keynessКлючевые словаA
Read-onlyIdempotent

Найти ключевые слова текста - слова, которые в нем значимо чаще (или реже), чем в эталоне.

Используйте, чтобы понять, чем лексика текста отличается от обычного языка (эталон по умолчанию - частотный словарь, его нужно скачать командой ruts-mcp download) или от другого текста (reference или reference_path). Слова сравниваются в нижнем регистре и с е вместо ё. Со словарем числа и слова с латиницей отбрасываются, а слово вне словаря получает его наименьшую частоту (freq_reference около 37): имена, термины и опечатки попадают в ключевые слова. Статьи словаря, которые лемматизатор не дает (его, ее, их, во, со), в слова, которые чаще в эталоне, не попадают: в тексте эти формы относятся к другим леммам (он, она, они, в, с).

В результате "n_words" - число слов текста, которые сравниваются с эталоном, "reference" - эталон, "measure" - мера сортировки и как ее читать, "keywords" - слова по убыванию меры: частота в тексте "freq_target" и в эталоне "freq_reference", они же на миллион слов "ipm_target" и "ipm_reference", логарифм правдоподобия "g2" (значимость, со знаком минус - слово чаще в эталоне) с p-значением "p_value", Log Ratio "log_ratio" (размер эффекта; при нулевой частоте в эталоне - оценка с поправкой 0,5, бывает меньше 0) и значение меры "score". p_value не поправлено на число проверенных слов: надежнее p < 0,0001 (g2 от 15,13). Ключ "warnings" - предупреждения: текст не на русском языке, ключевых слов нет.

NameRequiredDescriptionDefault
pathNoАбсолютный путь к текстовому файлу в UTF-8 на машине, где запущен сервер, вместо text: длинный текст не нужно пересылать в аргументе
textNoТекст на русском языке; вместо него можно задать path
top_nNoЧисло ключевых слов в ответе
measureNoМера для сортировки: log_likelihood - значимость различия, log_ratio - во сколько раз слово чащеlog_likelihood
min_freqNoНаименьшая частота слова там, где оно чаще
positiveNoСлова, которые чаще в тексте; false - которые чаще в эталоне
lemmatizeNoСравнивать леммы; с частотным словарем леммы сравниваются всегда
referenceNoТекст-эталон; не задано (и не задан reference_path) - частотный словарь Ляшевской и Шарова (современный русский язык, 92 млн словоупотреблений)
reference_pathNoАбсолютный путь к файлу с текстом-эталоном вместо reference

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: discloses normalization (lowercase, е instead of ё), that numbers and Latin-script tokens are dropped with a dictionary reference, that out-of-vocabulary words receive the dictionary's minimum frequency (~37) so names and typos surface as keywords, and the stemming edge cases for function words. It also documents the warnings key and the caveat that p_value is uncorrected, with a practical p < 0.0001 (g2 ≥ 15.13) threshold.

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

Conciseness4/5

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

Front-loaded with purpose and usage in the first two paragraphs, then results interpretation; every block has a function. It is dense and long, and the digression about dictionary entries the lemmatizer misses (его, ее, их, во, со) is niche detail that could be trimmed, plus the results paragraph partly restates the output 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 9-parameter tool with an output schema, the description covers the setup prerequisite (dictionary download), normalization behavior, degenerate outcomes via warnings, and how to read the significance and effect-size fields. An agent has everything needed to call it and interpret the result 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 description coverage is 100%, so the schema already carries parameter documentation; baseline is 3. The description does add interpretive value for measure ('мера сортировки и как ее читать'), the sign convention of g2/log_ratio, and the default reference dictionary, but it does not add per-parameter detail for top_n, min_freq, positive, or lemmatize beyond the schema.

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

Purpose5/5

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

States a specific verb and resource: find words in a text that are significantly over- or under-represented relative to a reference. It also defines scope precisely by naming the two comparison modes (default frequency dictionary vs. another text via reference/reference_path), which separates it from generic analysis siblings.

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

Usage Guidelines4/5

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

"Используйте, чтобы понять, чем лексика текста отличается от обычного языка … или от другого текста" gives an explicit use condition for both modes, and it flags the prerequisite of downloading the frequency dictionary via ruts-mcp download. It does not name a sibling (e.g. compare_texts) or state when to prefer that tool instead, so the boundary with siblings is left to inference.

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

kwicКонкордансA
Read-onlyIdempotent

Найти все вхождения слова или словосочетания в тексте с контекстом (конкорданс KWIC).

Используйте, чтобы увидеть, как слово употребляется в тексте, и цитировать точно. Слова сравниваются без учета регистра и буквы ё, с by_lemma - по леммам pymorphy3; словосочетание не переходит через конец предложения.

В результате "n_matches" - число вхождений, "matches" - строки по порядку в тексте: контекст слева "left", вхождение "keyword", как оно записано в тексте, и контекст справа "right". Строки ограничены параметром limit и общим объемом ответа около 40 тысяч символов. Ключ "warnings" - предупреждения: текст не на русском языке, показаны не все вхождения.

NameRequiredDescriptionDefault
pathNoАбсолютный путь к текстовому файлу в UTF-8 на машине, где запущен сервер, вместо text: длинный текст не нужно пересылать в аргументе
textNoТекст на русском языке; вместо него можно задать path
limitNoНаибольшее число строк ответа
windowNoЧисло слов контекста слева и справа
keywordYesСлово или словосочетание
by_lemmaNoИскать все формы слова по лемме: «кот» находит «кота», «коты»

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: case- and ё-insensitive matching, optional pymorphy3 lemma search, the rule that a phrase never crosses a sentence boundary, the row cap via limit plus an overall ~40k character response budget, and warnings for non-Russian input or truncated results. This is exactly the operational detail an agent needs before calling.

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

Conciseness4/5

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

Front-loads the purpose in the first sentence, then matching rules, then output shape – a logical order. Slightly long on the return-value paragraph, which partly restates what the output schema already declares, but every sentence carries usable content.

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?

Covers input source, matching rules, limits, truncation and warnings, so an agent can call it and interpret results without surprises. Because an output schema exists, the detailed enumeration of n_matches/matches/left/keyword/right is somewhat redundant, which keeps it just short of 5.

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

Parameters3/5

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

Schema coverage is 100%, so path, text, limit, window, keyword and by_lemma are all documented in the schema. The description adds matching semantics (case/ё folding, pymorphy3 lemma behavior) but does not clarify the meaning of path vs text or window beyond what the schema already says, so baseline 3 is right.

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

Purpose4/5

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

States a specific verb and resource: find all occurrences of a word/phrase in text with surrounding context (KWIC concordance). A reader immediately knows what the tool returns. It does not explicitly name the sibling tools (collocations, dispersion, keyness) it should be chosen over, keeping it at 4 rather than 5.

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

Usage Guidelines4/5

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

Gives a concrete use case – see how a word is used in a text and quote it accurately – which implies when to reach for this rather than aggregate siblings. There are no explicit exclusions or named alternatives, so the routing is clear but not fully prescriptive.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedanalyze_text
    • First observedcollocations
    • First observedcompare_texts
    • First observeddispersion
    • First observedkeyness
    • First observedkwic

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct analytical operation: collocations, general statistics, concordance, dispersion, keyness, and corpus comparison. The descriptions explicitly separate analyze_text from keyness and compare_texts, so an agent can select the right tool without overlap confusion.

Naming Consistency3/5

The names mix noun-only labels (collocations, dispersion, keyness), verb_noun patterns (analyze_text, compare_texts), and an acronym (kwic). They remain readable and domain-appropriate, but there is no predictable convention across the set.

Tool Count5/5

Six tools is well within the appropriate range and each tool earns its place by covering a distinct text-analytic operation. The broad analyze_text tool aggregates many statistic groups internally rather than inflating the external tool count.

Completeness4/5

The surface covers most major ruTS analyses, including general statistics, collocations, concordance, dispersion, keyness, and corpus comparison. A minor gap is the lack of a tool for downloading or managing the dictionaries/models that several tools require, though the descriptions point to an external setup command.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides text statistics and readability scores (Flesch Reading Ease, Flesch-Kincaid Grade Level) via offline, keyless tools.
    3 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Russian-text AI-trace detection and typography normalization over stdio MCP: finds chatbot copy-paste artifacts and invisible marks, counts soft AI-style signals; four tools, stdlib-only, no keys required.
    7
    134
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to score prose from 0-100 for formulaic AI writing tells using purely programmatic rule-based heuristics, with no LLM judge or API calls. Returns a numeric score, band label, specific violations with surrounding context, per-category counts, and concrete advice, and can also analyze a file path directly.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Scores prose from 0 to 100 for formulaic AI writing patterns using purely programmatic rules, with no LLM judge or API calls. Enables agents to lint text or files and receive a score, band label, specific violations with surrounding context, and concrete advice for each hit.
    -