Skip to main content
Glama
GlaserIngo

Stript MCP Bridge

by GlaserIngo

Stript MCP Bridge

@stript/mcp is a local Model Context Protocol server that lets Claude (Desktop and Code) anonymize documents through the Stript desktop app on your own machine — so personal data never enters the conversation.

Requires the Stript desktop app with AI integrations enabled in Settings. The bridge does nothing on its own; it is a thin, local client to the app.

What it does

Claude hands the bridge a local reference — a file path, the clipboard, or an existing Stript document id. The bridge asks the local Stript app to detect personal data and replace it with consistent placeholders like [PERSON_1]. Only the anonymized text is returned to the conversation. Restored (real-PII) output is written to your clipboard or a local file and is never returned to the model.

Related MCP server: ai-security-gateway-mcp

Install

Claude Desktop — install the signed Stript.mcpb from the Stript app (Settings → Install for Claude Desktop), or from https://downloads.stript.io/Stript.mcpb.

Claude Code:

claude mcp add stript -- npx -y @stript/mcp

Tools

Tool

Purpose

Nature

Check the Stript app status

Confirm the app is running and reachable

read-only

Anonymize a document with Stript

Detect + replace PII in a file on disk

writes anonymized output

Anonymize the clipboard text with Stript

Same, for the current clipboard (opt-in; Claude asks first)

writes anonymized output

Fetch a Stript anonymization result

Retrieve a completed result

read-only

Restore original values into placeholder text

Put the real values back (to clipboard or a local file)

writes locally, never to chat

Restore original values into a file

Restore a full file on disk

writes locally, never to chat

How it works — privacy by design

  • The bridge talks only to 127.0.0.1: the Stript app's local backend and a loopback broker inside the signed app. It makes no external network calls with your content.

  • A per-launch, scope-restricted token gates every call; ports and token rotate on each launch.

  • Restored real values never enter tool results — they are written to your clipboard or a local file only.

  • New documents meter through the same local path as the app; the bridge keeps only a small local usage-metering mirror and nothing else persistent.

Privacy Policy

Stript is local-first. From the Stript Privacy Policy:

"Your documents are processed exclusively on your own device."

"No document content, file name, path, document identifier, source commitment, mapping, detection result, entity information, or export activity is transmitted to us or any third party."

This bridge inherits that guarantee:

  • Collects and transmits no document content. All detection and anonymization run locally in the Stript app; the bridge only shuttles data between Claude and the local app over loopback.

  • Stores nothing beyond a local usage-metering mirror on your own machine.

  • Shares nothing with third parties — it makes no off-device network calls.

The broader Stript product's data handling — optional account email, payment processing via Lemon Squeezy, hosting and privacy-preserving analytics via Cloudflare, transactional email via Resend, and the associated retention periods and contact details — is described in full in the Privacy Policy. Direct privacy questions to the contact listed there.

Build from source

npm ci
npm run build     # bundles dist/index.js (esm, node20)
npm test          # vitest
npm run check     # tsc --strict (bridge + card UI)

License

MIT. The Stript desktop app this bridge connects to is a separate, proprietary product.

Available Tools

5 tools
stript_anonymize_fileAnonymize a document with StriptA

Use this when the user wants to work with a document that may contain personal data, for example summarize it, translate it, or draft a reply. Ask the user for the file path. Never ask the user to paste document content into the chat. Stript detects and replaces personal data locally and only the anonymized text enters the conversation. Placeholders like [PERSON_1] can be restored later with stript_restore. Set mode to review when the user wants to check the detections in the Stript app first, Stript then opens the document and you wait for the user. Processing a new document uses one of the 5 Free Evaluation documents, already processed documents are free.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto anonymizes headlessly, review opens the Stript app for the user firstauto
pathYesAbsolute or ~ path of the document to anonymize
projectNoStript project id, defaults to the configured project

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
typesNo
statusYes
warningsNo
evaluationNo
project_idNo
document_idNo
output_fileNo
replacementsNo
residual_riskNo
anonymized_textNo
degraded_reasonsNo
detections_totalNo
reduced_accuracyNo

