Skip to main content
Glama
ClassiFinder

classifinder-mcp

Official
by ClassiFinder

ClassiFinder MCP Server

An MCP server that gives AI agents the ability to scan text for leaked secrets and redact them before they reach an LLM.

Installation

pip install classifinder-mcp

Related MCP server: trustboost-pii-sanitizer

Setup

Get a free API key at classifinder.ai, then add to your agent config:

Claude Code

{
  "mcpServers": {
    "classifinder": {
      "command": "classifinder-mcp",
      "env": {
        "CLASSIFINDER_API_KEY": "ss_live_your_key_here"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project:

{
  "mcpServers": {
    "classifinder": {
      "command": "classifinder-mcp",
      "env": {
        "CLASSIFINDER_API_KEY": "ss_live_your_key_here"
      }
    }
  }
}

Tools

classifinder_scan

Scan text for leaked secrets and credentials. Returns findings with type, severity, confidence, and remediation guidance.

Agent: "Check this config for secrets"
→ classifinder_scan(text="AWS_ACCESS_KEY_ID=AKIAJGKJHSKLDJFH3284")
→ Found 1 secret: aws_access_key (critical, confidence 0.95)

classifinder_redact

Replace all detected secrets with safe placeholders. Returns clean text safe to forward to any LLM.

Agent: "Clean this before sending to the model"
→ classifinder_redact(text="key=sk_live_EXAMPLE_KEY_HERE")
→ "key=[STRIPE_LIVE_SECRET_KEY_REDACTED]"

What It Detects

297 detection patterns:

  • 283 secret types across 10 categories: cloud/infra keys (AWS, GCP, Azure, Vercel including the 2024+ prefixed taxonomy vcp_/vci_/vca_/vcr_/vck_, Fly.io, Doppler, HashiCorp Vault, Cloudflare, Dropbox, JFrog/Artifactory and more); payment (Stripe, PayPal, Shopify with 4 token types, credit cards Luhn-validated, Square); VCS (GitHub, GitLab with 10 token types covering deploy/feed/runner/SCIM/k8s-agent/OAuth/feature-flag, Bitbucket); comms/SaaS (Slack including config/session/legacy variants, Twilio, SendGrid, Mailgun, Datadog, Sentry, PagerDuty, Notion, Linear and more); database connection strings (PostgreSQL/MySQL/MongoDB/Redis/Supabase); generic SSH/PEM private keys and JWTs; AI/LLM provider keys (OpenAI, Anthropic user + admin, Cohere, xAI, Mistral, DeepSeek, HuggingFace user + organization, Replicate, Groq, ElevenLabs, AssemblyAI, Deepgram, LangFuse, AWS Bedrock long + short-lived, Vercel AI Gateway, Weights & Biases); DevOps/CI-CD/observability (Databricks, Dynatrace, LaunchDarkly, Harness, Octopus Deploy, Fastly, Gitea, TravisCI, Prefect, Infracost, Sumo Logic, Snyk, Sonar, Sourcegraph); data/analytics (ClickHouse, PlanetScale, PostHog, Postman, Algolia, Contentful); and enterprise identity (Atlassian, 1Password, HubSpot, Mapbox, MaxMind, Zendesk).

  • 14 prompt-injection markers for LLM input scanning — 4 phase-1 high-precision (chat-template role-hijack tokens like <|im_start|> and [INST], tool-call tag injection, known jailbreak personas like DAN/AIM, Unicode bidirectional override / Trojan Source) + 6 phase-2 medium-precision (zero-width Unicode smuggling, fake "Assistant:" turns, system-prompt extraction, instruction override like "ignore previous instructions", persona override (context-gated), encoded-payload markers) + 4 phase-3 SAFE-MCP-derived markers cross-referenced to the SAFE-MCP technique catalog. Catches 20.6% of in-the-wild jailbreaks (validated against the verazuo/jailbreak_llms corpus). Severity caps at high — these are attack markers, not credentials.

One scan returns both secret findings and injection markers — no second vendor, no separate pipeline.

Hardening — Sandbox Profiles

The MCP server is intentionally minimal: ~180 lines, two read-only tools, a single egress destination (api.classifinder.ai:443), and the API key as the only secret in scope. That makes it cheap to run under a sandbox. Three documented profiles:

Docker

docker run --rm -i \
  --read-only \
  --tmpfs /tmp \
  -v ~/.classifinder:/root/.classifinder \
  -e CLASSIFINDER_API_KEY \
  python:3.12-slim sh -c "pip install -q classifinder-mcp && classifinder-mcp"
  • --read-only — container filesystem is read-only

  • --tmpfs /tmp — writable scratch space for pip / Python

  • -v ~/.classifinder:/root/.classifinder — only persistent mount, used for the audit log

  • -e CLASSIFINDER_API_KEY — key passed via env, never written to disk

  • -i — keeps stdin attached (MCP transport is stdio)

For a faster invocation in production, build a thin image with classifinder-mcp pre-installed.

Firejail (Linux)

firejail \
  --noroot \
  --caps.drop=all \
  --seccomp \
  --private-tmp \
  --whitelist=~/.classifinder \
  --read-only=~ \
  --read-write=~/.classifinder \
  classifinder-mcp
  • Drops all capabilities + applies a default seccomp filter

  • Filesystem: home is read-only, only ~/.classifinder/ writable

  • Process runs without root privilege escalation

  • Network egress remains open (required for api.classifinder.ai) — pair with host-level egress filtering (ufw, iptables, or nftables) if you want network restriction

Bubblewrap (Linux)

bwrap \
  --ro-bind / / \
  --bind ~/.classifinder ~/.classifinder \
  --proc /proc --dev /dev --tmpfs /tmp \
  --unshare-pid --unshare-uts --new-session --die-with-parent \
  --setenv CLASSIFINDER_API_KEY "$CLASSIFINDER_API_KEY" \
  classifinder-mcp
  • Read-only bind mount of /; writable bind only for ~/.classifinder/

  • Fresh PID + UTS namespaces; new session

  • --die-with-parent ensures the sandbox tears down if the host process exits

  • API key passed via setenv, no file mount needed

Verification

These profiles are documented starting points. None are exercised in this repo's CI — they're correctness-by-construction (read-only bind mounts, dropped caps, single-purpose tmpfs) rather than test-validated. If you run a sandbox in production and want me to roll a verified profile into a future release, open an issue with the exact invocation you're using.

Audit Log

The MCP server appends one JSONL line per tool call to a local audit file. Metadata only — the audit log never contains your input text or any detected secret values.

Default path: ~/.classifinder/mcp-audit.log

Fields per line:

{
  "timestamp": "2026-05-22T15:30:42.123456Z",
  "tool": "classifinder_scan",
  "input_byte_count": 142,
  "finding_count": 1,
  "latency_ms": 87.4
}

Configuration (env vars):

Variable

Default

Purpose

CLASSIFINDER_MCP_AUDIT

1 (on)

Set to 0 to disable logging entirely

CLASSIFINDER_MCP_AUDIT_PATH

~/.classifinder/mcp-audit.log

Override the log path

The audit log is observability for your own use — useful for compliance (proving the MCP server ran), debugging (correlating latency spikes), and forensic review (which tool ran when). Write failures are silent; the tool call always succeeds even if the audit cannot be written.

Verifying a Release

Every published release is signed twice:

  1. PyPI attestations (PEP 740) — minted by PyPI from this repo's OIDC identity during publish. Verified automatically by pip when installing from PyPI; you don't need to do anything.

  2. Sigstore bundles — published as GitHub Release assets (*.sigstore.json next to the sdist + wheel). Verify with sigstore-python:

pip install sigstore
gh release download v0.1.4 --repo ClassiFinder/classifinder-mcp \
  --pattern '*.whl' --pattern '*.sigstore.json'

sigstore verify identity \
  --bundle classifinder_mcp-0.1.4-py3-none-any.whl.sigstore.json \
  --cert-identity 'https://github.com/ClassiFinder/classifinder-mcp/.github/workflows/release.yml@refs/tags/v0.1.4' \
  --cert-oidc-issuer 'https://token.actions.githubusercontent.com' \
  classifinder_mcp-0.1.4-py3-none-any.whl

The signing identity binds the artifact to this repo's release.yml workflow at a specific tag — an attacker can't forge a valid bundle without compromising GitHub's OIDC token issuance.

See Also

For CLI scanning instead of MCP, see cfsniff — a command-line tool that scans files, shell history, and configs for secrets (pipx install cfsniff).

Disclaimer

ClassiFinder is a detection aid, not a guarantee. No scanner catches 100% of secrets in 100% of formats. See our Terms of Service for full details.

License

MIT

Available Tools

2 tools
classifinder_redactA

Scan text and replace all detected secrets with safe placeholders.

Returns clean text safe to forward to any LLM or logging system. Use this before sending user input to a model.

Args: text: The text to redact. redaction_style: How to replace secrets. Options: "label" - [AWS_ACCESS_KEY_REDACTED] (default) "mask" - AKIA************** "hash" - [REDACTED:sha256:a1b2c3d4]

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
redaction_styleNolabel

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the redaction style options and that the output is clean text. It does not detail the detection mechanism or failure cases, but for a redaction tool, this is sufficient transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and structured with an 'Args:' section. The first sentence clearly states purpose, followed by usage advice. Minor redundancy (second sentence could be merged), but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and an output schema (implied), the description covers inputs and return value adequately. It explains the two parameters and provides example redaction styles. It is complete enough for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds meaning by explaining both parameters: 'text' (the text to redact) and 'redaction_style' with three options and examples. This compensates for the schema's lack of description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Scan text and replace all detected secrets with safe placeholders.' It specifies the resource (text) and the outcome (safe to forward to any LLM or logging system). The sibling tool 'classifinder_scan' is distinct, and the description differentiates by focusing on redaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance: 'Use this before sending user input to a model.' This tells the agent when to use the tool over alternatives. It also implies a workflow context, making selection straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

classifinder_scanA

Scan text for leaked secrets and credentials.

Returns structured findings with type, severity, confidence, and remediation guidance. Use this to check if text contains API keys, passwords, tokens, or other sensitive credentials.

Args: text: The text to scan for secrets. min_confidence: Minimum confidence threshold (0.0-1.0). Default 0.5.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
min_confidenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses that the tool returns structured findings with type, severity, confidence, and remediation guidance. It implies a read-only operation without explicit mutation statements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with 4 short sentences, front-loading the main action in the first sentence. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, the description adequately explains the purpose, parameters, and output type. It could mention that the tool does not modify data, but overall it is complete for a scan tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% parameter description coverage, so the description must compensate fully. It explains 'text' as the text to scan and 'min_confidence' as a threshold with default, adding crucial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'scan' and resource 'text for leaked secrets and credentials', and clearly distinguishes from sibling 'classifinder_redact' by focusing on detection rather than redaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states to use this tool for checking API keys, passwords, etc., providing a clear context. However, it lacks explicit when-not-to-use guidance or direct comparison to the sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.4
    • First observedclassifinder_redact
    • First observedclassifinder_scan

TDQS

A4.6/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: scan detects secrets, redact replaces them. There is no overlap in functionality.

Naming Consistency5/5

Both tools follow the consistent pattern 'classifinder_<verb>', using snake_case and descriptive verbs (scan, redact).

Tool Count4/5

With only two tools, the set is minimal but appropriate for a focused secrets-handling utility. Could potentially include a 'classify' tool, but current scope is clear.

Completeness5/5

The pair covers the full workflow: scanning for secrets and redacting them. No obvious missing operations for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Protects AI agents from threats like prompt injection, jailbreaks, and SQL injection through a multi-layer scanning pipeline. It also enables PII redaction and rehydration to ensure data privacy during LLM interactions.
    12
    125
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Security middleware for LLM apps and AI agent pipelines. Detects prompt injection attacks (22 signatures, 7 languages) and anonymizes PII (17 entity types). Deterministic, sub-25ms, GDPR Art.30 compliant.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ClassiFinder/classifinder-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server