Unphurl

io.github.123Ergo由 GitHub 账号 123Ergo 发布v0.2.3更新于 Oct 24, 2026

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

已验证Streamable HTTP可网页运行网页搜索与抓取安全与监控数据与分析

概览

AI 生成的概览

Unphurl 为 AI 助手提供网址风险情报:从七个维度检查单个或批量网址,返回可配置的 0-100 风险评分。

可以做什么
  • 检查单个网址或最多 500 条的批量网址,获取风险评分、信号明细与元数据
  • 批量检查前预估所需额度,并查看历史检查记录、使用统计与额度余额
  • 创建、列出和删除自定义评分配置,并查看 25 个默认信号权重
  • 管理受信任域名白名单,抑制评分放大信号
  • 注册账号、重发验证邮件、查看价格并发起额度购买
  • 生成带品牌的 PDF 审计报告,附 24 小时下载链接
适用场景
适合在助手跟随或推荐链接前先做安全核查,筛查潜在客户名单或 CRM 导出中的失效、停放或仿冒域名,或在对话中完成批量链接审计与尽职调查。
运行要求
可使用 mcp.unphurl.com 远程端点,或通过 npx 运行本地 npm 包(需 Node.js)。检查需在 UNPHURL_API_KEY 环境变量中提供 Unphurl API 密钥;signup 工具无需密钥,但密钥须在邮箱验证后才可用。所有检查都要求账户有正数额度余额。
安装前请注意
signup 工具会创建真实账号并返回仅显示一次的 API 密钥,需妥善保管。未知域名的检查会消耗付费额度,purchase 工具会返回 Stripe 结账链接用于真实付款,助手无法代为完成支付。配置与白名单的改动会写入账户,删除配置不可恢复。提交的网址与账户数据会发送给第三方服务。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Unphurl,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.123Ergo%2Funphurl/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "unphurl": {
      "type": "http",
      "url": "https://mcp.unphurl.com/mcp"
    }
  }
}

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.

PackageCreditsPricePer check
Starter100$9$0.090
Standard500$39$0.078
Pro2,000$99$0.050
Scale10,000$399$0.040

One-time purchases, no subscriptions. In typical use, 95-99% of URLs resolve free.

Quick start

1. Add to your MCP configuration

Add to your .mcp.json (Claude Code, Claude Desktop, Claude Cowork, ChatGPT desktop, Cursor, Windsurf, or any MCP-compatible tool):

json
{  "mcpServers": {    "unphurl": {      "command": "npx",      "args": ["-y", "@unphurl/mcp-server"],      "env": {        "UNPHURL_API_KEY": "uph_your_key_here"      }    }  }}

2. No account yet?

The AI can create one for you. Just ask: "Sign up for Unphurl." The signup tool works without an API key. After signup, add the key to your MCP configuration and restart.

3. Start checking URLs

Just talk to your AI:

"Check https://suspicious-domain.xyz"

"Batch check all URLs in this spreadsheet"

"Create a scoring profile called 'lead-qual' that weights parked domains at 30 and no MX record at 20"

"Check my credit balance"

No commands to memorize. No syntax to learn. Your AI handles the tool calls.

What you get back

Every check returns signals across 7 dimensions:

DimensionWhat it tells you
Redirect behaviourFull chain (up to 10 hops), shortener detection, stopped reasons
Brand impersonationLevenshtein + homoglyph analysis against 150+ brands
Domain intelligenceAge, registrar, expiration, status codes, nameservers (via RDAP)
SSL/TLSReal handshake validation from Cloudflare's edge
Parked detection4-layer check: registrar pages, for-sale, empty content, parking services
URL structureLength, path depth, subdomain count, entropy, IP detection, encoded chars
DNS enrichmentMX record existence (can the domain receive email?)

Every signal is business intelligence. Domain age tells you how established a company is. No MX record means they can't receive email. Expiring domains mean a business might be shutting down. Combined with your AI's ability to process in bulk and output to spreadsheets, it becomes a lightweight due diligence engine.

16 Tools

ToolWhat it doesAuth
signupCreate a new account, get an API keyNo
resend_verificationResend verification email (3/hour limit)Yes
check_urlCheck a single URL across all 7 dimensionsYes
check_urlsBatch check up to 500 URLs (handles async polling automatically)Yes
list_profilesList your custom scoring profilesYes
create_profileCreate or update a scoring profile with custom weightsYes
delete_profileDelete a scoring profileYes
show_defaultsShow all 25 scoring signals with default weightsNo
get_balanceCheck your pipeline check credit balanceYes
get_statsView usage statistics and score threshold countsYes
get_pricingShow available credit packages and pricingNo
purchasePurchase credits (returns Stripe Checkout URL)Yes
check_historyView recent URL check historyYes
list_allowlistList trusted domains that suppress scoring amplifiersYes
add_to_allowlistAdd domains to your trusted allowlist (up to 100 per request)Yes
remove_from_allowlistRemove domains from your trusted allowlistYes

Power moves

Batch check + filter

"Check these 500 URLs. Give me two lists: the clean ones (score under 25) and the flagged ones (score 50 or higher). Export both as CSV."

Your AI gets the batch results, filters by score, and outputs the lists. No code, no scripting.

Custom scoring profiles

Different jobs need different weights. A security bot cares about brand impersonation. A cold email tool cares about parked domains and missing MX records.

"Create a profile called 'cold-email' that weights parked at 30, no_mx_record at 20, and domain_age_7 at 25. Then batch check my lead list using that profile."

Combine with other tools

Unphurl inside an AI chat combines with everything else your agent has access to:

  • Spreadsheets: Read a CRM export, batch-check every URL, write results back with risk scores
  • Web scraping: Scrape a competitor's partner page, check every link for health
  • Documents: Generate a branded PDF audit report from the results
  • Scheduled tasks: "Check my critical URLs every Monday morning"

How billing works

  • A positive credit balance is required for all checks, even free lookups.
  • Known domains (google.com, amazon.com, etc.): free, instant.
  • Cached domains (analysed recently by anyone): free, instant.
  • Unknown domains (first-time analysis): 1 credit each.
  • Batch checks deduct credits upfront for unknowns. If you don't have enough, you get a summary showing exactly how many credits you need.
  • Failed pipeline checks are automatically refunded.

Companion skill

The check-url-safety skill teaches your AI to proactively check URLs before following or recommending them, without being asked.

Claude Cowork or Claude Desktop: Just ask: "Install the Unphurl URL safety skill."

Claude Code, Cursor, or other dev tools:

bash
# Global (all projects)cp node_modules/@unphurl/mcp-server/skills/check-url-safety.md ~/.claude/skills/
# Or for a specific projectcp node_modules/@unphurl/mcp-server/skills/check-url-safety.md .claude/skills/

Build a business on it

Unphurl costs you $0.04-$0.09 per check. A website link audit takes 15 minutes and uses 50-100 credits. Charge $150-$500 per audit.

Service ideas: link health audits, lead list verification, SEO backlink audits, newsletter link monitoring, vendor vetting reports, brand protection monitoring, influencer vetting.

Also available as

License

MIT

来源:README.md,提交 0bb2544

工具

18

signup

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.

输入参数email必填companyfirst_name必填

resend_verification

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.

输入参数email必填

check_url

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.

输入参数url必填profile

check_urls

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.

输入参数urls必填profile

estimate_urls

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

输入参数urls必填

list_profiles

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.

无需输入参数。

create_profile

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.

输入参数name必填weights必填

delete_profile

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.

输入参数name必填

show_defaults

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.

无需输入参数。

get_balance

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.

无需输入参数。

get_pricing

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.

无需输入参数。

purchase

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.

输入参数package必填

check_history

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.

输入参数pagelimit

get_stats

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

无需输入参数。

list_allowlist

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.

无需输入参数。

add_to_allowlist

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.

输入参数domains必填

remove_from_allowlist

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.

输入参数domains必填

generate_pdf

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

输入参数audit_json必填reseller_name必填reseller_email必填reseller_positionreseller_company_url

版本历史

1
  1. v0.2.3最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分