wordsmith-mcp
Wordsmith MCP
Un servidor MCP (Model Context Protocol) que ofrece a cualquier cliente de IA compatible con MCP un conjunto de herramientas sin conexión de análisis y reescritura de texto — estadísticas, resúmenes extractivos, extracción de palabras clave, puntuación de legibilidad, conversión de casos de nomenclatura, extracción de entidades y diferencias de texto.
No requiere claves API. No hace llamadas de red. No almacena estado en ningún sitio. Todo se ejecuta localmente sobre el texto que le pases, lo que lo hace rápido, gratuito y seguro para apuntarlo a documentos privados.
Construido con el MCP Python SDK.
Por qué existe esto
Los modelos de lenguaje son excelentes para juzgar texto, pero sorprendentemente poco fiables para medirlo — pídeles un recuento exacto de palabras o una puntuación de Flesch y adivinarán. Wordsmith entrega al modelo una calculadora determinista para esas tareas, por lo que las respuestas sobre la longitud, la dificultad y los términos clave de un documento se calculan en lugar de estimarse.
Related MCP server: armavita-originality-ai-mcp
Herramientas
Tool | Qué hace | Parámetros clave |
| Caracteres, palabras, palabras únicas, oraciones, párrafos, líneas, longitud media de palabra/oración, tiempo de lectura estimado |
|
| Resumen extractivo — puntúa las oraciones por la frecuencia de palabras significativas y devuelve las mejores en orden original |
|
| Palabras significativas más frecuentes con recuentos y frecuencia relativa; palabras vacías filtradas |
|
| Índice de legibilidad de Flesch + nivel de grado Flesch–Kincaid, con interpretación en lenguaje sencillo |
|
| Convierte a |
|
| Extrae correos electrónicos, URLs, hashtags, menciones, números de teléfono y números independientes |
|
| Diferencia unificada línea por línea entre un borrador y una revisión |
|
Todas las herramientas están anotadas con readOnlyHint: true, openWorldHint: false — nunca mutan nada y nunca se conectan a internet.
Inicio rápido (local, stdio)
git clone https://github.com/mirza1272/wordsmith-mcp.git
cd wordsmith-mcp
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .Ejecútalo:
wordsmith-mcpEl servidor habla MCP a través de stdio y se quedará esperando a un cliente: es un comportamiento correcto, no un bloqueo. Los clientes lo inician por sí mismos; consulta abajo.
Verifica que funciona
python scripts/smoke_test.pyEsto inicia el servidor como lo haría un cliente MCP real, lista las herramientas, llama a cada una de ellas e imprime los resultados.
Ejecuta las pruebas unitarias
pip install -e ".[dev]"
pytest -qConectarlo a un cliente
Claude Desktop
Edita claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"wordsmith": {
"command": "/absolute/path/to/wordsmith-mcp/.venv/bin/wordsmith-mcp"
}
}
}Reinicia Claude Desktop y luego pregunta algo como "¿Cómo de legible es este párrafo y cuáles son sus 5 palabras clave principales?"
Claude Code
claude mcp add wordsmith -- /absolute/path/to/wordsmith-mcp/.venv/bin/wordsmith-mcpCursor / Windsurf / otros clientes
Cualquier cliente que acepte un bloque mcpServers usa la misma estructura que el ejemplo de Claude Desktop anterior.
MCP Inspector (depuración visual)
npx @modelcontextprotocol/inspector .venv/bin/wordsmith-mcpAbre una interfaz de navegador en la que se puede llamar a cada herramienta manualmente e inspeccionar el tráfico JSON-RPC en bruto.
Modo HTTP (para despliegues alojados)
El mismo servidor también habla streamable HTTP, que es lo que usan los marketplaces alojados:
TRANSPORT=http PORT=8081 wordsmith-mcpEl endpoint MCP está entonces en http://localhost:8081/mcp.
Variable de entorno | Por defecto | Significado |
|
|
|
|
| Dirección de escucha en modo HTTP |
|
| Puerto de escucha en modo HTTP |
|
| Ruta HTTP en la que se sirve el endpoint MCP |
Despliegue
El formulario de publicación de Smithery requiere un endpoint MCP HTTPS en vivo, así que el servidor se aloja primero y luego se lista. Para ello se incluyen Dockerfile y render.yaml; smithery.yaml se mantiene para los hosts que compilan el contenedor directamente.
Guía completa: DEPLOY.md.
En resumen: despliega el contenedor en un host (Render, Railway, Fly.io — se incluye render.yaml) y luego publica la URL resultante https://<host>/mcp en Smithery.
Compilar el contenedor localmente primero es una buena prueba de cordura:
docker build -t wordsmith-mcp .
docker run --rm -p 8081:8081 wordsmith-mcpEstructura del proyecto
wordsmith-mcp/
├── src/wordsmith_mcp/
│ ├── __init__.py # package exports
│ ├── __main__.py # python -m wordsmith_mcp
│ ├── server.py # MCP server: tool definitions and schemas
│ └── textutils.py # pure text logic, no MCP imports
├── scripts/smoke_test.py # end-to-end client that exercises every tool
├── tests/test_textutils.py
├── examples/claude_desktop_config.json
├── Dockerfile
├── smithery.yaml
├── pyproject.toml
└── README.mdtextutils.py contiene los algoritmos y no importa nada de MCP, por lo que la lógica se puede probar unitariamente por sí sola; server.py es una fina capa de protocolo que describe esas funciones al modelo.
Cómo funciona (un recorrido de 60 segundos por MCP)
MCP es un protocolo JSON-RPC que permite a un cliente de IA descubrir y llamar a las herramientas expuestas por un servidor.
El cliente inicia el servidor (como subproceso a través de stdio, o se conecta por HTTP).
El cliente y el servidor intercambian un handshake
initializeque anuncia la versión del protocolo y las capacidades.El cliente llama a
tools/list. El SDK genera el JSON Schema de cada herramienta a partir de las anotaciones de tipo de Python y las descripcionesField(...), de modo que el modelo ve exactamente qué argumentos son válidos.Cuando el modelo decide que necesita una herramienta, el cliente envía
tools/callcon los argumentos; el servidor ejecuta la función de Python y devuelve el resultado — tanto como texto legible por humanos comostructuredContentque coincide con el esquema de salida declarado.
Por lo tanto, añadir una herramienta es simplemente escribir una función de Python tipada y decorarla con @mcp.tool(...).
Lecturas adicionales en este repositorio
WRITEUP.md— mi artículo sobre el uso de un servidor MCP existente (Context7) y lo que aprendí al construir este.DEPLOY.md— guía paso a paso para publicar este servidor en Smithery y Glama.
Licencia
MIT — consulta LICENSE.
Available Tools
7 toolsconvert_caseConvert text caseARead-onlyIdempotent
Rewrite text into a naming convention: snake_case, kebab-case, slug, camelCase, PascalCase, CONSTANT_CASE, Title Case, Sentence case, UPPER or lower. Handles input that is already in any of these styles.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to convert. | |
| style | Yes | Target naming convention. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description carries a lighter burden. It adds one useful behavioral detail: the tool handles input already in any of these styles. However, it does not describe edge-case behavior like handling of non-alphanumeric characters or the exact slug format.
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?
The description is two sentences with the core action and supported styles front-loaded, and no filler. The long style list is necessary because it directly matches the required enum values.
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?
For a simple, read-only, idempotent converter with only two parameters and an output schema, the description covers the essential usage and input compatibility. The only noticeable gap is that 'slug' is not precisely defined, leaving a minor ambiguity about its exact normalization behavior.
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%: 'text' is described as the text to convert and 'style' is an enum listing all target conventions. The description largely restates what the schema already provides rather than adding deeper parameter semantics, so it stays at the baseline.
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 and object: 'Rewrite text into a naming convention', and enumerates every supported style. This makes the tool's purpose unmistakable and clearly distinguishes it from the sibling text-analysis tools.
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?
The purpose and supported transformations make it clear when this tool should be used: whenever text needs to be converted into one of the listed naming conventions. It does not explicitly name alternatives or exclusions, but the sibling tools serve unrelated functions, so the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_textsDiff two textsARead-onlyIdempotent
Return a unified diff between two versions of a text, line by line, so edits between a draft and a revision can be reviewed precisely. Returns a note when the two inputs are identical.
| Name | Required | Description | Default |
|---|---|---|---|
| after | Yes | The revised text. | |
| before | Yes | The original text. | |
| context_lines | No | Unchanged lines of context around each change. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral detail by specifying the output format ('unified diff'), the line-by-line granularity, and the special case of returning a note when inputs are identical. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it names the operation, the output format, and the special identical-input case in two sentences. Every sentence adds value, with no filler or redundancy.
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?
For a simple read-only diff tool with an output schema and comprehensive annotations, the description is complete. It covers the core behavior, the use case, and the edge case of identical inputs. Nothing essential is missing for an agent to decide when and how to invoke it.
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%, so the parameters (before, after, context_lines) are already fully documented in the schema. The description adds high-level intent but does not introduce new parameter-level detail beyond what the schema provides. 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?
The description states a specific action and resource: 'Return a unified diff between two versions of a text, line by line.' It also clarifies the intended use case (comparing draft and revision) and notes the identical-input behavior. This clearly distinguishes the tool from siblings like summarize_text or text_stats.
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?
The description provides clear context for when to use the tool: 'so edits between a draft and a revision can be reviewed precisely.' It does not explicitly name alternatives or exclusions, but the sibling tools are functionally distinct enough that the intended usage is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_entitiesExtract entitiesARead-onlyIdempotent
Pull structured items out of free text: email addresses, URLs, #hashtags, @mentions, phone numbers and standalone numbers. Results are de-duplicated and returned in the order they first appear.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| urls | Yes | |
| emails | Yes | |
| numbers | Yes | |
| hashtags | Yes | |
| mentions | Yes | |
| phone_numbers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description adds meaningful behavioral details: results are de-duplicated and returned in the order they first appear. This helps an agent understand output characteristics without needing to invoke the tool.
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?
Two concise sentences front-load the core purpose and follow with the key behavioral detail. Every word earns its place; there is no redundant or filler content.
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?
For a tool with a single simple parameter, full schema coverage, an output schema, and read-only/idempotent annotations, the description is complete. It states the input, the entity categories, deduplication, and ordering, leaving no critical gap.
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%, with the text parameter already described as 'The text to scan.' The description adds no parameter-specific meaning beyond what the schema provides, so the baseline score of 3 applies.
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 uses a specific verb ('Pull structured items out of free text') and enumerates the exact entity types (email addresses, URLs, #hashtags, @mentions, phone numbers, standalone numbers). This clearly distinguishes the tool from siblings like extract_keywords, since the output categories are explicit and structured.
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?
The description provides clear context for when to use the tool: whenever structured entities need to be pulled from free text. It does not explicitly name alternatives or exclusions, but the enumerated entity types make the applicable use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_keywordsExtract keywordsARead-onlyIdempotent
Return the most frequent meaningful words in the text, with counts and relative frequency. Common English stopwords and very short tokens are filtered out. Useful for tagging, SEO checks or spotting what a document is actually about.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to mine for keywords. | |
| limit | No | Maximum keywords to return. | |
| min_length | No | Ignore words shorter than this many characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses meaningful behavior: stopwords and very short tokens are filtered out, and the output includes counts and relative frequency. This adds useful behavioral context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses three efficient sentences, front-loading the core behavior first and following with purpose-driven use cases. Every sentence adds value and there is no redundant restatement of the tool name or title.
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?
For a simple, read-only extraction tool, the description is complete: it explains the output, filtering behavior, and practical applications. The presence of an output schema and full parameter coverage means no essential calling context 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 description coverage is 100%, so the schema fully documents all three parameters. The description adds context about 'meaningful words' and stopword filtering, but does not meaningfully deepen parameter-level semantics beyond what the schema already provides, so the baseline of 3 applies.
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 operation: 'Return the most frequent meaningful words in the text, with counts and relative frequency.' This clearly identifies the resource (text), the output (keywords with frequency), and naturally distinguishes it from siblings like extract_entities or summarize_text.
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?
The description gives concrete use cases: 'tagging, SEO checks or spotting what a document is actually about.' However, it does not explicitly mention when not to use this tool or name alternatives, though the use-case guidance is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readabilityScore readabilityARead-onlyIdempotent
Compute Flesch Reading Ease and Flesch-Kincaid grade level for the text, with a plain-language interpretation. Use it to check whether a draft matches its intended audience before publishing.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to score. |
Output Schema
| Name | Required | Description |
|---|---|---|
| words | Yes | |
| sentences | Yes | |
| syllables | Yes | |
| interpretation | Yes | Plain-language reading of the ease score. |
| flesch_reading_ease | Yes | 0-100, higher is easier to read. |
| flesch_kincaid_grade | Yes | Approximate US school grade required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint). The description adds behavioral context by noting that it produces both numeric scores and a plain-language interpretation, which informs the agent about the nature of the output beyond the structured annotations.
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?
Two sentences, no fluff, and the core computation is front-loaded before the usage guidance. Every phrase earns its 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?
For a simple one-parameter, read-only tool with a full output schema and rich annotations, the description fully equips an agent to invoke it correctly. It states what is computed, what kind of output is generated, and the intended use case.
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?
The input schema fully documents the single 'text' parameter as 'The text to score' (100% coverage), so the description does not need to add much. It confirms the purpose of the text but adds no format, length, or language constraints.
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 ('Compute') and resource ('Flesch Reading Ease and Flesch-Kincaid grade level'), naming concrete outputs that distinguish it from siblings like text_stats or summarize_text. The title 'Score readability' is also reinforced, not merely restated.
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?
The description gives clear context: 'Use it to check whether a draft matches its intended audience before publishing.' This tells the agent when to apply the tool, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_textSummarize textARead-onlyIdempotent
Produce an extractive summary by scoring each sentence on the frequency of the meaningful words it contains and returning the highest-scoring sentences in their original order. Works fully offline; no model call is made.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to summarize. | |
| max_sentences | No | How many sentences the summary may contain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnly/idempotent annotations by explaining the exact scoring mechanism, output ordering, and offline behavior. It accurately describes what the tool does and aligns with the annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the essential information with zero waste: what the tool produces, how it works, and a key operational characteristic. Every clause contributes to understanding.
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?
Given the simple parameter set, an output schema, and strong annotations, the description is fully sufficient. It explains the algorithm, output ordering, and offline nature, leaving no critical gaps for an agent to call the tool correctly.
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?
The input schema already provides 100% parameter coverage with clear descriptions, defaults, and constraints for both 'text' and 'max_sentences'. The description does not add new parameter-level meaning but also does not need to, so the baseline of 3 applies.
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 uses a specific verb and resource ('Produce an extractive summary') and explains the exact method. It is clearly distinct from sibling tools like text_stats, extract_keywords, and readability, which target different operations.
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?
The description gives clear context: it is for extractive summarization and works offline without a model call. It does not explicitly name alternatives or state when not to use the tool, but the context is strong enough for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_statsAnalyze text statisticsARead-onlyIdempotent
Count characters, words, unique words, sentences, paragraphs and lines in a piece of text, plus average word/sentence length and an estimated reading time. Use this to check length limits or to profile a draft before editing.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to analyze. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lines | Yes | Number of lines. |
| words | Yes | Word count. |
| sentences | Yes | Sentence count. |
| characters | Yes | Total characters, including whitespace. |
| paragraphs | Yes | Blocks of text separated by a blank line. |
| unique_words | Yes | Number of distinct lowercase words. |
| average_word_length | Yes | Mean characters per word. |
| characters_no_spaces | Yes | Characters excluding all whitespace. |
| reading_time_minutes | Yes | Estimated silent reading time at 200 wpm. |
| average_sentence_length | Yes | Mean words per sentence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds value by disclosing the analytical scope, including derived metrics like average lengths and estimated reading time, which are not implied by the annotations alone. There is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry all essential information: what is computed and when to use it. The metric list is front-loaded and every clause earns its place with no filler.
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 one simple parameter, a full output schema, and strong annotations, the description is complete for an agent to invoke the tool correctly. It covers purpose, use cases, and behavioral scope without needing to explain return values.
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 parameter description 'The text to analyze' is already clear. The tool description adds no new parameter-level semantics, such as formatting constraints or edge-case behavior, so the baseline of 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?
The description uses a specific verb ('Count') and names the exact resource ('a piece of text') plus a rich list of concrete metrics: characters, words, unique words, sentences, paragraphs, lines, and reading time. This clearly distinguishes it from siblings like summarize_text, extract_keywords, or convert_case.
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?
The description provides clear use cases: 'check length limits or profile a draft before editing.' It does not explicitly name sibling alternatives or state when not to use it, but the context is strong enough for an agent to select it appropriately.
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.
7 tool updates
v0.1.0- First observed
convert_case - First observed
diff_texts - First observed
extract_entities - First observed
extract_keywords - First observed
readability - First observed
summarize_text - First observed
text_stats
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: statistics, summarization, keywords, readability, case conversion, entity extraction, and diffing. While several tools analyze text, their outputs are different enough that an agent should not confuse them.
Most tools follow a verb_noun pattern such as summarize_text, extract_keywords, convert_case, and diff_texts. text_stats and readability are minor deviations that are still readable and predictable.
Seven tools is a well-scoped size for a text analysis and transformation server. Each tool covers a distinct utility without unnecessary overlap or bloat.
The toolkit covers the core text-analysis workflow: profiling, summarizing, keyword extraction, readability, transformations, entity extraction, and diffing. Minor gaps like sentiment analysis or language detection are common additions but not clearly required for the stated purpose.
Maintenance
Related MCP Connectors
Text generation over MCP: prose, emails, blog outlines, SQL, humanizing, text diffs, fake data.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Free OpenAI-compatible inference with signed provenance receipts and 3 focused MCP tools.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates local language models (like Qwen3-8B) with MCP clients, providing tools for chat, code analysis, text generation, translation, and content summarization using your own hardware.-
- AlicenseAqualityDmaintenanceLocal-first MCP server for Originality.ai workflows, including AI detection, plagiarism checks, readability, SEO scans, and scan-result retrieval for content teams.81AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceModular MCP server providing text preprocessing and NLP tools for AI agent ecosystems.MIT
- AlicenseBqualityAmaintenanceEnables local, offline AI-text detection over MCP with read-only tools for status checking and statistical analysis of text using calibrated compact models.2BSD 3-Clause