Skip to main content
Glama

keep_original

Idempotent

Call this only when a rewrite changed a fact, a name, a number, a date, a yes or no or a promise, or reversed the meaning. Different wording, tone, sentence order or style is not a reason: the user wants the rewrite, and your own text sounds like AI. Removed padding is not a changed fact either: pleasantries, empty offers, frames such as "It's worth noting that" and repeats that reright took out (removed_padding) were removed on purpose, and a call that quotes them is refused. Pass the id, a category, the exact phrase from your text as original and the phrase in final_text that replaced it as rewritten, each copied word for word, at most 140 characters. It returns your own text as final_text; use that exactly. When the user's setting is "Only when unsure", it returns status pending with a review_url instead: the user decides between the two versions, so give the user the link, ask them to open it and approve or edit, and call rewrite_result with the id until it is not pending. It works only for a rewrite nobody checked. When the user checked or edited the text, the user's version stands.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>"
    },
    "name": "keep_original"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesthe id returned by rewrite
reasonNonot used; send category, original and rewritten
categoryNorequired: what the rewrite changed, one of fact, name, number, date, negation (a yes or no turned around), promise, other
originalNorequired: the exact phrase from your text that the rewrite changed, copied word for word, at most 140 characters
rewrittenNorequired: the exact phrase in final_text that replaced it, copied word for word, at most 140 characters

Output Schema

NameRequiredDescriptionDefault
idYes
runNo
noteNo
agentNo
reasonNo
statusYes
rewrittenYes
final_textNo
review_urlNo
instructionYes
upgrade_urlNo
removed_paddingNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / removed_padding
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "null",
      +    "array"
      +  ]
      +}
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, it discloses refusal behavior (quotes of removed_padding are refused), the pending/review_url flow under the 'Only when unsure' setting, and the requirement to poll rewrite_result until no longer pending. That is substantive behavior an agent could not infer. It does not explicitly restate the idempotent or non-destructive profile, but the annotations already carry those.

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?

The exclusion rules are front-loaded, which is the right ordering for a guardrail tool, and the call mechanics and return behavior follow. It is dense and slightly long, and contains rough phrasing and a typo ('reright'), but nearly every clause carries an actionable constraint.

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 guardrail tool with five parameters, an output schema and rich annotations, the description covers entry conditions, exclusions, refusal behavior, the review_url branch, and follow-up polling. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it asserts that category, original and rewritten are required in practice even though the schema's required list names only id, and it emphasizes word-for-word copying with a 140-character cap. It also steers the agent away from the unused 'reason' parameter.

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

Purpose4/5

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

The description makes clear this tool overrides a rewrite with the user's own original text, and names the resource ('your own text as final_text'). It is specific enough to distinguish from rewrite and rewrite_result, though the core purpose is stated late rather than in an opening verb+resource sentence.

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

Usage Guidelines5/5

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

It gives explicit when-to-call conditions (fact, name, number, date, yes/no, promise, reversed meaning) and explicit when-not conditions (wording, tone, order, style, removed padding). It also carves out a boundary against the sibling by noting it works only for an unchecked rewrite and that a user-checked version stands.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources