Presend MCP Server

io.github.presendappPublished by GitHub account presendappv3.1.2Updated Oct 30, 2026

Before an AI agent installs an npm/PyPI package: typosquat, vulnerability and existence checks.

Overview

AI-generated overview

Remote MCP server of free security and utility checks, best known for vetting npm/PyPI packages before an AI agent installs them.

What you can do
  • Check packages before installing: typosquatting, known vulnerabilities by version, publisher changes, repo health and a combined supply-chain check
  • Look up domains and networks: DNS records, RDAP/WHOIS registration, passive subdomains, IP reputation, URL reputation and redirect chains
  • Audit web security: HTTP security headers with grade, AI crawler rules in robots.txt, email SPF/DMARC/DKIM setup, link metadata and favicons
  • Validate data: email addresses, phone numbers, IBANs, EU VAT numbers via VIES, JWTs (decode or verify), CVEs and crypto address sanctions
  • Convert and generate: CSV/JSON, Base64, colors, timestamps, UUIDs, passwords, text similarity, User-Agent parsing and URL…
When to use it
Useful when an assistant writes or reviews dependency installs and should screen package names first, and as a general toolbox for quick domain, email, URL and token checks without leaving the chat.
Requirements
Remote Streamable HTTP endpoint; no account, API key or environment variables are needed. Per-minute rate limits apply. Some checks depend on third-party services (OSV.dev, crt.sh, HIBP, VIES, URLhaus, Cloudflare DNS-over-HTTPS) that can be slow or unavailable.
Before you install
It is not a malware scanner and does not analyse package code; clean results are only absence of a listing, not proof of safety. Password and JWT tools take secrets as input, and password_check sends the password in a POST body. Some tools fetch arbitrary URLs or domains on your behalf. Rate limits apply and a paid team offer is being tested.

Installation

In SourceWeft

  1. Open Presend MCP Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.presendapp%2Fpresend-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "presend": {
      "type": "http",
      "url": "https://presend.pages.dev/mcp"
    }
  }
}

README

Presend — Free Privacy Tools, a Security API, and an MCP Server for AI Agents

[Open in GitHub Codespaces] [Live Site]

[Tools] [API] [MCP Server] [npm] [GitHub Marketplace] [Run in Postman] [License] [PWA] [Privacy]

Presend checks npm and PyPI packages before they are installed: typosquats, known vulnerabilities of the version you use, publisher changes (npm), and names that do not exist or were first published in the last 30 days. It is available as a free API, an MCP server for AI agents and a GitHub Action. The site also has free browser tools; the file tools process files locally.

Open Presend · API docs · OpenAPI spec · MCP server · Measurements · For teams

Why Presend?

  • Before an agent installs a package -- the MCP tool supply_chain_check reports package_not_found for a name that does not exist on npm or PyPI (it may be invented by a model) and new_package for one first published less than 30 days ago.
  • Measured false alarms -- the typosquat check is measured on the most downloaded PyPI packages and the npm-high-impact list, with the scripts to reproduce it: see the measurements page.
  • Real supply-chain signal (API) -- maintainer-change-check flags a package recently taken over by a previously unseen publisher after a long dormancy (the event-stream pattern; it does not detect hijacked existing accounts).
  • What it is not -- not a malware scanner: it reports signals worth a look before installing, it does not analyse package code.
  • No account -- the API and the MCP server are free, with no signup and no key; per-minute rate limits apply. A paid offer for teams is being tested: Presend for teams.
  • Browser file tools -- the file tools (EXIF, PDF, images, office files) run locally with Web Crypto, Canvas and FileReader. A few other tools rely on a network service (speech recognition, password breach lookup, link preview...); the privacy page lists each one.
  • PWA -- install on mobile or desktop.