TDQS

A4.3/5.0
Behavior4/5

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

The description adds substantial behavioral context beyond the sparse annotations: it explains local detection and replacement of personal data, that only anonymized text enters the conversation, the review mode interaction (opens app and waits), and the quota behavior. It does not explicitly state whether the original file is modified, but the destructiveHint annotation is false, so no contradiction exists.

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 longer than the ideal but every sentence contributes unique information (trigger, user instruction, constraint, behavior, restore hint, mode guidance, quota). It is front-loaded with the 'Use this when' guidance and well-structured, earning a high score despite its length.

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?

The tool has moderate complexity (modes, quota, restore, local processing). The description covers the main aspects including when to use, the review flow, quota limits, and the restore path. It does not detail the output format, but an output schema exists, so that is not required. It is sufficiently complete for effective tool selection and invocation.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are already documented. The description adds minor context about mode (review opens the app) but this is also in the schema description. It does not significantly enhance understanding of path or project parameters, so a baseline score of 3 is appropriate.

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 anonymizes a document with Stript, specifying the trigger condition ('when the user wants to work with a document that may contain personal data') and giving concrete examples (summarize, translate, draft a reply). It distinguishes from siblings by mentioning stript_restore for restoring placeholders and describing the review mode.

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?

The description explicitly says 'Use this when...' and provides examples, states to ask for the file path, and gives a strong directive ('Never ask the user to paste document content'). It also clarifies when to use review mode and mentions the free evaluation document quota, giving clear context for appropriate usage.

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

stript_fetch_resultFetch a Stript anonymization resultA
Read-only

Use this to fetch the anonymized result of a Stript document, for example after a pending_review status or after the app was restarted mid-review. If the document is still in review, this call WAITS for the user to finish the review in Stript and returns the result as soon as they click Anonymize. When it returns pending_review instead, call it again immediately to keep waiting, and repeat while the result says pending_review and the user has not cancelled. The document_id is optional, without it the most recent document in the project is fetched, so a plain "fetch my Stript result" works. Returns only anonymized content, never the original document text. Reading a stored result is free, it never consumes an evaluation document.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idNoThe Stript document id to fetch. Omit for the most recent document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextNo
typesNo
statusYes
warningsNo
evaluationNo
project_idNo
document_idNo
output_fileNo
replacementsNo
residual_riskNo
anonymized_textNo
degraded_reasonsNo
detections_totalNo
reduced_accuracyNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses important blocking behavior ('this call WAITS for the user to finish the review'), the pending_review return/retry pattern, and resource implications ('Reading a stored result is free, it never consumes an evaluation document'). It also states that only anonymized content is returned, never original text. These go well beyond the readOnlyHint/destructiveHint annotations.

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?

Though the description is longer than typical, every sentence adds a distinct piece of information: trigger conditions, blocking behavior, retry instructions, optional parameter semantics, output guarantee, and cost implication. It is front-loaded with the core action and remains tightly structured.

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

Completeness5/5

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

Given the tool's wait-and-retry behavior and optional parameter, the description covers the full invocation loop, the output constraint, and the resource impact. Combined with the output schema, this is sufficiently complete for an agent to use the tool correctly without additional context.

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

Parameters3/5

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

The schema already fully describes document_id as optional and says 'Omit for the most recent document.' The description repeats the same information in natural language ('without it the most recent document in the project is fetched') and adds a friendly paraphrase, but no new semantic meaning beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.

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 opens with the specific verb+resource: 'fetch the anonymized result of a Stript document,' clearly distinguishing it from siblings like stript_anonymize_file (anonymize) and stript_restore (restore). It adds context about pending_review and app restarts, making the purpose precise.

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?

It explicitly states when to use: 'after a pending_review status or after the app was restarted mid-review,' and gives a concrete retry loop: 'call it again immediately to keep waiting, and repeat while the result says pending_review.' It also explains the optional parameter use case, so an agent knows a bare call works.

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

stript_restoreRestore original values into placeholder textA

Use this when an AI answer that contains Stript placeholders like [PERSON_1] or [EMAIL_2] should get the original values back. The restored text never appears in the chat. It is written to the user clipboard by default or to a local file, always tell the user where it went. This tool returns replacement counts only. Restoring is free, it never consumes an evaluation document.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text containing Stript placeholders to restore
projectNoStript project id the placeholders belong to
filenameNoOutput file name when destination is file
destinationNoWhere the restored text is written, never into the chatclipboard

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNo
destinationYes
exact_restoreYes
ambiguous_skippedYes
replacements_madeYes
unmatched_placeholdersYes

TDQS

A4.5/5.0
Behavior5/5

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

The description richly discloses behaviors beyond annotations: it writes to clipboard or file, never appears in chat, returns replacement counts only, and is free (never consumes an evaluation document). This adds significant context that annotations alone (readOnlyHint: false, destructiveHint: false) do not convey, and it does not contradict any annotations.

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 four concise sentences, each adding critical information: when to use, output destination, return type, and cost. It is front-loaded with the primary use case and contains no filler or repetition. Every sentence earns its place.

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

Completeness5/5

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

Given the tool's moderate complexity (4 params, output schema, sibling tools), the description covers the purpose, usage scenario, output behavior, destination, and cost. It even includes a user instruction ('always tell the user where it went'). The output schema exists, so the description need not explain return values, but it still does. This is complete for an agent to use effectively.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters clearly. The description adds only a few contextual hints (e.g., examples of placeholders) but does not explain parameters in greater depth or add meaning beyond the schema. Baseline 3 is appropriate.

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 states a specific action ('restore original values into placeholder text') with a clear target (an AI answer containing Stript placeholders like [PERSON_1] or [EMAIL_2]). It distinguishes this tool from siblings by focusing on inline text and noting that restored text never appears in chat, which is unique among the listed tools.

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 opens with 'Use this when...' and gives a concrete scenario, establishing when to use it. It also provides guidance on always telling the user where the output went. However, it does not explicitly mention alternatives like stript_restore_file or when not to use this tool, so it lacks explicit exclusions.

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

stript_restore_fileRestore original values into a fileA

Use this to restore original values into a file that contains Stript placeholders like [PERSON_1], keeping the file format where possible. Ask the user for the file path, do not ask them to paste file content into the chat. The restored file is written to the Stript output folder and its content never appears in the chat. This tool returns replacement counts and the output path only. Restoring is free, it never consumes an evaluation document.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath of the placeholder-bearing file to restore
projectNoStript project id the placeholders belong to
output_filenameNoName for the restored file, defaults to a name derived from the input

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
formatYes
warningsYes
exact_restoreYes
ambiguous_skippedYes
replacements_madeYes
unmatched_placeholdersYes

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses key behavioral details beyond annotations: 'The restored file is written to the Stript output folder and its content never appears in the chat', 'returns replacement counts and the output path only', and 'Restoring is free'. These specifics about output location, output format, and cost are valuable context not provided by the annotations.

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 four sentences, each earning its place: purpose, usage instruction, output behavior, and cost. It is front-loaded and concise, with no redundant or verbose language.

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

Completeness5/5

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

For a tool with three parameters, an output schema, and annotations, the description fully covers the necessary context: what it does, how to use it (ask for path), what it returns (counts and path), where output goes, and that it is free. No significant gaps are apparent.

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

Parameters3/5

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

