How an AI agent uses API Tool Calls

Press Next step to see a sample QR request.

Connect your MCP client to https://apitoolcalls.com/mcp. Use tools/list to discover the tools below and tools/call with a tool name and arguments to run one. See connection setup.

Command line

apitc, by API Tool Calls (Cowerx), searches and calls tools from a shell. Python 3.8 or later; no dependencies or MCP client setup.

curl -fsSL https://apitoolcalls.com/apitc -o ~/.local/bin/apitc && chmod +x ~/.local/bin/apitc
apitc search "qr code"
apitc call make_qr --arg text=https://example.com -o qr.json

The install command assumes ~/.local/bin exists and is on your PATH. Omit a key for the free allowance, or use APITC_KEY or --key for an existing key. Commands, output and exit codes.

MCP tools and arguments

Browse the complete API catalog, tool arguments and HTTP routes.

make_qr

Make an SVG QR code for text, a link, or Wi-Fi details. Try QR on the web.

  • text (string): text or URL; required unless wifi is provided.
  • format (optional string): only svg is supported; defaults to svg.
  • wifi (object): takes precedence over text. Contains required ssid (nonempty string) and security (WPA, WEP, or nopass), plus password (string, required for WPA or WEP; omitted for nopass).
{"name":"make_qr","arguments":{"wifi":{"ssid":"My network","security":"WPA","password":"example-password"},"format":"svg"}}

epoch_convert

Convert a Unix timestamp (seconds or milliseconds) or an ISO 8601 date to epoch seconds, epoch milliseconds, an ISO UTC time, the same moment in an optional time zone, and the weekday there. Pure standard-library rules: no network and no model. Use the Unix epoch converter on the web.

  • value (required number or string): a timestamp, or a date such as 2024-03-10 or 2024-03-10T14:30:00-05:00. A number of 100,000,000,000 or more is read as milliseconds.
  • tz (optional string): IANA time zone name such as America/New_York. Default UTC. A date with no offset is read in this zone.
  • unit (optional string): s or ms to force how a number is read.
{"name":"epoch_convert","arguments":{"value":1710000000,"tz":"America/New_York"}}

Plain JSON: GET /api/epoch-convert?value=1710000000&tz=America/New_York. Web and MCP share the free daily allowance. Input that is not a timestamp or an ISO date is rejected.

har_to_openapi

Turn a HAR file into an OpenAPI 3.1 description of the API calls in it: endpoints by host, method and path template, path and query parameters, request body schemas and responses per status. The file is cleaned first, as in the HAR viewer: cookies and login headers are dropped and secret-named values become REDACTED. Sign-in methods are named, never copied. Pure standard library: no network and no model. Use the HAR to OpenAPI converter on the web.

  • har (required string): the HAR file's JSON text, at most 2,000,000 characters.
  • include_static (optional boolean): also describe page loads, static files and CORS preflights. Default false.
  • examples (optional boolean): add example values from the cleaned file. Default false.
  • host (optional string): only describe calls to this host, such as api.example.com.
{"name":"har_to_openapi","arguments":{"har":"{\"log\":{\"entries\":[{\"request\":{\"method\":\"GET\",\"url\":\"https://api.example.com/v1/items/42\"},\"response\":{\"status\":200}}]}}"}}

Returns openapi (the document as JSON), endpoint_count, request_count, the hosts and endpoints seen, and how many values were cleaned. MCP only; the web page does the same in the browser. Free calls share the daily allowance.

inspect_binary

Read the structure of a program file: Windows PE (EXE or DLL), Linux ELF or Mac Mach-O, thin or universal. Gives the format, type, architecture, bitness and entry point; sections with offsets, sizes, addresses, access and entropy; imports per library, exports, PE resources, whether a certificate table or code signature is present (never checked) and whether it is a .NET assembly. Reads headers and tables only; runs nothing. The file is sent in the call, read in memory and not kept; use it only on a file you own or have the right to inspect. Use the binary inspector on the web.

  • file (required string): the file as base64 or a base64 data URL, at most 2,000,000 bytes decoded.
  • filename (optional string): the file's name, used only in the result.
  • arch (optional string): for a Mac universal binary, the architecture to describe, such as ARM64. Default: the first.
{"name":"inspect_binary","arguments":{"file":"f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAOAAAAEAAAAAAAA=="}}

Returns format, architecture, bits, type, entry_point, signature_present, dotnet, facts, sections, size-map parts, imports, exports and resources; lists stop at 2,000 rows with counts of the rest. MCP only; the web page does the same in the browser. Free calls share the daily allowance.

extract_strings

List the readable text inside any file, with byte offsets: ASCII and UTF-16LE runs, plus UTF-8 when asked. Each string is labelled by shape as a URL, email, IP address, file path, key or token, or other, and every kind is counted across the whole file. The file is sent in the call, read in memory and not kept; use it only on a file you own or have the right to inspect. Use the strings extractor on the web.

  • file (required string): the file as base64 or a base64 data URL, at most 2,000,000 bytes decoded.
  • filename (optional string): the file's name, used only in the result.
  • min_length (optional integer): shortest run kept, 3 to 32. Default 4.
  • encodings (optional array): any of ascii, utf-16le, utf-8. Default ascii and utf-16le.
  • kinds (optional array): only list url, email, ip, path, key or other strings; counts still cover all.
  • contains (optional string): only list strings containing this text, in any case.
  • limit (optional integer): most strings listed, 1 to 2,000. Default 2,000.
{"name":"extract_strings","arguments":{"file":"AAFIZWxsbyBodHRwczovL2V4YW1wbGUuY29tL2RvY3MAAm9wc0BleGFtcGxlLm9yZwA="}}

Returns total, counts per kind, by_encoding, matched and strings (offset, length, encoding, kind, text; a text over 1,000 characters is cut). Kinds are guesses from shape. MCP only; the web page does the same in the browser. Free calls share the daily allowance.

inspect_apk

Read an Android app file (.apk): package, versions and SDKs from the binary manifest; permissions grouped by what they reach, each with a plain meaning and whether Android asks first; activities, services, receivers and providers with whether each is exported and why; web addresses and hostnames from the code's string tables, grouped by host; and the signer certificate from the v1 signature or the v2/v3 signing block, read but never verified. Runs nothing. The file is sent in the call, read in memory and not kept; use it only on a file you own or have the right to inspect. Use the APK inspector on the web.

  • file (required string): the .apk as base64 or a base64 data URL, at most 2,000,000 bytes decoded.
  • filename (optional string): the file's name, used only in the result.
{"name":"inspect_apk","arguments":{"file":"UEsDBBQAAAAIAAAAIVzqCJ9EVwEAAAwDAAATAAAAQW5kcm9pZE1hbmlmZXN0LnhtbG2STU4CQRCFXzPADD9GFixM5AQmzujOuJaFCWGhxj3RUQkKE0Dj0hN5AheexbV3wK+bHsCB7rzp6ldVr6q7J1CkZiAZdfRlpKbWo7dhW/4IXIBb8Am+wQ/4tQHktkEflDXWQC9KofdYh+yvda8RmammmsFM4KSG3v4x/VVeiDUmZwo/ZLXVnzRnZjpXwpzpDiYlfoAdF+JjvBN8CXxG5QRPSlyypRviHxA94vvoau/73Jjdu+so0zN27LQyIgKdsjvBilz9MVoPTn/uuFcsuzsG9tzS4VZ/mTu5vZ3Z6vyxLrmDG3V1xdrFst2s1XblSB8mUtt1ZUyzZEwHyLR0AFcCCwZPzLuwh++52CVvR4TdZpb8W1uuwlp1Z1FQzXPdbS250GudeV+uVfNaxmuVl7+GfJ2W7SnwvVUKebledYNv7NCzo+77qG/ohYW8nI8KZzWerxXu5g9QSwECFAAUAAAACAAAACFc6gifRFcBAAAMAwAAEwAAAAAAAAAAAAAAAAAAAAAAQW5kcm9pZE1hbmlmZXN0LnhtbFBLBQYAAAAAAQABAEEAAACIAQAAAAA="}}

Returns package, version_name, version_code, min_sdk, target_sdk, permissions by group, components, urls_by_host, hostnames, signer and the file list. MCP only; the web page does the same in the browser. Free calls share the daily allowance.

furnace_age

Use this when you need to estimate furnace manufacture age from a confirmed Lennox legacy, Rheem or Nordyne serial format or a maker-confirmed date. Calculates age at your selected as-of date, keeps NAHB and InterNACHI life guidance separate, applies EPA age guidance and the DOE repair comparison to your own quotes, and returns separately labeled historical and modeled replacement references.

  • as_of (required string): Required real YYYY-MM-DD date for the age calculation.
  • brand (optional string): Lennox, Rheem or Nordyne; other brands require maker/dealer confirmation.
  • model (optional string): Model from the rating plate; retained for identification.
  • serial (optional string): Rating-plate serial, supported nomenclature only.
  • format_confirmed (optional boolean): True only after confirming this model/era uses the documented serial format.
  • century (optional integer): Maker/dealer-confirmed century; never inferred from age. Choices: 1900, 2000.
  • manufacture_date (optional string): Optional maker-confirmed YYYY-MM-DD manufacture date; overrides serial decoding, not installation date.
  • repair_quote (optional number): Your own comparable repair quote in dollars; pair with replacement_quote.
  • replacement_quote (optional number): Your own comparable replacement quote in dollars; pair with repair_quote.
{"name":"furnace_age","arguments":{"brand":"Lennox","serial":"5178M 99989","format_confirmed":true,"century":1900,"as_of":"2026-10-04"}}

Use the free web calculator · GET /api/furnace_age

roof_replacement_cost

Use this when you need to estimate sloped roof area and roofing squares from a measured footprint and pitch. Calculates optional shingle purchase allowance, historical asphalt installation and matched removal scenarios, verified historical standing-seam bid endpoints, and a benchmark subtotal with your separately quoted extras; missing local prices remain get a local quote.

  • footprint_sqft (optional number): Horizontal roof projection including overhangs, in square feet for footprint_sqft, feet for length_ft/width_ft. Provide footprint OR both dimensions.
  • length_ft (optional number): Horizontal roof projection including overhangs, in square feet for footprint_sqft, feet for length_ft/width_ft. Provide footprint OR both dimensions.
  • width_ft (optional number): Horizontal roof projection including overhangs, in square feet for footprint_sqft, feet for length_ft/width_ft. Provide footprint OR both dimensions.
  • pitch (required number): Rise p in inches per 12 inches horizontal run; geometry only.
  • material (required string): Choices: asphalt, standing_seam, tile.
  • layers (optional integer): Asphalt removal layers; 0 means no removal. Metal rates do not vary with layers; only 0 or 1 supported. Choices: 0, 1, 2, 3.
  • waste_percent (optional number): Optional asphalt purchase allowance only. Not applied to installed bid rates. No sourced midpoint/default.
  • quoted_extras (optional number): Your own total dollars quote for separate items excluded from the installation/removal scope; no assumed surcharge.
{"name":"roof_replacement_cost","arguments":{"footprint_sqft":1000,"pitch":6,"material":"asphalt","layers":2,"waste_percent":10}}

Use the free web calculator · GET /api/roof_replacement_cost

fence_cost

Estimate fence and gate bounds from historical City of Sunrise FL 2020 municipal bid observations. Use the fence cost calculator.

  • net_length_ft (required number): net non-gate feet, with gate openings already excluded.
  • fence_type (required string): exact documented material and height.
  • gate_type (optional string): exact documented gate row or local_quote; required with widths.
  • gate_widths_ft (optional array): positive gate widths in feet; omitted means no gates.

Required: net_length_ft (net non-gate feet, gate openings already excluded) and fence_type (chain_link_4, chain_link_6, wood_6, pvc_4, pvc_6, aluminum_4). Optional gate_widths_ft array lists each positive gate width; omitted means no gates. With widths, require gate_type: chain_link_6, wood_6, pvc_6, aluminum_4 or local_quote; one exact gate row applies to every width.

{"name": "fence_cost", "arguments": {"net_length_ft": 100, "fence_type": "wood_6", "gate_type": "wood_6", "gate_widths_ft": [4]}}

Plain JSON: GET /api/fence-cost?net_length_ft=100&fence_type=wood_6&gate_type=wood_6&gate_widths_ft=4,8. Combined bounds are row statistics, not an actual contractor bid. A high bid is not a normal homeowner price. Current prices, unsupported scopes and permit fees: get a local quote. Sources and local permit guidance accompany results.

wheelchair_ramp

Calculate minimum horizontal run from entrance rise using ADA 2010 design dimensions, with separate historical accessibility cost cards. Use the wheelchair ramp calculator.

  • rise_inches (required number): positive entrance rise in inches.

Required: positive rise_inches. Returns minimum horizontal run, cited dimensions and separate provisional HUD historical installed estimate cards; missing cost cells stay get a local quote. This is a planning guide, not a code inspection. Check with the local building department; ordinary private single-family homes are not automatically subject to ADA provisions. Runs exclude landings and door maneuvering space. Never derive a per-foot ramp price from a complete-project average.

{"name": "wheelchair_ramp", "arguments": {"rise_inches": 20}}

Plain JSON: GET /api/wheelchair-ramp?rise_inches=20.

pickleball_court_cost

Rulebook footprints and one-court fit in either orientation, separate public city project and planning cost cards, and unpriced scope. These figures are not a price for this court.

At least one input is needed. Every argument is optional; omit unknown inputs. Empty calls are errors.

  • courts: integer 1–4; omitted uses 1 for math, marked assumed.
  • size: minimum or recommended; omitted shows both.
  • base: new_concrete, new_asphalt or existing_slab. Existing slab shows no cost cards.
  • finish: acrylic or tiles.
  • fence: yes or no.
  • lights: yes or no.
  • space_length_ft and space_width_ft: numbers 1–1000, open, level space in feet; both or neither. Fit checks one court only.
{"name":"pickleball_court_cost","arguments":{"courts":2,"size":"recommended","space_length_ft":70,"space_width_ft":40}}

GET /api/pickleball-court-cost?courts=2&size=recommended&space_length_ft=70&space_width_ft=40; parameter names match the arguments.

Web and MCP share 20 free calls per IP per UTC day and the 2,000 global ceiling; no separate tool cap. Pure rules and Decimal, no network, model or clock.

Free pickleball court planner

ev_charger_install_cost

Safety first; a licensed electrician and permit are needed. Exact 125% minimum circuit size, panel triage, separate utility and DOE program references, unpriced extras and federal 30C rules. References are not a price for this home.

At least one input is needed. Every argument is optional; omit unknown inputs. Empty calls are errors.

  • level: level1 or level2.
  • charger_amps: number 6–80, rated or installer-set maximum current.
  • panel_amps: integer 30–400, echoed only; a panel label alone cannot decide an upgrade or price the job.
  • spare_space: yes or no, compatible breaker space.
  • capacity_check: enough, not_enough or not_done, electrician’s load calculation.
  • existing_circuit: yes or no, suitable dedicated circuit at parking.
  • run_feet: number 1–500, routed length, not straight-line distance.
  • extras: unique array of detached_garage, outdoor_run, finished_walls, trenching, pavement_cut, long_route.
  • installed_on: real YYYY-MM-DD date. Omitted follows the after-2026-06-30 rule, never today’s date.
{"name":"ev_charger_install_cost","arguments":{"level":"level2","charger_amps":48,"extras":["trenching","finished_walls"],"installed_on":"2026-10-15"}}

GET /api/ev-charger-installation-cost?level=level2&charger_amps=48&extras=trenching,finished_walls&installed_on=2026-10-15; short names match the arguments, comma-separated extras, empty extras = [].

Web and MCP share 20 free calls per IP per UTC day and the 2,000 global ceiling; no separate tool cap. Pure rules and Decimal, no network, model or clock.

Free EV charger installation planner

funeral_cost

FTC Funeral Rule rights first, NFDA 2023 national medians from an industry member survey (not local prices), and a worksheet adding the family's own itemized prices. Use the free funeral cost planner on the web.

  • disposition (required): burial or cremation.
  • service (required): viewing_ceremony or direct (immediate burial or direct cremation without viewing).
  • vault (optional, burial only): yes or no; omit for unknown. An error with cremation.
  • prices (optional object): itemized dollars, each a number from 0 to 1,000,000. Omit unknown prices; 0 means not buying or included elsewhere. Lines that do not apply are errors.
  • basic_services: Funeral director and staff basic services; always applies.
  • transfer: Transfer of remains to the funeral home; always applies.
  • embalming_preparation: Embalming or other preparation; requires service viewing_ceremony.
  • viewing_facilities: Facilities and staff for viewing; requires service viewing_ceremony.
  • ceremony_facilities: Facilities and staff for the ceremony; requires service viewing_ceremony.
  • vehicles: Hearse and other vehicles; requires burial or service viewing_ceremony.
  • casket: Casket (bought here or elsewhere); requires burial or cremation with service viewing_ceremony (purchase or rental).
  • alternative_container: Alternative container; requires cremation.
  • crematory_fee: Crematory fee; requires cremation.
  • urn: Urn; requires cremation.
  • vault: Outer burial container (vault or liner); requires burial with vault yes or unknown.
  • plot: Cemetery plot or interment space; always applies.
  • opening_closing: Opening and closing the grave or niche; always applies.
  • marker: Marker or monument; always applies.
  • cash_advances: Cash advances (death certificates, obituary notices, flowers, clergy, and similar); always applies.
  • taxes: Taxes; always applies.
{"name":"funeral_cost","arguments":{"disposition":"cremation","service":"direct","prices":{"basic_services":1200,"crematory_fee":350}}}

Plain JSON: GET /api/funeral-cost?disposition=cremation&service=direct&basic_services=1200&crematory_fee=350. Price lines are top-level GET parameters, each at most once; the vault price is vault_price, because vault is the yes/no choice. Empty calls are errors. Web and MCP share 20 free calls per IP per UTC day and the global ceiling of 2,000; no separate tool cap. Copy and print without an account. Pure rules and Decimal money, no network or model.

read_barcode

Read every barcode in an image, with type, corner positions and GS1 product number, expiry date and lot when present. Scan barcodes on the web.

  • image (string): base64 PNG, JPEG or WebP, or a base64 image data URL. At most 2 MB decoded and 4000 by 4000 pixels.
  • url (string): a public https URL of a PNG, JPEG or WebP image, 2 MB at most. Redirects must stay on https.
  • file (object): an image file attached in ChatGPT, passed as download_url and file_id (plus optional mime_type and file_name).
  • Give exactly one of image, url or file.
{"name":"read_barcode","arguments":{"image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAACWCAIAAAAKd2D9AAABvElEQVR4nO3SMRKEIBAAweP+/2fMDCTBcozsDhVcsGbMOX/vGGNcnpyzzlfr9HXXun1dvHOL6jy3Zu2c+daInf/zcMRD/5e+y2dJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSISYqYpIhJipikiEmKmKSIHUQwKykW8tU9AAAAAElFTkSuQmCC"}}

make_barcode

Make an SVG barcode with checked retail lengths and check digits. Make barcodes on the web.

  • text (required string): value to encode, at most 1024 UTF-8 bytes.
  • format (optional string): code128 (default), ean13, ean8, upca, upce, code39, itf, gs1-128 or datamatrix. GS1 uses bracketed (01)GTIN(17)YYMMDD(10)lot. QR codes use make_qr.
{"name":"make_barcode","arguments":{"text":"(01)05901234123457(17)270300(10)LOT-A","format":"gs1-128"}}

get_transcript

Read public YouTube captions as timestamped text. Captions only, no video or audio. Try captions on the web.

  • url (required string): YouTube video URL or an 11-character video id.
  • lang (optional string): preferred language code, such as en or pt-BR; defaults to en. Falls back to English, then another available caption track; it does not translate captions.
{"name":"get_transcript","arguments":{"url":"jNQXAC9IVRw","lang":"en"}}

resume_gap

Compare résumé skills with one pasted job description, or with Columbus, Ohio job postings. Résumé and job description text are written to temporary files and deleted right after the check. Check résumé skills on the web.

  • resume_text (required string): plain résumé text, 50 to 50,000 characters.
  • job_ad (optional string): plain text of one job description, up to 60,000 characters. The result lists the skills it names, split into those the résumé shows and those it does not.
  • family (string, required unless job_ad is given): data analyst, software engineer, or project manager; compares with Columbus, Ohio postings.
{"name":"resume_gap","arguments":{"resume_text":"Data analyst with SQL and Excel experience building weekly reports.","job_ad":"Data analyst. Required: SQL, Python and Tableau."}}

Job Alerts at jobs.cowerx.dev has more résumé features.

page_to_markdown

Read one public HTML page as Markdown with title, headings, lists, tables and absolute links. No logins, paywalls or JavaScript rendering; 2 MB HTML maximum. Convert a page on the web.

  • url (required string): public http or https page URL. Private network addresses are refused, including on redirects.
{"name":"page_to_markdown","arguments":{"url":"https://example.com/article"}}

seo_check

Check a public page for SEO strengths and ranked fixes with fixed rules. One page, robots.txt, a named sitemap and up to 20 links; 10 seconds overall, 2 MB HTML. Check SEO on the web.

  • url (required string): public HTTP or HTTPS page URL on ports 80/443. Private network addresses are refused on every request and redirect.
{"name":"seo_check","arguments":{"url":"https://example.com/"}}

Plain JSON: GET /api/seo-check?url=https://example.com/. Returns schema 1, URL, score, does_well, fixes and facts. API and MCP share the free allowance: 20 calls a day per IP, no key needed. Web checks have a separate limit of 60 per IP per UTC hour.

page_check

Check whether one public HTML page really shows content. Get a working, suspect or broken verdict with reasons and matching snippets. No JavaScript rendering; 10 seconds overall, 2 MB HTML. Check a page on the web.

  • url (required string): public HTTP or HTTPS page URL on ports 80/443. Private network addresses are refused on every request and redirect.
{"name":"page_check","arguments":{"url":"https://example.com/article/"}}

Plain JSON: GET /api/page-check?url=https://example.com/article/. Returns schema 1, verdict, findings, status, final_url and text_length. Each finding includes a reason and a snippet of at most 180 characters. API and MCP share the free allowance: 20 calls a day per IP, no key needed. Web checks have a separate limit of 60 per IP per UTC hour.

find_data

Get a full free plan for up to three data sources: fit, cost at your volume, resale evidence and build-it-yourself guidance. Find sources on the web.

  • use_case (required string): nonempty, at most 500 characters. Describe the data you need.
  • volume (optional integer): monthly records or calls, 0 to 1,000,000,000,000,000; default 0. Unpriced costs stay unknown.
  • resell (optional string): yes or no; default no. Every source shows its resale label, recorded clause, URL and read date.
  • geo (optional string): geography, at most 200 characters; default us.
{"name":"find_data","arguments":{"use_case":"Find plumbers in Ohio with phone and website","volume":5000,"resell":"yes","geo":"ohio"}}

Plain JSON: GET /api/data-finder?q=plumbers&volume=5000&resell=yes&geo=ohio. The API and MCP share the free daily allowance and accept the same bearer key.

basement_water_cause

Use eight observation groups to narrow down possible basement water causes, safe first checks and who to call. Hazard stops come first. Find basement water causes on the web.

Each group is a list of fixed observation codes, [] for none observed, or "unknown". Every group is optional and an omitted group counts as unknown, but a call must send at least one group. See what each code means. GET /api/basement-water accepts repeated parameters for each group; use unknown for an uncertain group or none_observed for an empty list. Calls share the free daily allowance.

  • hazard (optional): a list of standing_water, sewage, electrical; [] for none observed, or unknown (the default).
  • timing (optional): a list of rain, snowmelt, dry_weather, water_use, humid_summer; [] for none observed, or unknown (the default).
  • where (optional): a list of wall_crack, wall_floor_joint, floor, window, overhead_pipe, floor_drain, crack_changing, wall_bowing; [] for none observed, or unknown (the default).
  • gutters (optional): a list of overflowing, missing, downspout_near; [] for none observed, or unknown (the default).
  • grading (optional): a list of slopes_toward, puddles; [] for none observed, or unknown (the default).
  • window_well (optional): a list of debris, ponding, starts_at_window; [] for none observed, or unknown (the default).
  • sump (optional): a list of none, power_lost, pit_filling_no_discharge, running, seepage_no_inflow; [] for none observed, or unknown (the default).
  • moisture (optional): a list of cold_surface_sweating, humid_air, indoor_sources, visible_drip; [] for none observed, or unknown (the default).
{"name":"basement_water_cause","arguments":{"timing":["rain"],"where":["wall_floor_joint"],"gutters":["downspout_near"]}}

kitchen_remodel_cost

Estimate a kitchen remodel budget from floor area and scope. Returns a planning estimate range and two separate national reference cards with dates. No line items or labor/material split. Estimate kitchen remodel cost on the web.

  • area_sqft (optional number): floor area, 20–1,000 sq ft; provide this OR both dimensions.
  • length_ft (optional number): positive length in feet; required with width_ft when area is omitted. Their product must be 20–1,000 sq ft.
  • width_ft (optional number): positive width in feet; required with length_ft when area is omitted.
  • scope (required string): partial ($60–$150/sq ft, may include DIY work), full ($150–$250/sq ft, same layout), or layout_change ($250–$350/sq ft, layout changes / high-end).
{"name":"kitchen_remodel_cost","arguments":{"area_sqft":150,"scope":"full"}}

Plain JSON: GET /api/kitchen-remodel-cost?area_sqft=150&scope=full. Web and MCP share the free daily allowance.

flooring_cost

Estimate flooring installation cost for your rooms. One call compares all eight national installed ranges (labor and materials); no labor-only figure. Includes hardwood order guidance, unpriced prep checks and a separate Census reference card. Use the flooring cost calculator on the web.

  • rooms (required array): 1–20 room objects; each 1–5,000 sq ft, total 10–10,000 sq ft. Each uses dimensions OR area.
  • name (optional string in each room): at most 40 characters.
  • length_ft (optional number in each room): positive length in feet; requires width_ft instead of area_sqft.
  • width_ft (optional number in each room): positive width in feet; requires length_ft.
  • area_sqft (optional number in each room): 1–5,000 sq ft instead of dimensions.
  • material (required string): carpet, laminate, vinyl_sheet, vinyl_plank, hardwood_solid, hardwood_engineered, tile_ceramic, tile_porcelain.
  • layout (optional string): standard (default) or diagonal. Only changes hardwood order extra: 5% or 10%.
{"name":"flooring_cost","arguments":{"rooms":[{"length_ft":12,"width_ft":15}],"material":"carpet"}}

Plain JSON: GET /api/flooring-cost?room=12x15&room=180&material=carpet. Optional repeated room_name: one per room. Web and MCP share the free daily allowance.

driveway_cost

Estimate driveway replacement cost. One call compares all ten national installed ranges. Base, drainage and permits are not priced; removal is priced only for an existing concrete driveway. Two separate reference cards provide national context. Use the driveway cost calculator on the web.

  • sections (required array): 1–10 section objects; each 1–10,000 sq ft, total 20–10,000 sq ft. Use dimensions OR area.
  • name (optional string in each section): at most 40 characters.
  • length_ft (optional number in each section): positive length in feet; requires width_ft instead of area_sqft.
  • width_ft (optional number in each section): positive width in feet; requires length_ft.
  • area_sqft (optional number in each section): 1–10,000 sq ft instead of dimensions.
  • surface (required string): concrete_standard, concrete_decorative, concrete_stamped, concrete_custom, asphalt_standard, asphalt_recycled, asphalt_porous, pavers_standard, pavers_brick, pavers_cobblestone.
  • existing (optional string): none (default), concrete or other. Only changes removal.
{"name":"driveway_cost","arguments":{"sections":[{"length_ft":12,"width_ft":24}],"surface":"concrete_standard"}}

Plain JSON: GET /api/driveway-cost?section=12x24&section=400&surface=concrete_standard. Optional repeated section_name: one per section. Web and MCP share the free daily allowance. Dollar endpoints round to the nearest $10 half up; high_open means the top is open, and typical is null.

pole_barn_cost

Estimate pole barn cost with national construction ranges for the building only. Site work, slab, doors, height and permits are not priced. Residential use adds a separate living-space build-out band and combined range with an open top. Two unscaled reference cards show national projects and manufacturer packages separately. Use the pole barn cost calculator on the web.

  • width_ft (required number): width in feet, 8–200.
  • length_ft (required number): length in feet, 8–200. Footprint must be 100–10,000 sq ft.
  • use (optional string): shell (default, just the building) or residential (finished as living space).
{"name":"pole_barn_cost","arguments":{"width_ft":30,"length_ft":40,"use":"shell"}}

Plain JSON: GET /api/pole-barn-cost?width=30&length=40&use=residential. Web and MCP share the free daily allowance. Dollar endpoints round to the nearest $10 half up; high_open means the top is open, and typical is null.

water_softener_size

Estimate water softener size and yearly salt cost from tested hardness and softened-water use. Costs are salt only; capacities are before reserve. Includes three idealized EP42 published test-rating examples and primary sources. Use the water softener size calculator on the web.

  • hardness (required number): measured hardness, more than 0 and at most 100 gpg after conversion; otherwise get a water-treatment assessment.
  • hardness_unit (optional string): gpg (default) or mg_l; mg/L divided by 17.1 (W1).
  • people (required integer): whole number 1–20.
  • gallons_per_person_day (required number): 10–300, softened water only; no national default used, exclude bypassing outdoor taps.
  • iron_ppm (optional number): 0–20 dissolved clear-water ferrous iron; absent unknown. EcoPure adds 5 gpg per ppm (W4); other makers differ, ask yours.
  • interval_days (optional number): target regeneration interval 1–60 days.
  • capacity_grains (optional number): 1,000–200,000 grains per regeneration; paired with salt_lb, both or neither, from the manual.
  • salt_lb (optional number): 0.5–50 lb salt per regeneration at that capacity; paired with capacity_grains.
  • bag_price (optional number): $0.01–$200, default $8.97; one store's price (Fleet Farm, observed 2 Oct 2026); enter yours.
  • bag_lb (optional number): 1–100 lb, default 40.
{"name":"water_softener_size","arguments":{"hardness":10,"hardness_unit":"gpg","people":4,"gallons_per_person_day":75}}

Plain JSON: GET /api/water-softener-size?hardness=10&unit=gpg&people=4&gallons=75&iron=1&interval=7&capacity=32000&salt=8&bag_price=6.5&bag_lb=40. Web and MCP share the free daily allowance. Pure Decimal arithmetic, no network or model.

yard_drainage_cause

Likely causes to investigate, not a diagnosis. Explainable observations lead to options, who does the work and dated public planning estimates. Use the yard drainage cause finder on the web.

All groups are optional arrays of unique codes. Omit a group for unknown; an empty array means none observed. Give at least one group or number.

  • where (optional array): foundation, lawn_low_spot, slope_bottom, whole_yard.
  • timing (optional array): after_rain, seasonal, dry_weather.
  • gutters (optional array): overflowing, leaking, discharge_near_foundation.
  • grading (optional array): slopes_toward_house, settled_low_spot, blocked_swale, new_hard_surface.
  • soil (optional array): clay, compacted.
  • boundary (optional array): flow_from_higher_ground, new_nearby_hard_surface.
  • groundwater (optional array): seepage, saturated_below_surface, seasonal_high_water.
  • site (optional array): lower_outlet, utilities_in_area, septic_or_well_nearby, water_entering_house.
  • drop_inches_15min (optional number): 0–20. Inches dropped in 15 minutes after pre-wetting and refilling the hole; Iowa State's informal root-zone check, not a dry-well design test.
  • downspouts (optional integer): 1–20. Whole number of elbow-plus-extension sets, hardware only.
  • dry_well_cubic_ft (optional number): 1–2000. Designed storage from a designer; never sized from this questionnaire.
  • rain_garden_sq_ft (optional number): 10–5000. Agreed garden area; never computed from roof area.
{"name":"yard_drainage_cause","arguments":{"gutters":["discharge_near_foundation"],"downspouts":3}}

Plain JSON: GET /api/yard-drainage?gutters=leaking,discharge_near_foundation&soil=clay&drop=0.2&downspouts=3&dry_well=100&rain_garden=150. Empty group values mean none observed. Web and MCP share the free daily allowance. Pure rules and Decimal money, no network or model.

recall_check

Search local U.S. CPSC data for up to 10 notices. A recall notice that may match — check the notice. May not cover every batch or country; read the notice. CPSC does not endorse API Tool Calls. Check recall notices on the web.

  • query (required string): product name, brand, model number or UPC; nonempty, at most 500 characters. Exact UPC/model matches rank first, then all search words.
{"name":"recall_check","arguments":{"query":"IKEA MALM dresser"}}

make_run_loop

Make walking/running loops that start and end at one point, each within 3% of the target distance. Use the running route planner on the web.

  • start (required string or object): a starting address, or coordinates with lat from -90 to 90 and lon from -180 to 180.
  • distance_km (required number): target distance from 1 to 42.2 kilometres; half marathon is 21.0975.
  • prefer (optional array): any subset of quiet, trails, flat, without duplicates. Preferences shape the route and never promise safety.
  • count (optional integer): 1 to 3 loops, default 3. Sparse areas may return fewer loops or none.
  • avoid_crime (optional boolean): default false. Steer round blocks with more reported crime than the start, avoiding only the worst quarter of reported blocks. City police reports, last 12 months; San Francisco and Seattle for now. Not a guarantee. If no grid covers the start, the reply says the crime filter is not available here yet.
  • direction (optional): which way the loop heads from the start, one of any (default), n, e, s or w. Ignored when via is set.
  • via (optional): a place every loop passes within 150 m of, as an address string or lat/lon like start. A place farther than 40% of the distance returns no loops and says so.
  • stops (optional array): 1 to 9 {lat, lon} places the loop must pass in order, with start and distance_km as before. Returns one loop with its real distance, and loops edited this way are not held to the 3% rule (edited is true; outside_target is true when it is more than 3% off).
{"name":"make_run_loop","arguments":{"start":"Boston, MA","distance_km":5,"prefer":["quiet"],"count":3}}

Plain JSON: POST /api/run-loop with the same arguments. Returns Google Maps walking links, an encoded polyline, distance, optional climb and attribution. Maps may pick its own path between the 8 stops; GPX and the live dot keep the exact loop. Routes and map data © OpenStreetMap contributors (ODbL); routing and elevation: Valhalla on FOSSGIS servers. Starting addresses and coordinates are never logged.

company_facts

Read a business's own home, about and contact pages for company facts with sources. Use the company info finder on the web.

  • url (required string): the business's public http or https homepage URL, without login details. No other arguments are accepted.
{"name":"company_facts","arguments":{"url":"https://example.com/"}}

Send your OpenRouter key in the X-OpenRouter-Key HTTP header for MCP or POST /api/company-facts. Reads up to five document URLs including redirects, follows robots.txt, and waits at least one second between requests. Fetching stops after 45 seconds. Returns structuredContent with the requested URL, 11 fields, fetched pages and model. Each field has value and source_url; unstated or uncited details remain null. If no page is readable, it returns a plain error without a model request. MCP errors use isError content; a missing key does not spend a free call.

proofread

Fix spelling, grammar and punctuation while keeping meaning and voice. Use the proofreader on the web.

  • text (required string): nonempty text, at most 2,000 words and 15,000 characters. No other arguments are accepted.
{"name":"proofread","arguments":{"text":"She go to teh shop yesterday"}}

Send your OpenRouter key in the X-OpenRouter-Key HTTP header for MCP or POST /api/proofread. Keep keys out of tool arguments. Returns corrected text plus structuredContent with corrected, changes (up to 300 old/new word runs) and model. Provider errors return MCP isError content; a missing key does not spend a free call.

Step 0 of 4