Brainiall NLP
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Sentiment, toxicity, entity extraction, PII, translation, summary, QA, fraud scoring, safety audit.
| Author | com.brainiall |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 423 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Brainiall NLP": {
"url": "https://api.brainiall.com/mcp/nlp/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (22)
analyze_toxicityread-onlyAnalyze 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
Parameters:
text(required) — string — Text to analyze for toxicity (hate speech, insults, threats)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
analyze_sentimentread-onlyAnalyze 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)
Parameters:
text(required) — string — Text to analyze for sentiment (positive/negative)model— string — Model variant: 'general' (default), 'financial', 'twitter'
Hints: read-only yes · destructive no · idempotent yes · open-world yes
extract_entitiesread-onlyExtract 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
Parameters:
text(required) — string — Text to extract named entities from (persons, organizations, locations)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
detect_piiread-onlyDetect 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
Parameters:
text(required) — string — Text to scan for personally identifiable informationredact— boolean — If true, return redacted text with PII replaced by [TYPE]
Hints: read-only yes · destructive no · idempotent yes · open-world yes
detect_languageread-onlyDetect 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
Parameters:
text(required) — string — Text to identify the language oftop_k— integer — Number of top language predictions to return
Hints: read-only yes · destructive no · idempotent yes · open-world yes
check_nlp_serviceread-onlyCheck 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
Hints: read-only yes · destructive no · idempotent yes · open-world yes
translate_textread-onlyTranslate 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.
Parameters:
text(required) — string — The text to translatetarget_lang(required) — string — Target language code (e.g. 'pt', 'es', 'fr', 'de', 'ja')source_lang— Source language code; omit to auto-detect
Hints: read-only yes · destructive no · idempotent yes · open-world yes
summarize_textread-onlySummarize 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.
Parameters:
text(required) — string — The text to summarizemode— string — 'abstractive' (concise rewrite) or 'extractive' (most important sentences, verbatim)max_length— integer — Target maximum length of the summary, in words
Hints: read-only yes · destructive no · idempotent yes · open-world yes
answer_questionread-onlyAnswer 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}).
Parameters:
text(required) — string — The text/document to answer fromquestion(required) — string — The question to answer
Hints: read-only yes · destructive no · idempotent yes · open-world yes
knowledge_ingestIngest 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).
Parameters:
namespace(required) — string — The knowledge-base namespace to ingest into (alphanumeric/hyphen)text(required) — string — The document text to ingesttitle— Optional title for the document
Hints: read-only no · destructive no · idempotent no · open-world yes
knowledge_queryread-onlyRetrieve 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), ...
Parameters:
namespace(required) — string — The knowledge-base namespace to queryquestion(required) — string — The natural-language questiontop_k— integer — How many passages to retrievererank— boolean — Re-order the retrieved passages before answeringsynthesize— boolean — Also return a concise answer grounded only in the retrieved passages
Hints: read-only yes · destructive no · idempotent yes · open-world yes
knowledge_list_documentsread-onlyList 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, ...}).
Parameters:
namespace(required) — string — The knowledge-base namespace
Hints: read-only yes · destructive no · idempotent yes · open-world yes
fraud_scoreread-onlyScore 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).
Parameters:
amount— The transaction amountis_tor— Request originated from a Tor exit nodecurrency— ISO 4217 currency codeevent_id— Your identifier for this event (echoed back; use with fraud_feedback)avs_match— Whether the address-verification check matchedis_new_ip— First time seeing this IPip_country— ISO country code geolocated from the IPcard_country— ISO country code of the payment instrumentcvv_provided— Whether the CVV was providedtxn_count_1h— Number of transactions on this account in the last houris_new_device— First time seeing this devicetxn_count_24h— Number of transactions on this account in the last 24his_proxy_or_vpn— Request originated from a proxy/VPN/datacenter IPaccount_age_days— Age of the account in daysprior_chargebacks— Number of prior chargebacks on this accountavg_txn_amount_30d— The account's avg transaction amount over the last 30 days (for amount-anomaly scoring)distinct_cards_24h— Distinct cards used on this account in 24hdistinct_countries_24h— Distinct countries seen on this account in 24h
Hints: read-only yes · destructive no · idempotent yes · open-world yes
fraud_feedbackReport 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).
Parameters:
event_id(required) — string — The event_id you passed to fraud_score (or your own identifier)label(required) — string — The confirmed outcome: 'fraud' | 'legitimate' | 'chargeback' | 'dispute'notes— Optional free-text notes
Hints: read-only no · destructive no · idempotent no · open-world yes
extract_key_phrasesread-onlyStatistical key-phrase extraction — top-N ranked phrases. Brainiall Key Phrases engine. Pure-statistical (TF + position + casing + stopword filter), no ML cost.
Parameters:
text(required) — string — Input texttop_k— integer — Number of phrases to returnmax_ngram— integer — Max words per phrase (1-4)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
aspect_sentimentread-onlySentiment per aspect. Brainiall Aspect Sentiment engine. Splits the text into sentences mentioning each aspect, classifies each, aggregates.
Parameters:
text(required) — string — Input textaspects(required) — array — Aspect terms to score (e.g. ['camera','battery','price'])
Hints: read-only yes · destructive no · idempotent yes · open-world yes
classify_text_customread-onlyZero-shot text classification — define your labels at call time. No training, no data upload. Brainiall Custom Classifier engine. Returns {top_label, scores, confidence}.
Parameters:
text(required) — string — Input textlabels(required) — array — Your candidate labels (2-20 of them)multi_label— boolean — If True, multiple labels can apply
Hints: read-only yes · destructive no · idempotent yes · open-world yes
link_entities_to_wikidataread-onlyNamed-entity recognition + canonical linking to Wikidata Q-ids. Brainiall Entity Linker engine. Disambiguates 'Apple' the company from 'apple' the fruit.
Parameters:
text(required) — string — Input textmax_entities— integer — Max entities to return
Hints: read-only yes · destructive no · idempotent yes · open-world yes
detect_conversational_piiread-onlyMulti-turn PII detection with cross-turn coreference. Brainiall Conversational PII engine. Same surface text + type across turns gets the same entity_id.
Parameters:
turns(required) — array — List of [role, content] dicts representing a dialogue
Hints: read-only yes · destructive no · idempotent yes · open-world yes
detect_prompt_injectionread-onlyClassify a prompt before it reaches your LLM. Brainiall Prompt Shield engine. Returns category (jailbreak | prompt_injection | data_exfiltration | impersonation | none), severity, reason, confidence.
Parameters:
prompt(required) — string — The prompt text to classify (NOT executed)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
check_groundednessread-onlyHallucination check: is a claim actually supported by a source text? Brainiall Groundedness engine. Returns {grounded, confidence, supporting_span, reason}.
Parameters:
claim(required) — string — The claim to verifysource(required) — string — The source text the claim should be grounded in
Hints: read-only yes · destructive no · idempotent yes · open-world yes
detect_protected_materialread-onlyDetect copyrighted text in user input — famous lyrics, literary openings, proprietary code. Brainiall Protected Material engine. Returns matched spans with source attribution.
Parameters:
text(required) — string — Text to scan for copyrighted material
Hints: read-only yes · destructive no · idempotent yes · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.