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 分