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 工具會建立真實帳號並回傳僅顯示一次的金鑰,需妥善保管。未知網域的檢查會消耗付費額度,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 分