Skip to content

Brainiall NLP

com.brainiall/nlpbrainiall.comstreamable-httpv1.0.0Scanned

Sentiment, toxicity, entity extraction, PII, translation, summary, QA, fraud scoring, safety audit.

22 tools: 1 do something that can't be undone, 16 change things and 5 only read.

Tools: 0 delete, 1 irreversible, 16 write, 5 read.
  • Reads private data · 1
  • Reads text others write · 22
  • Can send data out · 0
  • 2 findings

Tools listed without sign-in. Remote posture

Anlyon alternative

17 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

22 tools

Can't be undone 1Claude Code: ask
  • fraud_scoreScore a transaction or account event for fraud risk.Reads text others write1 finding

    Why it is in this group

    • The input carries an amount (input.amount) and a currency, so it moves money.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "fraud_score" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The input carries an amount (input.amount) and a currency, so it moves money.

      What this check looks for
    Description, as the server wrote it
    Score a transaction or account event for fraud risk. Send whatever signals you have — all optional. Returns a 0-1 fraud probability, a risk level, the exact risk factors that drove the score (each with its weight, direction and a human-readable detail), and a recommended decision (allow|review|deny). Returns: dict with keys: fraud_probability (float), risk_level (str), decision (str), risk_score_points (float), risk_factors (list of {factor, weight, direction, detail}), decision_bands (dict).

    Annotations the server declares

    • title: Score Event For Fraud Risk
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Changes things 16Claude Code: ask
  • answer_questionAnswer a question using ONLY the supplied text; returns the supporting sentence(s) with character offsets.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Answer a question using ONLY the supplied text; returns the supporting sentence(s) with character offsets. Replies found:false rather than guessing when the answer isn't present in the text. Args: text: The text/document to answer from. question: The question to answer. Returns: dict with keys: answer (str|null), found (bool), supporting_spans (list of {text, start, end}).

    Annotations the server declares

    • title: Answer Question About Text
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • aspect_sentimentSentiment per aspect.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Sentiment per aspect. Brainiall Aspect Sentiment engine. Splits the text into sentences mentioning each aspect, classifies each, aggregates.

    Annotations the server declares

    • title: Per-Aspect Sentiment
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • check_groundednessHallucination check: is a claim actually supported by a source text?Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Hallucination check: is a claim actually supported by a source text? Brainiall Groundedness engine. Returns {grounded, confidence, supporting_span, reason}.

    Annotations the server declares

    • title: Groundedness Detection (Hallucination Check)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • check_nlp_serviceCheck health status of NLP API services and loaded models.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Check health status of NLP API services and loaded models. Returns: dict with keys: - status (str): 'healthy' or error state - models (dict): Loaded model status per capability - version (str): API version

    Annotations the server declares

    • title: Check NLP Service
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • classify_text_customZero-shot text classification — define your labels at call time.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Zero-shot text classification — define your labels at call time. No training, no data upload. Brainiall Custom Classifier engine. Returns {top_label, scores, confidence}.

    Annotations the server declares

    • title: Custom Text Classification (zero-shot)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • detect_conversational_piiMulti-turn PII detection with cross-turn coreference.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Multi-turn PII detection with cross-turn coreference. Brainiall Conversational PII engine. Same surface text + type across turns gets the same entity_id.

    Annotations the server declares

    • title: Conversational PII Detection (multi-turn)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • detect_languageDetect the language of text.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Detect the language of text. Supports 176 languages using fastText. Sub-1ms inference latency. Returns ISO 639-1 codes with confidence scores. Args: text: Text to identify the language of. top_k: Number of top language predictions to return (default: 3). Returns: dict with keys: - language (str): Top predicted language ISO 639-1 code - confidence (float 0-1): Confidence for top prediction - predictions (list): Top-k predictions, each with: - language (str): ISO 639-1 code - confidence (float 0-1): Prediction confidence

    Annotations the server declares

    • title: Detect Language
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • detect_piiDetect personally identifiable information (PII) in text.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Detect personally identifiable information (PII) in text. Finds emails, phone numbers, SSNs, credit cards, IP addresses, and person names. Optionally returns redacted text with PII replaced by type labels (e.g. [EMAIL], [PHONE]). BERT-NER + regex ensemble. Args: text: Text to scan for personally identifiable information. redact: If true, return redacted text with PII replaced by [TYPE]. Returns: dict with keys: - pii_found (list): Detected PII items, each containing: - text (str): The PII value found - type (str): PII type (EMAIL, PHONE, SSN, CREDIT_CARD, IP, PERSON) - start (int): Character offset start - end (int): Character offset end - score (float 0-1): Detection confidence - count (int): Total PII items found - redacted_text (str|null): Text with PII replaced (when redact=true) - has_pii (bool): Whether any PII was detected

    Annotations the server declares

    • title: Detect PII
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • detect_prompt_injectionClassify a prompt before it reaches your LLM.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Classify a prompt before it reaches your LLM. Brainiall Prompt Shield engine. Returns category (jailbreak | prompt_injection | data_exfiltration | impersonation | none), severity, reason, confidence.

    Annotations the server declares

    • title: Prompt Shield (Jailbreak / Injection Detection)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • detect_protected_materialDetect copyrighted text in user input — famous lyrics, literary openings, proprietary code.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Detect copyrighted text in user input — famous lyrics, literary openings, proprietary code. Brainiall Protected Material engine. Returns matched spans with source attribution.

    Annotations the server declares

    • title: Protected Material Detection
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • extract_entitiesExtract named entities (NER) from text.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Extract named entities (NER) from text. Identifies persons, organizations, locations, and miscellaneous entities with span offsets and confidence scores. BERT-NER based with sub-50ms latency. Args: text: Text to extract named entities from. Returns: dict with keys: - entities (list): Detected entities, each containing: - text (str): Entity text - label (str): Entity type (PER, ORG, LOC, MISC) - start (int): Character offset start - end (int): Character offset end - score (float 0-1): Confidence score - count (int): Total number of entities found

    Annotations the server declares

    • title: Extract Entities
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • extract_key_phrasesStatistical key-phrase extraction — top-N ranked phrases.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Statistical key-phrase extraction — top-N ranked phrases. Brainiall Key Phrases engine. Pure-statistical (TF + position + casing + stopword filter), no ML cost.

    Annotations the server declares

    • title: Extract Key Phrases
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • fraud_feedbackReport the confirmed outcome of an event so the fraud model can be re-calibrated to your data.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Report the confirmed outcome of an event so the fraud model can be re-calibrated to your data. Args: event_id: The event identifier. label: 'fraud' | 'legitimate' | 'chargeback' | 'dispute'. notes: Optional free-text notes. Returns: dict with keys: event_id (str), label (str), accepted (bool), feedback_id (int).

    Annotations the server declares

    • title: Report Fraud Outcome (Feedback)
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • knowledge_ingestIngest a document into a knowledge base: it is chunked, embedded and stored for you (managed RAG).Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Ingest a document into a knowledge base: it is chunked, embedded and stored for you (managed RAG). Args: namespace: The knowledge-base namespace. text: The document text. title: Optional title. Returns: dict with keys: doc_id (str), n_chunks (int).

    Annotations the server declares

    • title: Ingest Document Into Knowledge Base
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • translate_textTranslate text between 100+ languages.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Translate text between 100+ languages. Args: text: The text to translate. target_lang: Target language code. source_lang: Source language code; omit to auto-detect. Returns: dict with the translated text (key: translated_text) and the detected source language if auto-detected.

    Annotations the server declares

    • title: Translate Text
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 5Show 5 read-only tools
  • analyze_sentimentAnalyze text sentiment.Reads text others writeNo findings

    Why it is in this group

    • The name "analyze_sentiment" says "analyze": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Analyze text sentiment. Returns positive/negative classification with confidence scores. Brainiall Sentiment engine-based with sub-10ms latency. Multiple domain-specific model variants available. Args: text: Text to analyze for sentiment (positive/negative). model: Model variant -- 'general' (default), 'financial', 'twitter'. Returns: dict with keys: - label (str): 'positive' or 'negative' - score (float 0-1): Confidence score for the predicted label - scores (dict): All label scores (positive, negative)

    Annotations the server declares

    • title: Analyze Sentiment
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • analyze_toxicityAnalyze text for toxic content.Reads text others writeNo findings

    Why it is in this group

    • The name "analyze_toxicity" says "analyze": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Analyze text for toxic content. Returns scores for 6 categories: toxic, severe_toxic, obscene, threat, insult, identity_hate. Each score is 0.0-1.0. BERT-based classifier with sub-15ms latency on GPU. Args: text: Text to analyze for toxicity (hate speech, insults, threats). Returns: dict with keys: - toxic (float 0-1): Overall toxicity score - severe_toxic (float 0-1): Severe toxicity score - obscene (float 0-1): Obscenity score - threat (float 0-1): Threat score - insult (float 0-1): Insult score - identity_hate (float 0-1): Identity-based hate score - is_toxic (bool): Whether text exceeds toxicity threshold

    Annotations the server declares

    • title: Analyze Toxicity
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • knowledge_list_documentsList the documents stored in a knowledge base (most recent first).Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "knowledge_list_documents" says "list": a word for reading.

    What it can reach

    • private-dataThe name "knowledge_list_documents" says "list" and "document": it reads documents.
    • private-dataThe description's first sentence says "list" and "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    List the documents stored in a knowledge base (most recent first). Args: namespace: The knowledge-base namespace. Returns: dict with keys: documents (list of {doc_id, title, ...}).

    Annotations the server declares

    • title: List Knowledge Base Documents
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • knowledge_queryRetrieve the most relevant passages from a knowledge base plus (optionally) a grounded, cited answer.Reads text others writeNo findings

    Why it is in this group

    • The name "knowledge_query" says "query": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Retrieve the most relevant passages from a knowledge base plus (optionally) a grounded, cited answer. Returns found:false rather than a guess when the passages don't contain the answer. Args: namespace: The knowledge-base namespace. question: The natural-language question. top_k: How many passages to retrieve. rerank: Re-order retrieved passages before answering. synthesize: Also return a grounded answer. Returns: dict with keys: answer (str|null), found (bool), passages (list), synthesized (bool), reranked (bool), ...

    Annotations the server declares

    • title: Query Knowledge Base
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • summarize_textSummarize text — extractive (verbatim key sentences in original order) or abstractive (concise rewrite).Reads text others writeNo findings

    Why it is in this group

    • The name "summarize_text" says "summarize": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Summarize text — extractive (verbatim key sentences in original order) or abstractive (concise rewrite). Args: text: The text to summarize. mode: 'abstractive' or 'extractive'. max_length: Target maximum length of the summary, in words. Returns: dict with the summary (key: summary) plus word/char counts.

    Annotations the server declares

    • title: Summarize Text
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data1
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Tools listed without sign-in

Looked at Oct 22, 2026, 15:16 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
17
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
not observed
RFC 9728 protected resource metadata
https://api.brainiall.com/.well-known/oauth-protected-resource
Authorization servers
not observed
Legacy HTTP+SSE transport
no
Dynamic client registration
not observed
Client ID metadata documents
not observed
  • HighThe whole server

    The endpoint served tools/list without credentials, and the list has 17 tools that change things (1 irreversible, 16 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://api.brainiall.com/mcp/nlp/mcp: tools/list returned 22 tools to an anonymous client, including fraud_score (irreversible), extract_entities (write), detect_pii (write), detect_language (write), check_nlp_service (write) and 12 more

    What this check looks for

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "fraud_score" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The input carries an amount (input.amount) and a currency, so it moves money.

    What this check looks for
  • The server marks "link_entities_to_wikidata" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "link_entities_to_wikidata" says "link": a word for a change.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http nlp https://api.brainiall.com/mcp/nlp/mcp
claude mcp add --transport http nlp https://api.brainiall.com/mcp/nlp/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__nlp__analyze_toxicity",
      "mcp__nlp__analyze_sentiment",
      "mcp__nlp__summarize_text",
      "mcp__nlp__knowledge_query",
      "mcp__nlp__knowledge_list_documents"
    ],
    "ask": [
      "mcp__nlp__extract_entities",
      "mcp__nlp__detect_pii",
      "mcp__nlp__detect_language",
      "mcp__nlp__check_nlp_service",
      "mcp__nlp__translate_text",
      "mcp__nlp__answer_question",
      "mcp__nlp__knowledge_ingest",
      "mcp__nlp__fraud_score",
      "mcp__nlp__fraud_feedback",
      "mcp__nlp__extract_key_phrases",
      "mcp__nlp__aspect_sentiment",
      "mcp__nlp__classify_text_custom",
      "mcp__nlp__link_entities_to_wikidata",
      "mcp__nlp__detect_conversational_pii",
      "mcp__nlp__detect_prompt_injection",
      "mcp__nlp__check_groundedness",
      "mcp__nlp__detect_protected_material"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as nlp. Review it before you use it.

Capability tags behind 22 rules
  • mcp__nlp__analyze_toxicity untrusted-input
  • mcp__nlp__analyze_sentiment untrusted-input
  • mcp__nlp__extract_entities untrusted-input
  • mcp__nlp__detect_pii untrusted-input
  • mcp__nlp__detect_language untrusted-input
  • mcp__nlp__check_nlp_service untrusted-input
  • mcp__nlp__translate_text untrusted-input
  • mcp__nlp__summarize_text untrusted-input
  • mcp__nlp__answer_question untrusted-input
  • mcp__nlp__knowledge_ingest untrusted-input
  • mcp__nlp__knowledge_query untrusted-input
  • mcp__nlp__knowledge_list_documents private-data, untrusted-input
  • mcp__nlp__fraud_score untrusted-input
  • mcp__nlp__fraud_feedback untrusted-input
  • mcp__nlp__extract_key_phrases untrusted-input
  • mcp__nlp__aspect_sentiment untrusted-input
  • mcp__nlp__classify_text_custom untrusted-input
  • mcp__nlp__link_entities_to_wikidata untrusted-input
  • mcp__nlp__detect_conversational_pii untrusted-input
  • mcp__nlp__detect_prompt_injection untrusted-input
  • mcp__nlp__check_groundedness untrusted-input
  • mcp__nlp__detect_protected_material untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/com.brainiall/nlp/verify?hash=41bdafbef60de10a036e95a8662717d3ca010a8d1d5667449f7fb866e9f15e6c" | jq -e '.changed == false'

Pinned hash 41bdafbef60d, from Oct 21, 2026, 19:11 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/com.brainiall/nlp/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.brainiall/nlp
[![anlyon.dev](https://anlyon.dev/badge/com.brainiall/nlp.svg)](https://anlyon.dev/servers/com.brainiall/nlp)

Source: MCP Registry. Synced Oct 21, 2026, 17:52 UTC.