API & MCP Server

  • REST API -- free endpoints: supply-chain checks (typosquat, vulnerabilities of a given version, maintainer change, repository health, and a combined supply-chain check), DNS and WHOIS lookups, email checks, JWT decode and verify, file and image processing, and everyday utilities. Full OpenAPI 3.0 spec.
  • MCP server -- the same checks as tools over Streamable HTTP, no signup, no key; listed in the official MCP registry as io.github.presendapp/presend-mcp.
  • npm client -- npm install presend-api, zero-dependency.
  • GitHub Action -- checks the dependencies of package.json or requirements.txt in CI (npm and PyPI).
  • Code examples -- working Python for LangChain, CrewAI, LlamaIndex, OpenAI Agents SDK, Google ADK, and plain REST.
  • MCP config guides -- copy-paste setup for Claude Desktop, Claude Code, Cursor, and Windsurf, no code required.
  • Browser extension -- "Presend — Clean Photos", strips EXIF/GPS on right-click.

Python: Cloudflare rejects the default urllib User-Agent (Python-urllib/3.x) with 403 error code: 1010. Set an explicit one, e.g. urllib.request.Request(url, headers={"User-Agent": "my-app/1.0"}). requests, curl and Node are not affected.

Browser Tools (48 total, 22 shown below)

ToolWhat it doesLink
EXIF RemoverStrip GPS, camera model, timestamps from photosOpen
PDF Metadata RemoverRemove author, software, dates from PDFsOpen
Image CompressorShrink JPG/PNG/WebP with quality previewOpen
PDF CompressReduce PDF file size without quality lossOpen
PDF MergerCombine multiple PDFs into one documentOpen
Image ResizerResize to exact dimensions (Instagram, LinkedIn, Twitter)Open
HEIC to JPG ConverterConvert iPhone photos to universal JPGOpen
Video Metadata RemoverStrip GPS and device data from MP4/MOVOpen
Office Metadata RemoverClean Word, Excel, PowerPoint hidden dataOpen
File Hash CheckerVerify SHA-256, SHA-1, SHA-512 checksumsOpen
Password GeneratorCreate cryptographically secure passwordsOpen
Password StrengthAnalyze password entropy and crack timeOpen
QR Code GeneratorGenerate QR codes for URLs, WiFi, textOpen
URL CleanerRemove tracking parameters (UTM, fbclid, gclid)Open
Email List CleanerDeduplicate, validate, clean email listsOpen
JSON to CSV ConverterConvert between JSON and CSV instantlyOpen
Image to Base64Encode images for embedding in HTML/CSSOpen
Text DiffCompare two texts side by sideOpen
Text FormatterBold, italic, stylized text for social mediaOpen
Thread SplitterSplit long text into Twitter/X threadsOpen
Word CounterCount words, characters, reading timeOpen
Color ContrastCheck WCAG accessibility contrast ratiosOpen

SEO and Performance

Presend is built for search engines and AI assistants:

  • Schema.org: structured data on the pages (Organization, FAQPage, BreadcrumbList...)
  • Sitemap: a static sitemap.xml covering the tools, blog and guides in 8 languages
  • Dynamic OG Images: API generates social preview images per tool
  • Core Web Vitals: Preconnect, DNS-prefetch, CSS preload, zero render-blocking JS
  • PWA: Service worker + manifest for offline use and installability
  • Privacy-First Analytics: Cloudflare Web Analytics (no cookies, no IP tracking)

Embed on Your Site

Add a Presend tool to your website or link back to us:

See all embed options

Tech Stack

  • Frontend: Vanilla HTML5, CSS3, ES6 (zero build step)
  • Hosting: Cloudflare Pages (200+ edge locations)
  • APIs: Cloudflare Workers (share links, analytics, sitemap, OG images)
  • Storage: Cloudflare KV (share links, 30-day TTL)
  • PWA: Service Worker + Web App Manifest

License

MIT — free to use, modify, and embed.

Open Presend

Source: README.md at commit e865551

Tools

40

address_risk

Crypto address sanctions check

Screens a crypto address against every OFAC SDN digital currency address list. EVM (0x...) and Bitcoin (bc1..., 1..., 3...) addresses are fully covered (sanctioned true or false, with the matching lists). Addresses of other chains are flagged when listed; Cosmos SDK bech32 addresses return sanctioned: null when not listed, as OFAC publishes none. A sanctions signal only, not a full risk score.

