.cursor — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited .cursor (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This is a Model Context Protocol (MCP) server designed to provide various text analysis tools, assisting users in improving their writing. It is optimized for Claude Desktop with one-click installation via MCP bundles, and also works with other MCP-compatible tools like Cursor and Windsurf.
MCP servers act as a secure bridge or interface, enabling AI models and language assistants to interact with local applications, tools, or data on a user's machine. This server leverages that protocol to offer its specialized writing-specific analysis capabilities to connected AI clients.
This server provides the following text analysis tools:
# Run directly from GitHub (no install needed)
uvx --from git+https://github.com/wdm0006/writing-tools-mcp writing-tools-mcp
# Or install from source
git clone https://github.com/wdm0006/writing-tools-mcp
cd writing-tools-mcp
uv sync
uv run server.py{
"mcpServers": {
"writingtools": {
"command": "uvx",
"args": ["--from", "git+https://github.com/wdm0006/writing-tools-mcp", "writing-tools-mcp"]
}
}
}To create a .mcpb bundle for distribution:
make build-mcpbThis creates writing-tools-mcp.mcpb which can be installed in Claude Desktop.
You can configure any MCP client (like Claude.ai, Windsurf, or Cursor) to connect to it. Here are some example prompts you could give to an AI assistant connected to this MCP server:
General Analysis:
list-tools)readability-score)spellcheck)reading_time)Keyword Analysis:
top_keywords with top_n=5)keyword_density with keyword="artificial intelligence")keyword_context with keyword="MCP")top_keywords with top_n=5, then passes that to a different web search tool if available)Style and Structure:
passive-voice-detection)word_count)readability-score with level="section")AI Detection:
perplexity-analysis)stylometric-analysis)stylometric-analysis)Below is a detailed reference for each tool provided by the server.
`list-tools`
list[str] - A list of tool names.`character-count`
text (str): The input text.int - The total character count.`word-count`
text (str): The input text.int - The total word count (based on whitespace splitting).`spellcheck`
text (str): The input text.list[str] - A list of words identified as potentially misspelled.`readability-score`
text (str): The text to analyze.level (str, optional): Granularity of analysis. Options:"full" (default): Score the entire text."section": Score the full text and each markdown section (identified by # headings) separately."paragraph": Score the full text and each paragraph (separated by blank lines) separately.dict - A dictionary containing the scores. Structure depends on the level parameter. For "full", it returns {"flesch": float, "kincaid": float, "fog": float}. For other levels, it returns nested dictionaries. Returns None for scores if the text segment is too short.`reading-time`
textstat).text (str): The text to analyze.level (str, optional): Granularity of analysis. Options:"full" (default): Calculate for the entire text."section": Calculate for the full text and each markdown section."paragraph": Calculate for the full text and each paragraph.dict - A dictionary containing the estimated reading time in minutes. Structure depends on the level parameter.`keyword-density`
text (str): The text to analyze.keyword (str): The keyword to search for.float - The density percentage ( (keyword count / total words) * 100 ).`keyword-frequency`
text (str): The text to analyze.remove_stopwords (bool, optional, default=True): Whether to exclude common English stopwords (e.g., 'the', 'a', 'is').dict - A dictionary mapping each keyword (or lemma) to its frequency count.`top-keywords`
text (str): The text to analyze.top_n (int, optional, default=10): The number of top keywords to return.remove_stopwords (bool, optional, default=True): Whether to exclude common English stopwords.list[tuple[str, int]] - A list of tuples, where each tuple contains a keyword (or lemma) and its count, sorted by frequency in descending order.`keyword-context`
text (str): The text to search within.keyword (str): The keyword to find.list[str] - A list of sentences containing the keyword or its lemma.`passive-voice-detection`
text (str): The text to analyze.list[str] - A list of sentences identified as potentially containing passive voice.`perplexity-analysis`
text (str): The text to analyze.language (str, optional, default="en"): Language code (only "en" supported currently).dict - Analysis results including:doc_ppl (float): Document-level perplexity scoredoc_burstiness (float): Burstiness score (standard deviation of sentence perplexities)sentences (list): Sentence-level perplexity scoresconfig (dict): Model configuration and thresholdsflags (dict): AI detection flags with confidence and explanations`stylometric-analysis`
text (str): The text to analyze.baseline (str, optional, default="brown_corpus"): Baseline corpus name for comparison.language (str, optional, default="en"): Language code (only "en" supported currently).dict - Stylometric analysis including:features (dict): Extracted stylometric features (sentence length, TTR, hapax rate, POS ratios, etc.)z_scores (dict): Z-scores of features against the baselineflags (dict): AI detection flags with confidence levels and explanationssentence_analysis (list): Per-sentence analysis with z-scoresconfig (dict): Baseline information and analysis thresholdsContributions are welcome! Please open an issue or submit a pull request.
This is MIT licensed
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.