Unprofane
by unprofane.com · remote · no sign-in to list tools · v0.1.3 · published by com.unprofane
Should I allow this text? Profanity and toxicity checks that are hard to fool, with the evidence.
5 tools: 3 change things and 2 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things3Claude Code: ask: see these tools
- Only reads2Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http unprofane https://api.unprofane.com/mcp --header 'Authorization: <your-authorization>'Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
5 tools
Changes things 3Claude Code: ask
check_batchCheck up to 100 texts in one call, 30,000 characters in all, with the same settings.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check up to 100 texts in one call, 30,000 characters in all, with the same settings. Each item has your id and a text; results come back in order, each with its id and either a result (as check_text returns) or an error. Read-only; counts one check per item.
Annotations the server declares
- title: Check many texts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
check_textDecide whether one text should be allowed: profanity, slurs, insults, threats and sexual language, disguised spellings included (sh1t, f.u.c.k, leetspeak, homoglyphs).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Decide whether one text should be allowed: profanity, slurs, insults, threats and sexual language, disguised spellings included (sh1t, f.u.c.k, leetspeak, homoglyphs). Returns the action (allow, review, block), the matches with their categories and the tricks used, a one-sentence reason and a censored version. Read-only; counts one check against the plan. If the action is wrong, report it with report_result and the result's id.
Annotations the server declares
- title: Check a text
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
report_resultTell Unprofane a check got it wrong (or right): the result's id, the verdict and, if you know it, the action it should have taken.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Tell Unprofane a check got it wrong (or right): the result's id, the verdict and, if you know it, the action it should have taken. A person reads every report and corrections ship in a later engine. Writes a report; it changes no result and counts no check.
Annotations the server declares
- title: Report a wrong result
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 2Claude Code: allow
get_integration_snippetA complete, runnable recipe for adding Unprofane to a platform in a language: code to paste.No findings
Why it is in this group
- The name "get_integration_snippet" says "get": a word for reading.
Description, as the server wrote it A complete, runnable recipe for adding Unprofane to a platform in a language: code to paste. Use it when asked to add a profanity or username filter to an app. Read-only and free: it checks no text.
Annotations the server declares
- title: Get an integration recipe
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_usageThe checks this key's account has used in the current billing period, how many its plan includes and any overage, with the share answered by the rules alone, the model or the cache…No findings
Why it is in this group
- The name "get_usage" says "get": a word for reading.
Description, as the server wrote it The checks this key's account has used in the current billing period, how many its plan includes and any overage, with the share answered by the rules alone, the model or the cache. Counts up to the last full hour. Read-only and free.
Annotations the server declares
- title: Get usage this period
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http unprofane https://api.unprofane.com/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__unprofane__get_usage",
"mcp__unprofane__get_integration_snippet"
],
"ask": [
"mcp__unprofane__check_text",
"mcp__unprofane__check_batch",
"mcp__unprofane__report_result"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as unprofane. Review it before you use it.