Writing Style Checker

io.github.theserverlessdev由 GitHub 账号 theserverlessdev 发布v2.2.2更新于 Oct 26, 2026

Prose linter + AI-slop detector: weasel words, passive voice, hedging, and research-cited AI tells

已验证Streamable HTTP可网页运行开发者工具AI 与机器学习

概览

AI 生成的概览

一个文章润色检查类 MCP 服务器,可标出空泛词、被动语态、模糊措辞、长句以及有研究依据的 AI 写作痕迹。

可以做什么
  • 分析文本中的八类写作问题:空泛词、被动语态、重复词、长句、名词化、模糊措辞、填充副词和 AI 写作痕迹,可选传入自定义配置
  • 删除相邻重复词,返回清理后的文本和被删除的词
  • 列出各检测器的词表与短语表,含条目数、配置键和示例条目
  • 读取磁盘上的文件并分析(仅本地 stdio 版本,会自动发现配置文件)
适用场景
适合在助手起草或修改文章时,获得具体、可解释的文风提示,而不是作者身份判定。可用于打磨文档、文章或报告,并在发布前发现听起来像 AI 生成的措辞。
运行要求
可使用托管的远程端点(无需安装),或通过 npx 运行本地 npm 包 wsc-mcp(需要 Node.js)。未声明需要账号、API 密钥或环境变量。托管接口每次请求最多 100,000 个字符。
安装前请注意
发送到托管端点的文本会在该服务器上处理;README 称不会存储,但文本确实会离开本机,请勿提交机密草稿。本地 stdio 版本在被要求时可读取磁盘文件。该工具只标记模式,无法证明作者身份。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Writing Style Checker,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.theserverlessdev%2Fwsc/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "writing-style-checker": {
      "type": "http",
      "url": "https://wsc.theserverless.dev/mcp"
    }
  }
}

README

Writing Style Checker

[CI] [npm] [smithery badge] [wsc MCP server] [M8ven Score] [License: MIT]

A prose linter and AI-slop detector. WSC finds AI tells — words, phrases, and sentence structures overrepresented in AI-generated text, each flag backed by a published corpus study. It also catches classic writing issues: weasel words, passive voice, duplicate words, long sentences, nominalizations, hedging, and filler adverbs. Available as a web editor, HTTP API, MCP server, CLI, and GitHub Action.

Live: wsc.theserverless.dev

[Screenshot of Writing Style Checker]

Features

  • Web Editor - Real-time highlighting with inline fix buttons for all 8 detectors
  • HTTP API - POST text with optional config, retrieve structured JSON responses
  • MCP Server (Remote) - Connect AI assistants via Streamable HTTP transport
  • MCP Server (Local) - Stdio-based server via wsc-mcp on npm
  • CLI - Check files from the command line via wsc-lint
  • GitHub Action - Run checks in CI with ::warning annotations
  • Configurable - Customize detectors with .wscrc.json files

What WSC is (and isn't)

WSC flags patterns that research on AI-generated text finds overrepresented, and cites a source for every flag. It does not, and cannot, prove authorship. Classifier-based detectors carry a documented false-accusation risk: a Stanford study found that seven of them misflagged 61% of essays written by non-native English speakers. WSC avoids that trap by design — every flag is a specific, explainable edit that improves the text no matter who, or what, wrote it.


Detection Rules

DetectorItemsDescription
Weasel Words95 words/phrasesVague terms like "very", "basically", "arguably", "numerous"
Passive Voice260 irregular verbsAuxiliary verbs + past participles (regular -ed + irregular)
Duplicate Words—Adjacent repeated words across whitespace, case-insensitive
Long Sentencesthreshold: 30 wordsSentences exceeding a configurable word count
Nominalizations245 word pairsNouns replaceable with verbs ("utilization" → "use")
Hedging100 phrasesPhrases that weaken assertions ("I think", "it seems")
Filler Adverbs139 wordsAdverbs adding emphasis without substance ("totally", "utterly")
AI Tells98 words (+111 inflected forms) + 83 phrases + 12 structural patternsWords, phrases, and sentence constructions overrepresented in AI-generated text (delve, rich tapestry, It's not just X — it's Y)

Word lists sourced from Matt Might's shell scripts and expanded with additional entries. AI tells draw on published corpus studies: Kobak et al. 2025 (Science Advances), Juzek & Ward 2025 (COLING), Liang et al. 2024 (Stanford), and Reinhart et al. 2025 (PNAS). Wikipedia's editor-maintained Signs of AI writing catalogue and AI-detection vendor reports round out the sources.


Configuration

Create a .wscrc.json to customize detectors. All tools (API, MCP, CLI) support it.

json
{  "$schema": "https://wsc.theserverless.dev/schema.json",  "ignore": ["CHANGELOG.md", "docs/vendor/**"],  "detectors": {    "weaselWords": {      "enabled": true,      "add": ["synergy", "leverage"],      "remove": ["very"]    },    "longSentences": { "maxWords": 25 },    "adverbs": { "enabled": false }  }}

Every field is optional. Missing fields use defaults. JSON Schema provides autocompletion in VS Code.

ignore is an array of glob patterns relative to the working directory. The GitHub Action uses the repository root. The CLI adds these patterns to its built-in **/node_modules/** and **/.git/** skips, together with the Action exclude input and the CLI --ignore flag.


API Usage

POST /api/check

Analyze text for writing style issues. Accepts optional config object.

bash
curl -X POST https://wsc.theserverless.dev/api/check \  -H "Content-Type: application/json" \  -d '{"text":"The code was written very quickly."}'

Response:

json
{  "summary": {    "total": 2,    "weaselWords": 1,    "passiveVoice": 1,    "duplicateWords": 0,    "longSentences": 0,    "nominalizations": 0,    "hedging": 0,    "adverbs": 0  },  "issues": {    "weaselWords": [{ "word": "very", "index": 21, "line": 1, "column": 22, "context": "..." }],    "passiveVoice": [{ "phrase": "was written", "index": 9, "line": 1, "column": 10, "context": "..." }],    "duplicateWords": [],    "longSentences": [],    "nominalizations": [],    "hedging": [],    "adverbs": []  },  "meta": { "characterCount": 34, "wordCount": 6, "sentenceCount": 1, "processingTimeMs": 2 }}

With config:

bash
curl -X POST https://wsc.theserverless.dev/api/check \  -H "Content-Type: application/json" \  -d '{"text":"The code was written very quickly.", "config":{"detectors":{"weaselWords":{"enabled":false}}}}'

GET /api/check

Returns API documentation as JSON.

GET /api/detectors

Returns the list of all 8 detectors with descriptions, configurability, and word counts.

GET /health

Runs a smoke test with known text and returns {"status":"healthy"} or 503.

Limits: Max 100,000 characters per request. CORS enabled for all origins.


MCP Server

The Writing Style Checker is available as an MCP server, letting AI assistants check your writing directly.

Tools

ToolDescription
check_textAnalyze text for all 8 writing style issues. Accepts optional config.
fix_duplicatesRemove duplicate adjacent words and return cleaned text
list_word_listsReturn info about all detector word lists
check_file(Local only) Read a file from disk and analyze it. Auto-discovers .wscrc.json.

Remote MCP Server

Connect any MCP client to the hosted server - no installation required.

json
{  "mcpServers": {    "writing-style-checker": {      "type": "url",      "url": "https://wsc.theserverless.dev/mcp"    }  }}

Local MCP Server (stdio)

Install via npm for local usage. Includes check_file for analyzing files on disk with auto-discovery of .wscrc.json.

bash
npx wsc-mcp

Claude Desktop / Claude Code config:

json
{  "mcpServers": {    "writing-style-checker": {      "command": "npx",      "args": ["wsc-mcp"]    }  }}

See the wsc-mcp npm page for full documentation.


CLI

Check files from the command line.

bash
# Check all markdown filesnpx wsc-lint check "**/*.md"
# Read from stdinecho "The code was written very quickly." | npx wsc-lint check --stdin
# JSON output for scriptingnpx wsc-lint check "**/*.md" --format json
# GitHub Actions annotationsnpx wsc-lint check "**/*.md" --format github
# Create a config filenpx wsc-lint init

See the wsc-lint README for full documentation.


GitHub Action

yaml
- uses: theserverlessdev/wsc@v1  with:    files: '**/*.md'    max-warnings: 20    exclude: |      CHANGELOG.md      vendor/**
InputDefaultDescription
files**/*.mdGlob pattern for files to check
config—Path to .wscrc.json config file
max-warningsunlimitedMax warnings before failing
only-changedfalseOn a pull request, check changed files that match files. If none match, skip the check. Other events check files.
exclude—Glob patterns to skip. Separate with a comma or a new line. Adds to config ignore.

Privacy

The web editor runs in your browser - we never send text to any server. The API and MCP endpoints only process text you explicitly send to them.


Project Structure

.├── src/│   ├── core/                    # Shared detection engine│   │   ├── detector.ts          # 8 detection algorithms│   │   ├── words.ts             # Word/phrase lists (800+ entries)│   │   ├── config.ts            # Config types, merging, validation│   │   ├── config-node.ts       # Node-only: file loading, discovery│   │   ├── analyzer.ts          # Unified analyzeText() entry point│   │   └── index.ts             # Public API exports│   ├── docs/                    # Documentation content (Markdown files)│   ├── mcp/│   │   └── handler.ts           # MCP JSON-RPC 2.0 handler│   ├── lib/│   │   ├── App.svelte           # Main editor page component│   │   ├── stores/theme.ts      # Theme store (light/dark/system)│   │   └── components/          # UI components (StatsBar, ConfigPanel, etc.)│   ├── routes/│   │   ├── +layout.svelte       # Shared layout (header, nav, footer)│   │   ├── api/check/+server.ts # HTTP API endpoint│   │   ├── mcp/+server.ts       # MCP endpoint│   │   ├── health/+server.ts    # Health check endpoint│   │   ├── docs/+page.svelte    # Documentation page│   │   └── words/+page.svelte   # Word library browser│   └── styles/│       └── main.scss            # Global styles (light + dark themes)├── mcp-server/                  # Standalone stdio MCP server (npm: wsc-mcp)├── cli/                         # CLI tool (npm: wsc-lint)├── action/                      # GitHub Action (composite)├── tests/                       # 341 tests across 18 files├── static/│   ├── schema.json              # JSON Schema for .wscrc.json│   ├── llms.txt                 # AI/LLM discovery file│   └── llms-full.txt            # Detailed LLM context├── wrangler.toml                # Cloudflare Workers config└── svelte.config.js             # SvelteKit configuration

Local Development

bash
git clone https://github.com/theserverlessdev/wsc.gitcd wscnpm installnpm run dev

Visit http://localhost:5173. The API is at /api/check, MCP at /mcp, health at /health.

Commands

CommandDescription
npm run devStart dev server
npm run buildBuild for production
npm run checkType check with svelte-check
npm testRun all 341 tests
npm run test:coverageCoverage report

Deployment

Deployed as a Cloudflare Worker at wsc.theserverless.dev.

bash
npm run buildnpx wrangler deploy

Contributing

See CONTRIBUTING.md for development setup, testing, and pull request guidelines.

For substantial changes, please open an issue first.

Acknowledgements

License

MIT

来源:README.md,提交 5ecd1e8

工具

3

check_text

Check text for writing style issues

Analyze text for writing style issues: weasel words, passive voice, duplicate words, long sentences, nominalizations, hedging, filler adverbs, and research-cited AI tells. Read-only and stateless — text is analyzed in memory on the hosted server and never stored. Returns a plain-text report with each issue's line and column, the matched text, surrounding context, and the reason for AI tells; texts over 100,000 characters return an error message. This hosted server has no filesystem access — the wsc-mcp npm package adds a check_file tool for local files. It only reports issues — to auto-remove duplicate words, follow up with fix_duplicates.

输入参数text必填configformat

fix_duplicates

Remove duplicate adjacent words

Remove duplicate adjacent words (case-insensitive, including across line breaks) and return the cleaned text plus the list of words that were removed. Read-only with no side effects: the fix is returned in the response, nothing is written anywhere. Use after check_text reports duplicate words; other issue types are report-only and have no auto-fix.

输入参数text必填

list_word_lists

List detector word lists

Return every detector word/phrase list with its entry count, config key, and sample entries, plus a link to the full browsable library. Read-only, takes no parameters, and returns the same catalog for a given release. Use it to see what the detectors match before tuning a config for check_text; not needed for ordinary checking.

无需输入参数。

版本历史

1
  1. v2.2.2最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分