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 unlesswifiis provided.format(optional string): onlysvgis supported; defaults tosvg.wifi(object): takes precedence overtext. Contains requiredssid(nonempty string) andsecurity(WPA,WEP, ornopass), pluspassword(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 as2024-03-10or2024-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 asAmerica/New_York. DefaultUTC. A date with no offset is read in this zone.unit(optional string):sormsto 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 asapi.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 asARM64. 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 ofascii,utf-16le,utf-8. Default ascii and utf-16le.kinds(optional array): only listurl,email,ip,path,keyorotherstrings; 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:minimumorrecommended; omitted shows both.base:new_concrete,new_asphaltorexisting_slab. Existing slab shows no cost cards.finish:acrylicortiles.fence:yesorno.lights:yesorno.space_length_ftandspace_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.
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:level1orlevel2.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:yesorno, compatible breaker space.capacity_check:enough,not_enoughornot_done, electrician’s load calculation.existing_circuit:yesorno, suitable dedicated circuit at parking.run_feet: number 1–500, routed length, not straight-line distance.extras: unique array ofdetached_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.
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):burialorcremation.service(required):viewing_ceremonyordirect(immediate burial or direct cremation without viewing).vault(optional, burial only):yesorno; 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 asdownload_urlandfile_id(plus optionalmime_typeandfile_name).- Give exactly one of
image,urlorfile.
{"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-128ordatamatrix. GS1 uses bracketed (01)GTIN(17)YYMMDD(10)lot. QR codes usemake_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 asenorpt-BR; defaults toen. 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 unlessjob_adis given):data analyst,software engineer, orproject 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):yesorno; defaultno. Every source shows its resale label, recorded clause, URL and read date.geo(optional string): geography, at most 200 characters; defaultus.
{"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 ofstanding_water,sewage,electrical;[]for none observed, orunknown(the default).timing(optional): a list ofrain,snowmelt,dry_weather,water_use,humid_summer;[]for none observed, orunknown(the default).where(optional): a list ofwall_crack,wall_floor_joint,floor,window,overhead_pipe,floor_drain,crack_changing,wall_bowing;[]for none observed, orunknown(the default).gutters(optional): a list ofoverflowing,missing,downspout_near;[]for none observed, orunknown(the default).grading(optional): a list ofslopes_toward,puddles;[]for none observed, orunknown(the default).window_well(optional): a list ofdebris,ponding,starts_at_window;[]for none observed, orunknown(the default).sump(optional): a list ofnone,power_lost,pit_filling_no_discharge,running,seepage_no_inflow;[]for none observed, orunknown(the default).moisture(optional): a list ofcold_surface_sweating,humid_air,indoor_sources,visible_drip;[]for none observed, orunknown(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 withwidth_ftwhen area is omitted. Their product must be 20–1,000 sq ft.width_ft(optional number): positive width in feet; required withlength_ftwhen area is omitted.scope(required string):partial($60–$150/sq ft, may include DIY work),full($150–$250/sq ft, same layout), orlayout_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; requireswidth_ftinstead ofarea_sqft.width_ft(optional number in each room): positive width in feet; requireslength_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) ordiagonal. 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; requireswidth_ftinstead ofarea_sqft.width_ft(optional number in each section): positive width in feet; requireslength_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),concreteorother. 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§ion=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) orresidential(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) ormg_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 withsalt_lb, both or neither, from the manual.salt_lb(optional number): 0.5–50 lb salt per regeneration at that capacity; paired withcapacity_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 withlatfrom -90 to 90 andlonfrom -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 ofquiet,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 ofany(default),n,e,sorw. Ignored whenviais set.via(optional): a place every loop passes within 150 m of, as an address string orlat/lonlikestart. 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, withstartanddistance_kmas before. Returns one loop with its real distance, and loops edited this way are not held to the 3% rule (editedis true;outside_targetis 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