Parametersaddressrequired

ai_crawler_check

AI crawler check

Fetches a domain's robots.txt and reports which known AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot and others) are allowed or blocked, including wildcard rules. Reflects robots.txt only, not server-side blocking.

Parametersdomainrequired

base64

Base64 encode / decode

Encodes text to Base64 or decodes a Base64 string back to text (action = encode or decode).

Parameterstextrequiredactionrequired

color

Color converter

Converts a color between hex, RGB and HSL. Provide exactly one of hex, rgb or hsl.

Parametershexhslrgb

csv_json

CSV / JSON converter

Converts CSV text to JSON or JSON to CSV (direction: csv-to-json or json-to-csv), for data passed inline. CSV must be comma-separated, with a header row and at least one data row; double-quoted fields may contain commas. Semicolon- or tab-separated input is not detected and comes back as a single column. JSON input must be an array of objects: the union of their keys becomes the CSV header and missing values are left empty. Returns result (the converted text), rows and cols. Max 500,000 characters.

Parametersdatarequireddirectionrequired

cve_lookup

CVE lookup

Looks up a vulnerability by identifier (CVE, GHSA or other OSV ID) on OSV.dev: summary, CVSS severity, affected packages and versions, references. Use when you already have an ID; use vulnerability_check when you have a package name instead.

Parametersidrequired

dns_lookup

DNS lookup

Returns DNS records for a domain via Cloudflare DNS-over-HTTPS: A, AAAA, CNAME, MX, TXT and NS in one call, or a single record type with 'type'. For registration data use whois_lookup; for SPF/DMARC/DKIM analysis use email_security.

Parameterstypedomainrequired

email_disposable

Disposable email check

Checks only whether an email address uses a known disposable/temporary email domain. For syntax, MX, disposable and role-account checks in one call, use email_verify.

Parametersemailrequired

email_security

Email domain security check

Audits a domain's email anti-spoofing setup: SPF strength, DMARC policy and a best-effort DKIM lookup on common selectors. A missing DKIM match does not prove DKIM is absent. Checks a domain, not a single address.

Parametersdomainrequired

email_validate

Email address validation

Lightweight email check: syntax plus confirmation that the domain has an MX record. Does not detect disposable or role addresses; use email_verify for the combined check.

Parametersemailrequired

email_verify

Email verification

Most complete email check in one call: syntax, MX record, disposable-domain detection and role/generic account detection (e.g. info@, admin@). Prefer it over email_validate and email_disposable unless you need a single signal. Does not probe the mailbox. valid is null (not false) when the MX lookup could not be completed; retry later instead of treating the address as invalid.

Parametersemailrequired

favicon

Favicon lookup

Returns the favicon URL a website declares: fetches the homepage and takes the first <link rel='icon'> (or 'shortcut icon') href, resolved to an absolute URL, which may be a data: URI when the page inlines its icon (source: declared). If no icon is declared, or the homepage cannot be fetched, returns the conventional https://<domain>/favicon.ico with source: default and a note, without checking that it exists. Use it to display a site icon; it does not download or validate the image.

Parametersdomainrequired

iban_validate

IBAN validation

Validates an IBAN offline: ISO 7064 mod-97 checksum and country-specific length. Confirms the number is well-formed, not that the account exists.

Parametersibanrequired

ip_reputation

IP reputation check

Checks an IPv4 or IPv6 address against a curated list of netblocks known to be hijacked or run by spam/cyber-crime operations (IPv4-mapped IPv6 uses the IPv4 list). A narrow list-based signal: a clean result is not a safety guarantee. Includes list date and attribution.

Parametersiprequired

jwt_decode

JWT decode

Decodes a JWT's header and payload WITHOUT verifying its signature, so its claims must not be trusted on this basis alone. To check authenticity, use jwt_verify.

Parameterstokenrequired

jwt_verify

JWT signature verification

