> For the complete documentation index, see [llms.txt](https://docs.ibexa.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ibexa.ai/manual/organisation/built-in-mcp-servers/content-validation-tools-mcp-servers.md).

# Content Validation MCP Servers

The platform includes a family of **20 built-in, single-purpose MCP servers**, each attached to one specialized content-generation agent (headline writer, FAQ generator, sentiment analyzer, translator's sibling tools, and so on). Every server in this family follows the same pattern:

* It exposes **exactly one tool**, named `validate_*`.
* That tool is a **pure function** - it only reads the arguments the agent passes in (the drafted content plus the constraints it was given). It makes no database calls, no network calls, and has no side effects, so it needs no per-user or per-organisation access checks.
* It runs the same deterministic checks every time, in code - never an AI judgment call - so results are exact and reproducible.
* The agent is instructed to call it once after drafting its answer and, if it reports a problem, fix the answer and call it exactly one more time before returning a best-effort result together with the reported issue codes.

These servers are **not meant to be attached to your own custom agents** in the general case - they are wired internally to the platform's built-in content-generation agents, one server per agent, to give each of them a reliable final check before it returns an answer. They are documented here for transparency about what these built-in agents actually verify.

## Connection Parameters

Every server in this family is internal (built-in, no external credentials required) and reachable only at its own fixed address:

| **Server**                       | **Address**                           | **Tool**                  | **Used by**                        |
| -------------------------------- | ------------------------------------- | ------------------------- | ---------------------------------- |
| Alt Text Tools                   | `internal://alt-text-tools`           | `validate_alt_text`       | Alt text generator agent           |
| Classification Tools             | `internal://classification-tools`     | `validate_classification` | Classification agent               |
| De-fluffing Tools                | `internal://defluff-tools`            | `validate_defluff`        | De-fluffing agent                  |
| Expansion Tools                  | `internal://expansion-tools`          | `validate_expansion`      | Expansion agent                    |
| Structured Data Extraction Tools | `internal://extraction-tools`         | `validate_extraction`     | Structured data extraction agent   |
| Facebook Post Tools              | `internal://facebook-post-tools`      | `validate_facebook_post`  | Facebook post generator agent      |
| FAQ Tools                        | `internal://faq-tools`                | `validate_faqs`           | FAQ generator agent                |
| Glossary Tools                   | `internal://glossary-tools`           | `validate_glossary`       | Glossary generator agent           |
| Headline Tools                   | `internal://headline-tools`           | `validate_headlines`      | Headline generator agent           |
| Icebreaker Tools                 | `internal://icebreaker-tools`         | `validate_icebreakers`    | Icebreaker generator agent         |
| LinkedIn Post Tools              | `internal://linkedin-post-tools`      | `validate_linkedin_post`  | LinkedIn post generator agent      |
| Note Taker Tools                 | `internal://note-taker-tools`         | `validate_notes`          | Note taker agent                   |
| Quality Gate Tools               | `internal://quality-gate-tools`       | `validate_quality_gate`   | Quality gate agent                 |
| Sentiment Tools                  | `internal://sentiment-tools`          | `validate_sentiment`      | Sentiment analyzer agent           |
| Spellcheck/Grammar Tools         | `internal://spellcheck-grammar-tools` | `validate_correction`     | Spellcheck and grammar fixer agent |
| Summarization Tools              | `internal://summarization-tools`      | `validate_summary`        | Summarization agent                |
| Text Formatter Tools             | `internal://text-formatter-tools`     | `validate_formatting`     | Text formatter agent               |
| Text Shorthand Tools             | `internal://text-shorthand-tools`     | `validate_shorthand`      | Text shorthand agent               |
| Tone Tools                       | `internal://tone-tools`               | `validate_tone_change`    | Tone-change agent                  |
| X Post Tools                     | `internal://x-post-tools`             | `validate_x_post`         | X post/thread generator agent      |

(The **Translation MCP Server**, `internal://translation-tools`, follows the same pattern and predates this page - see its own [Translation MCP Server](/manual/organisation/built-in-mcp-servers/translation-tools-mcp-server.md) page.)

## Key Concepts

### Blocking vs. Informational Issues

Most checks are **blocking**: if a tool reports one, the agent must fix its answer and re-validate before returning a result. A few checks are **informational only** - they are surfaced in the response (for example, a suspiciously large change in word count, or an unused hashtag) but never force a retry. This distinction is called out per-tool below where it applies.

### Groundedness Checks

A recurring family of checks verifies that content stays **grounded** in its source: numbers, URLs, email addresses, and fenced/inline code blocks that appear in generated or edited text must also appear in the original source content. This catches an agent inventing a figure, altering a link, or "correcting" a code snippet it should have left untouched.

### Two-Call Retry Pattern

Tools used by "editing" agents (de-fluffing, spellcheck/grammar, formatting, shorthand, tone, alt text) allow the agent at most **two calls total**: one initial check, and one re-check after fixing a reported problem. If the second call still reports a blocking issue, the agent returns its best-effort result together with the issue codes rather than retrying indefinitely.

## Available Tools by Server

### Alt Text Tools (`validate_alt_text`)

Validates generated alt text for an image. Checks: (1) when the image is decorative, `alt_text` is the exact empty string - whitespace- or punctuation-only text still counts as non-empty; (2) when not decorative, `alt_text` contains at least one meaningful (alphanumeric) character; (3) `alt_text` doesn't open with a redundant filler phrase like "Image of" or "Picture of".

### Classification Tools (`validate_classification`)

Validates a completed classification. Checks: (1) the chosen `category` is a member of the given taxonomy, or equals the `fallback_category`; (2) `confidence` is a valid number in \[0, 1]; informational checks flag a low confidence for a non-fallback category, and a taxonomy with more categories than can be reliably reasoned over in one call.

### De-fluffing Tools (`validate_defluff`)

Validates a de-fluffing edit (only called when there was source text to edit). Checks: (1) no number in the corrected text is absent from the source (a percent sign counts as part of the figure); (2) no URL in the corrected text is absent from the source; (3) every fenced/inline code block matches the source exactly; (4) the corrected text's estimated Flesch-Kincaid reading grade is close to the requested target grade (informational only).

### Expansion Tools (`validate_expansion`)

Validates a completed text expansion. Checks: (1) the expanded text is non-blank; (2) its word count meets any requested minimum; (3) no number in the expansion is absent from the source content.

### Structured Data Extraction Tools (`validate_extraction`)

Validates a completed structured-data extraction, per record. Checks: (1) every resolved field has exactly one entry - no fewer, no more; (2) every entry's name is a member of the requested fields; (3) a found entry's value is non-blank and appears verbatim in the source content; (4) a found value matches its declared type's shape for `number`/`boolean` fields; informationally flags a required field that wasn't found.

### Facebook Post Tools (`validate_facebook_post`)

Validates a generated Facebook post. Blocking checks guard only genuinely unsafe or disallowed content: post is non-blank; character count within the limit; numbers and any included link are grounded in the source; hashtags/mentions/CTA only appear when allowed, and reported mentions must be within the allowed list; a media suggestion is only present when one was requested. Unused hashtags/mentions/links and excessive hashtags are informational only.

### FAQ Tools (`validate_faqs`)

Validates a generated FAQ set. Checks: (1) no blank questions or answers; (2) no duplicate questions (ignoring case/whitespace/punctuation); (3) no number in any answer is absent from the source content; (4) the FAQ count is within any requested `min`/`max` bounds.

### Glossary Tools (`validate_glossary`)

Validates an extracted glossary before it is written to the Knowledge Base. Checks: (1) no blank terms; (2) every term actually appears in the source content (catching reformatted spellings that no longer match verbatim); (3) no duplicate terms (ignoring case/whitespace/punctuation); (4) every term has a non-blank, reasonably-sized definition; (5) each term's category is one of the allowed categories, or null when none were given; (6) the term count is within any requested `min`/`max` bounds. If validation fails on the second attempt, the glossary is **not** written to the Knowledge Base.

### Headline Tools (`validate_headlines`)

Validates a batch of exactly 7 generated headlines. Checks: (1) exactly 7 were submitted; (2) the category distribution is exactly 2 curiosity, 2 outcome/benefit, 2 problem/pain-point, and 1 contrarian; (3) no headline exceeds 60 characters; (4) no two headlines are exact or near-duplicates; (5) no headline contains an emoji, repeated punctuation, an all-caps word of 5+ letters, or is written entirely in capitals.

### Icebreaker Tools (`validate_icebreakers`)

Validates a batch of generated icebreakers. Checks: (1) the batch has exactly the requested count; (2) no icebreaker is blank; (3) no two are exact or near-duplicates; (4) no icebreaker is phrased as a yes/no question rather than open-ended.

### LinkedIn Post Tools (`validate_linkedin_post`)

Validates a generated LinkedIn post. Same blocking/informational pattern as Facebook Post Tools, without the media-suggestion or link-grounding checks: post is non-blank, within the character limit (3000 by default), numbers grounded in the source, hashtags/mentions/CTA only where allowed.

### Note Taker Tools (`validate_notes`)

Validates a batch of meeting/conversation notes before they're written to the Knowledge Base. Checks: (1) no blank note headings; (2) no blank required fields on any decision, action item, open question, or reference; (3) no number or URL in a note's content is absent from the source transcript; (4) no note's content is excessively long; (5) the note count is within any requested `min`/`max` bounds. Fails to write to the Knowledge Base if the second validation attempt still reports a problem.

### Quality Gate Tools (`validate_quality_gate`)

Validates a completed quality-gate evaluation. Checks: (1) no duplicate criteria names; (2) every resolved criterion has exactly one verdict; (3) every verdict's criterion name is a real criterion; (4) every verdict's reasoning is non-blank; (5) a non-null evidence quote is non-blank and appears verbatim in the content; (6) the reported overall `passed` value is consistent with whether every blocking criterion passed.

### Sentiment Tools (`validate_sentiment`)

Validates a completed sentiment analysis. Checks: (1) the sentiment label is one of positive/negative/neutral/mixed; (2) confidence is a valid number in \[0, 1]; (3) empty or whitespace-only content must be labeled neutral.

### Spellcheck/Grammar Tools (`validate_correction`)

Validates a spelling/grammar correction (only called when there was source text to correct). Checks: (1) the corrected text is non-blank; (2) no number, URL, or email address in the correction is absent from the source; (3) fenced/inline code blocks match the source exactly; informational checks flag a corrected word count or word-level difference ratio that deviates too far from the source, which would suggest paraphrasing rather than correction.

### Summarization Tools (`validate_summary`)

Validates a completed summary. Checks: (1) the summary is non-blank; (2) its word count doesn't exceed any requested maximum; (3) no number in the summary is absent from the source content.

### Text Formatter Tools (`validate_formatting`)

Validates a text-formatting pass (only called when there was source text to format). Checks: (1) the formatted text is non-blank; (2) no number, URL, or email address is absent from the source, including exact presentation; (3) fenced/inline code blocks match the source exactly; informational checks flag a word count or word-level difference ratio that deviates too far from the source (some deviation from added headings/bullets/tables is expected).

### Text Shorthand Tools (`validate_shorthand`)

Validates a shorthand conversion (only called when there was source text to convert). Checks: (1) the shorthand text is non-blank and contains at least one meaningful character; (2) no number, URL, or email address is absent from the source (reformatting a figure's presentation is fine - only the underlying figure is checked); (3) fenced/inline code blocks match the source exactly.

### Tone Tools (`validate_tone_change`)

Validates a tone-changed rewrite. Always called, even when there is nothing to rewrite (an empty source and empty rewrite reports no issues). Checks: (1) the rewritten text is non-blank; (2) no number or URL in the rewrite is absent from the source; informational check flags a word count that deviates too far from the source.

### X Post Tools (`validate_x_post`)

Validates a generated X post or thread draft. Same blocking/informational pattern as Facebook Post Tools, plus a check that a thread has a sane number of segments and that no individual segment exceeds the character limit (280 by default). Informational checks also flag engagement-bait language.
