Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.omitly/omitly-mcp

NPM · OMITLY-MCP · SCANNED AUG 19

Omitly's local, verifiable PDF redaction for AI agents — your documents never leave your device.

Available components

67 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: the license (SEE LICENSE IN LICENSE) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 0 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability69
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2749 tokens (~249/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
  • Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · omitly-mcp

# add to Claude Code
claude mcp add omitly-omitly-mcp -- npx -y omitly-mcp
# add to Codex CLI
codex mcp add omitly-omitly-mcp -- npx -y omitly-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "omitly-omitly-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "omitly-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add omitly-omitly-mcp --command npx --arg -y --arg omitly-mcp
# ~/.hermes/config.yaml
mcp_servers:
  omitly-omitly-mcp:
    command: "npx"
    args: ["-y", "omitly-mcp"]
// mcp.json
{
  "mcpServers": {
    "omitly-omitly-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "omitly-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Aug 26 +15
    • Malware scan: unverified → pass security
  • 18 Aug 26 −15
    • Malware scan: pass → unverified security
    • Schema quality: 214 → 249 functional
    • Package version: 0.1.11 → 0.1.14 functional
  • 17 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Aug 26 0
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Stability: unverified → 0.03 functional
    • First check of Schema quality: unverified functional
    • Package version: 0.1.10 → 0.1.11 functional
  • 15 Aug 26 66

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 19 Aug 2026 · Analysed npm/omitly-mcp@0.1.14

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm
Dependencies 96 packages
Packages resolved 96
Stale 30
Tree resolution Complete
MCP tools · 11 exposed · ~2,749 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
check_license ~224

Report Omitly's current licence or trial state on this machine — free, takes no arguments, and reads no document. Use it to answer 'am I licensed?', to see how many trial days are left, or to confirm a licence the user just saved has been picked up. Re-resolved on EVERY call, so buy → save the licence file → call again works without restarting this server. Reports which resolution step supplied the licence (OMITLY_LICENSE_FILE, the activated desktop licence, or the import inbox ~/.omitly/omitly.license), the tier, the vendor-signed licensee name, whether the licence is bound to this one machine, and whether this build can make licensed-provenance claims at all. It deliberately NEVER returns the device fingerprint (a stable machine identifier) or the licence file's contents — 'device-bound' is reported as a yes/no. Requires a configured native engine (OMITLY_ENGINE_DIR/OMITLY_REDACT_BIN): the wasm free tier has no licence concept, so there is nothing to report without one.

Input schema present but exposes no named parameters.

NameTypeReqDescription
daysLeftyes
deviceBoundbooleanyes
expiresAtstring|nullyes
licensedTostring|nullyes
provenanceAvailablebooleanyes
reasonstring|nullyes
renewalNoticestring|nullyes
resolutionStepstring|nullyes
statestringyes
tieryes

No examples provided.

check_redaction ~290

Audit an ALREADY-redacted PDF and report whether sensitive text still survives underneath the redaction — the 'did my black boxes actually remove the data?' check. Most tools redact by drawing a rectangle over text while leaving the characters in the file, where they stay selectable and extractable. This re-extracts the text on-device and flags any emails, SSNs, phone or card numbers that are still present, each with a MASKED preview — the raw value never leaves the machine. It checks the page text layer, text surviving UNDER redaction marks, incremental-update prior revisions (the classic 'redacted then saved, original still in the file' failure), document metadata, AcroForm field values and embedded attachments, and returns a coverage report so a clean result is scoped to what was inspected. A non-empty result means the redaction leaked. Nothing is uploaded. (Pattern-based: names/addresses, image-only text, and the surfaces listed as not-inspected aren't covered; absence of hits isn't proof of completeness.) Free tier (no native engine): reports are EVALUATION-marked — for evaluation, not production reliance — and limited to a monthly number of free checks, counted locally; past the cap this tool returns a structured 'free-cap' refusal. A configured licensed engine is not capped.

NameTypeReqDescription
pdfPathstringyesabsolute path to the supposedly-redacted PDF to audit
NameTypeReqDescription
byKindobjectyes
cleanbooleanyes
coverageobjectyes
evaluationboolean
offPagearrayyes
regionsarrayyes
survivorsarrayyes
totalFindingsintegeryes

No examples provided.

create_pdf ~184

Generate a clean PDF from Markdown (or raw HTML) on-device, rendered through a real browser engine so it looks printed — not like a script's best guess. Give it Markdown inline via `source` (or a file via `sourcePath`) and an `outputPath`; it writes the PDF and returns the path. Use this instead of writing a one-off reportlab/LaTeX/pandoc script. Nothing is uploaded.

NameTypeReqDescription
cssstringextra CSS appended after the default print styles
formatstringinput format (default: markdown)
outputPathstringyesabsolute path to write the PDF
sourcestringinline Markdown/HTML (omit if using sourcePath)
sourcePathstringabsolute path to a Markdown/HTML file
titlestringdocument <title> / metadata
NameTypeReqDescription
outputstringyes

No examples provided.

extract_pdf_text ~440

Extract a PDF's text, page by page, for reading or summarizing — PII-MASKED BY DEFAULT, so detected emails, SSNs, phone/card numbers and Australian identifiers (TFN/ABN/ACN/Medicare/CRN/IHI/BSB) never flood your context window as raw values. Each page returns its (masked, unless you opt out) text plus 'spans': the CHAR offset (not byte offset — matters for any non-ASCII text) of every detected PII value with its kind, so you can still reason about WHERE something was found even though the value itself reads as a masked preview (e.g. '•••-••-6789'). Pass 'masked: false' ONLY when you deliberately need the raw text for genuine content review and understand the raw PII values will then appear verbatim in this response and in your context — that is the explicit, documented opt-in this tool requires; the default is always masked. A page whose content stream could not be read (corrupt or size-capped) reports 'contentDecoded: false' with empty text rather than being silently skipped or counted as blank. Does NOT render pages to images — text only. Free tier, no licence required; works zero-install via the bundled wasm engine, same as find_sensitive_regions/locate_text/check_redaction/verify_redaction — a configured native engine (OMITLY_ENGINE_DIR) is preferred when available (also enables the 'regions' filter, wasm-only ignores it and scans every pattern) but not required. The file is never uploaded: extraction runs entirely on-device.

NameTypeReqDescription
maskedbooleanfalse is an explicit opt-in to RAW (unmasked) text — the raw PII values will then appear verbatim in this response. Omit, or pass true, for the default masked behaviour.
pdfPathstringyesabsolute path to the PDF to extract text from
regionsarraynarrow which PII kinds are detected/masked to these regional packs (generic kinds like email/card always apply regardless); omit to scan everything — the safe default
NameTypeReqDescription
maskedbooleanyes
notestring
pagesarrayyes

No examples provided.

find_sensitive_regions ~358

Scan a PDF on-device and return candidate regions that look like PII — emails, US SSNs, phone numbers, card numbers, and Australian identifiers (TFN, ABN, ACN, Medicare, Centrelink CRN, IHI, BSB; kinds 'tfn'/'abn'/'acn'/'medicare'/'crn'/'ihi'/'bsb') — each with the page and exact coordinates (in PDF points) the redaction engine needs. Use this FIRST so you select regions by entity ('redact every TFN') and pass the returned coordinates straight to redact_pdf, instead of guessing geometry from a rendered page. Numeric kinds are check-digit validated where a published algorithm exists (CRN has none — its matches are format-only). Candidates are best-effort pattern matches for review — not a completeness guarantee and not a compliance assessment; the file is never uploaded — detection runs locally. Each candidate carries a MASKED preview (e.g. '•••-••-6789'), never the raw value: the secret stays on the machine. You don't need the plaintext to redact — drive it by page + coordinates. (A human reviewer has the file open locally for full context.) Free tier (no native engine): results are EVALUATION-marked and limited to a monthly number of free checks, counted locally — past the cap this tool returns a structured 'free-cap' refusal. A configured licensed engine is not capped.

NameTypeReqDescription
pdfPathstringyesabsolute path to the PDF to scan
regionsarraynarrow LISTED pattern kinds to these regional packs (generic kinds always listed; confirmed under-mark survivors always report); omit to scan everything — the safe default
NameTypeReqDescription
countintegeryes
evaluationboolean
notestring
regionsarrayyes

No examples provided.

locate_text ~145

Locate exact text strings in a PDF and return each occurrence's page and coordinates (in PDF points). Use this for what pattern-matching can't catch — names, addresses, account references — by doing the entity recognition YOURSELF and passing the literal strings here; the engine resolves where they sit so you never guess geometry from a rendered page. Feed the returned regions straight to redact_pdf. Case-insensitive; a string the PDF splits across text operators may not match as one run. Each hit returns a masked preview, not the raw text. Nothing is uploaded.

NameTypeReqDescription
pdfPathstringyesabsolute path to the PDF to search
textsarrayyesliteral strings to locate
NameTypeReqDescription
countintegeryes
regionsarrayyes

No examples provided.

redact_by_entity ~233

Find and redact PII in a PDF in ONE on-device step: scan, keep only the requested entity kinds (email/ssn/phone/card plus the Australian tfn/abn/acn/medicare/crn/ihi/bsb — omit `kinds` to redact every kind detected), remove them, verify, and return what was redacted plus the audit log. This is the 'just scrub the obvious PII' shortcut; when you need to review before removing, call find_sensitive_regions first. Same caveat as the detector: matches are best-effort pattern matching, not a completeness guarantee and not a compliance assessment. Nothing is uploaded.

NameTypeReqDescription
drawBoxbooleanalso paint a black bar (default: opaque fill only)
kindsarrayentity kinds to redact; omit to redact all detected
outputPathstringyesabsolute path to write the redacted PDF
pdfPathstringyesabsolute path to the source PDF
regionsarraynarrow to these regional packs (intersects with `kinds`); omit for all
NameTypeReqDescription
audityes
outputstring|nullyes
redactedarrayyes
redactedCountintegeryes
verdictyes

No examples provided.

redact_pdf ~102

Permanently redact regions of a PDF on-device using Omitly. Removes the underlying text and image data (not a black box over it), verifies nothing survives in each region, and returns a signed audit log. The file is never uploaded — redaction happens locally.

NameTypeReqDescription
outputPathstringyesabsolute path to write the redacted PDF
pdfPathstringyesabsolute path to the source PDF
regionsarrayyesregions to remove
NameTypeReqDescription
auditobjectyes
outputstringyes
regionCountintegeryes
verdictstringyes

No examples provided.

verify_document ~320

Recipient trust-verification: for someone who RECEIVED a PDF from someone else and wants to confirm it's an authentic, unaltered Omitly output — free tier, no licence required. Confirms the embedded audit report and Ed25519 tamper-evidence seal are valid and unaltered since sealing, and reports the seal's own attested verdict — this does not independently re-scan the document for residual PII. For that self-check (typically run by the person who just redacted, not a recipient), use `verify_redaction` instead. The seal proves INTEGRITY, NOT IDENTITY: the signing key is per-install and travels with the file, so a valid seal means 'unchanged since sealed by the holder of this key', never 'produced by Omitly' — compare `sealFingerprint` out-of-band against the fingerprint the sender published if origin matters. Currently requires a configured native engine (OMITLY_ENGINE_DIR/OMITLY_REDACT_BIN) — there is no wasm seal-verification path yet (tracked in issue #113), so a recipient running only `npx omitly-mcp` with no engine installed cannot use this tool until that lands. A `seal_unsupported_version` verdict means this verifier is too old to check the seal at all — that is neither a pass nor a fail; update the verifier rather than trusting or rejecting the file on that basis.

NameTypeReqDescription
pdfPathstringyesabsolute path to the PDF to check for an Omitly audit report and seal
NameTypeReqDescription
allPassedboolean|nullyes
carriesAuditReportboolean|nullyes
decisionChannelstring|nullyes
inputSha256string|nullyes
licenseProvenanceyes
metadataScrubbedboolean|nullyes
outputFilenamestring|nullyes
outputSha256string|nullyes
pageCountyes
regionCountyes
sealFingerprintstring|nullyes
sealValidboolean|nullyes
sealVersionstring|nullyes
sourceFilenamestring|nullyes
verdictstringyes
warningsyes

No examples provided.

verify_redaction ~213

Re-scan an already-redacted PDF on-device and confirm nothing recoverable remains. With a configured native engine and this file's own `<path>.audit.json` sidecar (written by redact_pdf/redact_by_entity), this re-checks exactly the regions that were redacted — the strongest form of this check. Without a native engine (or without that sidecar — e.g. the file wasn't redacted by this tool), it falls back to a general on-device re-scan of the whole file and reports whether anything is still detectable — a good-faith re-check, not a claim of the same rigor as the sidecar-based path. This is a self-check for the person who just redacted, typically the one holding the sidecar file — a third-party recipient who only has the delivered PDF should use `verify_document` instead, which checks the embedded audit report and seal rather than re-scanning region bytes.

NameTypeReqDescription
pdfPathstringyesabsolute path to the redacted PDF to verify
NameTypeReqDescription
cleanbooleanyes
findingsarrayyes
modestringyes
totalFindingsintegeryes
verdictstring

No examples provided.

verify_seal ~240

Verify a PDF's embedded Omitly audit report and trailing Ed25519 tamper-evidence seal — on-device, nothing uploaded. Distinct from `verify_redaction`: that tool re-checks whether redacted regions are still empty; this tool cryptographically checks whether the delivered bytes have changed since they were sealed. The seal proves INTEGRITY, NOT IDENTITY: the signing key is per-install and travels with the file, so a valid seal means 'unchanged since sealed by the holder of this key', never 'produced by Omitly'. Compare `sealFingerprint` out-of-band against the fingerprint the sender published if origin matters. Requires a configured native engine — there is no wasm seal-verification path, so this always needs OMITLY_ENGINE_DIR/OMITLY_REDACT_BIN. A `seal_unsupported_version` verdict means this verifier is too old to check the seal at all — that is neither a pass nor a fail; update the verifier rather than trusting or rejecting the file on that basis.

NameTypeReqDescription
pdfPathstringyesabsolute path to the PDF to check for an Omitly audit report and seal
NameTypeReqDescription
allPassedboolean|nullyes
carriesAuditReportboolean|nullyes
decisionChannelstring|nullyes
inputSha256string|nullyes
licenseProvenanceyes
metadataScrubbedboolean|nullyes
outputFilenamestring|nullyes
outputSha256string|nullyes
pageCountyes
regionCountyes
sealFingerprintstring|nullyes
sealValidboolean|nullyes
sealVersionstring|nullyes
sourceFilenamestring|nullyes
verdictstringyes
warningsyes

No examples provided.