writing_tools_server

writing_tools_server is a cursor rule for Cursor from wdm0006/writing-tools-mcp. It costs 543 tokens per session, scanned A, original, MIT.

A local MCP server that provides text-analysis tools such as word and character counts, spell checking, readability scoring, Markdown section parsing, and language processing. MCP lets an AI agent connect to external tools.

In plain words
What is it for?
Use it to count text, find possible spelling errors, assess readability, split paragraphs, or parse Markdown sections.
Why use it?
It collects common writing checks in one server instead of requiring separate tools for each analysis.

Cursor rule for Cursor

Install

Getting it into your agent

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

agentmods
npx agentmods add rules/wdm0006/writing-tools-mcp/writing_tools_server
Clone the repo
git clone --depth 1 https://github.com/wdm0006/writing-tools-mcp

Made for: Cursor.

Wrote this? Show the measurements

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

agentmods badge for writing_tools_server

README.md
[![agentmods](https://agentmods.dev/badge/rules/wdm0006/writing-tools-mcp/writing_tools_server.svg)](https://agentmods.dev/rules/wdm0006/writing-tools-mcp/writing_tools_server)
Your own site
<a href="https://agentmods.dev/rules/wdm0006/writing-tools-mcp/writing_tools_server"><img src="https://agentmods.dev/badge/rules/wdm0006/writing-tools-mcp/writing_tools_server.svg" alt="Measured on agentmods" height="20"></a>
Per session 543 This file is loaded in full into every session.
When invoked 543 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

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

ModelPer sessionOnce invoked
Fable 5.1 $0.00543 $0.00543
Opus 5 $0.00271 $0.00271
Sonnet 5 $0.00109 $0.00109
Haiku 4.5 $0.00054 $0.00054

Measured 5d ago against content hash cbf162f30dfe, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-05, from the pricing page.

Security

Grade A, and why

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

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

Nothing flagged

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

.cursor/rules/writing_tools_server.mdc · 37 lines

How it starts

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

Writing Tools MCP Server (server.py)

This file defines a FastMCP server (server.py) that provides various tools for text analysis. It uses libraries like spacy, textstat, pyspellchecker, and markdown-it-py.

Main Components

  • mcp = FastMCP(...): The main server instance.
  • nlp = spacy.load("en_core_web_sm"): Loads the spaCy language model for natural language processing tasks. It handles downloading the model if it's not present.
  • preprocess_text(text, ...): A helper function used by several tools to tokenize, lemmatize, and optionally remove stopwords from text.
  • parse_markdown_sections(text): Parses Markdown text into sections based on headings (H1-H6), returning a dictionary. It uses _render_tokens_to_text internally.
  • split_paragraphs(text): Splits text into paragraphs based on double newlines.

Available Tools

The server exposes the following tools via the @mcp.tool() decorator:

  • list_tools(): Lists all available tools.
  • character_count(text): Counts characters.
  • word_count(text): Counts words (split by whitespace).
  • spellcheck(text): Finds potentially misspelled words.
  • readability_score(text, level): Calculates Flesch Reading Ease, Flesch-Kincaid Grade, and Gunning Fog scores. Can analyze the full text, by section (Markdown headings), or by paragraph.
  • reading_time(text, level): Estimates reading time. Can analyze the full text, by section, or by paragraph.
  • keyword_density(text, keyword): Calculates the density of a specific keyword.
  • keyword_frequency(text, remove_stopwords): Counts the frequency of each word/lemma.
  • top_keywords(text, top_n, remove_stopwords): Finds the most frequent keywords.
  • keyword_context(text, keyword): Extracts sentences containing a specific keyword or its lemma.
  • passive_voice_detection(text): Detects sentences potentially in passive voice.

Read the full file on GitHub · 37 lines

Changes

What this file has done since we first saw it

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

  1. 5d ago First seen · 37 lines · 543 tokens per session scan A cbf162f30dfe

Subscribe to this mod's changes

writing_tools_server is a cursor rule published in the GitHub repository wdm0006/writing-tools-mcp (10 stars, last pushed yesterday), licensed MIT. It adds 543 tokens to every session, about $0.0027 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.