{"name":"io.github.api-freaks/apifreaks-mcp","slug":"api-freaks-apifreaks-mcp","title":"APIFreaks MCP","description":"APIFreaks MCP: live APIs for agents. Enable modules with ENABLE_MODULES; discover via list_modules.","url":"https://mcp.market/server/api-freaks-apifreaks-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":28,"stars":0,"forks":1,"downloads_week":123,"last_push_at":"2026-09-15T09:42:49.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/api-freaks/apifreaks-mcp","website":"https://apifreaks.com/integrations/mcp-server","version":"2.2.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@apifreaks/mcp","version":"2.2.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Your APIFreaks API key — get one free at apifreaks.com","isRequired":true,"isSecret":true,"name":"APIFREAKS_API_KEY"},{"description":"Comma-separated modules to register (e.g. ip-intelligence,whois,dns,domain,weather). If unset, only list_modules is available — call it for needs_enable[] and a paste-ready ENABLE_MODULES=... line, then restart. Available: ip-intelligence, geocoding, whois, dns, scraper, email-validation, phone-validation, ssl, domain, screenshot, pdf, currency, commodity, financial, zipcode, weather, geography, timezone, user-agent","isRequired":true,"name":"ENABLE_MODULES"}]}],"tools":[{"name":"astronomy_lookup","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_fluctuation","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_historical_rates","description":"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 \\u2014 open, high, and low come back as 0.","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_latest_rates","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_quotes","description":"List all supported commodity quote currencies with symbol and currency name. Use before 'commodity_latest_rates' when converting prices into a target quote currency.","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_symbol_info","description":"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 ","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_symbols","description":"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 \\u2014 the symbol's own refresh cadence). Deprecated symbols","write_action":false,"price_micros":0,"input_schema":null},{"name":"commodity_time_series","description":"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 \\u2014 open, high, and low come back as 0.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_fluctuation","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_geo_convert","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_historical_converter","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_historical_data_limit_info","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_historical_data_limits","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_historical_rates","description":"Retrieve historical exchange rates for a specific past date. Supports 170+ fiat currencies and 830+ cryptocurrencies with data going back 40+ years.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_latest_converter","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_latest_rates","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_supported","description":"Get the supported currencies map. Each entry includes code, name, country data, status, availability dates, and icon. Covers 170+ fiat currencies and 830+ cryptocurrencies.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_symbol_info","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_symbols","description":"Get a map of supported currency symbols to currency names.","write_action":false,"price_micros":0,"input_schema":null},{"name":"currency_time_series","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dns_bulk_lookup","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dns_history","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dns_lookup","description":"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'].","write_action":false,"price_micros":0,"input_schema":null},{"name":"dns_reverse","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"domain_bulk_check_availability","description":"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'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"domain_check_availability","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"domain_check_availability_with_suggestions","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"domain_reputation_lookup","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"domain_subdomain_lookup","description":"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=","write_action":false,"price_micros":0,"input_schema":null},{"name":"domain_typosquatting_lookup","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"email_bulk_validate","description":"Validate up to 10 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'.","write_action":true,"price_micros":0,"input_schema":null},{"name":"email_validate","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"financial_iban_validate","description":"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 \\u2014 BIC, bank name, codes, country, city, address, account, and SEPA eligibility. Most bank fields are nu","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_supported_countries","description":"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_","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_supported_country_info","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_swift_finder","description":"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 ful","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_swift_lookup","description":"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), bank name, the 4-character bank prefix, branch address, city, country name, and ISO country code. 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 dri","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_vat_rates_bulk","description":"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 r","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_vat_rates_by_country","description":"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","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_vat_rates_by_ip","description":"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 \\u2014 from this MCP server that is the server's egress address, not the e","write_action":false,"price_micros":0,"input_schema":null},{"name":"financial_vat_validate","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"geocode_forward","description":"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 towa","write_action":false,"price_micros":0,"input_schema":null},{"name":"geocode_reverse","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_admin_levels","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_admin_unit_details","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_admin_units","description":"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 'ge","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_cities","description":"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 subd","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_countries","description":"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 \\u2014 e.g. Bouvet Island and Heard Island and McDonald I","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_country_details","description":"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, includ","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_flag","description":"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) \\u2014 lowercase or abbreviated forms return 404. ","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_flags_supported","description":"List country and international-organization flags supported by 'geodb_flag'. Returns 'supported_countries' (238 entries of name, iso2, iso3 \\u2014 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_regions","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"geodb_subregions","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ip_security_bulk_lookup","description":"IP threat intelligence for up to 50,000 IP addresses in one request. Returns an array of threat scores plus VPN, proxy, Tor, residential proxy, relay, bot, spam, known-attacker, and cloud-provider detection for each IP.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ip_security_lookup","description":"IP threat intelligence for a single IP address. Returns a threat score plus VPN, proxy, Tor, residential proxy, relay, bot, spam, known-attacker, and cloud-provider detection.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ipgeolocation_bulk_lookup","description":"Look up geolocation data for up to 50,000 IP addresses or hostnames in one request. Returns an array of geolocation objects \\u2014 same fields as the single lookup. Individual IP failures include a 'message' field; they don't block other results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ipgeolocation_lookup","description":"Look up geolocation data for an IP address, IPv6 address, or hostname. Returns location, network/ASN, currency, timezone and optionally security, dma_code, hostname, abuse contact, and user-agent data. 'ip' field is required \\u2014 pass the IP or hostname to look up.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_compress","description":"Reduce PDF file size. compression_level is required: low, balanced, high, or extreme.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_decrypt","description":"Remove encryption (open password and restrictions). file_password is required.","write_action":true,"price_micros":0,"input_schema":null},{"name":"pdf_encrypt","description":"Password-protect a PDF (AES-256). user_password is required to open the file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_extract_pages","description":"Extract pages into a new PDF (or one PDF per page as a ZIP when separated is true).","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_file_delete","description":"Permanently delete a stored PDF by file_id. The ID cannot be used again.","write_action":true,"price_micros":0,"input_schema":null},{"name":"pdf_file_status","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_files","description":"List PDFs uploaded or generated for this API key (file ID and name). Organization members cannot call this \\u2014 only the organization administrator.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_generate","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_generate_bulk","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_linearize","description":"Restructure a PDF for Fast Web View (byte-range streaming so it can start displaying before the full file downloads).","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_merge","description":"Merge PDF files into one, in the order given. Total upload payload up to 1GB.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_remove_pages","description":"Remove pages from a PDF.","write_action":true,"price_micros":0,"input_schema":null},{"name":"pdf_restrict","description":"Apply permission restrictions (print, copy, edit, \\u2026). user_password and restrictions are required.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_rotate","description":"Rotate pages clockwise by 0, 90, 180, 270, or the negative of those.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_split","description":"Split a PDF into smaller files by page numbers or ranges.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_task_status","description":"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, zi","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_to_image","description":"Convert PDF pages to PNG, JPG, TIFF, BMP, or GIF (ZIP of images).","write_action":false,"price_micros":0,"input_schema":null},{"name":"pdf_unrestrict","description":"Remove usage restrictions while keeping the PDF encrypted. file_password and user_password are required.","write_action":true,"price_micros":0,"input_schema":null},{"name":"pdf_upload","description":"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 ","write_action":true,"price_micros":0,"input_schema":null},{"name":"pdf_upload_binary","description":"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).","write_action":true,"price_micros":0,"input_schema":null},{"name":"phone_bulk_validate","description":"Validate up to 100 phone numbers in one request. Each number is processed independently \\u2014 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"phone_validate","description":"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_LI","write_action":false,"price_micros":0,"input_schema":null},{"name":"scraper_scrape","description":"Scrape a server-rendered page without a browser (POST /v1.0/scraping, jsEnabled omitted). Cheaper than JS rendering \\u2014 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, getF","write_action":false,"price_micros":0,"input_schema":null},{"name":"scraper_scrape_js","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_bulk_capture","description":"Capture screenshots of up to 50 webpages in a single request. Returns a JSON response with per-URL results \\u2014 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 suppo","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_capture","description":"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, J","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_capture_scrolling","description":"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 \\u2014 how many seconds (up to 60)? - Scroll speed: slow, normal, or fast? - Should it scroll back to the top af","write_action":false,"price_micros":0,"input_schema":null},{"name":"ssl_live_chain_lookup","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ssl_live_lookup","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"timezone_convert","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"timezone_lookup","description":"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 \\u2014 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"user_agent_bulk_parse","description":"Parse up to 100 user-agent strings in a single request. Returns an array of parsed objects \\u2014 same fields as single parse. Individual parse failures include a 'message' field without blocking other results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"user_agent_parse","description":"Parse a single user-agent string to extract browser, device, OS, and engine details. Also identifies crawlers/bots and flags potential attack user-agents.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_air_quality","description":"Get air quality data either real-time or forecast. Returns PM2.5, PM10, CO, NO\\u2082, SO\\u2082, 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_cur","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_bulk_current","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_current","description":"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'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_flood_forecast","description":"Get flood forecast data \\u2014 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'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_forecast","description":"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'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_historical","description":"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 \\u2014 current or future dates are rejected. Provide at least one of: 'location', lat+long, or 'ip'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_marine","description":"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: 'locat","write_action":false,"price_micros":0,"input_schema":null},{"name":"weather_time_series","description":"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 \\u2014 current or future dates are rejected. Data available back to 1940. Provide at least one of: 'location', lat+long, or 'ip'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"whois_domain_lookup","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"whois_ip_lookup","description":"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.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-19T19:49:50.204Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:49:50.150Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@apifreaks/mcp","version":"2.2.0","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-15T07:46:30.051Z","repositoryUrl":"git+https://github.com/api-freaks/apifreaks-mcp.git","weeklyDownloads":123}],"repo":{"found":true,"owner":"api-freaks","repo":"apifreaks-mcp","archived":false,"pushedAt":"2026-09-15T09:42:49Z","stars":0,"forks":1,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/292075033?v=4","ownerCreatedAt":"2026-06-09T10:17:50Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/292075033?v=4&s=128","source":"registry"},"presence":{"stars":0,"forks":1,"downloadsWeek":123,"license":"Apache-2.0","lastPushAt":"2026-09-15T09:42:49.000Z","score":28}}}},"grade_history":[],"reviews":[]}