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

Unphurl

REMOTE · MCP.UNPHURL.COM · 2 COMPONENTS · SCANNED AUG 3

URL intelligence for AI agents and developers. 16 tools, 25 signal weights, 20 free checks.

+2 this week 60 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security51
Transport & Reachability100
Schema Quality & AI Usability70
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3177 tokens (~176/item across 18 items; 18 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 Management27
  • Stability observed for 8 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
Capabilities40
  • Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
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.

remote · mcp.unphurl.com

# add to Claude Code
claude mcp add --transport http 123ergo-unphurl https://mcp.unphurl.com/mcp
# ~/.codex/config.toml
[mcp_servers.123ergo-unphurl]
url = "https://mcp.unphurl.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "123ergo-unphurl": {
      "type": "remote",
      "url": "https://mcp.unphurl.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add 123ergo-unphurl --url https://mcp.unphurl.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  123ergo-unphurl:
    url: "https://mcp.unphurl.com/mcp"
// mcp.json
{
  "mcpServers": {
    "123ergo-unphurl": {
      "type": "http",
      "url": "https://mcp.unphurl.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

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.

  • 2 Aug 26 +1

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

  • 31 Jul 26 −1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

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

  • 28 Jul 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.

  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 58

    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 3 Aug 2026 · Probed https://mcp.unphurl.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=unphurl.com CN=WE1,O=Google Trust Services,C=US 7 Jun 2026 5 Sept 2026 ECDSA 256 ECDSA-SHA256 1a2f15119f37ae4a13f7235fb366c924
SANs: unphurl.com, mcp.unphurl.com, *.mcp.unphurl.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC insecure

Validation of mcp.unphurl.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
unphurl.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains
x-content-type-options nosniff
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.unphurl.com/mcp Verified 200
http (plaintext) http://mcp.unphurl.com/mcp Inconclusive 405
MCP tools — 18 exposed · ~3,122 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
add_to_allowlist ~158

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 other changes. Submit the registrable domain only (e.g. partnerco.com). Subdomains and full URLs are rejected. Adding partnerco.com covers sub.partnerco.com and all other subdomains automatically. Maximum 1,000 domains per account. Maximum 100 domains per request. Duplicates are silently skipped.

NameTypeReqDescription
domainsarrayyesRegistrable domains to add (e.g. ['partnerco.com', 'trustedvendor.io']). Subdomains and full URLs are rejected.

No output schema declared.

No examples provided.

check_history ~115

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 retained for 90 days. Account-level stats (total credits, balance) never expire.

NameTypeReqDescription
limitintegerResults per page, max 100 (default 20)
pageintegerPage number (default 1)

No output schema declared.

No examples provided.

check_url ~345

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 codes, nameservers via RDAP), SSL/TLS validity, parked domain detection, URL structural analysis (length, path depth, subdomain count, entropy), and DNS enrichment (MX records). The score is calculated from these signals using either default weights or a custom scoring profile. Higher scores mean more suspicious. The score is a signal, not a verdict. You decide the threshold based on the use case. Billing: Most lookups are free. Known domains (Tranco Top 100K like google.com, github.com) return instantly with score 0 at no cost. Previously analysed domains return cached signals at no cost. Only unknown domains that run through the full analysis pipeline cost 1 pipeline check credit. The response's meta.pipeline_check_charged field tells you whether this check consumed a credit. Use the "profile" parameter to score results with custom weights. For example, a "cold-email" profile might weight parked domains heavily while ignoring brand impersonation. Use list_profiles to see available profiles, or show_defaults to see all signal weights. If the account has zero credits and the URL requires a full pipeline check, returns a 402 error with a link to purchase more credits.

NameTypeReqDescription
profilestringName of a custom scoring profile to use (optional). If omitted, default weights are used.
urlstringyesThe URL to check (must be http:// or https://)

No output schema declared.

No examples provided.

check_urls ~341

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 RDAP), SSL/TLS validity, parked domain detection, URL structural analysis, and DNS enrichment. Known and cached URLs return results immediately. Unknown URLs are queued for pipeline processing. This tool automatically polls for results until all URLs are complete or the 5-minute timeout is reached. You don't need to manage polling or job tracking. If the timeout is reached before all results are complete, returns whatever is available with a clear message indicating which URLs are still processing. The user can check results later via check_history. Maximum 500 URLs per call. For larger datasets, call this tool multiple times with chunks of up to 500 URLs. Billing: Same as check_url. Known and cached domains are free. Only unknown domains running through the full pipeline cost 1 credit each. The summary shows pipeline_checks_charged (the actual number of credits consumed). If you don't have enough credits for the unknowns in the batch, the entire batch is rejected with a 402 error telling you exactly how many credits are needed. Duplicate URLs in the list are automatically deduplicated (processed once, charged once). Invalid URLs get individual error status without rejecting the batch. Use the "profile" parameter to score all results with custom weights.

NameTypeReqDescription
profilestringName of a custom scoring profile to use for all URLs (optional)
urlsarrayyesList of URLs to check (maximum 500 per call)

No output schema declared.

No examples provided.

create_profile ~543

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 are points, not percentages. Each weight is the number of points that signal adds to the score when it fires. They don't need to total 100. A profile with weights totalling 90 is conservative (max possible score is 90). A profile with weights totalling 130 is aggressive (multiple signals quickly push to the cap of 100). The threshold the agent sets for action matters more than the weight totals. Use show_defaults to see all 25 signals with their default weights and descriptions before creating a profile. Use check_url or check_urls with the "profile" parameter to score results with this profile. Maximum 20 profiles per account. Profile name "default" is reserved. Common profiles: - Cold email: weight parked (30), chain_incomplete (25), ssl_invalid (15) higher. Lower brand_impersonation (10). - Security bot: keep brand_impersonation high (40), increase domain_age_7 (30), redirects_5 (25). - Lead gen: weight parked (35), http_only (20), chain_incomplete (20) for dead business detection. - SEO audit: weight redirects_5 (30), chain_incomplete (30), parked (25) for link quality. See the Unphurl API documentation for all 19 use case weight examples.

NameTypeReqDescription
namestringyesProfile name (lowercase alphanumeric and hyphens only, 1-50 chars, e.g. 'cold-email', 'security-bot')
weightsobjectyesCustom 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_ag…

No output schema declared.

No examples provided.

delete_profile ~57

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.

NameTypeReqDescription
namestringyesName of the profile to delete

No output schema declared.

No examples provided.

estimate_urls ~259

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 in the Tranco top 100K (trusted, treated as clean with score 0, no pipeline needed) - cached: URL's hostname is already in Unphurl's reputation cache (results available, no pipeline needed) - unknown: URL needs full pipeline analysis (costs 1 credit per URL) Returns counts for each gate plus total, credits_needed, credits_min, and credits_max. credits_min and credits_max are both equal to the unknown count in the current implementation. Maximum 500 URLs per call. Rate limit: 10 requests per minute. Does not follow redirects; classifies each URL as submitted. Typical agent flow: 1. Collect a list of URLs 2. Call estimate_urls to get the cost breakdown 3. Show the user the breakdown and ask for approval 4. On approval, call check_urls on the unknowns only

NameTypeReqDescription
urlsarrayyesList of URLs to classify (maximum 500 per call)

No output schema declared.

No examples provided.

generate_pdf ~102

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

NameTypeReqDescription
audit_jsonobjectyesThe complete audit JSON object produced during the audit pipeline.
reseller_company_urlstringYour company URL (optional).
reseller_emailstringyesYour contact email.
reseller_namestringyesYour full name.
reseller_positionstringYour position or title (optional).

No output schema declared.

No examples provided.

get_balance ~107

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 (previously analysed by any Unphurl customer) are always free. If credits_remaining is 0, you can still check known and cached domains for free. To check unknown domains, purchase more credits using the "purchase" tool.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_pricing ~153

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 ($0.0495 each) - Scale: 10,000 credits for $399 ($0.0399 each) Most URL lookups are free (known domains and cached domains). Credits are only consumed when an unknown domain runs through the full analysis pipeline. In typical use, 95-99% of URLs resolve free. This tool does not require an API key.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_stats ~122

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 free (known or cached domains) vs paid pipeline checks, and how many URLs scored above key thresholds. This is useful for: - Checking if your scoring profile is flagging the right proportion of URLs - Understanding your cost efficiency (higher free rate = more value per credit) - Reporting usage metrics

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_allowlist ~76

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. Returns the list of domains, current count, and the 1,000-domain limit.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_profiles ~104

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 bot cares about phishing. Profiles let one account serve multiple use cases. Profiles only override specific weights. Any signal not specified in a profile uses the default weight. Use show_defaults to see all 25 signals and their default weights.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

purchase ~137

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 added to the account automatically once Stripe confirms payment. After purchase, use get_balance to verify credits have been added.

NameTypeReqDescription
packagestringyesPackage to purchase: pkg_100 ($9, 100 credits), pkg_500 ($39, 500 credits), pkg_2000 ($99, 2000 credits), pkg_10000 ($399, 10000 credits)

No output schema declared.

No examples provided.

remove_from_allowlist ~71

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.

NameTypeReqDescription
domainsarrayyesRegistrable domains to remove (e.g. ['partnerco.com'])

No output schema declared.

No examples provided.

resend_verification ~128

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 response is always the same regardless of whether the email exists, is already verified, or was rate limited. This prevents account enumeration. Rate limited to 3 requests per email per hour. This tool does not require an API key.

NameTypeReqDescription
emailstringyesEmail address of the account that needs verification

No output schema declared.

No examples provided.

show_defaults ~84

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. Profiles are sparse overrides on top of these defaults. This tool does not require an API key. The defaults are hardcoded and always available.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

signup ~220

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 link expires, use the "resend_verification" tool to request a new one. The account starts with 20 free pipeline check credits so the user can test with real URLs. Known domain lookups (google.com, github.com, etc.) and cached domain lookups are always free. To check more unknown domains through the full analysis pipeline, the user can purchase credits via the "purchase" tool. Once the user has their API key, they need to add it to their MCP server configuration as UNPHURL_API_KEY. This tool does not require an API key.

NameTypeReqDescription
companystringCompany name (optional)
emailstringyesEmail address for the account
first_namestringyesFirst name (used for personalized emails)

No output schema declared.

No examples provided.