Skip to main content
Glama
Jambozx

OnlineCyberTools MCP (280+ filterable tools)

by Jambozx

text_palindrome_checker

Read-onlyIdempotent

Identify if text reads the same forwards and backwards (palindrome), with word-by-word analysis and options to ignore case, spaces, and punctuation.

Instructions

Palindrome Checker. Check whether text reads the same forwards and backwards, at the whole-string level and per individual word, with options to ignore case, spaces, and punctuation. Use this to detect palindromes (for example racecar, or A man a plan a canal Panama) and to list which words in a phrase are palindromic; use text_reverse_text instead when you only need to flip text without a same-forwards-backwards verdict, or text_anagram_generator to rearrange letters. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests per minute for anonymous callers). Returns an isPalindrome boolean, the processed and reversed strings, the palindrome center, per-word analysis, and summary statistics.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYesText to test for palindrome (must not be blank). Whitespace, case, and punctuation are handled per the options below.
caseSensitiveNoWhen true, uppercase and lowercase letters are treated as distinct; when false (default) the comparison is case-insensitive.
ignoreSpacesNoWhen true (default) all whitespace is stripped before comparison, so spaced phrases can still qualify; when false spaces must mirror.
ignorePunctuationNoWhen true (default) punctuation and symbols (anything that is not a letter, digit, or space) are stripped before comparison; when false they must mirror.
analyzeWordsNoWhen true (default) each whitespace-separated word is also tested individually and reported under wordAnalysis; when false only the whole-string verdict is computed.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
successNoWhether the check succeeded.
resultNoWhole-string palindrome verdict and the strings it was derived from.
wordAnalysisNoPer-word results, present only when analyzeWords is true.
palindromicWordsNoSubset of wordAnalysis whose entries are palindromes.
nonPalindromicWordsNoSubset of wordAnalysis whose entries are not palindromes.
statisticsNoAggregate counts over the input and the per-word analysis.
optionsNoThe effective options after defaults were applied.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.5.1
    • changedInput schema / additionalProperties
      Previous value: -trueNew value: +false
    • addedInput schema / properties
      Added value: +{
      +  "analyzeWords": {
      +    "default": true,
      +    "description": "When true (default) each whitespace-separated word is also tested individually and reported under wordAnalysis; when false only the whole-string verdict is computed.",
      +    "type": "boolean"
      +  },
      +  "caseSensitive": {
      +    "default": false,
      +    "description": "When true, uppercase and lowercase letters are treated as distinct; when false (default) the comparison is case-insensitive.",
      +    "type": "boolean"
      +  },
      +  "ignorePunctuation": {
      +    "default": true,
      +    "description": "When true (default) punctuation and symbols (anything that is not a letter, digit, or space) are stripped before comparison; when false they must mirror.",
      +    "type": "boolean"
      +  },
      +  "ignoreSpaces": {
      +    "default": true,
      +    "description": "When true (default) all whitespace is stripped before comparison, so spaced phrases can still qualify; when false spaces must mirror.",
      +    "type": "boolean"
      +  },
      +  "text": {
      +    "description": "Text to test for palindrome (must not be blank). Whitespace, case, and punctuation are handled per the options below.",
      +    "type": "string"
      +  }
      +}
    • addedInput schema / required
      Added value: +[
      +  "text"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "nonPalindromicWords": {
      +      "description": "Subset of wordAnalysis whose entries are not palindromes.",
      +      "items": {
      +        "description": "A word-analysis entry (same shape as wordAnalysis items).",
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "options": {
      +      "description": "The effective options after defaults were applied.",
      +      "properties": {
      +        "analyzeWords": {
      +          "description": "Effective analyze-words setting.",
      +          "type": "boolean"
      +        },
      +        "caseSensitive": {
      +          "description": "Effective case-sensitivity setting.",
      +          "type": "boolean"
      +        },
      +        "ignorePunctuation": {
      +          "description": "Effective ignore-punctuation setting.",
      +          "type": "boolean"
      +        },
      +        "ignoreSpaces": {
      +          "description": "Effective ignore-spaces setting.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "palindromicWords": {
      +      "description": "Subset of wordAnalysis whose entries are palindromes.",
      +      "items": {
      +        "description": "A word-analysis entry (same shape as wordAnalysis items).",
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "result": {
      +      "description": "Whole-string palindrome verdict and the strings it was derived from.",
      +      "properties": {
      +        "centerInfo": {
      +          "description": "Center of the palindrome when isPalindrome is true, otherwise null.",
      +          "properties": {
      +            "character": {
      +              "description": "The center character for a single center.",
      +              "type": "string"
      +            },
      +            "characters": {
      +              "description": "The two center characters for a double center.",
      +              "type": "string"
      +            },
      +            "position": {
      +              "description": "Zero-based index of the center character for a single center.",
      +              "type": "integer"
      +            },
      +            "positions": {
      +              "description": "The two zero-based center indices for a double center.",
      +              "items": {
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "type": {
      +              "description": "Either single (odd length, one center char) or double (even length, two center chars).",
      +              "type": "string"
      +            }
      +          },
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        },
      +        "isPalindrome": {
      +          "description": "True when the processed text equals its reverse.",
      +          "type": "boolean"
      +        },
      +        "originalText": {
      +          "description": "The submitted text, echoed back unmodified.",
      +          "type": "string"
      +        },
      +        "processedText": {
      +          "description": "The text after applying the case/space/punctuation options.",
      +          "type": "string"
      +        },
      +        "reversedText": {
      +          "description": "The processed text reversed character by character.",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "statistics": {
      +      "description": "Aggregate counts over the input and the per-word analysis.",
      +      "properties": {
      +        "charactersIgnored": {
      +          "description": "Characters removed by the options (originalLength minus processedLength).",
      +          "type": "integer"
      +        },
      +        "longestPalindromicWord": {
      +          "description": "Length of the longest palindromic word, or 0 if none.",
      +          "type": "integer"
      +        },
      +        "nonPalindromicWords": {
      +          "description": "Count of words that are not palindromes.",
      +          "type": "integer"
      +        },
      +        "originalLength": {
      +          "description": "Character length of the original text.",
      +          "type": "integer"
      +        },
      +        "palindromicWords": {
      +          "description": "Count of words that are palindromes.",
      +          "type": "integer"
      +        },
      +        "processedLength": {
      +          "description": "Character length of the processed text.",
      +          "type": "integer"
      +        },
      +        "shortestPalindromicWord": {
      +          "description": "Length of the shortest palindromic word, or 0 if none.",
      +          "type": "integer"
      +        },
      +        "totalWords": {
      +          "description": "Number of words analyzed.",
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "success": {
      +      "description": "Whether the check succeeded.",
      +      "type": "boolean"
      +    },
      +    "wordAnalysis": {
      +      "description": "Per-word results, present only when analyzeWords is true.",
      +      "items": {
      +        "properties": {
      +          "isPalindrome": {
      +            "description": "Whether this single word is a palindrome.",
      +            "type": "boolean"
      +          },
      +          "length": {
      +            "description": "Character length of the processed word.",
      +            "type": "integer"
      +          },
      +          "original": {
      +            "description": "The word as it appeared in the input.",
      +            "type": "string"
      +          },
      +          "processed": {
      +            "description": "The word after applying case/punctuation options.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. Description adds valuable context: runs locally, no external service, rate-limited (60 req/min), and details return fields (isPalindrome, reversed strings, per-word analysis, etc.), going beyond annotations.

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?

The description is well-structured: starts with purpose, then usage guidelines with alternatives, followed by behavioral context, and ends with output summary. It is front-loaded and every sentence adds value, though somewhat lengthy, it remains informative without redundancy.

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?

Given the presence of an output schema (context indicates has output schema: true), the description does not need to detail return values but does mention key fields. It covers all aspects: functionality, options, behavior, limitations (rate limit, local execution), and comparisons with siblings, making it complete for an AI agent.

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% with good descriptions. The description adds context by summarizing options (caseSensitive, ignoreSpaces, ignorePunctuation, analyzeWords) and their effects, but does not provide new parameter-specific details beyond the schema. Slight added value over 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?

The description clearly states the tool checks if text reads the same forwards and backwards at whole-string and per-word levels, with options to ignore case/spaces/punctuation. It distinguishes from siblings text_reverse_text and text_anagram_generator by specifying when to use each.

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?

Explicitly states when to use this tool (palindrome detection) and when to use alternatives (reverse_text for flipping, anagram_generator for rearranging). Also mentions it runs locally and is rate-limited, providing clear context.

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

Deploy Server

Other Tools