Cryptographically verifies a JWT signature (HS256/384/512, RS/PS256/384/512, ES256/384/512) and checks exp/nbf claims. Provide a secret for HS*, or a JWK or JWKS URL for RS/PS/ES. Use instead of jwt_decode whenever authenticity matters.

Parametersjwktokenrequiredsecretjwks_url

maintainer_change_check

Package maintainer change check

Publisher-change analysis is npm only. Also reports whether the package exists (found) and its age (first_published, package_age_days, new_package if first published less than 30 days ago), for npm and for PyPI; on PyPI only existence and age are available. Flags a previously unseen human publisher taking over a package after 180+ days of inactivity, within the last 365 days (the event-stream attack pattern). npm trusted publishing (verified OIDC identity, not just a bot-like account name), pre-release, and handovers to a publisher who already maintains another widely used package (100k+ weekly downloads) are reported but not flagged. Does not detect hijacked existing accounts; a heuristic for review, not proof.

Parameterspackagerequiredecosystemrequired

password

Password generator

Generates a random password, with options for length, symbols, uppercase, numbers and excluding ambiguous characters. To evaluate an existing password, use password_check.

Parameterslengthnumberssymbolsuppercaseexclude_ambiguous

password_breach

Password breach check

Checks whether a password appears in known data breaches (Have I Been Pwned) and how many times, using k-anonymity towards HIBP. Breach check only; password_check adds strength scoring and sends the password in a POST body.

Parameterspasswordrequired

password_check

Password strength check

Scores a password's strength (length, character variety, entropy as an upper bound, repeated patterns; passphrases are estimated per word) and, with check_breach=true, also looks it up in Have I Been Pwned breach data via k-anonymity (only a hash prefix is sent); a password found in breaches is always rated very_weak. Use it to evaluate a password someone is choosing; use password_breach when you only need the breach count, and password to generate a new one. The password travels in a POST body, never in a URL.

Parameterspasswordrequiredcheck_breach

phone_verify

Phone number validation

Validates and formats a phone number: validity, country, line type, E.164, international and national formats. Numbers without a leading + require 'country', since the end user's country cannot be inferred over MCP.

Parametersnumberrequiredcountry

redirect_trace

Redirect trace

Follows a URL's full redirect chain (up to 15 hops) and returns every hop with its status code, plus whether the chain crossed domains. Use it to see where a short or tracking link really leads; check the final URL with url_reputation.

Parametersurlrequired

repo_health_check

Repository health check

Maintenance signals for a GitHub repository given as owner/name: stars, forks, open issues, license, archived and fork flags, creation date and age, days since last push, topics. Use it to judge whether a dependency looks maintained or abandoned. For an npm or PyPI package whose repository you do not know, supply_chain_check resolves it from registry metadata and includes these signals. GitHub only; missing or private repositories return found: false.

Parametersreporequired

rpc_check

Cosmos RPC endpoint check

Read-only audit of a public CometBFT (Cosmos SDK) RPC endpoint: node status, health, peers, and whether unsafe admin methods (dial_seeds, dial_peers, unsafe_flush_mempool) are publicly exposed. Never calls an unsafe method; exposure is inferred from the node's route listing.

Parametersurlrequired

security_headers

HTTP security headers check

Audits the HTTP security headers of one URL (CSP, HSTS, X-Frame-Options, Permissions-Policy, cross-origin policies and others) and returns per-header findings with fix advice, a score and a letter grade. Use it when you need header hardening advice; security_scan runs this audit together with URL reputation and subdomain discovery in one call.

Parametersurlrequired

security_scan

Website security scan

Combined website check in one call: security headers, URL reputation and passive subdomain discovery, run in parallel, with an overall score and verdict. Use the individual tools when you need a single signal.

Parametersurlrequired

subdomains

Subdomain discovery

Passive subdomain discovery from Certificate Transparency logs (crt.sh): finds hostnames that appeared in public TLS certificates, not every DNS record. crt.sh is occasionally slow or unavailable.

Parametersdomainrequired

supply_chain_check

Package supply-chain check

