analyze_context applies a domain whitelist so clinical or gaming vocabulary is not treated as abuse, detect_obfuscation catches leetspeak and homoglyph tricks, and explain_match gives a moderator a reason rather than a verdict. track_user_message is the one that changes moderation practice: it turns individual decisions into a profile, which is how a single outburst stays distinguishable from a pattern worth acting on.
A moderation server built on the glin-profanity library. It flags and censors text across 24 languages, sees through leetspeak and Unicode substitution, and keeps a risk profile per user id.
- Text checked with the matched words, their severity and their positions in the string — check_profanity
- Matches replaced with a character you choose, optionally keeping the first letter visible — censor_text
- Domain-aware analysis, where a whitelist for that domain stops ordinary specialist vocabulary being flagged — analyze_context
- Up to 100 texts checked in one call, returning only the flagged ones if that is all you need — batch_check
- A safety score from 0 to 100 with a recommended action, at the strictness you set — validate_content
- Obfuscation identified as such: leetspeak and Unicode homoglyphs — detect_obfuscation
- The reasoning behind one flagged word, and cleaner rewordings in a tone you pick — explain_match, suggest_alternatives
- Statistics across a collection of up to 500 texts, with word frequency — analyze_corpus
- The same text compared across strictness levels, and a regex pattern generated for a word you want to catch yourself — compare_strictness, create_regex_pattern
- Per-user moderation: messages tracked against a user id, profiles and risk read back, high-risk users listed for review, and a profile reset after an appeal — track_user_message, get_user_profile, get_high_risk_users, reset_user_profile
- A streaming path for chat: one message or a batch processed against a queue, with throughput statistics — stream_check, stream_batch, get_stream_stats
- The supported languages listed, and per-call options for custom words, ignore words, case sensitivity and word boundaries — get_supported_languages
No account and no key. npx -y glin-profanity-mcp runs it over stdio, or install glin-profanity-mcp globally; the package also ships an HTTP entry point, glin-profanity-mcp-http, for clients that need one. Detection options travel with each call — languages, custom words, ignore words, case sensitivity, word boundaries, leetspeak detection, Unicode normalisation — so there is no configuration file to prepare first.
One command — npx -y glin-profanity-mcp
