Koskamo

Presend MCP Server

An MCP server exposing 34 tools for AI agents to perform file cleaning, compression, format conversion, integrity checks, and security validations like typosquat and vulnerability checks for npm/PyPI packages. It operates with no authentication or signup required.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Presend MCP Server logo, by PresendCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Presend
MCP endpoint (Streamable HTTP)
https://presend.pages.dev/mcp
Vendor documentation

What its tools do

40 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

40 of 40 have a description · 40 of 40 declare behavior hints · 40 of 40 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check npm or PyPI packages for typosquats and vulnerabilities before installation
  • Remove hidden metadata from images, PDFs, and Office documents locally
  • Compress images and PDFs without uploading files to a server
  • Generate passwords or QR codes using client-side Web APIs

Source and maintenance

Community listingRegistry 3.1.2
Maintenance checked

Protocol and capabilities

Server
presend-mcp 3.1.2
MCP protocol negotiated in check
2025-06-18
Tools
40 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Tools

40 advertised

address_risk — Crypto address sanctions check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

address_risk input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "Address to screen: EVM (0x + 40 hex chars) or Bitcoin (bc1..., 1..., 3...), both fully covered. Addresses of other chains are matched against their lists too; bech32 addresses of other chains (e.g. cosmos1...) return sanctioned: null (unchecked, not clean) when not listed."
    }
  }
}
address_risk annotations
{
  "title": "Crypto address sanctions check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
ai_crawler_check — AI crawler check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

ai_crawler_check input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to check, e.g. example.com. robots.txt is fetched from https://<domain>/robots.txt."
    }
  }
}
ai_crawler_check annotations
{
  "title": "AI crawler check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
base64 — Base64 encode / decode
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

base64 input schema
{
  "type": "object",
  "required": [
    "action",
    "text"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Text to encode, or Base64 string to decode."
    },
    "action": {
      "type": "string",
      "description": "Either 'encode' or 'decode'."
    }
  }
}
base64 annotations
{
  "title": "Base64 encode / decode",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
color — Color converter
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

color input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "hex": {
      "type": "string",
      "description": "Hex color code, e.g. #ff0000 or ff0000. Provide exactly one of hex, rgb, or hsl."
    },
    "hsl": {
      "type": "string",
      "description": "HSL color, e.g. 0,100%,50%. Provide exactly one of hex, rgb, or hsl."
    },
    "rgb": {
      "type": "string",
      "description": "RGB color, e.g. 255,0,0. Provide exactly one of hex, rgb, or hsl."
    }
  }
}
color annotations
{
  "title": "Color converter",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
csv_json — CSV / JSON converter
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

csv_json input schema
{
  "type": "object",
  "required": [
    "direction",
    "data"
  ],
  "properties": {
    "data": {
      "type": "string",
      "description": "The CSV or JSON text to convert, matching the chosen direction."
    },
    "direction": {
      "type": "string",
      "description": "Either 'csv-to-json' or 'json-to-csv'."
    }
  }
}
csv_json annotations
{
  "title": "CSV / JSON converter",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
cve_lookup — CVE lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

cve_lookup input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "CVE, GHSA, or other OSV-native identifier, e.g. CVE-2021-44228."
    }
  }
}
cve_lookup annotations
{
  "title": "CVE lookup",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
dns_lookup — DNS lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

dns_lookup input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "type": {
      "type": "string",
      "description": "Narrow to a single record type. Omit to get all 6 at once."
    },
    "domain": {
      "type": "string",
      "description": "Domain to look up, e.g. example.com."
    }
  }
}
dns_lookup annotations
{
  "title": "DNS lookup",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
email_disposable — Disposable email check
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

email_disposable input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to check against a list of known disposable/temporary email domains."
    }
  }
}
email_disposable annotations
{
  "title": "Disposable email check",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
email_security — Email domain security check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

email_security input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to check SPF, DKIM, and DMARC records for, e.g. example.com."
    }
  }
}
email_security annotations
{
  "title": "Email domain security check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
email_validate — Email address validation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

email_validate input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to validate for correct syntax and a resolvable domain."
    }
  }
}
email_validate annotations
{
  "title": "Email address validation",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
email_verify — Email verification
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

email_verify input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to run through combined syntax, disposable-domain, and MX-record checks."
    }
  }
}
email_verify annotations
{
  "title": "Email verification",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
favicon — Favicon lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

favicon input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to fetch the favicon URL for, e.g. example.com."
    }
  }
}
favicon annotations
{
  "title": "Favicon lookup",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
iban_validate — IBAN validation
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

iban_validate input schema
{
  "type": "object",
  "required": [
    "iban"
  ],
  "properties": {
    "iban": {
      "type": "string",
      "description": "IBAN to validate. Spaces are ignored."
    }
  }
}
iban_validate annotations
{
  "title": "IBAN validation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ip_reputation — IP reputation check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

ip_reputation input schema
{
  "type": "object",
  "required": [
    "ip"
  ],
  "properties": {
    "ip": {
      "type": "string",
      "description": "IPv4 or IPv6 address to check (IPv4-mapped IPv6 such as ::ffff:1.2.3.4 is checked against the IPv4 list) against a curated list of known hijacked or cyber-crime-controlled netblocks."
    }
  }
}
ip_reputation annotations
{
  "title": "IP reputation check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jwt_decode — JWT decode
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

jwt_decode input schema
{
  "type": "object",
  "required": [
    "token"
  ],
  "properties": {
    "token": {
      "type": "string",
      "description": "The JWT to decode. Decodes header and payload only -- does not verify the signature (use /jwt-verify for that)."
    }
  }
}
jwt_decode annotations
{
  "title": "JWT decode",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jwt_verify — JWT signature verification
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

jwt_verify input schema
{
  "type": "object",
  "required": [
    "token"
  ],
  "properties": {
    "jwk": {
      "type": "object",
      "description": "Public key in JWK format, for RS/PS/ES algorithms."
    },
    "token": {
      "type": "string",
      "description": "The JWT to verify. Checks the cryptographic signature -- use /jwt-decode if you only need to read the header and payload."
    },
    "secret": {
      "type": "string",
      "description": "Required for HS256/384/512."
    },
    "jwks_url": {
      "type": "string",
      "description": "URL to a JWKS document; the key is matched by the token's \"kid\" header."
    }
  }
}
jwt_verify annotations
{
  "title": "JWT signature verification",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
link_metadata — Link preview metadata
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetches a web page and extracts its title, description, canonical URL, Open Graph and Twitter Card tags and favicon (the data behind link previews). Follows redirects and returns final_url; favicon_source says whether the icon is declared by the page or only the /favicon.ico guess. To see each redirect hop, use redirect_trace.

link_metadata input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL to extract title, description, and Open Graph / Twitter Card metadata from."
    }
  }
}
link_metadata annotations
{
  "title": "Link preview metadata",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
maintainer_change_check — Package maintainer change check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

maintainer_change_check input schema
{
  "type": "object",
  "required": [
    "ecosystem",
    "package"
  ],
  "properties": {
    "package": {
      "type": "string",
      "description": "Package name, e.g. lodash"
    },
    "ecosystem": {
      "type": "string",
      "description": "npm (full analysis) or pypi (existence and age only)."
    }
  }
}
maintainer_change_check annotations
{
  "title": "Package maintainer change check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
password — Password generator
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

password input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "length": {
      "type": "string",
      "description": "Desired password length. Defaults to a reasonable secure length if omitted."
    },
    "numbers": {
      "type": "string",
      "description": "Whether to include numeric digits. 1 for yes, 0 for no."
    },
    "symbols": {
      "type": "string",
      "description": "Whether to include symbol characters. 1 for yes, 0 for no."
    },
    "uppercase": {
      "type": "string",
      "description": "Whether to include uppercase letters. 1 for yes, 0 for no."
    },
    "exclude_ambiguous": {
      "type": "string",
      "description": "Whether to exclude visually ambiguous characters (e.g. 0/O, 1/l). 1 for yes, 0 for no."
    }
  }
}
password annotations
{
  "title": "Password generator",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
password_breach — Password breach check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

password_breach input schema
{
  "type": "object",
  "required": [
    "password"
  ],
  "properties": {
    "password": {
      "type": "string",
      "description": "Password to check against known data-breach corpora. Only a 5-character SHA-1 hash prefix is sent to HIBP (k-anonymity), but the password itself travels in this request's URL; for real passwords, prefer password_check, which takes it in a POST body."
    }
  }
}
password_breach annotations
{
  "title": "Password breach check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
password_check — Password strength check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

password_check input schema
{
  "type": "object",
  "required": [
    "password"
  ],
  "properties": {
    "password": {
      "type": "string",
      "description": "Password to evaluate for strength (length, character variety, common patterns)."
    },
    "check_breach": {
      "type": "boolean",
      "description": "Whether to also check the password against known data-breach corpora via k-anonymity. true or false."
    }
  }
}
password_check annotations
{
  "title": "Password strength check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
phone_verify — Phone number validation
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

phone_verify input schema
{
  "type": "object",
  "required": [
    "number"
  ],
  "properties": {
    "number": {
      "type": "string",
      "description": "Phone number to validate and format, ideally in E.164 format (e.g. +14155552671)."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code (e.g. US, FR). Required unless the number starts with +: over MCP the end user's country cannot be inferred."
    }
  }
}
phone_verify annotations
{
  "title": "Phone number validation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
redirect_trace — Redirect trace
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

redirect_trace input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL to follow the full redirect chain for, hop by hop."
    }
  }
}
redirect_trace annotations
{
  "title": "Redirect trace",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
repo_health_check — Repository health check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

repo_health_check input schema
{
  "type": "object",
  "required": [
    "repo"
  ],
  "properties": {
    "repo": {
      "type": "string",
      "description": "GitHub repository in owner/name format, e.g. lodash/lodash."
    }
  }
}
repo_health_check annotations
{
  "title": "Repository health check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
rpc_check — Cosmos RPC endpoint check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

rpc_check input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Base URL of a CometBFT RPC endpoint to audit, e.g. https://rpc.cosmos.network:443."
    }
  }
}
rpc_check annotations
{
  "title": "Cosmos RPC endpoint check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
security_headers — HTTP security headers check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

security_headers input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL to audit HTTP security headers for (CSP, HSTS, X-Frame-Options, etc.)."
    }
  }
}
security_headers annotations
{
  "title": "HTTP security headers check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
security_scan — Website security scan
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

security_scan input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL to run a combined security posture check against (headers, reputation, and related signals)."
    }
  }
}
security_scan annotations
{
  "title": "Website security scan",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
subdomains — Subdomain discovery
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

subdomains input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to passively discover subdomains for via Certificate Transparency logs, e.g. example.com."
    }
  }
}
subdomains annotations
{
  "title": "Subdomain discovery",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
supply_chain_check — Package supply-chain check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

supply_chain_check input schema
{
  "type": "object",
  "required": [
    "ecosystem",
    "package"
  ],
  "properties": {
    "package": {
      "type": "string",
      "description": "Package name to check."
    },
    "version": {
      "type": "string",
      "description": "Exact version to check for known vulnerabilities. Optional: defaults to the latest published version (npm and PyPI)."
    },
    "ecosystem": {
      "type": "string",
      "description": "Package ecosystem, e.g. npm. maintainer-change-check only runs for npm."
    }
  }
}
supply_chain_check annotations
{
  "title": "Package supply-chain check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
text_similarity — Text similarity
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

text_similarity input schema
{
  "type": "object",
  "required": [
    "texts"
  ],
  "properties": {
    "texts": {
      "type": "array",
      "description": "1 text (hash only) or 2 texts (compare). Max 200,000 characters each."
    }
  }
}
text_similarity annotations
{
  "title": "Text similarity",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
timestamp — Timestamp converter
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

timestamp input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "description": "Date/time string to convert to a Unix timestamp. Provide either unix or date, not both."
    },
    "unix": {
      "type": "string",
      "description": "Unix timestamp (seconds since epoch) to convert to a human-readable date. Provide either unix or date, not both."
    }
  }
}
timestamp annotations
{
  "title": "Timestamp converter",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
tx_decode — Cosmos transaction decoder
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

tx_decode input schema
{
  "type": "object",
  "required": [
    "tx"
  ],
  "properties": {
    "tx": {
      "type": "string",
      "description": "Base64-encoded Cosmos SDK TxRaw protobuf bytes, as returned by a chain's CometBFT RPC /block or /tx_search endpoints."
    }
  }
}
tx_decode annotations
{
  "title": "Cosmos transaction decoder",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
typosquat_check — Package typosquat check
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

typosquat_check input schema
{
  "type": "object",
  "required": [
    "ecosystem",
    "package"
  ],
  "properties": {
    "package": {
      "type": "string",
      "description": "Package name to check for likely typosquatting of a well-known package in the given ecosystem."
    },
    "ecosystem": {
      "type": "string",
      "description": "Package ecosystem, e.g. npm or PyPI."
    }
  }
}
typosquat_check annotations
{
  "title": "Package typosquat check",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
url_clean — URL tracking-parameter cleaner
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

url_clean input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL to strip tracking parameters from (utm_*, fbclid, gclid, and similar)."
    }
  }
}
url_clean annotations
{
  "title": "URL tracking-parameter cleaner",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
url_reputation — URL reputation check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

url_reputation input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL to check against known phishing/malware URL databases."
    }
  }
}
url_reputation annotations
{
  "title": "URL reputation check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
user_agent — User-Agent parser
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

user_agent input schema
{
  "type": "object",
  "required": [
    "ua"
  ],
  "properties": {
    "ua": {
      "type": "string",
      "description": "User-Agent string to parse. Required over MCP: the server cannot see the end user's own User-Agent."
    }
  }
}
user_agent annotations
{
  "title": "User-Agent parser",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
uuid — UUID generator
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generates 1 to 100 random UUID v4 values.

uuid input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "count": {
      "type": "string",
      "description": "Number of UUIDs (v4) to generate. Defaults to 1 if omitted."
    }
  }
}
uuid annotations
{
  "title": "UUID generator",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vat_validate — EU VAT number validation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

vat_validate input schema
{
  "type": "object",
  "required": [
    "vat"
  ],
  "properties": {
    "vat": {
      "type": "string",
      "description": "VAT number, with or without the country prefix."
    },
    "country": {
      "type": "string",
      "description": "2-letter EU country code (EL for Greece, XI for Northern Ireland). Optional if vat includes the prefix."
    }
  }
}
vat_validate annotations
{
  "title": "EU VAT number validation",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
vulnerability_check — Package vulnerability check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

vulnerability_check input schema
{
  "type": "object",
  "required": [
    "ecosystem",
    "package"
  ],
  "properties": {
    "package": {
      "type": "string",
      "description": "Package name to check against OSV.dev for known CVEs."
    },
    "version": {
      "type": "string",
      "description": "Omit to check all versions of the package."
    },
    "ecosystem": {
      "type": "string",
      "description": "Package ecosystem, e.g. npm, PyPI, Go, crates.io, Maven, RubyGems, Packagist, or NuGet."
    }
  }
}
vulnerability_check annotations
{
  "title": "Package vulnerability check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
whois_lookup — WHOIS lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

whois_lookup input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to look up registration details for via RDAP, e.g. example.com."
    }
  }
}
whois_lookup annotations
{
  "title": "WHOIS lookup",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
565 ms
95th percentile latency
565 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 565 ms · metadata changed · 40 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http presend-mcp-server https://presend.pages.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add presend-mcp-server --url https://presend.pages.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable presend-mcp-server in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "presend-mcp-server": {
      "url": "https://presend.pages.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "presend-mcp-server": {
      "type": "streamableHttp",
      "url": "https://presend.pages.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start presend-mcp-server and inspect its tools.
VS Code configuration
{
  "servers": {
    "presend-mcp-server": {
      "type": "http",
      "url": "https://presend.pages.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http presend-mcp-server https://presend.pages.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://presend.pages.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "presend-mcp-server": {
      "serverUrl": "https://presend.pages.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Presend MCP Server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.