Call this before installing or adding a package (npm install, pip install, a new entry in a manifest), especially one whose name you recalled or that a model suggested. One-call risk check: combines vulnerability_check (OSV.dev), typosquat_check, maintainer_change_check (npm only) and repo_health_check (when the GitHub repo can be resolved) into one overall verdict. A package that does not exist on npm or PyPI gets overall_risk 'package_not_found': the name may be invented and should not be installed. A package first published less than 30 days ago gets the 'new_package' flag and overall_risk 'review_recommended': new packages are where invented and look-alike names get registered, so the name is worth confirming against the project's own documentation before installing (on PyPI the age is that of the oldest release still published; being new does not make a package malicious). Use the individual tools to investigate one signal. Vulnerabilities are checked for the given version, or the latest published one (version_checked, version_source). If a check could not run (rate limit, upstream error), it is listed in unavailable_checks and overall_risk is 'incomplete', never 'no_signals_found'. Also flags a version marked deprecated on npm or yanked on PyPI.

Parameterspackagerequiredversionecosystemrequired

text_similarity

Text similarity

Near-duplicate detection with a 64-bit SimHash over word shingles: send 1 text to get its hash, or 2 texts to compare them. Detects paraphrased or lightly edited copies; unrelated texts score around 50%, not 0%.

Parameterstextsrequired

timestamp

Timestamp converter

Returns the current time, or converts between a Unix timestamp (seconds) and an ISO date. Provide unix or date, or neither for the current time.

Parametersdateunix

tx_decode

Cosmos transaction decoder

Decodes a raw signed Cosmos SDK transaction (base64 TxRaw bytes, as found in a CometBFT block's data.txs) into JSON: messages, fee, gas, signers and signatures. Bank, staking, gov and authz messages are fully decoded; other types are returned as type URL plus raw hex.

Parameterstxrequired

typosquat_check

Package typosquat check

Call before installing a package whose name you typed or recalled. Checks whether an npm or PyPI package name is a near-miss of a well-known package (typosquatting), with an edit-distance threshold scaled to name length; names of 3 characters or fewer are not fuzzy-matched. Uses a curated list of popular names, so a clean result does not prove a package is safe. It does not check that the package exists: supply_chain_check does.

Parameterspackagerequiredecosystemrequired

url_clean

URL tracking-parameter cleaner

Removes 60+ known tracking parameters (utm_*, fbclid, gclid and similar) from a URL and returns the clean URL. Does not follow redirects; for that, use redirect_trace.

Parametersurlrequired

url_reputation

URL reputation check

Checks a URL against URLhaus (abuse.ch), a public database of known malware distribution URLs. A clean result only means the URL is not listed, not that it is safe.

Parametersurlrequired

user_agent

User-Agent parser

Parses a User-Agent string into browser and version, operating system and version, device type, and whether it looks like a bot.

Parametersuarequired

uuid

UUID generator

Generates 1 to 100 random UUID v4 values.

Parameterscount

vat_validate

EU VAT number validation

Checks an EU VAT number in real time against the European Commission's VIES service and, when valid, returns the registered company name and address. VIES is occasionally unavailable for some member states.

Parametersvatrequiredcountry

vulnerability_check

Package vulnerability check

Checks a package (optionally a specific version) against OSV.dev for known vulnerabilities: npm, PyPI, Go, crates.io, Maven, RubyGems, Packagist and NuGet. For npm and PyPI, a name that does not exist returns found: false and vulnerable: null, never a clean result. Use cve_lookup when you already have a CVE/GHSA ID, or supply_chain_check for a combined verdict.

Parameterspackagerequiredversionecosystemrequired

whois_lookup

WHOIS lookup

Domain registration data via RDAP (the modern WHOIS): registrar, creation and expiration dates, domain age in days, nameservers. For DNS records, use dns_lookup.

Parametersdomainrequired

Version history

5
  1. v3.1.2LatestOct 2, 2026
  2. v3.1.1Oct 1, 2026
  3. v3.1.0Sep 26, 2026
  4. v1.0.1Sep 18, 2026
  5. v1.0.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts