Skip to main content
Glama

Server Details

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

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: single-text checking, batch checking, integration code retrieval, usage inspection, and error reporting. Although check_batch and check_text are related, their boundaries are explicitly described and easy to distinguish. No two tools appear interchangeable.

Naming Consistency5/5

All tool names use consistent snake_case with a predictable verb_noun structure: check_batch, check_text, get_integration_snippet, get_usage, report_result. The prefixes check_, get_, and report_ accurately reflect their operations.

Tool Count5/5

Five tools are well-scoped for a profanity-checking API: single check, batch check, integration snippet, usage, and feedback. Each tool earns its place without redundancy or missing essential surface. The count is neither thin nor excessive.

Completeness4/5

The tool set covers the core lifecycle of checking text, batch checking, retrieving integration code, monitoring usage, and reporting incorrect results. Minor gaps exist around configuration or retrieval of past results, but these are not essential for the stated purpose and can be worked around.

Available Tools

5 tools
check_batchCheck many textsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
maskNoHow "censored" hides a matched word: asterisk (****), first_letter (f***), grawlix (#$@!) or remove. Omit for the project's default, asterisk unless the project set one.
modeNoHow much to ask the model: fast never asks the model; balanced, the default, asks it about every text but a word or two the rules block outright; thorough asks it about every text. Omit for the project's default.
itemsYesThe texts to check, each with an id of yours to match its result.
policyNoHow strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces), casual (swearing welcome, swearing at someone still blocked). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default.
contextNoWhere the text is shown, which changes how it is read: username (a public handle; reserved names match), display_name (a name beside content), comment, chat, gaming (taunts about play are not abuse), review, educational (quoted words are discussed, not used), creative (dialogue in fiction), custom_text (engraving or printing), general (anything else). Omit for the project's default, general unless the project set one.
countryNoWhere the readers are, as a two-letter country code (MX, ES, BR): a word rude in some countries and innocent in others is read as theirs reads it. Omit to count a word rude anywhere.
languageNoThe language the text is in, when you know it: a short text that shows no other language is read in it. Defaults to auto.

Output Schema

NameRequiredDescription
resultsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds important operational context beyond that: batch limits, ordered per-item results/errors, and that billing counts one check per item.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences front-load the batching purpose and limits, then cover input shape, output shape, and operational notes. Every sentence earns its place with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich schema, full parameter descriptions, an output schema, and explicit annotations, the description supplies the remaining operational essentials: batch limits, ordering, per-item error handling, and check counting. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains every parameter in detail. The description adds only that items have an id and text and that results return in order with matching ids, which is useful but mostly repeats schema-level semantics rather than adding new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Check up to 100 texts in one call.' It adds the defining scope of batching with shared settings and limits, making it clearly distinguishable from the singular sibling check_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is for batches of texts using the same settings, which implicitly guides agents away from using it for single-item checks or per-item settings. It does not explicitly name check_text as the alternative for one text, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_textCheck a textA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
maskNoHow "censored" hides a matched word: asterisk (****), first_letter (f***), grawlix (#$@!) or remove. Omit for the project's default, asterisk unless the project set one.
modeNoHow much to ask the model: fast never asks the model; balanced, the default, asks it about every text but a word or two the rules block outright; thorough asks it about every text. Omit for the project's default.
textYesThe text to check, exactly as the person typed it: up to 10,000 characters, 64 for a username or display name.
policyNoHow strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces), casual (swearing welcome, swearing at someone still blocked). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default.
contextNoWhere the text is shown, which changes how it is read: username (a public handle; reserved names match), display_name (a name beside content), comment, chat, gaming (taunts about play are not abuse), review, educational (quoted words are discussed, not used), creative (dialogue in fiction), custom_text (engraving or printing), general (anything else). Omit for the project's default, general unless the project set one.
countryNoWhere the readers are, as a two-letter country code (MX, ES, BR): a word rude in some countries and innocent in others is read as theirs reads it. Omit to count a word rude anywhere.
languageNoThe language the text is in, when you know it: a short text that shows no other language is read in it. Defaults to auto.

Output Schema

NameRequiredDescription
idYes
scoreYes
actionYes
engineYes
reasonYes
allowedYes
evasionYes
matchesYes
censoredYes
languageYes
severityYes
timing_msYes
categoriesYes
decided_byYes
obfuscatedYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Read-only' adds nothing. The genuinely new disclosure is the quota cost ('counts one check against the plan') and the feedback loop via report_result, which are useful but thin for a tool with a model-in-the-loop mode parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the decision and the scope of detection, then return shape, then the feedback escape hatch. No sentence restates structured data unnecessarily.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter classifier with full enum documentation and an output schema, the description covers purpose, obfuscation scope, cost, and the correction workflow. Nothing an agent needs before calling it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the enum descriptions (mask, mode, policy, context, country) are already richer than anything in the tool description. The description adds no parameter-level guidance of its own, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Decide whether one text should be allowed') and enumerates the exact content classes it judges, including obfuscation handling. The singular 'one text' scopes it against the sibling check_batch without needing either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear operating condition and a corrective path: 'If the action is wrong, report it with report_result and the result's id.' It does not explicitly route multi-text callers to check_batch, so the when-not case is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_integration_snippetGet an integration recipeA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
languageYesThe programming language of the recipe.
platformYesWhere the check runs: the auth or backend platform the app uses, a game engine, or http for any server.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false). The description adds value beyond them by clarifying the return ('code to paste') and that it is 'free' and performs no text checking, though it says nothing about latency or size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned, then when to use it, then the read-only caveat. Slight awkwardness in 'a platform in a language: code to paste', but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two enum parameters, full annotations, and no output schema, the description supplies what an agent needs: what comes back, when to call it, and that it is side-effect free. Return format details beyond 'code to paste' are the only minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters enum-constrained and described, so the schema does the heavy lifting. The description only alludes to 'platform' and 'language' generically and adds no syntax or combination guidance beyond what the enums already state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('complete, runnable recipe for adding Unprofane to a platform in a language') and says exactly what is produced ('code to paste'). The clause 'it checks no text' cleanly separates it from the sibling check_text/check_batch tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it when asked to add a profanity or username filter to an app' gives a concrete triggering scenario. It stops short of explicitly naming the alternative siblings for cases where the agent needs an actual check, but the implied contrast is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageGet usage this periodA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
planYes
checksYes
periodYes
routesYes
overageYes
degradedYes
includedYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's job is to add context. It does: 'Counts up to the last full hour' discloses data freshness/possible lag, and 'free' discloses cost, both of which are not in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the primary payload (usage counts) before the breakdown and freshness/cost caveats. It is efficient, though the enumeration is packed enough that a second short sentence separating the freshness/cost note would read better.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is already covered; the description adds the freshness window and cost profile an agent needs before calling. The only real gap is the absence of usage guidance relative to siblings, which is minor for a zero-param read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No misleading parameter language is present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: the checks this key's account consumed in the current billing period, plan allowance, overage, and the breakdown by rules/model/cache. An agent knows exactly what data comes back without opening the schema, and no sibling tool overlaps this functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to call this versus alternatives, nor any preconditions. 'Read-only and free' weakly implies it is safe to call at will, but the agent must infer that on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

report_resultReport a wrong resultAInspect

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.

NameRequiredDescriptionDefault
noteNoWhy, in a sentence: what the text means where it was written.
textNoThe text itself, only if its writer's permission allows: it is kept with the account so a person can read it, and deleted with the account. Omit it and the report carries the id alone.
verdictYesfalse_positive: blocked or held something fine. false_negative: allowed something it should not have. correct: right, worth saying for a close call.
check_idYesThe "id" of the result being reported (chk_...).
expected_actionNoThe action the check should have taken, when you know it.

Output Schema

