Unprofane

Should I allow this text? Profanity and toxicity checks that are hard to fool, with the evidence.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
80%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~425Tokens (tool definitions)
~1014 BTypical response size
Minimal attention impact (0.33% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "unprofane": {
      "url": "https://api.unprofane.com/mcp"
    }
  }
}

Remote endpoints

https://api.unprofane.com/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check_text(text, context, policy, mode, mask)

Decide whether a text should be allowed: profanity, slurs, threats and sexual language, including disguised spellings. Returns the action (allow, review, block), the evidence, a one-sentence reason and a censored version. Use context "username" for names shown publicly.

Input Schema

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 10000
    },
    "context": {
      "type": "string",
      "enum": [
        "general",
        "username",
        "display_name",
        "comment",
        "chat",
        "gaming",
        "educational",
        "creative",
        "review",
        "custom_text"
      ]
    },
    "policy": {
      "type": "string",
      "enum": [
        "kids",
        "teen",
        "standard",
        "strict"
      ]
    },
    "mode": {
      "type": "string",
      "enum": [
        "fast",
        "balanced",
        "thorough"
      ]
    },
    "mask": {
      "type": "string",
      "enum": [
        "asterisk",
        "first_letter",
        "grawlix",
        "remove"
      ]
    }
  },
  "required": [
    "text"
  ]
}
🟢check_batch(items, context, policy)

Check up to 100 texts at once. Each item has an id and a text; results come back in order.

Input Schema

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "maxItems": 100,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "text"
        ]
      }
    },
    "context": {
      "type": "string"
    },
    "policy": {
      "type": "string"
    }
  },
  "required": [
    "items"
  ]
}
🟢get_integration_snippet(platform, language)

A complete, runnable recipe for adding Unprofane to a platform (supabase, clerk, firebase, auth0, better-auth, unity, godot, or plain http) in a language.

Input Schema

{
  "type": "object",
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "http",
        "supabase",
        "clerk",
        "firebase",
        "auth0",
        "better-auth",
        "unity",
        "godot"
      ]
    },
    "language": {
      "type": "string",
      "enum": [
        "curl",
        "javascript",
        "typescript",
        "python",
        "csharp",
        "gdscript",
        "go",
        "php",
        "ruby"
      ]
    }
  },
  "required": [
    "platform",
    "language"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools