# `io.github.fasuizu-br/nlp-tools` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.github.fasuizu-br/nlp-tools
- JSON: https://anlyon.dev/api/v1/servers/io.github.fasuizu-br/nlp-tools
- Version: 1.1.0 (active)
- Publisher: io.github.fasuizu-br (GitHub account)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Repository: https://github.com/fasuizu-br/speech-ai-examples
- Metadata from the official MCP Registry, synced 2026-10-21T18:33:55.260Z

Title and description, as the publisher wrote them:

```untrusted-server-text
NLP Tools - Sentiment, NER, Toxicity & Language Detection
Toxicity, sentiment, NER, PII detection, and language identification tools
```

Scanned 2026-10-21T19:22:32.986Z over streamable-http.

**6 tools: 4 change things and 2 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 4 | ask |
| Only reads | read | 2 | allow |

## Findings

No check matched anything in these tool definitions.


## Changes things (4)

Creates or changes something that can be changed back. Claude Code: ask.

### `check_nlp_service`

- 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.

Description, as the server wrote it:

```untrusted-server-text
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
```

### `detect_language`

- 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.

Description, as the server wrote it:

```untrusted-server-text
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
```

### `detect_pii`

- 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.

Description, as the server wrote it:

```untrusted-server-text
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
```

### `extract_entities`

- 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.

Description, as the server wrote it:

```untrusted-server-text
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
```

## Only reads (2)

Looks things up and changes nothing. Claude Code: allow.

### `analyze_sentiment`

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

Description, as the server wrote it:

```untrusted-server-text
Analyze text sentiment.

Returns positive/negative classification with confidence scores.
DistilBERT-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)
```

### `analyze_toxicity`

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

Description, as the server wrote it:

```untrusted-server-text
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
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `nlp-tools`:

```json
{
  "permissions": {
    "allow": [
      "mcp__nlp-tools__analyze_toxicity",
      "mcp__nlp-tools__analyze_sentiment"
    ],
    "ask": [
      "mcp__nlp-tools__extract_entities",
      "mcp__nlp-tools__detect_pii",
      "mcp__nlp-tools__detect_language",
      "mcp__nlp-tools__check_nlp_service"
    ],
    "deny": []
  }
}
```
