Sentiment, toxicity, entity extraction, PII, translation, summary, QA, fraud scoring, safety audit.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh 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)
Text to analyze for sentiment (positive/negative)
Model variant: 'general' (default), 'financial', 'twitter'
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)
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to analyze for sentiment (positive/negative) |
| model | string | Model variant: 'general' (default), 'financial', 'twitter' |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 100000,
"description": "Text to analyze for sentiment (positive/negative)"
},
"model": {
"type": "string",
"default": "general",
"description": "Model variant: 'general' (default), 'financial', 'twitter'"
}
}
}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
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to analyze for toxicity (hate speech, insults, threats) |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 100000,
"description": "Text to analyze for toxicity (hate speech, insults, threats)"
}
}
}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}).
| Argument | Type | Description |
|---|---|---|
| text* | string | The text/document to answer from |
| question* | string | The question to answer |
{
"type": "object",
"required": [
"text",
"question"
],
"properties": {
"text": {
"type": "string",
"maxLength": 50000,
"description": "The text/document to answer from"
},
"question": {
"type": "string",
"maxLength": 1000,
"description": "The question to answer"
}
}
}Sentiment per aspect. Brainiall Aspect Sentiment engine. Splits the text into sentences mentioning each aspect, classifies each, aggregates.
| Argument | Type | Description |
|---|---|---|
| text* | string | Input text |
| aspects* | array | Aspect terms to score (e.g. ['camera','battery','price']) |
{
"type": "object",
"required": [
"text",
"aspects"
],
"properties": {
"text": {
"type": "string",
"description": "Input text"
},
"aspects": {
"type": "array",
"items": {
"type": "string"
},
"description": "Aspect terms to score (e.g. ['camera','battery','price'])"
}
}
}Hallucination check: is a claim actually supported by a source text? Brainiall Groundedness engine. Returns {grounded, confidence, supporting_span, reason}.
| Argument | Type | Description |
|---|---|---|
| claim* | string | The claim to verify |
| source* | string | The source text the claim should be grounded in |
{
"type": "object",
"required": [
"claim",
"source"
],
"properties": {
"claim": {
"type": "string",
"maxLength": 4000,
"description": "The claim to verify"
},
"source": {
"type": "string",
"maxLength": 20000,
"description": "The source text the claim should be grounded in"
}
}
}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
No arguments.
{
"type": "object",
"properties": {}
}Zero-shot text classification — define your labels at call time. No training, no data upload. Brainiall Custom Classifier engine. Returns {top_label, scores, confidence}.
| Argument | Type | Description |
|---|---|---|
| text* | string | Input text |
| labels* | array | Your candidate labels (2-20 of them) |
| multi_label | boolean | If True, multiple labels can apply |
{
"type": "object",
"required": [
"text",
"labels"
],
"properties": {
"text": {
"type": "string",
"description": "Input text"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Your candidate labels (2-20 of them)"
},
"multi_label": {
"type": "boolean",
"default": false,
"description": "If True, multiple labels can apply"
}
}
}Multi-turn PII detection with cross-turn coreference. Brainiall Conversational PII engine. Same surface text + type across turns gets the same entity_id.
| Argument | Type | Description |
|---|---|---|
| turns* | array | List of [role, content] dicts representing a dialogue |
{
"type": "object",
"required": [
"turns"
],
"properties": {
"turns": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "List of [role, content] dicts representing a dialogue"
}
}
}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
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to identify the language of |
| top_k | integer | Number of top language predictions to return |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 100000,
"description": "Text to identify the language of"
},
"top_k": {
"type": "integer",
"default": 3,
"description": "Number of top language predictions to return"
}
}
}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
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to scan for personally identifiable information |
| redact | boolean | If true, return redacted text with PII replaced by [TYPE] |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 100000,
"description": "Text to scan for personally identifiable information"
},
"redact": {
"type": "boolean",
"default": false,
"description": "If true, return redacted text with PII replaced by [TYPE]"
}
}
}Classify a prompt before it reaches your LLM. Brainiall Prompt Shield engine. Returns category (jailbreak | prompt_injection | data_exfiltration | impersonation | none), severity, reason, confidence.
| Argument | Type | Description |
|---|---|---|
| prompt* | string | The prompt text to classify (NOT executed) |
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"maxLength": 20000,
"minLength": 1,
"description": "The prompt text to classify (NOT executed)"
}
}
}Detect copyrighted text in user input — famous lyrics, literary openings, proprietary code. Brainiall Protected Material engine. Returns matched spans with source attribution.
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to scan for copyrighted material |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 20000,
"description": "Text to scan for copyrighted material"
}
}
}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
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to extract named entities from (persons, organizations, locations) |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 100000,
"description": "Text to extract named entities from (persons, organizations, locations)"
}
}
}Statistical key-phrase extraction — top-N ranked phrases. Brainiall Key Phrases engine. Pure-statistical (TF + position + casing + stopword filter), no ML cost.
| Argument | Type | Description |
|---|---|---|
| text* | string | Input text |
| top_k | integer | Number of phrases to return |
| max_ngram | integer | Max words per phrase (1-4) |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"minLength": 1,
"description": "Input text"
},
"top_k": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Number of phrases to return"
},
"max_ngram": {
"type": "integer",
"default": 3,
"maximum": 4,
"minimum": 1,
"description": "Max words per phrase (1-4)"
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| label* | string | The confirmed outcome: 'fraud' | 'legitimate' | 'chargeback' | 'dispute' |
| notes | any | Optional free-text notes |
| event_id* | string | The event_id you passed to fraud_score (or your own identifier) |
{
"type": "object",
"required": [
"event_id",
"label"
],
"properties": {
"label": {
"type": "string",
"description": "The confirmed outcome: 'fraud' | 'legitimate' | 'chargeback' | 'dispute'"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
],
"default": null,
"description": "Optional free-text notes"
},
"event_id": {
"type": "string",
"maxLength": 256,
"description": "The event_id you passed to fraud_score (or your own identifier)"
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| amount | any | The transaction amount |
| is_tor | any | Request originated from a Tor exit node |
| currency | any | ISO 4217 currency code |
| event_id | any | Your identifier for this event (echoed back; use with fraud_feedback) |
| avs_match | any | Whether the address-verification check matched |
| is_new_ip | any | First time seeing this IP |
| ip_country | any | ISO country code geolocated from the IP |
| card_country | any | ISO country code of the payment instrument |
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).
| Argument | Type | Description |
|---|---|---|
| text* | string | The document text to ingest |
| title | any | Optional title for the document |
| namespace* | string | The knowledge-base namespace to ingest into (alphanumeric/hyphen) |
{
"type": "object",
"required": [
"namespace",
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"description": "The document text to ingest"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional title for the document"
},
"namespace": {
"type": "string",
"maxLength": 128,
"description": "The knowledge-base namespace to ingest into (alphanumeric/hyphen)"
}
}
}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, ...}).
| Argument | Type | Description |
|---|---|---|
| namespace* | string | The knowledge-base namespace |
{
"type": "object",
"required": [
"namespace"
],
"properties": {
"namespace": {
"type": "string",
"maxLength": 128,
"description": "The knowledge-base namespace"
}
}
}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), ...
| Argument | Type | Description |
|---|---|---|
| top_k | integer | How many passages to retrieve |
| rerank | boolean | Re-order the retrieved passages before answering |
| question* | string | The natural-language question |
| namespace* | string | The knowledge-base namespace to query |
| synthesize | boolean | Also return a concise answer grounded only in the retrieved passages |
{
"type": "object",
"required": [
"namespace",
"question"
],
"properties": {
"top_k": {
"type": "integer",
"default": 6,
"maximum": 50,
"minimum": 1,
"description": "How many passages to retrieve"
},
"rerank": {
"type": "boolean",
"default": false,
"description": "Re-order the retrieved passages before answering"
},
"question": {
"type": "string",
"maxLength": 2000,
"description": "The natural-language question"
},
"namespace": {
"type": "string",
"maxLength": 128,
"description": "The knowledge-base namespace to query"
},
"synthesize": {
"type": "boolean",
"default": true,
"description": "Also return a concise answer grounded only in the retrieved passages"
}
}
}Named-entity recognition + canonical linking to Wikidata Q-ids. Brainiall Entity Linker engine. Disambiguates 'Apple' the company from 'apple' the fruit.
| Argument | Type | Description |
|---|---|---|
| text* | string | Input text |
| max_entities | integer | Max entities to return |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Input text"
},
"max_entities": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max entities to return"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| mode | string | 'abstractive' (concise rewrite) or 'extractive' (most important sentences, verbatim) |
| text* | string | The text to summarize |
| max_length | integer | Target maximum length of the summary, in words |
{
"type": "object",
"required": [
"text"
],
"properties": {
"mode": {
"type": "string",
"default": "abstractive",
"description": "'abstractive' (concise rewrite) or 'extractive' (most important sentences, verbatim)"
},
"text": {
"type": "string",
"maxLength": 50000,
"description": "The text to summarize"
},
"max_length": {
"type": "integer",
"default": 150,
"maximum": 1000,
"minimum": 10,
"description": "Target maximum length of the summary, in words"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| text* | string | The text to translate |
| source_lang | any | Source language code; omit to auto-detect |
| target_lang* | string | Target language code (e.g. 'pt', 'es', 'fr', 'de', 'ja') |
{
"type": "object",
"required": [
"text",
"target_lang"
],
"properties": {
"text": {
"type": "string",
"maxLength": 50000,
"description": "The text to translate"
},
"source_lang": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Source language code; omit to auto-detect"
},
"target_lang": {
"type": "string",
"description": "Target language code (e.g. 'pt', 'es', 'fr', 'de', 'ja')"
}
}
}| cvv_provided | any | Whether the CVV was provided |
| txn_count_1h | any | Number of transactions on this account in the last hour |
| is_new_device | any | First time seeing this device |
| txn_count_24h | any | Number of transactions on this account in the last 24h |
| is_proxy_or_vpn | any | Request originated from a proxy/VPN/datacenter IP |
| account_age_days | any | Age of the account in days |
| prior_chargebacks | any | Number of prior chargebacks on this account |
| avg_txn_amount_30d | any | The account's avg transaction amount over the last 30 days (for amount-anomaly scoring) |
| distinct_cards_24h | any | Distinct cards used on this account in 24h |
| distinct_countries_24h | any | Distinct countries seen on this account in 24h |
{
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The transaction amount"
},
"is_tor": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Request originated from a Tor exit node"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 4217 currency code"
},
"event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Your identifier for this event (echoed back; use with fraud_feedback)"
},
"avs_match": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether the address-verification check matched"
},
"is_new_ip": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "First time seeing this IP"
},
"ip_country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO country code geolocated from the IP"
},
"card_country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO country code of the payment instrument"
},
"cvv_provided": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether the CVV was provided"
},
"txn_count_1h": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of transactions on this account in the last hour"
},
"is_new_device": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "First time seeing this device"
},
"txn_count_24h": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of transactions on this account in the last 24h"
},
"is_proxy_or_vpn": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Request originated from a proxy/VPN/datacenter IP"
},
"account_age_days": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Age of the account in days"
},
"prior_chargebacks": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of prior chargebacks on this account"
},
"avg_txn_amount_30d": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The account's avg transaction amount over the last 30 days (for amount-anomaly scoring)"
},
"distinct_cards_24h": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Distinct cards used on this account in 24h"
},
"distinct_countries_24h": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Distinct countries seen on this account in 24h"
}
}
}