NameRequiredDescription
idYes
receivedYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: the write leaves results untouched and counts no check, a human reviews every report, and fixes only land in a later engine (implying no immediate effect). This complements readOnlyHint=false/destructiveHint=false with the actual side-effect scope and review latency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and its arguments, followed by the behavioral payoff. No filler or repetition; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple feedback-write tool with an output schema, full schema coverage and annotations that establish the write profile, the description supplies the missing pieces (no effect on results, human review, delayed fix). Nothing needed to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents check_id, verdict, expected_action, note and text including retention/permission caveats. The description only restates the same fields ('the result's id, the verdict and ... the action it should have taken'), adding no syntax or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: report that a check got it wrong (or right), with the id, verdict and suggested action. It is clearly distinguished from the sibling check_* tools, which produce results, while this one reports feedback on them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use: every report is read by a person and corrections ship in a later engine, and the verdict guidance covers the close-call 'correct' case. It never names an alternative tool or an explicit trigger such as 'call this after check_text returns a disputed result', so routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedcheck_batch1 field changed
      • changedOutput schema / properties / results / items / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "id": {
        -        "type": "string"
        -      },
        -      "result": {
        -        "properties": {
        -          "action": {
        -            "enum": [
        -              "allow",
        -              "review",
        -              "block"
        -            ],
        -            "type": "string"
        -          },
        -          "allowed": {
        -            "type": "boolean"
        -          },
        -          "categories": {
        -            "properties": {
        -              "insult": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "mild_profanity": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "profanity": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "reserved": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "rude": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "self_harm": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "sexual": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "sexual_minors": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "slur": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "threat": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              }
        -            },
        -            "required": [
        -              "mild_profanity",
        -              "profanity",
        -              "sexual",
        -              "insult",
        -              "slur",
        -              "threat",
        -              "rude",
        -              "sexual_minors",
        -              "self_harm",
        -              "reserved"
        -            ],
        -            "type": "object"
        -          },
        -          "censored": {
        -            "type": "string"
        -          },
        -          "engine": {
        -            "properties": {
        -              "degraded": {
        -                "type": "boolean"
        -              },
        -              "route": {
        -                "enum": [
        -                  "rules",
        -                  "model",
        -                  "cache"
        -                ],
        -                "type": "string"
        -              },
        -              "version": {
        -                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "version",
        -              "route",
        -              "degraded"
        -            ],
        -            "type": "object"
        -          },
        -          "evasion": {
        -            "items": {
        -              "enum": [
        -                "homoglyph",
        -                "zero_width",
        -                "separator",
        -                "leetspeak",
        -                "repeated_chars",
        -                "diacritics",
        -                "mixed_script",
        -                "fullwidth",
        -                "combining_marks",
        -                "phonetic",
        -                "reversed",
        -                "concatenation",
        -                "case_mixing",
        -                "self_censored",
        -                "misspelled",
        -                "spoonerism",
        -                "pun"
        -              ],
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "id": {
        -            "pattern": "^chk_[A-Za-z0-9]{16,32}$",
        -            "type": "string"
        -          },
        -          "language": {
        -            "properties": {
        -              "confidence": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "detected": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "detected",
        -              "confidence"
        -            ],
        -            "type": "object"
        -          },
        -          "matches": {
        -            "items": {
        -              "properties": {
        -                "category": {
        -                  "enum": [
        -                    "profanity",
        -                    "sexual",
        -                    "insult",
        -                    "slur",
        -                    "threat",
        -                    "reserved"
        -                  ],
        -                  "type": "string"
        -                },
        -                "end": {
        -                  "maximum": 9007199254740991,
        -                  "minimum": 0,
        -                  "type": "integer"
        -                },
        -                "evasion": {
        -                  "items": {
        -                    "enum": [
        -                      "homoglyph",
        -                      "zero_width",
        -                      "separator",
        -                      "leetspeak",
        -                      "repeated_chars",
        -                      "diacritics",
        -                      "mixed_script",
        -                      "fullwidth",
        -                      "combining_marks",
        -                      "phonetic",
        -                      "reversed",
        -                      "concatenation",
        -                      "case_mixing",
        -                      "self_censored",
        -                      "misspelled",
        -                      "spoonerism",
        -                      "pun"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  "type": "array"
        -                },
        -                "normalized": {
        -                  "type": "string"
        -                },
        -                "severity": {
        -                  "enum": [
        -                    "none",
        -                    "mild",
        -                    "moderate",
        -                    "strong",
        -                    "extreme"
        -                  ],
        -                  "type": "string"
        -                },
        -                "start": {
        -                  "maximum": 9007199254740991,
        -                  "minimum": 0,
        -                  "type": "integer"
        -                },
        -                "term_id": {
        -                  "type": "string"
        -                },
        -                "text": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "start",
        -                "end",
        -                "text",
        -                "normalized",
        -                "term_id",
        -                "category",
        -                "severity",
        -                "evasion"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "obfuscated": {
        -            "type": "boolean"
        -          },
        -          "reason": {
        -            "type": "string"
        -          },
        -          "score": {
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "severity": {
        -            "enum": [
        -              "none",
        -              "mild",
        -              "moderate",
        -              "strong",
        -              "extreme"
        -            ],
        -            "type": "string"
        -          },
        -          "timing_ms": {
        -            "minimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "allowed",
        -          "action",
        -          "score",
        -          "severity",
        -          "categories",
        -          "obfuscated",
        -          "evasion",
        -          "matches",
        -          "censored",
        -          "reason",
        -          "language",
        -          "engine",
        -          "timing_ms"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "result"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "error": {
        -        "type": "string"
        -      },
        -      "id": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "error"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "id": {
        +        "type": "string"
        +      },
        +      "result": {
        +        "properties": {
        +          "action": {
        +            "enum": [
        +              "allow",
        +              "review",
        +              "block"
        +            ],
        +            "type": "string"
        +          },
        +          "allowed": {
        +            "type": "boolean"
        +          },
        +          "categories": {
        +            "properties": {
        +              "insult": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "mild_profanity": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "profanity": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "reserved": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "rude": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "self_harm": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "sexual": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "sexual_minors": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "slur": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "threat": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "mild_profanity",
        +              "profanity",
        +              "sexual",
        +              "insult",
        +              "slur",
        +              "threat",
        +              "rude",
        +              "sexual_minors",
        +              "self_harm",
        +              "reserved"
        +            ],
        +            "type": "object"
        +          },
        +          "censored": {
        +            "type": "string"
        +          },
        +          "decided_by": {
        +            "items": {
        +              "properties": {
        +                "action": {
        +                  "enum": [
        +                    "review",
        +                    "block"
        +                  ],
        +                  "type": "string"
        +                },
        +                "category": {
        +                  "enum": [
        +                    "mild_profanity",
        +                    "profanity",
        +                    "sexual",
        +                    "insult",
        +                    "slur",
        +                    "threat",
        +                    "rude",
        +                    "sexual_minors",
        +                    "self_harm",
        +                    "reserved"
        +                  ],
        +                  "type": "string"
        +                },
        +                "from": {
        +                  "enum": [
        +                    "words",
        +                    "context"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "category",
        +                "action",
        +                "from"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "engine": {
        +            "properties": {
        +              "degraded": {
        +                "type": "boolean"
        +              },
        +              "route": {
        +                "enum": [
        +                  "rules",
        +                  "model",
        +                  "cache"
        +                ],
        +                "type": "string"
        +              },
        +              "version": {
        +                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "version",
        +              "route",
        +              "degraded"
        +            ],
        +            "type": "object"
        +          },
        +          "evasion": {
        +            "items": {
        +              "enum": [
        +                "homoglyph",
        +                "zero_width",
        +                "separator",
        +                "leetspeak",
        +                "repeated_chars",
        +                "diacritics",
        +                "mixed_script",
        +                "fullwidth",
        +                "combining_marks",
        +                "phonetic",
        +                "reversed",
        +                "concatenation",
        +                "case_mixing",
        +                "self_censored",
        +                "misspelled",
        +                "spoonerism",
        +                "pun"
        +              ],
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "id": {
        +            "pattern": "^chk_[A-Za-z0-9]{16,32}$",
        +            "type": "string"
        +          },
        +          "language": {
        +            "properties": {
        +              "confidence": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "detected": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "detected",
        +              "confidence"
        +            ],
        +            "type": "object"
        +          },
        +          "matches": {
        +            "items": {
        +              "properties": {
        +                "category": {
        +                  "enum": [
        +                    "profanity",
        +                    "sexual",
        +                    "insult",
        +                    "slur",
        +                    "threat",
        +                    "reserved"
        +                  ],
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "evasion": {
        +                  "items": {
        +                    "enum": [
        +                      "homoglyph",
        +                      "zero_width",
        +                      "separator",
        +                      "leetspeak",
        +                      "repeated_chars",
        +                      "diacritics",
        +                      "mixed_script",
        +                      "fullwidth",
        +                      "combining_marks",
        +                      "phonetic",
        +                      "reversed",
        +                      "concatenation",
        +                      "case_mixing",
        +                      "self_censored",
        +                      "misspelled",
        +                      "spoonerism",
        +                      "pun"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "normalized": {
        +                  "type": "string"
        +                },
        +                "severity": {
        +                  "enum": [
        +                    "none",
        +                    "mild",
        +                    "moderate",
        +                    "strong",
        +                    "extreme"
        +                  ],
        +                  "type": "string"
        +                },
        +                "start": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "term_id": {
        +                  "type": "string"
        +                },
        +                "text": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "start",
        +                "end",
        +                "text",
        +                "normalized",
        +                "term_id",
        +                "category",
        +                "severity",
        +                "evasion"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "obfuscated": {
        +            "type": "boolean"
        +          },
        +          "reason": {
        +            "type": "string"
        +          },
        +          "score": {
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "severity": {
        +            "enum": [
        +              "none",
        +              "mild",
        +              "moderate",
        +              "strong",
        +              "extreme"
        +            ],
        +            "type": "string"
        +          },
        +          "timing_ms": {
        +            "minimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "allowed",
        +          "action",
        +          "score",
        +          "severity",
        +          "categories",
        +          "obfuscated",
        +          "evasion",
        +          "matches",
        +          "censored",
        +          "reason",
        +          "decided_by",
        +          "language",
        +          "engine",
        +          "timing_ms"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "result"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "error": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "error"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedcheck_text2 fields changed
      • addedOutput schema / properties / decided_by
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "action": {
        +        "enum": [
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "category": {
        +        "enum": [
        +          "mild_profanity",
        +          "profanity",
        +          "sexual",
        +          "insult",
        +          "slur",
        +          "threat",
        +          "rude",
        +          "sexual_minors",
        +          "self_harm",
        +          "reserved"
        +        ],
        +        "type": "string"
        +      },
        +      "from": {
        +        "enum": [
        +          "words",
        +          "context"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "category",
        +      "action",
        +      "from"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "allowed",
        -  "action",
        -  "score",
        -  "severity",
        -  "categories",
        -  "obfuscated",
        -  "evasion",
        -  "matches",
        -  "censored",
        -  "reason",
        -  "language",
        -  "engine",
        -  "timing_ms"
        -]New value: +[
        +  "id",
        +  "allowed",
        +  "action",
        +  "score",
        +  "severity",
        +  "categories",
        +  "obfuscated",
        +  "evasion",
        +  "matches",
        +  "censored",
        +  "reason",
        +  "decided_by",
        +  "language",
        +  "engine",
        +  "timing_ms"
        +]
  2. 2 tool updates
    • Changedcheck_batch1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"How much to ask the model: fast never asks the model; balanced, the default, asks it about every text the rules do not block outright; thorough asks it about every text. Omit for the project's default."New value: +"How much to ask the model: fast never asks the model; balanced, the default, asks it about every text but a word or two the rules block outright; thorough asks it about every text. Omit for the project's default."
    • Changedcheck_text1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"How much to ask the model: fast never asks the model; balanced, the default, asks it about every text the rules do not block outright; thorough asks it about every text. Omit for the project's default."New value: +"How much to ask the model: fast never asks the model; balanced, the default, asks it about every text but a word or two the rules block outright; thorough asks it about every text. Omit for the project's default."
  3. 2 tool updates
    • Changedcheck_batch3 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Where the readers are, as a two-letter country code (MX, ES, BR): a word rude in some countries and innocent in others is read as theirs reads it. Omit to count a word rude anywhere.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / policy / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "kids",
        -      "teen",
        -      "standard",
        -      "strict"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "pattern": "^pol_[A-Za-z0-9]{8,32}$",
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "insult": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "mild_profanity": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "profanity": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "reserved": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "rude": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "self_harm": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "sexual": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "sexual_minors": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "slur": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "threat": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "kids",
        +      "teen",
        +      "standard",
        +      "strict",
        +      "casual"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "pattern": "^pol_[A-Za-z0-9]{8,32}$",
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "insult": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "mild_profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "reserved": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "rude": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "self_harm": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual_minors": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "slur": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "threat": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / policy / description
        Previous value: -"How strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default."New value: +"How strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces), casual (swearing welcome, swearing at someone still blocked). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default."
    • Changedcheck_text3 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Where the readers are, as a two-letter country code (MX, ES, BR): a word rude in some countries and innocent in others is read as theirs reads it. Omit to count a word rude anywhere.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / policy / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "kids",
        -      "teen",
        -      "standard",
        -      "strict"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "pattern": "^pol_[A-Za-z0-9]{8,32}$",
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "insult": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "mild_profanity": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "profanity": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "reserved": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "rude": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "self_harm": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "sexual": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "sexual_minors": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "slur": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      },
        -      "threat": {
        -        "enum": [
        -          "allow",
        -          "review",
        -          "block"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "kids",
        +      "teen",
        +      "standard",
        +      "strict",
        +      "casual"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "pattern": "^pol_[A-Za-z0-9]{8,32}$",
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "insult": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "mild_profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "reserved": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "rude": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "self_harm": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual_minors": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "slur": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "threat": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / policy / description
        Previous value: -"How strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default."New value: +"How strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces), casual (swearing welcome, swearing at someone still blocked). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default."
  4. 2 tool updates
    • Addedget_usage
    • Addedreport_result
  5. 3 tool updates
    • Changedcheck_batch19 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / context / description
        Added value: +"Where the text is shown, which changes how it is read: username (a public handle; reserved names match), display_name (a name beside content), comment, chat, gaming (taunts about play are not abuse), review, educational (quoted words are discussed, not used), creative (dialogue in fiction), custom_text (engraving or printing), general (anything else). Omit for the project's default, general unless the project set one."
      • addedInput schema / properties / context / enum
        Added value: +[
        +  "general",
        +  "username",
        +  "display_name",
        +  "comment",
        +  "chat",
        +  "gaming",
        +  "educational",
        +  "creative",
        +  "review",
        +  "custom_text"
        +]
      • addedInput schema / properties / items / description
        Added value: +"The texts to check, each with an id of yours to match its result."
      • addedInput schema / properties / items / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / items / items / properties / id / description
        Added value: +"Your id for this text, returned with its result."
      • addedInput schema / properties / items / items / properties / id / maxLength
        Added value: +64
      • addedInput schema / properties / items / items / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / items / items / properties / text / description
        Added value: +"The text to check, exactly as the person typed it: up to 10,000 characters, 64 for a username or display name."
      • addedInput schema / properties / items / items / properties / text / maxLength
        Added value: +10000
      • addedInput schema / properties / items / items / properties / text / minLength
        Added value: +1
      • addedInput schema / properties / items / minItems
        Added value: +1
      • addedInput schema / properties / language / description
        Added value: +"The language the text is in, when you know it: a short text that shows no other language is read in it. Defaults to auto."
      • addedInput schema / properties / mask
        Added value: +{
        +  "description": "How \"censored\" hides a matched word: asterisk (****), first_letter (f***), grawlix (#$@!) or remove. Omit for the project's default, asterisk unless the project set one.",
        +  "enum": [
        +    "asterisk",
        +    "first_letter",
        +    "grawlix",
        +    "remove"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "How much to ask the model: fast never asks the model; balanced, the default, asks it about every text the rules do not block outright; thorough asks it about every text. Omit for the project's default.",
        +  "enum": [
        +    "fast",
        +    "balanced",
        +    "thorough"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / policy / anyOf
        Added value: +[
        +  {
        +    "enum": [
        +      "kids",
        +      "teen",
        +      "standard",
        +      "strict"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "pattern": "^pol_[A-Za-z0-9]{8,32}$",
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "insult": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "mild_profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "reserved": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "rude": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "self_harm": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual_minors": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "slur": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "threat": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / policy / description
        Added value: +"How strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default."
      • removedInput schema / properties / policy / type
        Removed value: -"string"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "id": {
        +                "type": "string"
        +              },
        +              "result": {
        +                "properties": {
        +                  "action": {
        +                    "enum": [
        +                      "allow",
        +                      "review",
        +                      "block"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "allowed": {
        +                    "type": "boolean"
        +                  },
        +                  "categories": {
        +                    "properties": {
        +                      "insult": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "mild_profanity": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "profanity": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "reserved": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "rude": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "self_harm": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "sexual": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "sexual_minors": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "slur": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "threat": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      }
        +                    },
        +                    "required": [
        +                      "mild_profanity",
        +                      "profanity",
        +                      "sexual",
        +                      "insult",
        +                      "slur",
        +                      "threat",
        +                      "rude",
        +                      "sexual_minors",
        +                      "self_harm",
        +                      "reserved"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "censored": {
        +                    "type": "string"
        +                  },
        +                  "engine": {
        +                    "properties": {
        +                      "degraded": {
        +                        "type": "boolean"
        +                      },
        +                      "route": {
        +                        "enum": [
        +                          "rules",
        +                          "model",
        +                          "cache"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "version": {
        +                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "version",
        +                      "route",
        +                      "degraded"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "evasion": {
        +                    "items": {
        +                      "enum": [
        +                        "homoglyph",
        +                        "zero_width",
        +                        "separator",
        +                        "leetspeak",
        +                        "repeated_chars",
        +                        "diacritics",
        +                        "mixed_script",
        +                        "fullwidth",
        +                        "combining_marks",
        +                        "phonetic",
        +                        "reversed",
        +                        "concatenation",
        +                        "case_mixing",
        +                        "self_censored",
        +                        "misspelled",
        +                        "spoonerism",
        +                        "pun"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "id": {
        +                    "pattern": "^chk_[A-Za-z0-9]{16,32}$",
        +                    "type": "string"
        +                  },
        +                  "language": {
        +                    "properties": {
        +                      "confidence": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "detected": {
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "detected",
        +                      "confidence"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "matches": {
        +                    "items": {
        +                      "properties": {
        +                        "category": {
        +                          "enum": [
        +                            "profanity",
        +                            "sexual",
        +                            "insult",
        +                            "slur",
        +                            "threat",
        +                            "reserved"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "end": {
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "evasion": {
        +                          "items": {
        +                            "enum": [
        +                              "homoglyph",
        +                              "zero_width",
        +                              "separator",
        +                              "leetspeak",
        +                              "repeated_chars",
        +                              "diacritics",
        +                              "mixed_script",
        +                              "fullwidth",
        +                              "combining_marks",
        +                              "phonetic",
        +                              "reversed",
        +                              "concatenation",
        +                              "case_mixing",
        +                              "self_censored",
        +                              "misspelled",
        +                              "spoonerism",
        +                              "pun"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "normalized": {
        +                          "type": "string"
        +                        },
        +                        "severity": {
        +                          "enum": [
        +                            "none",
        +                            "mild",
        +                            "moderate",
        +                            "strong",
        +                            "extreme"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "start": {
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "term_id": {
        +                          "type": "string"
        +                        },
        +                        "text": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "start",
        +                        "end",
        +                        "text",
        +                        "normalized",
        +                        "term_id",
        +                        "category",
        +                        "severity",
        +                        "evasion"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "obfuscated": {
        +                    "type": "boolean"
        +                  },
        +                  "reason": {
        +                    "type": "string"
        +                  },
        +                  "score": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "severity": {
        +                    "enum": [
        +                      "none",
        +                      "mild",
        +                      "moderate",
        +                      "strong",
        +                      "extreme"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "timing_ms": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "allowed",
        +                  "action",
        +                  "score",
        +                  "severity",
        +                  "categories",
        +                  "obfuscated",
        +                  "evasion",
        +                  "matches",
        +                  "censored",
        +                  "reason",
        +                  "language",
        +                  "engine",
        +                  "timing_ms"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "result"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "properties": {
        +              "error": {
        +                "type": "string"
        +              },
        +              "id": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "error"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_text11 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / context / description
        Added value: +"Where the text is shown, which changes how it is read: username (a public handle; reserved names match), display_name (a name beside content), comment, chat, gaming (taunts about play are not abuse), review, educational (quoted words are discussed, not used), creative (dialogue in fiction), custom_text (engraving or printing), general (anything else). Omit for the project's default, general unless the project set one."
      • addedInput schema / properties / mask / description
        Added value: +"How \"censored\" hides a matched word: asterisk (****), first_letter (f***), grawlix (#$@!) or remove. Omit for the project's default, asterisk unless the project set one."
      • addedInput schema / properties / mode / description
        Added value: +"How much to ask the model: fast never asks the model; balanced, the default, asks it about every text the rules do not block outright; thorough asks it about every text. Omit for the project's default."
      • addedInput schema / properties / policy / anyOf
        Added value: +[
        +  {
        +    "enum": [
        +      "kids",
        +      "teen",
        +      "standard",
        +      "strict"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "pattern": "^pol_[A-Za-z0-9]{8,32}$",
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "insult": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "mild_profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "profanity": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "reserved": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "rude": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "self_harm": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "sexual_minors": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "slur": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      },
        +      "threat": {
        +        "enum": [
        +          "allow",
        +          "review",
        +          "block"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / policy / description
        Added value: +"How strict to be. A preset: kids (under 13, blocks everything), teen, standard (adults; the default), strict (brand-safe surfaces). Or a saved policy id (pol_...), or an object giving an action per category. Omit for the project's default."
      • removedInput schema / properties / policy / enum
        Removed value: -[
        -  "kids",
        -  "teen",
        -  "standard",
        -  "strict"
        -]
      • removedInput schema / properties / policy / type
        Removed value: -"string"
      • addedInput schema / properties / text / description
        Added value: +"The text to check, exactly as the person typed it: up to 10,000 characters, 64 for a username or display name."
      • addedInput schema / properties / text / minLength
        Added value: +1
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "action": {
        +      "enum": [
        +        "allow",
        +        "review",
        +        "block"
        +      ],
        +      "type": "string"
        +    },
        +    "allowed": {
        +      "type": "boolean"
        +    },
        +    "categories": {
        +      "properties": {
        +        "insult": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "mild_profanity": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "profanity": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "reserved": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "rude": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "self_harm": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "sexual": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "sexual_minors": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "slur": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "threat": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "mild_profanity",
        +        "profanity",
        +        "sexual",
        +        "insult",
        +        "slur",
        +        "threat",
        +        "rude",
        +        "sexual_minors",
        +        "self_harm",
        +        "reserved"
        +      ],
        +      "type": "object"
        +    },
        +    "censored": {
        +      "type": "string"
        +    },
        +    "engine": {
        +      "properties": {
        +        "degraded": {
        +          "type": "boolean"
        +        },
        +        "route": {
        +          "enum": [
        +            "rules",
        +            "model",
        +            "cache"
        +          ],
        +          "type": "string"
        +        },
        +        "version": {
        +          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "version",
        +        "route",
        +        "degraded"
        +      ],
        +      "type": "object"
        +    },
        +    "evasion": {
        +      "items": {
        +        "enum": [
        +          "homoglyph",
        +          "zero_width",
        +          "separator",
        +          "leetspeak",
        +          "repeated_chars",
        +          "diacritics",
        +          "mixed_script",
        +          "fullwidth",
        +          "combining_marks",
        +          "phonetic",
        +          "reversed",
        +          "concatenation",
        +          "case_mixing",
        +          "self_censored",
        +          "misspelled",
        +          "spoonerism",
        +          "pun"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "id": {
        +      "pattern": "^chk_[A-Za-z0-9]{16,32}$",
        +      "type": "string"
        +    },
        +    "language": {
        +      "properties": {
        +        "confidence": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "detected": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "detected",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "matches": {
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "enum": [
        +              "profanity",
        +              "sexual",
        +              "insult",
        +              "slur",
        +              "threat",
        +              "reserved"
        +            ],
        +            "type": "string"
        +          },
        +          "end": {
        +            "maximum": 9007199254740991,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "evasion": {
        +            "items": {
        +              "enum": [
        +                "homoglyph",
        +                "zero_width",
        +                "separator",
        +                "leetspeak",
        +                "repeated_chars",
        +                "diacritics",
        +                "mixed_script",
        +                "fullwidth",
        +                "combining_marks",
        +                "phonetic",
        +                "reversed",
        +                "concatenation",
        +                "case_mixing",
        +                "self_censored",
        +                "misspelled",
        +                "spoonerism",
        +                "pun"
        +              ],
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "normalized": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "enum": [
        +              "none",
        +              "mild",
        +              "moderate",
        +              "strong",
        +              "extreme"
        +            ],
        +            "type": "string"
        +          },
        +          "start": {
        +            "maximum": 9007199254740991,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "term_id": {
        +            "type": "string"
        +          },
        +          "text": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "text",
        +          "normalized",
        +          "term_id",
        +          "category",
        +          "severity",
        +          "evasion"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "obfuscated": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "score": {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "severity": {
        +      "enum": [
        +        "none",
        +        "mild",
        +        "moderate",
        +        "strong",
        +        "extreme"
        +      ],
        +      "type": "string"
        +    },
        +    "timing_ms": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "allowed",
        +    "action",
        +    "score",
        +    "severity",
        +    "categories",
        +    "obfuscated",
        +    "evasion",
        +    "matches",
        +    "censored",
        +    "reason",
        +    "language",
        +    "engine",
        +    "timing_ms"
        +  ],
        +  "type": "object"
        +}
    • Changedget_integration_snippet3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / language / description
        Added value: +"The programming language of the recipe."
      • addedInput schema / properties / platform / description
        Added value: +"Where the check runs: the auth or backend platform the app uses, a game engine, or http for any server."
  6. 2 tool updates
    • Changedcheck_batch1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "enum": [
        +    "auto",
        +    "en",
        +    "es",
        +    "pt",
        +    "fr",
        +    "de",
        +    "it",
        +    "nl",
        +    "pl",
        +    "tr",
        +    "ru",
        +    "ar",
        +    "he",
        +    "hi",
        +    "id",
        +    "ja",
        +    "zh",
        +    "ko"
        +  ],
        +  "type": "string"
        +}
    • Changedcheck_text1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "The language the text is in, when you know it: a short text that shows no other language is read in it. Defaults to auto.",
        +  "enum": [
        +    "auto",
        +    "en",
        +    "es",
        +    "pt",
        +    "fr",
        +    "de",
        +    "it",
        +    "nl",
        +    "pl",
        +    "tr",
        +    "ru",
        +    "ar",
        +    "he",
        +    "hi",
        +    "id",
        +    "ja",
        +    "zh",
        +    "ko"
        +  ],
        +  "type": "string"
        +}
  7. 3 tool updates
    • First observedcheck_batch
    • First observedcheck_text
    • First observedget_integration_snippet

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Content moderation and profanity detection MCP server with 19 tools, 24 language support, leetspeak/Unicode obfuscation detection, context-aware analysis, batch processing, and user tracking for AI-powered content safety.
    24
    4 npm
    65
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides a single-purpose content-moderation gate that evaluates text and returns structured verdicts (spam/toxic probabilities, severity, confidence) with suggested actions (allow/review/block) for automated decision-making.
    1
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Stdio MCP server (Python, standard library only, server.py in this repo) with one tool, analyze_toxicity: scores English text for toxicity, insults, profanity, threats and identity attacks (0 to 1). Perspective API compatible. No LLM.
    4
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to detect and censor English profanity, including obfuscated spellings, through a single MCP tool. It uses a word list rather than AI.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources