MCP.so
登录

Apifreaks MCP Server

@api-freaks

基本信息

分类

数据与分析

许可证

Apache-2.0

传输方式

stdio

作者

api-freaks

提交者

RoRonoa

关于 Apifreaks MCP Server

Official MCP server for APIFreaks. Real-time weather, IP, WHOIS, DNS, SSL, currency, screenshots, and more for any AI agent.

#mcp#mcp-server#model-context-protocol#apifreaks#weather#weather-api#weather-forecast#forecast#air-quality#marine-weather#ip-geolocation#ip-lookup#geoip#geolocation#ip-address#whois#domain-whois#domain-lookup#dns#dns-lookup#dns-records#nameserver#ssl#ssl-certificate#tls#certificate#currency#currency-api#exchange-rates#forex#cryptocurrency#currency-converter#commodity#commodity-prices#gold-price#oil-price#screenshot#screenshot-api#web-screenshot#page-capture#domain#domain-availability#domain-check#zip-code#zipcode#postal-code#timezone#time-zone#timezone-converter#user-agent#ua-parser#browser-detection#astronomy#sunrise#sunset#moon-phase#real-time#live-data#ai-agent#ai-tools#llm-tools#anthropic#claude#claude-mcp#cursor#windsurf#cline

Apifreaks MCP Server 配置

使用下面的配置,将此服务器添加到你的 MCP 客户端。

{
  "mcpServers": {
    "apifreaks": {
      "command": "npx",
      "args": [
        "-y",
        "@apifreaks/mcp"
      ],
      "env": {
        "APIFREAKS_API_KEY": "<YOUR_APIFREAKS_API_KEY>",
        "ENABLE_MODULES": "ip-intelligence,geocoding,whois,dns,scraper,email-validation,phone-validation,ssl,domain,screenshot,pdf,currency,commodity,financial,zipcode,weather,geography,timezone,user-agent"
      }
    }
  }
}

Apifreaks MCP Server 工具

114

APIFreaks module catalog (opt-in via ENABLE_MODULES). Call when a needed capability is missing from your tool list, or to check whether APIFreaks covers a topic. Live tools for enabled modules already appear in tools/list; this returns needs_enable[] with paste-ready enable_line values — give the user that ENABLE_MODULES=... line and ask them to restart. Modules: ip-intelligence, geocoding, whois, dns, scraper, email-validation, phone-validation, ssl, domain, screenshot, pdf, currency, commodity, financial, zipcode, weather, geography, timezone, user-agent. Currently enabled: ip-intelligence, geocoding, whois, dns, scraper, email-validation, phone-validation, ssl, domain, screenshot, pdf, currency, commodity, financial, zipcode, weather, geography, timezone, user-agent.

Look up geolocation data for an IP address, IPv6 address, or hostname. Returns location, country_metadata, network, ASN, company, currency, and time_zone by default. Pass include to add security, hostname/liveHostname/hostnameFallbackLive, user_agent, abuse, dma_code, or geo_accuracy (or '*' for all). Bogon/reserved IPs return 423; unrecognized IPs return 404.

Look up geolocation data for up to 50,000 IP addresses or hostnames in one request. Returns an array in request order — same default fields as the single lookup (location, country_metadata, network, ASN, company, currency, time_zone), with the same include modules. Individual IP failures return a per-item object with a 'message' field; they don't block other results.

IP threat intelligence for a single IPv4 or IPv6 address. Returns a 0-100 'threat_score' plus VPN, proxy (incl. residential), Tor, relay, anonymity, known-attacker, bot, spam, cloud-provider, and corporate-gateway signals. Where available: provider names, confidence scores, last-seen dates; for bots also 'bot_type', 'is_known_good_bot', 'bot_operator_name', and confidence; for gateways 'corporate_gateway_type' ('secure_web_gateway' | 'browser_isolation') and provider name. Use fields/excludes with dot-paths (e.g. 'security.threat_score') to trim the response. If 'ip' is omitted, the public IP of the requesting client is used. Malformed IPs return 400; bogon/reserved IPs return 423.

IP threat intelligence for up to 50,000 IP addresses in one request. Returns an array in request order with the same security profile as the single lookup: a 0-100 'threat_score' plus VPN, proxy (incl. residential), Tor, relay, anonymity, known-attacker, bot, spam, cloud-provider, and corporate-gateway signals. Where available: provider names, confidence scores, last-seen dates; for bots also 'bot_type', 'is_known_good_bot', 'bot_operator_name', and confidence; for gateways 'corporate_gateway_type' ('secure_web_gateway' | 'browser_isolation') and provider name. Use fields/excludes with dot-paths (e.g. 'security.threat_score') to trim the response. A bad or bogon IP in the batch returns a per-item object with a 'message' field; it does not fail the whole request.

Convert a free-form address, place name, landmark, or business name into WGS84 coordinates. Returns a JSON array of matches (default 1, max 40), each with coordinates, address components (street, postcode, city, state, country), a bounding box [lat_min, lat_max, lon_min, lon_max], and optional points of interest. Pass all four of min_lat, max_lat, min_lon, and max_lon together to bias results toward a viewbox. Optional accept_language localizes names (default English). No match returns 404, not an empty array.

Turn WGS84 coordinates into the nearest street address. A single request returns one result: the closest match, with address components, a bounding box, and nearby points of interest. lat is -90 to 90; lon is -180 to 180. Optional accept_language localizes names (default English). Out-of-range or missing coordinates return 400; no match returns 404.

Retrieve live WHOIS data for a domain name. Returns registrar details, registrant/admin/technical contacts, name servers, domain status, expiry dates, and raw WHOIS text.

Retrieve live WHOIS ownership and network data for an IPv4 or IPv6 address. Returns network block info, CIDR ranges, organization details, technical/abuse contacts, and raw WHOIS text from the relevant RIR.

Retrieve real-time WHOIS data for an Autonomous System Number. Returns AS name, organization, allocation status, associated CIDR route objects, upstream/downstream/peer ASNs, contact emails, and raw WHOIS text. Accepts the ASN with or without the 'AS' prefix (e.g. 'AS15169' or '15169').Warning: Large ASNs (e.g. major cloud/telecom providers) can return very large responses with thousands of routes and peers, which may consume significant tokens.

Retrieve historical WHOIS snapshots for a domain, with data going back to 1986. Returns a chronological list of records each containing registrar info, contacts, name servers, and domain status at time of capture.Warning: Long-established domains can return a large number of historical records, which may consume significant tokens.

Search WHOIS records in reverse to find all domains linked to an owner, email, company, or keyword. Provide exactly one of: keyword, email, owner, or company. keyword uses pattern matching, email supports wildcard regex (e.g. 'm*@gmail.com'), owner and company use full-text phrase matching. Results are paginated. Default mode returns 50 records per page with full WHOIS data; mini mode returns 100 records per page with key fields only.

Retrieve live WHOIS data for up to 100 domain names. Returns structured registrar info, contacts, name servers, status, and raw WHOIS text per domain. The response is an array under 'bulk_whois_response'. If a single domain fails its entry has status=false while the rest are still returned.

Retrieve real-time DNS records for a hostname or IP address. Supports A, AAAA, MX, NS, SOA, SPF, TXT, and CNAME record types. At least one of host_name or ip_address must be provided. When ip_address is provided, record_types must be ['all'].

Retrieve historical DNS records for a hostname. Returns paginated snapshots of DNS records captured over time, up to 100 per page. Supports A, AAAA, MX, NS, SOA, SPF, TXT, and CNAME record types.

Find all hostnames associated with a specific DNS record value. Supports reverse IP lookup (all domains on an IP/CIDR), reverse MX lookup (all domains using a mail provider), reverse NS lookup (all domains on a name server), and more. Wildcard patterns using '*' are supported for MX, NS, SOA, SPF, TXT, CNAME. Results are paginated at up to 100 DNS records per page.

Retrieve real-time DNS records for up to 100 hostnames at once. Supports A, AAAA, MX, NS, SOA, SPF, TXT, and CNAME record types. The response is an array under 'bulk_dns_info'. If a single hostname fails its entry has status=false while the rest are still returned.

Scrape a server-rendered page without a browser (POST /v1.0/scraping, jsEnabled omitted). Cheaper than JS rendering — start here and switch to 'scraper_scrape_js' only if the response is an empty shell. Empty instructions return the full page. Prefer an extract step so the client gets named fields instead of the whole document. Each instruction must set exactly one of: extract, postForm, getForm, getPage. Success is an extractedData object; extract keys become its fields (string, string array, or omitted). A target URL that is not HTTP 200, or a bad CSS/XPath selector, comes back as 400. Full-page HTML can be large — pass text=true to shrink it.

Scrape a page in a real browser (POST /v1.0/scraping, jsEnabled=true): run JavaScript, fill/click/wait, handle tabs and iframes, and optionally solve CAPTCHAs. Use 'scraper_scrape' first for static HTML — this mode costs more. Each instruction must set exactly one action (fill, click, clickIfExist, enter, wait, waitFor, select, clickButtonByValue, jsExe, newTab, moveToRelativeTab, switchToIframe, switchToParentFrame, blockElement, extract, screenshot, saveimage, generalImageCaptcha, fillImageCaptcha, resolveAudioCaptcha, or conditionalCheck). Selectors are CSS or XPath. Success is extractedData; extract keys become its fields (string, string array, or omitted). sslIgnore, windowSize, adBlock, cookies, and blockUrl only apply in this mode. CAPTCHA steps require captcha=true (400 if those steps are sent without it); this tool sets that when those steps are present. A target URL that is not HTTP 200, or a bad selector, comes back as 400.

Validate one email address: syntax, domain DNS, disposable/spam/free/catch-all flags, and whether it looks deliverable. Read 'validEmail': 'valid' (deliverable; 'reason' omitted), 'accept_all' (catch-all domain accepted the recipient; mailbox unconfirmed — pairs with domain.catchAll=true), 'invalid' (rejected, or domain accepts no mail), 'INVALID_EMAIL' (syntax failure; treat as invalid), 'unknown' (inconclusive; common for no-MX domains probed via A record), 'risky' (mailbox full or greylisted), or 'app_server_blocked' (verifier IP blocked). When not 'valid', 'reason' explains why. 'dns' may be absent. 'dns.mxRecord' lists every host at the lowest MX preference (absent when there is no MX; ['.'] means null MX / accepts no mail). 'dns.aRecord' is present when there is no MX but an address record exists. Optional: pass 'ip' to attach geolocation and threat signals for that IP.

Validate up to 100 email addresses in one request. Each address is checked independently, so one failure does not drop the rest of the batch. The response is 'emailResponse': an array of the same per-email result as 'email_validate'.

Check whether one email address comes from a throwaway provider, whether its domain resolves and has mail servers, and whether it is a free-provider, spam-listed, or role-based address. A malformed address still returns a normal result: validSyntax is false, and domain contains only name plus validDomain=false. account and dns are omitted when validSyntax is false. domain.disposable is true for throwaway providers, domain.free for free providers, domain.spam when spam-listed, and domain.validDomain when the domain resolves. account.role is true for a shared or role mailbox. dns.mxRecord lists mail exchangers; dns.aRecord lists A records. Either DNS array may be absent.

Run the same checks as 'email_disposable_check' against up to 100 email addresses in one request. The response is 'disposableEmailResponse': one result per submitted address, in request order, using the same schema as the single check. A malformed address never fails the batch (validSyntax and domain.validDomain are false). A blank or whitespace-only entry rejects the whole request.

Validate a single phone number and return carrier, line type, location, time zones, and four standardized formats. Response fields include raw_input, possible, valid, country_prefix, national_number, country_code, location, time_zones, line_type, formats (E164, International, National, RFC3966), area_code_length, ndc_length, and can_be_internationally_dialled. line_type is one of: MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, VOIP, TOLL_FREE, PREMIUM_RATE, SHARED_COST, PERSONAL_NUMBER, PAGER, UAN, VOICEMAIL, UNKNOWN. Use region for local numbers without +; use dialer_region for IDD numbers. Do not pass both.

Validate up to 100 phone numbers in one request. Each number is processed independently — invalid entries return per-number results without affecting the rest of the batch. Each result uses the same structure as 'phone_validate'. Maximum 100 numbers per request. region and dialer_region follow the same rules as the single-number tool and must not be combined on one entry.

Retrieve the live SSL certificate for a domain (end-user/leaf certificate only, no chain). Returns validity dates, serial number, signature algorithm, subject/issuer details, public key info, key usages, Subject Alternative Names, and the PEM-encoded certificate. To retrieve the full certificate chain use 'ssl_live_chain_lookup' instead.

Retrieve the complete live SSL certificate chain for a domain. Includes the leaf certificate plus intermediate and root CA certificates when available. Each certificate includes chain order, validity window, subject and issuer details, public key details, key usages, SAN, and PEM output. To retrieve only the end-user certificate, use 'ssl_live_lookup' instead.

Check whether a single domain name is available for registration. Returns a boolean 'domainAvailability' field. Use source='whois' for a more authoritative check, source='dns' for a faster one.

Check domain name availability and receive alternative domain name suggestions across different TLDs and SLDs if the domain is taken. Returns a 'domain_available_response' array with availability status for the queried domain plus the requested number of suggestions (up to 100).

Check domain name availability for up to 100 domains at once. Returns a 'bulk_domain_availability_response' array one result per input domain. Each result includes 'domain', 'domainAvailability' (true/false), and 'status' (true if the check succeeded). Always verify 'status' before trusting 'domainAvailability'.

List subdomains discovered for a domain, with first-seen and last-seen dates. Results are paginated at 100 subdomains per page. The response includes 'domain', 'status', 'current_page', 'total_pages', 'total_records', and a 'subdomains' array. Each subdomain object has 'subdomain' and 'last_seen'; 'first_seen' can be absent, and 'inactive_from' appears only on inactive records. Defaults to status='active' and page=1. 'after' must be earlier than 'before', and neither date can be in the future. Check 'total_pages' before requesting further pages.

Security assessment for a domain you do not control: risk verdict, trust score with evidence, DGA (algorithmically generated name) detection, threat-feed matches, and email deliverability (SPF/DKIM/DMARC/MX plus fix recommendations). Use when deciding whether to trust a signup domain, triage a phishing report, vet a sender domain before accepting mail, or enrich an indicator — not for WHOIS registration facts (use whois_domain_lookup) or finding brand look-alikes (use domain_typosquatting_lookup). Start with 'risk_category.verdict' (e.g. safe/suspicious), 'confidence', and 'severity'; use 'trust_signals.trust_score' when you need a numeric threshold. 'dga_score' flags botnet-style generated names even before feeds catch them. 'email_deliverability' covers can-receive-email, grade, and 'issues' with recommendations. 'intelligence' includes related IPs, STIX pattern, and 'recommended_action'. If a signal fails (e.g. WHOIS timeout), dependent fields may be null and the gap appears in 'errors'; other signals still return.

Find registered domains that look like typos or look-alikes of a brand — misspellings, character swaps, or wildcard patterns such as '*paypal*' — across 1,529+ TLDs. Use for brand/trademark sweeps, phishing look-alike discovery, or reclaiming dropped squat names. Not for checking whether one specific domain is free (use domain_check_availability) or scoring risk on a known domain (use domain_reputation_lookup). Matching is spelling/pattern proximity, not intent — treat results as a shortlist to triage. Pass 'keyword' for a single-label fuzzy search, or 'pattern' with up to three '*' wildcards for prefix/suffix/compound coverage; never both. Response is paginated (100 per page): 'domains' with domainName, createDate/expiryDate when available, lastSeen, and isDropped; use 'nextPageToken' as 'page_token' with the same keyword/pattern for further pages. Prefer lastSeen and isDropped when dates are missing.

Capture a static screenshot of a webpage and return a JSON response containing the screenshot URL which can be downloaded or shared directly. **Always ask the user before calling this tool:** - Full page or just the visible viewport? - Specific element, or the whole page? (If a specific element is needed, help identify the CSS selector via web_fetch on the target URL first.) - Image format: PNG, JPG, WebP, or PDF? - Should ads or cookie banners be blocked for a cleaner result? - Any viewport size / device to simulate? Use `screenshot_capture_scrolling` instead when the user wants a scrolling video/GIF of the page.

Record a scrolling video or animated GIF of a webpage and return a JSON response containing the video download URL. **Always ask the user before calling this tool:** - What format? MP4 (default, best compatibility), WebM (smaller), or GIF (looping animation)? - How long should it scroll — how many seconds (up to 60)? - Scroll speed: slow, normal, or fast? - Should it scroll back to the top after reaching the bottom (great for looping GIFs)? - Any specific viewport size to simulate? Use `screenshot_capture` instead for static screenshots (PNG, JPG, PDF).

Capture screenshots of up to 50 webpages in a single request. Returns a JSON response with per-URL results — each entry includes the screenshot download URL, fulfillment status, and any error message. If any URL needs a specific element targeted via CSS selector, use web_fetch on that page first to identify the correct selector before calling this tool. Note: `multiple_scrolling` is NOT supported in bulk mode — for scrolling video captures prefer `screenshot_capture_scrolling` per URL instead.

Merge PDF files into one, in the order given. Total upload payload up to 1GB. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Split a PDF into smaller files by page numbers or ranges. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Extract pages into a new PDF (or one PDF per page as a ZIP when separated is true). File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Remove pages from a PDF. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Convert PDF pages to PNG, JPG, TIFF, BMP, or GIF (ZIP of images). File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Resolution 20–1200 DPI. Large or high-DPI jobs take longer. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Render an APIFreaks PDF template and return a hosted 'pdf_url' plus created_at and expiration_time. This call is synchronous (no taskId). Provide JSON 'data' or a 'data_url' (one is required). template_id comes from the PDF Template Builder. Pin 'version' (must start with v, e.g. v2) so later edits do not change production output; omit version to use latest. Generation can take up to 100 seconds.

Render one PDF per CSV row against a template. Returns an array of results with 'pdf_url' per row; one row failing does not stop the rest. Synchronous (no taskId). CSV path must be absolute. CSV must be 10 MB or smaller. Can take up to 100 seconds.

Reduce PDF file size. compression_level is required: low, balanced, high, or extreme. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Extreme on a large file can take a long time. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Rotate pages clockwise by 0, 90, 180, 270, or the negative of those. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Password-protect a PDF (AES-256). user_password is required to open the file. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Apply permission restrictions (print, copy, edit, …). user_password and restrictions are required. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Remove encryption (open password and restrictions). file_password is required. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Remove usage restrictions while keeping the PDF encrypted. file_password and user_password are required. File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

Restructure a PDF for Fast Web View (byte-range streaming so it can start displaying before the full file downloads). File input: local PDF on this machine → pass 'path' (or 'paths' on merge). This job uploads it. Do not call pdf_upload or pdf_upload_binary first unless the user explicitly asked to upload first. Pass 'file_id' (or 'file_ids') only if the user provided those IDs and told you to use them, or after they explicitly told you to upload first with pdf_upload or pdf_upload_binary. Do not invent a file_id. Need a path or a file_id. Starts one background job and returns JSON with 'taskId' (and 'inputIds' unless destroy is true). This tool does not wait and does not poll. After it returns, ask whether to check that one taskId with 'pdf_task_status'. Large files can take a long time.

One status check for one async PDF job (the taskId from the job you just started). Returns the API JSON (queued, processing, completed, or failed). This tool does not loop. Show the JSON. If queued or processing, ask the user before calling again. If completed, present a clear download list for the user: use every https://api.apifreaks.com/v1.0/pdf/resource/download URL in the JSON (outputUrls, zipFileUrl, and any other field). Append apiKey=APIFREAKS_API_KEY to each URL (& if the URL already has ?, else ?). Label ZIP vs individual files, put each URL on its own line, and tell the user to replace APIFREAKS_API_KEY with their MCP API key. If failed, show error and message.

Metadata for one stored file: name, type, size, created/expiry timestamps. Stored files last up to 30 days depending on plan, unless destroy was used.

List PDFs uploaded or generated for this API key (file ID and name). Organization members cannot call this — only the organization administrator.

Permanently delete a stored PDF by file_id. The ID cannot be used again.

NOT a first step before split/merge/compress/convert unless the user explicitly asked to upload first. Same rule as pdf_upload_binary. Those job tools take 'path' and upload the file themselves. Call this when the user wants PDFs stored now so later jobs can pass file_id, or they said to upload first. Multipart; one or more local PDFs. Returns JSON with a 'files' array of fileName and fileId. For storing one large PDF, prefer 'pdf_upload_binary'.

NOT a first step before a job unless the user explicitly asked to upload first. Same rule as pdf_upload: for a one-off, pass 'path' on the job tool. Use this only to store one large local PDF as raw bytes for later file_id reuse. file_name must end with .pdf. Returns fileName and fileId (not a files array).

Retrieve the latest exchange rates for 170+ fiat currencies and 830+ cryptocurrencies. Returns a 'rates' dictionary mapping currency codes to their rate relative to the base. Filter to specific symbols to reduce response size.

Retrieve historical exchange rates for a specific past date. Supports 170+ fiat currencies and 830+ cryptocurrencies with data going back 40+ years.

Convert an amount from one currency to another using the latest exchange rates. Supports 170+ fiat currencies and 800+ cryptocurrencies. Returns the exchange rate used, the given amount, and the converted amount.

Convert an amount from one currency to another using exchange rates from a specific past date. Useful for financial auditing, tax reporting, and invoice reconciliation. Returns the exchange rate on that date, the given amount, and the converted amount.

Retrieve historical exchange rates day-by-day across a custom date range. Returns a 'historicalRatesList' array where each entry has a date and a 'rates' dictionary. Useful for charting currency trends and analyzing multi-day rate movements. startDate is required; endDate defaults to yesterday if omitted. Max interval supported is 1 year.

Retrieve exchange rate fluctuation metrics for currencies over a date range. For each requested currency returns: startRate, endRate, absolute change, and percent change. Useful for volatility analysis and comparing currency movements. startDate is required; endDate defaults to yesterday if omitted.

Convert an amount from a given currency to the local currency of an IP address's location. Returns the detected target currency, exchange rate, and converted amount. Useful for e-commerce checkout localization. Supports IPv4 and IPv6.

Get the supported currencies map. Each entry includes code, name, country data, status, availability dates, and icon. Covers 170+ fiat currencies and 830+ cryptocurrencies.

Get a map of supported currency symbols to currency names.

Validate a currency symbol and return its full name. Use this instead of 'currency_symbols' when you already have a symbol and just need to confirm it's valid or get its display name.

Get a map of currency codes to the date range when historical exchange-rate data is available (YYYY-MM-DD to YYYY-MM-DD). Covers fiat, crypto, and precious metals.

Look up the historical data availability window for one currency symbol. Use this instead of 'currency_historical_data_limits' when you already have a symbol and just need its date range.

List all 245+ supported commodity symbols across metals, energy, agriculture, industrial, raw materials, oils and meals, textiles, meats, poultry, and livestock. Each entry includes symbol, name, category, pricing currency, unit, status, and updateInterval (PER_SECOND, PER_MINUTE, PER_10_MINUTES, PER_HOUR, PER_DAY, PER_WEEK, or PER_MONTH — the symbol's own refresh cadence). Deprecated symbols stay listed with status 'inactive' and a deprecationDate — historical rates remain available up to that date, but latest rates do not.

Validate a commodity symbol and return its full metadata, including updateInterval (the symbol's own refresh cadence: PER_SECOND, PER_MINUTE, PER_10_MINUTES, PER_HOUR, PER_DAY, PER_WEEK, or PER_MONTH), plus name, category, status, currency, unit, and optional exchange/deprecationDate. Use this instead of 'commodity_symbols' when you already have a symbol. If status is 'inactive', latest rates are unavailable and historical rates stop at deprecationDate.

List all supported commodity quote currencies with symbol and currency name. Use before 'commodity_latest_rates' when converting prices into a target quote currency.

Get the latest prices for one or more commodities, with unit and currency metadata. An optional quote parameter converts prices into a target currency. If quote conversion is temporarily unavailable, rates stay in each commodity's default currency and a warning is returned. Each symbol has its own updateInterval: PER_SECOND, PER_MINUTE, PER_10_MINUTES, PER_HOUR, PER_DAY, PER_WEEK, or PER_MONTH. Use 'commodity_symbol_info' (or 'commodity_symbols') to read it — price endpoints do not return freshness.

Get OHLC (open, high, low, close) prices for commodities on a specific date, from January 1990 onwards. If a symbol has no rate on the requested date, the API falls back to the last available rate before it and returns that earlier date on the rate object. Symbols with updateInterval PER_MONTH only have a closing price — open, high, and low come back as 0.

Get start price, end price, absolute change, and percentage change for commodities over a custom date range. Values are rounded to 2 decimal places. There is no limit on range length. start_date must not be after end_date. For symbols with updateInterval PER_MONTH, fluctuation is computed between the first day of the start month and the first day of the end month.

Get daily OHLC (open, high, low, close) prices for commodities over a date range of up to 365 days. The response is a date-indexed map; non-trading days are excluded. A symbol counts as resolved if it appears on at least one date. Symbols with updateInterval PER_MONTH only have a closing price — open, high, and low come back as 0.

Get the countries (and, for VAT, some states) supported by the VAT, IBAN, and SWIFT APIs. Returns three arrays: VAT entries as single-key objects keyed by lowercase underscore names (each with a code and, for a few countries, nested states), plus IBAN and SWIFT lists of country name and ISO code. Pass kind to return only that category. If you already have a country name or code, prefer 'financial_supported_country_info'.

Look up whether a country is supported by the VAT, IBAN, and/or SWIFT APIs. A match returns the query plus whichever of vat, iban, and swift hit (VAT: name plus code and optional states; IBAN/SWIFT: name and country code). A miss is plain text pointing at 'financial_supported_countries'. Use this instead of the list tool when you already have a country name or code.

Look up an 8- or 11-character SWIFT/BIC code and return one bank record: the code itself (8-character input is padded to 11 with XXX), bankName (full legal name), the 4-character bank prefix, branch address, city, country name, and ISO country code, plus institType ('FIIN' financial or 'NFIN' non-financial). branchName and postalCode may be present or empty. Headquarters and branch codes are both supported. Wrong length returns 400; an unknown code returns 404. If you do not have a code, use 'financial_swift_finder' to drill down country → bank → city → codes.

Progressively drill down from supported countries to a bank's SWIFT/BIC codes. Returns a JSON array of strings: country names with no parameters, bank names with country, cities with country + bank, or SWIFT/BIC codes with country + bank + city. Parameters must be supplied in that order or the API returns 400. An unmatched combination returns 200 with an empty array, not an error. Country is a full name (e.g. 'United States'); bank and city are sent in upper case. Pass a returned code to 'financial_swift_lookup' for the full bank record.

Validate an IBAN against country-specific format, length, and checksum rules. Returns whether it is valid (false is still HTTP 200, not an error), the submitted IBAN, per-check flags, an optional BBAN checksum (unknown means that country does not support BBAN checks), and bank/SEPA metadata (bank_data) — BIC, bank name, codes, country, city, address, account, SEPA eligibility, plus optional branch_name, instit_type ('FIIN'/'NFIN'), and postal_code (those three may be empty when not available). Most bank fields are null when the IBAN is structurally invalid or bank data is not resolvable. Missing iban returns 400. Use 'financial_supported_country_info' if you need to confirm IBAN coverage first.

Validate an EU VAT number against VIES or a UK VAT number against HMRC. Returns the country prefix, the number without prefix, a timestamp, validity plus the consultation authority, and company name/address (may be empty strings). Pass requester_vat_number to also get a consultation number for audit. Unsupported prefix returns 400; an unregistered number returns 404.

Get VAT rates for one country, including standard, reduced, and super-reduced rates where published. Returns a JSON array of one rate object: country, tax type, currency, and standard_rate as a decimal (0.19 = 19%). EU/UK may also include reduced, super-reduced, parking, and category rates. State-level entries include state; currency may be an empty string. Covers EU and major global jurisdictions. Optionally pass 'state' for sub-national VAT. Missing country returns 400; no VAT data returns 404. If unsure of the country or state identifier, use 'financial_supported_country_info' first.

Get VAT rates for up to 100 countries or country/state combinations in one request. Returns a JSON array of the same rate objects as 'financial_vat_rates_by_country' (decimal standard_rate, optional reduced/category rates), in request order. Invalid country/state entries are omitted, so the array can be shorter than the request. A missing/malformed body returns 400; a payload over the size limit returns 413.

Get VAT rates for the country resolved from an IP address. Returns a JSON array of one rate object (same shape as 'financial_vat_rates_by_country', including state when the IP maps to sub-national tax). Rates are decimals (0.20 = 20%). Supports IPv4 and IPv6. If ip_address is omitted, the API uses the originating request IP — from this MCP server that is the server's egress address, not the end user. Pass ip_address explicitly whenever you need a specific client's location. Invalid IP returns 400; no VAT data for the resolved location returns 404.

Look up a single ZIP or postal code to retrieve its city, region, country, their codes and geographic coordinates. Optionally filter by country using an ISO 3166-1 alpha-2 code.

Look up details for up to 100 ZIP/postal codes at once. Returns an array of results including city, region, country, their codes, and geographic coordinates for each ZIP code. Optionally filter all codes to a single country.

Find all ZIP/postal codes within a given radius of a center point. Specify the center as EITHER a ZIP code + country OR lat/long coordinates. Returns paginated results (up to 500 per page) with each code's distance from center. Max radius per unit: km=100, mi=100, yd=109361, m=100000, ft=328084, in=3937008.

Calculate the straight-line distance from a base point to each of up to 100 ZIP codes. Specify the base point as EITHER a ZIP code + country OR lat/long coordinates. Returns a distance value for each comparison code.

Find all pairs of ZIP codes within a given distance threshold. All codes must be in the same country. Returns every pair (code_1, code_2) whose distance is ≤ the threshold.

Get all ZIP/postal codes for a city. Providing 'state_name' is recommended to disambiguate cities with the same name. Returns paginated results (up to 500 per page).

Get all ZIP/postal codes for a state, province, or region. Returns paginated results (up to 500 per page).

Get real-time weather for a location, including temperature, humidity, wind, pressure, air quality (AQI), and astronomy (sunrise/sunset/moon phase). Provide at least one of: 'location', lat+long, or 'ip'.

Get weather forecast for up to 16 days with daily, hourly, or minutely precision. Use EITHER 'forecast_days' OR 'start_date'+'end_date' to define the range, not both. Only current or future dates are allowed. Provide at least one of: 'location', lat+long, or 'ip'.

Get historical weather data for a specific past date (back to 1940). Returns daily or hourly weather + astronomy for the given date. Only past dates are allowed — current or future dates are rejected. Provide at least one of: 'location', lat+long, or 'ip'.

Get historical weather data over a date range (time series). Max range: 90 days for daily precision, 7 days for hourly. Only past dates are allowed — current or future dates are rejected. Data available back to 1940. Provide at least one of: 'location', lat+long, or 'ip'.

Get air quality data either real-time or forecast. Returns PM2.5, PM10, CO, NO₂, SO₂, ozone, dust, and UV index. Real-time mode also includes AQI summary indices (US & EU); forecast mode returns raw pollutant values only. Omit dates for real-time AQI. Provide 'start_date' and 'end_date' for hourly AQI forecast (max 6 days, current/future dates only). NOTE: Use this tool over 'weather_current' when you need standalone or forecast air quality data. Provide at least one of: 'location', lat+long, or 'ip'.

Get marine/ocean weather, real-time or forecast, up to 16 days. Returns wave height, swell, wind speed/direction, and sea-surface data. Omit dates for real-time conditions. Provide 'start_date' and 'end_date' for forecast mode (max 16 days, current/future dates only). Coordinates (lat/long) are recommended for offshore/ocean queries since city names resolve to land. Provide at least one of: 'location', lat+long, or 'ip'.

Get flood forecast data — river discharge and flow percentiles (mean, median, min/max, p25/p75). Forecast range up to 16 days. Only current or future dates are allowed. Data may be limited for locations far from rivers. Provide at least one of: 'location', lat+long, or 'ip'.

Get real-time weather for up to 50 locations at once. Each location in the array can be a city name, lat/long pair, or IP address. Returns weather + astronomy data for each location wrapped in a 'bulk' array.

Get astronomy data for a location and date: sunrise/sunset, moon phase, twilight, golden/blue hour, solar noon, moonrise/moonset, and sun/moon position metrics. Provide one of: ip, location, or lat+long. At least one is required. Date format: YYYY-MM-DD (past or future), defaulting to today.

List the administrative level types defined for a country (e.g. state, district, province, outlying area). Returns an 'admin_levels' array of strings. Use those names with 'geodb_admin_units' via admin_level. A valid two-letter country code is required; invalid codes return 400 and countries without published admin levels return 404.

List administrative units (states, provinces, governorates, districts) for a country. Returns an 'admin_units' array; each item has name, admin_code, and admin_level. Optionally filter by one or more levels with a comma-separated admin_level list. A level name that matches nothing returns 200 with an empty admin_units array, not an error. Countries without published admin units return 404. Use 'geodb_admin_levels' for valid level names.

Get details for one administrative unit identified by country code and admin unit code. Returns name, admin_code, admin_iso3166_2, admin_level, country_iso3166_2, and country_name. admin_iso3166_2 can be absent for some units. Both country and admin_unit are required; invalid combinations return 400, unmatched combinations return 404. Use 'geodb_admin_units' to find a valid admin_unit code.

List 250 countries and territories. Returns a 'countries' array; each item has name, iso_alpha_2, iso_alpha_3, iso_numeric, capital, region, and subregion. Optionally filter by region or subregion name. capital, region, and subregion are empty strings (not omitted) for a handful of uninhabited or dependent territories with no assigned value — e.g. Bouvet Island and Heard Island and McDonald Islands have no region/subregion, and Antarctica/Tokelau/US Minor Outlying Islands have no capital. Invalid region or subregion names return 400. Use 'geodb_regions' / 'geodb_subregions' for valid filter names, and 'geodb_country_details' for one country's full metadata.

Get metadata for one country by ISO 3166-1 alpha-2 code. Returns name, iso_alpha_2, iso_alpha_3, iso_numeric, phone_code, capital, top_level_domain, native_name, region, subregion, nationality, flag_emoji, currency_code, currency_name, and currency_symbol. capital, region, and subregion are empty strings for the same uninhabited/dependent territories as 'geodb_countries'; every other field, including currency and phone code, is populated for those territories. Use 'geodb_countries' if you need to resolve a name to an alpha-2 code first. Invalid or missing country codes return 400.

List all cities for a country. Returns a 'cities' array; each item has name, latitude, longitude, iso_alpha_2, and a nested admin_unit object (name, admin_code, admin_level). Optionally filter by admin_unit code. There is no pagination: large countries return every city in one response, which can be very large. Prefer filtering with admin_unit (from 'geodb_admin_units') when you only need one subdivision. An admin_unit code that does not exist for the country returns 400, not an empty result. A recognized country with no cities (e.g. Vatican City) returns 404. A valid country code is required.

List the geographical regions supported by GeoDB. Returns a 'regions' array of exactly 6 names: Africa, Americas, Asia, Europe, Oceania, and Polar. Use a returned name with 'geodb_subregions' to list subregions, or with 'geodb_countries' to filter countries.

List subregions within a geographical region, or all subregions across every region when 'region' is omitted. Returns a 'subregions' array of names such as Western Europe, Southern Asia, or Northern America. Use 'geodb_regions' for valid region names. An invalid region name returns 400; a region with no subregions (Polar) returns 404.

List country and international-organization flags supported by 'geodb_flag'. Returns 'supported_countries' (238 entries of name, iso2, iso3 — not iso_alpha_2) and 'supported_organizations' (22 case-sensitive identifier strings such as United_Nations, NATO, European_Union). Organization identifiers must be passed to 'geodb_flag' exactly as listed here, including underscores and capitalization. Use this before 'geodb_flag' if you are unsure of the name.

Retrieve a country or international-organization flag image. Requires name, type ('country' or 'organization'), and shape ('flat' or 'round'). For country flags, name is an ISO 3166-1 alpha-2 code. For organization flags, name is case-sensitive and must exactly match an entry from 'geodb_flags_supported' (e.g. NATO, European_Union, United_Nations) — lowercase or abbreviated forms return 404. format is png (default), webp, or svg. size is 16px, 24px, 32px, 48px, or 64px (default 64px) and applies to PNG/WEBP only; it is ignored for SVG. Missing/invalid parameters return 400; unrecognized identifiers return 404. On success the response body is the raw image, returned here as MCP image content (SVG as text).

Look up timezone information for a location. Accepts one of: IP address, timezone name, city/address, lat/long, IATA code, ICAO code, or UN/LOCODE. At least one input is required — provide IP if location fields are not provided. Returns current time, UTC offset, DST status, and timezone metadata. Airport/LOCODE inputs also return venue details.

Convert a date/time from one timezone to another. Specify the source and destination timezone each using ONE of: timezone name (tz_from/tz_to), coordinates (lat/long_from + lat/long_to), city address (location_from/location_to), IATA code (iata_from/iata_to), ICAO code (icao_from/icao_to), or UN/LOCODE (locode_from/locode_to).

Parse a single user-agent string to extract browser, device, OS, and engine details. Also identifies crawlers/bots and flags potential attack user-agents.

Parse up to 20,000 user-agent strings in a single request. Returns an array of parsed objects — same fields as the 'user_agent_parse' tool. Individual parse failures include a 'message' field without blocking other results. **Always ask the user before sending a large body** (hundreds to 20,000 user-agents): each string consumes API credits. Confirm the count and that they want to spend those credits.

概览

What is Apifreaks Mcp Server?

The official Model Context Protocol (MCP) server for APIFreaks. It lets any MCP-compatible client (Claude, Cursor, Windsurf, etc.) query live weather, domains, IPs, DNS records, SSL certificates, currency rates, commodity prices, and more.

How to use Apifreaks Mcp Server?

Install via npx and set the required APIFREAKS_API_KEY environment variable. Quick start: claude mcp add apifreaks -e APIFREAKS_API_KEY=your_apikey_here -- npx -y @apifreaks/mcp or add the server configuration to your client's MCP settings file.

Key features of Apifreaks Mcp Server

  • 8 weather tools (current, forecast, historical, air quality, marine, flood)
  • 10 currency tools (live/historical rates, converter, time series)
  • 2 IP intelligence tools (geolocation, bulk lookup up to 50,000 IPs)
  • 6 WHOIS tools (domain, IP, ASN, history, reverse, bulk)
  • 4 DNS tools (live records, history, reverse, bulk)
  • 3 domain tools (availability check, suggestions, bulk)
  • 2 SSL tools (live certificate and chain lookup)
  • 7 commodity tools (symbols, rates, historical, fluctuation)

Use cases of Apifreaks Mcp Server

  • Ask "What's the 7-day forecast for Tokyo?" and get a detailed weather report.
  • Ask "Check stripe.com's SSL cert — is it valid and when does it expire?"
  • Ask "Who registered openai.com and when? Has the WHOIS record changed recently?"
  • Ask "Convert 2500 USD to EUR, GBP, and JPY at today's live rate."
  • Ask "What DNS records does github.com have? Show me the full MX and TXT records."

常见问题

1

What is Apifreaks Mcp Server?

It's an MCP server that gives AI assistants access to the APIFreaks data platform for weather, currency, IP, domain, DNS, SSL, commodity, and ZIP code lookups.

2

What are the runtime requirements?

Node.js v20 or higher and a free APIFreaks API key.

3

How do I get an API key?

Sign up for a free account at apifreaks.com; your API key is available in the dashboard under API Keys.

4

What transport does this server use?

It uses the stdio transport, as shown in all integration configs (command: `npx -y @apifreaks/mcp`).

5

Is there a free tier for the APIFreaks API?

Yes, you can create a free account at apifreaks.com to obtain an API key.

评论

数据与分析 分类下的更多 MCP 服务器