The schema already describes all three parameters with 100% coverage, so the baseline is 3. The description adds minimal parameter-specific meaning, only reinforcing that the path is a file path. It does not elaborate on the 'project' or 'output_filename' parameters beyond what the schema provides.

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 purpose: 'restore original values into a file that contains Stript placeholders'. It specifies the resource (file) and the action (restoring), and differentiates from siblings by focusing on file restoration, with the name stript_restore_file and description 'into a file' distinguishing it from stript_restore.

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 gives practical usage guidance: 'Ask the user for the file path, do not ask them to paste file content into the chat' and notes 'Restoring is free, it never consumes an evaluation document.' It does not explicitly mention when to use this instead of stript_restore or other siblings, but the context is clear enough for this file-specific tool.

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

stript_statusCheck the Stript app statusA
Read-only

Use this to check whether the Stript desktop app is running with AI integrations enabled, which license tier is active, and how many Free Evaluation documents remain. Call it before anonymizing when the state is unclear. It consumes no evaluation document and changes nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tierNo
guidanceNo
app_runningYes
app_versionNo
models_readyNo
backend_versionNo
integration_enabledYes
evaluation_remainingNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds that it 'consumes no evaluation document and changes nothing,' providing domain-specific reassurance and clarifying side effects beyond the annotations.

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 exactly two sentences: the first enumerates the specific checks performed, the second gives usage guidance and side-effect confirmation. Every sentence carries meaningful content with no redundancy.

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

Completeness5/5

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

Despite having zero parameters, the description fully covers the tool's purpose, when to use it, and its side-effect-free nature. An output schema exists, so return value details are already structured and do not need to be repeated in the description.

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?

The tool has zero parameters, so schema coverage is effectively 100%. The description adds no parameter details, but none are needed; the baseline score of 4 applies as there is nothing to clarify.

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 checks whether the Stript desktop app is running with AI integrations enabled, which license tier is active, and how many Free Evaluation documents remain. This specific enumeration of checks distinguishes it from sibling tools like stript_anonymize_file or stript_restore.

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 instructs to call it 'before anonymizing when the state is unclear,' providing a clear use case. It doesn't enumerate alternatives or exclusion cases, but the guidance is sufficient for a read-only status check.

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. 5 tool updatesv1.0.7
    • First observedstript_anonymize_file
    • First observedstript_fetch_result
    • First observedstript_restore
    • First observedstript_restore_file
    • First observedstript_status

TDQS

A4.4/5.0
Disambiguation4/5

The tools are largely distinct: anonymize_file initiates new processing, fetch_result retrieves existing results, restore and restore_file handle inverse operations for text and files, and status checks the app state. Some minor overlap exists between anonymize_file and fetch_result (both return anonymized content) and between the two restore tools, but the descriptions provide sufficient differentiation.

Naming Consistency3/5

All tools share the 'stript_' prefix and use snake_case, but the pattern is inconsistent: most are verb_noun (stript_anonymize_file, stript_fetch_result, stript_restore_file), while stript_restore lacks an object and stript_status is a noun rather than a verb. This makes the naming somewhat predictable but not uniform.

Tool Count5/5

With 5 tools, the server is well-scoped for its purpose: anonymize, fetch result, restore (both text and file), and check status. This is within the ideal 3-15 range and each tool serves a necessary step in the Stript workflow without unnecessary bloat.

Completeness5/5

The tool set covers the full lifecycle: anonymizing files, fetching results (including waiting for review), restoring placeholders in AI responses or files, and checking system status. There are no obvious dead ends or missing operations for the stated purpose of bridging Stript anonymization into MCP.

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
    D
    maintenance
    Provides local anonymization of Czech legal documents by replacing sensitive entities with pseudonyms to ensure privacy during LLM interactions. It allows users to safely process documents like contracts and judgments by keeping original data offline and facilitating local deanonymization.
    5
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Sanitizes text and files by removing PII, secrets, and custom patterns locally before sending to LLMs, with optional reverse-scrubbing.
    3
    327
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI agents with local file-processing capabilities for token counting, RAG chunking, CSV/JSON conversion, QR generation, and more, while keeping documents private on the user's machine.
    7
    1
    MIT

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/GlaserIngo/stript-mcp'

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