123ergo avatar

Unphurl

123ergo/unphurl-mcp

Gives Claude 16 tools to analyze URLs across redirect chains, brand impersonation, domain age, SSL/TLS, parked detection, URL structure, and DNS records. Returns structured signals with configurable risk scores (0-100) instead of binary verdicts. You get 20 free checks, then pay per unknown domain while known domains and cached results stay free. Useful for batch lead list verification, link health audits, vendor vetting, or any workflow where you need domain intelligence at scale. Works as local MCP (stdio), hosted remote server, or REST API. Ships with a companion skill that teaches Claude to proactively check URLs before following them.

tools
18
auth
Secret needed
transport
STDIO, HTTP
env var
1
last updated
Apr 23, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.unphurl.com/mcp --name unphurl

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http unphurl https://mcp.unphurl.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 18 tools

Verified live against the running server on Nov 6, 2026.

signupCreate a new Unphurl account. Returns an API key (shown once, store it securely). After signup, the user must check their email and click the verification link. The API key won't work for URL checks until the email is verified. Verification link expires after 24 hours. If the...3 params

Create a new Unphurl account. Returns an API key (shown once, store it securely). After signup, the user must check their email and click the verification link. The API key won't work for URL checks until the email is verified. Verification link expires after 24 hours. If the...

Parameters* required
companystring
Company name (optional)
email*string
Email address for the account
first_name*string
First name (used for personalized emails)
resend_verificationResend the email verification link for an existing Unphurl account. Use this when a user signed up but their verification link expired (links are valid for 24 hours) and they need a new one. The user's API key won't work until their email is verified. For security, the respons...1 params

Resend the email verification link for an existing Unphurl account. Use this when a user signed up but their verification link expired (links are valid for 24 hours) and they need a new one. The user's API key won't work until their email is verified. For security, the respons...

Parameters* required
email*string
Email address of the account that needs verification
check_urlCheck a single URL for security and data quality signals. Returns a risk score (0-100), detailed signal breakdown, and metadata. Unphurl analyses URLs across seven dimensions: redirect behaviour, brand impersonation, domain intelligence (age, registrar, expiration, status code...2 params

Check a single URL for security and data quality signals. Returns a risk score (0-100), detailed signal breakdown, and metadata. Unphurl analyses URLs across seven dimensions: redirect behaviour, brand impersonation, domain intelligence (age, registrar, expiration, status code...

Parameters* required
profilestring
Name of a custom scoring profile to use (optional). If omitted, default weights are used.
url*string
The URL to check (must be http:// or https://)
check_urlsCheck multiple URLs in a single batch. Returns results for all URLs, handling async processing automatically. Each URL is analysed across seven dimensions: redirect behaviour, brand impersonation, domain intelligence (age, registrar, expiration, status codes, nameservers via R...2 params

Check multiple URLs in a single batch. Returns results for all URLs, handling async processing automatically. Each URL is analysed across seven dimensions: redirect behaviour, brand impersonation, domain intelligence (age, registrar, expiration, status codes, nameservers via R...

Parameters* required
profilestring
Name of a custom scoring profile to use for all URLs (optional)
urls*array
List of URLs to check (maximum 500 per call)
estimate_urlsPre-flight credit estimator for a list of URLs. Returns counts + credit estimate. Free, no credits consumed. Call this before check_urls to show the user how many credits the batch will cost. Classifies each URL against three free gates: - tranco: URL's registrable domain is i...1 params

Pre-flight credit estimator for a list of URLs. Returns counts + credit estimate. Free, no credits consumed. Call this before check_urls to show the user how many credits the batch will cost. Classifies each URL against three free gates: - tranco: URL's registrable domain is i...

Parameters* required
urls*array
List of URLs to classify (maximum 500 per call)
list_profilesList all custom scoring profiles on this account. Returns profile names and their custom weight overrides. Profiles are named weight sets that change how Unphurl scores URLs. Different use cases need different scoring. A cold email agent cares about dead domains. A security bo...

List all custom scoring profiles on this account. Returns profile names and their custom weight overrides. Profiles are named weight sets that change how Unphurl scores URLs. Different use cases need different scoring. A cold email agent cares about dead domains. A security bo...

No parameters. Call it with no arguments.

create_profileCreate or update a custom scoring profile. Profiles are sparse overrides: only specify the weights you want to change. Everything else keeps its default value. If a profile with this name already exists, it is updated with the new weights (full replacement, not merge). Weights...2 params

Create or update a custom scoring profile. Profiles are sparse overrides: only specify the weights you want to change. Everything else keeps its default value. If a profile with this name already exists, it is updated with the new weights (full replacement, not merge). Weights...

Parameters* required
name*string
Profile name (lowercase alphanumeric and hyphens only, 1-50 chars, e.g. 'cold-email', 'security-bot')
weights*object
Custom weights for scoring signals. Only include signals you want to override. Available signals: brand_impersonation (default 40), domain_age_3 (35), domain_age_7 (25), domain_age_30 (15), domain_...
delete_profileDelete a custom scoring profile. This is permanent. Any future check requests using this profile name will fall back to default weights. Use list_profiles to see your current profiles before deleting.1 params

Delete a custom scoring profile. This is permanent. Any future check requests using this profile name will fall back to default weights. Use list_profiles to see your current profiles before deleting.

Parameters* required
name*string
Name of the profile to delete
show_defaultsShow all 25 scoring signals with their default weights and descriptions. This is the baseline scoring that applies when no custom profile is specified. Use this to understand what each signal means and how much it contributes to the score before creating custom profiles. Profi...

Show all 25 scoring signals with their default weights and descriptions. This is the baseline scoring that applies when no custom profile is specified. Use this to understand what each signal means and how much it contributes to the score before creating custom profiles. Profi...

No parameters. Call it with no arguments.

get_balanceCheck your pipeline check credit balance. Shows credits remaining, total purchased, total used, and lifetime free lookups count. Credits are consumed only when unknown domains run through the full analysis pipeline. Known domains (Tranco Top 100K) and cached domains (previousl...

Check your pipeline check credit balance. Shows credits remaining, total purchased, total used, and lifetime free lookups count. Credits are consumed only when unknown domains run through the full analysis pipeline. Known domains (Tranco Top 100K) and cached domains (previousl...

No parameters. Call it with no arguments.

get_pricingShow available pipeline check credit packages and pricing. Returns all packages with credit counts and prices. Packages (one-time purchase, no subscription): - Starter: 100 credits for $9 ($0.09 each) - Standard: 500 credits for $39 ($0.078 each) - Pro: 2,000 credits for $99 (...

Show available pipeline check credit packages and pricing. Returns all packages with credit counts and prices. Packages (one-time purchase, no subscription): - Starter: 100 credits for $9 ($0.09 each) - Standard: 500 credits for $39 ($0.078 each) - Pro: 2,000 credits for $99 (...

No parameters. Call it with no arguments.

purchasePurchase pipeline check credits. Returns a Stripe Checkout URL that the user must open in a browser to complete payment. The AI cannot complete the payment. Tell the user to open the URL in their browser, complete the Stripe checkout, and then confirm they've paid. Credits are...1 params

Purchase pipeline check credits. Returns a Stripe Checkout URL that the user must open in a browser to complete payment. The AI cannot complete the payment. Tell the user to open the URL in their browser, complete the Stripe checkout, and then confirm they've paid. Credits are...

Parameters* required
package*string
Package to purchase: pkg_100 ($9, 100 credits), pkg_500 ($39, 500 credits), pkg_2000 ($99, 2000 credits), pkg_10000 ($399, 10000 credits)one of pkg_100 · pkg_500 · pkg_2000 · pkg_10000
check_historyView recent URL check history. Shows what URLs have been checked, their scores, phishing status, and whether each check was free or used a pipeline credit. Results are paginated. Use page and limit parameters to navigate. Default is 20 results per page, maximum 100. History is...2 params

View recent URL check history. Shows what URLs have been checked, their scores, phishing status, and whether each check was free or used a pipeline credit. Results are paginated. Use page and limit parameters to navigate. Default is 20 results per page, maximum 100. History is...

Parameters* required
limitinteger
Results per page, max 100 (default 20)
pageinteger
Page number (default 1)
get_statsView your account usage statistics. Shows total URLs submitted, breakdown by gate (Tranco lookups, cache lookups, pipeline checks), free rate percentage, score threshold counts, and credit balance. Use this to understand your usage patterns: how many of your checks resolved fr...

View your account usage statistics. Shows total URLs submitted, breakdown by gate (Tranco lookups, cache lookups, pipeline checks), free rate percentage, score threshold counts, and credit balance. Use this to understand your usage patterns: how many of your checks resolved fr...

No parameters. Call it with no arguments.

list_allowlistList all domains on this account's trusted allowlist. Allowlisted domains suppress the compound signal and brand impersonation floor in scoring. The full pipeline still runs — all signals remain visible for monitoring. Use this to see which domains are currently trusted. Retur...

List all domains on this account's trusted allowlist. Allowlisted domains suppress the compound signal and brand impersonation floor in scoring. The full pipeline still runs — all signals remain visible for monitoring. Use this to see which domains are currently trusted. Retur...

No parameters. Call it with no arguments.

add_to_allowlistAdd one or more domains to this account's trusted allowlist. Allowlisted domains suppress the compound signal and brand impersonation floor in scoring. The full pipeline still runs — all signals remain visible so you can monitor trusted domains for SSL expiry, parking, or othe...1 params

Add one or more domains to this account's trusted allowlist. Allowlisted domains suppress the compound signal and brand impersonation floor in scoring. The full pipeline still runs — all signals remain visible so you can monitor trusted domains for SSL expiry, parking, or othe...

Parameters* required
domains*array
Registrable domains to add (e.g. ['partnerco.com', 'trustedvendor.io']). Subdomains and full URLs are rejected.
remove_from_allowlistRemove one or more domains from this account's trusted allowlist. Once removed, those domains resume normal scoring on the next check. Use list_allowlist to see what is currently on the list before removing.1 params

Remove one or more domains from this account's trusted allowlist. Once removed, those domains resume normal scoring on the next check. Use list_allowlist to see what is currently on the list before removing.

Parameters* required
domains*array
Registrable domains to remove (e.g. ['partnerco.com'])
generate_pdfGenerate a branded PDF audit report. Pass the complete audit JSON object and your reseller details. Returns a 24-hour download link.5 params

Generate a branded PDF audit report. Pass the complete audit JSON object and your reseller details. Returns a 24-hour download link.

Parameters* required
audit_json*object
The complete audit JSON object produced during the audit pipeline.
reseller_company_urlstring
Your company URL (optional).
reseller_email*string
Your contact email.
reseller_name*string
Your full name.
reseller_positionstring
Your position or title (optional).

Sponsors

Configuration

UNPHURL_API_KEY*secret

Your Unphurl API key (get one at unphurl.com or via the signup tool)

Readme

 _   _ _   _ ____  _   _ _   _ ____  _
| | | | \ | |  _ \| | | | | | |  _ \| |
| | | |  \| | |_) | |_| | | | | |_) | |
| |_| | |\  |  __/|  _  | |_| |  _ <| |___
 \___/|_| \_|_|   |_| |_|\___/|_| \_\_____|

URL intelligence for AI agents and developers. 16 MCP tools. 25 signals. 7 dimensions.

Give your AI agent eyes for URLs. Unphurl analyses any URL across 7 dimensions (redirect behaviour, brand impersonation, domain age, SSL/TLS, parked detection, URL structure, DNS enrichment) and returns structured signals with a configurable 0-100 risk score. Signals, not verdicts. Your agent decides what to do with them.

Works with Claude Code, Claude Desktop, Claude Cowork, ChatGPT desktop, Cursor, Windsurf, and any MCP-compatible tool.

What it costs

Every new account gets 20 free pipeline check credits. Most lookups are free. Known domains (Tranco Top 100K) and previously analysed domains return cached results at no cost. You only pay when an unknown domain runs through the full pipeline.


View the full README on GitHub

Details

Repository
github.com/123ergo/unphurl-mcp
Package
@unphurl/mcp-server
Transport
STDIO, HTTP
Auth
Required
Registry
MCP registry, active
Tools verified
Nov 6, 2026