Skip to main content
Glama
wordsmith-mcp

wordsmith-mcp

by mirza1272

Wordsmith MCP

MCP(모델 컨텍스트 프로토콜) 서버로, MCP 호환 AI 클라이언트에 오프라인 텍스트 분석 및 재작성 도구 세트를 제공합니다 — 통계, 추출적 요약, 키워드 추출, 가독성 점수, 명명 규칙 변환, 개체 추출 및 텍스트 diff.

API 키가 필요 없습니다. 네트워크 호출도 없습니다. 어디에도 상태를 저장하지 않습니다. 전달하는 텍스트에 대해 모든 것이 로컬에서 실행되므로 빠르고 무료이며 개인 문서에 안전하게 사용할 수 있습니다.

MCP Python SDK로 구축되었습니다.


왜 만들었는가

언어 모델은 텍스트를 판단하는 데는 뛰어나지만 측정하는 데는 놀라울 정도로 신뢰할 수 없습니다. 정확한 단어 수나 Flesch 점수를 요청하면 추측할 뿐입니다. Wordsmith는 이러한 작업을 위한 결정적 계산기를 모델에 제공하므로 문서의 길이, 난이도, 핵심 용어에 대한 답변이 추정이 아닌 계산으로 얻어집니다.


Related MCP server: armavita-originality-ai-mcp

도구

Tool

What it does

Key parameters

text_stats

문자, 단어, 고유 단어, 문장, 문단, 줄, 평균 단어/문장 길이, 예상 읽기 시간

text

summarize_text

추출적 요약 — 내용어 빈도로 문장에 점수를 매기고 원래 순서대로 가장 좋은 문장을 반환

text, max_sentences (1–20, 기본 3)

extract_keywords

가장 빈번한 내용어와 그 횟수 및 상대 빈도; 불용어 필터링

text, limit (1–50, 기본 10), min_length

readability

Flesch Reading Ease + Flesch–Kincaid 학년 수준, 쉬운 언어 해석 포함

text

convert_case

snake, kebab, slug, camel, pascal, constant, title, sentence, upper, lower로 변환

text, style

extract_entities

이메일, URL, 해시태그, 멘션, 전화번호 및 독립적인 숫자 추출

text

diff_texts

초안과 수정본 간의 통합 줄 단위 diff

before, after, context_lines

모든 도구는 readOnlyHint: true, openWorldHint: false로 주석 처리되어 있습니다. 어떤 것도 변경하지 않으며 인터넷에 접근하지 않습니다.


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 .

실행:

wordsmith-mcp

서버는 stdio를 통해 MCP를 사용하며 클라이언트를 기다리며 대기합니다. 이는 정상적인 동작이지 멈춤이 아닙니다. 클라이언트가 직접 서버를 시작합니다. 아래를 참조하세요.

작동 확인

python scripts/smoke_test.py

실제 MCP 클라이언트처럼 서버를 시작하고, 도구 목록을 출력한 다음 모든 도구를 호출하여 결과를 출력합니다.

단위 테스트 실행

pip install -e ".[dev]"
pytest -q

클라이언트에 연결하기

Claude Desktop

claude_desktop_config.json을 편집하세요:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "wordsmith": {
      "command": "/absolute/path/to/wordsmith-mcp/.venv/bin/wordsmith-mcp"
    }
  }
}

Claude Desktop을 다시 시작한 다음, "이 문단의 가독성은 어떻고 상위 5개 키워드는 무엇인가요?" 같은 질문을 해보세요.

Claude Code

claude mcp add wordsmith -- /absolute/path/to/wordsmith-mcp/.venv/bin/wordsmith-mcp

Cursor / Windsurf / 기타 클라이언트

mcpServers 블록을 지원하는 모든 클라이언트는 위의 Claude Desktop 예제와 동일한 형식을 사용합니다.

MCP Inspector(시각적 디버깅)

npx @modelcontextprotocol/inspector .venv/bin/wordsmith-mcp

각 도구를 직접 호출하고 원시 JSON-RPC 트래픽을 검사할 수 있는 브라우저 UI를 엽니다.


HTTP 모드(호스팅 배포용)

동일한 서버가 스트리밍 HTTP도 지원하며, 호스팅 마켓플레이스에서 사용하는 방식입니다:

TRANSPORT=http PORT=8081 wordsmith-mcp

그러면 MCP 엔드포인트는 http://localhost:8081/mcp에 위치합니다.

Env var

Default

Meaning

TRANSPORT

stdio

로컬 클라이언트는 stdio, 호스팅 환경은 http

HOST

0.0.0.0

HTTP 모드에서 바인딩 주소

PORT

8081

HTTP 모드에서 바인딩 포트

MCP_PATH

/mcp

MCP 엔드포인트가 제공되는 HTTP 경로


배포

Smithery의 게시 양식은 라이브 HTTPS MCP 엔드포인트를 요구하므로, 서버를 먼저 호스팅한 후 등록합니다. 이를 위해 Dockerfile과 render.yaml이 포함되어 있으며, smithery.yaml은 컨테이너를 직적 빌드하는 호스트를 위해 유지됩니다.

전체 안내: DEPLOOY.md.

요약하면: 컨테이너를 호스트(Render, Railwway, Fly..io — render.yaml 포함)에 배포한 다음, 생된 https://<host>/mcp URLL을 Smiithery에 게시하면 됩니다.

컨테이너를 먼저 로컬에서 빌드하는 것이 좋은 확인 방법입니다:

docker build -t wordsmith-mcp .
docker run --rm -p 8081:8081 wordsmith-mcp

프젝트 구죠

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.md

texxtuutils.py는 알골리즘을 담고 있으며 MCP에서 아무것도 import하지 않으므로 로직을 단독으로 단위 테스트할 수 있습니다. server.py는 이러한 함수를 모델에 설명하는 얇은 프토토콜 계층입니다.


작동 방시(MCP 60초 둘러보기)

MCP는 AI 클라이언트가 서버에서 노출하는 도구를 발견하고 호출할 수 있게 해주는 JSON-RPC 프로토콜입니다.

  1. 클라이언트가 서버를 시작합니다(stdio를 통한 하위 프세스 또는 HTTP를 통한 연결).

  2. 클라이언트와 서버가 프로토콜 버젼과 기능을 알리는 initialize 핸드셰이크를 교환합니다.

  3. 클라이언트가 tools/list를 호출합니다. SDK는 Python 타입 힌트와 Field(...) 설명에서 각 도구의 JSON Schema를 생성하므로 모델은 어떤 인수가 유효한지 정확히 볼 수 있습니다.

  4. 모델이 도구가 필요하다고 판단하면 클라이언트는 인수와 함께 tools/call을 보내고, 서버는 Python 함수를 실행하여 결과를 반환합니다. 결과는 사람이 읽을 수 있는 텍스트와 선언된 출력 스키마에 맞는 structuredContent로 모두 제공됩니다.

따라서 도구를 추가하는 것은 타입이 지정된 Python 함수를 작성하고 @mcp.tool(...) 데코레이터를 붙이는 것뿐입니다.


이 저장소의 추가 자료

  • WRITEUP.md — 기존 MCP 서버(Contexxt7) 사용에 대한 저의 글과 이 서버를 만들면서 배운 내용.

  • DEPLOY.md — 이 서버를 Smiithery와 Glama에 게시하기 위한 단계별 가이드.


라이선스

MIT — LICENSE 참조.

Available Tools

7 tools
convert_caseConvert text caseA
Read-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.

NameRequiredDescriptionDefault
textYesThe text to convert.
styleYesTarget naming convention.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb and 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.

Usage Guidelines4/5

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 textsA
Read-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.

NameRequiredDescriptionDefault
afterYesThe revised text.
beforeYesThe original text.
context_linesNoUnchanged lines of context around each change.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 entitiesA
Read-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.

NameRequiredDescriptionDefault
textYesThe text to scan.

Output Schema

NameRequiredDescription
urlsYes
emailsYes
numbersYes
hashtagsYes
mentionsYes
phone_numbersYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 keywordsA
Read-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.

NameRequiredDescriptionDefault
textYesThe text to mine for keywords.
limitNoMaximum keywords to return.
min_lengthNoIgnore words shorter than this many characters.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines4/5

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 readabilityA
Read-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.

NameRequiredDescriptionDefault
textYesThe text to score.

Output Schema

NameRequiredDescription
wordsYes
sentencesYes
syllablesYes
interpretationYesPlain-language reading of the ease score.
flesch_reading_easeYes0-100, higher is easier to read.
flesch_kincaid_gradeYesApproximate US school grade required.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 textA
Read-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.

NameRequiredDescriptionDefault
textYesThe text to summarize.
max_sentencesNoHow many sentences the summary may contain.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statisticsA
Read-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.

NameRequiredDescriptionDefault
textYesThe text to analyze.

Output Schema

NameRequiredDescription
linesYesNumber of lines.
wordsYesWord count.
sentencesYesSentence count.
charactersYesTotal characters, including whitespace.
paragraphsYesBlocks of text separated by a blank line.
unique_wordsYesNumber of distinct lowercase words.
average_word_lengthYesMean characters per word.
characters_no_spacesYesCharacters excluding all whitespace.
reading_time_minutesYesEstimated silent reading time at 200 wpm.
average_sentence_lengthYesMean words per sentence.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 7 tool updatesv0.1.0
    • First observedconvert_case
    • First observeddiff_texts
    • First observedextract_entities
    • First observedextract_keywords
    • First observedreadability
    • First observedsummarize_text
    • First observedtext_stats

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers