{"tools":[{"name":"travel-time","displayName":"Travel Time","subtitle":"How long to get there, door to door","about":"**Travel Time** tells you exactly how long it will take to get from one place to another — by car, on foot, or by bike — with live or predicted traffic.\n\nConnect a traffic API key and it shows the actual current delay alongside the no-traffic baseline: \"28 min without traffic, 41 min with current congestion.\" Without a key it still works, using road-speed estimates from the OpenStreetMap routing engine. Works anywhere in the world and understands plain addresses, landmarks, city names, UK postcodes, and raw \"lat,lon\" coordinate pairs.\n\n### What you can do\n- **get_travel_time** — get door-to-door journey time with live traffic delay for driving, walking, or cycling\n- **get_travel_time_batch** — score one origin against many destinations in a single call (dispatcher / \"who's closest\" workflows)\n- **get_route** — get the full route as decoded coordinates, ready to plot on any map\n- See the no-traffic baseline vs current traffic side by side\n- Plan any future departure — \"tomorrow 8:30am\", \"in 2 weeks\", \"June 20\" — and see the traffic typically expected at that time\n- Compare modes by calling it once per mode\n\n### Who it's for\nAnyone planning a journey and wanting a realistic time — not just the optimistic GPS default. Commuters, meeting schedulers, dispatchers, delivery planners, developers building map-based features, or anyone deciding whether to drive or take a different route.\n\n### How to use it\n1. Call **get_travel_time** with your origin, destination, and travel mode for a quick journey summary\n2. Call **get_travel_time_batch** when you have one origin and several candidate destinations — returns all results in a single response\n3. Call **get_route** when you need the actual route geometry — returns all coordinates decoded and ready for Mapbox, Google Maps, Leaflet, or any mapping library\n4. Optionally pass a departure time — e.g. \"tomorrow 8:30am\" or \"Friday 5pm\"\n\n### Tips\n- Pass coordinates as `\"lat,lon\"` (e.g. `\"51.5074,-0.1278\"`) when you already have them — skips the geocoding step entirely\n- A returned `duration_minutes: 0` is a valid result for same-location requests (origin = destination). Test for success with `error == null`, never with the duration value\n- UK postcodes that have been retired by Royal Mail return a `LOCATION_TERMINATED` error — ask the user for the current postcode rather than using the historic coordinates\n\n### Getting started\nWorks immediately with no setup. Connect a traffic API key for live traffic data.","version":"0.05","categories":["data"],"currency":"USD","skills":[{"name":"get_travel_time","displayName":"Get Travel Time","description":"Door-to-door journey time and distance between two locations. Driving, walking, or cycling anywhere in the world. Accepts addresses, landmarks, UK postcodes, or \"lat,lon\" pairs (coordinates skip geocoding). duration_minutes of 0 is valid for same-location requests — test success with error == null.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Start location — any address, landmark, \"City, Country\", UK postcode, or \"lat,lon\" coordinate pair (e.g. \"51.5074,-0.1278\")"},"destination":{"type":"string","description":"End location — any address, landmark, \"City, Country\", UK postcode, or \"lat,lon\" coordinate pair"},"mode":{"type":"string","description":"Travel mode: driving, walking, or cycling","enum":["driving","walking","cycling"],"default":"driving"},"departure_time":{"type":"string","description":"When you plan to leave — e.g. \"tomorrow 8:30am\", \"next Friday 9am\", \"in 2 weeks\", \"June 20\", ISO. Future = typical traffic then. Omit for now."}},"required":["origin","destination"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Driving time between two cities","input":{"origin":"London, UK","destination":"Brighton, UK","mode":"driving"}},{"description":"Skip geocoding by passing coordinates directly","input":{"origin":"51.5074,-0.1278","destination":"50.8225,-0.1372","mode":"driving"}},{"description":"Morning rush hour commute","input":{"origin":"Brooklyn, New York","destination":"Midtown Manhattan, New York","mode":"driving","departure_time":"tomorrow 8:30am"}},{"description":"Plan a future trip — typical traffic two weeks out","input":{"origin":"Brooklyn, New York","destination":"Midtown Manhattan, New York","mode":"driving","departure_time":"in 2 weeks 8:30am"}},{"description":"Walking time between landmarks","input":{"origin":"Eiffel Tower, Paris","destination":"Louvre Museum, Paris","mode":"walking"}},{"description":"Cycling across a city","input":{"origin":"King's Cross Station, London","destination":"Tower Bridge, London","mode":"cycling"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"duration_minutes":{"type":"number","description":"Journey time in minutes including traffic at the requested time — live now, or the typical traffic predicted for a future departure. 0 is a valid value when origin equals destination."},"duration_without_traffic_minutes":{"type":"number","description":"Journey time in minutes with no traffic — the optimistic baseline"},"traffic_delay_minutes":{"type":"number","description":"Extra minutes caused by current traffic (0 when no live data)"},"duration_range":{"type":"string","description":"Human-readable time summary, e.g. \"28 min without traffic, 41 min with current traffic\""},"duration_summary":{"type":"string","description":"One-line journey summary for display"},"distance_km":{"type":"number","description":"Route distance in kilometres"},"distance_miles":{"type":"number","description":"Route distance in miles"},"mode":{"type":"string","description":"Travel mode used"},"has_live_traffic":{"type":"boolean","description":"True only for live, real-time traffic (a \"now\" departure). False for a predicted future departure or when no traffic data is available — read traffic_basis for the distinction."},"traffic_basis":{"type":"string","enum":["live","predicted","none"],"description":"How the journey time was derived: \"live\" = real-time traffic right now; \"predicted\" = typical traffic expected for a future departure time; \"none\" = road-speed estimate with no traffic data."},"data_source":{"type":"string","description":"Routing provider used: TomTom, HERE, or OSRM"},"origin_resolved":{"type":"string","description":"Geocoded origin place name"},"destination_resolved":{"type":"string","description":"Geocoded destination place name"}}},"returns":"Journey time with live traffic delay vs no-traffic baseline, distance, and the routing provider used"},{"name":"get_travel_time_batch","displayName":"Get Travel Time (batch)","description":"Compare one origin against many destinations in a single call — for dispatcher / \"who's closest\" workflows. Returns one entry per destination, keyed by a client-supplied `key`. Per-destination failures go in results[].error and do not fail the batch. Up to 50 destinations.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Start location — any address, landmark, UK postcode, or \"lat,lon\" coordinate pair. Geocoded once and reused for every destination."},"destinations":{"type":"array","description":"Destinations to score against the origin. Each must include a unique `key` (echoed back on the matching result) and a `to` location string.","items":{"type":"object","properties":{"key":{"type":"string","description":"Client-supplied identifier echoed back on the result row"},"to":{"type":"string","description":"Destination — address, landmark, UK postcode, or \"lat,lon\" pair"}},"required":["key","to"]},"minItems":1,"maxItems":50},"mode":{"type":"string","description":"Travel mode applied to every destination","enum":["driving","walking","cycling"],"default":"driving"},"departure_time":{"type":"string","description":"Shared across all destinations — e.g. \"tomorrow 8:30am\", \"in 2 weeks\", \"June 20\", ISO. Future = typical traffic then. Omit for now."}},"required":["origin","destinations"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Pick the closest of three candidate traders to a job site","input":{"origin":"51.5174,-0.0997","destinations":[{"key":"trader-a","to":"51.4424,0.0509"},{"key":"trader-b","to":"51.5054,-0.0235"},{"key":"trader-c","to":"51.5390,-0.1426"}],"mode":"driving"}},{"description":"Find the nearest of several venues for a meeting","input":{"origin":"King's Cross Station, London","destinations":[{"key":"venue-soho","to":"Soho Square, London"},{"key":"venue-shoreditch","to":"Shoreditch High Street, London"},{"key":"venue-canary","to":"Canary Wharf, London"}],"mode":"walking","departure_time":"tomorrow 9am"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"origin_resolved":{"type":"string","description":"Geocoded origin place name"},"mode":{"type":"string","description":"Travel mode applied to every destination"},"count":{"type":"number","description":"Total destinations in the batch"},"succeeded":{"type":"number","description":"Destinations that returned a route"},"failed":{"type":"number","description":"Destinations that errored (see results[].error)"},"data_source":{"type":"string","description":"Routing provider used: TomTom, HERE, or OSRM"},"has_live_traffic":{"type":"boolean","description":"True only when results use live, real-time traffic. False for a predicted future departure — read traffic_basis."},"traffic_basis":{"type":"string","enum":["live","predicted","none"],"description":"How every row's time was derived: \"live\" = real-time now; \"predicted\" = typical traffic for the future departure_time; \"none\" = no traffic data."},"results":{"type":"array","description":"One entry per destination, in the same order as the input. Failed entries include an `error` object instead of duration/distance fields.","items":{"type":"object","properties":{"key":{"type":"string","description":"Client-supplied key from the matching input row"},"to":{"type":"string","description":"Original destination string"},"destination_resolved":{"type":"string","description":"Geocoded destination place name (success only)"},"duration_minutes":{"type":"number","description":"Journey time with current traffic, in minutes (success only). 0 is valid for same-location requests."},"duration_without_traffic_minutes":{"type":"number","description":"No-traffic baseline in minutes (success only)"},"traffic_delay_minutes":{"type":"number","description":"Extra minutes from current traffic (success only)"},"duration_summary":{"type":"string","description":"One-line summary for this destination (success only)"},"distance_km":{"type":"number","description":"Distance in kilometres (success only)"},"distance_miles":{"type":"number","description":"Distance in miles (success only)"},"has_live_traffic":{"type":"boolean","description":"True only for live, real-time traffic; false for a predicted future departure (success only)"},"traffic_basis":{"type":"string","enum":["live","predicted","none"],"description":"How this row's time was derived: live, predicted (future departure), or none (success only)"},"error":{"type":"object","description":"Present only on failure. The rest of the row is empty.","properties":{"code":{"type":"string","description":"Error code: LOCATION_NOT_FOUND, LOCATION_TERMINATED, or HANDLER_ERROR"},"message":{"type":"string","description":"Human-readable error detail"}}}}}}}},"returns":"Per-destination travel time, distance, and traffic data — keyed back to the input row. Failed rows carry a structured error object so the rest of the batch still returns cleanly."},{"name":"get_route","displayName":"Get Route","description":"Get the full route geometry between two locations as decoded lat/lon coordinates, plus journey time and distance. Use when you need to plot the route on a map. Driving, walking, or cycling anywhere in the world. Accepts addresses, landmarks, UK postcodes, or \"lat,lon\" pairs.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Start location — any address, landmark, \"City, Country\", UK postcode, or \"lat,lon\" coordinate pair"},"destination":{"type":"string","description":"End location — any address, landmark, \"City, Country\", UK postcode, or \"lat,lon\" coordinate pair"},"mode":{"type":"string","description":"Travel mode: driving, walking, or cycling","enum":["driving","walking","cycling"],"default":"driving"},"departure_time":{"type":"string","description":"When you plan to leave — e.g. \"tomorrow 8:30am\", \"next Friday 9am\", \"in 2 weeks\", \"June 20\", ISO. Future = typical traffic then. Omit for now."}},"required":["origin","destination"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Driving route between two cities for map plotting","input":{"origin":"London, UK","destination":"Brighton, UK","mode":"driving"}},{"description":"Cycling route across a city","input":{"origin":"King's Cross Station, London","destination":"Tower Bridge, London","mode":"cycling"}},{"description":"Walking route between landmarks with departure time","input":{"origin":"Eiffel Tower, Paris","destination":"Louvre Museum, Paris","mode":"walking","departure_time":"tomorrow 10am"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"route_points":{"type":"array","description":"Decoded route coordinates as [{lat, lon}] — pass directly to Mapbox, Google Maps, Leaflet, etc.","items":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude"},"lon":{"type":"number","description":"Longitude"}}}},"waypoint_count":{"type":"number","description":"Number of route coordinate points"},"duration_minutes":{"type":"number","description":"Journey time in minutes with current traffic"},"duration_without_traffic_minutes":{"type":"number","description":"Journey time in minutes without traffic"},"traffic_delay_minutes":{"type":"number","description":"Extra minutes caused by current traffic"},"duration_summary":{"type":"string","description":"One-line journey summary"},"distance_km":{"type":"number","description":"Route distance in kilometres"},"distance_miles":{"type":"number","description":"Route distance in miles"},"mode":{"type":"string","description":"Travel mode used"},"has_live_traffic":{"type":"boolean","description":"True only for live, real-time traffic (a \"now\" departure). False for a predicted future departure or when no traffic data is available — read traffic_basis for the distinction."},"traffic_basis":{"type":"string","enum":["live","predicted","none"],"description":"How the journey time was derived: \"live\" = real-time traffic right now; \"predicted\" = typical traffic expected for a future departure time; \"none\" = road-speed estimate with no traffic data."},"data_source":{"type":"string","description":"Routing provider used"},"origin_resolved":{"type":"string","description":"Geocoded origin place name"},"destination_resolved":{"type":"string","description":"Geocoded destination place name"}}},"returns":"Full route geometry as decoded coordinates plus journey time, distance, and traffic data"}],"workflow":["get_travel_time","get_travel_time_batch","get_route"],"icon":"/icons/travel-time.webp","changelog":[{"version":"0.01","date":"2026-05-02","changes":["Initial release — driving, walking, cycling with time-of-day traffic estimates"]},{"version":"0.02","date":"2026-05-02","changes":["Live traffic via TomTom and HERE APIs — shows real traffic delay vs no-traffic baseline when a key is configured"]},{"version":"0.03","date":"2026-05-02","changes":["Added get_route skill — returns the full route as decoded coordinates for plotting on a map"]},{"version":"0.04","date":"2026-05-08","changes":["Accept \"lat,lon\" strings as origin or destination — skips geocoding when you already have coordinates","UK postcodes resolve via Royal Mail authoritative data — terminated postcodes are now flagged instead of silently routing to historic coordinates","Added get_travel_time_batch — one origin to many destinations in a single call, with per-destination errors surfaced individually","Transparent retry on transient upstream failures"]},{"version":"0.05","date":"2026-06-03","changes":["Future departure times now return the traffic you'll actually face at that time, not current traffic — say \"tomorrow 8:30am\", \"next Friday 9am\", or \"this Saturday 5pm\" and get that day's typical congestion","Plan much further ahead — now accepts \"in 2 weeks\", \"in 1 month\", calendar dates like \"June 20\", and full date-and-time values; longer-range trips use typical day-of-week and time-of-day patterns","Every result now says whether the time is based on live traffic right now or a prediction for your chosen departure time"]}],"premadePrompt":"How long does it take to drive from [your start location] to [your destination] during morning rush hour tomorrow? Also tell me the walking and cycling times.","requirements":[{"name":"tomtom","type":"secret","displayName":"TomTom API Key","description":"Enables real-time traffic data via TomTom.","required":false,"acquireUrl":"https://developer.tomtom.com/user/register","envFallback":"TOMTOM_API_KEY"},{"name":"here","type":"secret","displayName":"HERE API Key","description":"Enables real-time traffic data via HERE.","required":false,"acquireUrl":"https://developer.here.com/sign-up","envFallback":"HERE_API_KEY"}],"credentials":[{"name":"tomtom","type":"secret","displayName":"TomTom API Key","description":"Enables real-time traffic data via TomTom.","required":false,"acquireUrl":"https://developer.tomtom.com/user/register","envFallback":"TOMTOM_API_KEY"},{"name":"here","type":"secret","displayName":"HERE API Key","description":"Enables real-time traffic data via HERE.","required":false,"acquireUrl":"https://developer.here.com/sign-up","envFallback":"HERE_API_KEY"}]},{"name":"parking-finder","displayName":"Parking Finder","subtitle":"Where to park near any address","about":"**Parking Finder** turns an address into a ranked list of places to park nearby — car parks and, where the data exists, legal on-street bays — sorted by how far you'd actually walk.\n\nGive it a job address or postcode and it finds the closest parking options, attaches a real walking time to each, and tells you what kind of parking it is: a car park, a station car park, or an on-street bay with its restriction, hours, and maximum stay. Built for tradespeople, delivery drivers, carers, and anyone who needs to leave a vehicle near a specific address without risking a ticket. It is honest about coverage: when on-street kerbside rules are not available for an area, it says so and shows car parks instead of pretending a kerb is legal.\n\n### What you can do\n- **find_parking** — from an address, get the nearest parking options ranked by walking distance\n- See each option's type, distance, walking time, and capacity\n- Get on-street bay rules — restriction, operating hours, maximum stay, and tariff — where the borough publishes them\n- Know immediately when on-street restrictions are unknown for an area, so you never guess\n\n### Who it's for\nElectricians, plumbers, couriers, carers, and field-service teams heading to a specific address — plus any app that needs to answer \"where do I park near here?\" from a postcode or address.\n\n### How to use it\n1. Call **find_parking** with the destination **address** or postcode\n2. Optionally set **radius_m** (how far to search) and **limit** (how many options to return)\n3. Read the ranked **options** — each shows distance, walking time, type, and any known on-street rules\n4. Check **on_street_rules_available** and **note** to know whether kerbside restrictions were available for that area\n\n### Getting started\nJust call **find_parking** with an address. It works straight away across the UK with no setup; coverage of on-street bay rules is best in central London and expands over time.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"find_parking","displayName":"Find Parking","description":"From a UK address or postcode, return the nearest parking options — car parks and, where published, legal on-street bays — ranked by walking time. Each includes type, distance, walking minutes, and any known restriction, hours, and max stay. Says plainly when on-street rules are unavailable.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"The destination — a UK address, postcode (e.g. \"NW5 2AB\"), or \"lat,lon\" coordinate pair"},"radius_m":{"type":"number","description":"How far around the address to search, in metres (100–2000). Defaults to 800.","default":800},"limit":{"type":"number","description":"Maximum number of options to return (1–20). Defaults to 8.","default":8}},"required":["address"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":12,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Find parking near a Kentish Town job by postcode","input":{"address":"NW5 2AB"}},{"description":"Wider search with more options for a van","input":{"address":"12 Caversham Road, London","radius_m":1200,"limit":12}},{"description":"Find parking from coordinates","input":{"address":"51.5074,-0.1278"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"job_location":{"type":"object","description":"The resolved destination","properties":{"address":{"type":"string","description":"Resolved address label"},"lat":{"type":"number","description":"Latitude"},"lon":{"type":"number","description":"Longitude"},"borough":{"type":"string","description":"Local authority / borough, when known"}}},"on_street_rules_available":{"type":"boolean","description":"True when on-street kerbside restriction data was available for this area. False means only car parks are shown — do not assume a kerb is legal."},"note":{"type":"string","description":"Plain-English summary of coverage for this area"},"option_count":{"type":"number","description":"Number of options returned"},"options":{"type":"array","description":"Parking options ranked by walking time (nearest first)","items":{"type":"object","properties":{"name":{"type":"string","description":"Name or label of the parking option"},"type":{"type":"string","description":"car_park, station_car_park, or on_street_bay"},"source":{"type":"string","description":"Where the data came from"},"lat":{"type":"number","description":"Latitude"},"lon":{"type":"number","description":"Longitude"},"distance_m":{"type":"number","description":"Straight-line distance in metres"},"walk_minutes":{"type":"number","description":"Walking time in minutes (null if unavailable)"},"address":{"type":"string","description":"Street address, when known"},"capacity":{"type":"number","description":"Total spaces, when known"},"restriction":{"type":"string","description":"On-street bays only — restriction type (e.g. paid-for, loading)"},"hours":{"type":"string","description":"On-street bays only — operating hours of the restriction"},"max_stay":{"type":"string","description":"On-street bays only — maximum stay"},"tariff":{"type":"string","description":"Pricing, when known"},"bookable":{"type":"boolean","description":"True when this is a pre-bookable space (e.g. JustPark, YourParkingSpace, ParkBee)"},"operator":{"type":"string","description":"Operator/brand — tells the user which app to book in, when known"},"book_url":{"type":"string","description":"Operator site to book or find out more (bookable spaces only)"},"ev":{"type":"boolean","description":"True when EV charging is available at this spot"},"power_kw":{"type":"number","description":"Peak charging power in kW (EV points only)"},"confidence":{"type":"string","description":"high (car park), known_rules (on-street with rules)"},"maps_url":{"type":"string","description":"Google Maps link that drops a pin on this exact spot"},"directions_url":{"type":"string","description":"Google Maps walking-directions link straight to this spot"}}}}}},"returns":"Ranked parking options near the address, each with type, distance, walking time, and any known on-street restrictions, plus an honest flag for whether kerbside rules were available."}],"workflow":["find_parking"],"icon":"/icons/parking-finder.webp","changelog":[{"version":"0.01","date":"2026-06-10","changes":["Initial release — from any UK address, returns the nearest parking options ranked by walking time","On-street bay rules (restriction type, hours, max stay, tariff) shown for boroughs that publish them; car parks everywhere else","Tells you plainly when on-street restrictions are not known for an area instead of guessing"]},{"version":"0.02","date":"2026-06-10","changes":["Every option now includes a map link and one-tap walking directions","Pre-bookable spaces are flagged with their operator so you know which app to book in","Optionally surface nearby EV charging bays alongside parking"]}],"premadePrompt":"Find me somewhere to park near [address or postcode]. I'm driving a van and need to be there a few hours — show the closest options and whether I can legally park on the street."},{"name":"appstore-aso","displayName":"App Store ASO","subtitle":"ASO keywords, listings, competitors","about":"**App Store ASO** is a complete iOS App Store optimization toolkit. It covers keyword research, listing audits, competitor tracking, metadata updates, in-app event management, and review monitoring — everything you need to improve your app's ranking and visibility in one place.\n\nGetting discovered on the App Store is a keyword game, and most developers are leaving traffic on the table. This tool lets you find high-traffic, lower-competition keywords, audit your existing title and description, update your listing directly, and benchmark against competitors — all without switching between different dashboards.\n\n### What you can do\n- Score keywords for difficulty and traffic, and get new keyword ideas\n- Audit your current listing with a prioritized improvement checklist\n- Search the App Store and pull full app details or competitor profiles\n- Export, edit, and push updated metadata directly to App Store Connect\n- Manage in-app events — list, create, update, and delete\n- Monitor user reviews for your app\n\n### Who it's for\niOS app developers and indie makers wanting higher search rankings. Mobile marketing teams managing keyword strategy and listing copy. Agencies doing competitive ASO research across multiple apps in a category.\n\n### How to use it\n1. Start with **analyze_keywords** to score your target keywords for difficulty and search volume\n2. Run **audit_metadata** on your app ID to get a checklist of listing improvements\n3. Use **search_apps** and **competitor_analysis** to benchmark against top apps in your category\n4. When ready to update: call **export_metadata**, edit the fields, then push with **update_metadata** or **push_keywords**\n\n### Getting started\nConnect your App Store Connect account by saving your Issuer ID, Key ID, and private key as credentials — then save your iOS app bundle ID to skip passing it each time.","version":"0.04","categories":["marketing","analytics","search"],"currency":"USD","skills":[{"name":"analyze_keywords","displayName":"Analyze Keywords","description":"Analyze keyword difficulty, traffic, and opportunity scores for iOS App Store. Returns difficulty (0-10), traffic (0-10), and opportunity scores for each keyword. Use this to find the best keywords to target for ASO.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","description":"List of keywords to analyze (max 20 per call)","items":{"type":"string"}},"country":{"type":"string","default":"us","description":"Country code for regional analysis (e.g. us, gb, de, jp)"}},"required":["keywords"]},"annotations":{},"examples":[{"description":"Analyze countdown-related keywords on iOS","input":{"keywords":["countdown","countdown widget","timer app"],"country":"us"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"keywords":{"type":"array","description":"Analysis results per keyword","items":{"type":"object","properties":{"keyword":{"type":"string","description":"The keyword analyzed"},"difficulty":{"type":"number","description":"Difficulty score (0-10, higher = harder to rank)"},"traffic":{"type":"number","description":"Traffic score (0-10, higher = more searches)"},"opportunity":{"type":"number","description":"Opportunity score combining difficulty and traffic"}}}},"platform":{"type":"string","description":"Platform analyzed (always ios)"},"country":{"type":"string","description":"Country code used"}}},"returns":"Array of keyword analysis results, each with difficulty (0-10), traffic (0-10), and opportunity scores"},{"name":"search_apps","displayName":"Search Apps","description":"Search the iOS App Store for apps matching a search term. Returns app title, developer, rating, reviews, and price for each result. Use this to see what apps rank for a given keyword.","inputSchema":{"type":"object","properties":{"term":{"type":"string","description":"Search term to look up"},"country":{"type":"string","default":"us","description":"Country code"},"num":{"type":"number","default":10,"description":"Number of results to return (max 20)"}},"required":["term"]},"annotations":{},"examples":[{"description":"Search iOS App Store for countdown apps","input":{"term":"countdown widget","num":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"apps":{"type":"array","description":"Matching apps","items":{"type":"object","properties":{"id":{"type":"number","description":"Numeric App Store ID"},"app_id":{"type":"string","description":"App bundle identifier"},"title":{"type":"string","description":"App title"},"subtitle":{"type":"string","description":"App subtitle"},"rating":{"type":"number","description":"Average rating (1-5)"},"reviews":{"type":"number","description":"Total review count"},"price":{"type":"string","description":"Price string (e.g. \"Free\", \"$4.99\")"},"category":{"type":"string","description":"Primary category"},"url":{"type":"string","description":"App Store URL"}}}},"count":{"type":"number","description":"Number of results returned"},"platform":{"type":"string","description":"Platform searched (always ios)"},"term":{"type":"string","description":"Search term used"},"country":{"type":"string","description":"Country code used"}}},"returns":"List of matching iOS apps with title, developer, rating, review count, price, and app ID"},{"name":"app_details","displayName":"App Details","description":"Get full details for a specific app on the iOS App Store. Returns title, rating, reviews, description, version, category, developer info, and more. Use a numeric App Store ID (e.g. \"1611434405\").","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Numeric App Store ID (e.g. \"1611434405\")"},"country":{"type":"string","default":"us","description":"Country code"}},"required":["app_id"]},"annotations":{},"examples":[{"description":"Get details for Spotify on iOS","input":{"app_id":"324684580"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"App title"},"app_id":{"type":"string","description":"App bundle identifier"},"rating":{"type":"number","description":"Average rating (1-5)"},"reviews":{"type":"number","description":"Total review count"},"description":{"type":"string","description":"App store description"},"version":{"type":"string","description":"Current version"},"category":{"type":"string","description":"Primary category"}}},"returns":"Full app metadata including title, rating, reviews, description, version, category, and developer info"},{"name":"competitor_analysis","displayName":"Competitor Analysis","description":"Run a full competitor analysis for an iOS app. Finds similar apps, compares ratings and reviews, and optionally checks who ranks for specific keywords. Returns your app details, similar apps list, and keyword rankings.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric)"},"country":{"type":"string","default":"us","description":"Country code"},"search_terms":{"type":"array","description":"Keywords to check competitor rankings for (max 5)","items":{"type":"string"}}},"required":["app_id"]},"annotations":{},"examples":[{"description":"Analyze competitors for a countdown app on iOS","input":{"app_id":"1611434405","search_terms":["countdown","countdown widget","timer"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"app":{"type":"object","description":"Your app details (title, rating, reviews)"},"similar_apps":{"type":"array","description":"List of similar/competing apps","items":{"type":"object","properties":{"title":{"type":"string","description":"App title"},"app_id":{"type":"string","description":"App identifier"},"rating":{"type":"number","description":"Average rating (1-5)"},"reviews":{"type":"number","description":"Total review count"}}}},"keyword_rankings":{"type":"object","description":"Keyword ranking positions for your app vs competitors"}}},"returns":"Your app details, list of similar competing apps, and keyword ranking comparison"},{"name":"keyword_hints","displayName":"Keyword Hints","description":"Get autocomplete keyword suggestions from Apple's App Store search. Returns suggested search terms with priority ranking. Use this for keyword brainstorming and discovery.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Starting query to get suggestions for (e.g. \"countdown\")"},"country":{"type":"string","default":"us","description":"Country code (us, gb, au, ca, de, fr, es, jp)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Get keyword suggestions for \"countdown\"","input":{"query":"countdown","country":"us"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"hints":{"type":"array","description":"Autocomplete suggestions with priority ranking","items":{"type":"object","properties":{"term":{"type":"string","description":"Suggested search term"},"priority":{"type":"number","description":"Priority ranking (lower = higher priority)"}}}},"query":{"type":"string","description":"Original query used"},"country":{"type":"string","description":"Country code used"},"count":{"type":"number","description":"Number of suggestions returned"}}},"returns":"Autocomplete keyword suggestions from App Store search with priority ranking"},{"name":"keyword_popularity","displayName":"Keyword Popularity","description":"Get Apple Ads popularity scores (0-100) for keywords. Returns real Apple Search Ads data including popularity score and difficulty label. Requires an Apple Ads session cookie for authentication. Use this for data-driven keyword prioritization.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","description":"List of keywords to check popularity for (max 50 per call)","items":{"type":"string"}},"app_id":{"type":"string","description":"Your iOS App Store ID (numeric). Falls back to saved ios_app_id credential."},"country":{"type":"string","default":"us","description":"Country code for regional popularity (e.g. us, gb, de, jp)"}},"required":["keywords"]},"annotations":{},"examples":[{"description":"Check popularity for countdown keywords","input":{"keywords":["countdown","countdown widget","timer app"],"app_id":"1611434405","country":"us"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"keywords":{"type":"array","description":"Popularity results per keyword","items":{"type":"object","properties":{"name":{"type":"string","description":"The keyword"},"popularity":{"type":"number","description":"Apple Ads popularity score (0-100)"},"difficulty_label":{"type":"string","description":"Difficulty label: Very Easy (<20), Easy (20-39), Medium (40-59), Hard (60+)"}}}},"app_id":{"type":"string","description":"App ID used for context"},"country":{"type":"string","description":"Country code used"},"count":{"type":"number","description":"Number of keywords returned"}}},"returns":"Apple Ads popularity scores (0-100) and difficulty labels for each keyword"},{"name":"keyword_recommendations","displayName":"Keyword Recommendations","description":"Get related keyword suggestions from Apple Ads based on a seed keyword. Returns recommended keywords with their popularity scores. Requires an Apple Ads session cookie. Use this to discover new keyword opportunities.","inputSchema":{"type":"object","properties":{"seed_keyword":{"type":"string","description":"Starting keyword to get recommendations for"},"app_id":{"type":"string","description":"Your iOS App Store ID (numeric). Falls back to saved ios_app_id credential."},"country":{"type":"string","default":"us","description":"Country code for regional recommendations"},"min_popularity":{"type":"number","default":0,"description":"Minimum popularity score to include (0-100)"}},"required":["seed_keyword"]},"annotations":{},"examples":[{"description":"Get keyword recommendations for \"fitness\"","input":{"seed_keyword":"fitness","app_id":"1611434405","country":"us"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"recommendations":{"type":"array","description":"Recommended keywords with popularity","items":{"type":"object","properties":{"name":{"type":"string","description":"Recommended keyword"},"popularity":{"type":"number","description":"Apple Ads popularity score (0-100)"}}}},"seed_keyword":{"type":"string","description":"Original seed keyword used"},"app_id":{"type":"string","description":"App ID used for context"},"country":{"type":"string","description":"Country code used"},"count":{"type":"number","description":"Number of recommendations returned"}}},"returns":"Related keyword suggestions from Apple Ads with popularity scores"},{"name":"audit_metadata","displayName":"Audit Metadata","description":"Audit all app metadata across locales via App Store Connect. Checks for missing or underutilized fields and generates warnings. Identifies empty keywords, keywords under 80 chars, missing subtitles, and titles over 30 chars. Requires ASC API credentials.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric, e.g. \"1611434405\")"}},"required":["app_id"]},"annotations":{},"examples":[{"description":"Audit metadata for an iOS app","input":{"app_id":"1611434405"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"app":{"type":"object","description":"App identification","properties":{"name":{"type":"string","description":"App name"},"id":{"type":"string","description":"App Store ID"}}},"locales":{"type":"array","description":"Audit results per locale","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code (e.g. en-US)"},"title":{"type":"string","description":"Current title"},"subtitle":{"type":"string","description":"Current subtitle"},"keywords":{"type":"string","description":"Current keywords string"},"keyword_count":{"type":"number","description":"Character count of keywords field"},"keyword_limit":{"type":"number","description":"Maximum keyword chars (100)"},"warnings":{"type":"array","description":"Audit warnings for this locale","items":{"type":"string"}}}}},"summary":{"type":"object","description":"Audit summary","properties":{"total_locales":{"type":"number","description":"Total number of locales"},"locales_with_warnings":{"type":"number","description":"Locales with at least one warning"},"total_keyword_chars_used":{"type":"number","description":"Total keyword chars used across all locales"},"total_keyword_chars_available":{"type":"number","description":"Total keyword chars available across all locales"}}}}},"returns":"Metadata audit with per-locale warnings for empty keywords, short keywords, missing subtitles, and long titles"},{"name":"export_metadata","displayName":"Export Metadata","description":"Full JSON export of all app metadata from App Store Connect. Exports app info, current version, all app info localizations (title, subtitle), and all version localizations (keywords, description, whats new, promotional text). Use for backups before making changes.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric, e.g. \"1611434405\")"}},"required":["app_id"]},"annotations":{},"examples":[{"description":"Export all metadata for an iOS app","input":{"app_id":"1611434405"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"app":{"type":"object","description":"App identification","properties":{"id":{"type":"string","description":"App Store ID"},"name":{"type":"string","description":"App name"},"bundle_id":{"type":"string","description":"Bundle identifier"}}},"current_version":{"type":"object","description":"Current app version info","properties":{"version":{"type":"string","description":"Version string"},"state":{"type":"string","description":"App Store state"}}},"app_info_localizations":{"type":"array","description":"Title and subtitle per locale","items":{"type":"object","properties":{"id":{"type":"string","description":"Localization ID"},"locale":{"type":"string","description":"Locale code"},"title":{"type":"string","description":"App title"},"subtitle":{"type":"string","description":"App subtitle"}}}},"version_localizations":{"type":"array","description":"Keywords, description, etc. per locale","items":{"type":"object","properties":{"id":{"type":"string","description":"Localization ID"},"locale":{"type":"string","description":"Locale code"},"keywords":{"type":"string","description":"Keywords string"},"description":{"type":"string","description":"Full description"},"whats_new":{"type":"string","description":"What's new text"},"promotional_text":{"type":"string","description":"Promotional text"}}}}}},"returns":"Complete metadata export including app info, version, and all localizations"},{"name":"update_metadata","displayName":"Update Metadata","description":"Update app metadata for a specific locale via App Store Connect. Supports title, subtitle, keywords, description, What's New, and promotional text. Defaults to dry-run mode (preview changes without applying). Set dry_run to false to apply changes.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric)"},"locale":{"type":"string","description":"Locale to update (e.g. \"en-US\", \"de-DE\", \"ja\")"},"title":{"type":"string","description":"New app title (max 30 chars)"},"subtitle":{"type":"string","description":"New app subtitle (max 30 chars)"},"keywords":{"type":"string","description":"New keywords string (max 100 chars, comma-separated)"},"description":{"type":"string","description":"New app description"},"whats_new":{"type":"string","description":"New What's New text for the current version"},"promotional_text":{"type":"string","description":"New promotional text (can be updated without a new version)"},"dry_run":{"type":"boolean","default":true,"description":"Preview changes without applying (default: true)"}},"required":["app_id","locale"]},"annotations":{},"examples":[{"description":"Preview keyword update for en-US locale","input":{"app_id":"1611434405","locale":"en-US","keywords":"countdown,timer,widget,clock,event","dry_run":true}},{"description":"Update title and subtitle","input":{"app_id":"1611434405","locale":"en-US","title":"My App","subtitle":"Best app ever","dry_run":false}}],"pricing":"free","outputSchema":{"type":"object","properties":{"updates_applied":{"type":"array","description":"List of changes detected or applied","items":{"type":"object","properties":{"field":{"type":"string","description":"Field that changed"},"old_value":{"type":"string","description":"Previous value"},"new_value":{"type":"string","description":"New value"}}}},"locale":{"type":"string","description":"Locale updated"},"dry_run":{"type":"boolean","description":"Whether this was a dry run"},"total_changes":{"type":"number","description":"Number of changes"}}},"returns":"List of metadata changes with old and new values, applied or previewed in dry-run mode"},{"name":"push_keywords","displayName":"Push Keywords","description":"Push a keyword optimization strategy to multiple locales at once. Diffs your strategy JSON against live App Store data and applies changes. Strategy is an object mapping locale codes to title/subtitle/keywords. Defaults to dry-run mode.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric)"},"strategy":{"type":"object","description":"Localizations map: { [locale]: { title?, subtitle?, keywords? } }. Each locale key maps to the fields to set."},"dry_run":{"type":"boolean","default":true,"description":"Preview changes without applying (default: true)"}},"required":["app_id","strategy"]},"annotations":{},"examples":[{"description":"Push keyword strategy for US and DE locales","input":{"app_id":"1611434405","strategy":{"en-US":{"title":"Countdown Widget","subtitle":"Days until your event","keywords":"countdown,timer,widget,clock,event"},"de-DE":{"title":"Countdown Widget","subtitle":"Tage bis zum Event","keywords":"countdown,timer,widget,uhr,ereignis"}},"dry_run":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"changes":{"type":"array","description":"All changes detected or applied","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code"},"field":{"type":"string","description":"Field name (title, subtitle, or keywords)"},"old_value":{"type":"string","description":"Current value in App Store Connect"},"new_value":{"type":"string","description":"New value from strategy"},"action":{"type":"string","description":"Action type: create, update, or unchanged"}}}},"summary":{"type":"object","description":"Summary of changes","properties":{"created":{"type":"number","description":"Number of new locale fields created"},"updated":{"type":"number","description":"Number of fields updated"},"unchanged":{"type":"number","description":"Number of fields already matching"}}},"dry_run":{"type":"boolean","description":"Whether this was a dry run"}}},"returns":"Diff of all changes with action types (create/update/unchanged) and summary counts"},{"name":"list_reviews","displayName":"List Reviews","description":"Fetch recent iOS App Store reviews for an app. Returns review text, rating, user name, date, version, and vote count. Supports sorting by most recent or most helpful.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"iOS App Store ID (numeric). Falls back to saved ios_app_id credential."},"country":{"type":"string","default":"us","description":"Country code to fetch reviews from"},"num":{"type":"number","default":20,"description":"Number of reviews to return (max 50)"},"sort":{"type":"string","enum":["recent","helpful"],"default":"recent","description":"Sort order: most recent or most helpful"}},"required":["app_id"]},"annotations":{},"examples":[{"description":"Get recent reviews for an app","input":{"app_id":"1611434405","country":"us","num":20,"sort":"recent"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"reviews":{"type":"array","description":"List of reviews","items":{"type":"object","properties":{"id":{"type":"string","description":"Review ID"},"user_name":{"type":"string","description":"Reviewer name"},"rating":{"type":"number","description":"Rating (1-5)"},"title":{"type":"string","description":"Review title"},"text":{"type":"string","description":"Review body text"},"date":{"type":"string","description":"Review date"},"version":{"type":"string","description":"App version reviewed"},"vote_count":{"type":"number","description":"Helpful vote count"}}}},"app_id":{"type":"string","description":"App ID used"},"total":{"type":"number","description":"Number of reviews returned"}}},"returns":"List of app reviews with rating, title, text, user, date, version, and vote count"},{"name":"list_events","displayName":"List Events","description":"List all in-app events for an iOS app via App Store Connect. Returns event details including reference name, badge, priority, purpose, territory schedules, and all localizations. Requires ASC API credentials.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric)"}},"required":["app_id"]},"annotations":{},"examples":[{"description":"List all in-app events","input":{"app_id":"1611434405"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"events":{"type":"array","description":"List of in-app events","items":{"type":"object","properties":{"id":{"type":"string","description":"Event ID"},"reference_name":{"type":"string","description":"Internal reference name"},"badge":{"type":"string","description":"Event badge type"},"priority":{"type":"string","description":"Event priority (HIGH or NORMAL)"},"purpose":{"type":"string","description":"Event purpose"},"deep_link":{"type":"string","description":"Deep link URL"},"state":{"type":"string","description":"Event state (DRAFT, APPROVED, etc.)"},"territory_schedules":{"type":"array","description":"Territory scheduling","items":{"type":"object"}},"localizations":{"type":"array","description":"Event localizations","items":{"type":"object"}}}}},"app_id":{"type":"string","description":"App ID used"},"count":{"type":"number","description":"Number of events"}}},"returns":"All in-app events with their localizations, territory schedules, and state information"},{"name":"create_event","displayName":"Create Event","description":"Create a new in-app event with localizations and territory scheduling via App Store Connect. Supports all badge types (LIVE_EVENT, PREMIERE, CHALLENGE, COMPETITION, NEW_SEASON, MAJOR_UPDATE, SPECIAL_EVENT). Events are created in DRAFT state.","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Your iOS App Store ID (numeric)"},"reference_name":{"type":"string","description":"Internal reference name (max 64 chars)"},"badge":{"type":"string","enum":["LIVE_EVENT","PREMIERE","CHALLENGE","COMPETITION","NEW_SEASON","MAJOR_UPDATE","SPECIAL_EVENT"],"description":"Event badge type displayed on the App Store"},"deep_link":{"type":"string","description":"Deep link URL to open in the app"},"priority":{"type":"string","enum":["HIGH","NORMAL"],"default":"NORMAL","description":"Event priority level"},"purpose":{"type":"string","enum":["APPROPRIATE_FOR_ALL_USERS","ATTRACT_NEW_USERS","KEEP_ACTIVE_USERS_INFORMED","BRING_BACK_LAPSED_USERS"],"description":"Target audience purpose"},"territory_schedules":{"type":"array","description":"Territory scheduling for the event","items":{"type":"object","properties":{"territories":{"type":"array","description":"List of territory codes","items":{"type":"string"}},"publish_start":{"type":"string","description":"Publish start date (ISO 8601)"},"event_start":{"type":"string","description":"Event start date (ISO 8601)"},"event_end":{"type":"string","description":"Event end date (ISO 8601)"}}}},"localizations":{"type":"array","description":"Localizations for the event (at least one required)","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code (e.g. \"en-US\")"},"name":{"type":"string","description":"Event name (max 30 chars)"},"short_description":{"type":"string","description":"Short description (max 50 chars)"},"long_description":{"type":"string","description":"Long description (max 120 chars)"}},"required":["locale","name","short_description","long_description"]}}},"required":["app_id","reference_name","badge","localizations"]},"annotations":{},"examples":[{"description":"Create a new seasonal event","input":{"app_id":"1611434405","reference_name":"Summer Sale 2026","badge":"SPECIAL_EVENT","priority":"HIGH","purpose":"ATTRACT_NEW_USERS","localizations":[{"locale":"en-US","name":"Summer Sale","short_description":"Huge savings this summer!","long_description":"Get up to 50% off all premium features during our annual summer sale event."}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"event_id":{"type":"string","description":"Created event ID"},"reference_name":{"type":"string","description":"Event reference name"},"badge":{"type":"string","description":"Event badge type"},"localizations_created":{"type":"number","description":"Number of localizations created"}}},"returns":"Created event ID, reference name, and count of localizations created"},{"name":"update_event","displayName":"Update Event","description":"Update an existing in-app event's attributes or localizations via App Store Connect. Can update reference name, badge, deep link, priority, purpose, territory schedules, and localizations. Localizations with an ID are patched; without an ID they are created.","inputSchema":{"type":"object","properties":{"event_id":{"type":"string","description":"The event ID to update"},"reference_name":{"type":"string","description":"New reference name"},"badge":{"type":"string","enum":["LIVE_EVENT","PREMIERE","CHALLENGE","COMPETITION","NEW_SEASON","MAJOR_UPDATE","SPECIAL_EVENT"],"description":"New badge type"},"deep_link":{"type":"string","description":"New deep link URL"},"priority":{"type":"string","enum":["HIGH","NORMAL"],"description":"New priority level"},"purpose":{"type":"string","enum":["APPROPRIATE_FOR_ALL_USERS","ATTRACT_NEW_USERS","KEEP_ACTIVE_USERS_INFORMED","BRING_BACK_LAPSED_USERS"],"description":"New target audience purpose"},"territory_schedules":{"type":"array","description":"New territory scheduling","items":{"type":"object","properties":{"territories":{"type":"array","description":"Territory codes","items":{"type":"string"}},"publish_start":{"type":"string","description":"Publish start date (ISO 8601)"},"event_start":{"type":"string","description":"Event start date (ISO 8601)"},"event_end":{"type":"string","description":"Event end date (ISO 8601)"}}}},"localizations":{"type":"array","description":"Localizations to update or create. Include id to patch existing, omit id to create new.","items":{"type":"object","properties":{"id":{"type":"string","description":"Existing localization ID (omit to create new)"},"locale":{"type":"string","description":"Locale code"},"name":{"type":"string","description":"Event name (max 30 chars)"},"short_description":{"type":"string","description":"Short description (max 50 chars)"},"long_description":{"type":"string","description":"Long description (max 120 chars)"}},"required":["locale"]}}},"required":["event_id"]},"annotations":{},"examples":[{"description":"Update event badge and add a localization","input":{"event_id":"evt-123","badge":"MAJOR_UPDATE","localizations":[{"locale":"de-DE","name":"Sommer-Angebot","short_description":"Tolle Angebote!","long_description":"Erhalte bis zu 50% Rabatt auf alle Premium-Funktionen."}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"event_id":{"type":"string","description":"Updated event ID"},"updates_applied":{"type":"array","description":"List of updates applied","items":{"type":"string"}}}},"returns":"Event ID and list of all updates applied (attributes and localizations)"},{"name":"delete_event","displayName":"Delete Event","description":"Delete a draft in-app event from App Store Connect. Only events in DRAFT state can be deleted. Published or approved events cannot be deleted via this endpoint.","inputSchema":{"type":"object","properties":{"event_id":{"type":"string","description":"The event ID to delete (must be in DRAFT state)"}},"required":["event_id"]},"annotations":{},"examples":[{"description":"Delete a draft event","input":{"event_id":"evt-123"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"event_id":{"type":"string","description":"Deleted event ID"},"deleted":{"type":"boolean","description":"Whether the event was successfully deleted"}}},"returns":"Confirmation of event deletion with event ID"}],"icon":"/icons/appstore-aso.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-05-01","changes":["Multi-account support: when you have credentials saved for two App Store Connect accounts, switching the default with credential_default now updates all three credentials together so the JWT signs cleanly. No more 401s from cross-account pairing."]},{"version":"0.04","date":"2026-05-08","changes":["Auth errors no longer lock the service: invalid credentials now surface immediately on every call rather than tripping a temporary outage after a few failed attempts."]}],"premadePrompt":"Analyze the keyword opportunities for my iOS app [app name or ID] and give me a prioritized list of keywords to target, along with an audit of my current listing and suggestions to improve it.","requirements":[{"name":"ios_app_id","type":"credential","displayName":"iOS App Bundle ID","description":"The bundle identifier for your iOS app (e.g. com.myapp.fitness)"},{"name":"asc_issuer_id","type":"credential","bundle":"asc_account","displayName":"App Store Connect Issuer ID","description":"The Issuer ID from your App Store Connect API key","acquireUrl":"https://appstoreconnect.apple.com/access/integrations/api","setupGuide":"The Issuer ID identifies your App Store Connect organization. It is the same for all API keys on your account.\n\n1. Go to https://appstoreconnect.apple.com and sign in\n2. Click \"Users and Access\" in the sidebar\n3. Click the \"Integrations\" tab, then \"App Store Connect API\"\n4. Click \"Team Keys\"\n5. The Issuer ID is displayed at the top of the page, above the keys table\n6. It is a UUID like 57246542-96fe-1a63-e053-0824d011072a\n\nIf you have not set up API access before, click \"Request Access\" first (Account Holder or Admin role required).\n\nIf you also need asc_key_id and asc_private_key, generate a new API key on the same page — see those credential guides for details."},{"name":"asc_key_id","type":"credential","bundle":"asc_account","displayName":"App Store Connect Key ID","description":"The Key ID from your App Store Connect API key","acquireUrl":"https://appstoreconnect.apple.com/access/integrations/api","setupGuide":"The Key ID is a short alphanumeric identifier for your specific API key (e.g. 2X9R4HXF34).\n\n1. Go to https://appstoreconnect.apple.com/access/integrations/api\n2. Click \"Team Keys\"\n3. If you already have a key, the Key ID is shown in the \"KEY ID\" column\n4. If you need a new key: click \"Generate API Key\" (or the \"+\" button)\n5. Name it (e.g. \"ToolRouter\") and select the \"App Manager\" role\n6. Click \"Generate\" — the Key ID appears in the table\n\nYou will also need the Issuer ID (shown at the top of the page) and the private key (.p8 file download)."},{"name":"asc_private_key","type":"secret","bundle":"asc_account","displayName":"App Store Connect Private Key","description":"The private key (PEM contents) from your App Store Connect API key","acquireUrl":"https://appstoreconnect.apple.com/access/integrations/api","setupGuide":"The private key is a .p8 file you download when generating an API key. You can only download it ONCE.\n\n1. Go to https://appstoreconnect.apple.com/access/integrations/api\n2. Click \"Team Keys\"\n3. Click \"Generate API Key\" (or \"+\" if keys exist)\n4. Name it (e.g. \"ToolRouter\") and select the \"App Manager\" role\n5. Click \"Generate\"\n6. Click \"Download\" next to the new key — this downloads a .p8 file\n7. IMPORTANT: You can only download this file ONCE. Save it securely.\n\nOpen the .p8 file in a text editor. Paste the ENTIRE contents including the\n-----BEGIN PRIVATE KEY----- and -----END PRIVATE KEY----- lines.\n\nIf you lost the .p8 file, you must revoke the key and generate a new one."},{"name":"apple_ads_cookie","type":"secret","displayName":"Apple Ads Session Cookie","description":"Session cookie from app-ads.apple.com for keyword popularity data","acquireUrl":"https://app-ads.apple.com","setupGuide":"This is a browser session cookie used for keyword popularity data. It expires periodically and must be re-extracted.\n\nPrerequisites: You need a free Apple Search Ads account (sign up at https://searchads.apple.com — no ad spend required).\n\n1. Go to https://app-ads.apple.com in Chrome and sign in\n2. Open Developer Tools (Cmd+Option+I on Mac, F12 on Windows)\n3. Go to the \"Network\" tab\n4. Perform any action on the page (e.g. click around) to trigger a network request\n5. Click on any request to app-ads.apple.com\n6. In \"Request Headers\", find the \"Cookie\" header\n7. Copy the ENTIRE Cookie header value\n\nThe value looks like: geo=US; dslang=US-EN; XSRF-TOKEN-CM=...; myacinfo=...\n\nNote: This cookie expires after a few hours to a day. You will need to re-extract it when it expires."}],"credentials":[{"name":"ios_app_id","type":"credential","displayName":"iOS App Bundle ID","description":"The bundle identifier for your iOS app (e.g. com.myapp.fitness)"},{"name":"asc_issuer_id","type":"credential","bundle":"asc_account","displayName":"App Store Connect Issuer ID","description":"The Issuer ID from your App Store Connect API key","acquireUrl":"https://appstoreconnect.apple.com/access/integrations/api","setupGuide":"The Issuer ID identifies your App Store Connect organization. It is the same for all API keys on your account.\n\n1. Go to https://appstoreconnect.apple.com and sign in\n2. Click \"Users and Access\" in the sidebar\n3. Click the \"Integrations\" tab, then \"App Store Connect API\"\n4. Click \"Team Keys\"\n5. The Issuer ID is displayed at the top of the page, above the keys table\n6. It is a UUID like 57246542-96fe-1a63-e053-0824d011072a\n\nIf you have not set up API access before, click \"Request Access\" first (Account Holder or Admin role required).\n\nIf you also need asc_key_id and asc_private_key, generate a new API key on the same page — see those credential guides for details."},{"name":"asc_key_id","type":"credential","bundle":"asc_account","displayName":"App Store Connect Key ID","description":"The Key ID from your App Store Connect API key","acquireUrl":"https://appstoreconnect.apple.com/access/integrations/api","setupGuide":"The Key ID is a short alphanumeric identifier for your specific API key (e.g. 2X9R4HXF34).\n\n1. Go to https://appstoreconnect.apple.com/access/integrations/api\n2. Click \"Team Keys\"\n3. If you already have a key, the Key ID is shown in the \"KEY ID\" column\n4. If you need a new key: click \"Generate API Key\" (or the \"+\" button)\n5. Name it (e.g. \"ToolRouter\") and select the \"App Manager\" role\n6. Click \"Generate\" — the Key ID appears in the table\n\nYou will also need the Issuer ID (shown at the top of the page) and the private key (.p8 file download)."},{"name":"asc_private_key","type":"secret","bundle":"asc_account","displayName":"App Store Connect Private Key","description":"The private key (PEM contents) from your App Store Connect API key","acquireUrl":"https://appstoreconnect.apple.com/access/integrations/api","setupGuide":"The private key is a .p8 file you download when generating an API key. You can only download it ONCE.\n\n1. Go to https://appstoreconnect.apple.com/access/integrations/api\n2. Click \"Team Keys\"\n3. Click \"Generate API Key\" (or \"+\" if keys exist)\n4. Name it (e.g. \"ToolRouter\") and select the \"App Manager\" role\n5. Click \"Generate\"\n6. Click \"Download\" next to the new key — this downloads a .p8 file\n7. IMPORTANT: You can only download this file ONCE. Save it securely.\n\nOpen the .p8 file in a text editor. Paste the ENTIRE contents including the\n-----BEGIN PRIVATE KEY----- and -----END PRIVATE KEY----- lines.\n\nIf you lost the .p8 file, you must revoke the key and generate a new one."},{"name":"apple_ads_cookie","type":"secret","displayName":"Apple Ads Session Cookie","description":"Session cookie from app-ads.apple.com for keyword popularity data","acquireUrl":"https://app-ads.apple.com","setupGuide":"This is a browser session cookie used for keyword popularity data. It expires periodically and must be re-extracted.\n\nPrerequisites: You need a free Apple Search Ads account (sign up at https://searchads.apple.com — no ad spend required).\n\n1. Go to https://app-ads.apple.com in Chrome and sign in\n2. Open Developer Tools (Cmd+Option+I on Mac, F12 on Windows)\n3. Go to the \"Network\" tab\n4. Perform any action on the page (e.g. click around) to trigger a network request\n5. Click on any request to app-ads.apple.com\n6. In \"Request Headers\", find the \"Cookie\" header\n7. Copy the ENTIRE Cookie header value\n\nThe value looks like: geo=US; dslang=US-EN; XSRF-TOKEN-CM=...; myacinfo=...\n\nNote: This cookie expires after a few hours to a day. You will need to re-extract it when it expires."}]},{"name":"seo","displayName":"SEO Analysis","subtitle":"Audit pages for ranking issues","about":"**SEO Analysis** audits your web pages and site for ranking issues — from meta tags and headings to Core Web Vitals, structured data, mobile usability, and international SEO. Every check returns a 0–100 score with prioritized issues so you know exactly what to fix first.\n\nIt covers the full modern SEO stack: technical health, content quality, E-E-A-T signals, author authority, canonicalization, and hreflang. Whether you're auditing one page or crawling a hundred, you get actionable findings grounded in how search engines actually evaluate pages today.\n\n### What you can do\n- Full on-page audit with a scored report and prioritized issue list\n- Check meta titles, descriptions, and Open Graph tags\n- Detect and validate JSON-LD structured data\n- Audit heading hierarchy, content quality, and readability\n- Check Core Web Vitals on mobile and desktop\n- Audit images for alt text gaps and format issues\n- Inspect internal and external links for broken or orphaned pages\n- Crawl up to 100 pages for a site-wide audit\n- Benchmark pages against a competitor\n- Check render parity, mobile usability, author signals, entity graph, canonicals, freshness, and hreflang\n\n### Who it's for\nSEO professionals, content teams, and developers who want AI-driven audits without a monthly platform subscription. Anyone who needs to diagnose ranking issues fast, whether for a single landing page or an entire domain.\n\n### How to use it\n1. Start with **check_meta** for a quick title, description, and OG tag review\n2. Run **analyze_page** for a full scored audit with prioritized issues\n3. Use **detect_schema** to validate structured data, **audit_technical** for robots and sitemap health\n4. Use **crawl_site** to audit the whole domain — set max_pages to 10 for a quick pass or 100 for full coverage\n5. Use **compare_pages** to benchmark against a competitor URL\n\n### Getting started\nSave your primary domain as a credential so you don't need to type it every time — then start with check_meta on your homepage.","version":"0.06","categories":["search","marketing","analytics"],"currency":"USD","skills":[{"name":"analyze_page","displayName":"Analyze Page","description":"Full on-page SEO analysis including title, meta, headings, images, links, content length, and structured data presence. Returns a score out of 100 with prioritized issues.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to analyze"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Analyze a homepage","input":{"url":"https://example.com"}},{"description":"Analyze a blog post","input":{"url":"https://example.com/blog/my-post"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was analyzed"},"score":{"type":"number","description":"SEO score from 0-100"},"title":{"type":"object","description":"Title tag analysis with value, length, and status (good/missing/too_short/too_long)"},"meta_description":{"type":"object","description":"Meta description analysis with value, length, and status"},"canonical":{"type":"string","description":"Canonical URL (or null)"},"headings":{"type":"object","description":"Heading counts (h1_count, h2_count, h3_count) and h1_values array"},"images":{"type":"object","description":"Image audit: total, missing_alt, missing_dimensions"},"links":{"type":"object","description":"Link counts: internal, external, nofollow"},"word_count":{"type":"number","description":"Total word count of page body"},"has_schema":{"type":"boolean","description":"Whether JSON-LD structured data is present"},"open_graph":{"type":"object","description":"Open Graph tags: title, description, image"},"issues":{"type":"array","description":"Prioritized issues, each with severity (critical/high/warning/info) and message"},"knowledge_recommendations":{"type":"array","items":{"type":"string"},"description":"Knowledge-base recommendations (when available)"}}},"returns":"SEO score (0-100), meta tag status, heading counts, image/link audit, and prioritized issues list"},{"name":"detect_schema","displayName":"Detect Schema","description":"Find and validate all structured data (JSON-LD, Microdata, RDFa) on a page. Checks for common errors and provides recommendations for missing schema types.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to scan for structured data"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":90,"mode":"cpu"}},"examples":[{"description":"Check schema markup on a product page","input":{"url":"https://example.com/product/shoes"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was scanned"},"schemas_found":{"type":"number","description":"Total number of schemas detected"},"schemas":{"type":"array","description":"Detected schemas, each with type, format (json-ld/microdata/rdfa), valid boolean, issues array, and properties list"},"recommendations":{"type":"array","items":{"type":"string"},"description":"Actionable recommendations for improving structured data"}}},"returns":"List of schemas found with type, format, validation status, issues, and recommendations"},{"name":"check_meta","displayName":"Check Meta Tags","description":"Quick audit of all meta tags on a page: title, description, canonical, robots, Open Graph, Twitter Card, viewport, and other SEO-relevant tags.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to check meta tags for"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"cpu"}},"examples":[{"description":"Check meta tags on a landing page","input":{"url":"https://example.com/pricing"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was checked"},"title":{"type":"string","description":"Page title (or null)"},"meta_description":{"type":"string","description":"Meta description content (or null)"},"canonical":{"type":"string","description":"Canonical URL (or null)"},"robots":{"type":"string","description":"Robots meta directive (or null)"},"open_graph":{"type":"object","description":"Open Graph tags: og:title, og:description, og:image, og:url, og:type, og:site_name"},"twitter_card":{"type":"object","description":"Twitter Card tags: twitter:card, twitter:title, twitter:description, twitter:image, twitter:site"},"other_meta":{"type":"object","description":"Other meta tags like viewport, charset, author, generator, keywords"},"issues":{"type":"array","description":"Issues found, each with severity (critical/high/warning/info) and message"}}},"returns":"All meta tags found (title, description, OG, Twitter, canonical, robots) with issues"},{"name":"audit_headings","displayName":"Audit Headings","description":"Analyze the heading hierarchy (H1-H6) of a page for SEO best practices. Checks for missing H1, skipped levels, duplicates, empty headings, and content quality.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit heading structure"}},"required":["url"]},"annotations":{},"examples":[{"description":"Audit headings on a content page","input":{"url":"https://example.com/blog/guide"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"score":{"type":"number","description":"Heading structure score from 0-100"},"heading_count":{"type":"object","description":"Count per level (h1, h2, h3, h4, h5, h6) plus total"},"hierarchy":{"type":"array","description":"Ordered list of headings, each with level, text, and character_count"},"issues":{"type":"array","description":"Issues found, each with severity (critical/high/warning/info) and message"}}},"returns":"Heading hierarchy with scores, level counts, and issues like skipped levels or duplicates"},{"name":"analyze_content","displayName":"Analyze Content Quality","description":"Comprehensive content quality analysis with readability scoring (Flesch-Kincaid, Gunning Fog, Coleman-Liau, SMOG, ARI), E-E-A-T signal detection, keyword density analysis, and content depth scoring.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to analyze content quality"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":10,"timeoutSeconds":30,"mode":"cpu"}},"examples":[{"description":"Analyze blog post content quality","input":{"url":"https://example.com/blog/guide"}}],"pricing":"free","returns":"Content quality score (0-100), readability metrics (6 algorithms), E-E-A-T signals, keyword density analysis, and content depth assessment"},{"name":"audit_technical","displayName":"Technical SEO Audit","description":"Technical SEO audit covering robots.txt validation, sitemap.xml analysis, redirect chain detection, canonical tag verification, hreflang validation, and security headers (HSTS, CSP, X-Frame-Options).","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit technical SEO"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":45,"mode":"cpu"}},"examples":[{"description":"Run technical SEO audit on a site","input":{"url":"https://example.com"}}],"pricing":"free","returns":"Technical SEO score (0-100), robots.txt status, sitemap validation, redirect chain, canonical check, hreflang issues, and security headers audit"},{"name":"check_vitals","displayName":"Check Core Web Vitals","description":"Core Web Vitals analysis via PageSpeed Insights API. Returns LCP, CLS, FCP, TBT, Speed Index, TTFB, Lighthouse category scores, and CrUX real-user field data when available.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to check Core Web Vitals"},"strategy":{"type":"string","enum":["mobile","desktop"],"description":"Device strategy (default: mobile)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"cpu"}},"examples":[{"description":"Check Core Web Vitals for a page","input":{"url":"https://example.com"}}],"pricing":"free","returns":"Core Web Vitals metrics (LCP, CLS, FCP, TBT, Speed Index), Lighthouse scores, CrUX field data, and traffic-light ratings per metric"},{"name":"crawl_site","displayName":"Crawl & Audit Site","description":"Crawl a website (up to 100 pages) with per-page SEO extraction and site-wide issue summary. Detects missing titles, thin content, broken links, duplicate meta, and missing schema across the entire site.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The starting URL to crawl"},"max_pages":{"type":"number","description":"Maximum pages to crawl (default: 20, max: 100)"},"timeout_ms":{"type":"number","description":"Per-request timeout in ms (default: 10000)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Crawl and audit a small site","input":{"url":"https://example.com","max_pages":10}}],"pricing":"free","returns":"Site-wide SEO health score, per-page data (title, meta, headings, images, links, word count), and aggregated issue summary"},{"name":"analyze_links","displayName":"Analyze Link Structure","description":"Internal link graph analysis with link depth calculation, orphan page detection, anchor text distribution, external link audit, and broken link checking via HEAD requests.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to analyze link structure"},"max_pages":{"type":"number","description":"Maximum pages to crawl for link analysis (default: 30, max: 50)"},"check_broken":{"type":"boolean","description":"Whether to check for broken links via HEAD requests (default: true)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Analyze internal link structure","input":{"url":"https://example.com"}}],"pricing":"free","returns":"Link structure score (0-100), link depth map, orphan pages, most/least linked pages, anchor text distribution, and broken links"},{"name":"audit_images","displayName":"Audit Images","description":"Image SEO audit checking alt text, file sizes, dimensions, lazy loading, responsive images (srcset), and modern format usage (WebP/AVIF). Includes per-image analysis and aggregate statistics.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit images"},"check_sizes":{"type":"boolean","description":"Whether to HEAD-request images to check file sizes (default: true)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":45,"mode":"cpu"}},"examples":[{"description":"Audit images on a product page","input":{"url":"https://example.com/products/shoes"}}],"pricing":"free","returns":"Image SEO score (0-100), per-image analysis (alt, dimensions, size, format, lazy loading), and aggregate statistics"},{"name":"extract_keywords","displayName":"Extract Keywords","description":"TF-IDF keyword extraction from page content with density analysis by position (title, H1, meta description, first paragraph, URL). Includes n-gram analysis for multi-word phrases.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to extract keywords from"},"max_keywords":{"type":"number","description":"Maximum keywords to return (default: 20, max: 50)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":10,"timeoutSeconds":30,"mode":"cpu"}},"examples":[{"description":"Extract keywords from a blog post","input":{"url":"https://example.com/blog/seo-guide"}}],"pricing":"free","returns":"Top keywords with TF-IDF scores, density percentages, position prominence (title/H1/meta/paragraph), and n-gram phrases"},{"name":"compare_pages","displayName":"Compare Pages","description":"Side-by-side SEO comparison of two URLs across all metrics: content length, readability, meta tags, schema, headings, response time, and keyword overlap. Determines winner per category.","inputSchema":{"type":"object","properties":{"url_a":{"type":"string","description":"First URL to compare"},"url_b":{"type":"string","description":"Second URL to compare"}},"required":["url_a","url_b"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":45,"mode":"cpu"}},"examples":[{"description":"Compare two competing pages","input":{"url_a":"https://example.com/page","url_b":"https://competitor.com/page"}}],"pricing":"free","returns":"Per-category comparison with winner designation, metric values for both pages, and overall winner summary"},{"name":"check_render_parity","displayName":"Check Render Parity","description":"Compare raw HTML vs JavaScript-rendered DOM to find content that only appears after JS runs. Critical for SPAs because Googlebot and AI crawlers may index the empty shell and miss the real content.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to test for JS vs raw-HTML parity"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":40,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Check render parity on a React/Vue SPA","input":{"url":"https://example.com"}},{"description":"Check render parity on a documentation site","input":{"url":"https://example.com/docs/getting-started"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was checked"},"visible_without_js":{"type":"boolean","description":"True when crawlers see the same core content without running JavaScript"},"parity_score":{"type":"number","description":"Parity score 0-100 (100 = identical raw and rendered content)"},"js_only_content_count":{"type":"number","description":"Number of words only present after JavaScript runs"},"raw_signal":{"type":"object","description":"Counts and key values extracted from the raw HTML response (no JS)"},"rendered_signal":{"type":"object","description":"Counts and key values from the Playwright-rendered DOM"},"critical_missing":{"type":"array","description":"Specific fields missing without JS (title, H1, schema, links, body content) with severity"}}},"returns":"Parity score (0-100), whether page is crawlable without JS, counts of JS-only words/headings/links/schema, and list of critical gaps"},{"name":"audit_mobile","displayName":"Audit Mobile UX","description":"Mobile-first audit on an iPhone 15 Pro viewport. Checks viewport meta tag, horizontal scroll, tap target size and spacing, body font size, interstitial popups, and responsive image usage (srcset).","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit on a mobile viewport"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":90,"mode":"cpu"}},"examples":[{"description":"Audit mobile UX on an e-commerce product page","input":{"url":"https://example.com/products/shoes"}},{"description":"Audit mobile UX on a landing page","input":{"url":"https://example.com/pricing"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"score":{"type":"number","description":"Mobile UX score 0-100"},"viewport_meta":{"type":"string","description":"Content of the <meta name=\"viewport\"> tag (or null)"},"has_horizontal_scroll":{"type":"boolean","description":"Whether the page overflows the mobile viewport width"},"body_font_size":{"type":"number","description":"Computed body font size in pixels"},"tap_targets_total":{"type":"number","description":"Number of interactive elements on the page"},"small_tap_target_count":{"type":"number","description":"Number of tap targets below 48x48px"},"small_tap_targets":{"type":"array","description":"Sample of tap targets below minimum size with selector, text, and dimensions"},"close_tap_targets":{"type":"number","description":"Number of adjacent tap target pairs with less than 8px spacing"},"interstitials":{"type":"array","description":"Fixed overlays covering a significant portion of the viewport"},"issues":{"type":"array","description":"Issues found with severity, category, and message"}}},"returns":"Mobile UX score, viewport meta status, horizontal scroll flag, font size, tap target audit, interstitial detection, and responsive image usage"},{"name":"audit_author","displayName":"Audit Author Markup","description":"Verify author E-E-A-T signals: byline presence, Person JSON-LD, sameAs links to LinkedIn/Twitter/Wikipedia, credentials, jobTitle, affiliation, and bio page URL. Flags articles that rely on meta tags or visible bylines without proper schema.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the article or page to audit for author markup"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":10,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Audit author markup on a blog post","input":{"url":"https://example.com/blog/seo-guide"}},{"description":"Audit author markup on a news article","input":{"url":"https://example.com/news/article-slug"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"author_detected":{"type":"boolean","description":"Whether any author information was found"},"schema_complete":{"type":"boolean","description":"True when every author is in Person JSON-LD with name, url, jobTitle, and sameAs"},"authors":{"type":"array","description":"Detected authors with name, url, jobTitle, affiliation, credentials, sameAs, and source (schema/byline/meta)"},"missing_fields":{"type":"array","description":"Schema fields missing across detected authors"},"recommendations":{"type":"array","description":"Actionable steps to improve author E-E-A-T signals"},"score":{"type":"number","description":"Author-markup score 0-100"}}},"returns":"Author detection flag, schema completeness, detected authors with all fields, missing fields, and E-E-A-T recommendations"},{"name":"check_entity_graph","displayName":"Check Entity Graph","description":"Map a brand or organization onto the Wikidata + Wikipedia knowledge graph. Finds Q-ID and Wikipedia article, then checks whether the homepage Organization schema links back via sameAs to both plus major social platforms.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Name of the brand, organization, or company to look up"},"homepage_url":{"type":"string","description":"Optional homepage URL to scan for Organization JSON-LD (defaults to https://<domain>)"}},"required":["entity_name"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":45,"mode":"io"}},"examples":[{"description":"Check Microsoft entity graph alignment","input":{"entity_name":"Microsoft","homepage_url":"https://www.microsoft.com"}},{"description":"Check a niche SaaS brand on Wikidata","input":{"entity_name":"Stripe"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Entity name that was searched"},"wikidata_qid":{"type":"string","description":"Wikidata Q-ID if matched, else null"},"wikidata_url":{"type":"string","description":"Canonical Wikidata concept URL"},"wikidata_label":{"type":"string","description":"Primary label returned from Wikidata"},"wikidata_description":{"type":"string","description":"Short description from Wikidata"},"wikipedia_url":{"type":"string","description":"English Wikipedia article URL if found"},"wikipedia_extract":{"type":"string","description":"First ~500 chars of the Wikipedia article extract"},"organization_schema_present":{"type":"boolean","description":"Whether the homepage has Organization JSON-LD"},"organization_schema_sameAs":{"type":"array","description":"sameAs URLs from the homepage Organization schema"},"sameAs_missing":{"type":"array","description":"Knowledge-graph and social links that should be added to sameAs"},"sameAs_present":{"type":"array","description":"Knowledge-graph and social links already in sameAs"},"authority_score":{"type":"number","description":"Entity authority score 0-100 combining Wikidata, Wikipedia, schema, and social sameAs"},"recommendations":{"type":"array","description":"Actions to strengthen knowledge-graph alignment"}}},"returns":"Wikidata Q-ID, Wikipedia URL, Organization schema presence, sameAs audit, authority score, and alignment recommendations"},{"name":"audit_canonicals","displayName":"Audit Canonicals","description":"Crawl up to 50 pages and audit <link rel=\"canonical\"> on each. Flags missing, relative, cross-domain, and non-self-referencing canonicals, plus canonical chains (A→B→C) and canonicals pointing to 4xx pages.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Starting URL to crawl — all internal links will be followed"},"max_pages":{"type":"number","description":"Maximum pages to crawl (default: 50, max: 50)"},"timeout_ms":{"type":"number","description":"Per-request timeout in ms (default: 10000)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Audit canonicals across a site","input":{"url":"https://example.com","max_pages":25}},{"description":"Audit canonicals on a blog section","input":{"url":"https://example.com/blog"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"start_url":{"type":"string","description":"URL the crawl started from"},"pages_crawled":{"type":"number","description":"Total pages successfully crawled"},"pages_with_issues":{"type":"number","description":"Number of unique pages with at least one canonical issue"},"issues":{"type":"array","description":"Per-page canonical issues with url, canonical value, issue_type, severity, and description"},"issues_by_type":{"type":"object","description":"Count of issues grouped by issue_type"},"errors":{"type":"array","description":"Pages that failed to fetch during the crawl"}}},"returns":"Crawled page count, total canonical issues by type, and a table listing every problematic URL with the specific issue"},{"name":"audit_freshness","displayName":"Audit Content Freshness","description":"Crawl up to 100 pages and extract publication/modification dates from JSON-LD, article:modified_time meta, <time> tags, and visible \"Last updated\" text. Surfaces stale content, median site age, and the oldest pages.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Starting URL to crawl for a site-wide freshness report"},"max_pages":{"type":"number","description":"Maximum pages to crawl (default: 50, max: 100)"},"stale_threshold_days":{"type":"number","description":"Pages older than this many days are flagged as stale (default: 365)"},"timeout_ms":{"type":"number","description":"Per-request timeout in ms (default: 10000)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":240,"mode":"io"}},"examples":[{"description":"Find stale content across a blog","input":{"url":"https://example.com/blog","max_pages":50}},{"description":"Find pages older than 2 years","input":{"url":"https://example.com","stale_threshold_days":730}}],"pricing":"free","outputSchema":{"type":"object","properties":{"start_url":{"type":"string","description":"URL the crawl started from"},"total_pages":{"type":"number","description":"Total pages crawled"},"dated_pages":{"type":"number","description":"Pages where a publication or modification date was found"},"undated_count":{"type":"number","description":"Pages with no extractable date"},"median_age_days":{"type":"number","description":"Median age in days across dated pages"},"mean_age_days":{"type":"number","description":"Mean age in days across dated pages"},"stale_threshold_days":{"type":"number","description":"Threshold used to mark pages stale"},"stale_count":{"type":"number","description":"Pages older than the stale threshold"},"stale_pages":{"type":"array","description":"All stale pages with url, last_updated, age_days, and source"},"oldest_pages":{"type":"array","description":"Top 10 oldest pages with url, last_updated, age_days, and source"},"age_distribution":{"type":"object","description":"Count buckets: <90 days, 91-365, 366-730, >2 years, undated"},"errors":{"type":"array","description":"Pages that failed to fetch during the crawl"}}},"returns":"Total and dated page counts, median and mean age, stale-page table with age and date source, and an age-distribution histogram"},{"name":"audit_international","displayName":"Audit International / Hreflang","description":"Verify hreflang implementation across language and regional variants. Fetches each alternate, checks for reciprocal hreflang back-links (reciprocity matrix), confirms x-default presence, and validates Content-Language headers match declared hreflang.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL to audit — any single variant of the multilingual page"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Audit hreflang on a multilingual homepage","input":{"url":"https://example.com/en-gb"}},{"description":"Audit hreflang on a localized product page","input":{"url":"https://example.com/fr/produits/chaussures"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"html_lang":{"type":"string","description":"Value of the <html lang=\"...\"> attribute (or null)"},"content_language_header":{"type":"string","description":"HTTP Content-Language response header (or null)"},"hreflang_variants":{"type":"array","description":"Each alternate with hreflang, href, reachable flag, status code, content language header, reciprocates flag, and declared_alternates count"},"reciprocity_issues":{"type":"array","description":"Missing back-links, unreachable alternates, and language mismatches"},"x_default_present":{"type":"boolean","description":"Whether an x-default hreflang is declared"},"recommendations":{"type":"array","description":"Actions to fix hreflang issues"}}},"returns":"Score (0-100), html lang + Content-Language signals, per-variant status with reciprocity flag, and a reciprocity-issue list with recommendations"}],"workflow":["check_meta","analyze_page","detect_schema","audit_headings","analyze_content","audit_technical","check_vitals","audit_images","extract_keywords","analyze_links","crawl_site","compare_pages","check_render_parity","audit_mobile","audit_author","check_entity_graph","audit_canonicals","audit_freshness","audit_international"],"icon":"/icons/seo.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-04","changes":["audit_technical now reports HTML page size in bytes and flags pages exceeding the 2MB Googlebot crawl limit"]},{"version":"0.04","date":"2026-04-15","changes":["Add check_render_parity, audit_mobile, audit_author, check_entity_graph, audit_canonicals, audit_freshness, audit_international skills for 2026 E-E-A-T and mobile-first audits"]},{"version":"0.05","date":"2026-04-16","changes":["More patient navigation timeout so heavy news and commerce pages no longer fail to analyse"]},{"version":"0.06","date":"2026-04-24","changes":["analyze_page, check_meta, audit_headings, detect_schema, and check_render_parity now transparently retry when the browser session drops mid-analysis, fixing sporadic failures on busy sites"]}],"premadePrompt":"Use ToolRouter to audit [company name]'s website at [website URL] for SEO issues. Start with check_meta to review the title and meta description, then run analyze_page for a full SEO score, and give me a prioritized list of the top 5 issues to fix.","brain":{"instructions":"When brain knowledge is available:\n  - Reference the user's target keywords and content strategy\n  - Apply knowledge of site structure and past audit findings\n  - Prioritise issues based on known business goals","produces":["seo_insights"]},"requirements":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}],"credentials":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}]},{"name":"geo","displayName":"Generative Engine Optimization","subtitle":"Get cited by ChatGPT & Google AI","about":"**Generative Engine Optimization** helps you get cited by ChatGPT, Perplexity, Google AI Overviews, and Claude. It combines live AI citation monitoring, content auditing, competitor analysis, and GEO-optimized writing into one complete workflow.\n\nMost sites are invisible to AI search engines — not because their content is bad, but because it's not structured the way AI models extract and quote information. This tool shows you exactly where you stand, who is being cited instead of you, and what to change to start appearing in AI answers.\n\n### What you can do\n- **check_ai_visibility** — run live queries and see if your domain appears in AI citations\n- **check_multi_engine_visibility** — test visibility across Perplexity, OpenAI search, and Gemini in parallel\n- **analyze_citation_sources** — find which domains AI is citing for your target queries\n- **check_brand_sentiment** — see how AI engines describe and frame your brand\n- **audit_content** — full 80-item CORE-EEAT quality audit across 8 dimensions\n- **audit_domain** — 40-item CITE domain authority audit\n- **write_content** and **optimize_content** — produce or improve content built for AI citation\n- **generate_llms_txt** — generate a curated llms.txt index file for your domain\n\n### Who it's for\nSEO professionals and content marketers adapting to AI search, brand teams monitoring how AI describes their company, and founders who want their product pages and blog content to appear in AI answers for high-intent queries.\n\n### How to use it\n1. Start with **check_ai_visibility** — pass your domain and 3-5 queries your audience would ask\n2. Use **analyze_citation_sources** to see who is being cited instead of you\n3. Use **audit_content** on your best pages to find the specific gaps preventing citation\n4. Use **optimize_content** or **write_content** to fix those gaps with GEO techniques\n\n### Getting started\nWorks immediately for most skills — connecting your own API keys for AI search providers gives you higher query limits and avoids shared rate limits.","version":"0.05","categories":["search","marketing","analytics"],"currency":"USD","skills":[{"name":"check_ai_visibility","displayName":"Check AI Visibility","description":"Check if your domain is being cited in live AI search results. Runs up to 10 queries through Perplexity AI and reports which ones cite your domain, your citation position, competing domains taking your slots, and actionable recommendations.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Your domain to check visibility for (e.g. \"example.com\")"},"queries":{"type":"array","items":{"type":"string"},"description":"AI search queries to check (1-10). Use queries your target audience would ask."}},"required":["domain","queries"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Check if your site appears in AI search for target queries","input":{"domain":"example.com","queries":["best project management tools","project management software comparison","how to manage remote teams"]}},{"description":"Check visibility for a single high-value query","input":{"domain":"myshop.com","queries":["best running shoes 2026"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"The domain checked"},"visibility_score":{"type":"number","description":"Percentage of queries where your domain is cited (0-100)"},"rating":{"type":"string","description":"Visibility rating: strong/moderate/weak/not_visible"},"queries_checked":{"type":"number","description":"Number of queries tested"},"queries_cited":{"type":"number","description":"Number of queries where domain appeared in citations"},"cited_queries":{"type":"array","description":"Queries where your domain was cited"},"missed_queries":{"type":"array","description":"Queries where your domain was NOT cited"},"per_query_results":{"type":"array","description":"Per-query breakdown: is_cited, citation_position, top cited domains, AI response snippet"},"top_competing_domains":{"type":"array","description":"Domains being cited instead of yours, ranked by frequency"},"recommendations":{"type":"array","description":"Actionable next steps to improve visibility"}}},"returns":"Visibility score (0-100), per-query citation status, competing domains, and actionable recommendations"},{"name":"analyze_citation_sources","displayName":"Analyze Citation Sources","description":"Find which domains AI engines are actually citing for your target queries. Runs queries through Perplexity AI, aggregates all cited sources, ranks them by frequency, and identifies source gaps — the authoritative domains being cited instead of you.","inputSchema":{"type":"object","properties":{"queries":{"type":"array","items":{"type":"string"},"description":"AI search queries to analyze citation sources for (1-10)"},"domain":{"type":"string","description":"Your domain to show your position in the ranking (optional)"}},"required":["queries"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Find who AI cites for your target keywords and where you stand","input":{"queries":["best CRM for small business","CRM software comparison 2026","how to choose a CRM"],"domain":"mycrm.com"}},{"description":"Discover citation sources for a topic without checking your own position","input":{"queries":["kubernetes autoscaling best practices","how to scale kubernetes pods"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"queries_analyzed":{"type":"number","description":"Number of queries tested"},"unique_domains_found":{"type":"number","description":"Total unique domains cited across all queries"},"top_cited_domains":{"type":"array","description":"Top 20 most-cited domains with rank, citation count, query coverage, and example URLs"},"your_domain":{"type":"object","description":"Your domain position: rank, citation count, queries missing from (null if domain not provided)"},"source_gap_analysis":{"type":"array","description":"Consistently-cited domains you should study — these are your citation competitors"},"per_query_results":{"type":"array","description":"Per-query cited domains and your domain status"}}},"returns":"Ranked citation sources across queries, your domain position, source gap analysis, and per-query breakdown"},{"name":"check_brand_sentiment","displayName":"Check Brand Sentiment","description":"Analyse how AI search engines describe and frame your brand. Runs brand-related queries through Perplexity AI, then analyses the responses for sentiment, key claims, positive/negative signals, and overall brand framing. Auto-generates relevant queries if none provided.","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Brand name to analyse sentiment for"},"website":{"type":"string","description":"Brand website URL (optional — helps with query generation)"},"queries":{"type":"array","items":{"type":"string"},"description":"Specific queries to test (optional — auto-generated if omitted). Up to 8."}},"required":["brand"]},"annotations":{"execution":{"estimatedSeconds":35,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Check how AI describes your brand (auto-generates queries)","input":{"brand":"Notion","website":"notion.so"}},{"description":"Check sentiment for specific queries","input":{"brand":"Linear","queries":["best project management tool for engineers","Linear app review","Linear vs Jira"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Brand analysed"},"overall_sentiment_score":{"type":"number","description":"Sentiment score (0-100, higher = more positive)"},"overall_sentiment":{"type":"string","description":"Overall sentiment: very_positive/positive/neutral/negative/very_negative"},"overall_framing":{"type":"string","description":"How AI typically describes this brand in 1-2 sentences"},"brand_mentioned_count":{"type":"number","description":"Number of responses that mention the brand"},"mention_rate_pct":{"type":"number","description":"Percentage of queries where brand is mentioned"},"positive_signals":{"type":"array","description":"Positive claims made about the brand with frequency"},"negative_signals":{"type":"array","description":"Negative claims or concerns with frequency"},"neutral_signals":{"type":"array","description":"Neutral mentions without strong framing"},"per_query":{"type":"array","description":"Per-query sentiment breakdown with context quotes"},"recommendations":{"type":"array","description":"Actionable steps to improve brand sentiment in AI"}}},"returns":"Brand sentiment score (0-100), positive/negative/neutral signals, overall AI framing, and per-query breakdown with recommendations"},{"name":"check_ai_crawlers","displayName":"Check AI Crawlers","description":"Check if AI crawlers can access your site. Parses robots.txt rules per bot, checks for llms.txt, and reports X-Robots-Tag headers.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to check AI crawler accessibility for"}},"required":["url"]},"annotations":{},"examples":[{"description":"Check AI crawler access for a website","input":{"url":"https://example.com"}},{"description":"Check if blog is accessible to AI bots","input":{"url":"https://example.com/blog"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was checked"},"score":{"type":"number","description":"AI accessibility score from 0-100"},"robots_txt":{"type":"object","description":"robots.txt status: found boolean and length"},"llms_txt":{"type":"object","description":"llms.txt status: found boolean and content preview"},"ai_bots":{"type":"array","description":"Per-bot status: name, owner, status (allowed/blocked/restricted), details"},"summary":{"type":"object","description":"Summary counts: total_bots_checked, allowed, restricted, blocked"},"issues":{"type":"array","description":"Issues found with severity and message"}}},"returns":"AI crawler accessibility score (0-100), per-bot status for 10 AI crawlers, robots.txt and llms.txt analysis, and issues"},{"name":"audit_content","displayName":"Audit Content Quality","description":"Full 80-item CORE-EEAT content quality audit across 8 dimensions (Clarity, Organization, Referenceability, Exclusivity, Experience, Expertise, Authority, Trust). Returns per-item scores and top improvements.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit content quality for"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Audit a blog post for CORE-EEAT quality","input":{"url":"https://example.com/blog/seo-guide"}},{"description":"Audit a landing page content quality","input":{"url":"https://example.com/pricing"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"content_type":{"type":"string","description":"Detected content type (blog_post, how_to_guide, etc.)"},"geo_score":{"type":"number","description":"GEO score (CORE average, 0-100)"},"seo_score":{"type":"number","description":"SEO score (EEAT average, 0-100)"},"total_score":{"type":"number","description":"Combined total score (0-100)"},"weighted_score":{"type":"number","description":"Content-type weighted score (0-100)"},"rating":{"type":"string","description":"Rating: Excellent/Good/Medium/Low/Poor"},"veto_triggered":{"type":"boolean","description":"Whether a veto item was triggered"},"dimensions":{"type":"array","description":"Per-dimension scores with 10 items each (80 items total)"},"top_improvements":{"type":"array","description":"Top 5 prioritized improvements with impact and effort"},"ai_citation_preferences":{"type":"object","description":"Priority CORE-EEAT items per AI engine"}}},"returns":"CORE-EEAT scores across 8 dimensions (80 items), GEO/SEO/total/weighted scores, rating, veto status, top 5 improvements, and AI engine citation preferences"},{"name":"optimize_content","displayName":"Optimize Content for GEO","description":"Analyze content and provide GEO optimization recommendations using 6 techniques: definitions, quotable statements, authority signals, structure, factual density, and FAQ schema. Returns before/after scores with example rewrites.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to optimize for GEO"},"target_queries":{"type":"array","items":{"type":"string"},"description":"Target AI queries this content should appear for (optional)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":25,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Optimize a blog post for AI citations","input":{"url":"https://example.com/blog/cloud-hosting-guide"}},{"description":"Optimize for specific AI queries","input":{"url":"https://example.com/blog/react-performance","target_queries":["how to optimize React performance","React vs Vue performance"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was analyzed"},"geo_score_before":{"type":"number","description":"Estimated current GEO score"},"geo_score_after_estimated":{"type":"number","description":"Estimated score after optimizations"},"optimizations":{"type":"array","description":"Per-technique optimizations with priority, current state, and specific changes"},"schema_recommendation":{"type":"object","description":"Recommended JSON-LD schema with FAQ questions"},"target_queries":{"type":"array","description":"AI queries this content should target"},"engine_specific_tips":{"type":"object","description":"Tips per AI engine (Google AI Overview, ChatGPT, Perplexity, Claude)"}}},"returns":"GEO optimization plan with 6 techniques, before/after scores, example rewrites, schema recommendations, and per-engine tips"},{"name":"analyze_citability","displayName":"Analyze Citability","description":"Score individual passages for AI citation likelihood. Identifies the most and least citable content, categorizes by citation type (definition, statistic, comparison, expert quote), and provides per-engine match scores for Google AI Overviews, ChatGPT, Perplexity, and Claude.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to analyze passage-level citability for"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Analyze citability of a guide","input":{"url":"https://example.com/guides/kubernetes-scaling"}},{"description":"Check citation potential of a comparison page","input":{"url":"https://example.com/redis-vs-postgresql"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was analyzed"},"overall_citability_score":{"type":"number","description":"Overall citability score (0-100)"},"passage_count_analyzed":{"type":"number","description":"Number of passages analyzed"},"highly_citable":{"type":"array","description":"Top 10 most citable passages with scores and types"},"weakly_citable":{"type":"array","description":"Bottom 5 least citable sections with issues and fixes"},"missing_citability_types":{"type":"array","description":"Types of citable content that are missing"},"engine_match":{"type":"object","description":"Per-engine citability scores (Google AI Overview, ChatGPT, Perplexity, Claude)"}}},"returns":"Overall citability score, top 10 citable passages with types, bottom 5 weak sections with fixes, missing content types, and per-engine match scores"},{"name":"generate_schema","displayName":"Generate Schema Markup","description":"Generate optimized JSON-LD schema markup for a page based on its content type. Detects existing schemas, identifies missing ones, and generates complete markup including Article, FAQPage, HowTo, Product, BreadcrumbList, and Organization schemas aligned with GEO best practices.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to generate schema markup for"},"schema_type":{"type":"string","description":"Specific schema type to generate (optional — auto-detected if omitted)","enum":["Article","FAQPage","HowTo","Product","SoftwareApplication","Organization","Review","ItemList"]}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Auto-detect and generate schemas for a blog post","input":{"url":"https://example.com/blog/react-hooks-guide"}},{"description":"Generate FAQPage schema for a help page","input":{"url":"https://example.com/faq","schema_type":"FAQPage"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was analyzed"},"detected_content_type":{"type":"string","description":"Detected content type"},"existing_schemas":{"type":"array","description":"Schema types already present on the page"},"missing_schemas":{"type":"array","description":"Recommended schemas not yet implemented"},"schemas":{"type":"array","description":"Generated schema objects with type, json_ld, and notes"},"implementation_html":{"type":"string","description":"Ready-to-paste HTML script tags with the generated schemas"},"validation_notes":{"type":"array","description":"Notes for maintaining the schemas over time"}}},"returns":"Generated JSON-LD schemas with detected content type, existing vs missing schemas, ready-to-paste HTML, and validation notes"},{"name":"audit_entity","displayName":"Audit Entity Presence","description":"Audit entity presence across knowledge graphs and AI systems. Evaluates 6 signal categories: structured data, knowledge base signals, NAP+E consistency, content-based signals, third-party mention indicators, and AI-specific signals. Returns a phased action plan for building entity recognition.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit entity presence for (homepage recommended)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Audit entity presence for a company homepage","input":{"url":"https://example.com"}},{"description":"Audit entity for a personal brand site","input":{"url":"https://johndoe.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"primary_entity":{"type":"object","description":"Detected primary entity: name, type, description"},"overall_score":{"type":"number","description":"Entity optimization score (0-100)"},"categories":{"type":"array","description":"Per-category scores with detailed findings (6 categories)"},"action_plan":{"type":"object","description":"Phased action plan: foundation, knowledge base, authority, AI optimization"},"schema_recommendations":{"type":"object","description":"Recommended Organization/Person schema with sameAs links"}}},"returns":"Entity optimization score, primary entity detection, 6-category detailed audit, phased action plan, and schema recommendations"},{"name":"audit_domain","displayName":"Audit Domain Authority","description":"Full 40-item CITE domain authority audit across 4 dimensions: Citation, Identity, Trust, and Eminence. Returns per-item scores, weighted CITE score by domain type, veto checks for manipulation signals, and prioritized action plan.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit domain authority for (homepage recommended)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":25,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Audit domain authority for a company site","input":{"url":"https://example.com"}},{"description":"Audit domain authority for a blog","input":{"url":"https://blog.example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was audited"},"domain":{"type":"string","description":"Domain name"},"domain_type":{"type":"string","description":"Detected domain type"},"cite_score":{"type":"number","description":"Weighted CITE score (0-100)"},"rating":{"type":"string","description":"Rating: Excellent/Good/Medium/Low/Poor"},"veto_triggered":{"type":"boolean","description":"Whether a veto item was triggered"},"dimensions":{"type":"array","description":"Per-dimension scores with 10 items each (40 items total)"},"top_improvements":{"type":"array","description":"Top prioritized improvements"}}},"returns":"CITE domain authority score across 4 dimensions (40 items), weighted by domain type, veto status, and prioritized improvements"},{"name":"analyze_serp","displayName":"Analyze SERP & AI Answers","description":"Analyze SERP composition and AI answer patterns for a query. Maps SERP features (AI Overviews, snippets, PAA, knowledge panels), analyzes top results, detects intent, recommends optimal content format, and scores AI citation opportunity per engine.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query to analyze SERP patterns for"},"location":{"type":"string","description":"Target location for search results (default: United States)","default":"United States"},"device":{"type":"string","description":"Device type for results","enum":["desktop","mobile"],"default":"desktop"}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Analyze SERP for a tech query","input":{"query":"best practices for React performance optimization"}},{"description":"Analyze SERP for a product query","input":{"query":"CRM software for small business","location":"United Kingdom","device":"mobile"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Analyzed query"},"intent":{"type":"object","description":"Intent classification with primary, secondary, confidence"},"serp_features":{"type":"object","description":"SERP feature map: AI overview, snippets, PAA, knowledge panel"},"content_recommendations":{"type":"object","description":"Recommended content format, word count, schema types"},"difficulty":{"type":"object","description":"Ranking difficulty score and rationale"},"ai_citation_opportunity":{"type":"object","description":"Per-engine citation likelihood and optimal format"}}},"returns":"SERP feature map, intent classification, top results analysis, content format recommendations, difficulty score, and AI citation opportunity per engine"},{"name":"write_content","displayName":"Write GEO-Optimized Content","description":"Write content optimized for both search engine ranking and AI citation using the CORE-EEAT framework and 6 GEO techniques. Outputs markdown with TL;DR box, comparison tables, FAQ section, proper heading hierarchy, and ready-to-use schema markup.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"The topic to write about"},"content_type":{"type":"string","description":"Type of content to write","enum":["blog_post","how_to_guide","comparison","landing_page","faq_page","alternative","best_of"],"default":"blog_post"},"target_keywords":{"type":"array","items":{"type":"string"},"description":"Target keywords to optimize for (optional)"},"word_count":{"type":"number","description":"Target word count (default: 2000)","default":2000},"tone":{"type":"string","description":"Writing tone","enum":["professional","conversational","technical","casual"],"default":"professional"}},"required":["topic"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Write a GEO-optimized blog post","input":{"topic":"Kubernetes autoscaling best practices","content_type":"how_to_guide"}},{"description":"Write a comparison article with specific keywords","input":{"topic":"Redis vs PostgreSQL for caching","content_type":"comparison","target_keywords":["redis vs postgresql","caching database"],"word_count":3000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"SEO-optimized title"},"meta_description":{"type":"string","description":"Meta description (150-160 chars)"},"content":{"type":"string","description":"Full markdown content"},"word_count":{"type":"number","description":"Actual word count"},"faq_questions":{"type":"array","description":"FAQ questions included"},"schema_suggestion":{"type":"object","description":"Suggested JSON-LD schema"},"geo_features":{"type":"object","description":"Count of GEO elements: definitions, quotable statements, tables, FAQ pairs, citations"}}},"returns":"Complete markdown content with SEO-optimized title, meta description, GEO features (definitions, quotable statements, tables, FAQ), and schema markup"},{"name":"refresh_content","displayName":"Refresh Content for GEO","description":"Analyze existing content for refresh opportunities: outdated statistics, missing GEO elements (definitions, FAQ, tables), stale sources, new subtopics to add, and structural improvements. Returns section-by-section recommendations with estimated impact.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL of the content to refresh"},"target_keywords":{"type":"array","items":{"type":"string"},"description":"Target keywords to optimize for during refresh (optional)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":25,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Analyze a blog post for refresh","input":{"url":"https://example.com/blog/kubernetes-guide"}},{"description":"Refresh with target keywords","input":{"url":"https://example.com/blog/react-hooks","target_keywords":["react hooks 2026","useEffect best practices"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was analyzed"},"freshness_score":{"type":"number","description":"Current freshness score (0-100)"},"urgency":{"type":"string","description":"Refresh urgency: critical/high/medium/low"},"outdated_items":{"type":"array","description":"Outdated statistics, references, and claims with suggested updates"},"missing_geo_elements":{"type":"array","description":"GEO elements to add (definitions, FAQ, tables, etc.)"},"section_recommendations":{"type":"array","description":"Per-section keep/update/remove/add recommendations"},"new_subtopics_to_add":{"type":"array","description":"Emerging topics to add since original publication"},"estimated_improvement":{"type":"object","description":"Expected SEO and GEO score deltas"}}},"returns":"Freshness score, urgency level, outdated items with updates, missing GEO elements, section-by-section recommendations, new subtopics, and estimated improvement"},{"name":"optimize_meta","displayName":"Optimize Meta Tags","description":"Generate optimized title tags, meta descriptions, Open Graph tags, and Twitter Card tags for a page. Provides current vs optimized comparison, 3 alternative strategies (CTR, SEO, GEO), and ready-to-paste HTML implementation.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to optimize meta tags for"},"target_keyword":{"type":"string","description":"Primary keyword to optimize for (optional)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Optimize meta tags for a product page","input":{"url":"https://example.com/products/widget"}},{"description":"Optimize with target keyword","input":{"url":"https://example.com/blog/cloud-hosting","target_keyword":"best cloud hosting 2026"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was analyzed"},"current":{"type":"object","description":"Current meta tags with issues"},"optimized":{"type":"object","description":"Optimized meta tags with rationale"},"alternatives":{"type":"object","description":"3 alternative strategies: CTR, SEO, GEO optimized"},"implementation_html":{"type":"string","description":"Ready-to-paste HTML meta tags"}}},"returns":"Current vs optimized meta tags comparison, 3 alternative strategies (CTR/SEO/GEO), and ready-to-paste HTML"},{"name":"analyze_content_gaps","displayName":"Analyze Content Gaps","description":"Find content gaps your competitors cover but you don't. Compares topics, questions, formats, depth, freshness, and GEO gaps across up to 3 competitor URLs. Returns a prioritized content plan.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Your URL to analyze for content gaps"},"competitor_urls":{"type":"array","items":{"type":"string"},"description":"Competitor URLs to compare against (up to 3)"},"topic":{"type":"string","description":"Topic focus area for gap analysis (optional)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Find content gaps vs competitors","input":{"url":"https://example.com/blog/seo-guide","competitor_urls":["https://competitor1.com/seo","https://competitor2.com/seo-guide"]}},{"description":"Analyze gaps for a topic without competitors","input":{"url":"https://example.com/blog/kubernetes","topic":"Kubernetes autoscaling"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Your URL that was analyzed"},"overall_gap_score":{"type":"number","description":"Content gap score (0-100, higher = more gaps)"},"gaps":{"type":"array","description":"Identified content gaps with type, priority, and suggestions"},"missing_questions":{"type":"array","description":"Questions competitors answer that you don't"},"missing_formats":{"type":"array","description":"Content formats competitors use that you lack"},"content_plan":{"type":"array","description":"Prioritized plan to fill gaps with GEO elements"}}},"returns":"Content gap score, identified gaps by type, missing questions, missing formats, and prioritized content plan with GEO elements"},{"name":"analyze_competitors","displayName":"Analyze Competitor Strategy","description":"Analyze a competitor's SEO and GEO strategy: content depth, GEO readiness (definitions, quotable statements, FAQ schema, tables), technical SEO, authority signals, and weaknesses. Optionally compare against your own page to find differentiation opportunities.","inputSchema":{"type":"object","properties":{"competitor_url":{"type":"string","description":"Competitor URL to analyze"},"your_url":{"type":"string","description":"Your URL for comparison (optional)"}},"required":["competitor_url"]},"annotations":{"execution":{"estimatedSeconds":25,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Analyze a competitor page","input":{"competitor_url":"https://competitor.com/blog/topic-guide"}},{"description":"Compare your page against a competitor","input":{"competitor_url":"https://competitor.com/blog/seo","your_url":"https://example.com/blog/seo"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"competitor_url":{"type":"string","description":"Competitor URL analyzed"},"overall_threat_level":{"type":"string","description":"Threat level: high/medium/low"},"strengths":{"type":"array","description":"Competitor strengths by area"},"weaknesses":{"type":"array","description":"Competitor weaknesses with opportunities"},"geo_analysis":{"type":"object","description":"GEO readiness: definitions, quotable statements, FAQ schema, tables, AI access"},"seo_analysis":{"type":"object","description":"SEO analysis: schema types, internal links, meta tags"},"differentiation_opportunities":{"type":"array","description":"Ways to differentiate from this competitor"},"action_items":{"type":"array","description":"Prioritized actions to outperform competitor"}}},"returns":"Competitor threat level, strengths/weaknesses, GEO/SEO analysis, differentiation opportunities, and prioritized action items"},{"name":"check_multi_engine_visibility","displayName":"Check Multi-Engine Visibility","description":"Check if your domain is cited across multiple AI search engines in parallel — Perplexity, OpenAI search, and Gemini search. Reports per-engine visibility, missed engines, competing domains, and which formats win on each engine.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Your domain to check visibility for (e.g. \"example.com\")"},"queries":{"type":"array","items":{"type":"string"},"description":"AI search queries to run across engines (2-5 recommended)"}},"required":["domain","queries"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Compare visibility across AI engines for target queries","input":{"domain":"example.com","queries":["best CRM for small business","CRM software comparison 2026"]}},{"description":"Cross-engine visibility for a single high-value query","input":{"domain":"mybrand.com","queries":["best running shoes 2026"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain checked"},"engines_queried":{"type":"array","description":"AI engines actually queried"},"queries_checked":{"type":"number","description":"Number of queries tested"},"user_domain_cited_count":{"type":"number","description":"Total cited cells across all engine-query pairs"},"overall_visibility_pct":{"type":"number","description":"Overall visibility percentage (0-100)"},"visibility_by_engine":{"type":"object","description":"Per-engine breakdown of visibility, position, errors"},"top_competing_domains":{"type":"array","description":"Domains taking your slots, ranked by frequency"},"invisible_engines":{"type":"array","description":"Engines where your domain never appeared"},"per_query_per_engine":{"type":"array","description":"Full per-engine, per-query result rows"},"recommendations":{"type":"array","description":"Actionable next steps"}}},"returns":"Per-engine visibility scores, invisible engines, competing domains, and recommendations across all AI search engines"},{"name":"check_citation_consistency","displayName":"Check Citation Consistency","description":"Run the same query through Perplexity multiple times to measure citation stability. Reports how often your domain appears, position variance, which competing domains are stable vs volatile, and an overall consistency score.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The AI search query to test repeatedly"},"domain":{"type":"string","description":"Your domain to track (e.g. \"example.com\")"},"runs":{"type":"integer","description":"Number of repeat runs (2-5, default 3). 500ms gap between runs.","default":3}},"required":["query","domain"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Test if your domain is consistently cited for a key query","input":{"query":"best project management tools","domain":"example.com","runs":3}},{"description":"Run a stability check with the maximum 5 runs","input":{"query":"how to set up Kubernetes autoscaling","domain":"mydocs.com","runs":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Query tested"},"domain":{"type":"string","description":"Domain tracked"},"runs":{"type":"number","description":"Number of repeat runs performed"},"user_appearance_rate":{"type":"number","description":"Percentage of runs your domain appeared (0-100)"},"avg_citation_position":{"type":"number","description":"Average position when cited (lower is better)"},"position_variance":{"type":"number","description":"Variance of citation positions across runs"},"stable_citations":{"type":"array","description":"Domains cited in every run"},"volatile_citations":{"type":"array","description":"Domains cited in some but not all runs"},"consistency_score":{"type":"number","description":"Overall consistency score (0-100)"},"verdict":{"type":"string","description":"highly_consistent / moderately_consistent / volatile"},"per_run":{"type":"array","description":"Per-run citation results"},"recommendations":{"type":"array","description":"Actionable steps to improve consistency"}}},"returns":"Citation consistency score, appearance rate, stable vs volatile citations, and per-run results"},{"name":"generate_llms_txt","displayName":"Generate llms.txt","description":"Generate a curated llms.txt index for a domain, following the Jeremy Howard spec. Discovers the sitemap, fetches the top 30 priority pages, groups them by section (Docs, Blog, Product, Help, Company), and outputs a ready-to-deploy file.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"The domain to generate llms.txt for (e.g. \"example.com\")"}},"required":["domain"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":35,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Generate llms.txt from a documentation site","input":{"domain":"example.com"}},{"description":"Generate llms.txt from a blog domain","input":{"domain":"blog.example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain processed"},"origin":{"type":"string","description":"Origin URL used to fetch sitemap"},"urls_discovered":{"type":"number","description":"URLs found in sitemap discovery"},"urls_included":{"type":"number","description":"URLs included in final llms.txt"},"sections_count":{"type":"number","description":"Number of sections in the file"},"llms_txt_content":{"type":"string","description":"The complete llms.txt file content"},"llms_txt_path":{"type":"string","description":"Local path to the generated file (auto-uploaded)"},"recommendations":{"type":"array","description":"Deployment and maintenance tips"}}},"returns":"Generated llms.txt file content with sectioned page index, plus deployment recommendations"},{"name":"audit_ugc_presence","displayName":"Audit Community Presence","description":"Audit your brand presence across Reddit, Quora, and Hacker News. Counts mentions, classifies sentiment on the top mentions, and compares share-of-voice against competitors. Community mentions are a top citation source for ChatGPT and Perplexity.","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Your brand or product name"},"competitors":{"type":"array","items":{"type":"string"},"description":"Competitor brand names to benchmark against (up to 4)"}},"required":["brand"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":240,"mode":"io"}},"examples":[{"description":"Audit your brand mentions across Reddit, Quora, and HN","input":{"brand":"Linear"}},{"description":"Compare community share of voice with competitors","input":{"brand":"Notion","competitors":["Coda","ClickUp","Airtable"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Brand audited"},"competitors":{"type":"array","description":"Competitors compared against"},"platforms":{"type":"object","description":"Mention counts per platform"},"mention_count":{"type":"number","description":"Total mentions for your brand"},"sentiment_summary":{"type":"object","description":"Sentiment breakdown for top mentions"},"top_mentions":{"type":"array","description":"Top mentions enriched with sentiment"},"competitor_share_of_voice":{"type":"array","description":"Per-brand share of voice"},"recommendations":{"type":"array","description":"Steps to grow community presence"}}},"returns":"Community mention counts by platform, sentiment breakdown, top mentions, and competitor share of voice"},{"name":"audit_entity_graph","displayName":"Audit Entity Graph","description":"Audit your entity authority across knowledge graphs. Checks Wikidata for a matching entity, Wikipedia for an article, and your homepage for Organization schema with sameAs links to authoritative profiles. Returns an authority score and missing-link recommendations.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Brand, organisation, or product name to look up"},"website":{"type":"string","description":"Your homepage URL or domain (optional, used for sameAs audit)"}},"required":["name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":25,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Audit a company entity with its homepage","input":{"name":"Stripe","website":"stripe.com"}},{"description":"Audit a product entity by name only","input":{"name":"Notion AI"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Entity name audited"},"website":{"type":"string","description":"Website hostname checked"},"wikidata_qid":{"type":"string","description":"Matching Wikidata Q-ID, or null if not found"},"wikidata_label":{"type":"string","description":"Wikidata canonical label"},"wikidata_description":{"type":"string","description":"Wikidata short description"},"wikidata_url":{"type":"string","description":"Wikidata entity URL"},"wikipedia_present":{"type":"boolean","description":"Whether a Wikipedia article exists"},"wikipedia_url":{"type":"string","description":"Wikipedia article URL"},"wikipedia_extract":{"type":"string","description":"First-paragraph extract from Wikipedia"},"organization_schema_present":{"type":"boolean","description":"Whether an Organization/Person/Brand schema was found on the homepage"},"same_as_count":{"type":"number","description":"Number of sameAs URLs in the schema"},"same_as_links":{"type":"array","description":"List of sameAs URLs detected"},"sameAs_audit":{"type":"array","description":"Per-authority audit of sameAs coverage"},"authority_score":{"type":"number","description":"Overall entity authority score (0-100)"},"missing_entity_links":{"type":"array","description":"Specific entity links to add"},"recommendations":{"type":"array","description":"Prioritised next steps"}}},"returns":"Entity authority score with Wikidata, Wikipedia, and sameAs audit plus missing-link recommendations"},{"name":"generate_answer_passages","displayName":"Generate Answer Passages","description":"Generate quotable answer passages for a page from target queries. Drafts a 40-60 word definition, a stat-led answer when the page has usable data, and a list-style answer when the topic fits. Each passage is built to be quoted verbatim by AI search engines.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to draft passages for (passages will use this page's content)"},"queries":{"type":"array","items":{"type":"string"},"description":"Target AI search queries to generate passages for (3-5 recommended)"}},"required":["url","queries"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":25,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Draft answer passages for a how-to article","input":{"url":"https://example.com/guides/kubernetes-autoscaling","queries":["how to scale Kubernetes pods","best Kubernetes autoscaling strategy"]}},{"description":"Draft passages for a comparison page","input":{"url":"https://example.com/redis-vs-postgresql","queries":["Redis vs PostgreSQL caching","when to use Redis instead of PostgreSQL","PostgreSQL caching alternatives"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL processed"},"page_title":{"type":"string","description":"Page title"},"queries":{"type":"array","description":"Queries the passages were drafted for"},"passages":{"type":"array","description":"Generated passages with type, text, word count, and placement"},"passage_count":{"type":"number","description":"Total passages produced"},"usable_passage_count":{"type":"number","description":"Passages with non-empty text"},"passages_by_type":{"type":"object","description":"Count of passages by answer type"}}},"returns":"Drafted answer passages by query and type with suggested page placement"},{"name":"audit_quotable_density","displayName":"Audit Quotable Density","description":"Score how citable a page is per 1,000 words. Counts definitions, statistics, named quotes, comparisons, list items, and FAQ pairs, then validates the strongest passages with AI scoring. Returns weakest dimensions and prioritised fixes.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to audit for quotable content density"}},"required":["url"]},"annotations":{"readOnlyHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Audit a long-form blog post for citable density","input":{"url":"https://example.com/blog/kubernetes-guide"}},{"description":"Audit a comparison page for AI extractability","input":{"url":"https://example.com/redis-vs-postgresql"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL audited"},"word_count":{"type":"number","description":"Total word count of the page"},"density_scores":{"type":"object","description":"Density per 1,000 words for each dimension"},"raw_counts":{"type":"object","description":"Absolute counts per dimension"},"overall_quotability":{"type":"number","description":"Overall quotability score (0-100)"},"component_scores":{"type":"object","description":"Per-dimension score (0-100)"},"weakest_dimensions":{"type":"array","description":"Bottom 3 dimensions with current and target densities"},"top_quotable_passages":{"type":"array","description":"Highest-scoring extractable passages"},"recommendations":{"type":"array","description":"Specific fixes for the weakest dimensions"}}},"returns":"Quotability score and density per 1,000 words across 6 dimensions with the weakest dimensions and top passages"}],"workflow":["check_ai_visibility","check_multi_engine_visibility","check_citation_consistency","analyze_citation_sources","check_brand_sentiment","audit_ugc_presence","audit_entity_graph","check_ai_crawlers","generate_llms_txt","analyze_serp","analyze_competitors","analyze_content_gaps","audit_content","audit_domain","analyze_citability","audit_quotable_density","optimize_content","optimize_meta","generate_schema","audit_entity","write_content","refresh_content","generate_answer_passages"],"icon":"/icons/geo.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-03-25","changes":["Added check_ai_visibility — live AI citation monitoring via Perplexity","Added analyze_citation_sources — find which domains AI engines cite for your queries","Added check_brand_sentiment — analyse how AI engines describe your brand"]},{"version":"0.04","date":"2026-04-15","changes":["Add check_multi_engine_visibility, check_citation_consistency, generate_llms_txt, audit_ugc_presence, audit_entity_graph, generate_answer_passages, audit_quotable_density for 2026 multi-engine AI search coverage"]},{"version":"0.05","date":"2026-05-08","changes":["write_content, optimize_content, refresh_content, audit_domain, audit_entity, audit_content, audit_ugc_presence, audit_quotable_density, analyze_citability, analyze_competitors, analyze_content_gaps, analyze_serp, generate_schema, generate_answer_passages, optimize_meta now use Gemini 2.5 Flash — fixes 404 model-not-found errors after the previous Gemini Flash version was retired"]}],"premadePrompt":"Is [yourdomain.com] being cited by ChatGPT or AI search engines when people ask about [your topic or industry]? If not, show me who is getting cited instead and what I need to do to get mentioned.","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"perplexity","type":"secret","displayName":"Perplexity API Key","description":"Optional: use your own Perplexity key instead of the platform default","envFallback":"PERPLEXITY_API_KEY","acquireUrl":"https://www.perplexity.ai/settings/api"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"perplexity","type":"secret","displayName":"Perplexity API Key","description":"Optional: use your own Perplexity key instead of the platform default","envFallback":"PERPLEXITY_API_KEY","acquireUrl":"https://www.perplexity.ai/settings/api"}]},{"name":"dns-domain","displayName":"DNS & Domain","subtitle":"DNS, WHOIS, SSL & domain checks","about":"**DNS & Domain** handles DNS lookups, WHOIS registration data, SSL/TLS certificate checks, and domain availability — all in one tool. Essential for diagnosing infrastructure issues, monitoring certificate expiry, and finding available domains.\n\nTracking down a DNS misconfiguration or checking whether an SSL certificate is about to expire normally means running separate commands or visiting different tools. This tool consolidates them. Run all DNS record types in parallel, check who owns a domain and when it expires, verify certificate trust and days remaining, or batch-check a list of domain names for availability.\n\n### What you can do\n- **lookup_dns** — resolve all DNS record types (A, AAAA, MX, TXT, CNAME, NS, CAA, SOA) in parallel, or query a specific type\n- **whois_lookup** — registration data including owner, registrar, creation/expiry dates, and nameservers\n- **check_ssl** — SSL/TLS certificate details including expiry date, days remaining, issuer, and trust chain status\n- **check_availability** — batch-check multiple domain names across TLDs for registration availability\n\n### Who it's for\nDevOps engineers, developers, sysadmins, and security teams who need to audit domains and diagnose DNS or certificate issues. Also useful for domain investors and businesses planning a launch who need to check name availability across multiple TLDs.\n\n### How to use it\n1. Use **lookup_dns** with a domain and record_type: \"ALL\" for a complete DNS audit\n2. Use **whois_lookup** to check ownership and find out when a domain expires\n3. Use **check_ssl** to verify certificate health — days_remaining is useful for setting up expiry alerts\n4. For a full domain audit, run **lookup_dns**, **whois_lookup**, and **check_ssl** together in parallel","version":"0.03","categories":["infrastructure","security"],"currency":"USD","skills":[{"name":"lookup_dns","displayName":"DNS Lookup","description":"Resolve DNS records for a domain. Returns A, AAAA, MX, TXT, CNAME, NS, CAA, and SOA records in parallel. Supports querying specific record types or all at once. Reports errors separately from empty results.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name to resolve (e.g. \"example.com\")"},"record_type":{"type":"string","enum":["A","AAAA","MX","TXT","CNAME","NS","CAA","SOA","ALL"],"default":"ALL","description":"DNS record type to query. Use \"ALL\" to fetch all record types in parallel."}},"required":["domain"]},"annotations":{},"examples":[{"description":"Look up all DNS records for google.com","input":{"domain":"google.com"}},{"description":"Look up MX records for a domain","input":{"domain":"github.com","record_type":"MX"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain queried"},"records":{"type":"object","description":"DNS records grouped by type (A, AAAA, MX, TXT, CNAME, NS, CAA, SOA)"},"errors":{"type":"object","description":"Any DNS resolution errors by record type (only present if errors occurred)"}}},"returns":"DNS records grouped by type with TTL and priority information where applicable"},{"name":"whois_lookup","displayName":"WHOIS Lookup","description":"Perform a WHOIS lookup for a domain. Returns registrar, creation date, expiry date, nameservers, and registration status. Connects directly to WHOIS servers.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name to look up (e.g. \"example.com\")"}},"required":["domain"]},"annotations":{},"examples":[{"description":"WHOIS lookup for google.com","input":{"domain":"google.com"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain queried"},"registrar":{"type":"string","description":"Domain registrar name"},"registrant_org":{"type":"string","description":"Registrant organization (null if redacted)"},"registrant_country":{"type":"string","description":"Registrant country (null if redacted)"},"created":{"type":"string","description":"Registration date"},"expires":{"type":"string","description":"Expiry date"},"updated":{"type":"string","description":"Last updated date"},"nameservers":{"type":"array","items":{"type":"string"},"description":"Nameserver list"},"status":{"type":"array","items":{"type":"string"},"description":"Domain status codes"},"privacy_enabled":{"type":"boolean","description":"Whether WHOIS privacy protection is detected"},"registry_locked":{"type":"boolean","description":"Whether full registry lock is in place (server*Prohibited)"},"dnssec":{"type":"string","description":"DNSSEC status (e.g. \"signedDelegation\", \"unsigned\")"},"abuse_email":{"type":"string","description":"Registrar abuse contact email"},"abuse_phone":{"type":"string","description":"Registrar abuse contact phone"},"raw":{"type":"string","description":"Raw WHOIS response text"}}},"returns":"Parsed WHOIS data including registrar, dates, nameservers, status, and raw response"},{"name":"check_ssl","displayName":"Check SSL Certificate","description":"Inspect the SSL/TLS certificate for a domain. Returns issuer, subject, validity dates, protocol version, and days until expiry. Connects via TLS to port 443.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name to check SSL for (e.g. \"example.com\")"},"port":{"type":"number","default":443,"description":"Port to connect to (default 443)"}},"required":["domain"]},"annotations":{},"examples":[{"description":"Check SSL certificate for github.com","input":{"domain":"github.com"}},{"description":"Check an expired certificate","input":{"domain":"expired.badssl.com"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain checked"},"valid":{"type":"boolean","description":"Overall validity: date valid + hostname matches + trusted chain"},"date_valid":{"type":"boolean","description":"Whether the certificate dates are currently valid"},"hostname_match":{"type":"boolean","description":"Whether the certificate CN/SANs match the queried domain"},"trusted":{"type":"boolean","description":"Whether the certificate chain is trusted by the system CA store"},"self_signed":{"type":"boolean","description":"Whether the certificate appears to be self-signed"},"auth_error":{"type":"string","description":"TLS authorization error message if not trusted (null if trusted)"},"issuer":{"type":"object","description":"Certificate issuer (organization, common_name)"},"subject":{"type":"object","description":"Certificate subject (common_name, alt_names)"},"valid_from":{"type":"string","description":"Certificate start date (ISO)"},"valid_to":{"type":"string","description":"Certificate expiry date (ISO)"},"days_remaining":{"type":"number","description":"Days until certificate expires"},"protocol":{"type":"string","description":"TLS protocol version (e.g. TLSv1.3)"},"cipher_suite":{"type":"string","description":"Negotiated cipher suite name"},"tls_version":{"type":"string","description":"TLS version from cipher negotiation"},"fingerprint":{"type":"string","description":"Certificate SHA-256 fingerprint"},"serial_number":{"type":"string","description":"Certificate serial number"}}},"returns":"SSL certificate details including trust status, hostname match, issuer, expiry, cipher suite, and fingerprint"},{"name":"check_availability","displayName":"Check Domain Availability","description":"Check if a domain name is registered or available for purchase. Uses DNS resolution and WHOIS to determine registration status. Supports batch checking of multiple domains.","inputSchema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"List of domain names to check (e.g. [\"example.com\", \"example.io\"])"}},"required":["domains"]},"annotations":{},"examples":[{"description":"Check availability of several domains","input":{"domains":["coolstartup.com","coolstartup.io","coolstartup.dev"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Availability results per domain","items":{"type":"object","properties":{"domain":{"type":"string","description":"Domain checked"},"available":{"type":"boolean","description":"Whether the domain appears available"},"registered":{"type":"boolean","description":"Whether the domain is currently registered"}}}},"checked":{"type":"number","description":"Number of domains checked"}}},"returns":"Availability status for each domain (available/registered)"}],"icon":"/icons/dns-domain.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-05-08","changes":["check_availability now flags taken domains that are listed for sale on aftermarket marketplaces (Afternic, Sedo, Dan, Uniregistry, GoDaddy CashParking, Bodis, Above, ParkingCrew) by reading their parking nameservers, plus a deep-link to the listing page when one is known."]}],"premadePrompt":"Check the DNS records and SSL certificate for [domain]. When does the SSL expire and who is the domain registered to?","requirements":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}],"credentials":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}]},{"name":"whois-rdap","displayName":"WHOIS & RDAP","subtitle":"Domain owner, registrar & expiry","about":"**WHOIS & RDAP** looks up the registration record for any domain — who registered it, when it was created, when it expires, which registrar holds it, and what nameservers it points to. It uses the modern RDAP protocol with automatic fallback to traditional WHOIS, so it works reliably across all TLDs.\n\nWhether you're vetting a domain before buying it, checking expiry on your own portfolio, investigating a suspicious URL, or doing brand protection research, this gives you the authoritative registration data in a clean, structured format.\n\n### What you can do\n- **lookup_domain** — get the full registration record for any domain: registrant info, creation and expiry dates, registrar, nameservers, registry status, and an availability signal for unregistered domains\n\n### Who it's for\nDomain investors checking availability and expiry dates. Security analysts investigating malicious or suspicious domains. Brand protection teams monitoring for lookalike or infringing registrations. Developers and sysadmins auditing DNS configurations. Anyone buying or selling a domain who wants the registration history.\n\n### How to use it\n1. Run **lookup_domain** with any domain name (e.g. \"example.com\") — no need for https:// or www\n2. Check the expires field to see when a domain renews or lapses\n3. Check the status field for registry lock states (clientTransferProhibited, etc.)\n4. Add include_raw: true to see the full RDAP or WHOIS payload for detailed investigation\n\n### Getting started\nAll lookups are free and ready to use without any setup. Pass the domain name and the tool returns structured registration data, including an availability signal for domains not currently registered.","version":"0.02","categories":["security","infrastructure","search"],"currency":"USD","skills":[{"name":"lookup_domain","displayName":"Lookup Domain Registration","description":"Inspect a domain with standards-based RDAP lookup and automatic WHOIS fallback. Returns registration status, availability signal, registrar details, nameservers, and lifecycle dates.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to inspect (e.g. \"example.com\")"},"include_raw":{"type":"boolean","default":false,"description":"Include raw RDAP/WHOIS payloads in the output for debugging"}},"required":["domain"]},"annotations":{},"examples":[{"description":"Lookup registration metadata for google.com","input":{"domain":"google.com"}},{"description":"Lookup openai.com and include raw provider payloads","input":{"domain":"openai.com","include_raw":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Normalized domain queried"},"source":{"type":"string","description":"Data source used: rdap, whois, or unresolved"},"registered":{"type":"boolean","description":"Whether the domain appears registered (when known)"},"available":{"type":"boolean","description":"Whether the domain appears available (when known)"},"registrar":{"type":"string","description":"Registrar name if available"},"created":{"type":"string","description":"Domain creation/registration timestamp if available"},"updated":{"type":"string","description":"Domain last update timestamp if available"},"expires":{"type":"string","description":"Domain expiration timestamp if available"},"status":{"type":"array","description":"Registry status values","items":{"type":"string"}},"nameservers":{"type":"array","description":"Nameserver hostnames","items":{"type":"string"}},"dnssec":{"type":"string","description":"DNSSEC state when available (e.g. signed/unsigned)"},"abuse_email":{"type":"string","description":"Abuse contact email if present"},"abuse_phone":{"type":"string","description":"Abuse contact phone if present"},"rdap_url":{"type":"string","description":"RDAP URL used for lookup when applicable"},"rdap_status_code":{"type":"number","description":"RDAP HTTP status code when applicable"},"notes":{"type":"array","description":"Lookup notes and fallback details","items":{"type":"string"}}}},"returns":"Structured domain registration intelligence with registrar, lifecycle dates, status, nameservers, and source/fallback metadata"}],"icon":"/icons/whois-rdap.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Who owns [domain name] and when does it expire? I want to see the registrar, creation date, and nameservers.","requirements":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}],"credentials":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}]},{"name":"domain-search","displayName":"Domain Search","subtitle":"Find available domain names fast","about":"**Domain Search** generates domain name ideas from any keyword and checks real-time availability across the TLDs you care about. Skip the manual hunting — get a ranked shortlist of available names in one step.\n\nWhether you're naming a startup, launching a side project, or finding the right domain for a client, this tool surfaces creative candidates and immediately tells you which ones are actually available to register. You can also paste in a list of domains you already have in mind and verify them all at once.\n\n### What you can do\n- **search_domains** — generate and rank domain candidates from a keyword, checking availability across chosen TLDs\n- **check_domains** — verify registration status for up to 100 specific domains you already have in mind\n\n### Who it's for\nFounders, marketers, and developers naming products, brands, or projects. Also useful for domain investors checking availability in bulk.\n\n### How to use it\n1. Call **search_domains** with your keyword or brand phrase and optionally specify TLDs like .com, .io, or .ai.\n2. Review the ranked results — available domains are surfaced first.\n3. Use **check_domains** to do a final availability check on your shortlist before heading to a registrar.\n\n### Getting started\nCall **search_domains** with your brand keyword to get started. Always confirm availability directly with a registrar before purchasing.","version":"0.04","categories":["search","marketing","infrastructure"],"currency":"USD","skills":[{"name":"search_domains","displayName":"Search Domains","description":"Generate and rank domain candidates from a keyword or brand phrase, then check registration status for each candidate across selected TLDs.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword or brand phrase used to generate domain candidates"},"tlds":{"type":"array","description":"Optional list of TLDs to include (e.g. [\"com\", \"io\", \"ai\"])","items":{"type":"string"}},"limit":{"type":"number","default":10,"description":"Maximum number of results to return (1-30)"},"include_taken":{"type":"boolean","default":false,"description":"Include registered/taken domains in the returned results"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search 5 available domains for a \"human leap\" brand","input":{"query":"human leap","tlds":["com","io","ai"],"limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Original query string"},"normalized_query":{"type":"string","description":"Normalized tokenized query"},"tlds":{"type":"array","description":"TLDs used in this search","items":{"type":"string"}},"include_taken":{"type":"boolean","description":"Whether taken domains were included"},"checked_domains":{"type":"number","description":"Number of candidate domains that were checked"},"returned":{"type":"number","description":"Number of results returned after filtering and limits"},"results":{"type":"array","description":"Ranked domain candidates with lookup metadata","items":{"type":"object","properties":{"domain":{"type":"string","description":"Candidate domain name"},"label":{"type":"string","description":"Generated second-level label used for this candidate"},"tld":{"type":"string","description":"Top-level domain used"},"available":{"type":"boolean","description":"Whether the domain appears available"},"registered":{"type":"boolean","description":"Whether the domain appears registered"},"source":{"type":"string","description":"Lookup source: rdap, whois, or unresolved"},"registrar":{"type":"string","description":"Registrar name when known"},"expires":{"type":"string","description":"Expiration date when known"},"status":{"type":"array","description":"Domain status values when known","items":{"type":"string"}},"score":{"type":"number","description":"Ranking score (lower is better)"},"reason":{"type":"string","description":"Why this candidate was generated"},"notes":{"type":"array","description":"Lookup notes and fallback details","items":{"type":"string"}}}}}}},"returns":"Ranked domain candidates with availability checks, registrar metadata, and reasoning for each generated name"},{"name":"check_domains","displayName":"Check Domains","description":"Check explicit domain names and return structured registration intelligence including source, status, registrar, and availability.","inputSchema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"Domain names to check (up to 100, e.g. [\"example.com\", \"example.io\"])"},"max":{"type":"number","default":25,"description":"Maximum number of domains from the list to check (1-100)"},"include_raw":{"type":"boolean","default":false,"description":"Include raw RDAP/WHOIS payloads in each result"}},"required":["domains"]},"annotations":{},"examples":[{"description":"Check two specific domains for registration status","input":{"domains":["google.com","this-domain-probably-does-not-exist-12345.com"],"max":2}}],"pricing":"free","outputSchema":{"type":"object","properties":{"checked":{"type":"number","description":"Number of domains checked"},"summary":{"type":"object","description":"Summary counts by resolution state","properties":{"available":{"type":"number","description":"Domains flagged available"},"registered":{"type":"number","description":"Domains flagged registered"},"unresolved":{"type":"number","description":"Domains with unresolved lookup status"}}},"results":{"type":"array","description":"Per-domain lookup results","items":{"type":"object","properties":{"domain":{"type":"string","description":"Domain queried"},"source":{"type":"string","description":"Lookup source used"},"registered":{"type":"boolean","description":"Whether domain appears registered"},"available":{"type":"boolean","description":"Whether domain appears available"},"registrar":{"type":"string","description":"Registrar name when known"},"created":{"type":"string","description":"Creation date when known"},"updated":{"type":"string","description":"Updated date when known"},"expires":{"type":"string","description":"Expiry date when known"},"status":{"type":"array","description":"Domain status values","items":{"type":"string"}},"nameservers":{"type":"array","description":"Nameserver hostnames","items":{"type":"string"}},"dnssec":{"type":"string","description":"DNSSEC status when known"},"abuse_email":{"type":"string","description":"Abuse contact email if present"},"abuse_phone":{"type":"string","description":"Abuse contact phone if present"},"rdap_url":{"type":"string","description":"RDAP endpoint URL used when available"},"rdap_status_code":{"type":"number","description":"RDAP response status code when available"},"notes":{"type":"array","description":"Lookup notes and fallback details","items":{"type":"string"}}}}}}},"returns":"Structured registration status for each provided domain, including availability, registrar metadata, and lookup source diagnostics"},{"name":"brainstorm_domains","displayName":"Brainstorm Domains","description":"Use an LLM to invent brandable, made-up second-level domain names from a brief, then check availability across the requested TLDs. Produces coined words (Loom, Quill, Stripe-style) instead of concatenations.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Brand brief, theme, or product description used to inspire the names (e.g. \"developer observability\", \"coffee subscription\")."},"tlds":{"type":"array","description":"Optional list of TLDs to check (e.g. [\"com\", \"io\", \"ai\"])","items":{"type":"string"}},"limit":{"type":"number","default":10,"description":"Maximum number of results to return after availability filtering (1-30)"},"num_candidates":{"type":"number","default":25,"description":"How many invented names to ask the LLM for before availability checks (8-60)."},"style":{"type":"string","description":"Optional naming-style direction, e.g. \"single-syllable\", \"Latin roots\", \"playful 2010s YC\", \"warm and human\", \"techy and abstract\""},"include_taken":{"type":"boolean","default":false,"description":"Include taken domains in the returned results (defaults to available-only)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Brainstorm 8 brandable domains for a calm-finance app","input":{"query":"calm finance for freelancers","tlds":["com","co"],"limit":8,"style":"warm, human, single-word"}},{"description":"Latin-rooted observability product names across .com, .io, .ai","input":{"query":"developer observability platform","tlds":["com","io","ai"],"limit":10,"style":"Latin or Greek roots"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Original query string"},"tlds":{"type":"array","description":"TLDs that were checked","items":{"type":"string"}},"checked_domains":{"type":"number","description":"How many candidate domains were looked up"},"returned":{"type":"number","description":"How many results are returned after filtering and limit"},"results":{"type":"array","description":"Ranked, brandable domain candidates with availability checks","items":{"type":"object","properties":{"domain":{"type":"string","description":"Candidate domain name"},"label":{"type":"string","description":"Generated invented label"},"tld":{"type":"string","description":"Top-level domain used"},"available":{"type":"boolean","description":"Whether the domain appears available"},"registered":{"type":"boolean","description":"Whether the domain appears registered"},"source":{"type":"string","description":"Lookup source: rdap, whois, or unresolved"},"reason":{"type":"string","description":"LLM rationale for why this name fits"}}}}}},"returns":"Ranked, brandable domain candidates with availability and per-name LLM rationale. Spend is one LLM call (~$0.001) plus one WHOIS lookup per candidate domain."}],"workflow":["search_domains","check_domains","brainstorm_domains"],"icon":"/icons/domain-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-05-08","changes":["Multi-word queries now generate variants for each token as an independent seed instead of collapsing \"foo bar baz\" into \"foobarbaz\" — naming brainstorms get a full variant tree per keyword. Candidate pool expanded from 40 to 60 to fit the additional variants."]},{"version":"0.04","date":"2026-05-08","changes":["Added brainstorm_domains — paid skill that uses an LLM to invent brandable, made-up second-level names (Stripe-, Loom-, Quill-style) and then runs availability checks across the requested TLDs. Use this when search_domains feels too template-driven."]}],"premadePrompt":"Find available domain names for my [business / idea / brand name]. Check .com, .io, and .ai options.","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}]},{"name":"page-speed","displayName":"Page Speed Test","subtitle":"Performance, SEO & Web Vitals","about":"**Page Speed Test** runs a full Lighthouse-style audit on any URL and returns performance scores, SEO and accessibility grades, all Core Web Vitals, and a prioritised list of issues ranked by impact. It's the fastest way to diagnose why a page is slow, failing SEO checks, or hurting user experience — without opening a browser.\n\nThe audit returns lab metrics (FCP, LCP, CLS, TBT, TTI, TTFB, Speed Index) alongside real-user CrUX data when available. CrUX data reflects actual user experience in the field and is more accurate than lab metrics for understanding how Google perceives your page. The top issues list sorts problems by their score impact so you know exactly what to fix first.\n\n### What you can do\n- Score any URL on performance, SEO, accessibility, and best practices (0–100 each)\n- Get all Core Web Vitals including LCP, CLS, INP, and TTFB with real-user data\n- See a prioritised list of issues sorted by how much they hurt your score\n- Audit in mobile (default) or desktop mode\n- Audit individual pages, not just root domains\n\n### Who it's for\nWeb developers, SEO specialists, product managers, and marketers who need to understand and improve page performance. Useful for auditing landing pages before campaigns, diagnosing Core Web Vitals failures, and tracking improvements after optimisation work.\n\n### How to use it\n1. Use **audit_url** with the full URL including https://\n2. Default strategy is mobile — matches Google's mobile-first indexing; switch to desktop if needed\n3. Check the top_issues list first — they're sorted by impact on your score\n4. Use real-user CrUX data in core_web_vitals for the most SEO-relevant signals\n\n### Getting started\nNo setup required — paste any public URL to run an audit instantly.","version":"0.04","categories":["search","analytics","development"],"currency":"USD","skills":[{"name":"audit_url","displayName":"Audit URL","description":"Run a Lighthouse-style audit for a URL and return category scores, Core Web Vitals metrics, and prioritized issues that hurt ranking or user experience.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL to audit"},"strategy":{"type":"string","enum":["mobile","desktop"],"default":"mobile","description":"Audit strategy to emulate mobile or desktop rendering"},"categories":{"type":"array","items":{"type":"string"},"description":"Optional categories to focus on (performance, seo, best-practices, accessibility, pwa)"},"timeout_ms":{"type":"number","default":25000,"description":"Maximum audit duration in milliseconds (5000-60000)"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Audit the example.com homepage for mobile SEO/performance","input":{"url":"https://example.com","strategy":"mobile"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Original URL requested for audit"},"audited_url":{"type":"string","description":"Final audited URL after redirects"},"source":{"type":"string","description":"Audit data source: pagespeed or basic fallback"},"scores":{"type":"object","description":"Category scores on a 0-100 scale","properties":{"performance":{"type":"number","description":"Performance score (0-100)"},"accessibility":{"type":"number","description":"Accessibility score (0-100)"},"best_practices":{"type":"number","description":"Best practices score (0-100)"},"seo":{"type":"number","description":"SEO score (0-100)"},"pwa":{"type":"number","description":"PWA score (0-100)"},"overall":{"type":"number","description":"Average score across available categories"}}},"metrics":{"type":"object","description":"Key lab metrics from audit data","properties":{"fcp_ms":{"type":"number","description":"First Contentful Paint in milliseconds"},"lcp_ms":{"type":"number","description":"Largest Contentful Paint in milliseconds"},"cls":{"type":"number","description":"Cumulative Layout Shift score"},"tbt_ms":{"type":"number","description":"Total Blocking Time in milliseconds"},"speed_index_ms":{"type":"number","description":"Speed Index in milliseconds"},"ttfb_ms":{"type":"number","description":"Time to First Byte in milliseconds"},"tti_ms":{"type":"number","description":"Time to Interactive in milliseconds"}}},"core_web_vitals":{"type":"object","description":"Core Web Vitals assessment summary","properties":{"assessment":{"type":"string","description":"Origin-level CWV category when available"},"lcp_ms":{"type":"number","description":"Origin-level LCP percentile when available"},"cls":{"type":"number","description":"Origin-level CLS percentile when available"},"inp_ms":{"type":"number","description":"Interaction to Next Paint percentile when available"},"ttfb_ms":{"type":"number","description":"Time to First Byte percentile when available"}}},"top_issues":{"type":"array","description":"Top issues prioritized by severity/score impact","items":{"type":"object","properties":{"id":{"type":"string","description":"Issue identifier"},"title":{"type":"string","description":"Issue title"},"score":{"type":"number","description":"Issue score contribution (lower is worse)"},"details":{"type":"string","description":"Issue-specific details"}}}},"fetched_at":{"type":"string","description":"Timestamp when audit finished"}}},"returns":"Lighthouse-style category scores, performance metrics, and prioritized issues with a resilient fallback mode"}],"icon":"/icons/page-speed.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-03-24","changes":["Renamed from lighthouse-audit to page-speed","Added TTFB, TTI lab metrics and INP, TTFB CrUX percentiles for complete Core Web Vitals coverage"]},{"version":"0.04","date":"2026-05-08","changes":["Now uses an optional Google PageSpeed Insights API key (GOOGLE_PAGESPEED_API_KEY) — bumps quota from per-IP shared limits to 25,000 audits/day per project, fixing 429 errors that nulled Core Web Vitals.","Added exponential-backoff retry on 429 (up to 3 attempts) before falling back to basic SEO audit."]}],"premadePrompt":"Run a performance and SEO audit on [website URL] and tell me the scores, Core Web Vitals, and the most impactful issues to fix.","requirements":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"},{"name":"pagespeed","type":"secret","displayName":"Google PageSpeed Insights API Key","description":"Optional. Without one, audits run on a shared per-IP quota that frequently 429s. With a key, quota lifts to 25,000 audits/day. Generate a free key at https://console.cloud.google.com/apis/credentials.","envFallback":"GOOGLE_PAGESPEED_API_KEY"}],"credentials":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"},{"name":"pagespeed","type":"secret","displayName":"Google PageSpeed Insights API Key","description":"Optional. Without one, audits run on a shared per-IP quota that frequently 429s. With a key, quota lifts to 25,000 audits/day. Generate a free key at https://console.cloud.google.com/apis/credentials.","envFallback":"GOOGLE_PAGESPEED_API_KEY"}]},{"name":"site-crawler","displayName":"Site Crawler","subtitle":"Map pages, links, and errors","about":"**Site Crawler** walks any website and collects per-page metadata — titles, descriptions, heading structure, word counts, response times, and link counts. Give it a URL and get back a structured inventory of everything it finds.\n\nIt's the fastest way to audit a site's content landscape without manually clicking through pages. Use it to find thin content, spot broken links, map internal structure, or build a content inventory before an SEO project.\n\n### What you can do\n- Crawl up to 100 pages from any starting URL\n- Collect title, description, heading counts, word count, link count, and response time per page\n- Detect 404s, timeouts, and other errors\n- Control crawl scope — same-origin only, or extend to subdomains and external links\n- Adjust timeout per page for slow-loading sites\n\n### Who it's for\nSEO professionals running content audits. Developers mapping site structure before a migration. Content teams identifying thin or duplicate pages. Anyone who needs a fast overview of what's actually on a site.\n\n### How to use it\n1. Use **crawl_site** with your starting URL — set **max_pages** to 10 for a quick overview or up to 100 for full coverage\n2. Check the **errors** array for 404s and timeouts\n3. Sort by **word_count** to find thin content pages\n4. Set **include_subdomains** to true for multi-subdomain sites like docs.example.com\n\n### Getting started\nSave your primary domain as a credential so it's used as the default — or just pass any URL directly to crawl_site.","version":"0.02","categories":["search","analytics","development"],"currency":"USD","skills":[{"name":"crawl_site","displayName":"Crawl Site","description":"Crawl pages from a starting URL and collect metadata including title, description, heading counts, link counts, response time, and crawl diagnostics.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Starting URL or hostname to crawl"},"max_pages":{"type":"number","default":20,"description":"Maximum number of pages to crawl (1-100)"},"timeout_ms":{"type":"number","default":10000,"description":"Request timeout per page in milliseconds (3000-60000)"},"same_origin_only":{"type":"boolean","default":true,"description":"Only crawl pages on the same origin as the start URL"},"include_subdomains":{"type":"boolean","default":false,"description":"Treat subdomains as internal links when same-origin mode is enabled"},"include_external":{"type":"boolean","default":false,"description":"Queue external links for crawling when same_origin_only is false"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"cpu"}},"examples":[{"description":"Crawl a small sample of example.com pages","input":{"url":"https://example.com","max_pages":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"start_url":{"type":"string","description":"Normalized starting URL"},"crawled_pages":{"type":"number","description":"Number of pages successfully crawled"},"discovered_links":{"type":"number","description":"Total unique links discovered"},"queue_remaining":{"type":"number","description":"Links still in queue when crawl finished"},"pages":{"type":"array","description":"Metadata for each crawled page","items":{"type":"object","properties":{"url":{"type":"string","description":"Crawled page URL"},"status_code":{"type":"number","description":"HTTP response status code"},"content_type":{"type":"string","description":"Content-Type header"},"title":{"type":"string","description":"Page title"},"meta_description":{"type":"string","description":"Meta description content"},"h1_count":{"type":"number","description":"Number of H1 tags"},"h2_count":{"type":"number","description":"Number of H2 tags"},"word_count":{"type":"number","description":"Approximate word count"},"internal_links":{"type":"number","description":"Number of internal links found on page"},"external_links":{"type":"number","description":"Number of external links found on page"},"response_time_ms":{"type":"number","description":"Page fetch latency in milliseconds"}}}},"errors":{"type":"array","description":"Pages that failed during crawl","items":{"type":"object","properties":{"url":{"type":"string","description":"Failed URL"},"error":{"type":"string","description":"Failure reason"}}}}}},"returns":"Bounded crawl results with per-page SEO metadata, link graph hints, response timing, and failure diagnostics"}],"icon":"/icons/site-crawler.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Crawl [website URL] and give me an overview of all the pages — titles, word counts, any broken links or errors, and which pages are thin on content.","requirements":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}],"credentials":[{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified"}]},{"name":"image-ops","displayName":"Image Ops","subtitle":"Resize, convert & optimize images","about":"**Image Ops** handles the everyday image processing tasks that come up in any content or development workflow: resizing, format conversion, compression, rotation, blur, and grayscale - all in a single call. Pass a URL, uploaded/base64 image bytes, or a server-local file path and get back a production-ready output file.\n\nIt's designed for the kind of repetitive image work that shouldn't require Photoshop or a custom script: converting a PNG to WebP for a web build, resizing an image to App Store icon dimensions, or compressing a hero photo to the right size for a landing page.\n\n### What you can do\n- **transform_image** - resize to exact dimensions, convert between JPEG/WebP/AVIF/PNG, compress with quality control, rotate, blur, and convert to grayscale\n- Set width only to let the tool preserve aspect ratio automatically\n- Use the fit mode to control how the image fills target dimensions (inside, cover, contain, fill)\n- Works with remote URLs, base64 image data, and server-local file paths when ToolRouter is running on the same machine\n\n### Who it's for\nDevelopers preparing images for web or mobile apps, designers batch-processing assets for export, and content teams resizing and converting images for different platforms and channels.\n\n### How to use it\n1. Use **transform_image** with image_url for hosted files, image_data for local files sent to hosted ToolRouter, or image_path only for files on the ToolRouter server\n2. Set width and/or height to resize, and format to convert (webp for web, png for App Store icons, avif for best compression)\n3. Set quality between 80 and 95 for most web use cases - lower for aggressive compression, higher for print\n4. The output image_path can be passed directly to other tools or downloaded\n\n### Getting started\nNo setup required - works immediately with any public image URL or inline base64 image data.","version":"0.02","categories":["media","marketing","analytics"],"currency":"USD","skills":[{"name":"transform_image","displayName":"Transform Image","description":"Load an image from a URL, base64 image data, or server-local path, apply resizing and visual transforms, then export an optimized output file for app-store or web usage.","inputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Server-local file path to source image. Hosted ToolRouter cannot read paths from the caller machine; use image_url or image_data for hosted calls."},"image_url":{"type":"string","description":"Source image as a ToolRouter file ID or hosted HTTP(S) URL"},"image_data":{"type":"string","description":"Base64-encoded image bytes, optionally as a data:image/...;base64 URL. Use this for local files when calling hosted ToolRouter."},"width":{"type":"number","description":"Target width in pixels"},"height":{"type":"number","description":"Target height in pixels"},"fit":{"type":"string","enum":["cover","contain","fill","inside","outside"],"default":"inside","description":"Resize fit mode when width/height are provided"},"format":{"type":"string","enum":["original","png","jpeg","webp","avif"],"default":"original","description":"Output format (original keeps source-like format)"},"quality":{"type":"number","default":85,"description":"Output quality (1-100) for lossy formats"},"rotate":{"type":"number","default":0,"description":"Rotation angle in degrees (-360 to 360)"},"grayscale":{"type":"boolean","default":false,"description":"Convert output image to grayscale"},"blur":{"type":"number","default":0,"description":"Blur sigma amount (0-20)"},"output_basename":{"type":"string","description":"Optional output filename stem (without extension)"}}},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":60,"mode":"cpu"}},"examples":[{"description":"Download and optimize an image for mobile listing use","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg","width":1080,"format":"webp","quality":82}},{"description":"Resize a local image when calling hosted ToolRouter by sending base64 image bytes","input":{"image_data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJ...","width":512,"height":512,"format":"png","fit":"contain"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Input source path, URL, or image_data marker"},"source_type":{"type":"string","description":"Source type: path, url, or data"},"image_path":{"type":"string","description":"Absolute output image path"},"output_format":{"type":"string","description":"Final output format"},"input_dimensions":{"type":"object","properties":{"width":{"type":"number","description":"Input image width"},"height":{"type":"number","description":"Input image height"}}},"output_dimensions":{"type":"object","properties":{"width":{"type":"number","description":"Output image width"},"height":{"type":"number","description":"Output image height"}}},"size_bytes":{"type":"number","description":"Output file size in bytes"},"operations":{"type":"object","description":"Applied transform settings","properties":{"resized":{"type":"boolean","description":"Whether resize was applied"},"width":{"type":"number","description":"Requested output width"},"height":{"type":"number","description":"Requested output height"},"fit":{"type":"string","description":"Fit strategy used"},"quality":{"type":"number","description":"Quality setting used"},"rotate":{"type":"number","description":"Rotation angle applied"},"grayscale":{"type":"boolean","description":"Whether grayscale conversion was applied"},"blur":{"type":"number","description":"Blur sigma applied"}}}}},"contentType":"image","returns":"Transformed image output path with final dimensions, file size, format, and operation metadata"}],"icon":"/icons/image-ops.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Resize and convert this image to [format, e.g. WebP] at [width]px wide: [image URL or path]. Optimize it for web use.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"security-scanner","displayName":"Security Scanner","subtitle":"Scan URLs, IPs, domains and files for threats","about":"**Security Scanner** checks URLs, domains, IP addresses, and file hashes against dozens of threat intelligence sources at once. Get a clear verdict on whether something is malicious, phishing, or suspicious — in seconds, without logging into multiple dashboards.\n\nIt covers the full range of security checks developers and IT teams need: threat lookups, TLS certificate inspection, security header audits, and full vulnerability scans. A single **security_report** call runs everything and comes back with a risk score.\n\n### What you can do\n- Check any URL against 70+ antivirus and threat engines\n- Look up domains for malware, phishing, and threat intelligence flags\n- Check IP addresses for abuse reports and threat actor associations\n- Verify file hashes to detect known malware samples\n- Probe hosts for HTTP security headers and TLS configuration\n- Scan for vulnerabilities and generate a scored risk report\n\n### Who it's for\nDevelopers who want to audit their own domains before launch. Security teams triaging suspicious links or IPs. SaaS builders who need to validate user-submitted URLs. Anyone who needs a quick, multi-source threat verdict without switching between tools.\n\n### How to use it\n1. For a full audit, use **security_report** — it runs all checks in one go and returns a risk score with prioritized findings\n2. For targeted checks, use **check_url**, **check_domain**, **check_ip**, or **check_hash** individually\n3. Use **probe_hosts** to inspect HTTP headers and TLS on any domain\n4. Use **scan_targets** for vulnerability scanning — note this runs async and takes around 60 seconds\n\n### Getting started\nConnect your VirusTotal account for full threat intelligence coverage. AbuseIPDB adds community abuse reports on IP checks. Both are optional — threat feeds from URLhaus and ThreatFox run without any API key.","version":"0.04","categories":["security","infrastructure","analytics"],"currency":"USD","skills":[{"name":"check_url","displayName":"Check URL","description":"Check if a URL is malicious, phishing, or suspicious by scanning it against 70+ security engines. Returns a verdict, detection count, and category classifications.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL to check (e.g. https://example.com/page)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Check if a URL is safe to visit","input":{"url":"https://example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was checked"},"final_url":{"type":"string","description":"Final URL after redirects"},"title":{"type":"string","description":"Page title if available"},"verdict":{"type":"string","description":"Overall verdict: malicious, suspicious, harmless, or undetected"},"detection_stats":{"type":"object","description":"Breakdown of engine verdicts","properties":{"malicious":{"type":"number"},"suspicious":{"type":"number"},"harmless":{"type":"number"},"undetected":{"type":"number"}}},"total_engines":{"type":"number","description":"Total engines that analyzed this URL"},"detections":{"type":"number","description":"Engines flagging as malicious or suspicious"},"reputation":{"type":"number","description":"Community reputation score"},"categories":{"type":"object","description":"URL categorization by security vendors"},"analysis_date":{"type":"string","description":"When the URL was last analyzed (ISO 8601)"}}},"returns":"Threat verdict, detection stats from 70+ engines, reputation score, and URL categories"},{"name":"check_domain","displayName":"Check Domain","description":"Get the threat reputation of a domain including detection stats from 70+ engines, DNS records, WHOIS data, registrar info, and popularity rankings.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name to check (e.g. example.com)"}},"required":["domain"]},"annotations":{},"examples":[{"description":"Check domain reputation for example.com","input":{"domain":"example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain that was checked"},"verdict":{"type":"string","description":"Overall verdict: malicious, suspicious, harmless, or undetected"},"detection_stats":{"type":"object","description":"Breakdown of engine verdicts"},"total_engines":{"type":"number","description":"Total engines analyzed"},"detections":{"type":"number","description":"Engines flagging as malicious or suspicious"},"reputation":{"type":"number","description":"Community reputation score"},"registrar":{"type":"string","description":"Domain registrar"},"creation_date":{"type":"string","description":"Domain creation date (ISO 8601)"},"dns_records":{"type":"array","description":"DNS records (type, value, TTL)"},"popularity_ranks":{"type":"object","description":"Rankings from traffic analysis sources"}}},"returns":"Domain threat verdict, DNS records, WHOIS info, registrar, and popularity rankings"},{"name":"check_ip","displayName":"Check IP Address","description":"Look up an IP address for threat intelligence including detection stats from 70+ engines, geolocation, ASN ownership, and network details.","inputSchema":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 or IPv6 address to check (e.g. 8.8.8.8)"}},"required":["ip"]},"annotations":{},"examples":[{"description":"Check if an IP address is associated with threats","input":{"ip":"8.8.8.8"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"ip":{"type":"string","description":"IP address that was checked"},"verdict":{"type":"string","description":"Overall verdict: malicious, suspicious, harmless, or undetected"},"detection_stats":{"type":"object","description":"Breakdown of engine verdicts"},"total_engines":{"type":"number","description":"Total engines analyzed"},"detections":{"type":"number","description":"Engines flagging as malicious or suspicious"},"reputation":{"type":"number","description":"Community reputation score"},"country":{"type":"string","description":"Country code (ISO 3166)"},"as_owner":{"type":"string","description":"Autonomous System owner"},"asn":{"type":"number","description":"Autonomous System Number"},"network":{"type":"string","description":"IP network range (CIDR)"}}},"returns":"IP threat verdict, geolocation, ASN ownership, network range, and detection stats"},{"name":"check_hash","displayName":"Check File Hash","description":"Look up a file hash (MD5, SHA-1, or SHA-256) to check if the file is known malware. Returns detection stats from 70+ antivirus engines, sandbox verdicts, and file metadata.","inputSchema":{"type":"object","properties":{"hash":{"type":"string","description":"File hash — MD5 (32 chars), SHA-1 (40 chars), or SHA-256 (64 chars)"}},"required":["hash"]},"annotations":{},"examples":[{"description":"Check if a file hash is known malware","input":{"hash":"275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 hash"},"sha1":{"type":"string","description":"SHA-1 hash"},"md5":{"type":"string","description":"MD5 hash"},"file_name":{"type":"string","description":"Most notable filename for this hash"},"file_type":{"type":"string","description":"File type description"},"file_size_bytes":{"type":"number","description":"File size in bytes"},"verdict":{"type":"string","description":"Overall verdict: malicious, suspicious, harmless, or undetected"},"threat_verdict":{"type":"string","description":"Threat classification"},"detection_stats":{"type":"object","description":"Breakdown of engine verdicts"},"total_engines":{"type":"number","description":"Total engines analyzed"},"detections":{"type":"number","description":"Engines flagging as malicious or suspicious"},"sandbox_verdicts":{"type":"array","description":"Dynamic analysis verdicts from sandboxes"},"tags":{"type":"array","description":"Classification tags"}}},"returns":"File threat verdict, AV detection stats, sandbox analysis, and file metadata"},{"name":"scan_targets","displayName":"Scan Targets","description":"Scan web targets for security vulnerabilities by severity. Checks transport security, headers, and common exposure paths like .env and .git.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"string"},"description":"List of URLs or hostnames to scan"},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"default":"medium","description":"Minimum severity threshold to include in output"},"use_binary":{"type":"boolean","default":true,"description":"Attempt to use nuclei binary when available in PATH"},"active_checks":{"type":"boolean","default":false,"description":"Enable additional active path checks (e.g. /.env, /.git/HEAD) in builtin mode"},"max_targets":{"type":"number","default":25,"description":"Maximum number of targets to scan from the list (1-100)"},"timeout_ms":{"type":"number","default":10000,"description":"Timeout per target request in milliseconds (3000-120000)"}},"required":["targets"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Run a vulnerability scan on example.com","input":{"targets":["example.com"],"severity":"medium"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"mode":{"type":"string","description":"Scan engine used: nuclei or builtin"},"binary_used":{"type":"boolean"},"binary_available":{"type":"boolean"},"checked_targets":{"type":"number"},"minimum_severity":{"type":"string"},"findings_count":{"type":"number"},"by_severity":{"type":"object"},"notes":{"type":"array","items":{"type":"string"}},"findings":{"type":"array","description":"Security findings sorted by severity"}}},"returns":"Severity-filtered security findings with scanner mode and per-severity counts"},{"name":"probe_hosts","displayName":"Probe Hosts","description":"Probe multiple web targets for HTTP status, response times, TLS certificates, security headers, and technology signals. Scan up to 100 hosts concurrently.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"string"},"description":"List of hostnames or URLs to probe"},"max_targets":{"type":"number","default":25,"description":"Maximum targets to probe (1-100)"},"timeout_ms":{"type":"number","default":8000,"description":"Per-target timeout in milliseconds (2000-60000)"},"concurrency":{"type":"number","default":6,"description":"Concurrent probe workers (1-20)"},"follow_redirects":{"type":"boolean","default":true,"description":"Follow HTTP redirects"},"include_body_preview":{"type":"boolean","default":false,"description":"Include first 500 chars of body text"}},"required":["targets"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Probe websites for security posture","input":{"targets":["example.com","https://openai.com"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"checked":{"type":"number"},"summary":{"type":"object","description":"Reachable/unreachable/HTTPS/HTTP counts"},"results":{"type":"array","description":"Per-target probe results with status, headers, TLS, tech"}}},"returns":"Per-target probe intelligence including status, TLS posture, security headers, and reachability"},{"name":"security_report","displayName":"Security Report","description":"Comprehensive one-shot security audit. Runs domain reputation, URL check, host probing, and vulnerability scan in parallel. Returns a unified risk score (0-100) with risk factors.","inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"Domain or URL to audit (e.g. example.com)"}},"required":["target"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"cpu"}},"examples":[{"description":"Run a full security audit on a domain","input":{"target":"example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"target":{"type":"string"},"risk_score":{"type":"number","description":"Overall risk score 0-100"},"risk_level":{"type":"string","description":"clean, low, medium, high, or critical"},"risk_factors":{"type":"array","items":{"type":"string"},"description":"List of factors contributing to risk"},"sources":{"type":"array","items":{"type":"string"},"description":"Threat intelligence sources queried"},"summary":{"type":"object","description":"Key findings at a glance"},"domain_intel":{"type":"object","description":"Full domain reputation data"},"url_intel":{"type":"object","description":"Full URL analysis data"},"infrastructure":{"type":"object","description":"Host probe results (headers, TLS, tech)"},"vulnerabilities":{"type":"object","description":"Vulnerability scan findings"}}},"returns":"Unified security report with risk score, risk factors, and full intelligence from 5+ sources"}],"icon":"/icons/security-scanner.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release as security-nuclei"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-03-25","changes":["Renamed to security-scanner","Added VirusTotal threat intelligence: check_url, check_domain, check_ip, check_hash","Now scans URLs, domains, IPs, and file hashes against 70+ antivirus engines"]},{"version":"0.04","date":"2026-03-25","changes":["Merged security-httpx probe_hosts skill — one tool for all security checks","Multi-source enrichment: URLhaus + ThreatFox (free) on all checks, AbuseIPDB on IP checks","Added security_report — comprehensive one-shot audit with risk scoring","Now queries 5 threat intelligence sources in parallel per check"]}],"premadePrompt":"Run a full security audit on [domain]. I want to know if it's flagged for threats, what vulnerabilities exist, and how its security headers and TLS look.","requirements":[{"name":"virustotal","type":"secret","displayName":"VirusTotal API Key","description":"API key for VirusTotal threat lookups (check_url, check_domain, check_ip, check_hash)"},{"name":"abuseipdb","type":"secret","displayName":"AbuseIPDB API Key","description":"API key for AbuseIPDB IP reputation checks — enriches check_ip with community abuse reports"},{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified","setupGuide":"Your primary website domain, without the protocol or path.\n\nFormat: Just the domain name, e.g. \"example.com\" or \"mysite.co.uk\"\nDo NOT include https://, www., or any path after the domain.\n\nExamples:\n  example.com ✓\n  mysite.co.uk ✓\n  https://example.com ✗\n  www.example.com ✗\n  example.com/page ✗\n\nThis is saved as a default so you don't need to specify it every time you use domain-related tools (SEO, security, DNS, etc.)."}],"credentials":[{"name":"virustotal","type":"secret","displayName":"VirusTotal API Key","description":"API key for VirusTotal threat lookups (check_url, check_domain, check_ip, check_hash)"},{"name":"abuseipdb","type":"secret","displayName":"AbuseIPDB API Key","description":"API key for AbuseIPDB IP reputation checks — enriches check_ip with community abuse reports"},{"name":"domain","type":"credential","displayName":"Primary Domain","description":"Your primary website domain (e.g. example.com) — used as default when no URL is specified","setupGuide":"Your primary website domain, without the protocol or path.\n\nFormat: Just the domain name, e.g. \"example.com\" or \"mysite.co.uk\"\nDo NOT include https://, www., or any path after the domain.\n\nExamples:\n  example.com ✓\n  mysite.co.uk ✓\n  https://example.com ✗\n  www.example.com ✗\n  example.com/page ✗\n\nThis is saved as a default so you don't need to specify it every time you use domain-related tools (SEO, security, DNS, etc.)."}]},{"name":"phishing-email-checker","displayName":"Phishing Email Checker","subtitle":"Check suspicious emails, screenshots, and links","about":"**Phishing Email Checker** analyses suspicious emails and returns a scored verdict — low risk, suspicious, or likely phishing — along with the specific evidence that drove the score. Pass whatever you have: the email text, sender details, raw headers, a screenshot, or just a list of URLs from the message. It works with all of them individually or combined.\n\nThe tool combines local heuristics with live enrichment checks: DNS and email authentication lookups (SPF, DKIM, DMARC), domain registration age, URL reputation checks against threat databases, and vision analysis of screenshots. It surfaces the top signals that matter — sender spoofing, authentication failures, brand impersonation, suspicious link destinations — and gives you a concrete recommendation on what to do next.\n\n### What you can do\n- Score any email for phishing risk with a verdict and confidence level\n- Detect sender spoofing, display name impersonation, and domain lookalikes\n- Analyse email headers for SPF, DKIM, DMARC failures and suspicious Reply-To fields\n- Check links against threat intelligence databases\n- Analyse screenshots of emails using vision — useful when you can't copy the text\n- Run offline-only analysis without live lookups when needed\n\n### Who it's for\nIT security teams, help desk staff, individuals who receive suspicious messages, and anyone building email security workflows or phishing awareness training. Also useful for security researchers and journalists investigating phishing campaigns.\n\n### How to use it\n1. Use **check_email** with whatever evidence you have — even just the sender and subject is a start\n2. Add email_text for content analysis, raw_headers for authentication signals, and links for URL checks\n3. Provide an image_url of a screenshot if you can't copy the email text directly\n4. Set check_live_sources to false for a fast offline-only pass\n\n### Getting started\nNo setup required for basic analysis — add a threat intelligence account for enriched URL lookups.","version":"0.03","categories":["security","communication","analytics"],"currency":"USD","skills":[{"name":"check_email","displayName":"Check Email","description":"Score a suspicious email for phishing risk using sender clues, message content, headers, screenshots, and link checks.","inputSchema":{"type":"object","properties":{"subject":{"type":"string","description":"Email subject line if available"},"from":{"type":"string","description":"Sender line such as \"PayPal Support <alerts@example.com>\" or just the sender email address"},"email_text":{"type":"string","description":"Copied plain text or HTML-stripped email body content"},"raw_headers":{"type":"string","description":"Optional raw email headers including Authentication-Results, Reply-To, and Return-Path"},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"links":{"type":"array","items":{"type":"string"},"description":"Optional list of URLs found in the email body or buttons (max 10 is recommended)"},"check_live_sources":{"type":"boolean","description":"Whether to enrich with live domain and link lookups. Set false for a local heuristics-only pass.","default":true}},"required":[]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Score a suspicious payroll email from copied text only","input":{"subject":"Urgent: direct deposit update required","from":"Payroll Support <payroll-update@gmail.com>","email_text":"Please verify your payroll account immediately to avoid delayed salary payment. Reply with your bank details today.","check_live_sources":false}},{"description":"Check a suspicious password-reset message with headers and a link","input":{"subject":"Security alert: verify your sign-in","from":"Microsoft Security <security@micros0ft-support.com>","email_text":"We detected unusual activity. Verify your account now at https://micros0ft-login.example/secure/login","raw_headers":"Authentication-Results: mx.example; spf=fail smtp.mailfrom=micros0ft-support.com; dkim=fail; dmarc=fail action=quarantine","links":["https://micros0ft-login.example/secure/login"],"check_live_sources":false}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"UI format name for rich report rendering"},"format_data":{"type":"object","description":"Structured report sections for MCP app rendering"},"verdict":{"type":"string","description":"Overall verdict: low_risk, suspicious, or likely_phishing"},"risk_score":{"type":"number","description":"Aggregate phishing-risk score from 0 to 100"},"confidence":{"type":"string","description":"Confidence level in the verdict: low, medium, or high"},"summary":{"type":"string","description":"Plain-English explanation of the main findings"},"recommendation":{"type":"string","description":"Safest next action based on the verdict"},"sender":{"type":"object","description":"Parsed sender details and optional domain profile"},"header_analysis":{"type":"object","description":"Parsed SPF, DKIM, DMARC, Reply-To, and Return-Path signals"},"screenshot_analysis":{"type":"object","description":"Visible evidence extracted from the screenshot when image_url is provided"},"link_checks":{"type":"array","description":"Per-link local and external risk checks","items":{"type":"object"}},"signals":{"type":"array","description":"Top phishing signals that drove the verdict","items":{"type":"object"}},"evidence":{"type":"object","description":"Summary of which evidence types were analyzed"},"sources":{"type":"array","description":"Data sources used during the analysis","items":{"type":"string"}}}},"returns":"A phishing verdict with scored evidence, sender and header findings, link checks, and a recommended next action"}],"workflow":["check_email"],"icon":"/icons/phishing-email-checker.webp","changelog":[{"version":"0.01","date":"2026-04-01","changes":["Initial release with mixed-evidence email phishing analysis for text, headers, screenshots, and links"]},{"version":"0.02","date":"2026-04-01","changes":["Added live sender-domain DNS and reputation checks plus PhishTank URL enrichment"]},{"version":"0.03","date":"2026-04-01","changes":["Added no-key OpenPhish and urlscan enrichment plus URLhaus host checks for linked domains"]}],"premadePrompt":"I received a suspicious email and want to know if it's a phishing attempt. The sender is [sender name and email], the subject is [subject line], and the message says: [paste email text or describe the email].","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"virustotal","type":"secret","displayName":"VirusTotal API Key","description":"API key for VirusTotal threat lookups (check_url, check_domain, check_ip, check_hash)"},{"name":"phishtank","type":"secret","displayName":"PhishTank Application Key","description":"Optional: application key for higher-rate PhishTank phishing URL lookups","envFallback":"PHISHTANK_APP_KEY","acquireUrl":"https://www.phishtank.org/register.php"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"virustotal","type":"secret","displayName":"VirusTotal API Key","description":"API key for VirusTotal threat lookups (check_url, check_domain, check_ip, check_hash)"},{"name":"phishtank","type":"secret","displayName":"PhishTank Application Key","description":"Optional: application key for higher-rate PhishTank phishing URL lookups","envFallback":"PHISHTANK_APP_KEY","acquireUrl":"https://www.phishtank.org/register.php"}]},{"name":"web-scraper","displayName":"Web Scraper","subtitle":"Scrape, crawl & extract web data","about":"**Web Scraper** turns any website into structured, readable data. It handles JavaScript-heavy pages, anti-bot protection, geographic targeting, and AI-powered data extraction — all without writing any code. Whether you need the text from a single page, a full site crawl, or a structured dataset extracted to a schema, it's one tool.\n\nStandard web scrapers break on modern sites that require JavaScript to render. This one renders fully, bypasses bot detection, supports authentication headers, and can extract specific data fields using AI so you get exactly what you asked for, not raw HTML.\n\n### What you can do\n- **scrape_page** — scrape a single page with JS rendering; returns markdown, HTML, or filtered content; handles JSON APIs too\n- **crawl_site** — recursively crawl a site up to a depth and page limit, collecting all content\n- **map_site** — fast URL discovery without content, useful before deciding what to crawl\n- **extract_data** — AI-powered structured extraction — describe what you want or pass a JSON schema\n- **search_web** — search the web and optionally scrape the top results in one call\n- **stealth_scrape / stealth_crawl** — enhanced anti-bot bypass for heavily protected pages\n\n### Who it's for\nResearchers aggregating content from multiple sites. Data teams building datasets from web sources. Developers integrating web content into pipelines. Marketers monitoring competitor pricing and messaging. Analysts tracking content changes over time.\n\n### How to use it\n1. Start with **scrape_page** for a single URL — add onlyMainContent to strip navigation and footers\n2. Use **map_site** to discover URLs on a domain before deciding what to crawl\n3. Use **crawl_site** for recursive multi-page collection with depth and path filters\n4. Use **extract_data** when you want specific fields — pass a schema or describe what to extract in plain English\n5. If you get 403 errors, switch to **stealth_scrape** for enhanced proxy routing\n6. For long React/SPA pages or competitor research, set **fullContent** to true or increase **maxPreviewChars** so the model-facing response includes more than the compact preview\n\n### Getting started\nAll skills work without configuration. For geo-targeted results, add a country code. For authenticated pages, pass custom headers with your credentials.","version":"0.06","categories":["data","development"],"currency":"USD","skills":[{"name":"scrape_page","displayName":"Scrape Page","description":"Scrape a single web page with full JavaScript rendering, anti-bot bypass, and configurable output formats. Supports markdown, HTML, and content filtering by CSS tags.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape"},"formats":{"type":"array","items":{"type":"string"},"description":"Output formats to return (e.g. \"markdown\", \"html\", \"rawHtml\", \"links\", \"screenshot\")"},"onlyMainContent":{"type":"boolean","description":"Extract only the main content, removing navbars, footers, and sidebars"},"includeTags":{"type":"array","items":{"type":"string"},"description":"CSS tags to include in extraction (e.g. [\"article\", \"main\"])"},"excludeTags":{"type":"array","items":{"type":"string"},"description":"CSS tags to exclude from extraction (e.g. [\"nav\", \"footer\"])"},"mobile":{"type":"boolean","description":"Use a mobile user agent and viewport for rendering"},"waitFor":{"type":"number","description":"Milliseconds to wait after page load before capturing content"},"timeout":{"type":"number","description":"Maximum time in milliseconds to wait for the page to load"},"proxy":{"type":"string","enum":["basic","enhanced","auto"],"description":"Proxy type: \"basic\" (fast, default), \"enhanced\" (anti-bot bypass, slower), or \"auto\" (tries basic first, falls back to enhanced)"},"country":{"type":"string","description":"ISO country code for geo-targeted proxy (e.g. \"us\", \"gb\", \"de\", \"jp\")"},"languages":{"type":"array","items":{"type":"string"},"description":"Browser language headers for geo-targeted requests (e.g. [\"en-US\", \"en\"])"},"headers":{"type":"object","description":"Custom HTTP request headers to send with the page request (e.g. {\"Authorization\": \"Bearer token\", \"Accept\": \"application/json\"})"},"fullContent":{"type":"boolean","description":"Include the complete extracted markdown/text in the formatted response as full_content, useful for long React/SPA pages and competitor research"},"full_content":{"type":"boolean","description":"Alias for fullContent"},"maxPreviewChars":{"type":"number","description":"Maximum characters to include in the formatted preview (default 220, max 20000)"},"max_preview_chars":{"type":"number","description":"Alias for maxPreviewChars"}},"required":["url"]},"annotations":{},"examples":[{"description":"Scrape a page as markdown","input":{"url":"https://example.com"}},{"description":"Scrape main content only as HTML and markdown","input":{"url":"https://example.com/blog/post","formats":["markdown","html"],"onlyMainContent":true}},{"description":"Scrape a bot-protected page with enhanced proxy","input":{"url":"https://example.com/protected","proxy":"enhanced","country":"us"}},{"description":"Fetch a JSON API endpoint","input":{"url":"https://api.example.com/data.json"}},{"description":"Fetch an authenticated JSON API","input":{"url":"https://api.example.com/users","headers":{"Authorization":"Bearer token"}}},{"description":"Scrape a long React/SPA competitor page with full content visible","input":{"url":"https://example.com/competitor","fullContent":true,"waitFor":3000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the scrape was successful"},"data":{"type":"object","description":"Scraped page data including content in requested formats, metadata, and links"}}},"returns":"Scraped page content in the requested formats (markdown, HTML, etc.) with metadata, or parsed JSON for API endpoints"},{"name":"crawl_site","displayName":"Crawl Site","description":"Recursively crawl a website starting from a URL, following links up to a configurable depth and page limit. Returns scraped content for all discovered pages.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Starting URL for the crawl"},"limit":{"type":"number","description":"Maximum number of pages to crawl (default 50)"},"maxDepth":{"type":"number","description":"Maximum link-following depth from the starting URL"},"includePaths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to include (e.g. [\"/blog/*\", \"/docs/*\"])"},"excludePaths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to exclude (e.g. [\"/admin/*\", \"/api/*\"])"},"allowSubdomains":{"type":"boolean","description":"Whether to follow links to subdomains of the starting URL"},"allowExternalLinks":{"type":"boolean","description":"Whether to follow links to external domains"},"proxy":{"type":"string","enum":["basic","enhanced","auto"],"description":"Proxy type: \"basic\" (fast, default), \"enhanced\" (anti-bot bypass, slower), or \"auto\" (tries basic first, falls back to enhanced)"},"country":{"type":"string","description":"ISO country code for geo-targeted proxy (e.g. \"us\", \"gb\", \"de\", \"jp\")"},"languages":{"type":"array","items":{"type":"string"},"description":"Browser language headers for geo-targeted requests (e.g. [\"en-US\", \"en\"])"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Crawl a blog with a 20-page limit","input":{"url":"https://example.com/blog","limit":20}},{"description":"Deep crawl docs section only","input":{"url":"https://example.com","limit":100,"maxDepth":3,"includePaths":["/docs/*"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Crawl job status (completed/failed)"},"total":{"type":"number","description":"Total number of pages crawled"},"data":{"type":"array","description":"Array of scraped page results with content and metadata"}}},"returns":"Array of scraped pages with content, metadata, and crawl status"},{"name":"map_site","displayName":"Map Site","description":"Quickly discover all URLs on a website using sitemaps and link analysis. Returns a flat list of URLs without scraping content. Optionally filter by keyword.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Website URL to map"},"limit":{"type":"number","description":"Maximum number of URLs to return (default 1000)"},"search":{"type":"string","description":"Keyword filter to narrow down discovered URLs"}},"required":["url"]},"annotations":{},"examples":[{"description":"Map all URLs on a website","input":{"url":"https://example.com"}},{"description":"Find all blog URLs on a site","input":{"url":"https://example.com","search":"blog"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the map operation was successful"},"links":{"type":"array","items":{"type":"string"},"description":"List of discovered URLs"}}},"returns":"List of discovered URLs from the website via sitemaps and link analysis"},{"name":"extract_data","displayName":"Extract Structured Data","description":"Use AI to extract structured data from one or more web pages. Provide a JSON Schema for typed output or a natural language prompt for flexible extraction.","inputSchema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"URLs to extract data from"},"schema":{"type":"object","description":"JSON Schema defining the structure of data to extract"},"prompt":{"type":"string","description":"Natural language prompt describing what data to extract"}},"required":["urls"]},"annotations":{},"examples":[{"description":"Extract product details using a schema","input":{"urls":["https://example.com/product/123"],"schema":{"type":"object","properties":{"name":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"}}}}},{"description":"Extract company info with a prompt","input":{"urls":["https://example.com/about"],"prompt":"Extract the company name, founding year, and number of employees"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether extraction was successful"},"data":{"type":"object","description":"Extracted structured data matching the provided schema or prompt"}}},"returns":"AI-extracted structured data from the provided URLs, matching the schema or prompt"},{"name":"search_web","displayName":"Search & Scrape","description":"Search the web using a query and optionally scrape the content of each result page. Returns search results with titles, URLs, and snippets, plus full page content when scraping is enabled.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"limit":{"type":"number","description":"Maximum number of search results to return (default 5)"},"scrapeResults":{"type":"boolean","description":"Whether to scrape the full content of each search result page (default false)"},"country":{"type":"string","description":"Country code for localized results (e.g. \"us\", \"gb\", \"de\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for a topic","input":{"query":"best practices for web scraping 2024"}},{"description":"Search and scrape result pages","input":{"query":"firecrawl documentation","limit":3,"scrapeResults":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the search was successful"},"data":{"type":"array","description":"Search results with title, URL, snippet, and optionally full scraped content"}}},"returns":"Search results with titles, URLs, snippets, and optionally full scraped page content in markdown"},{"name":"stealth_scrape","displayName":"Stealth Scrape Page","description":"Scrape a single bot-protected web page using enhanced residential proxies, geo-targeted IPs, and extended rendering wait times. Bypasses Cloudflare, Akamai, DataDome, and similar anti-bot systems.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape"},"formats":{"type":"array","items":{"type":"string"},"description":"Output formats to return (e.g. \"markdown\", \"html\", \"rawHtml\", \"links\", \"screenshot\")"},"onlyMainContent":{"type":"boolean","description":"Extract only the main content, removing navbars, footers, and sidebars"},"includeTags":{"type":"array","items":{"type":"string"},"description":"CSS tags to include in extraction (e.g. [\"article\", \"main\"])"},"excludeTags":{"type":"array","items":{"type":"string"},"description":"CSS tags to exclude from extraction (e.g. [\"nav\", \"footer\"])"},"mobile":{"type":"boolean","description":"Use a mobile user agent and viewport for rendering"},"waitFor":{"type":"number","description":"Milliseconds to wait after page load before capturing content (default 3000)"},"timeout":{"type":"number","description":"Maximum time in milliseconds to wait for the page to load (default 60000)"},"country":{"type":"string","description":"ISO country code for geo-targeted proxy (e.g. \"us\", \"gb\", \"de\", \"jp\"). Default: \"us\""},"languages":{"type":"array","items":{"type":"string"},"description":"Browser language headers (e.g. [\"en-US\", \"en\"])"},"fullContent":{"type":"boolean","description":"Include the complete extracted markdown/text in the formatted response as full_content, useful for long React/SPA pages and competitor research"},"full_content":{"type":"boolean","description":"Alias for fullContent"},"maxPreviewChars":{"type":"number","description":"Maximum characters to include in the formatted preview (default 220, max 20000)"},"max_preview_chars":{"type":"number","description":"Alias for maxPreviewChars"}},"required":["url"]},"annotations":{},"examples":[{"description":"Scrape a Cloudflare-protected page","input":{"url":"https://example.com/protected-page"}},{"description":"Scrape a UK site with geo-targeted proxy","input":{"url":"https://example.co.uk/products","country":"gb","languages":["en-GB"],"onlyMainContent":true}},{"description":"Scrape a protected React/SPA competitor page with full content visible","input":{"url":"https://example.com/competitor","fullContent":true,"waitFor":5000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the scrape was successful"},"data":{"type":"object","description":"Scraped page data including content in requested formats, metadata, and links"}}},"returns":"Scraped page content from bot-protected sites in the requested formats with metadata"},{"name":"stealth_crawl","displayName":"Stealth Crawl Site","description":"Recursively crawl a bot-protected website using enhanced proxies on every page. Bypasses anti-bot systems across the entire crawl, with geo-targeted IPs and extended rendering.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Starting URL for the crawl"},"limit":{"type":"number","description":"Maximum number of pages to crawl (default 50)"},"maxDepth":{"type":"number","description":"Maximum link-following depth from the starting URL"},"includePaths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to include (e.g. [\"/blog/*\", \"/docs/*\"])"},"excludePaths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to exclude (e.g. [\"/admin/*\", \"/api/*\"])"},"allowSubdomains":{"type":"boolean","description":"Whether to follow links to subdomains of the starting URL"},"allowExternalLinks":{"type":"boolean","description":"Whether to follow links to external domains"},"country":{"type":"string","description":"ISO country code for geo-targeted proxy (e.g. \"us\", \"gb\", \"de\", \"jp\"). Default: \"us\""},"languages":{"type":"array","items":{"type":"string"},"description":"Browser language headers (e.g. [\"en-US\", \"en\"])"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Crawl a protected blog section","input":{"url":"https://example.com/blog","limit":20}},{"description":"Crawl a Japanese e-commerce site with local proxy","input":{"url":"https://example.jp/products","limit":30,"country":"jp","languages":["ja"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Crawl job status (completed/failed)"},"total":{"type":"number","description":"Total number of pages crawled"},"data":{"type":"array","description":"Array of scraped page results with content and metadata"}}},"returns":"Array of scraped pages from bot-protected sites with content, metadata, and crawl status"}],"icon":"/icons/web-scraper.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-03-23","changes":["Added proxy, country, and languages parameters to scrape_page and crawl_site for anti-bot bypass and geo-targeting"]},{"version":"0.04","date":"2026-03-23","changes":["Added stealth_scrape and stealth_crawl skills for bot-protected websites"]},{"version":"0.05","date":"2026-04-04","changes":["scrape_page now handles JSON API endpoints — returns parsed JSON and markdown instead of empty content","Added headers parameter to scrape_page for custom request headers (e.g. Authorization)"]},{"version":"0.06","date":"2026-05-13","changes":["Added fullContent and maxPreviewChars controls to scrape_page and stealth_scrape for long React/SPA pages and competitor research"]}],"premadePrompt":"Scrape the content from [URL] and pull out the main text. I want to extract [what data — e.g. product names and prices, article text, contact details].","requirements":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}],"credentials":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}]},{"name":"web-search","displayName":"Web Search","subtitle":"Web, news, images & maps — one tool","about":"**Web Search** gives you structured Google search results across 11 different content types — web pages, news, images, videos, maps, places, reviews, shopping, academic papers, patents, and search suggestions. All returned as clean, parseable data with no HTML to strip out.\n\nThis is the essential tool for anything that requires up-to-date information. Unlike AI knowledge that has a cutoff date, web search pulls live results, breaking news, current prices, and the latest research — exactly what you need when the answer might have changed since training data was collected.\n\n### What you can do\n- **search** — web search with organic results, knowledge panel, and related searches\n- **news** — recent news articles for any topic, with source, date, and snippet\n- **images** — image search results with thumbnails and source URLs\n- **videos** — video results from across the web\n- **maps** — map search for locations, addresses, and businesses\n- **places** — local business listings with ratings, hours, and contact info\n- **reviews** — review aggregations for businesses and products\n- **shopping** — product listings with prices, merchants, and availability\n- **scholar** — academic papers and research citations\n- **patents** — patent search across major patent databases\n- **autocomplete** — search suggestions for a partial query\n\n### Who it's for\nResearchers who need current information beyond training data. Journalists fact-checking and sourcing stories. Marketers tracking news and competitor mentions. Developers building search-augmented applications. Anyone who needs a live, real-world answer.\n\n### How to use it\n1. Use **search** for general web queries — it returns the top organic results with titles, snippets, and URLs\n2. Use **news** for time-sensitive topics — add a time range filter (h, d, w, m, y) to narrow recency\n3. Use **images** when you need visual results or source URLs for images\n4. Add country, location, and domains for geo-targeted results. For UK SMB market research, use country \"gb\" or \"uk\", a specific location such as \"London, UK\", and domains like \"gov.uk\", \"ons.gov.uk\", or local authority domains when broad queries become generic.\n\n### Getting started\nConnect your search account to enable all 11 skills. The **search** skill is the best starting point for most queries.","version":"0.08","categories":["search","data"],"currency":"USD","skills":[{"name":"search","displayName":"Web Search","description":"Search Google and return structured results including organic listings, knowledge graph, answer box, People Also Ask, and related searches.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."},"timeRange":{"type":"string","enum":["h","d","w","m","y"],"description":"Time range filter — h (hour), d (day), w (week), m (month), y (year)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for a general topic","input":{"query":"best project management tools 2025"}},{"description":"Search with time filter for recent results","input":{"query":"OpenAI news","timeRange":"w"}},{"description":"UK SMB market research with local/official source bias","input":{"query":"independent bakeries hiring trends Manchester 2026","country":"gb","location":"Manchester, UK","domains":["gov.uk","ons.gov.uk","manchester.gov.uk"],"timeRange":"y"}}],"pricing":"paid","returns":"Organic results, knowledge graph, answer box, People Also Ask, and related searches"},{"name":"image_search","displayName":"Image Search","description":"Search Google Images and return an array of image results with titles, source URLs, and thumbnail links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for product images","input":{"query":"iPhone 16 Pro wallpaper"}}],"pricing":"paid","returns":"Array of image results with title, imageUrl, imageWidth, imageHeight, source, and link"},{"name":"news_search","displayName":"News Search","description":"Search Google News and return an array of news articles with titles, snippets, publication dates, and source information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."},"timeRange":{"type":"string","enum":["h","d","w","m","y"],"description":"Time range filter — h (hour), d (day), w (week), m (month), y (year)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for recent tech news","input":{"query":"artificial intelligence regulation","timeRange":"d"}}],"pricing":"paid","returns":"Array of news articles with title, link, snippet, date, and source"},{"name":"video_search","displayName":"Video Search","description":"Search Google Videos and return an array of video results with titles, channels, durations, and thumbnail links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for tutorial videos","input":{"query":"TypeScript generics tutorial"}}],"pricing":"paid","returns":"Array of video results with title, link, snippet, channel, date, and duration"},{"name":"maps_search","displayName":"Maps Search","description":"Search Google Maps and return an array of place results with names, addresses, ratings, coordinates, and business details.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for nearby restaurants","input":{"query":"best pizza","location":"Brooklyn, NY"}}],"pricing":"paid","returns":"Array of places with title, address, latitude, longitude, rating, and category"},{"name":"places_search","displayName":"Places Search","description":"Search Google Places and return places with names, addresses, phone numbers, ratings, review counts, and hours. Pass lat + lng + radius_km (or radius_mi) for precise circular geo filtering when a location string is too fuzzy.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."},"lat":{"type":"number","description":"Optional center latitude for radius filtering. Must be paired with lng + radius_km."},"lng":{"type":"number","description":"Optional center longitude for radius filtering. Must be paired with lat + radius_km."},"radius_km":{"type":"number","description":"Optional radius in km around (lat, lng). Mutually exclusive with radius_mi. Common: 1, 5, 10, 25, 50."},"radius_mi":{"type":"number","description":"Optional radius in miles around (lat, lng). Mutually exclusive with radius_km. Common: 1, 3, 5, 10, 25."}},"required":["query"]},"annotations":{},"examples":[{"description":"Find coffee shops in a city","input":{"query":"specialty coffee","location":"San Francisco, CA"}},{"description":"Coffee within 2 km of a precise point in SF","input":{"query":"specialty coffee","location":"San Francisco, CA","lat":37.7749,"lng":-122.4194,"radius_km":2}},{"description":"Coffee within 1 mile of midtown Manhattan","input":{"query":"specialty coffee","location":"New York, NY","lat":40.7549,"lng":-73.984,"radius_mi":1}}],"pricing":"paid","returns":"Array of places with title, address, phone, rating, reviewsCount, and hours; when radius filtering is used each kept place is annotated with distance_km and distance_mi from the center"},{"name":"reviews_search","displayName":"Reviews Search","description":"Retrieve Google reviews for a specific place. Requires a Google Place ID (CID, FID, or place_id) — call places_search or maps_search first to find the place ID, then pass it here. Supports sorting by relevance, newest, highest, or lowest rating.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"placeId":{"type":"string","description":"Google Place ID for the business — required. Get it from places_search or maps_search results (the \"placeId\" field on each item)."},"sortBy":{"type":"string","enum":["relevance","newest","highest","lowest"],"description":"Sort order for reviews"}},"required":["query","placeId"]},"annotations":{},"examples":[{"description":"Get reviews for a restaurant by place ID","input":{"query":"The French Laundry Yountville","placeId":"ChIJaYb0r89VhYARFDAjD7qnXKA"}},{"description":"Get newest reviews by Place ID","input":{"query":"Eleven Madison Park","placeId":"ChIJE4htTWBZwokRxpSBECI0BbQ","sortBy":"newest"}}],"pricing":"paid","returns":"Reviews array with author, rating, date, and snippet, plus place summary"},{"name":"shopping_search","displayName":"Shopping Search","description":"Search Google Shopping and return an array of product results with titles, prices, ratings, merchants, and product links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for a product to compare prices","input":{"query":"Sony WH-1000XM5 headphones"}}],"pricing":"paid","returns":"Array of shopping results with title, price, source, link, rating, and delivery info"},{"name":"scholar_search","displayName":"Scholar Search","description":"Search Google Scholar and return academic papers with titles, authors, citation counts, publication year, and links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."},"year":{"type":"number","description":"Filter results to papers published from this year onwards"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for academic papers on a topic","input":{"query":"transformer architecture attention mechanism"}},{"description":"Search for recent papers only","input":{"query":"large language model alignment","year":2024}}],"pricing":"paid","returns":"Array of academic results with title, link, snippet, citedBy count, year, and authors"},{"name":"patent_search","displayName":"Patent Search","description":"Search Google Patents and return patent results with titles, patent numbers, inventors, filing dates, and abstracts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"},"num":{"type":"number","default":10,"description":"Number of results to return (10, 20, 50, or 100)"},"page":{"type":"number","default":1,"description":"Page number for pagination (starts at 1)"},"location":{"type":"string","description":"Location for geo-targeted results (e.g. 'New York, NY' or 'London, UK')"},"domains":{"type":"array","items":{"type":"string"},"description":"Restrict results with Google site: filters (e.g. ['gov.uk', 'ons.gov.uk']). Useful for niche/local market research."}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for patents in a domain","input":{"query":"natural language processing neural network"}}],"pricing":"paid","returns":"Array of patent results with title, patentNumber, snippet, priorityDate, and inventor"},{"name":"autocomplete","displayName":"Autocomplete","description":"Get Google autocomplete suggestions for a query prefix. Useful for keyword research, content ideation, and understanding search intent.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"country":{"type":"string","default":"us","description":"Country code for localized results (e.g. 'us', 'gb', 'de')"},"language":{"type":"string","default":"en","description":"Language code for results (e.g. 'en', 'es', 'fr')"}},"required":["query"]},"annotations":{},"examples":[{"description":"Get autocomplete suggestions for a partial query","input":{"query":"how to build a"}}],"pricing":"paid","returns":"Array of autocomplete suggestion strings"}],"icon":"/icons/web-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-26","changes":["News, image, video, shopping, places, maps, scholar, and patent results now keep titles, links and key fields visible in concise mode"]},{"version":"0.04","date":"2026-05-08","changes":["reviews_search now requires a placeId up front with a clear hint to fetch one via places_search or maps_search first — replaces the cryptic upstream error"]},{"version":"0.05","date":"2026-05-08","changes":["places_search accepts optional lat, lng, and radius_km for precise circle filtering — drops places outside the radius and annotates kept ones with distance_km. Useful when a location string alone is too fuzzy."]},{"version":"0.06","date":"2026-05-08","changes":["places_search radius filter now accepts radius_mi as an alternative to radius_km — pick whichever unit you prefer. Each kept place is annotated with both distance_km and distance_mi; the card label uses whichever unit the caller passed in."]},{"version":"0.07","date":"2026-05-13","changes":["Added location and domains filters to general search inputs, plus UK country alias handling, so niche SMB/geo/date research can be biased toward local and official sources instead of generic definitions."]},{"version":"0.08","date":"2026-05-28","changes":["places_search now retries empty place results with a punctuation- and accent-normalized query, improving matches for business names with apostrophes, ampersands, and non-ASCII characters."]}],"premadePrompt":"Search for [topic or question] and summarise the top results. Also check if there's any recent news about it from the past week.","requirements":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"},{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries","setupGuide":"A two-letter ISO 3166-1 alpha-2 country code representing your location or target market.\n\nCommon codes: US (United States), GB (United Kingdom), DE (Germany), FR (France),\nAU (Australia), CA (Canada), JP (Japan), IN (India), BR (Brazil), NL (Netherlands)\n\nFind your country code: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n\nEnter the two-letter code in UPPERCASE (e.g. \"US\", not \"us\" or \"United States\").\nThis is saved as a default for country-specific searches, economic data, and localized results."}],"credentials":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"},{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries","setupGuide":"A two-letter ISO 3166-1 alpha-2 country code representing your location or target market.\n\nCommon codes: US (United States), GB (United Kingdom), DE (Germany), FR (France),\nAU (Australia), CA (Canada), JP (Japan), IN (India), BR (Brazil), NL (Netherlands)\n\nFind your country code: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n\nEnter the two-letter code in UPPERCASE (e.g. \"US\", not \"us\" or \"United States\").\nThis is saved as a default for country-specific searches, economic data, and localized results."}]},{"name":"generate-video","displayName":"Generate Video","subtitle":"AI video from text or images","about":"**Generate Video** turns still images into AI-generated video clips. Animate a product photo, bring a portrait to life, or turn a scene into motion — just provide an image and an optional prompt describing how you want it to move.\n\nMultiple models are available with different tradeoffs between quality, speed, duration, and audio support. Use list_models to compare options before generating — costs and quality vary significantly between models.\n\n### What you can do\n- **image_to_video** — animate any still image into a video clip with an optional motion direction prompt\n- **list_models** — browse all available video models with supported durations, resolutions, audio support, and pricing\n- Choose resolution up to 4K, durations from 5 to 10 seconds depending on the model\n- Some models generate synchronized audio alongside the video\n\n### Who it's for\nContent creators animating product shots or lifestyle imagery, marketers producing short-form social video, and developers building AI video workflows. Note that video generation carries a real cost per clip — always check list_models before generating.\n\n### How to use it\n1. First call **list_models** to compare available options and pick the right model for your budget and quality needs\n2. Generate a first-frame image with the generate-image tool if you don't have one ready\n3. Call **image_to_video** with your image URL and a motion prompt like \"the camera slowly pulls back\" or \"she turns and smiles\"\n4. Video generation takes 60-90 seconds — the result comes back as a downloadable video URL\n\n### Getting started\nWorks immediately with no configuration — start with list_models to choose a model that fits your needs.","version":"0.13","categories":["media","ai"],"currency":"USD","skills":[{"name":"image_to_video","displayName":"Image to Video","description":"Animate a still image into a video. Provide an image URL and optional motion prompt. 9 models with different quality and cost tradeoffs.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Source image as a ToolRouter file ID or hosted HTTP(S) URL (JPEG, PNG, WebP)."},"prompt":{"type":"string","description":"Optional text prompt to guide the animation direction and style (e.g. \"the person starts walking towards the camera\")."},"model":{"type":"string","description":"Model to use. Call list_models to see available options sorted by popularity. Omit for the recommended default."},"duration":{"type":"number","description":"Seconds. Veo 3.x: 4–8; Veo 2: 5–8; Kling/LTX/Seedance/Prodia: 5 or 10; Wan: 5; Sora 2: 4/8/12. Call list_models for the live matrix."},"resolution":{"type":"string","enum":["720p","1080p","4k"],"description":"Output video resolution. Available resolutions depend on the model. Defaults to the model default (usually 1080p)."},"enable_audio":{"type":"boolean","default":true,"description":"Generate audio with video. Audio-capable models only — roughly doubles cost. See list_models for support."},"seed":{"type":"number","description":"Random seed for reproducible generation. Same seed + same prompt should produce similar results."},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4"],"description":"Aspect ratio for the generated video. Not all models support all ratios."},"negative_prompt":{"type":"string","description":"Things to avoid in the generated video (e.g. \"blurry, low quality, distorted\"). Not supported by all models."}},"required":["image_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Animate a product photo with LTX (fast, low cost)","input":{"image_url":"https://placehold.co/800x600.png","prompt":"The product slowly rotates on a white pedestal with soft studio lighting","model":"ltx-2.3","duration":5,"enable_audio":false}},{"description":"Animate a landscape image with a fast model","input":{"image_url":"https://placehold.co/800x600.png","model":"ltx-2.3","duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url_direct":{"type":"string","description":"Direct URL to the generated video (temporary, from provider)"},"content_type":{"type":"string","description":"MIME type of the video (e.g. video/mp4)"},"file_name":{"type":"string","description":"Suggested file name"},"file_size":{"type":"number","description":"File size in bytes"},"seed":{"type":"number","description":"Seed used for generation (for reproducibility)"},"request_id":{"type":"string","description":"Request ID"},"model":{"type":"string","description":"Model key used"},"model_name":{"type":"string","description":"Display name of the model"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"resolution":{"type":"string","description":"Output video resolution"},"audio_enabled":{"type":"boolean","description":"Whether audio was generated"},"estimated_cost_usd":{"type":"number","description":"Estimated generation cost in USD"},"source_image":{"type":"string","description":"URL of the source image that was animated"}}},"returns":"Video download URL, source image URL, model used, duration, resolution, audio status, generation cost, and request metadata"},{"name":"list_models","displayName":"List Models","description":"List available video generation models with capabilities, pricing, durations, resolutions, and audio support. Filter by type.","inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["text_to_video","image_to_video"],"description":"Filter models by generation type. Omit to show all models."}}},"annotations":{},"examples":[{"description":"List all available video generation models","input":{}},{"description":"List only models that support text-to-video","input":{"type":"text_to_video"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available video generation models","items":{"type":"object","properties":{"key":{"type":"string","description":"Model registry key"},"display_name":{"type":"string","description":"Human-readable model name"},"supports_text_to_video":{"type":"boolean","description":"Whether the model supports text-to-video"},"supports_image_to_video":{"type":"boolean","description":"Whether the model supports image-to-video"},"cost_usd":{"type":"number","description":"Cost in USD (per second or per video)"},"cost_description":{"type":"string","description":"Human-readable cost description"},"has_audio":{"type":"boolean","description":"Whether the model supports audio generation"},"durations":{"type":"array","description":"Supported durations in seconds, or \"model decides\""},"default_duration":{"type":"number","description":"Default duration in seconds"},"resolutions":{"type":"array","items":{"type":"string"},"description":"Supported resolutions"},"default_resolution":{"type":"string","description":"Default resolution"},"is_default":{"type":"boolean","description":"Whether this is the default model"}}}},"total":{"type":"number","description":"Total number of models returned"},"filter":{"type":"string","description":"Type filter applied (or \"all\")"}}},"returns":"Array of model objects with key, display name, capabilities, pricing, durations, resolutions, and audio support"}],"workflow":["list_models","image_to_video"],"icon":"/icons/generate-video.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-03-23","changes":["Added Prodia as an alternative provider — 6 new models (prodia-veo-fast, prodia-veo, prodia-kling, prodia-sora-2, prodia-seedance-pro, prodia-seedance-lite)"]},{"version":"0.04","date":"2026-03-24","changes":["Added Wan 2.2 Lightning via Prodia — ultra-fast video generation (~24s, $0.09, txt2vid + img2vid)"]},{"version":"0.05","date":"2026-03-24","changes":["Removed hardcoded model names from descriptions — agents discover models dynamically via list_models"]},{"version":"0.06","date":"2026-03-31","changes":["Added Google as a direct provider — 5 new Veo models: Veo 3.1, Veo 3.1 Fast, Veo 3, Veo 3 Fast, Veo 2. Direct Google API access with per-second billing and 4K resolution support."]},{"version":"0.07","date":"2026-04-04","changes":["Unsupported durations now snap to the nearest valid duration instead of failing"]},{"version":"0.08","date":"2026-04-06","changes":["Style references now supported — pass a style reference when generating videos for consistent visual direction"]},{"version":"0.09","date":"2026-04-10","changes":["Image input now required for all video generation — use generate-image to create the first frame, then pass it to image_to_video. Added Seedance 2.0 and Seedance 2.0 Fast models."]},{"version":"0.10","date":"2026-04-14","changes":["Accept personas, scenes, products, and outfits from your file library"]},{"version":"0.11","date":"2026-04-15","changes":["Added OpenRouter as a video provider — dynamically discovers available video models including Veo 3.1, Sora 2, Seedance, and Wan. Models appear automatically as OpenRouter adds support."]},{"version":"0.12","date":"2026-05-08","changes":["Removed text_to_video — generate the first frame with generate-image, then animate it via image_to_video for consistent results across all models."]},{"version":"0.13","date":"2026-05-08","changes":["duration parameter description now lists supported durations per model (Veo 3.1: 4–8s, Kling 3.0: 5/10s, Wan 2.2 Lightning: 5s only, Sora 2: 4/8/12s, etc.) so callers can pick a valid duration without an extra list_models round-trip."]}],"premadePrompt":"Create a short video of [describe the scene, action, and mood]. Make it cinematic with smooth camera movement.","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["image_to_video"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand visual style and colour palette to video prompts\n  - Match the creator's cinematic aesthetic and motion preferences\n  - Reference brand elements when relevant to the scene","produces":["video_insights","creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"lead-finder","displayName":"Lead Finder","subtitle":"Find & enrich companies and people","about":"**Lead Finder** searches over a billion indexed profiles and company records to find the right people and businesses, then enriches them with verified email addresses, phone numbers, and company data. It's designed for the full prospecting workflow — from broad discovery to a clean, enriched lead list ready for outreach.\n\nB2B prospecting tools are usually either broad (you find people but have no contact info) or narrow (you enrich contacts but can't discover new ones). This tool handles both in one place, with AI verification to make sure results actually match your criteria before you spend time on them.\n\n### What you can do\n- **find_companies** — discover companies by industry, funding stage, location, or any natural language criteria\n- **find_people** — find professionals by role, company type, expertise, or location\n- **find_similar** — expand a lead list by finding companies or people similar to a known example\n- **enrich_company** — get structured data on any company from its domain\n- **answer** — get cited research answers to specific questions about companies or markets\n- **prospect** — build a verified list of leads with AI-checked criteria and email enrichment\n- **enrich_person** — get verified email, phone, and job details for a specific person\n- **enrich_people** — batch enrich up to 50 profile URLs with contact information at once\n\n### Who it's for\nSales teams building outbound lists. Founders researching their target market. Recruiters sourcing candidates. Anyone who needs verified B2B contact data without paying for a full data platform subscription.\n\n### How to use it\n1. Start with **find_people** or **find_companies** for fast discovery using natural language criteria\n2. Use **prospect** when you need verified leads with emails — it AI-checks each result against your criteria\n3. Use **enrich_person** or **enrich_people** to add contact info to profiles you already have\n4. Use **find_similar** to expand a list from a competitor URL or known company\n\n### Getting started\nRun **find_people** with a natural language description of who you're looking for, then pass the results to **enrich_people** for verified emails.","version":"0.09","categories":["search","data","marketing"],"currency":"USD","skills":[{"name":"find_companies","displayName":"Find Companies","description":"Find companies matching natural language criteria. Returns structured data including founding year, employee count, funding, revenue, headquarters, and web traffic.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language description of companies to find (e.g. \"fintech startups in Europe with Series A funding\")"},"numResults":{"type":"number","default":10,"description":"Number of results to return (1-100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"Only include results from these domains (e.g. [\"techcrunch.com\", \"bloomberg.com\"])"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"Exclude results from these domains (e.g. [\"reddit.com\", \"wikipedia.org\"])"}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Find companies by industry and stage","input":{"query":"AI infrastructure startups with Series B funding"}},{"description":"Find companies by location","input":{"query":"cybersecurity companies headquartered in Israel","numResults":20}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"numResults":{"type":"number","description":"Number of companies returned"},"companies":{"type":"array","description":"Matching companies with structured data","items":{"type":"object","properties":{"title":{"type":"string","description":"Page title"},"url":{"type":"string","description":"Company website URL"},"name":{"type":"string","description":"Company name"},"description":{"type":"string","description":"Company description"},"foundedYear":{"type":"number","description":"Year founded"},"employeeCount":{"type":"number","description":"Estimated employee count"},"city":{"type":"string","description":"Headquarters city"},"country":{"type":"string","description":"Headquarters country"},"revenueAnnual":{"type":"number","description":"Estimated annual revenue"},"fundingTotal":{"type":"number","description":"Total funding raised"},"fundingLatestRound":{"type":"string","description":"Latest funding round type"},"webTraffic":{"type":"number","description":"Estimated monthly web traffic"}}}}}},"returns":"Company results with name, URL, founding year, employee count, funding, revenue, city, country, and web traffic"},{"name":"find_people","displayName":"Find People","description":"Find people by role, company, expertise, or location. Searches across 1B+ indexed profiles to find relevant professionals matching your criteria.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language description of people to find (e.g. \"VP of Marketing at SaaS companies in New York\")"},"numResults":{"type":"number","default":10,"description":"Number of results to return (1-100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"Only include results from these domains (e.g. [\"techcrunch.com\", \"bloomberg.com\"])"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"Exclude results from these domains (e.g. [\"reddit.com\", \"wikipedia.org\"])"}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Find people by role and industry","input":{"query":"CTOs at fintech startups in London"}},{"description":"Find founders in a space","input":{"query":"founders of developer tools companies"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"numResults":{"type":"number","description":"Number of people returned"},"people":{"type":"array","description":"Matching people profiles","items":{"type":"object","properties":{"title":{"type":"string","description":"Profile/page title"},"url":{"type":"string","description":"Profile URL"},"text":{"type":"string","description":"Profile text excerpt"},"highlights":{"type":"array","items":{"type":"string"},"description":"Relevant text highlights"},"author":{"type":"string","description":"Author name if available"},"publishedDate":{"type":"string","description":"Publication date if available"}}}}}},"returns":"People results with name, URL, profile text, highlights, and source information"},{"name":"find_similar","displayName":"Find Similar","description":"Find companies or websites similar to a given URL. Useful for competitive analysis, discovering lookalike companies, or expanding a list of leads from a known example.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the company or page to find similar matches for"},"numResults":{"type":"number","default":10,"description":"Number of results to return (1-100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"Only include results from these domains (e.g. [\"techcrunch.com\", \"bloomberg.com\"])"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"Exclude results from these domains (e.g. [\"reddit.com\", \"wikipedia.org\"])"},"excludeSourceDomain":{"type":"boolean","default":true,"description":"Whether to exclude results from the same domain as the source URL"},"category":{"type":"string","enum":["company","people"],"description":"Filter results to only companies or people"}},"required":["url"]},"annotations":{},"examples":[{"description":"Find competitors to a company","input":{"url":"https://stripe.com","numResults":10}},{"description":"Find similar companies in a space","input":{"url":"https://linear.app","excludeSourceDomain":true,"category":"company"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"sourceUrl":{"type":"string","description":"The source URL used for similarity search"},"numResults":{"type":"number","description":"Number of similar results returned"},"results":{"type":"array","description":"Similar pages/companies","items":{"type":"object","properties":{"title":{"type":"string","description":"Page or company title"},"url":{"type":"string","description":"URL of the similar page"},"text":{"type":"string","description":"Text excerpt from the page"},"highlights":{"type":"array","items":{"type":"string"},"description":"Relevant text highlights"},"publishedDate":{"type":"string","description":"Publication date if available"},"author":{"type":"string","description":"Author if available"}}}}}},"returns":"Similar pages with title, URL, text content, highlights, and structured data if category is company"},{"name":"enrich_company","displayName":"Enrich Company","description":"Enrich a company domain with structured data — name, description, industry, employee count, headquarters, founding year, key products, recent news, and social profiles.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to enrich (e.g. \"stripe.com\", \"notion.so\")"},"fields":{"type":"array","items":{"type":"string"},"description":"Specific fields to extract (e.g. [\"companyName\", \"industry\", \"employeeCount\"]). Omit for all default fields."}},"required":["domain"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Enrich a company domain","input":{"domain":"stripe.com"}},{"description":"Enrich specific fields only","input":{"domain":"notion.so","fields":["companyName","industry","employeeCount","foundedYear"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"The domain that was enriched"},"found":{"type":"boolean","description":"Whether the domain was found"},"profile":{"type":"object","description":"Enriched company profile (null if not found)","properties":{"companyName":{"type":"string","description":"Company name"},"description":{"type":"string","description":"Company description or summary"},"url":{"type":"string","description":"Company URL"},"foundedYear":{"type":"number","description":"Year founded"},"employeeCount":{"type":"number","description":"Estimated employee count"},"city":{"type":"string","description":"Headquarters city"},"country":{"type":"string","description":"Headquarters country"},"revenueAnnual":{"type":"number","description":"Estimated annual revenue"},"fundingTotal":{"type":"number","description":"Total funding raised"},"fundingLatestRound":{"type":"string","description":"Latest funding round type"},"webTraffic":{"type":"number","description":"Estimated monthly web traffic"}}},"requestedFields":{"type":"array","items":{"type":"string"},"description":"Specific fields requested (null if all default)"}}},"returns":"Structured company profile with name, description, industry, employee count, headquarters, founding year, key products, and more"},{"name":"answer","displayName":"Answer with Sources","description":"Get a direct answer to a research question with source citations. Searches the web, synthesizes an answer, and returns it with linked sources for verification.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Question to answer (e.g. \"How much funding has Stripe raised?\")"},"text":{"type":"boolean","default":false,"description":"Whether to include full source text in each citation (increases response size)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Research a company question","input":{"query":"What is the total funding raised by Figma?"}},{"description":"Get market intelligence","input":{"query":"What are the leading AI code review tools in 2026?","text":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The question that was answered"},"answer":{"type":"string","description":"Synthesized answer to the query"},"numCitations":{"type":"number","description":"Number of source citations"},"citations":{"type":"array","description":"Source citations for the answer","items":{"type":"object","properties":{"url":{"type":"string","description":"Source URL"},"title":{"type":"string","description":"Source page title"},"text":{"type":"string","description":"Full source text (only if text=true was set)"}}}}}},"returns":"Answer string with an array of citations containing URL, title, and optionally full source text"},{"name":"prospect","displayName":"Prospect Leads","description":"Build a verified list of people or companies matching specific criteria, with email and phone enrichment. AI verifies each result against your criteria before returning it.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language description of who to find (e.g. \"UX designers in London at companies with 50-200 employees\")"},"count":{"type":"number","default":25,"description":"Number of verified leads to find (1-1000). Higher counts take longer."},"entity":{"type":"string","enum":["person","company"],"default":"person","description":"Whether to find people or companies"},"criteria":{"type":"array","items":{"type":"string"},"description":"Verification criteria — each result is AI-checked against these (e.g. [\"Must be based in London\", \"Company has 50-200 employees\"]). Max 5."},"include_email":{"type":"boolean","default":true,"description":"Include work email address in results"},"include_phone":{"type":"boolean","default":false,"description":"Include phone number in results (adds cost)"},"sources":{"type":"array","items":{"type":"string"},"description":"Which email sources to query. Default runs hunter, github, and exa-scrape. Prospeo always runs as the primary lookup."}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":360,"mode":"io"}},"examples":[{"description":"Find designers in a city","input":{"query":"UX designers in London at mid-size companies","count":25}},{"description":"Find sales leaders","input":{"query":"VP of Sales at SaaS startups in the US","count":50,"criteria":["Must be VP or Director level","Company is a SaaS business"]}},{"description":"Find funded startups","input":{"query":"AI startups funded in 2025 with less than 100 employees","entity":"company","count":30}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"count":{"type":"number","description":"Requested lead count"},"entity":{"type":"string","description":"Entity type searched"},"num_results":{"type":"number","description":"Number of verified leads returned"},"webset_id":{"type":"string","description":"Webset ID for reference"},"leads":{"type":"array","description":"Verified leads with contact info","items":{"type":"object","properties":{"name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"location":{"type":"string"},"url":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"linkedin_url":{"type":"string"}}}}}},"returns":"Verified list of leads with name, position, company, location, email, phone, and LinkedIn URL"},{"name":"enrich_person","displayName":"Enrich Person","description":"Get email, phone, job title, and company for a specific person. Accepts a LinkedIn URL or name + company.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn profile URL or other profile URL to enrich"},"name":{"type":"string","description":"Person's name (used when URL is not available)"},"company":{"type":"string","description":"Company name (helps identify the right person when using name)"},"sources":{"type":"array","items":{"type":"string"},"description":"Which email sources to query. Default runs hunter, github, and exa-scrape in parallel alongside the Prospeo primary lookup."}}},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Enrich by LinkedIn URL","input":{"url":"https://linkedin.com/in/johndoe"}},{"description":"Enrich by name and company","input":{"name":"Jane Smith","company":"Stripe"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"found":{"type":"boolean","description":"Whether the person was found"},"person":{"type":"object","description":"Enriched person data (null if not found)","properties":{"name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"location":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"linkedin_url":{"type":"string"}}}}},"returns":"Person profile with email, phone, position, company, location, and LinkedIn URL"},{"name":"enrich_people","displayName":"Enrich People (Batch)","description":"Batch enrich up to 50 profile URLs with email, job title, company, and location. Feed in URLs from find_people results to get contact info at scale.","inputSchema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"Array of profile URLs to enrich (LinkedIn, personal sites, etc.). Max 50."},"include_phone":{"type":"boolean","default":false,"description":"Include phone numbers in results (adds cost)"},"sources":{"type":"array","items":{"type":"string"},"description":"Which email sources to query per lead. Default runs hunter, github, and exa-scrape in parallel alongside the Prospeo primary lookup."}},"required":["urls"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Enrich LinkedIn profiles from find_people results","input":{"urls":["https://linkedin.com/in/janedoe","https://linkedin.com/in/johndoe"]}},{"description":"Enrich with phone numbers","input":{"urls":["https://linkedin.com/in/janedoe"],"include_phone":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"num_results":{"type":"number","description":"Number of people enriched"},"emails_found":{"type":"number","description":"Number of emails successfully found"},"phones_found":{"type":"number","description":"Number of phones successfully found"},"webset_id":{"type":"string","description":"Webset ID for reference"},"people":{"type":"array","description":"Enriched people with contact info","items":{"type":"object","properties":{"name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"location":{"type":"string"},"url":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}}}}}},"returns":"Batch enriched contacts with email, phone, position, company, and location for each URL"}],"icon":"/icons/lead-finder.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-03-30","changes":["Added prospect, enrich_person, and enrich_people skills powered by Exa Websets for verified leads with email/phone enrichment"]},{"version":"0.04","date":"2026-03-30","changes":["Added Prospeo as primary enrichment provider for enrich_person and enrich_people — faster, cheaper, verified emails. Websets as fallback."]},{"version":"0.05","date":"2026-04-04","changes":["prospect results now include company name and job title extracted from profile data even when email enrichment is unavailable"]},{"version":"0.06","date":"2026-04-15","changes":["enrich_person and enrich_people return a clean unavailable response when enrichment is not configured, instead of erroring"]},{"version":"0.07","date":"2026-04-15","changes":["Multi-source email cascade: when the primary lookup misses, automatically try Hunter.io, web-page scraping, and verified pattern-guessing to maximize email hit rate. Phone numbers now populated from mobile data."]},{"version":"0.08","date":"2026-04-15","changes":["Email sources now return every candidate with source attribution and objective metadata (hunter_score, commit_count, on_expected_domain, context_score). prospect, enrich_person, and enrich_people expose an optional \"sources\" input so callers can choose which sources to run — no hidden ranking or threshold rules."]},{"version":"0.09","date":"2026-04-15","changes":["find_companies, find_people, enrich_company, and prospect now return structured entity data — company results include name, employees, industry, location, and logo; person results include name, position, company, and location; enrich_company extracts 10+ data points per company including funding, revenue, tech stack, and recent news"]}],"premadePrompt":"Find [job title, e.g. Head of Marketing] contacts at [company type, e.g. Series A SaaS startups] in [location]. I need their verified work email addresses.","requirements":[{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"},{"name":"prospeo","type":"secret","displayName":"Prospeo API Key","description":"Optional: use your own Prospeo key for email enrichment","acquireUrl":"https://app.prospeo.io/api","envFallback":"PROSPEO_API_KEY"},{"name":"hunter","type":"secret","displayName":"Hunter.io API Key","description":"Optional: enables Hunter.io as a fallback email finder when the primary source has no match","acquireUrl":"https://hunter.io/api-keys","envFallback":"HUNTER_API_KEY"}],"credentials":[{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"},{"name":"prospeo","type":"secret","displayName":"Prospeo API Key","description":"Optional: use your own Prospeo key for email enrichment","acquireUrl":"https://app.prospeo.io/api","envFallback":"PROSPEO_API_KEY"},{"name":"hunter","type":"secret","displayName":"Hunter.io API Key","description":"Optional: enables Hunter.io as a fallback email finder when the primary source has no match","acquireUrl":"https://hunter.io/api-keys","envFallback":"HUNTER_API_KEY"}]},{"name":"investor-finder","displayName":"Investor Finder","subtitle":"Build VC & angel outreach lists","about":"**Investor Finder** builds targeted outreach lists of angel investors, micro-VCs, and institutional partners worldwide. Each row is one real person with LinkedIn, verified email where available, investment stage focus, sector thesis, and recent deal history — ready to drop into a CRM or outreach sequence.\n\nFinding the right investors for your stage and sector is the hard part of fundraising. This tool handles the research: discovery, deduplication, email enrichment, and ranking — so you can spend time on conversations, not spreadsheets.\n\n### What you can do\n- **build_outreach_list** — one call returns up to 200 investors matching a natural-language brief, with LinkedIn and emails, ranked by contact quality\n- **search_investors** — exploratory discovery for smaller, more targeted searches\n- **investors_in_company** — reverse lookup to find who backed a specific startup across all rounds\n- **fund_profile** — deep-dive on a VC firm for partners, recent deals, thesis, and check size range\n- **enrich_investor** — turn a name into a fully contactable record with email and investment history\n- **warm_intros** — find public paths from your network to a target investor through past employers, schools, accelerators, and founder friends\n\n### Who it's for\nFounders actively fundraising who need to build a qualified outreach list fast. Investors doing competitive research on who is backing which startups. Anyone who needs to understand a VC firm's portfolio and partners before a conversation.\n\n### How to use it\n1. Start with **build_outreach_list** — pass a natural-language brief like \"European pre-seed B2B SaaS investors\" and set the region filter\n2. Use **fund_profile** to deep-dive a specific firm before reaching out\n3. Use **warm_intros** to find the path from your network to a target investor — pass your past employers, schools, and accelerator batches\n4. Use **enrich_investor** to fill in contact details for specific people you've already identified\n\n### Getting started\nConnect your account to activate email enrichment and higher search limits — basic investor discovery works immediately.","version":"0.03","categories":["search","data","finance"],"currency":"USD","skills":[{"name":"build_outreach_list","displayName":"Build Outreach List","description":"Natural-language query → CSV-ready sheet of up to 200 investors with LinkedIn and emails where available, ranked by contact quality. Runs discovery, dedupe, and second-pass email enrichment in one call. Covers US, UK, Europe, Asia, and emerging markets via the region filter.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural-language brief (e.g. \"European pre-seed B2B SaaS investors\", \"US angels who back solo technical founders\")"},"count":{"type":"number","description":"How many investors to return (1–200, default 100)","default":100},"region":{"type":"string","enum":["us","uk","eu","asia","latam","mena","africa","global"],"description":"High-level region: us, uk, eu, asia, latam, mena, africa, global (default). Ignored if \"locations\" is set.","default":"global"},"stages":{"type":"array","items":{"type":"string","enum":["pre_seed","seed","series_a","series_b","series_c","growth","angel"],"description":"Investment stage"},"description":"Filter by stages: \"angel\", \"pre_seed\", \"seed\", \"series_a\", \"series_b\", \"series_c\", \"growth\"."},"locations":{"type":"array","items":{"type":"string","description":"City, region, or country"},"description":"Filter by investor location (e.g. [\"London\"], [\"NYC\", \"San Francisco\"], [\"Germany\"]). Overrides \"region\" when set."},"sectors":{"type":"array","items":{"type":"string","description":"Sector or thesis keyword"},"description":"Filter by sector or thesis (e.g. [\"climate\"], [\"B2B SaaS\", \"AI\"], [\"fintech\"])."}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":90,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"US — Series A B2B SaaS investors","input":{"query":"Series A B2B SaaS investors who lead rounds","count":100,"region":"us","stages":["series_a"],"sectors":["B2B SaaS"]}},{"description":"UK — angel investors in climate tech","input":{"query":"Angel investors who back climate tech and sustainability founders","count":75,"region":"uk","stages":["angel","pre_seed"],"sectors":["climate tech"]}},{"description":"EU — pre-seed AI investors","input":{"query":"Pre-seed AI and ML infrastructure investors","count":150,"region":"eu","stages":["pre_seed","seed"],"sectors":["AI","ML infrastructure"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"count_returned":{"type":"number","description":"Number of rows in the output"},"with_email":{"type":"number","description":"Rows with a verified work email"},"with_linkedin":{"type":"number","description":"Rows with a LinkedIn URL"},"rows":{"type":"array","description":"CSV-shaped rows: name, firm, title, location, email, linkedin, stage_focus, sectors, last_known_deal, why_match, source"}}},"returns":"CSV-ready rows of investors with LinkedIn, emails, stages, sectors, and match reasoning"},{"name":"search_investors","displayName":"Search Investors","description":"Find angel investors, micro-VCs, and institutional partners matching a natural-language brief. Returns individual people with firm context, LinkedIn profiles, and verified emails where available. Use build_outreach_list for the full 100-row workflow; use this for smaller exploratory searches.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural-language brief (e.g. \"Angel investors who back climate tech\", \"Solo GPs writing $250k checks\")"},"count":{"type":"number","description":"Number of investors to return (1–100, default 25)","default":25},"region":{"type":"string","enum":["us","uk","eu","asia","latam","mena","africa","global"],"description":"High-level region: us, uk, eu, asia, latam, mena, africa, global (default). Ignored if \"locations\" is set.","default":"global"},"stages":{"type":"array","items":{"type":"string","enum":["pre_seed","seed","series_a","series_b","series_c","growth","angel"],"description":"Investment stage"},"description":"Filter by stages: \"angel\", \"pre_seed\", \"seed\", \"series_a\", \"series_b\", \"series_c\", \"growth\"."},"locations":{"type":"array","items":{"type":"string","description":"City, region, or country"},"description":"Filter by investor location (e.g. [\"London\"], [\"NYC\", \"San Francisco\"], [\"Germany\"]). Overrides \"region\" when set."},"sectors":{"type":"array","items":{"type":"string","description":"Sector or thesis keyword"},"description":"Filter by sector or thesis (e.g. [\"climate\"], [\"B2B SaaS\", \"AI\"], [\"fintech\"])."},"include_email":{"type":"boolean","description":"Enrich results with verified work emails (default true)","default":true}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":20,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"US — seed investors for devtools startups","input":{"query":"Seed investors who back developer tools and open-source startups","count":20,"region":"us","stages":["seed"],"sectors":["developer tools","open source"]}},{"description":"UK — London angels for climate","input":{"query":"Angel investors who back climate tech founders","count":25,"region":"uk","locations":["London"]}},{"description":"EU — Series A fintech partners","input":{"query":"Series A fintech investors","count":30,"region":"eu","stages":["series_a"],"sectors":["fintech"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"num_results":{"type":"number","description":"Number of investors returned"},"investors":{"type":"array","description":"People-first investor rows with firm context, stages, sectors, LinkedIn, and verified email where available"}}},"returns":"Ranked list of individual investors with LinkedIn URLs, emails where available, stages, sectors, and location"},{"name":"investors_in_company","displayName":"Investors in Company","description":"Reverse lookup: given a company name or domain, return every known investor across every round. Composes news coverage with SEC Form D filings (US) and Companies House share registers (UK) for structured validation. Works for US, UK, and European startups.","inputSchema":{"type":"object","properties":{"company":{"type":"string","description":"Company name or domain (e.g. \"Linear\", \"linear.app\", \"Revolut\", \"Spotify\")"}},"required":["company"]},"annotations":{"execution":{"estimatedSeconds":15,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"US — Linear (Delaware C-Corp)","input":{"company":"Linear"}},{"description":"UK — Revolut (UK-registered)","input":{"company":"Revolut"}},{"description":"EU — Spotify (Swedish)","input":{"company":"Spotify"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"company":{"type":"string","description":"The company looked up"},"num_rounds":{"type":"number","description":"Number of rounds identified"},"rounds":{"type":"array","description":"Structured rounds with lead, participants, date, amount, and source"},"investor_firms":{"type":"array","description":"Deduplicated list of firms that have invested across all rounds"}}},"returns":"Structured funding rounds with lead investors, participants, dates, and amounts"},{"name":"fund_profile","displayName":"Fund Profile","description":"Deep-dive on a single VC firm: HQ, AUM, stages, sectors, thesis, full partner list, and 10 most recent investments with round sizes and dates. Composes news coverage with SEC Form ADV (US) and Companies House (UK) where applicable.","inputSchema":{"type":"object","properties":{"firm":{"type":"string","description":"Firm name (e.g. \"Index Ventures\", \"Andreessen Horowitz\", \"Accel\", \"Balderton\")"}},"required":["firm"]},"annotations":{"execution":{"estimatedSeconds":25,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"US — Andreessen Horowitz","input":{"firm":"Andreessen Horowitz"}},{"description":"UK — Balderton Capital","input":{"firm":"Balderton Capital"}},{"description":"EU — Index Ventures","input":{"firm":"Index Ventures"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"firm":{"type":"string","description":"Firm name used for lookup"},"profile":{"type":"object","description":"Structured fund profile with partners, recent deals, and metadata"}}},"returns":"Complete fund profile with partners, recent deals, thesis, check size range, and source links"},{"name":"enrich_investor","displayName":"Enrich Investor","description":"Turn a name into a fully contactable record: LinkedIn URL, work email, recent 5 investments, stage focus, sector focus, and short bio. Best used when you already know the person and just need their contact and investment history.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the investor (e.g. \"Jess Lee\", \"Chris Sacca\", \"Suranga Chandratillake\")"},"firm":{"type":"string","description":"Firm name, if institutional (e.g. \"Sequoia Capital\"). Optional for angels."},"linkedin_url":{"type":"string","description":"LinkedIn profile URL if already known — speeds up enrichment"}},"required":["name"]},"annotations":{"execution":{"estimatedSeconds":15,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"US — institutional partner by name + firm","input":{"name":"Jess Lee","firm":"Sequoia Capital"}},{"description":"UK — VC partner by name + firm","input":{"name":"Suranga Chandratillake","firm":"Balderton Capital"}},{"description":"Angel by name only","input":{"name":"Elad Gil"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"found":{"type":"boolean","description":"Whether a contact / enriched record was found"},"investor":{"type":"object","description":"Fully enriched investor record"}}},"returns":"Enriched investor with LinkedIn URL, email where available, recent investments, stages, sectors, and bio"},{"name":"warm_intros","displayName":"Warm Intros","description":"Find public paths from a founder to a target investor based on their network seed (past employers, alma maters, accelerator batches, founder friends, advisors). Returns ranked warm-intro paths with evidence and warmth scores. No LinkedIn auth required.","inputSchema":{"type":"object","properties":{"target_name":{"type":"string","description":"Name of the investor you want to reach (e.g. \"Jess Lee\")"},"target_firm":{"type":"string","description":"Firm name (optional, improves accuracy)"},"current_company":{"type":"string","description":"Founder's current company name"},"past_employers":{"type":"array","items":{"type":"string","description":"Company name"},"description":"Founder's past employers"},"alma_maters":{"type":"array","items":{"type":"string","description":"University name"},"description":"Universities / schools the founder attended"},"accelerator_batches":{"type":"array","items":{"type":"string","description":"Batch name (e.g. \"YC W22\", \"Techstars NYC 2023\", \"Entrepreneur First LD7\")"},"description":"Accelerators the founder has gone through"},"advisors":{"type":"array","items":{"type":"string","description":"Advisor or mentor name"},"description":"Founder's public advisors or mentors"},"founder_friends":{"type":"array","items":{"type":"string","description":"Name of a founder friend"},"description":"Other founders the user knows who could intro"},"city":{"type":"string","description":"Founder's city — used as a weak signal"}},"required":["target_name"]},"annotations":{"execution":{"estimatedSeconds":30,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"US — paths to a Sequoia partner via YC network","input":{"target_name":"Jess Lee","target_firm":"Sequoia Capital","past_employers":["Stripe"],"alma_maters":["Stanford"],"accelerator_batches":["YC W23"],"founder_friends":["Paul Copplestone","Guillermo Rauch"]}},{"description":"UK — paths to a Balderton partner via EF network","input":{"target_name":"Suranga Chandratillake","target_firm":"Balderton Capital","past_employers":["DeepMind"],"alma_maters":["Imperial College London"],"accelerator_batches":["Entrepreneur First LD7"]}},{"description":"EU — paths to an Index partner via Berlin founders","input":{"target_name":"Martin Mignot","target_firm":"Index Ventures","current_company":"Tacto","past_employers":["N26"],"founder_friends":["Sebastian Siemiatkowski"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"target_name":{"type":"string","description":"Investor we are trying to reach"},"num_paths":{"type":"number","description":"Number of warm-intro paths found"},"paths":{"type":"array","description":"Ranked paths with type, warmth, description, bridge evidence, and sources"}}},"returns":"Ranked warm-intro paths from founder network seed to the target investor"}],"workflow":["build_outreach_list","search_investors → enrich_investor","investors_in_company → enrich_investor","fund_profile → warm_intros → enrich_investor"],"icon":"/icons/investor-finder.webp","changelog":[{"version":"0.01","date":"2026-04-09","changes":["Initial release with 6 skills: build_outreach_list, search_investors, investors_in_company, fund_profile, enrich_investor, warm_intros","Global coverage of angels, micro-VCs, and institutional partners","LinkedIn profiles and emails where available","Reverse company lookup across SEC Form D, Companies House, and news","Warm-intro path finding from founder network seed (employers, schools, accelerators, friends)"]},{"version":"0.02","date":"2026-04-09","changes":["UK Companies House integration now returns partners and shareholder data correctly (was silently failing)","Fund profiles now populate HQ, website, vintage, and thesis (was silently returning empty)","Funding round extraction for specific companies is more accurate and finds more historical rounds","Fund profile research pulls full partner lists and recent deals via structured data rather than prose parsing","Warm-intro paths are returned in a single pass with clearer evidence","Empty placeholder rows (no name, firm, or contact) are now filtered out before ranking"]},{"version":"0.03","date":"2026-04-09","changes":["Added region filter (us, uk, eu, asia, latam, mena, africa, global) for faster localized searches","Firm name variants like \"Sequoia\" and \"Sequoia Capital\" now merge in the output","Fund profile asks for total round size on every deal, not just the firm's specific check","Refreshed examples to cover US, UK, and EU explicitly","Reordered skills so build_outreach_list is the default starting point for agents"]}],"premadePrompt":"Find me [e.g. Series A B2B SaaS investors in the US / angel investors in London / pre-seed European climate VCs] — build an outreach list of 100 with LinkedIn profiles (and emails where available), then pick the top 10 for me to personally reach out to.","brain":{"instructions":"When brain knowledge is available:\n  - Pull the founder's current company, stage, sector, and traction from brand/product pages and bake them into the default search query\n  - Pull the founder's past employers, alma maters, accelerator batches, and advisor names for warm_intros seed data\n  - Match sector filters to products and target audiences already in the brain so searches stay on-thesis\n  - Tag results with research_insights so future runs can reuse the shortlist without re-enriching from scratch","produces":["research_insights"]},"requirements":[{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"},{"name":"prospeo","type":"secret","displayName":"Prospeo API Key","description":"Optional: use your own Prospeo key for email enrichment","acquireUrl":"https://app.prospeo.io/api","envFallback":"PROSPEO_API_KEY"}],"credentials":[{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"},{"name":"prospeo","type":"secret","displayName":"Prospeo API Key","description":"Optional: use your own Prospeo key for email enrichment","acquireUrl":"https://app.prospeo.io/api","envFallback":"PROSPEO_API_KEY"}]},{"name":"weather-forecast","displayName":"Weather Forecast","subtitle":"Weather, air quality & UV anywhere","about":"**Weather Forecast** delivers comprehensive weather data for any city or set of coordinates — current conditions, multi-day forecasts, UV index, air quality index, pollen counts by species, and detailed pollutant breakdowns. It's one call for everything you'd need to plan an outdoor event, check travel conditions, or monitor environmental health.\n\nMost weather tools give you temperature and a cloud icon. This one gives you UV exposure levels, ozone and PM2.5 concentrations, pollen counts for trees, grass, and weeds, dew point, visibility, and 16-day forecasts with sunrise and sunset times — all in a single response.\n\n### What you can do\n- **current_weather** — real-time conditions including temperature, wind, precipitation, UV index, air quality, pollen, visibility, and dew point\n- **forecast** — 1 to 16-day outlook with daily highs and lows, rain/snow probability, wind, UV, and sunrise/sunset times\n- **air_quality** — detailed pollutant concentrations (PM2.5, ozone, NO2), pollen by species, UV index, and aerosol optical depth\n\n### Who it's for\nTravel planners checking conditions before a trip. Event organizers assessing outdoor venue suitability. Allergy sufferers monitoring daily pollen levels. Athletes and coaches planning training around weather windows. Developers building location-aware apps that need live environmental data.\n\n### How to use it\n1. Use **current_weather** for a full snapshot of right-now conditions — it includes air quality and pollen in the same call\n2. Use **forecast** to look ahead — specify 1 to 16 days depending on how far out you need to plan\n3. Use **air_quality** when you need deeper pollutant detail beyond the summary AQI score\n4. Pass either a city name or lat/lon coordinates; add units: \"imperial\" for Fahrenheit and mph\n\n### Getting started\nAll skills work without configuration — just pass a city name or coordinates. To set a default location so you don't have to type it every time, save your latitude and longitude as credentials.","version":"0.07","categories":["data"],"currency":"USD","skills":[{"name":"current_weather","displayName":"Current Weather","description":"Current conditions in one call: temperature, wind, humidity, precipitation, snowfall, UV index, AQI (US + EU), pollen, visibility, dew point, and more. Accepts city name or coordinates.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"London\" or \"51.5,-0.12\")"},"units":{"type":"string","enum":["metric","imperial"],"default":"metric","description":"Unit system for temperature and wind speed (\"metric\" or \"imperial\")"}},"required":["location"]},"annotations":{},"examples":[{"description":"Current weather in London","input":{"location":"London"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Resolved location with name, country, coordinates, and timezone"},"current":{"type":"object","description":"Current conditions: temperature, feels_like, humidity, precipitation, condition, cloud_cover, visibility, wind, pressure"},"uv_index":{"type":"object","description":"UV index: value (current), clear_sky (theoretical max without clouds), category (Low/Moderate/High/Very High/Extreme)"},"air_quality":{"type":"object","description":"Air quality: us_aqi, us_aqi_category, european_aqi, european_aqi_category, pm2_5, pm10, ozone, nitrogen_dioxide, sulphur_dioxide, carbon_monoxide, dust, aerosol_optical_depth"},"pollen":{"type":"object","description":"Pollen counts with category for each: alder, birch, grass, mugwort, olive, ragweed (grains/m³, None/Low/Moderate/High/Very High)"},"daylight":{"type":"object","description":"Sunshine and daylight duration in seconds for today"},"units":{"type":"object","description":"Unit labels for all measurements"}}},"returns":"Comprehensive current conditions with UV index, air quality (US + EU AQI), pollen counts, visibility, dew point, snowfall, and daylight duration"},{"name":"forecast","displayName":"Weather Forecast","description":"Get a multi-day weather forecast for any location. Returns daily high/low temperatures, rain/snowfall breakdown, precipitation hours and probability, wind with compass direction, UV index with category, sunshine/daylight duration, solar radiation, and sunrise/sunset for up to 16 days.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"Tokyo\" or \"35.68,139.69\")"},"days":{"type":"number","minimum":1,"maximum":16,"default":7,"description":"Number of forecast days (1-16, default 7)"},"units":{"type":"string","enum":["metric","imperial"],"default":"metric","description":"Unit system for temperature and wind speed (\"metric\" or \"imperial\")"}},"required":["location"]},"annotations":{},"examples":[{"description":"5-day forecast for Tokyo","input":{"location":"Tokyo","days":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Resolved location with name, country, coordinates, and timezone"},"forecast":{"type":"array","description":"Daily entries: date, condition, temperature (high/low), feels_like, precipitation (total, rain, snowfall, probability, hours), wind (speed_max, gusts_max, direction_degrees, direction_compass), uv_index (max, clear_sky_max, category), daylight (sunrise, sunset, sunshine_duration, daylight_duration), solar_radiation_sum"},"units":{"type":"object","description":"Unit labels for all measurements"}}},"returns":"Daily forecast with temperatures, rain/snowfall, precipitation hours, wind direction, UV index, sunshine duration, solar radiation, and sunrise/sunset"},{"name":"air_quality","displayName":"Air Quality","description":"Get detailed air quality, pollen, and UV data for any location. Returns US and European AQI, PM2.5, PM10, gas concentrations (ozone, NO2, SO2, CO), dust, aerosol depth, UV index, and pollen counts for 6 species with severity.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"Beijing\" or \"39.9,116.4\")"}},"required":["location"]},"annotations":{},"examples":[{"description":"Air quality in Beijing","input":{"location":"Beijing"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Resolved location with name, country, coordinates, and timezone"},"air_quality":{"type":"object","description":"Air quality: US and European AQI with categories, pm2_5, pm10, ozone, nitrogen_dioxide, sulphur_dioxide, carbon_monoxide, dust"},"uv_index":{"type":"object","description":"UV index: value (current), clear_sky (max without clouds), category"},"pollen":{"type":"object","description":"Pollen counts with category for each: alder, birch, grass, mugwort, olive, ragweed (grains/m³)"},"units":{"type":"object","description":"Unit labels for measurements"}}},"returns":"Air quality indices (US + EU), pollutants, dust, aerosol depth, UV index, and pollen counts for 6 species with severity categories"}],"icon":"/icons/weather-forecast.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Remove provider branding from user-facing output"]},{"version":"0.03","date":"2026-03-20","changes":["Add UV index and air quality data to current_weather skill"]},{"version":"0.04","date":"2026-03-20","changes":["Add pollen counts (alder, birch, grass, mugwort, olive, ragweed) to current_weather and air_quality","Add visibility, dew point, snowfall, showers, is_day to current_weather","Add dust, aerosol optical depth, European AQI to air quality data","Add sunshine/daylight duration, rain/snowfall breakdown, wind direction, solar radiation to forecast","Add compass direction labels to wind data across all skills"]},{"version":"0.05","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.06","date":"2026-04-04","changes":["Improved UK city resolution — location names with country/region suffixes (e.g. \"Winchester, UK\", \"Winchester England\") now resolve correctly"]},{"version":"0.07","date":"2026-04-13","changes":["Weather data now automatically falls back to a secondary provider when the primary is rate-limited — more reliable results during high-traffic periods"]}],"premadePrompt":"What's the weather like in [city or location] right now? Also give me the forecast for the next [number] days and let me know about air quality.","requirements":[{"name":"openweathermap","type":"secret","displayName":"OpenWeatherMap API Key","description":"Optional: provides weather forecast fallback when the primary source is rate-limited","envFallback":"OPENWEATHERMAP_API_KEY","acquireUrl":"https://home.openweathermap.org/users/sign_up"},{"name":"latitude","type":"credential","displayName":"Latitude","description":"Your default latitude coordinate (e.g. 37.7749) — used as default for location-based queries","setupGuide":"Your default latitude coordinate as a decimal number.\n\nHow to find your coordinates:\n1. Go to https://maps.google.com\n2. Right-click on your location and click the coordinates that appear\n3. The first number is latitude (e.g. 37.7749)\n\nOr search \"[your city] latitude longitude\" in any search engine.\n\nExamples: 37.7749 (San Francisco), 51.5074 (London), -33.8688 (Sydney), 35.6762 (Tokyo)\n\nLatitude ranges from -90 (South Pole) to 90 (North Pole)."},{"name":"longitude","type":"credential","displayName":"Longitude","description":"Your default longitude coordinate (e.g. -122.4194) — used as default for location-based queries","setupGuide":"Your default longitude coordinate as a decimal number.\n\nHow to find your coordinates:\n1. Go to https://maps.google.com\n2. Right-click on your location and click the coordinates that appear\n3. The second number is longitude (e.g. -122.4194)\n\nOr search \"[your city] latitude longitude\" in any search engine.\n\nExamples: -122.4194 (San Francisco), -0.1278 (London), 151.2093 (Sydney), 139.6503 (Tokyo)\n\nLongitude ranges from -180 (west) to 180 (east)."}],"credentials":[{"name":"openweathermap","type":"secret","displayName":"OpenWeatherMap API Key","description":"Optional: provides weather forecast fallback when the primary source is rate-limited","envFallback":"OPENWEATHERMAP_API_KEY","acquireUrl":"https://home.openweathermap.org/users/sign_up"},{"name":"latitude","type":"credential","displayName":"Latitude","description":"Your default latitude coordinate (e.g. 37.7749) — used as default for location-based queries","setupGuide":"Your default latitude coordinate as a decimal number.\n\nHow to find your coordinates:\n1. Go to https://maps.google.com\n2. Right-click on your location and click the coordinates that appear\n3. The first number is latitude (e.g. 37.7749)\n\nOr search \"[your city] latitude longitude\" in any search engine.\n\nExamples: 37.7749 (San Francisco), 51.5074 (London), -33.8688 (Sydney), 35.6762 (Tokyo)\n\nLatitude ranges from -90 (South Pole) to 90 (North Pole)."},{"name":"longitude","type":"credential","displayName":"Longitude","description":"Your default longitude coordinate (e.g. -122.4194) — used as default for location-based queries","setupGuide":"Your default longitude coordinate as a decimal number.\n\nHow to find your coordinates:\n1. Go to https://maps.google.com\n2. Right-click on your location and click the coordinates that appear\n3. The second number is longitude (e.g. -122.4194)\n\nOr search \"[your city] latitude longitude\" in any search engine.\n\nExamples: -122.4194 (San Francisco), -0.1278 (London), 151.2093 (Sydney), 139.6503 (Tokyo)\n\nLongitude ranges from -180 (west) to 180 (east)."}]},{"name":"currency-exchange","displayName":"Currency Exchange","subtitle":"Live and historical exchange rates","about":"**Currency Exchange** converts amounts between 30+ currencies and retrieves live or historical exchange rates from the European Central Bank. Accurate daily rates going back to 1999 — useful for everything from quick conversions to financial reporting.\n\nECB rates are the benchmark for professional financial work in Europe and are widely used for accounting and compliance purposes. This tool makes them directly accessible: convert a specific amount, pull the full rate table for any base currency, or retrieve historical rates for any past date or date range.\n\n### What you can do\n- **convert** — convert any amount between currencies, including one-to-many (e.g. 100 USD to EUR, GBP, and JPY in one call)\n- **latest_rates** — full exchange rate table for any base currency, updated daily\n- **historical_rates** — rates for a specific past date or a date range, back to 1999\n\n### Who it's for\nFinance teams, accountants, travelers, developers, and anyone who needs reliable exchange rates. Particularly useful for financial reporting that requires historically accurate rates on a specific transaction date.\n\n### How to use it\n1. Use **convert** with an amount, source currency, and target currency (or comma-separated list of targets)\n2. Use **latest_rates** when you need the full rate table for a base currency rather than a specific conversion\n3. Use **historical_rates** with a date in YYYY-MM-DD format for past rates, or a range like YYYY-MM-DD..YYYY-MM-DD for a period\n\n### Getting started\nNo setup required — all conversions use publicly available ECB data.","version":"0.04","categories":["finance"],"currency":"USD","skills":[{"name":"convert","displayName":"Convert Currency","description":"Convert an amount between currencies using latest European Central Bank exchange rates. Supports 30+ major currencies including USD, EUR, GBP, JPY, AUD, CAD, CHF, and more.","inputSchema":{"type":"object","properties":{"amount":{"type":"number","description":"Amount to convert (must be positive)"},"from":{"type":"string","description":"Source currency ISO 4217 code (e.g. \"USD\")"},"to":{"type":"string","description":"Target currency ISO 4217 code or comma-separated list (e.g. \"EUR\" or \"EUR,GBP\")"}},"required":["amount","from","to"]},"annotations":{},"examples":[{"description":"Convert 100 USD to EUR","input":{"amount":100,"from":"USD","to":"EUR"}},{"description":"Convert 500 GBP to multiple currencies","input":{"amount":500,"from":"GBP","to":"USD,EUR,JPY"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"amount":{"type":"number","description":"Original amount"},"from":{"type":"string","description":"Source currency code"},"to":{"type":"object","description":"Converted amounts keyed by currency code"},"date":{"type":"string","description":"Date of the exchange rates used (YYYY-MM-DD)"},"rates_source":{"type":"string","description":"Source of the exchange rates"}}},"returns":"Converted amounts with the exchange rate date and source"},{"name":"latest_rates","displayName":"Latest Exchange Rates","description":"Get the latest exchange rates for a base currency against all available currencies or specific targets. Rates are sourced from the European Central Bank and updated daily on business days.","inputSchema":{"type":"object","properties":{"base":{"type":"string","default":"USD","description":"Base currency ISO 4217 code (default \"USD\")"},"targets":{"type":"string","description":"Comma-separated target currency codes to filter (e.g. \"EUR,GBP,JPY\"). Omit for all currencies."}}},"annotations":{},"examples":[{"description":"Latest rates from USD","input":{"base":"USD"}},{"description":"Latest EUR to GBP and JPY rates","input":{"base":"EUR","targets":"GBP,JPY"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"base":{"type":"string","description":"Base currency code"},"date":{"type":"string","description":"Date of the exchange rates (YYYY-MM-DD)"},"rates":{"type":"object","description":"Exchange rates keyed by currency code"},"rates_source":{"type":"string","description":"Source of the exchange rates"}}},"returns":"Exchange rates for the base currency against target currencies with the rate date"},{"name":"historical_rates","displayName":"Historical Exchange Rates","description":"Get exchange rates for a specific date or date range. Useful for financial reporting, invoice conversion, and historical analysis. Data available from 1999-01-04 onwards.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format, or a range as YYYY-MM-DD..YYYY-MM-DD (e.g. \"2025-01-01\" or \"2025-01-01..2025-01-31\")"},"base":{"type":"string","default":"USD","description":"Base currency ISO 4217 code (default \"USD\")"},"targets":{"type":"string","description":"Comma-separated target currency codes to filter (e.g. \"EUR,GBP\"). Omit for all currencies."}},"required":["date"]},"annotations":{},"examples":[{"description":"EUR/USD rate on Jan 1 2025","input":{"date":"2025-01-01","base":"EUR","targets":"USD"}},{"description":"GBP rates over a week","input":{"date":"2025-01-06..2025-01-10","base":"GBP","targets":"USD,EUR"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"base":{"type":"string","description":"Base currency code"},"date":{"type":"string","description":"Date of the rates (single date only)"},"start_date":{"type":"string","description":"Start date (range only)"},"end_date":{"type":"string","description":"End date (range only)"},"rates":{"type":"object","description":"Exchange rates keyed by currency code (single date) or by date then currency code (range)"},"rates_source":{"type":"string","description":"Source of the exchange rates"}}},"returns":"Historical exchange rates for the specified date or date range with source attribution"}],"icon":"/icons/currency-exchange.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Remove provider branding from user-facing output"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.04","date":"2026-04-26","changes":["Clearer error when an unknown currency code is provided"]}],"premadePrompt":"Convert [amount] [currency] to [target currency]. What was the exchange rate on [date]?"},{"name":"crypto-prices","displayName":"Crypto Prices","subtitle":"Live crypto prices and market data","about":"**Crypto Prices** gives you real-time cryptocurrency prices, market data, and trending coins without leaving your workflow. Look up prices for up to 50 coins at once, drill into detailed stats for a single asset, or see what's gaining search momentum right now.\n\nIt covers thousands of coins with live price data, 24-hour changes, market cap, volume, and detailed stats like all-time highs, circulating supply, and 7-day and 30-day performance. The trending feature surfaces what traders are paying attention to before it shows up on the front page.\n\n### What you can do\n- **price** — current price, 24h change, market cap, and volume for one or many coins simultaneously\n- **market_data** — deep statistics for a single coin: ATH, supply, 7d/30d changes, and more\n- **trending** — top coins gaining search momentum in the last 24 hours\n- **search** — find the correct coin ID by name or ticker symbol before running other lookups\n\n### Who it's for\nCrypto traders, investors, and enthusiasts who need quick price checks. Also useful for developers building dashboards, researchers monitoring market movements, and anyone who wants to understand what's trending in the space.\n\n### How to use it\n1. If you're unsure of the exact coin ID, use **search** first — it returns the slugs you'll need\n2. Use **price** with comma-separated coin IDs (e.g. \"bitcoin,ethereum,solana\") for a fast multi-coin check\n3. Use **market_data** when you need deeper stats on a single asset\n4. Use **trending** to see what's gaining attention before making any decisions","version":"0.03","categories":["finance"],"currency":"USD","skills":[{"name":"price","displayName":"Crypto Price","description":"Get current price for one or more cryptocurrencies in any fiat or crypto currency. Returns price, 24h change, market cap, and volume.","inputSchema":{"type":"object","properties":{"coins":{"type":"string","description":"Comma-separated coin IDs (e.g. \"bitcoin,ethereum\")"},"currency":{"type":"string","default":"usd","description":"Target currency for prices (e.g. \"usd\", \"eur\", \"gbp\")"}},"required":["coins"]},"annotations":{},"examples":[{"description":"Get Bitcoin and Ethereum prices in USD","input":{"coins":"bitcoin,ethereum"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"prices":{"type":"object","description":"Price data keyed by coin ID, each with price, market_cap, volume_24h, change_24h_percent"},"currency":{"type":"string","description":"Currency used for prices"},"timestamp":{"type":"string","description":"ISO timestamp of the response"}}},"returns":"Current price, market cap, 24h volume, and 24h change percentage for each requested coin"},{"name":"market_data","displayName":"Market Data","description":"Get detailed market data for a cryptocurrency including all-time high, circulating supply, market cap rank, price change over multiple periods, and community data.","inputSchema":{"type":"object","properties":{"coin":{"type":"string","description":"Coin ID (e.g. \"bitcoin\", \"ethereum\", \"solana\")"},"currency":{"type":"string","default":"usd","description":"Target currency for price data (e.g. \"usd\", \"eur\", \"gbp\")"}},"required":["coin"]},"annotations":{},"examples":[{"description":"Detailed market data for Bitcoin","input":{"coin":"bitcoin"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"coin":{"type":"object","description":"Coin identity (id, name, symbol)"},"market_data":{"type":"object","description":"Detailed market data including current_price, market_cap, market_cap_rank, total_volume, high_24h, low_24h, price changes, ath, supply"},"currency":{"type":"string","description":"Currency used for price data"}}},"returns":"Comprehensive market data including price, market cap rank, volume, price changes over 24h/7d/30d, all-time high, and supply information"},{"name":"trending","displayName":"Trending Coins","description":"Get the top trending cryptocurrencies based on search popularity in the last 24 hours. Useful for identifying market momentum and emerging interest.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"Get trending cryptocurrencies","input":{}}],"pricing":"free","returns":"List of trending coins with name, symbol, market cap rank, BTC price, and popularity score"},{"name":"search","displayName":"Search Coins","description":"Search for cryptocurrencies by name or symbol. Returns matching coins with their IDs for use in other skills like price lookup and market data.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term — coin name or symbol (e.g. \"solana\" or \"SOL\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Solana","input":{"query":"solana"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"coins":{"type":"array","description":"Matching coins with id, name, symbol, market_cap_rank, and thumb","items":{"type":"object","properties":{"id":{"type":"string","description":"Coin ID for use in other skills"},"name":{"type":"string","description":"Full coin name"},"symbol":{"type":"string","description":"Coin ticker symbol"},"market_cap_rank":{"type":"number","description":"Market cap ranking (null if unranked)"},"thumb":{"type":"string","description":"Thumbnail image URL"}}}},"total":{"type":"number","description":"Number of results returned"}}},"returns":"List of matching coins with IDs that can be used in the price and market_data skills"}],"icon":"/icons/crypto-prices.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Remove provider branding from user-facing output"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What is the current price of [Bitcoin / Ethereum / coin name] and how has it changed in the last 24 hours? Show me the top trending cryptocurrencies right now."},{"name":"vulnerability-database","displayName":"Vulnerability Database","subtitle":"Search CVEs & track new advisories","about":"**Vulnerability Database** gives you searchable access to the full CVE catalog — every publicly disclosed security vulnerability, with CVSS severity scores, affected software versions, CWE weakness classifications, and links to official advisories. Look up a specific CVE, search by software name, or pull a daily feed of newly published vulnerabilities.\n\nSecurity teams need this kind of access without building their own data pipeline. Whether you're auditing a dependency list, investigating a reported issue, or running daily threat briefings, this tool turns the full CVE catalog into something you can query conversationally.\n\n### What you can do\n- **search_vulnerabilities** — find CVEs by keyword: software name, library, version, or vulnerability type like \"remote code execution\"\n- **cve_details** — get the full record for a specific CVE ID, including CVSS vector, affected software, CWE type, and reference links\n- **recent_vulnerabilities** — pull CVEs published in the last N days (default 7), ideal for daily threat monitoring\n\n### Who it's for\nSecurity researchers investigating specific software or dependencies. DevSecOps engineers auditing packages in a build pipeline. IT teams responding to disclosed vulnerabilities in their stack. Developers checking whether a library they use has known issues before shipping.\n\n### How to use it\n1. Use **search_vulnerabilities** with a software name or version to find relevant CVEs\n2. Use **cve_details** with a specific CVE ID (e.g. CVE-2021-44228) to get the full technical record\n3. Use **recent_vulnerabilities** with days set to 1 for a daily briefing of new advisories\n4. Filter results by severity — focus on CRITICAL and HIGH for most auditing tasks\n\n### Getting started\nAll three skills are ready to use without any setup. Start with **search_vulnerabilities** and the name of the software or library you want to audit.","version":"0.02","categories":["security"],"currency":"USD","skills":[{"name":"search_vulnerabilities","displayName":"Search Vulnerabilities","description":"Search the vulnerability database by keyword. Find CVEs related to specific software, libraries, or vulnerability types. Returns severity scores, descriptions, and links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search keyword (e.g. \"log4j\", \"apache\", \"remote code execution\")"},"limit":{"type":"number","description":"Max results to return (default 10, max 20)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Log4j vulnerabilities","input":{"query":"log4j"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search keyword used"},"total_results":{"type":"number","description":"Total matching CVEs"},"count":{"type":"number","description":"Number of CVEs returned"},"vulnerabilities":{"type":"array","description":"Matching CVEs, each with id, description, published date, severity (CRITICAL/HIGH/MEDIUM/LOW/UNKNOWN), score (CVSS), cwes, and url"}}},"returns":"List of CVEs with IDs, descriptions, severity scores, and detail links"},{"name":"cve_details","displayName":"CVE Details","description":"Get full details for a specific CVE by its ID. Returns description, CVSS score, severity, weakness types, references, and affected configurations.","inputSchema":{"type":"object","properties":{"cve_id":{"type":"string","description":"CVE identifier (e.g. \"CVE-2021-44228\")"}},"required":["cve_id"]},"annotations":{},"examples":[{"description":"Get details for Log4Shell","input":{"cve_id":"CVE-2021-44228"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"CVE identifier"},"found":{"type":"boolean","description":"Whether the CVE was found"},"description":{"type":"string","description":"Full vulnerability description"},"published":{"type":"string","description":"Publication date"},"last_modified":{"type":"string","description":"Last modification date"},"severity":{"type":"string","description":"Severity level (CRITICAL/HIGH/MEDIUM/LOW/UNKNOWN)"},"score":{"type":"number","description":"CVSS base score (or null)"},"vector":{"type":"string","description":"CVSS vector string (or null)"},"cwes":{"type":"array","items":{"type":"string"},"description":"CWE weakness identifiers"},"references":{"type":"array","items":{"type":"string"},"description":"Reference URLs (up to 10)"},"url":{"type":"string","description":"Detail page URL"}}},"returns":"Full CVE details including description, severity, CVSS vector, CWEs, and references"},{"name":"recent_vulnerabilities","displayName":"Recent Vulnerabilities","description":"Get recently published vulnerabilities. Filter by time period to stay current on new security advisories and emerging threats.","inputSchema":{"type":"object","properties":{"days":{"type":"number","description":"Look back period in days (default 7, max 120)"},"limit":{"type":"number","description":"Max results to return (default 10, max 20)"}}},"annotations":{},"examples":[{"description":"Vulnerabilities published this week","input":{"days":7}}],"pricing":"free","outputSchema":{"type":"object","properties":{"period_days":{"type":"number","description":"Look-back period in days"},"total_results":{"type":"number","description":"Total CVEs published in the period"},"count":{"type":"number","description":"Number of CVEs returned"},"vulnerabilities":{"type":"array","description":"Recent CVEs, each with id, description, published date, severity, score, and detail url"}}},"returns":"Recently published CVEs with severity scores and descriptions"}],"icon":"/icons/vulnerability-database.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Search for known vulnerabilities in [software name or library, e.g. log4j / OpenSSL 3.0] and show me any critical or high-severity CVEs. Also pull up the full details for [CVE ID, e.g. CVE-2021-44228] if you find it."},{"name":"nutrition-data","displayName":"Nutrition Data","subtitle":"Nutrition facts for any food","about":"**Nutrition Data** gives you accurate nutrition facts for any food, ingredient, or packaged product. Whether you're building a meal plan, checking a product label, or tracking macros, it covers both whole foods from the USDA database and millions of branded products from around the world.\n\nLook up raw foods like chicken breast or sweet potato and get a full macro and micronutrient breakdown — calories, protein, carbs, fat, fiber, sodium, vitamins, and minerals. For packaged goods, search by brand name or scan a barcode to get ingredients, allergens, nutri-scores, and per-100g nutrition. The barcode lookup covers international EAN and UPC formats.\n\n### What you can do\n- Search any food by name and get instant macro estimates\n- Get full micronutrient breakdowns including vitamins A/C, iron, calcium, potassium, and zinc\n- Search packaged products by brand name with nutri-score grades (a–e)\n- Look up a product by barcode to get ingredients, allergens, and detailed nutrition\n- Compare foods side-by-side using macro data from search results\n\n### Who it's for\nNutritionists, dietitians, fitness coaches, app developers building health tools, and anyone counting macros or managing dietary requirements. Also useful for food journalists and product researchers who need quick, reliable nutrition data.\n\n### How to use it\n1. Use **search_foods** to find a food by name — returns macros and a unique ID for each match\n2. Pass the ID to **get_nutrition** for the full micronutrient breakdown\n3. Use **search_products** to find branded or packaged foods by name\n4. Use **lookup_barcode** with an EAN-13 or UPC-A barcode for complete product details including allergens\n\n### Getting started\nNo setup required — all four skills run without any API key.","version":"0.04","categories":["data"],"currency":"USD","skills":[{"name":"search_foods","displayName":"Search Foods","description":"Search food databases for foods by name, brand, or keyword. Returns matching foods with basic nutrition info and FDC IDs for detailed lookup.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term like 'chicken breast' or 'coca cola'"},"page_size":{"type":"number","description":"Number of results to return (default 10, max 50)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for chicken breast nutrition","input":{"query":"chicken breast"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_results":{"type":"number","description":"Total number of matching foods in the database"},"foods":{"type":"array","description":"Matching foods with basic nutrition info","items":{"type":"object","properties":{"fdc_id":{"type":"number","description":"FoodData Central ID (use for detailed lookup)"},"description":{"type":"string","description":"Food description"},"brand_owner":{"type":"string","description":"Brand or manufacturer name"},"data_type":{"type":"string","description":"Data source type"},"calories":{"type":"number","description":"Calories (kcal)"},"protein":{"type":"number","description":"Protein (g)"},"fat":{"type":"number","description":"Total fat (g)"},"carbs":{"type":"number","description":"Carbohydrates (g)"}}}}}},"returns":"List of matching foods with FDC IDs, descriptions, brand owners, and key macros (calories, protein, fat, carbs)"},{"name":"get_nutrition","displayName":"Get Nutrition Details","description":"Get detailed nutrition breakdown for a specific food by its FDC ID. Returns comprehensive macro and micronutrient data including vitamins, minerals, and serving sizes.","inputSchema":{"type":"object","properties":{"fdc_id":{"type":"number","description":"FoodData Central ID from search results"}},"required":["fdc_id"]},"annotations":{},"examples":[{"description":"Get full nutrition for a food","input":{"fdc_id":534358}}],"pricing":"free","outputSchema":{"type":"object","properties":{"fdc_id":{"type":"number","description":"FoodData Central ID"},"description":{"type":"string","description":"Food description"},"brand_owner":{"type":"string","description":"Brand or manufacturer name"},"serving_size":{"type":"number","description":"Serving size amount"},"serving_size_unit":{"type":"string","description":"Serving size unit (e.g. g, ml)"},"nutrients":{"type":"object","description":"Nutrient breakdown — each key (e.g. calories, protein, total_fat) maps to {value, unit}","properties":{"calories":{"type":"object","description":"{value, unit} for calories (kcal)"},"protein":{"type":"object","description":"{value, unit} for protein"},"total_fat":{"type":"object","description":"{value, unit} for total fat"},"saturated_fat":{"type":"object","description":"{value, unit} for saturated fat"},"carbohydrates":{"type":"object","description":"{value, unit} for carbohydrates"},"fiber":{"type":"object","description":"{value, unit} for dietary fiber"},"sugars":{"type":"object","description":"{value, unit} for sugars"},"sodium":{"type":"object","description":"{value, unit} for sodium"},"cholesterol":{"type":"object","description":"{value, unit} for cholesterol"},"vitamin_a":{"type":"object","description":"{value, unit} for vitamin A"},"vitamin_c":{"type":"object","description":"{value, unit} for vitamin C"},"calcium":{"type":"object","description":"{value, unit} for calcium"},"iron":{"type":"object","description":"{value, unit} for iron"},"potassium":{"type":"object","description":"{value, unit} for potassium"}}}}},"returns":"Full nutrition breakdown including calories, protein, fats, carbs, fiber, sugars, sodium, cholesterol, vitamins A/C, calcium, iron, and potassium with units"},{"name":"search_products","displayName":"Search Products","description":"Search an international database of packaged food products by name or brand. Returns product names, brands, nutri-scores, images, and nutrition per 100g. Best for branded and packaged foods worldwide.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term like 'nutella' or 'oat milk'"},"page_size":{"type":"number","description":"Number of results to return (default 10, max 50)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for a popular branded product","input":{"query":"nutella"}},{"description":"Search for a product category","input":{"query":"oat milk"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_results":{"type":"number","description":"Total number of matching products"},"products":{"type":"array","description":"Matching products with nutrition per 100g","items":{"type":"object","properties":{"name":{"type":"string","description":"Product name"},"brand":{"type":"string","description":"Brand name"},"nutriscore":{"type":"string","description":"Nutri-Score grade (a-e, a is best)"},"image_url":{"type":"string","description":"Product image URL"},"quantity":{"type":"string","description":"Package quantity (e.g. 500g)"},"categories":{"type":"string","description":"Product categories"},"countries":{"type":"string","description":"Countries where the product is sold"},"nutrition_per_100g":{"type":"object","description":"Nutrition values per 100g","properties":{"calories":{"type":"number","description":"Calories (kcal)"},"protein":{"type":"number","description":"Protein (g)"},"fat":{"type":"number","description":"Fat (g)"},"carbs":{"type":"number","description":"Carbohydrates (g)"},"fiber":{"type":"number","description":"Fiber (g)"},"sugars":{"type":"number","description":"Sugars (g)"},"salt":{"type":"number","description":"Salt (g)"}}}}}}}},"returns":"List of matching products with names, brands, nutri-scores, images, and nutrition per 100g (calories, protein, fat, carbs, fiber, sugars, salt)"},{"name":"lookup_barcode","displayName":"Lookup Barcode","description":"Look up a packaged food product by its barcode (EAN/UPC). Returns full product details including name, brand, ingredients, allergens, nutri-score, packaging, and detailed nutrition per 100g and per serving.","inputSchema":{"type":"object","properties":{"barcode":{"type":"string","description":"Product barcode (EAN-13 or UPC-A), e.g. '3017620422003'"}},"required":["barcode"]},"annotations":{},"examples":[{"description":"Look up Nutella by barcode","input":{"barcode":"3017620422003"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"barcode":{"type":"string","description":"The barcode queried"},"name":{"type":"string","description":"Product name"},"brand":{"type":"string","description":"Brand name"},"nutriscore":{"type":"string","description":"Nutri-Score grade (a-e, a is best)"},"image_url":{"type":"string","description":"Product image URL"},"quantity":{"type":"string","description":"Package quantity"},"packaging":{"type":"string","description":"Packaging type"},"categories":{"type":"string","description":"Product categories"},"ingredients":{"type":"string","description":"Full ingredients list"},"allergens":{"type":"string","description":"Allergen information"},"nutrition_per_100g":{"type":"object","description":"Nutrition values per 100g","properties":{"calories":{"type":"number","description":"Calories (kcal)"},"protein":{"type":"number","description":"Protein (g)"},"fat":{"type":"number","description":"Fat (g)"},"saturated_fat":{"type":"number","description":"Saturated fat (g)"},"carbs":{"type":"number","description":"Carbohydrates (g)"},"fiber":{"type":"number","description":"Fiber (g)"},"sugars":{"type":"number","description":"Sugars (g)"},"salt":{"type":"number","description":"Salt (g)"},"sodium":{"type":"number","description":"Sodium (g)"}}},"nutrition_per_serving":{"type":"object","description":"Nutrition values per serving (if available)","properties":{"calories":{"type":"number","description":"Calories (kcal)"},"protein":{"type":"number","description":"Protein (g)"},"fat":{"type":"number","description":"Fat (g)"},"carbs":{"type":"number","description":"Carbohydrates (g)"}}}}},"returns":"Full product details including name, brand, ingredients, allergens, nutri-score, packaging, and nutrition breakdown per 100g and per serving"}],"workflow":["search_foods → get_nutrition","search_products","lookup_barcode"],"icon":"/icons/nutrition-data.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-21","changes":["Added product search skill with international food database","Added barcode lookup skill"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.04","date":"2026-04-04","changes":["get_nutrition now returns zinc, vitamin B12, magnesium, phosphorus, copper, fiber, sugars, sodium, and potassium alongside calories and macros"]}],"premadePrompt":"What are the nutrition facts for [food item]? I want calories, protein, carbs, fat, and key vitamins."},{"name":"ip-geolocation","displayName":"IP Geolocation","subtitle":"IP to location, ISP & network","about":"**IP Geolocation** turns any IPv4 or IPv6 address into location and network data — city, region, country, timezone, coordinates, ISP, and ASN. Single or batch lookup for up to 10 addresses at once.\n\nIt's the simplest way to add geographic context to IP addresses appearing in server logs, analytics data, security investigations, or user records. The ASN field identifies whether an address belongs to a cloud provider, VPN, datacenter, or residential ISP — useful for bot detection, fraud analysis, and routing logic.\n\n### What you can do\n- **lookup** — geolocate a single IPv4 or IPv6 address to city, region, country, coordinates, timezone, ISP, and ASN\n- **bulk_lookup** — geolocate up to 10 IP addresses in one call for batch enrichment\n\n### Who it's for\nDevelopers enriching analytics with visitor geography, security analysts investigating suspicious traffic, marketing teams segmenting users by region, and data engineers building location-aware pipelines.\n\n### How to use it\n1. Use **lookup** for a single IP — pass the raw dotted-decimal address without port numbers or CIDR notation\n2. Use **bulk_lookup** when you have multiple IPs — pass all of them in one call rather than looping\n3. Use the timezone field for display logic or scheduling; use the asn field to detect cloud providers, VPNs, or known bot networks\n\n### Getting started\nNo setup required — both skills work immediately with any valid IP address.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"lookup","displayName":"IP Lookup","description":"Geolocate an IP address to get its city, region, country, timezone, coordinates, ISP, and organization. Works with both IPv4 and IPv6 addresses.","inputSchema":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 or IPv6 address like '8.8.8.8'"}},"required":["ip"]},"annotations":{},"examples":[{"description":"Geolocate Google DNS IP","input":{"ip":"8.8.8.8"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ip":{"type":"string","description":"IP address that was looked up"},"city":{"type":"string","description":"City name"},"region":{"type":"string","description":"Region or state name"},"country_name":{"type":"string","description":"Full country name"},"country_code":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"continent_code":{"type":"string","description":"Continent code"},"latitude":{"type":"number","description":"Latitude coordinate"},"longitude":{"type":"number","description":"Longitude coordinate"},"timezone":{"type":"string","description":"Timezone identifier (e.g. America/New_York)"},"utc_offset":{"type":"string","description":"UTC offset (e.g. -0500)"},"currency":{"type":"string","description":"Local currency code"},"isp":{"type":"string","description":"ISP or organization name"},"asn":{"type":"string","description":"Autonomous System Number"},"languages":{"type":"string","description":"Comma-separated language codes"}}},"returns":"Geolocation data including city, region, country, coordinates, timezone, ISP, and ASN"},{"name":"bulk_lookup","displayName":"Bulk IP Lookup","description":"Geolocate multiple IP addresses at once. Returns location data for each IP. Maximum 10 IPs per request to respect rate limits.","inputSchema":{"type":"object","properties":{"ips":{"type":"array","items":{"type":"string"},"description":"List of IP addresses to geolocate (max 10)","maxItems":10}},"required":["ips"]},"annotations":{},"examples":[{"description":"Geolocate multiple IPs","input":{"ips":["8.8.8.8","1.1.1.1"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Geolocation result for each IP address","items":{"type":"object","properties":{"ip":{"type":"string","description":"IP address"},"city":{"type":"string","description":"City name"},"region":{"type":"string","description":"Region or state name"},"country_name":{"type":"string","description":"Full country name"},"country_code":{"type":"string","description":"ISO country code"},"latitude":{"type":"number","description":"Latitude coordinate"},"longitude":{"type":"number","description":"Longitude coordinate"},"timezone":{"type":"string","description":"Timezone identifier"},"isp":{"type":"string","description":"ISP or organization name"},"error":{"type":"string","description":"Error message if lookup failed for this IP"}}}},"count":{"type":"number","description":"Number of results returned"}}},"returns":"Array of geolocation results for each IP with city, region, country, coordinates, timezone, and ISP"}],"icon":"/icons/ip-geolocation.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Where is the IP address [IP address] located? I need the city, country, timezone, and ISP."},{"name":"tech-news","displayName":"Tech News","subtitle":"Hacker News: top stories & comments","about":"**Tech News** surfaces the top stories and freshest submissions from Hacker News — the community-ranked feed that developers, founders, and technologists use to stay on top of what matters in tech. Get ranked stories, breaking news, and full comment threads in one place.\n\nWhether you want a daily briefing on the biggest tech stories, need to know what the developer community is saying about a specific topic, or want to track breaking news before it climbs the rankings, this tool gets you there fast. Chain top stories with comment lookup to see both the headline and the community reaction.\n\n### What you can do\n- **top_stories** — current highest-ranked Hacker News stories by score, with titles, URLs, scores, and comment counts\n- **new_stories** — most recently submitted stories regardless of score, useful for catching breaking news early\n- **story_details** — full story data plus the top 10 comments for any story, identified by its ID\n\n### Who it's for\nDevelopers, tech founders, researchers, and anyone who wants a fast read on what's important in technology today. Great for daily briefings, competitive research, and building AI assistants that need current tech context.\n\n### How to use it\n1. Start with **top_stories** to see what the tech community is ranking highest right now — default is 10 stories, max 30\n2. Use **new_stories** to catch breaking submissions before they accumulate votes\n3. Take any story ID from top_stories or new_stories and pass it to **story_details** to read the full discussion and top comments\n\n### Getting started\nNo setup needed — all three skills are available immediately with no credentials required.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"top_stories","displayName":"Top Stories","description":"Get the current top stories on Hacker News ranked by score. Returns titles, URLs, scores, comment counts, and authors. Default 10 stories, max 30.","inputSchema":{"type":"object","properties":{"count":{"type":"number","description":"Number of stories to return (default 10, max 30)","default":10}}},"annotations":{},"examples":[{"description":"Get top 10 Hacker News stories","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"stories":{"type":"array","description":"Stories ranked by score, each with id, title, url, score, by (author), descendants (comment count), time (unix), and time_ago"},"count":{"type":"number","description":"Number of stories returned"}}},"returns":"Array of top Hacker News stories with titles, URLs, scores, authors, comment counts, and relative timestamps"},{"name":"new_stories","displayName":"New Stories","description":"Get the newest stories submitted to Hacker News. Returns the most recently submitted stories regardless of score. Default 10, max 30.","inputSchema":{"type":"object","properties":{"count":{"type":"number","description":"Number of stories to return (default 10, max 30)","default":10}}},"annotations":{},"examples":[{"description":"Get 5 newest stories","input":{"count":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"stories":{"type":"array","description":"Newest stories, each with id, title, url, score, by (author), descendants (comment count), time (unix), and time_ago"},"count":{"type":"number","description":"Number of stories returned"}}},"returns":"Array of newest Hacker News stories with titles, URLs, scores, authors, comment counts, and relative timestamps"},{"name":"story_details","displayName":"Story Details","description":"Get full details for a Hacker News story including the top comments. Useful for getting discussion context and community reactions to a story.","inputSchema":{"type":"object","properties":{"id":{"type":"number","description":"Hacker News story ID"}},"required":["id"]},"annotations":{},"examples":[{"description":"Get story details with comments","input":{"id":1}}],"pricing":"free","outputSchema":{"type":"object","properties":{"story":{"type":"object","description":"Story data with id, title, url, score, by (author), time (unix), time_ago, and text (for self-posts)"},"comments":{"type":"array","description":"Top 10 comments, each with id, by (author), text, time (unix), and time_ago"},"comment_count":{"type":"number","description":"Total number of comments on the story"}}},"returns":"Full story details including title, URL, score, author, self-post text, and top 10 comments with authors and text"}],"icon":"/icons/tech-news.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What are the top tech stories right now? Give me a summary of the most important ones and what people are saying in the comments."},{"name":"academic-research","displayName":"Academic Research","subtitle":"Search papers, authors, citations","about":"**Academic Research** searches millions of peer-reviewed papers, finds authors, and maps citation networks — all without leaving your AI assistant. Whether you're writing a literature review, backing up a claim, or exploring a new field, it gives you credible sources with citation counts and open access links in seconds.\n\nIt solves the problem of manually trawling Google Scholar or PubMed tabs. You can search broadly, sort by influence or recency, then drill into any paper for its full abstract, all authors, references, and related works. It's built for researchers, students, journalists, and anyone who needs evidence-backed answers fast.\n\n### What you can do\n- Search papers by topic, keyword, or title with sorting by relevance, citation count, or date\n- Get full paper details including abstract, all authors, journal, DOI, and citation count\n- Find researchers by name and see their institution, h-index, and publication history\n- Discover related works and reference chains from any paper\n\n### Who it's for\nAcademics and graduate students building literature reviews. Journalists and policy researchers verifying claims. Anyone who needs trustworthy, citable sources rather than blog posts and opinion pieces.\n\n### How to use it\n1. Use **search_papers** with your topic — sort by cited_by_count to find the most influential work, or publication_date for the latest research\n2. Pick the most relevant papers from the results and note their IDs\n3. Call **paper_details** with a paper ID to get the full abstract, references, and related works\n4. Use **search_authors** to find a specific researcher and cross-reference their output\n\n### Getting started\nRun **search_papers** with any topic — no setup or account needed.","version":"0.03","categories":["data"],"currency":"USD","skills":[{"name":"search_papers","displayName":"Search Papers","description":"Search for academic papers by topic, keyword, or title. Returns matching works with titles, authors, publication dates, citation counts, and open access status.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query for academic papers (topic, keyword, or title)"},"page_size":{"type":"number","minimum":1,"maximum":25,"default":10,"description":"Number of results to return (1-25, default 10)"},"sort":{"type":"string","enum":["relevance","cited_by_count","publication_date"],"default":"relevance","description":"Sort order for results (\"relevance\", \"cited_by_count\", or \"publication_date\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for papers on transformer architectures","input":{"query":"transformer neural network architecture"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_results":{"type":"number","description":"Total number of matching works"},"papers":{"type":"array","description":"Matching papers with metadata","items":{"type":"object","properties":{"id":{"type":"string","description":"Work ID"},"title":{"type":"string","description":"Paper title"},"authors":{"type":"array","description":"First 5 authors with name and institution"},"publication_date":{"type":"string","description":"Publication date"},"journal":{"type":"string","description":"Journal or source name"},"cited_by_count":{"type":"number","description":"Number of citations"},"is_open_access":{"type":"boolean","description":"Whether the paper is open access"},"open_access_url":{"type":"string","description":"URL to open access version"},"doi":{"type":"string","description":"Digital Object Identifier"}}}}}},"returns":"List of academic papers with titles, authors, citation counts, and open access info"},{"name":"paper_details","displayName":"Paper Details","description":"Get full metadata for a specific academic paper by its ID or DOI. Returns abstract, all authors, references, related works, and citation information.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Work ID like 'W2741809807' or DOI like '10.1038/s41586-021-03819-2'"}},"required":["id"]},"annotations":{},"examples":[{"description":"Get details for Attention Is All You Need paper","input":{"id":"W2626778328"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Work ID"},"title":{"type":"string","description":"Paper title"},"abstract":{"type":"string","description":"Reconstructed abstract text"},"authors":{"type":"array","description":"All authors with name, institution, and ORCID"},"publication_date":{"type":"string","description":"Publication date"},"journal":{"type":"string","description":"Journal or source name"},"volume":{"type":"string","description":"Journal volume"},"issue":{"type":"string","description":"Journal issue"},"pages":{"type":"string","description":"Page range"},"doi":{"type":"string","description":"Digital Object Identifier"},"cited_by_count":{"type":"number","description":"Number of citations"},"is_open_access":{"type":"boolean","description":"Whether the paper is open access"},"open_access_url":{"type":"string","description":"URL to open access version"},"concepts":{"type":"array","description":"Top 5 concepts with name and relevance score"},"referenced_works_count":{"type":"number","description":"Number of references"},"related_works_count":{"type":"number","description":"Number of related works"}}},"returns":"Full paper metadata including abstract, all authors, concepts, and citation information"},{"name":"search_authors","displayName":"Search Authors","description":"Search for academic authors by name. Returns matching researchers with their affiliations, publication counts, citation counts, and h-index.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Author name to search for (e.g. 'Geoffrey Hinton')"},"page_size":{"type":"number","minimum":1,"maximum":25,"default":10,"description":"Number of results to return (1-25, default 10)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for researcher Geoffrey Hinton","input":{"query":"Geoffrey Hinton"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_results":{"type":"number","description":"Total number of matching authors"},"authors":{"type":"array","description":"Matching authors with metadata","items":{"type":"object","properties":{"id":{"type":"string","description":"Author ID"},"name":{"type":"string","description":"Author display name"},"institution":{"type":"string","description":"Last known institution"},"works_count":{"type":"number","description":"Total number of publications"},"cited_by_count":{"type":"number","description":"Total citation count"},"h_index":{"type":"number","description":"h-index metric"},"orcid":{"type":"string","description":"ORCID identifier"}}}}}},"returns":"List of academic authors with affiliations, publication counts, citation counts, and h-index"}],"icon":"/icons/academic-research.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Remove provider branding from user-facing output"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Research recent academic papers on [topic] and give me a summary of the key findings, citation counts, and the most influential authors in the field."},{"name":"public-holidays","displayName":"Public Holidays","subtitle":"Holidays for any country","about":"**Public Holidays** gives you accurate public holiday data for 100+ countries in seconds. Look up every holiday in a year, check whether a specific date is a holiday, or find the next upcoming holiday from any starting date. It covers national, regional, and bank holidays for countries across every continent.\n\nThis is useful anywhere your work or automation needs to be holiday-aware — scheduling meetings, planning campaigns, sending date-sensitive communications, or building calendar integrations that respect local public holidays.\n\n### What you can do\n- **holidays** — get the full list of public holidays for any country and year, with names, dates, and fixed/variable status\n- **is_holiday** — check whether a specific date is a public holiday in a given country\n- **next_holiday** — find the next upcoming holiday from today or any given date\n- **supported_countries** — list all supported countries with their ISO codes\n\n### Who it's for\nDevelopers building scheduling tools, operations teams planning around international holidays, marketers timing campaigns for global audiences, and anyone who needs to know whether a given date is a working day in a specific country.\n\n### How to use it\n1. Call **holidays** with a country code (e.g. US, GB, DE, AU) and a year to get the full holiday calendar.\n2. Call **is_holiday** with a specific date and country code to check a single date before scheduling something.\n3. Call **next_holiday** with just a country code to find out what's coming up next from today.\n\n### Getting started\nUse ISO 3166-1 alpha-2 country codes (two-letter codes like US, GB, FR). Call **supported_countries** first if you're unsure whether a country is covered.","version":"0.03","categories":["data"],"currency":"USD","skills":[{"name":"holidays","displayName":"List Holidays","description":"Get all public holidays for a country and year. Returns holiday names, dates, types, and whether they are fixed or variable dates. Supports 100+ countries by ISO 3166-1 alpha-2 code.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE')"},"year":{"type":"number","description":"Year to get holidays for (defaults to current year)"}},"required":["country"]},"annotations":{},"examples":[{"description":"US holidays for 2026","input":{"country":"US","year":2026}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country code queried"},"year":{"type":"number","description":"Year queried"},"holidays":{"type":"array","description":"List of public holidays","items":{"type":"object","properties":{"date":{"type":"string","description":"Holiday date (YYYY-MM-DD)"},"name":{"type":"string","description":"Holiday name in English"},"local_name":{"type":"string","description":"Holiday name in local language"},"fixed":{"type":"boolean","description":"Whether this holiday falls on a fixed date each year"},"types":{"type":"array","description":"Holiday type classifications"}}}},"count":{"type":"number","description":"Total number of holidays"}}},"returns":"List of public holidays with names, dates, types, and fixed/variable status"},{"name":"is_holiday","displayName":"Check Holiday","description":"Check if a specific date is a public holiday in a given country. Returns the holiday details if it is, or confirms it is a regular day.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date to check in YYYY-MM-DD format"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE')"}},"required":["date","country"]},"annotations":{},"examples":[{"description":"Is Dec 25 2026 a holiday in the US?","input":{"date":"2026-12-25","country":"US"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date checked"},"country":{"type":"string","description":"Country code checked"},"is_holiday":{"type":"boolean","description":"Whether the date is a public holiday"},"holiday":{"type":"object","description":"Holiday details if the date is a holiday, otherwise null"}}},"returns":"Whether the date is a holiday, with holiday details if applicable"},{"name":"next_holiday","displayName":"Next Holiday","description":"Find the next upcoming public holiday for a country from today or from a specified date. Useful for scheduling and planning around holidays.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE')"},"from_date":{"type":"string","description":"Start date in YYYY-MM-DD format (defaults to today)"}},"required":["country"]},"annotations":{},"examples":[{"description":"Next US holiday","input":{"country":"US"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country code queried"},"from_date":{"type":"string","description":"Date searched from"},"next_holiday":{"type":"object","description":"Next upcoming holiday with date, name, local_name, and days_away"}}},"returns":"Next upcoming public holiday with date, name, and number of days away"},{"name":"supported_countries","displayName":"Supported Countries","description":"List all countries supported by the public holidays API with their ISO codes and names.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"List supported countries","input":{}}],"pricing":"free","returns":"List of supported countries with ISO codes and names"}],"icon":"/icons/public-holidays.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Remove provider branding from user-facing output"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What are the public holidays in [country] for [year]? Is [date] a holiday there, and what is the next upcoming one?","requirements":[{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries"}],"credentials":[{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries"}]},{"name":"competitor-research","displayName":"Competitor Research","subtitle":"Deep intel from a single URL","about":"**Competitor Research** generates a comprehensive intelligence report on any company from a single URL. One call covers identity, positioning, pricing, social media, content strategy, advertising, customer reviews, hiring signals, tech infrastructure, financials, and competitive landscape.\n\nManual competitive research takes hours — scraping websites, checking social channels, reading reviews, searching job boards. This tool runs all of those in parallel and returns a structured report you can act on immediately. It's particularly useful before a pitch, product launch, or market entry decision.\n\n### What you can do\n- **research_competitor** — full intelligence report on any company from its homepage URL, covering up to 12 sections including positioning, pricing, social, ads, reviews, hiring, and infrastructure\n\n### Who it's for\nFounders, product managers, sales teams, and marketers who need a fast read on what competitors are doing. Also useful for investors conducting preliminary due diligence or consultants benchmarking a client's market position.\n\n### How to use it\n1. Use **research_competitor** and pass the competitor's homepage URL\n2. Omit the sections parameter to get all 12 sections, or pass a specific list like [\"identity\", \"positioning\", \"pricing\"] to focus on what matters most\n3. The tool runs asynchronously — it returns a job ID and you poll for the completed report. Advertising and app-store sources emit source-level progress updates while slow providers finish\n4. Chain with other tools for deeper digs: use the advertising section to inform ad library searches, or the hiring section to track strategic direction","version":"0.03","categories":["analytics","marketing"],"currency":"USD","skills":[{"name":"research_competitor","displayName":"Research Competitor","description":"Takes a competitor URL and returns a comprehensive intelligence report including company overview, positioning, pricing, social media presence, content strategy, advertising activity, customer reviews, hiring signals, and competitive landscape.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the competitor website to research (e.g. https://linear.app)"},"sections":{"type":"array","items":{"type":"string","enum":["identity","positioning","social","content","advertising","reviews","landscape","apps","news","hiring","infrastructure","financials"]},"description":"Sections to include in the report. Omit for all sections. Use fewer sections to reduce cost and time."}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":360,"mode":"io"}},"examples":[{"description":"Full competitive research on a SaaS company","input":{"url":"https://linear.app"}},{"description":"Quick positioning and pricing check","input":{"url":"https://notion.so","sections":["identity","positioning"]}},{"description":"Social and advertising deep dive","input":{"url":"https://figma.com","sections":["social","content","advertising"]}}],"pricing":"paid","returns":"Competitive intelligence report with executive summary, key insights, and 12 sections covering identity, positioning, social, content, ads, reviews, and more."}],"homepage":"https://toolrouter.com/tools/competitor-research","icon":"/icons/competitor-research.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-05-13","changes":["Added Phase 4 source-level progress updates for slow advertising and app-store provider calls"]}],"premadePrompt":"Run a full competitive intelligence report on [competitor website URL]. I want to understand their positioning, pricing, social media presence, and what they're advertising.","brain":{"instructions":"When brain knowledge is available:\n  - Reference known competitors and market positioning\n  - Apply industry context to competitive analysis\n  - Focus research on areas most relevant to the user's business","produces":["competitor_insights"]}},{"name":"content-repurposer","displayName":"Content Repurposer","subtitle":"Turn any content into posts, scripts, and articles","about":"**Content Repurposer** transforms any article, blog post, transcript, or long-form content into platform-ready outputs for every channel. Paste a URL or raw text and get social posts, video scripts, newsletters, ad copy, and more — all in one call.\n\nWriting platform-specific content from scratch for every channel is the most time-consuming part of a content operation. This tool handles the reformatting and tone adaptation so you can publish the same core idea across 15 formats without starting over each time. Set a brand voice and it stays consistent across all outputs.\n\n### What you can do\n- **extract_key_points** — analyze content and pull out the core themes, facts, and arguments before repurposing\n- **repurpose** — convert source content into any combination of 15 formats: Twitter thread, LinkedIn post, Instagram caption, Facebook post, Threads post, TikTok script, YouTube script, newsletter, blog article, blog summary, podcast outline, press release, ad copy, or email sequence\n\n### Who it's for\nContent marketers, social media managers, and creators who publish across multiple channels. Also useful for agencies managing content for multiple clients, and for anyone who creates long-form content and wants to maximize its reach.\n\n### How to use it\n1. Use **extract_key_points** first if you want to review the core ideas before choosing output formats\n2. Use **repurpose** with a URL or raw text; pass the formats you want as an array\n3. Set brand_voice to keep tone consistent (e.g. \"conversational and data-driven\" or \"authoritative and professional\")\n4. Set audience and goal for more targeted output — useful when the same content needs different angles for different platforms","version":"0.01","categories":["marketing","ai"],"currency":"USD","skills":[{"name":"repurpose","displayName":"Repurpose Content","description":"Transform content into platform-specific formats. Accepts a URL or raw text and produces native-feeling output for each selected channel — social posts, video scripts, newsletters, blog articles, ad copy, and more.","inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"Source content — a URL to scrape or raw text (article, transcript, notes)"},"formats":{"type":"array","items":{"type":"string","enum":["twitter_thread","linkedin_post","instagram_caption","facebook_post","threads_post","tiktok_script","youtube_script","newsletter","blog_article","blog_summary","podcast_outline","press_release","ad_copy","email_sequence"]},"description":"Output formats to generate"},"brand_voice":{"type":"string","description":"Brand voice and tone guidelines (e.g. \"professional but approachable, data-driven\")"},"audience":{"type":"string","description":"Target audience for the repurposed content"},"goal":{"type":"string","description":"Campaign goal — drive traffic, build authority, generate leads, grow followers"}},"required":["content","formats"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Repurpose a blog post into Twitter and LinkedIn","input":{"content":"https://example.com/blog/ai-marketing-trends-2026","formats":["twitter_thread","linkedin_post"]}},{"description":"Turn meeting notes into a newsletter and social posts","input":{"content":"We discussed the Q1 product launch. Key points: 40% faster onboarding, new self-serve tier, and partner API. Target date March 15. Main objection from sales: pricing confusion on the new tier.","formats":["newsletter","linkedin_post","twitter_thread"],"brand_voice":"Confident and direct, no jargon","audience":"SaaS founders and product managers","goal":"build authority"}},{"description":"Create video scripts and ad copy from an article","input":{"content":"https://example.com/case-study/3x-conversion-rate","formats":["tiktok_script","youtube_script","ad_copy"],"goal":"generate leads"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"source_summary":{"type":"string","description":"Summary of the source content"},"key_points":{"type":"array","description":"Core insights extracted from the source"},"formats":{"type":"object","description":"Repurposed content keyed by format name, each with content, character_count, and format_notes"},"available_formats":{"type":"array","description":"All supported format names"}}},"returns":"Repurposed content for each requested format with character counts and publishing tips"},{"name":"extract_key_points","displayName":"Extract Key Points","description":"Analyze content to extract the most shareable insights, hooks, quotable excerpts, and repurposing angles. Use before repurpose to understand what you are working with, or standalone for content analysis.","inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"Source content — a URL to scrape or raw text (article, transcript, notes)"},"count":{"type":"number","description":"Number of key points to extract (1-15, default: 5)","default":5},"angle":{"type":"string","description":"Specific angle to focus on (e.g. \"actionable tips\", \"data insights\", \"controversial takes\")"}},"required":["content"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Extract key points from a competitor blog post","input":{"content":"https://example.com/blog/state-of-ai-2026","count":7}},{"description":"Find actionable tips from a podcast transcript","input":{"content":"Today we talked about growth strategies for B2B SaaS...","count":5,"angle":"actionable tips founders can implement this week"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"summary":{"type":"string","description":"Core thesis and value summary"},"key_points":{"type":"array","description":"Extracted insights with evidence and repurpose potential"},"hooks":{"type":"array","description":"Compelling opening lines for social posts or emails"},"quotes":{"type":"array","description":"Most quotable excerpts from the source"},"statistics":{"type":"array","description":"Data points and numbers mentioned in the content"},"content_angles":{"type":"array","description":"Different framings for repurposing"}}},"returns":"Summary, key points with repurpose potential scores, scroll-stopping hooks, quotable excerpts, statistics, and content angles"}],"workflow":["extract_key_points","repurpose"],"icon":"/icons/content-repurposer.webp","changelog":[{"version":"0.01","date":"2026-03-30","changes":["Initial release with 15 output formats and key point extraction"]}],"premadePrompt":"Take this article [URL or paste text] and repurpose it into a Twitter thread, a LinkedIn post, and a short newsletter. My brand voice is [e.g. conversational and data-driven].","brain":{"instructions":"When brain knowledge is available:\n    - Maintain brand voice consistency when repurposing content\n    - Reference products and services accurately in repurposed formats\n    - Tailor repurposed content for the target audience","produces":["content_insights"]},"requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}]},{"name":"country-data","displayName":"Country Data","subtitle":"Facts for any country, instantly","about":"**Country Data** gives you structured facts for every country in the world — capitals, populations, languages, currencies, borders, timezones, and flags — instantly, without web searching or parsing Wikipedia.\n\nIt covers all 195 recognized countries with consistent, machine-readable data. Look up a single country by name, ISO code, or currency code. Filter all countries in a region or all countries that speak a given language. Compare two countries side by side. The data is always structured, making it easy to use in tables, reports, or further analysis.\n\n### What you can do\n- **lookup** — full details for any country by name, ISO alpha-2/3 code, or currency code\n- **search** — filter countries by region, language, or currency to get a matching list\n- **compare** — place two countries side by side on population, area, languages, currencies, and more\n\n### Who it's for\nResearchers, analysts, educators, and developers who need reliable country facts quickly. Also useful in geography and international business contexts where accurate ISO codes, dialing codes, or currency information is needed.\n\n### How to use it\n1. Use **lookup** with a country name like \"Japan\", an ISO code like \"JP\", or a currency code like \"JPY\"\n2. Use **search** with filter_by: \"region\" and a value like \"europe\" to get all countries in that region\n3. Use **compare** with two country names to get a structured side-by-side comparison","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"lookup","displayName":"Country Lookup","description":"Get comprehensive data for a country by name, ISO code, or currency code. Returns capital, population, languages, currencies, region, timezones, borders, and flag.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Country name, ISO 3166-1 alpha-2/3 code, or currency code like \"US\", \"USA\", \"United States\", \"USD\""}},"required":["query"]},"annotations":{},"examples":[{"description":"Look up country data for Japan","input":{"query":"Japan"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"name":{"type":"object","description":"Country name (common and official)"},"capital":{"type":"string","description":"Capital city"},"population":{"type":"number","description":"Total population"},"region":{"type":"string","description":"Geographic region"},"subregion":{"type":"string","description":"Geographic subregion"},"languages":{"type":"array","items":{"type":"string"},"description":"Official languages"},"currencies":{"type":"array","description":"Currencies with code, name, and symbol"},"timezones":{"type":"array","items":{"type":"string"},"description":"Timezones"},"borders":{"type":"array","items":{"type":"string"},"description":"Bordering country codes"},"area_km2":{"type":"number","description":"Area in square kilometers"},"flag_emoji":{"type":"string","description":"Flag emoji"},"flag_svg":{"type":"string","description":"Flag SVG URL"},"calling_code":{"type":"string","description":"International calling code"},"iso_codes":{"type":"object","description":"ISO alpha-2 and alpha-3 codes"},"maps":{"type":"object","description":"Google Maps link"}}},"returns":"Comprehensive country data including capital, population, languages, currencies, timezones, borders, flags, and map links"},{"name":"search","displayName":"Search Countries","description":"Search for countries by name, region, language, or currency. Returns matching countries with key information for comparison and filtering.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term (country name, region, language, or currency depending on filter_by)"},"filter_by":{"type":"string","enum":["name","region","language","currency"],"default":"name","description":"What to search by: \"name\", \"region\", \"language\", or \"currency\" (default \"name\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find countries in Europe","input":{"query":"europe","filter_by":"region"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"filter_by":{"type":"string","description":"Filter type used"},"countries":{"type":"array","description":"Matching countries with name, capital, population, region, and flag"},"count":{"type":"number","description":"Number of results returned"}}},"returns":"List of matching countries with name, capital, population, region, and flag emoji"},{"name":"compare","displayName":"Compare Countries","description":"Side-by-side comparison of two countries across key metrics including population, area, GDP, languages, currencies, and timezones.","inputSchema":{"type":"object","properties":{"country_a":{"type":"string","description":"First country name or code to compare"},"country_b":{"type":"string","description":"Second country name or code to compare"}},"required":["country_a","country_b"]},"annotations":{},"examples":[{"description":"Compare USA and China","input":{"country_a":"US","country_b":"CN"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"comparison":{"type":"object","description":"Side-by-side data for country_a and country_b","properties":{"country_a":{"type":"object","description":"Data for first country"},"country_b":{"type":"object","description":"Data for second country"}}}}},"returns":"Side-by-side comparison of two countries including population, area, languages, currencies, and timezones"}],"icon":"/icons/country-data.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What is the capital, population, and official language of [country]? Compare it with [another country] side by side."},{"name":"dictionary-words","displayName":"Dictionary & Words","subtitle":"Definitions, synonyms & rhymes","about":"**Dictionary & Words** covers everything you need for working with the English language — definitions with phonetics and audio, synonyms ranked by closeness, rhymes for songwriting and poetry, and related words for brainstorming.\n\nIt's a single tool for four different language tasks that normally require separate lookups across multiple sites. All results are ranked by relevance. The define skill returns pronunciation audio URLs alongside multiple definitions grouped by part of speech, with examples, synonyms, and antonyms included.\n\n### What you can do\n- **define** — full dictionary entry: phonetics, pronunciation audio, parts of speech, definitions, examples, synonyms, and antonyms\n- **synonyms** — alternatives for any word, ranked by semantic closeness — up to 50 results\n- **rhymes** — words that rhyme with any input word, useful for songwriting and poetry\n- **related_words** — conceptually associated words for brainstorming and ideation\n\n### Who it's for\nWriters, students, poets, songwriters, copywriters, and educators. Also useful for anyone who needs to find the right word quickly, check a definition, or explore the edges of a concept.\n\n### How to use it\n1. Use **define** to look up a word's meaning, pronunciation, and usage examples\n2. Use **synonyms** when you need alternatives — increase the limit for more options\n3. Use **rhymes** for poetry or lyric writing — combine with **synonyms** to find a word that both rhymes and means the right thing\n4. Use **related_words** to explore associated concepts when brainstorming or expanding an idea\n\n### Getting started\nNo setup required. All skills are available immediately.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"define","displayName":"Define Word","description":"Get the definition of a word including phonetics, pronunciations, parts of speech, definitions, examples, synonyms, and antonyms.","inputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The word to define"}},"required":["word"]},"annotations":{},"examples":[{"description":"Define the word serendipity","input":{"word":"serendipity"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The word looked up"},"phonetic":{"type":"string","description":"Phonetic transcription"},"audio_url":{"type":"string","description":"URL to pronunciation audio"},"meanings":{"type":"array","description":"Definitions grouped by part of speech (max 3 definitions per part)"}}},"returns":"Word definition with phonetics, audio pronunciation URL, and meanings grouped by part of speech with examples, synonyms, and antonyms"},{"name":"synonyms","displayName":"Find Synonyms","description":"Find synonyms for a word, ranked by relevance. Returns semantically similar words with scores.","inputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The word to find synonyms for"},"limit":{"type":"number","default":10,"description":"Maximum number of synonyms to return (default 10, max 50)"}},"required":["word"]},"annotations":{},"examples":[{"description":"Find synonyms for happy","input":{"word":"happy"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The input word"},"synonyms":{"type":"array","description":"Synonyms ranked by relevance with scores","items":{"type":"object","properties":{"word":{"type":"string","description":"Synonym word"},"score":{"type":"number","description":"Relevance score"}}}}}},"returns":"List of synonyms ranked by relevance with scores"},{"name":"rhymes","displayName":"Find Rhymes","description":"Find words that rhyme with a given word, ranked by relevance. Useful for creative writing, poetry, songwriting, and wordplay.","inputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The word to find rhymes for"},"limit":{"type":"number","default":10,"description":"Maximum number of rhymes to return (default 10, max 50)"}},"required":["word"]},"annotations":{},"examples":[{"description":"Find words that rhyme with moon","input":{"word":"moon"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The input word"},"rhymes":{"type":"array","description":"Rhyming words ranked by relevance with scores","items":{"type":"object","properties":{"word":{"type":"string","description":"Rhyming word"},"score":{"type":"number","description":"Relevance score"}}}}}},"returns":"List of rhyming words ranked by relevance with scores"},{"name":"related_words","displayName":"Related Words","description":"Find words related to a given word or topic. Returns words that are triggered by or associated with the input, useful for brainstorming and expanding vocabulary.","inputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The word or topic to find related words for"},"limit":{"type":"number","default":10,"description":"Maximum number of related words to return (default 10, max 50)"}},"required":["word"]},"annotations":{},"examples":[{"description":"Find words related to ocean","input":{"word":"ocean"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"word":{"type":"string","description":"The input word"},"related":{"type":"array","description":"Related words ranked by relevance with scores","items":{"type":"object","properties":{"word":{"type":"string","description":"Related word"},"score":{"type":"number","description":"Relevance score"}}}}}},"returns":"List of related words ranked by relevance with scores"}],"icon":"/icons/dictionary-words.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What does [word] mean? Give me synonyms I can use in my writing, and find some words that rhyme with it."},{"name":"world-economy","displayName":"World Economy","subtitle":"16000+ World Bank indicators & data","about":"**World Economy** gives you access to 16,000+ economic, social, and environmental indicators from the World Bank — covering every country from 1960 to the present. Look up GDP, population, inflation, unemployment, poverty rates, education, health, trade balances, and hundreds more data series, all in a single tool.\n\nThis is the gold standard for macroeconomic research. The data goes back over 60 years, so you can track how a country has developed, compare performance across nations, and surface long-term trends that short-term datasets miss entirely.\n\n### What you can do\n- **indicator** — get a time series for a specific country and indicator (e.g. GDP, inflation, unemployment rate) over any number of years\n- **compare_countries** — run the same indicator across multiple countries side-by-side for direct comparison\n- **search_indicators** — find indicator codes by keyword when you're not sure of the exact code\n\n### Who it's for\nEconomists and analysts building country reports or investment theses. Journalists and researchers writing about global development, trade, or inequality. Policy teams comparing national performance on health, education, or environmental metrics. Students and academics studying macroeconomics with real data.\n\n### How to use it\n1. Use **search_indicators** with a keyword like \"gdp\", \"unemployment\", or \"carbon emissions\" to find the right indicator code\n2. Use **indicator** with a country code (e.g. \"US\", \"GB\", \"CN\") and the indicator code to get the historical time series\n3. Use **compare_countries** with multiple country codes (semicolon-separated) to compare the same metric across nations\n4. Use country \"all\" for the world aggregate\n\n### Getting started\nAll skills are free and ready to use without any setup. Common indicator codes: GDP (NY.GDP.MKTP.CD), population (SP.POP.TOTL), inflation (FP.CPI.TOTL.ZG), unemployment (SL.UEM.TOTL.ZS).","version":"0.02","categories":["finance","data"],"currency":"USD","skills":[{"name":"indicator","displayName":"Get Indicator","description":"Get a specific economic indicator for a country over time. Common indicators: GDP (NY.GDP.MKTP.CD), population (SP.POP.TOTL), inflation (FP.CPI.TOTL.ZG), unemployment (SL.UEM.TOTL.ZS).","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code like 'US', 'GB', or 'all' for world"},"indicator":{"type":"string","description":"Indicator code like 'NY.GDP.MKTP.CD'"},"years":{"type":"number","default":10,"description":"Number of most recent years to return"}},"required":["country","indicator"]},"annotations":{},"examples":[{"description":"US GDP over the last 5 years","input":{"country":"US","indicator":"NY.GDP.MKTP.CD","years":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country queried"},"indicator":{"type":"object","description":"Indicator code and human-readable name"},"data":{"type":"array","description":"Time series of year/value pairs"},"unit":{"type":"string","description":"Unit description"}}},"returns":"Time series of the requested indicator with year and value pairs"},{"name":"compare_countries","displayName":"Compare Countries","description":"Compare an economic indicator across multiple countries for the most recent available year. Useful for benchmarking and cross-country analysis.","inputSchema":{"type":"object","properties":{"countries":{"type":"string","description":"Semicolon-separated ISO codes like 'US;GB;DE;JP'"},"indicator":{"type":"string","description":"Indicator code like 'NY.GDP.MKTP.CD'"}},"required":["countries","indicator"]},"annotations":{},"examples":[{"description":"Compare GDP across G7 countries","input":{"countries":"US;GB;DE;FR;JP;CA;IT","indicator":"NY.GDP.MKTP.CD"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"indicator":{"type":"object","description":"Indicator code and human-readable name"},"comparison":{"type":"array","description":"Country comparison entries sorted by value descending"}}},"returns":"Comparison of the indicator across countries sorted by value descending"},{"name":"search_indicators","displayName":"Search Indicators","description":"Search for available economic indicators by keyword. There are 16,000+ indicators covering economics, health, education, environment, and more.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword like 'gdp' or 'education'"},"page_size":{"type":"number","default":10,"description":"Number of results to return"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find indicators about education","input":{"query":"education"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used"},"indicators":{"type":"array","description":"Matching indicators with code, name, and description"},"count":{"type":"number","description":"Number of results returned"}}},"returns":"List of matching economic indicators with codes, names, and descriptions"}],"icon":"/icons/world-economy.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Show me the GDP and unemployment rate for [country] over the last 10 years. How does it compare to [other country or countries]?","requirements":[{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries"}],"credentials":[{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries"}]},{"name":"earthquake-monitor","displayName":"Earthquake Monitor","subtitle":"Live & historical earthquake data","about":"**Earthquake Monitor** tracks seismic activity worldwide in real time and lets you search historical earthquake data by location, magnitude, and date. Whether you're monitoring a specific region or just want to know what's shaking right now, the data updates continuously from authoritative sources.\n\nIt covers everything from micro-tremors to major events, with tsunami alerts, felt reports, and severity levels included. You can narrow results to any area by providing coordinates and a search radius — useful for safety monitoring, research, or just staying informed about activity near family and friends.\n\n### What you can do\n- **recent** — get current earthquake activity filtered by time period (last hour, day, week, or month) and minimum magnitude\n- **search** — find earthquakes in a specific geographic area by coordinates and radius, with date range and magnitude filters\n\n### Who it's for\nResearchers, journalists, emergency management professionals, and anyone who lives in or monitors seismically active regions. Also useful for travel planning and general situational awareness.\n\n### How to use it\n1. For current global activity, call **recent** with a time period and magnitude threshold — \"significant\" returns newsworthy events, \"4.5\" returns events people can feel.\n2. For location-specific history, call **search** with latitude, longitude, and a radius in kilometres.\n3. Save your default coordinates as credentials so location-based queries work without specifying them each time.\n\n### Getting started\nCall **recent** with period \"week\" and min_magnitude \"significant\" for a quick overview of recent major events worldwide.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"recent","displayName":"Recent Earthquakes","description":"Get recent earthquakes worldwide, filterable by time period and minimum magnitude. Returns location, magnitude, depth, and tsunami alerts.","inputSchema":{"type":"object","properties":{"period":{"type":"string","enum":["hour","day","week","month"],"default":"day","description":"Time period to query: \"hour\", \"day\", \"week\", or \"month\""},"min_magnitude":{"type":"string","enum":["significant","4.5","2.5","1.0","all"],"default":"4.5","description":"Minimum magnitude filter: \"significant\", \"4.5\", \"2.5\", \"1.0\", or \"all\""}}},"annotations":{},"examples":[{"description":"Significant earthquakes this week","input":{"period":"week","min_magnitude":"significant"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Time period queried"},"min_magnitude":{"type":"string","description":"Magnitude filter used"},"earthquakes":{"type":"array","description":"List of earthquakes with magnitude, location, depth, tsunami, and alert info"},"count":{"type":"number","description":"Total number of earthquakes matching criteria"},"generated":{"type":"string","description":"Timestamp when the feed was generated"}}},"returns":"List of recent earthquakes with magnitude, location, depth, tsunami alerts, and felt reports"},{"name":"search","displayName":"Search Earthquakes","description":"Search for earthquakes by location, date range, and magnitude. Find earthquakes near a specific point within a radius, or within a geographic bounding box.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of search center point"},"longitude":{"type":"number","description":"Longitude of search center point"},"radius_km":{"type":"number","default":100,"description":"Search radius in kilometers (max 20001)"},"min_magnitude":{"type":"number","default":4,"description":"Minimum earthquake magnitude"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"},"limit":{"type":"number","default":20,"description":"Maximum number of results (max 100)"}}},"annotations":{},"examples":[{"description":"Earthquakes near Tokyo in the last month","input":{"latitude":35.6762,"longitude":139.6503,"radius_km":200,"min_magnitude":3,"start_date":"2026-02-12"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"earthquakes":{"type":"array","description":"List of earthquakes with magnitude, location, depth, tsunami, and alert info"},"count":{"type":"number","description":"Number of earthquakes returned"},"generated":{"type":"string","description":"Timestamp when the data was generated"}}},"returns":"List of earthquakes matching the search criteria with magnitude, location, depth, and alerts"}],"icon":"/icons/earthquake-monitor.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Show me all significant earthquakes from the past week. Also search for any earthquakes near [city] in the last month.","requirements":[{"name":"latitude","type":"credential","displayName":"Latitude","description":"Your default latitude coordinate (e.g. 37.7749) — used as default for location-based queries"},{"name":"longitude","type":"credential","displayName":"Longitude","description":"Your default longitude coordinate (e.g. -122.4194) — used as default for location-based queries"}],"credentials":[{"name":"latitude","type":"credential","displayName":"Latitude","description":"Your default latitude coordinate (e.g. 37.7749) — used as default for location-based queries"},{"name":"longitude","type":"credential","displayName":"Longitude","description":"Your default longitude coordinate (e.g. -122.4194) — used as default for location-based queries"}]},{"name":"sunrise-sunset","displayName":"Sunrise & Sunset","subtitle":"Solar times & golden hour anywhere","about":"**Sunrise & Sunset** gives you precise solar times for any location on any date — sunrise, sunset, golden hour windows, solar noon, twilight phases, and day length, all in one call.\n\nIt covers photographers planning the perfect shoot, travel apps showing daily light windows, and anyone who needs to know exactly when the sun will rise or set in a city they've never been to. Pass a city name or GPS coordinates, and optionally a date, to get the full picture — from astronomical twilight through civil dawn, golden hour, solar noon, and back to dusk.\n\n### What you can do\n- **times** — get sunrise, sunset, solar noon, all twilight phases, day length, and morning and evening golden hour windows for any location and date\n\n### Who it's for\nPhotographers, filmmakers, travel planners, outdoor event organizers, and anyone building apps that depend on natural light timing. Works for any city worldwide.\n\n### How to use it\n1. Call **times** with a city name like \"Tokyo\" or coordinates like \"48.8566,2.3522\"\n2. Add a date in YYYY-MM-DD format for a specific day — omit it to get today's times\n3. For photography, use the golden_hour.morning and golden_hour.evening fields — these are the ideal shooting windows\n4. Save your home coordinates as credentials so you never have to pass them again\n\n### Getting started\nNo setup needed — just pass any city name or coordinates. Save your default latitude and longitude as credentials to make repeat queries instant.","version":"0.03","categories":["data"],"currency":"USD","skills":[{"name":"times","displayName":"Sunrise & Sunset Times","description":"Get sunrise, sunset, twilight times, day length, and golden hour windows for any location and date. Supports city names or coordinates.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or coordinates as \"lat,lon\" (e.g. \"Paris\" or \"48.8566,2.3522\")"},"date":{"type":"string","description":"Date in YYYY-MM-DD format or \"today\" (default: today)"}},"required":["location"]},"annotations":{},"examples":[{"description":"Sunrise and sunset in Paris","input":{"location":"Paris"}},{"description":"Sun times for a specific date","input":{"location":"Tokyo","date":"2026-06-21"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Resolved location with coordinates"},"date":{"type":"string","description":"Date queried"},"times":{"type":"object","description":"All twilight and sun times in ISO format"},"day_length":{"type":"object","description":"Day length in seconds and formatted"},"golden_hour":{"type":"object","description":"Morning and evening golden hour windows"}}},"returns":"Sunrise, sunset, twilight times, day length, and golden hour windows"}],"icon":"/icons/sunrise-sunset.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-05","changes":["Location lookup now handles \"City, Country\" format"]}],"premadePrompt":"What time is sunrise and sunset in [city] on [date]? Include the golden hour windows for photography.","requirements":[{"name":"latitude","type":"credential","displayName":"Latitude","description":"Your default latitude coordinate (e.g. 37.7749) — used as default for location-based queries"},{"name":"longitude","type":"credential","displayName":"Longitude","description":"Your default longitude coordinate (e.g. -122.4194) — used as default for location-based queries"}],"credentials":[{"name":"latitude","type":"credential","displayName":"Latitude","description":"Your default latitude coordinate (e.g. 37.7749) — used as default for location-based queries"},{"name":"longitude","type":"credential","displayName":"Longitude","description":"Your default longitude coordinate (e.g. -122.4194) — used as default for location-based queries"}]},{"name":"nobel-prizes","displayName":"Nobel Prizes","subtitle":"Every Nobel winner, searchable","about":"**Nobel Prizes** is a complete, searchable database of every Nobel Prize ever awarded — from Marie Curie's 1903 Physics prize to the most recent laureates across all six categories. Whether you're fact-checking, doing academic research, or just satisfying curiosity, it gives you instant access to winners, motivations, and biographical details.\n\nThe database covers Physics, Chemistry, Medicine/Physiology, Literature, Peace, and Economics. You can search by person name, filter by year, or browse an entire category at once. Each result includes the prize motivation — the official reason the award was given — alongside birth information and career context.\n\n### What you can do\n- Search laureates by name (e.g. find every Nobel Prize winner named Curie)\n- Filter by category to list all Physics or Peace prize winners\n- Browse all prizes awarded in a specific year across every category\n- Get full prize motivations alongside biographical details\n\n### Who it's for\nStudents, journalists, educators, researchers, and anyone who needs reliable historical information about Nobel Prize recipients. Useful for fact-checking news stories, building trivia content, or powering educational tools.\n\n### How to use it\n1. Use **laureates** when you know who won — search by name or narrow by category and year\n2. Use **prizes** when you want to see all winners in a given year or across a category\n3. Combine category codes (phy, che, med, lit, pea, eco) with a year to pinpoint a specific award\n4. Omit all filters to get the most recent prizes across all categories\n\n### Getting started\nNo setup required — the database is fully open and updated after each October announcement.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"laureates","displayName":"Search Laureates","description":"Search Nobel Prize laureates by name, category, or year. Returns laureate details including birth info, prize motivation, and award year.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search by laureate name (e.g. \"Einstein\")"},"category":{"type":"string","enum":["phy","che","med","lit","pea","eco"],"description":"Filter by category: phy (Physics), che (Chemistry), med (Medicine), lit (Literature), pea (Peace), eco (Economics)"},"year":{"type":"number","description":"Filter by award year (e.g. 2024)"},"limit":{"type":"number","description":"Max results (default 10, max 25)"}},"required":[]},"annotations":{},"examples":[{"description":"Search for Einstein","input":{"query":"Einstein"}},{"description":"Physics Nobel Prize winners in 2024","input":{"category":"phy","year":2024}}],"pricing":"free","outputSchema":{"type":"object","properties":{"laureates":{"type":"array","description":"Matching laureates with prize details"},"total":{"type":"number","description":"Total matching laureates"},"count":{"type":"number","description":"Number returned"}}},"returns":"List of Nobel Prize laureates with names, birth info, and prize details"},{"name":"prizes","displayName":"List Prizes","description":"List Nobel Prize awards by year and/or category. Returns prize details including all laureates and their motivations for each award.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Filter by year (e.g. 2024)"},"category":{"type":"string","enum":["phy","che","med","lit","pea","eco"],"description":"Filter by category: phy (Physics), che (Chemistry), med (Medicine), lit (Literature), pea (Peace), eco (Economics)"},"limit":{"type":"number","description":"Max results (default 10, max 25)"}},"required":[]},"annotations":{},"examples":[{"description":"All prizes awarded in 2024","input":{"year":2024}},{"description":"Recent Peace prizes","input":{"category":"pea"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"prizes":{"type":"array","description":"Nobel Prize awards with laureate details"},"total":{"type":"number","description":"Total matching prizes"},"count":{"type":"number","description":"Number returned"}}},"returns":"List of Nobel Prize awards with categories, years, laureates, and motivations"}],"icon":"/icons/nobel-prizes.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Who won the Nobel Prize in [category] in [year], and what was the reason they were awarded it?"},{"name":"generate-chart","displayName":"Generate Chart","subtitle":"Turn data into chart images fast","about":"**Generate Chart** turns raw numbers into professional chart images in seconds. Give it your data and get back a permanent shareable URL and a downloadable image — no spreadsheet software, no design tools, no code required.\n\nIt handles the color palette, layout, and formatting automatically. For standard charts, just describe your type, labels, and data. For complex visualizations, pass a full config object for total control. Either way, the output is a clean, presentation-ready chart image.\n\n### What you can do\n- **create_chart** — generate bar, line, pie, doughnut, radar, scatter, bubble, and horizontal bar charts from data arrays\n- Choose custom dimensions, output format (PNG, SVG, WebP), and background color\n- Use simple data input (type, labels, datasets) or a full Chart.js config for advanced control\n- Get a permanent short URL you can embed in reports, presentations, or share directly\n\n### Who it's for\nAnalysts turning data into shareable visuals, marketers building reports, developers adding charting to AI workflows, and anyone who needs a clean chart image without opening a spreadsheet.\n\n### How to use it\n1. Use **create_chart** with a type (bar, line, pie, etc.), a title, labels, and one or more datasets\n2. For multi-series comparisons, add multiple datasets with distinct labels\n3. Pass a config object if you need custom axes, tick formatting, or plugin-level control\n4. Use the returned chart_url_short to embed or share — it renders on demand and is permanent\n\n### Getting started\nNo setup required — works immediately with just a chart type and data values.","version":"0.02","categories":["data","media"],"currency":"USD","skills":[{"name":"create_chart","displayName":"Create Chart","description":"Generate a chart image from data. Provide either a simplified input (type, labels, datasets) or a full Chart.js config for advanced control. Returns a permanent URL that renders the chart on-demand, plus a downloadable image when storage is available.","inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["bar","horizontalBar","line","pie","doughnut","radar","polarArea","scatter","bubble"],"description":"Chart type. Defaults to \"bar\". Ignored if \"config\" is provided.","default":"bar"},"title":{"type":"string","description":"Chart title displayed at the top. Ignored if \"config\" is provided."},"labels":{"type":"array","items":{"type":"string"},"description":"X-axis labels (e.g. [\"Jan\", \"Feb\", \"Mar\"]). Ignored if \"config\" is provided."},"datasets":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"Dataset name for the legend"},"data":{"type":"array","items":{"type":"number"},"description":"Data values"},"backgroundColor":{"type":"string","description":"Fill color (CSS color or rgba). Auto-assigned if omitted."},"borderColor":{"type":"string","description":"Border color. Auto-assigned if omitted."}},"required":["data"]},"description":"One or more datasets to plot. Each needs at least a \"data\" array. Required unless \"config\" is provided."},"config":{"type":"object","description":"Full Chart.js config for advanced control. Overrides type/title/labels/datasets when provided."},"width":{"type":"number","default":600,"description":"Chart width in pixels (default 600)"},"height":{"type":"number","default":400,"description":"Chart height in pixels (default 400)"},"format":{"type":"string","enum":["png","svg","webp"],"default":"png","description":"Output image format (default \"png\")"},"background_color":{"type":"string","default":"white","description":"Chart background color (CSS color, default \"white\"). Use \"transparent\" for no background."}}},"annotations":{},"examples":[{"description":"Simple bar chart with revenue data","input":{"type":"bar","title":"Quarterly Revenue","labels":["Q1","Q2","Q3","Q4"],"datasets":[{"label":"Revenue ($k)","data":[120,180,150,220]}]}},{"description":"Multi-series line chart","input":{"type":"line","title":"Website Traffic","labels":["Mon","Tue","Wed","Thu","Fri"],"datasets":[{"label":"Visitors","data":[1200,1900,1500,2100,1800]},{"label":"Page Views","data":[3400,4200,3800,5100,4600]}]}},{"description":"Pie chart showing market share","input":{"type":"pie","title":"Market Share","labels":["Chrome","Safari","Firefox","Edge","Other"],"datasets":[{"data":[65,19,4,4,8]}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"chart_url_short":{"type":"string","description":"Short permanent URL to view the chart image (always available)"},"format":{"type":"string","description":"Output image format (png, svg, or webp)"},"dimensions":{"type":"object","description":"Chart dimensions in pixels","properties":{"width":{"type":"number","description":"Chart width in pixels"},"height":{"type":"number","description":"Chart height in pixels"}}},"chart_config":{"type":"object","description":"The Chart.js configuration object used to generate the chart"},"note":{"type":"string","description":"Status note if image download was unavailable (chart_url_short still works)"}}},"contentType":"image","returns":"Short permanent URL to view the chart image, inline base64 image for supported clients, chart dimensions, and the Chart.js config used"}],"icon":"/icons/generate-chart.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Create a bar chart showing [metric] for [categories or time periods]. Use a clean professional style.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"sec-filings","displayName":"SEC Filings","subtitle":"SEC EDGAR filings & financial data","about":"**SEC Filings** gives you direct access to the SEC EDGAR database — the official public record of every U.S. publicly traded company. Search by ticker or name, pull annual reports, track insider trades, and screen companies by revenue or profit in seconds.\n\nAnalysts, investors, and journalists use it to cut through the noise and go straight to source documents. Instead of hunting through PDFs manually, you get structured financial data you can actually work with.\n\n### What you can do\n- Search for any U.S. public company by ticker or name to get their CIK identifier\n- Browse recent filings — 10-K annual reports, 10-Q quarterlies, 8-K events, Form 4 insider trades\n- Pull structured financial statements: income statement, balance sheet, and cash flow\n- Track insider transactions — who bought or sold shares, when, and at what price\n- Full-text search across all SEC filings by keyword\n- Screen companies by financial metrics like revenue, net income, or total assets\n\n### Who it's for\nInvestors and analysts who want to verify financials from source. Journalists investigating public companies. Anyone building financial research workflows who needs structured SEC data without manual PDF parsing.\n\n### How to use it\n1. Use **search_company** with a ticker like \"AAPL\" or a name like \"Tesla\" to get the company's CIK number\n2. Use **company_filings** with that CIK to browse recent filings — filter by form type (10-K, 10-Q, 8-K, Form 4)\n3. Use **financial_statements** for structured income, balance sheet, and cash flow data\n4. Use **insider_transactions** to see recent buys and sells by executives and directors\n5. Use **filing_search** to find specific disclosures across all companies by keyword\n\n### Getting started\nSearch for any public company by ticker to get started — no account or setup needed.","version":"0.02","categories":["finance","data"],"currency":"USD","skills":[{"name":"search_company","displayName":"Search Company","description":"Find U.S. public companies by ticker symbol or company name. Returns CIK numbers, tickers, and company names for use with other SEC skills.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Ticker symbol or company name to search for (e.g. \"AAPL\", \"Apple\", \"Tesla\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search by ticker","input":{"query":"AAPL"}},{"description":"Search by company name","input":{"query":"Tesla"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used"},"total_results":{"type":"number","description":"Number of matching companies"},"companies":{"type":"array","description":"Matching companies with cik, cik_padded, ticker, and company_name"}}},"returns":"List of matching companies with CIK numbers, tickers, and names"},{"name":"company_filings","displayName":"Company Filings","description":"Get recent SEC filings for a company by CIK number. Filter by form type (10-K, 10-Q, 8-K, Form 4, 13F-HR, S-1) and returns company details, addresses, and filing list with direct document URLs.","inputSchema":{"type":"object","properties":{"cik":{"type":"string","description":"CIK number of the company (e.g. \"320193\" for Apple)"},"form_type":{"type":"string","description":"Filter by SEC form type (e.g. \"10-K\", \"10-Q\", \"8-K\", \"4\", \"13F-HR\", \"S-1\")"},"limit":{"type":"number","description":"Maximum number of filings to return (default 20, max 50)"}},"required":["cik"]},"annotations":{},"examples":[{"description":"Get all recent Apple filings","input":{"cik":"320193"}},{"description":"Get Apple 10-K annual reports","input":{"cik":"320193","form_type":"10-K"}},{"description":"Get Microsoft 8-K event filings","input":{"cik":"789019","form_type":"8-K","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"company":{"type":"object","description":"Company details including name, CIK, SIC, tickers, addresses"},"form_type_filter":{"type":"string","description":"Form type filter applied (or null)"},"total_filings_on_record":{"type":"number","description":"Total filings available"},"filings_returned":{"type":"number","description":"Number of filings returned"},"filings":{"type":"array","description":"Filing list with form, dates, accession number, and document URL"},"edgar_url":{"type":"string","description":"Link to SEC EDGAR company page"}}},"returns":"Company info and recent filings list with form type, dates, accession numbers, and document URLs"},{"name":"financial_statements","displayName":"Financial Statements","description":"Get structured XBRL financial data for a company — income statement, balance sheet, and cash flow. Returns annual and quarterly figures for revenue, net income, assets, liabilities, cash, debt, EPS, and more.","inputSchema":{"type":"object","properties":{"cik":{"type":"string","description":"CIK number of the company (e.g. \"320193\" for Apple)"},"statement":{"type":"string","description":"Financial statement type: \"income\", \"balance_sheet\", \"cash_flow\", or \"all\" (default \"all\")"}},"required":["cik"]},"annotations":{},"examples":[{"description":"Get all financial statements for Apple","input":{"cik":"320193"}},{"description":"Get only income statement","input":{"cik":"320193","statement":"income"}},{"description":"Get balance sheet for Microsoft","input":{"cik":"789019","statement":"balance_sheet"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Entity name"},"cik":{"type":"string","description":"CIK number"},"cik_padded":{"type":"string","description":"CIK zero-padded to 10 digits"},"statement_type":{"type":"string","description":"Statement type requested"},"statements":{"type":"object","description":"Financial data by statement type (income, balance_sheet, cash_flow) with line items, labels, concepts, and data points"}}},"returns":"Structured financial data with annual and quarterly values for income, balance sheet, and cash flow line items"},{"name":"insider_transactions","displayName":"Insider Transactions","description":"Get recent insider trades (Form 4 filings) for a company. Shows who bought or sold shares, transaction dates, prices, share amounts, and ownership after each transaction.","inputSchema":{"type":"object","properties":{"cik":{"type":"string","description":"CIK number of the company (e.g. \"320193\" for Apple)"},"limit":{"type":"number","description":"Number of recent Form 4 filings to fetch (default 10, max 25)"}},"required":["cik"]},"annotations":{},"examples":[{"description":"Get recent Apple insider trades","input":{"cik":"320193"}},{"description":"Get last 5 Tesla insider filings","input":{"cik":"1318605","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company name"},"cik":{"type":"string","description":"CIK number"},"cik_padded":{"type":"string","description":"CIK zero-padded to 10 digits"},"form4_filings_checked":{"type":"number","description":"Number of Form 4 filings parsed"},"total_transactions":{"type":"number","description":"Total insider transactions found"},"transactions":{"type":"array","description":"Insider transactions with owner name, title, date, type (Purchase/Sale/Exercise), shares, price, and shares owned after"}}},"returns":"List of insider transactions with owner details, trade type, shares, price, and post-transaction ownership"},{"name":"filing_search","displayName":"Filing Search","description":"Full-text search across all SEC filings by keyword. Filter by form type and date range to find specific disclosures, risk factors, material events, or topics across all public companies.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search keywords to find in filing text (e.g. \"artificial intelligence risk\", \"workforce reduction\")"},"form_type":{"type":"string","description":"Filter by SEC form type (e.g. \"10-K\", \"10-Q\", \"8-K\", \"S-1\")"},"start_date":{"type":"string","description":"Start date for filing range (YYYY-MM-DD). Default: 12 months ago"},"end_date":{"type":"string","description":"End date for filing range (YYYY-MM-DD). Default: today"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for AI risk disclosures in annual reports","input":{"query":"artificial intelligence risk","form_type":"10-K"}},{"description":"Find recent layoff announcements","input":{"query":"workforce reduction","form_type":"8-K","start_date":"2026-01-01"}},{"description":"Search for tariff mentions","input":{"query":"tariff impact supply chain"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used"},"form_type_filter":{"type":"string","description":"Form type filter (or null)"},"date_range":{"type":"object","description":"Start and end dates for the search range"},"total_results":{"type":"number","description":"Total matching filings"},"filings_returned":{"type":"number","description":"Number of filings returned"},"filings":{"type":"array","description":"Matching filings with company name, CIK, form type, filing date, accession number, description, and URL"}}},"returns":"List of matching filings with company name, form type, filing date, description, and direct filing URL"},{"name":"screen_companies","displayName":"Screen Companies","description":"Screen and rank all U.S. public companies by a financial metric. Find the largest companies by revenue, most profitable by net income, or filter by assets, equity, cash, debt, and more.","inputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Financial metric to screen by: \"revenue\", \"net_income\", \"assets\", \"equity\", \"cash\", \"debt\", \"operating_income\", \"gross_profit\", \"dividends\""},"period":{"type":"string","description":"XBRL period (e.g. \"CY2024\", \"CY2024Q4I\"). Defaults to the latest full calendar year"},"min_value":{"type":"number","description":"Minimum value filter (in USD)"},"max_value":{"type":"number","description":"Maximum value filter (in USD)"},"limit":{"type":"number","description":"Number of companies to return (default 25, max 100)"}},"required":["metric"]},"annotations":{},"examples":[{"description":"Top companies by revenue","input":{"metric":"revenue"}},{"description":"Companies with over $100B in assets","input":{"metric":"assets","min_value":100000000000,"limit":50}},{"description":"Largest companies by market equity","input":{"metric":"equity","period":"CY2024I"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Metric screened"},"concept":{"type":"string","description":"XBRL concept used"},"period":{"type":"string","description":"Period queried"},"unit":{"type":"string","description":"Unit of measurement"},"total_companies":{"type":"number","description":"Total companies matching filters"},"companies_returned":{"type":"number","description":"Number returned"},"companies":{"type":"array","description":"Ranked companies with rank, name, CIK, value, and end date"}}},"returns":"Ranked list of companies sorted by the selected financial metric, with company name, CIK, and value"}],"icon":"/icons/sec-filings.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with company_info, search_filings, financial_facts"]},{"version":"0.02","date":"2026-03-22","changes":["Complete rebuild: 6 skills replacing original 3","Added search_company for ticker/name lookup","Added company_filings for browsing recent filings with form type filtering","Added financial_statements with structured income, balance sheet, and cash flow data","Added insider_transactions for Form 4 insider trade parsing","Added filing_search for full-text search across all SEC filings","Added screen_companies for screening by financial metrics using XBRL frames"]}],"premadePrompt":"Pull the latest annual report and insider trades for [company name or ticker]. I want to see revenue, net income, and whether any executives have been buying or selling shares recently."},{"name":"web-archive","displayName":"Web Archive","subtitle":"Historical snapshots of any website","about":"**Web Archive** lets you look back at how any website looked at any point in history, using the Internet Archive's Wayback Machine. Check whether a URL has ever been captured, browse the full capture timeline, or get a year-by-year breakdown of how many snapshots exist.\n\nThis is the go-to tool for recovering deleted content, investigating how a competitor's site or messaging has evolved, verifying what a webpage said on a specific date, or simply exploring the history of any domain.\n\n### What you can do\n- **check_availability** — find the closest archived snapshot to a specific date and get a direct link to view it\n- **search_captures** — browse the full capture history across a date range, with status filters to find only successful captures\n- **site_history** — get the total number of captures for a domain, broken down by year\n\n### Who it's for\nResearchers verifying historical claims or archiving evidence. Journalists investigating how a company's website or public statements have changed. Legal and compliance teams capturing website state at a specific date. Developers recovering accidentally deleted content. Anyone curious about what a site looked like years ago.\n\n### How to use it\n1. Use **check_availability** with a URL and target date to jump straight to the closest snapshot\n2. Use **search_captures** to see the full capture timeline — add a status filter of \"200\" to show only successful captures\n3. Use **site_history** to understand how well-archived a domain is and how its capture frequency has changed over time\n\n### Getting started\nAll skills are ready to use without any setup. You can pass either a full URL (including path) or just a domain name — both work.","version":"0.02","categories":["data","search"],"currency":"USD","skills":[{"name":"check_availability","displayName":"Check Availability","description":"Check if a URL has been archived and get the closest snapshot to a given date. Returns the archived snapshot URL and metadata.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to check for archived snapshots (e.g. \"https://example.com\")"},"date":{"type":"string","description":"Target date in YYYY-MM-DD format to find the closest snapshot (defaults to latest available)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Check if example.com has been archived","input":{"url":"https://example.com"}},{"description":"Find snapshot closest to a specific date","input":{"url":"https://google.com","date":"2010-01-01"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was checked"},"archived":{"type":"boolean","description":"Whether an archived snapshot exists"},"snapshot_url":{"type":"string","description":"Web archive snapshot URL (when archived)"},"timestamp":{"type":"string","description":"Formatted snapshot timestamp (when archived)"},"raw_timestamp":{"type":"string","description":"Raw YYYYMMDDHHMMSS timestamp"},"status_code":{"type":"string","description":"HTTP status code of the archived page"},"target_date":{"type":"string","description":"Requested target date (or null)"},"message":{"type":"string","description":"Status message when not archived"}}},"returns":"Whether the URL is archived, closest snapshot URL, timestamp, and HTTP status of the archived page"},{"name":"search_captures","displayName":"Search Captures","description":"Search capture history for a URL with date range filters. Shows how many times a page was archived and when, with viewable archive links.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to search captures for (e.g. \"https://example.com\")"},"from_date":{"type":"string","description":"Start date filter in YYYY-MM-DD format"},"to_date":{"type":"string","description":"End date filter in YYYY-MM-DD format"},"limit":{"type":"number","description":"Max results to return (default 10, max 50)"},"filter_status":{"type":"string","description":"Filter by HTTP status code (e.g. \"200\" for successful captures only)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Find recent captures of a website","input":{"url":"https://example.com","limit":5}},{"description":"Search captures in a date range","input":{"url":"https://google.com","from_date":"2020-01-01","to_date":"2020-12-31","filter_status":"200"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL that was searched"},"total_captures":{"type":"number","description":"Number of captures returned"},"from_date":{"type":"string","description":"Start date filter applied (or null)"},"to_date":{"type":"string","description":"End date filter applied (or null)"},"captures":{"type":"array","description":"Capture entries, each with timestamp, raw_timestamp, original_url, mimetype, status_code, content_length, and archive_url"}}},"returns":"List of captures with timestamps, original URLs, MIME types, status codes, and viewable archive URLs"},{"name":"site_history","displayName":"Site History","description":"Get a summary of how many times a domain or URL has been archived, with yearly capture counts. Useful for understanding a site's web presence over time.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL or domain to get archive history for (e.g. \"example.com\")"},"from_year":{"type":"number","description":"Start year to filter history (e.g. 2000)"},"to_year":{"type":"number","description":"End year to filter history (e.g. 2025)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get archive history of a domain for a single year","input":{"url":"example.com","from_year":2020,"to_year":2020}},{"description":"Get archive history for a specific decade","input":{"url":"google.com","from_year":2000,"to_year":2010}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL or domain queried"},"archived":{"type":"boolean","description":"Whether any captures exist"},"total_captures":{"type":"number","description":"Total number of captures"},"first_archived":{"type":"string","description":"Timestamp of first capture (or null)"},"last_archived":{"type":"string","description":"Timestamp of most recent capture (or null)"},"years_active":{"type":"number","description":"Number of distinct years with captures"},"yearly_captures":{"type":"array","description":"Per-year breakdown, each with year (number) and captures (number)"},"from_year":{"type":"number","description":"Start year filter (or null)"},"to_year":{"type":"number","description":"End year filter (or null)"}}},"returns":"Total capture count, first and last archived dates, and yearly breakdown of capture counts"}],"icon":"/icons/web-archive.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Show me what [website URL or domain] looked like back in [year]. How many times has it been archived over the years?"},{"name":"generate-image","displayName":"Generate Image","subtitle":"AI image generation, 20+ models","about":"**Generate Image** is a full AI image studio with 20+ models in a single tool. Create from text prompts, edit existing images with natural language, compose new shots from multiple references, and upscale to 4K — all without switching between different apps or APIs.\n\nModels range from fast drafts to photorealistic renders, with specialists for typography, editorial photography, product shots, and artistic styles. The default model handles most tasks well; call list_models when you need something specific.\n\n**Typography guidance:** All models approximate named fonts (e.g. \"Outfit Black\") rather than rendering them exactly. For designs where legible or stylised text is the focus, use **ideogram-v3** or **gpt-image-2** — they produce the cleanest results. The default model is better suited to conceptual or illustrative output where precise text is not required. For pixel-exact font matching, generate the image without text and add typography in a design tool afterward.\n\n### What you can do\n- **text_to_image** — generate images from text prompts with full control over size, style, aspect ratio, and model\n- **edit_image** — modify an existing image using natural language: change backgrounds, add objects, remove elements, apply style transfers\n- **image_to_image** — compose a new image from up to 4 reference photos, combining scenes, personas, products, and outfits\n- **check_image** — poll for a pending result when a model is still processing\n- **upscale_image** — increase resolution up to 10x from inside the same workflow\n- **list_models** — browse all available models with pricing, capabilities, and supported parameters\n\n### Who it's for\nMarketers producing campaign assets, product teams visualizing concepts, content creators building visual content, and developers adding image generation to AI workflows.\n\n### How to use it\n1. Use **text_to_image** with a descriptive prompt — the default model works well without setting a model parameter\n2. Use **edit_image** to modify an existing photo with a natural language instruction\n3. Use **image_to_image** to combine reference images from your library (scenes, personas, products, outfits) into one new composition\n4. Use **list_models** to pick a specialist model for typography, photorealism, or artistic styles\n\n### Getting started\nWorks immediately with no configuration — the default model handles text-to-image, editing, and composition out of the box.","version":"0.16","categories":["media","ai"],"currency":"USD","skills":[{"name":"text_to_image","displayName":"Text to Image","description":"Generate an image from a text prompt. 20+ models with different quality, speed, style, and cost tradeoffs. Returns image URL(s) and downloadable assets.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Detailed text description of the image to generate. Be specific about subject, style, lighting, composition, and mood."},"model":{"type":"string","description":"Preferred model already set (nano-banana-2). To override, call list_models for supported options. Never guess model names."},"image_size":{"type":"string","description":"Size preset for image_size models: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9. Omit for model default."},"aspect_ratio":{"type":"string","enum":["auto","21:9","16:9","3:2","4:3","5:4","1:1","4:5","3:4","2:3","9:16","4:1","1:4","8:1","1:8","square","landscape","portrait","widescreen","ultrawide"],"description":"Aspect ratio for aspect_ratio models. Includes auto, standard landscape/portrait values, and Nano Banana 2 extreme ratios up to 8:1 and 1:8."},"width":{"type":"number","description":"Custom width in pixels (use with height instead of image_size)."},"height":{"type":"number","description":"Custom height in pixels (use with width instead of image_size)."},"num_images":{"type":"number","description":"Number of images to generate (1-4). Defaults to 1.","default":1},"seed":{"type":"number","description":"Random seed for reproducible results. Same seed + prompt → similar output."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"negative_prompt":{"type":"string","description":"Things to avoid in the image (e.g. \"blurry, low quality, text\"). Not all models support this."},"guidance_scale":{"type":"number","description":"How closely to follow the prompt (1-20). Higher = more literal. Not all models support this."},"num_inference_steps":{"type":"number","description":"Number of denoising steps. More steps = higher quality but slower. Not all models support this."},"style":{"type":"string","description":"Style preset (model-specific, case-insensitive). Ideogram: REALISTIC, GENERAL, DESIGN, AUTO. Other models: use list_models to see supported values."},"style_preset":{"type":"string","description":"Detailed style preset (model-specific, e.g. \"WATERCOLOR\", \"POP_ART\", \"80S_ILLUSTRATION\"). Use list_models to see which models support this."},"rendering_speed":{"type":"string","enum":["TURBO","BALANCED","QUALITY"],"description":"Rendering speed — affects quality and cost. Only supported by select models."},"quality":{"type":"string","enum":["low","medium","high"],"description":"Quality tier — affects cost. Only supported by select models."},"background":{"type":"string","enum":["auto","transparent","opaque"],"description":"Background mode. Only supported by select models."},"enhance_prompt":{"type":"boolean","description":"Let the model expand/improve your prompt. Only supported by select models."},"raw":{"type":"boolean","description":"Less processed, more natural-looking output. Only supported by select models."},"colors":{"type":"array","items":{"type":"object"},"description":"Color palette as [{r,g,b}] objects to guide generation. Only supported by select models."},"loras":{"type":"array","items":{"type":"object"},"description":"LoRA weights as [{path, scale}] objects. Only supported by select models."},"safety_tolerance":{"type":"string","description":"Safety level (1-6). Higher = more permissive. Only supported by select models."},"extra_params":{"type":"object","description":"Additional model-specific parameters passed directly to the inference API. Use for custom models or advanced features not listed above."}},"required":["prompt"]},"annotations":{},"examples":[{"description":"Generate an image with the default model (no model param needed)","input":{"prompt":"A sleek wireless headphone on a marble surface, soft studio lighting, product photography, 4K"}},{"description":"Generate a logo or brand mark with legible text (use ideogram-v3 or gpt-image-2 for typography)","input":{"prompt":"Modern minimalist logo for \"ToolRouter\" — clean sans-serif wordmark, navy blue on white, tech company","model":"ideogram-v3","rendering_speed":"QUALITY"}},{"description":"Generate a conceptual brand illustration (default model — no precise text required)","input":{"prompt":"Abstract brand mark for a tech company — geometric shapes, gradient blues and greens, no text"}},{"description":"Generate fast draft images with Flux Schnell","input":{"prompt":"Mountain landscape at golden hour, cinematic wide shot","model":"flux-schnell","num_images":4}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated image(s) with URL and dimensions","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type (e.g. image/jpeg)"}}}},"model":{"type":"string","description":"Display name of the model used"},"model_key":{"type":"string","description":"Registry key or model endpoint ID used"},"seed":{"type":"number","description":"Seed used for generation (for reproducibility)"},"status":{"type":"string","description":"completed when the image is ready, pending when fal accepted the request but the image is still processing"},"request_id":{"type":"string","description":"Request ID"},"fal_request_id":{"type":"string","description":"fal.ai request ID to use with check_image when status is pending"},"fal_model_id":{"type":"string","description":"fal.ai model ID to use with check_image when status is pending"},"image_path":{"type":"string","description":"Local asset path for the first generated image when available"},"message":{"type":"string","description":"Status message, especially when the request is still pending"},"num_images":{"type":"number","description":"Number of images generated"}}},"contentType":"image","returns":"Image URL(s), downloadable asset(s) via asset system, model used, seed, dimensions, and request metadata"},{"name":"edit_image","displayName":"Edit Image","description":"Edit, transform, or inpaint an existing image using AI. Provide an image URL and a text prompt describing the edit. Supports style transfer, object removal/addition, background changes, and targeted edits with masks.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Source image as a ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Text description of the edit to make (e.g. \"change the background to a beach sunset\", \"remove the person on the left\")."},"model":{"type":"string","description":"Model to use. Call list_models with \"editing\" or \"inpainting\" capability to see options. Omit for default."},"mask_url":{"type":"string","description":"Mask image as a ToolRouter file ID or hosted HTTP(S) URL (white = area to edit)."},"strength":{"type":"number","description":"How much to change the image (0-1). Lower = closer to original. Supported by image-to-image models."},"image_size":{"type":"string","description":"Size preset for image_size models: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9. Omit for model default."},"aspect_ratio":{"type":"string","enum":["auto","21:9","16:9","3:2","4:3","5:4","1:1","4:5","3:4","2:3","9:16","4:1","1:4","8:1","1:8","square","landscape","portrait","widescreen","ultrawide"],"description":"Aspect ratio for aspect_ratio models. Includes auto, standard landscape/portrait values, and Nano Banana 2 extreme ratios up to 8:1 and 1:8."},"width":{"type":"number","description":"Custom width in pixels."},"height":{"type":"number","description":"Custom height in pixels."},"num_images":{"type":"number","description":"Number of images to generate (1-4). Defaults to 1.","default":1},"seed":{"type":"number","description":"Random seed for reproducible results. Same seed + prompt → similar output."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"negative_prompt":{"type":"string","description":"Things to avoid in the image (e.g. \"blurry, low quality, text\"). Not all models support this."},"guidance_scale":{"type":"number","description":"How closely to follow the prompt (1-20)."},"num_inference_steps":{"type":"number","description":"Number of denoising steps."},"enhance_prompt":{"type":"boolean","description":"Let the model expand your prompt."},"extra_params":{"type":"object","description":"Additional model-specific parameters passed directly to the inference API."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Edit an image with natural language using Kontext","input":{"image_url":"https://placehold.co/800x600.png","prompt":"Add a decorative golden frame border around the entire image","model":"flux-kontext"}},{"description":"Style transfer with FLUX Dev image-to-image","input":{"image_url":"https://placehold.co/800x600.png","prompt":"Oil painting style, impressionist, vibrant colors","model":"flux-dev-i2i","strength":0.7}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Edited image(s) with URL and dimensions","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type (e.g. image/jpeg)"}}}},"source_image":{"type":"string","description":"URL of the original source image"},"model":{"type":"string","description":"Display name of the model used"},"model_key":{"type":"string","description":"Registry key or model endpoint ID used"},"seed":{"type":"number","description":"Seed used for generation"},"status":{"type":"string","description":"completed when the image is ready, pending when fal accepted the request but the edit is still processing"},"request_id":{"type":"string","description":"Request ID"},"fal_request_id":{"type":"string","description":"fal.ai request ID to use with check_image when status is pending"},"fal_model_id":{"type":"string","description":"fal.ai model ID to use with check_image when status is pending"},"image_path":{"type":"string","description":"Local asset path for the first edited image when available"},"message":{"type":"string","description":"Status message, especially when the request is still pending"},"num_images":{"type":"number","description":"Number of images generated"}}},"contentType":"image","returns":"Edited image URL(s), downloadable asset(s), source image URL, model used, seed, and request metadata"},{"name":"image_to_image","displayName":"Image to Image","description":"Compose a new image from up to 4 reference images plus a prompt. Combine scenes, personas, outfits, products into one shot. Pass scene_file_id, persona_file_id, product_file_ids[], outfit_file_ids[], and/or raw image_urls[]. Default model nano-banana-2.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"How to compose the references — e.g. \"portrait of the persona standing in this scene wearing this outfit, holding this product, cinematic lighting\"."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"scene_file_id":{"type":"string","description":"Saved scene from list_scenes. Resolved to its image automatically."},"persona_file_id":{"type":"string","description":"Saved persona from list_personas. Resolved to its image automatically."},"product_file_ids":{"type":"array","items":{"type":"string"},"description":"Saved product file IDs from list_files(section: \"products\"). Resolved automatically. Combined references max 4."},"outfit_file_ids":{"type":"array","items":{"type":"string"},"description":"Saved outfit file IDs from list_files(section: \"outfits\"). Resolved automatically. Combined references max 4."},"model":{"type":"string","description":"Preferred model already set (nano-banana-2). To override, call list_models for supported options. Never guess model names."},"image_size":{"type":"string","description":"Size preset for image_size models: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9. Omit for model default."},"aspect_ratio":{"type":"string","enum":["auto","21:9","16:9","3:2","4:3","5:4","1:1","4:5","3:4","2:3","9:16","4:1","1:4","8:1","1:8","square","landscape","portrait","widescreen","ultrawide"],"description":"Aspect ratio for aspect_ratio models. Includes auto, standard landscape/portrait values, and Nano Banana 2 extreme ratios up to 8:1 and 1:8."},"width":{"type":"number","description":"Custom width in pixels."},"height":{"type":"number","description":"Custom height in pixels."},"num_images":{"type":"number","description":"Number of images to generate (1-4). Defaults to 1.","default":1},"seed":{"type":"number","description":"Random seed for reproducible results. Same seed + prompt → similar output."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"negative_prompt":{"type":"string","description":"Things to avoid in the image (e.g. \"blurry, low quality, text\"). Not all models support this."},"guidance_scale":{"type":"number","description":"How closely to follow the prompt (1-20)."},"num_inference_steps":{"type":"number","description":"Number of denoising steps."},"enhance_prompt":{"type":"boolean","description":"Let the model expand your prompt."},"extra_params":{"type":"object","description":"Additional model-specific parameters passed directly to the inference API."}},"required":["prompt"]},"annotations":{},"examples":[{"description":"Compose a portrait using a saved scene and persona","input":{"prompt":"cinematic portrait of the persona standing in this scene at golden hour","scene_file_id":"scene_abc123","persona_file_id":"persona_def456"}},{"description":"Compose with a scene plus two products","input":{"prompt":"product flat lay on the surface in this scene, soft natural light","scene_file_id":"scene_abc123","product_file_ids":["product_111","product_222"]}},{"description":"Compose from raw URLs (e.g. external references)","input":{"prompt":"fashion editorial — model wearing this outfit on this background","image_urls":["https://example.com/background.jpg","https://example.com/outfit.jpg"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Composed image(s) with URL and dimensions","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type (e.g. image/jpeg)"}}}},"source_images":{"type":"array","items":{"type":"string"},"description":"The reference image URLs used for composition (after gateway resolution)."},"model":{"type":"string","description":"Display name of the model used"},"model_key":{"type":"string","description":"Registry key or model endpoint ID used"},"seed":{"type":"number","description":"Seed used for generation"},"status":{"type":"string","description":"completed when the image is ready, pending when fal accepted the request but generation is still running"},"request_id":{"type":"string","description":"Request ID"},"fal_request_id":{"type":"string","description":"fal.ai request ID to use with check_image when status is pending"},"fal_model_id":{"type":"string","description":"fal.ai model ID to use with check_image when status is pending"},"image_path":{"type":"string","description":"Local asset path for the first composed image when available"},"message":{"type":"string","description":"Status message, especially when the request is still pending"},"num_images":{"type":"number","description":"Number of images generated"}}},"contentType":"image","returns":"Composed image URL(s), downloadable asset(s), reference URLs used, model, seed, and request metadata"},{"name":"check_image","displayName":"Check Image Status","description":"Check on a pending fal-backed image request and retrieve it if ready. Use after text_to_image or edit_image returns status: pending with a fal_request_id.","inputSchema":{"type":"object","properties":{"fal_request_id":{"type":"string","description":"The fal.ai request ID returned by text_to_image or edit_image when the image was still processing."},"fal_model_id":{"type":"string","description":"The fal.ai model ID returned alongside the pending result. Defaults to fal-ai/nano-banana-2."}},"required":["fal_request_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check on a pending Nano Banana image","input":{"fal_request_id":"abc123-def456","fal_model_id":"fal-ai/nano-banana-2"}},{"description":"Check on a pending Nano Banana edit","input":{"fal_request_id":"def456-ghi789","fal_model_id":"fal-ai/nano-banana-2/edit"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"completed, running, queued, or failed"},"images":{"type":"array","description":"Completed image(s) when ready","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type (e.g. image/jpeg)"}}}},"fal_request_id":{"type":"string","description":"The fal.ai request ID being checked"},"fal_model_id":{"type":"string","description":"The fal.ai model ID being checked"},"image_path":{"type":"string","description":"Local asset path for the first completed image when available"},"message":{"type":"string","description":"Status message when the image is still pending or failed"}}},"contentType":"image","returns":"Completed image URL(s) if ready, or the current queued/running/failed status with retry guidance"},{"name":"upscale_image","displayName":"Upscale Image","description":"AI-upscale an image up to 10x resolution. Enhances detail and sharpness while maintaining quality. Choose a target resolution (720p-4K) or a scale factor (1-10x).","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Image as a ToolRouter file ID or hosted HTTP(S) URL."},"upscale_factor":{"type":"number","description":"Scale factor (1-10). Default 2x. Ignored if target_resolution is set.","default":2},"target_resolution":{"type":"string","enum":["720p","1080p","1440p","2160p"],"description":"Target resolution instead of scale factor."},"seed":{"type":"number","description":"Random seed for reproducible results. Same seed + prompt → similar output."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Upscale an image 2x","input":{"image_url":"https://placehold.co/400x300.png"}},{"description":"Upscale to 4K resolution","input":{"image_url":"https://placehold.co/400x300.png","target_resolution":"2160p"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Upscaled image(s) with URL and dimensions","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type (e.g. image/jpeg)"}}}},"source_image":{"type":"string","description":"URL of the original source image"},"upscale_factor":{"type":"number","description":"Scale factor used (null if target_resolution was set)"},"target_resolution":{"type":"string","description":"Target resolution used (null if upscale_factor was set)"},"request_id":{"type":"string","description":"Request ID"},"image_path":{"type":"string","description":"Local asset path for the upscaled image when available"}}},"contentType":"image","returns":"Upscaled image URL, downloadable asset, upscale factor or target resolution, and request metadata"},{"name":"list_models","displayName":"List Models","description":"List all available image generation models with capabilities, pricing, supported parameters, and descriptions. Filter by capability type. Models not in the registry can still be used by passing their model endpoint ID directly.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","enum":["text-to-image","image-to-image","inpainting","editing","upscale","background-removal","text-to-svg","image-to-3d"],"description":"Filter models by capability. Omit to show all."}}},"annotations":{},"examples":[{"description":"List all available image models","input":{}},{"description":"List only text-to-image models","input":{"capability":"text-to-image"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available image generation models","items":{"type":"object","properties":{"key":{"type":"string","description":"Model registry key"},"display_name":{"type":"string","description":"Human-readable model name"},"endpoint_id":{"type":"string","description":"Provider endpoint identifier"},"capabilities":{"type":"array","items":{"type":"string"},"description":"Supported capabilities (e.g. text-to-image, editing)"},"pricing":{"type":"object","description":"Pricing information"},"supports_guidance":{"type":"boolean","description":"Whether the model supports guidance_scale"},"supports_steps":{"type":"boolean","description":"Whether the model supports num_inference_steps"},"supports_negative_prompt":{"type":"boolean","description":"Whether the model supports negative_prompt"},"max_images":{"type":"number","description":"Maximum images per request"},"description":{"type":"string","description":"Model description"}}}},"total":{"type":"number","description":"Total number of models returned"},"filter":{"type":"string","description":"Capability filter applied (or \"all\")"}}},"returns":"Array of model objects with key, capabilities, pricing, supported parameters, and descriptions"}],"workflow":["list_models","text_to_image","image_to_image","edit_image","check_image","upscale_image"],"icon":"/icons/generate-image.webp","changelog":[{"version":"0.01","date":"2026-04-03","changes":["Expanded Nano Banana aspect-ratio support to include auto, ultrawide, and extreme ratios","fal-backed image generation now returns recoverable pending results with check_image instead of silently degrading on long queue waits","fal live-pricing lookup now falls back to static registry pricing to avoid pricing-endpoint outages breaking image generation"]},{"version":"0.02","date":"2026-03-20","changes":["Initial release"]},{"version":"0.03","date":"2026-03-22","changes":["Fuzzy model resolution — natural names like \"nano banana 2\" now resolve correctly","Broadened live model discovery to catch more fal.ai categories and tags","Added subtitle, expanded description, and agent instructions"]},{"version":"0.04","date":"2026-03-23","changes":["upscale_image now delegates to image-upscale tool via composition"]},{"version":"0.05","date":"2026-03-23","changes":["Added Prodia as an alternative provider — 10 new models (prodia-flux-2-pro, prodia-sdxl, prodia-recraft-v4, prodia-gemini-3-pro, etc.)"]},{"version":"0.06","date":"2026-03-24","changes":["Added Higgsfield Soul model — realistic human-centric UGC photos (model key: \"soul\")"]},{"version":"0.07","date":"2026-03-24","changes":["Default model changed to nano-banana-2","Removed hardcoded model names from descriptions — agents discover models dynamically via list_models"]},{"version":"0.08","date":"2026-03-27","changes":["Added Photalabs as a direct provider — phota, phota-edit, and phota-enhance models now route via the Photalabs API instead of fal.ai"]},{"version":"0.09","date":"2026-03-31","changes":["Added Google as a direct provider — 6 new models: Nano Banana, Nano Banana 2, Nano Banana Pro, Imagen 4 Fast, Imagen 4, Imagen 4 Ultra. Direct Google API access with token-based billing for Nano Banana and flat-rate for Imagen 4."]},{"version":"0.10","date":"2026-04-04","changes":["Ideogram style values are now case-insensitive — pass \"realistic\" or \"REALISTIC\", both work (valid: REALISTIC, GENERAL, DESIGN, AUTO)"]},{"version":"0.11","date":"2026-04-06","changes":["Style references now supported — pass a style reference when generating or editing images for consistent visual direction"]},{"version":"0.12","date":"2026-04-13","changes":["Added image_to_image skill — compose new images from up to 4 reference URLs or saved file IDs (scenes, personas, products, outfits) plus a prompt. Pass scene_file_id, persona_file_id, product_file_ids, outfit_file_ids, or raw image_urls and the gateway resolves and merges them automatically."]},{"version":"0.13","date":"2026-04-14","changes":["Accept personas, scenes, products, and outfits from your file library"]},{"version":"0.14","date":"2026-04-21","changes":["Added OpenAI GPT Image 2 — excellent prompt adherence and typography. Model key \"gpt-image-2\" works for text-to-image, editing, and mask-based inpainting; add image_urls to trigger edit mode. Also available via OpenRouter as \"openrouter-gpt-image-2\"."]},{"version":"0.15","date":"2026-04-22","changes":["Quality-tier billing now exact across every model — low/medium/high calls on gpt-image-2 bill at $0.01 / $0.04 / $0.15 instead of a flat rate. Applies universally: every provider now returns the true per-request cost."]},{"version":"0.16","date":"2026-04-28","changes":["Added typography guidance to model descriptions — ideogram-v3 and gpt-image-2 are now clearly recommended for text-heavy designs; gallery previews now show the generation prompt instead of a generic label."]}],"premadePrompt":"Generate an image of [describe the scene, subject, or concept]. Make it look [photorealistic / illustrated / cinematic / etc.].","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["text_to_image","edit_image","image_to_image"],"acceptsImageReferences":true,"imageReferenceSkills":["image_to_image"],"imageReferencesKey":"image_urls","imageReferencesMax":4,"brain":{"instructions":"When brain knowledge is available:\n  - Guide prompt engineering with brand-specific subjects, settings, and visual motifs\n  - Apply brand colour palette and established visual identity\n  - Match the creator's preferred art styles and aesthetic direction","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"pentest","displayName":"Penetration Testing","subtitle":"AI-powered black-box pen testing","about":"**Penetration Testing** is a black-box web application security testing tool that crawls your app's attack surface, scans for misconfigurations, and tests for the most common and damaging vulnerability classes — all powered by AI-generated payloads. It produces a structured report with severity ratings, proof-of-concept evidence, and remediation guidance.\n\nThe tool follows the standard penetration testing workflow: reconnaissance first to map endpoints and input surfaces, then targeted testing for injection, XSS, authentication bypass, and SSRF. AI reasoning is used to generate context-aware payloads rather than generic pattern matching, which means it finds vulnerabilities that signature-based scanners miss.\n\n**Important:** Only use this tool on systems you own or have explicit written permission to test. Unauthorised security testing is illegal.\n\n### What you can do\n- Crawl any web app to map its full attack surface — endpoints, forms, auth flows, tech stack\n- Scan for security headers, exposed paths, server disclosure, and TLS issues\n- Test for SQL injection, NoSQL injection, and command injection with AI-generated payloads\n- Test for reflected and stored Cross-Site Scripting in HTML, attribute, and JavaScript contexts\n- Test for authentication bypass, IDOR, and privilege escalation\n- Test URL-accepting parameters for Server-Side Request Forgery\n- Generate a structured report with executive summary, severity breakdown, and remediation steps\n\n### Who it's for\nSecurity engineers, developers, bug bounty hunters, and DevSecOps teams who need to validate their applications against real attack vectors before release or as part of ongoing security reviews.\n\n### How to use it\n1. Start with **recon** to map the attack surface — this returns a session object for all subsequent skills\n2. Run **scan_vulnerabilities** to check headers, exposed paths, and TLS configuration\n3. Use **test_injection**, **test_xss**, **test_auth**, and **test_ssrf** — each requires authorized: true\n4. Finish with **generate_report** to compile all findings into a readable report\n\n### Getting started\nNo setup required — the tool runs on the platform's AI models by default.","version":"0.02","categories":["security"],"currency":"USD","skills":[{"name":"recon","displayName":"Reconnaissance","description":"Crawl a target URL to map its attack surface. Discovers endpoints, forms, input parameters, authentication flows, and tech stack. Returns a session that subsequent test skills use.","inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"Target URL to scan (e.g. https://example.com)"},"max_pages":{"type":"number","default":50,"description":"Maximum pages to crawl (1-100)"},"max_depth":{"type":"number","default":3,"description":"Maximum crawl depth (1-10)"},"timeout_ms":{"type":"number","default":10000,"description":"Per-request timeout in ms (3000-30000)"},"crawl_timeout_ms":{"type":"number","default":120000,"description":"Total crawl wall-clock timeout in ms (30000-300000)"}},"required":["target"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Recon a web application","input":{"target":"https://example.com","max_pages":30}}],"pricing":"paid","returns":"Session object with attack surface map: endpoints, forms, auth flows, input surfaces, and tech stack"},{"name":"scan_vulnerabilities","displayName":"Scan Vulnerabilities","description":"Run vulnerability scans against the target including security header checks, exposed path detection, server version disclosure, and TLS analysis. Uses nuclei when available.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from recon (or pass full session object)"},"session":{"type":"object","description":"Full session object from recon (preferred over session_id)"},"targets":{"type":"array","items":{"type":"string"},"description":"Override target URLs (optional if session provided)"},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"default":"medium","description":"Minimum severity threshold"},"use_binary":{"type":"boolean","default":true,"description":"Use nuclei binary when available"},"timeout_ms":{"type":"number","default":10000,"description":"Per-request timeout in ms"}}},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Scan after recon","input":{"session_id":"scan_abc123","severity":"medium"}}],"pricing":"paid","returns":"Vulnerability findings with severity distribution and evidence"},{"name":"test_injection","displayName":"Test Injection","description":"AI-powered injection vulnerability testing. Uses LLM reasoning to generate context-aware SQL, NoSQL, and command injection payloads, execute them, and analyze responses. Requires authorization.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from recon"},"session":{"type":"object","description":"Full session object from recon"},"authorized":{"type":"boolean","description":"Explicit authorization to test this target (required: true)"},"target_endpoints":{"type":"array","items":{"type":"string"},"description":"Specific endpoints to test (optional)"},"max_rounds":{"type":"number","default":15,"description":"Max LLM reasoning rounds (1-20)"},"injection_types":{"type":"array","items":{"type":"string"},"description":"Types to test: sql, nosql, command"}},"required":["authorized"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"cpu"}},"examples":[{"description":"Test for SQL injection","input":{"session_id":"scan_abc123","authorized":true,"injection_types":["sql"]}}],"pricing":"paid","returns":"Confirmed injection findings with PoC payloads, request/response evidence, and remediation"},{"name":"test_xss","displayName":"Test Cross-Site Scripting","description":"AI-powered Cross-Site Scripting testing. Generates context-aware XSS payloads for HTML, attribute, and JavaScript contexts. Tests both reflected and stored XSS. Requires authorization.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from recon"},"session":{"type":"object","description":"Full session object from recon"},"authorized":{"type":"boolean","description":"Explicit authorization to test this target (required: true)"},"target_endpoints":{"type":"array","items":{"type":"string"},"description":"Specific endpoints to test"},"max_rounds":{"type":"number","default":15,"description":"Max LLM reasoning rounds (1-20)"},"xss_types":{"type":"array","items":{"type":"string"},"description":"Types: reflected, stored"}},"required":["authorized"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"cpu"}},"examples":[{"description":"Test for reflected XSS","input":{"session_id":"scan_abc123","authorized":true}}],"pricing":"paid","returns":"Confirmed XSS findings with payloads, reflection context, and remediation"},{"name":"test_auth","displayName":"Test Authentication","description":"AI-powered authentication and authorization testing. Tests for auth bypass, IDOR, privilege escalation, and session handling issues. Optionally accepts test credentials. Requires authorization.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from recon"},"session":{"type":"object","description":"Full session object from recon"},"authorized":{"type":"boolean","description":"Explicit authorization to test this target (required: true)"},"credentials":{"type":"object","description":"Optional test credentials for authenticated testing","properties":{"username":{"type":"string","description":"Test username/email"},"password":{"type":"string","description":"Test password"}}},"max_rounds":{"type":"number","default":15,"description":"Max LLM reasoning rounds (1-20)"}},"required":["authorized"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"cpu"}},"examples":[{"description":"Test auth without credentials","input":{"session_id":"scan_abc123","authorized":true}}],"pricing":"paid","returns":"Auth bypass, IDOR, and privilege escalation findings with evidence"},{"name":"test_ssrf","displayName":"Test Server-Side Request Forgery","description":"AI-powered Server-Side Request Forgery testing. Tests URL-accepting parameters for internal network access, cloud metadata exposure, and redirect-based SSRF. Requires authorization.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from recon"},"session":{"type":"object","description":"Full session object from recon"},"authorized":{"type":"boolean","description":"Explicit authorization to test this target (required: true)"},"target_endpoints":{"type":"array","items":{"type":"string"},"description":"Specific endpoints to test"},"max_rounds":{"type":"number","default":10,"description":"Max LLM reasoning rounds (1-15)"}},"required":["authorized"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Test for SSRF","input":{"session_id":"scan_abc123","authorized":true}}],"pricing":"paid","returns":"SSRF findings with payloads, internal info leakage evidence, and remediation"},{"name":"generate_report","displayName":"Generate Report","description":"Compile all findings from a scan session into a structured penetration test report. Includes executive summary, severity distribution, PoC evidence, and remediation recommendations.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID to generate report from"},"session":{"type":"object","description":"Full session object"},"format":{"type":"string","enum":["markdown","json"],"default":"markdown","description":"Report output format"}}},"annotations":{},"examples":[{"description":"Generate markdown report","input":{"session_id":"scan_abc123","format":"markdown"}}],"pricing":"paid","returns":"Full penetration test report in markdown or structured JSON"}],"workflow":["recon","scan_vulnerabilities","test_injection","test_xss","test_auth","test_ssrf","generate_report"],"icon":"/icons/pentest.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Run a penetration test on [website URL] — I own this site and authorize the test. Scan for vulnerabilities, test for injection and XSS issues, and give me a full report with severity ratings and how to fix them.","requirements":[{"name":"openrouter_api_key","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"openrouter_api_key","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY"}]},{"name":"sound-effect-generator","displayName":"Sound Effect Generator","subtitle":"Generate audio from text","about":"**Sound Effect Generator** turns text descriptions into audio files using AI. Describe any sound in plain English — an explosion, a rainy forest, a UI click, an engine hum — and get back a downloadable audio file in seconds.\n\nIt's built for anyone who needs unique, royalty-free audio without hunting through stock libraries. Game developers, video producers, and app builders use it to generate exactly the sound they imagine rather than settling for something close enough.\n\n### What you can do\n- Generate any sound effect from a text description\n- Control duration from 0.5 seconds to 30 seconds, or let the AI choose\n- Set looping mode for ambient backgrounds and repeating game audio\n- Tune how closely the output follows the prompt — from creative to literal\n- Output as MP3 or WAV in various quality settings\n\n### Who it's for\nGame developers who need custom UI sounds, environment audio, and effects. Video producers who need specific audio that stock libraries don't have. App builders adding audio feedback to interactions. Anyone who wants unique sound effects without a recording setup.\n\n### How to use it\n1. Use **generate_sound_effect** with a descriptive text prompt — be specific about texture, context, and character\n2. Set **duration_seconds** if you need a precise length, or leave it blank for auto\n3. Set **loop** to true for ambient backgrounds and engine hums that need to repeat seamlessly\n4. Tune **prompt_influence** — lower for more creative interpretation, higher for literal accuracy\n\n### Getting started\nNo setup needed — describe your sound and the tool generates it immediately.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"generate_sound_effect","displayName":"Generate Sound Effect","description":"Generate a sound effect from a text description using AI. Describe the sound you want in natural language and receive a downloadable audio file. Supports MP3 and WAV output formats with configurable duration and looping.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Description of the sound effect to generate. Be specific about characteristics (e.g. \"heavy rain on a tin roof with distant thunder\")."},"duration_seconds":{"type":"number","description":"Duration in seconds (0.5 to 30). If omitted, AI auto-determines the best duration."},"prompt_influence":{"type":"number","description":"How closely generation follows the prompt (0-1). Lower = more creative, higher = more literal. Defaults to 0.3.","default":0.3},"loop":{"type":"boolean","description":"Whether to generate a seamlessly loopable sound effect. Useful for ambient backgrounds, engine hums, or game environment audio. Defaults to false.","default":false},"output_format":{"type":"string","description":"Audio format. Options: mp3_44100_128, mp3_44100_192, pcm_16000, pcm_22050, pcm_24000, pcm_44100. Default: mp3_44100_128.","default":"mp3_44100_128"}},"required":["text"]},"annotations":{},"examples":[{"description":"Generate a cinematic explosion sound effect","input":{"text":"A deep cinematic explosion with rumbling aftershock and debris falling, suitable for a movie trailer","duration_seconds":8}},{"description":"Generate a loopable ambient background for a game","input":{"text":"Gentle forest ambience with birds chirping, leaves rustling in light wind, and a distant stream","duration_seconds":15,"loop":true,"prompt_influence":0.5}},{"description":"Generate a short UI notification sound","input":{"text":"A clean, bright notification chime — two ascending tones, modern and minimal","duration_seconds":1.5,"prompt_influence":0.7}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"audio_path":{"type":"string","description":"Local file path to the generated audio file (auto-uploaded via asset system)"},"text":{"type":"string","description":"The text description used for generation"},"duration_seconds":{"type":"number","description":"Requested duration in seconds, or null if auto-determined"},"loop":{"type":"boolean","description":"Whether the sound was generated as a seamless loop"},"prompt_influence":{"type":"number","description":"Prompt influence value used (0-1)"},"output_format":{"type":"string","description":"Audio format used for output"},"file_size_bytes":{"type":"number","description":"Size of the generated audio file in bytes"}}},"returns":"Audio file path (auto-uploaded as downloadable asset), text description used, duration, loop status, prompt influence, output format, and file size"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/sound-effect-generator.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Generate a sound effect of [sound description], about [duration] seconds long. Make it suitable for [use case such as a game, video, or app].","requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"music-generator","displayName":"Music Generator","subtitle":"Original AI music from text prompts","about":"**Music Generator** creates original music from a text description — specify the genre, mood, instruments, tempo, and style to shape exactly what you get. Tracks run from 3 seconds to 10 minutes, with instrumental-only mode, reproducible seeds, and MP3 or PCM output ready to download.\n\nRoyalty-free music libraries are full of generic tracks that don't quite fit. This tool lets you describe exactly what you need — \"lo-fi hip hop at 80 BPM with vinyl crackle\", \"epic orchestral intro with brass fanfare\", \"upbeat acoustic background for a product demo\" — and generates something original that actually matches.\n\n### What you can do\n- **generate_music** — create an original music track from a text prompt with control over duration, vocals, seed, and format\n\n### Who it's for\nContent creators who need background music for videos, podcasts, or social posts. Game developers prototyping soundscapes. Marketers producing branded audio content. Anyone who needs music that fits a specific vibe without licensing headaches.\n\n### How to use it\n1. Call **generate_music** with a descriptive prompt — include genre, mood, instruments, and BPM for best results\n2. Set duration_seconds based on your use case: 5-15 seconds for jingles, 30-60 seconds for background loops, longer for full tracks\n3. Set force_instrumental to true if you don't want any vocals or singing in the output\n4. Use seed to reproduce the same output later — same seed and prompt will produce similar results\n\n### Getting started\nBe specific in your prompt. \"Upbeat lo-fi hip hop with jazzy piano, warm vinyl crackle, and a slow relaxing groove at 80 BPM\" will give you a much better result than just \"lo-fi music\". Longer, more descriptive prompts consistently outperform short ones.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"generate_music","displayName":"Generate Music","description":"Generate an original music track from a text description using AI. Describe the genre, mood, instruments, tempo, and style to shape the output. Returns a downloadable audio file.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the music. Specify genre, mood, instruments, tempo (e.g. \"upbeat lo-fi hip hop with jazzy piano and vinyl crackle, 85 BPM\")."},"duration_seconds":{"type":"number","description":"Duration of the generated track in seconds (3-600). Defaults to 30.","default":30},"force_instrumental":{"type":"boolean","description":"Guarantee instrumental-only output with no vocals or singing. Defaults to false.","default":false},"seed":{"type":"number","description":"Random seed for reproducible results. Same seed and prompt will produce similar output."},"output_format":{"type":"string","description":"Audio output format (e.g. \"mp3_44100_128\", \"pcm_44100\"). Defaults to \"mp3_44100_128\".","default":"mp3_44100_128"}},"required":["prompt"]},"annotations":{},"examples":[{"description":"Generate a lo-fi hip hop beat","input":{"prompt":"Chill lo-fi hip hop beat with jazzy piano chords, warm vinyl crackle, and a slow relaxing groove at 80 BPM","duration_seconds":60,"force_instrumental":true}},{"description":"Generate a short cinematic intro with a specific seed","input":{"prompt":"Epic orchestral cinematic intro with dramatic strings, brass fanfare, and thundering timpani — dark and heroic mood","duration_seconds":15,"seed":42}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"audio_path":{"type":"string","description":"Local file path to the generated audio file (auto-uploaded via asset system)"},"prompt":{"type":"string","description":"The text prompt used for generation"},"duration_seconds":{"type":"number","description":"Duration of the generated track in seconds"},"force_instrumental":{"type":"boolean","description":"Whether instrumental-only mode was enabled"},"seed":{"type":"number","description":"Seed used for generation (null if not specified)"},"output_format":{"type":"string","description":"Audio output format used"},"file_size_bytes":{"type":"number","description":"Size of the generated audio file in bytes"}}},"returns":"Audio file path (auto-uploaded as a downloadable asset), prompt used, duration, format, seed, and file size"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/music-generator.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Generate a [genre] music track — [mood or style description] — about [duration] seconds long.","requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"voice-generator","displayName":"Voice Generator","subtitle":"Text to speech with 1000+ voices","about":"**Voice Generator** converts text to lifelike speech using a library of 1000+ voices across dozens of languages and accents. Pick a voice, tune the delivery with stability and speed controls, and get broadcast-quality audio in seconds.\n\nThe difference between this and basic text-to-speech is control. You can dial in exactly how expressive or consistent the delivery should be, slow it down for long-form narration, speed it up for energetic content, and output in MP3 for finished files or PCM for real-time streaming.\n\n### What you can do\n- **generate_voice** — convert text to spoken audio with fine-grained control over voice, stability, speed, style, and output format\n- **list_voices** — browse the full voice library filtered by language, gender, accent, and use case\n\n### Who it's for\nPodcasters and YouTubers adding narration to their content. Product teams building voice interfaces and demos. Publishers creating audiobooks from written manuscripts. Marketers producing video voiceovers and ad spots. Developers integrating speech into applications.\n\n### How to use it\n1. Use **list_voices** to find a voice that fits your content — filter by accent, gender, or use case\n2. Run **generate_voice** with your text and the chosen voice ID\n3. Adjust stability (lower for more expressive, higher for consistent reads), speed, and output format\n4. The audio file is automatically stored and returned as a playable URL\n\n### Getting started\nThe default voice (George) works well for most narration without any setup. For specific accents, character voices, or languages, use **list_voices** to browse the full catalog first.","version":"0.03","categories":["media","ai"],"currency":"USD","skills":[{"name":"generate_voice","displayName":"Generate Voice","description":"Convert text to natural-sounding spoken audio using AI text-to-speech. Choose from a wide range of voices, adjust speech parameters like stability, speed, and style, and select from multiple output formats.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The text to convert to speech. Supports up to 5000 characters per request."},"voice_id":{"type":"string","description":"Voice ID to use. Defaults to \"JBFqnCBsd6RMkjVDRZzb\" (George). Use list_voices to see all available voices.","default":"JBFqnCBsd6RMkjVDRZzb"},"model_id":{"type":"string","description":"Model to use for generation. Defaults to \"eleven_multilingual_v2\" which supports 29 languages.","default":"eleven_multilingual_v2"},"stability":{"type":"number","description":"Voice stability (0-1). Lower values produce more expressive and variable speech. Higher values produce more consistent and stable output.","minimum":0,"maximum":1},"similarity_boost":{"type":"number","description":"Similarity boost (0-1). Higher values make the voice more closely match the original voice sample. Lower values allow more creative variation.","minimum":0,"maximum":1},"style":{"type":"number","description":"Style exaggeration (0-1). Higher values amplify the style of the original speaker. Recommended to keep at 0 for most use cases.","minimum":0,"maximum":1},"speed":{"type":"number","description":"Speech speed multiplier (0.25-4.0). 1.0 is normal speed, 0.5 is half speed, 2.0 is double speed.","minimum":0.25,"maximum":4},"output_format":{"type":"string","enum":["mp3_22050_32","mp3_44100_64","mp3_44100_128","mp3_44100_192","pcm_16000","pcm_22050","pcm_24000","pcm_44100","ulaw_8000"],"description":"Audio output format and quality. Defaults to \"mp3_44100_128\". Higher bitrate = better quality but larger files.","default":"mp3_44100_128"}},"required":["text"]},"annotations":{},"examples":[{"description":"Generate a simple voice clip with default settings","input":{"text":"Welcome to ToolRouter, the universal API for AI agent tools."}},{"description":"Generate expressive speech with custom voice settings","input":{"text":"Breaking news: scientists have discovered a new species of deep-sea fish that communicates using bioluminescent patterns.","stability":0.3,"similarity_boost":0.8,"style":0.5,"speed":1.1,"output_format":"mp3_44100_192"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"audio_path":{"type":"string","description":"Local file path to the generated audio (auto-uploaded by the asset system)"},"voice_id":{"type":"string","description":"Voice ID used for generation"},"model_id":{"type":"string","description":"Model ID used for generation"},"text_length":{"type":"number","description":"Number of characters in the input text"},"output_format":{"type":"string","description":"Audio output format used"},"file_size_bytes":{"type":"number","description":"Size of the generated audio file in bytes"}}},"returns":"Audio file path (auto-uploaded), voice and model IDs, text length, output format, and file size"},{"name":"list_voices","displayName":"List Voices","description":"List voices with their IDs, names, categories, labels, descriptions, and audio preview URLs. Optional filters narrow the catalog by accent, gender, category, use case, or free-text search — use these to find a fitting voice without scrolling through every entry.","inputSchema":{"type":"object","properties":{"accent":{"type":"string","description":"Filter by accent label (e.g. \"british\", \"american\", \"australian\"). Substring match, case-insensitive."},"gender":{"type":"string","description":"Filter by gender label (\"male\", \"female\", \"non-binary\"). Substring match, case-insensitive."},"category":{"type":"string","description":"Filter by category (\"premade\", \"cloned\", \"generated\", \"professional\"). Exact match, case-insensitive."},"use_case":{"type":"string","description":"Filter by use case label (e.g. \"narration\", \"social_media\", \"characters\"). Substring match."},"search":{"type":"string","description":"Free-text match against name, description, and any label value."}}},"annotations":{},"examples":[{"description":"List all available voices","input":{}},{"description":"Find female British narration voices","input":{"gender":"female","accent":"british","use_case":"narration"}},{"description":"Search by name","input":{"search":"george"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"voices":{"type":"array","description":"Voices matching the filters (or all voices when no filters are passed)","items":{"type":"object","properties":{"voice_id":{"type":"string","description":"Unique voice identifier to pass to generate_voice"},"name":{"type":"string","description":"Human-readable voice name"},"category":{"type":"string","description":"Voice category (e.g. \"premade\", \"cloned\", \"generated\")"},"labels":{"type":"object","description":"Voice labels such as accent, age, gender, and use case"},"description":{"type":"string","description":"Voice description"},"preview_url":{"type":"string","description":"URL to a preview audio sample of this voice"}}}},"count":{"type":"number","description":"Number of voices returned after filtering"},"total_available":{"type":"number","description":"Total number of voices in the catalog before filtering"}}},"returns":"Array of voice objects matching the filters, plus the total catalog size"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["list_voices","generate_voice","list_models"],"icon":"/icons/voice-generator.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-05-08","changes":["list_voices now supports accent, gender, category, use_case, and free-text search filters — narrow a 30+ voice catalog to the right pick in one call"]}],"premadePrompt":"Convert this text to speech in a [describe voice, e.g. calm British male / energetic American female] voice: \"[text to speak]\". Make it sound natural and suitable for a [use case, e.g. podcast intro / explainer video / audiobook].","brain":{"instructions":"When brain knowledge is available:\n  - Select voices that match the brand's tone and personality\n  - Apply brand voice guidelines for pacing and delivery style\n  - Reference audience preferences for voice characteristics","produces":["creative_insights"]},"requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"audio-isolator","displayName":"Audio Isolator","subtitle":"Isolate vocals, kill the noise","about":"**Audio Isolator** separates vocals from background music, noise, and instrumentation in any audio file using AI. You give it a URL to an audio file and it returns a clean track with just the isolated voice.\n\nIt works on both speech and music. For podcast producers and interviewers, it cleans up recordings polluted by background noise. For musicians, it extracts a cappella vocals from a full song. The output is automatically stored as a downloadable file.\n\n### What you can do\n- Remove background music and instrumentation from any audio file to isolate vocals\n- Clean up podcast and interview recordings with background noise\n- Extract a cappella vocals from songs for remixing or sampling\n- Process any common audio format — MP3, WAV, M4A, and more\n\n### Who it's for\nPodcast editors and audio producers cleaning up noisy recordings. Musicians extracting vocals for remixes or a cappella versions. Journalists and researchers separating speech from ambient sound in field recordings.\n\n### How to use it\n1. Call **isolate_vocals** with a publicly accessible URL to your audio file\n2. The tool processes the file and returns an audio_url with the clean isolated track\n3. For best results, use the highest-quality source file available — higher bitrate input produces better separation\n\n### Getting started\nPass any public audio URL to **isolate_vocals** — no configuration required. For noisy source material, run **audio-transcriber** afterward to get a clean transcript of the isolated vocals.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"isolate_vocals","displayName":"Isolate Vocals","description":"Isolate vocals from an audio file by removing background music, noise, and instrumentation using AI. Provide a URL to any audio file and receive a cleaned audio track with isolated vocals.","inputSchema":{"type":"object","properties":{"audio_url":{"type":"string","description":"Audio file as a ToolRouter file ID or hosted HTTP(S) URL (MP3, WAV, M4A, etc.)."}},"required":["audio_url"]},"annotations":{},"examples":[{"description":"Isolate vocals from a song to create an a cappella track","input":{"audio_url":"https://filesamples.com/samples/audio/mp3/sample3.mp3"}},{"description":"Clean up a podcast recording by removing background noise","input":{"audio_url":"https://filesamples.com/samples/audio/wav/sample3.wav"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"audio_path":{"type":"string","description":"Local file path to the isolated audio file (auto-uploaded via asset system)"},"file_size_bytes":{"type":"number","description":"Size of the isolated audio file in bytes"}}},"returns":"Audio file path (auto-uploaded as a downloadable asset) and file size in bytes"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/audio-isolator.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Remove the background music and noise from this audio file and give me a clean isolated vocal track: [audio URL].","requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"audio-transcriber","displayName":"Audio Transcriber","subtitle":"Speech-to-text with speaker labels","about":"**Audio Transcriber** converts spoken audio into accurate text with speaker labels, word-level timestamps, and audio event tagging. It supports 99+ languages with automatic detection, making it suitable for meetings, interviews, podcasts, lectures, and any multi-speaker recordings.\n\nGetting clean, structured transcripts normally requires a separate service and manual cleanup. This tool handles language detection, speaker diarization, timestamp granularity, and non-speech event tagging (laughter, applause, music) in a single call. The output includes both a full transcript string and a per-word array with timing and speaker IDs — ready for subtitles, summaries, or further analysis.\n\n### What you can do\n- Transcribe any audio file from a URL in 99+ languages with automatic language detection\n- Label different speakers separately (diarization) with or without knowing the speaker count\n- Get word-level or character-level timestamps for subtitle generation\n- Tag non-speech audio events like laughter, applause, and background music\n- Process MP3, WAV, M4A, FLAC, OGG, and other common formats\n\n### Who it's for\nPodcast producers generating episode transcripts. Journalists and researchers transcribing interviews. Teams needing meeting notes with speaker attribution. Developers building transcription pipelines or subtitle generation workflows.\n\n### How to use it\n1. Call **transcribe_audio** with the URL of your audio file — language auto-detects if you don't specify\n2. Set diarize: true to get separate speaker labels; add num_speakers if you know the count for better accuracy\n3. Set timestamps_granularity: \"word\" if you need per-word timing for subtitle generation\n4. Enable tag_audio_events: true to capture laughter, applause, music, and other non-speech sounds\n\n### Getting started\nFor noisy recordings, run the audio through **Audio Isolator** first for cleaner transcription results. Then call **transcribe_audio** with the cleaned file URL.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"transcribe_audio","displayName":"Transcribe Audio","description":"Transcribe an audio file from a URL to text using AI speech-to-text. Supports speaker diarization, word-level and character-level timestamps, audio event tagging, and automatic language detection for 99+ languages.","inputSchema":{"type":"object","properties":{"audio_url":{"type":"string","description":"Audio file as a ToolRouter file ID or hosted HTTP(S) URL (MP3, WAV, M4A, FLAC, OGG, etc.)"},"language_code":{"type":"string","description":"ISO 639-1 language code (e.g. \"en\", \"es\", \"fr\"). If omitted, language is auto-detected."},"diarize":{"type":"boolean","description":"Enable speaker diarization to identify and label different speakers in the audio."},"num_speakers":{"type":"integer","description":"Expected number of speakers (1-32). Helps improve diarization accuracy when known."},"timestamps_granularity":{"type":"string","enum":["none","word","character"],"description":"Granularity of timestamps in the response. \"word\" returns per-word timing, \"character\" returns per-character timing."},"tag_audio_events":{"type":"boolean","description":"Tag non-speech audio events such as laughter, applause, music, and background noise."}},"required":["audio_url"]},"annotations":{},"examples":[{"description":"Basic transcription of an audio file","input":{"audio_url":"https://filesamples.com/samples/audio/mp3/sample3.mp3"}},{"description":"Transcription with speaker diarization and word-level timestamps","input":{"audio_url":"https://filesamples.com/samples/audio/wav/sample3.wav","diarize":true,"num_speakers":3,"timestamps_granularity":"word","tag_audio_events":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Full transcription text"},"words":{"type":"array","description":"Array of word objects with text, start/end timestamps, and speaker labels","items":{"type":"object","properties":{"text":{"type":"string","description":"Word text"},"start":{"type":"number","description":"Start time in seconds"},"end":{"type":"number","description":"End time in seconds"},"speaker_id":{"type":"string","description":"Speaker identifier (when diarization is enabled)"},"type":{"type":"string","description":"Token type (e.g. \"word\", \"spacing\", \"audio_event\")"}}}},"language_code":{"type":"string","description":"Detected or specified language code"},"language_probability":{"type":"number","description":"Confidence score for language detection"}}},"returns":"Full transcription text, word-level timing data with speaker labels, detected language, and confidence scores"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/audio-transcriber.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Transcribe this audio recording and label each speaker separately: [audio URL]. There are [number] speakers in the conversation.","requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"voice-transformer","displayName":"Voice Transformer","subtitle":"Voice swap with emotion preserved","about":"**Voice Transformer** converts a recorded audio clip into a completely different voice while keeping the original emotion, pacing, and delivery intact. You provide source audio and a target voice ID, and the AI rebuilds the speech in that new voice without losing what made the original performance work.\n\nThis is fundamentally different from text-to-speech — there's no transcript required, and nuances like rising inflection, pause length, and emotional intensity all carry through to the output. It also includes noise removal to clean up ambient recordings before transformation.\n\n### What you can do\n- **transform_voice** — convert audio from one voice to another, preserving pacing, emotion, and delivery style; includes optional background noise removal\n\n### Who it's for\nPodcast producers dubbing interviews into different voices for privacy. Video creators matching a brand voice across multiple presenters. Game developers generating character voice variants from a single performance. Localization teams adapting audio without re-recording. Anyone who wants to anonymize a recording or match a specific brand voice.\n\n### How to use it\n1. Use the Voice Generator's **list_voices** skill to browse available target voices and find the voice ID you want\n2. Run **transform_voice** with the source audio URL and target voice ID\n3. Adjust stability for consistent vs. expressive output, and similarity_boost to stay closer to the target voice\n4. Enable **remove_background_noise** if the recording has ambient sound\n5. Use seed for reproducible results across multiple takes\n\n### Getting started\nHave the audio URL ready (MP3 or WAV at a publicly accessible address). Use **list_voices** in the Voice Generator tool to find your target voice ID before running the transformation.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"transform_voice","displayName":"Transform Voice","description":"Convert speech audio into a different voice while preserving the original emotion, delivery, and pacing. Provide a source audio URL and a target voice ID to produce a transformed audio file with fine-grained control over stability, similarity, and style.","inputSchema":{"type":"object","properties":{"audio_url":{"type":"string","description":"Source audio as a ToolRouter file ID or hosted HTTP(S) URL (MP3, WAV, or another common audio format)."},"voice_id":{"type":"string","description":"Voice ID of the target voice. Use the voice-generator list_voices action to browse available voices."},"model_id":{"type":"string","description":"Speech-to-speech model to use. Defaults to \"eleven_english_sts_v2\".","default":"eleven_english_sts_v2"},"stability":{"type":"number","description":"Voice stability (0-1). Lower values produce more expressive and variable output. Higher values produce more consistent results.","minimum":0,"maximum":1},"similarity_boost":{"type":"number","description":"Similarity boost (0-1). Higher values make the output more closely match the target voice. Lower values allow more creative variation.","minimum":0,"maximum":1},"style":{"type":"number","description":"Style exaggeration (0-1). Higher values amplify the style of the target voice. Recommended to keep low for natural results.","minimum":0,"maximum":1},"remove_background_noise":{"type":"boolean","description":"Whether to remove background noise from the source audio before transformation. Defaults to false.","default":false},"seed":{"type":"number","description":"Random seed for reproducible transformations. Same seed with same input should produce similar results."},"output_format":{"type":"string","enum":["mp3_22050_32","mp3_44100_64","mp3_44100_128","mp3_44100_192","pcm_16000","pcm_22050","pcm_24000","pcm_44100","ulaw_8000"],"description":"Audio output format and quality. Defaults to \"mp3_44100_128\". Higher bitrate means better quality but larger files.","default":"mp3_44100_128"}},"required":["audio_url","voice_id"]},"annotations":{},"examples":[{"description":"Transform a podcast clip into a different voice with default settings","input":{"audio_url":"https://filesamples.com/samples/audio/mp3/sample3.mp3","voice_id":"JBFqnCBsd6RMkjVDRZzb"}},{"description":"Transform speech with custom voice settings and background noise removal","input":{"audio_url":"https://filesamples.com/samples/audio/wav/sample3.wav","voice_id":"pNInz6obpgDQGcFmaJgB","stability":0.7,"similarity_boost":0.9,"style":0.2,"remove_background_noise":true,"output_format":"mp3_44100_192"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"audio_path":{"type":"string","description":"Local file path to the transformed audio (auto-uploaded by the asset system)"},"voice_id":{"type":"string","description":"Target voice ID used for transformation"},"model_id":{"type":"string","description":"Speech-to-speech model ID used"},"remove_background_noise":{"type":"boolean","description":"Whether background noise removal was applied"},"output_format":{"type":"string","description":"Audio output format used"},"file_size_bytes":{"type":"number","description":"Size of the transformed audio file in bytes"}}},"returns":"Transformed audio file path (auto-uploaded), target voice ID, model ID, noise removal status, output format, and file size"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/voice-transformer.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Transform the voice in this audio recording [audio URL] to sound like [target voice description, e.g. a deep authoritative male narrator], while keeping the same emotion and pacing.","requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"audio-dubber","displayName":"Audio Dubber","subtitle":"AI dubbing in any language","about":"**Audio Dubber** translates audio or video into natural-sounding dubbed versions in any language using AI voice synthesis. It preserves timing and handles multiple speakers — so the dubbed result sounds like it was recorded natively, not awkwardly overlaid.\n\nCreators and businesses use it to reach international audiences without hiring voice actors or running manual dubbing sessions. You can dub a full video, clip a specific segment, and choose whether to keep or drop background audio. It supports common formats including MP3, MP4, WAV, and M4A.\n\n### What you can do\n- Dub any publicly accessible audio or video file into a target language\n- Preserve original speaker timing and multi-speaker separation\n- Dub just a segment of a longer file using start and end times\n- Drop background audio for a clean voice-only dubbed track\n- Retrieve the completed dubbed file once processing is done\n\n### Who it's for\nContent creators publishing videos for international audiences. Businesses localizing training materials, explainer videos, or customer support content. Podcasters expanding into non-English markets.\n\n### How to use it\n1. Call **dub_audio** with your source file URL and the target language code (e.g. \"es\" for Spanish, \"fr\" for French)\n2. Set source_lang explicitly if you know the original language — this improves accuracy\n3. The skill returns a dubbing_id — save it\n4. Call **get_dubbed_audio** with that ID to check status and retrieve the file; poll if it's not ready yet\n\n### Getting started\nAll you need is a publicly accessible URL to your audio or video file. Connect your account for access to higher quality output.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"dub_audio","displayName":"Dub Audio","description":"Start an asynchronous dubbing job to translate audio or video into a target language. Provide a ToolRouter file ID or hosted source URL and the desired target language code. Returns a dubbing_id to check status and retrieve the result with get_dubbed_audio.","inputSchema":{"type":"object","properties":{"source_url":{"type":"string","description":"Audio or video file as a ToolRouter file ID or hosted HTTP(S) URL. Supports common formats including MP3, MP4, WAV, and M4A."},"target_lang":{"type":"string","description":"Target language code for dubbed output (e.g. \"es\", \"fr\", \"de\", \"ja\", \"zh\", \"pt\")."},"source_lang":{"type":"string","description":"Source language code of the original audio. Defaults to \"auto\" for automatic detection. Set explicitly for better accuracy (e.g. \"en\" for English).","default":"auto"},"num_speakers":{"type":"integer","description":"Number of speakers in the audio. Defaults to 0 for automatic detection. Set explicitly if auto-detection is inaccurate."},"name":{"type":"string","description":"Optional project name for organizing dubbing jobs."},"drop_background_audio":{"type":"boolean","description":"Whether to remove background audio (music, ambient sounds) from the dubbed output. Defaults to false.","default":false},"highest_resolution":{"type":"boolean","description":"Whether to use the highest resolution processing for better quality. May increase processing time and cost. Defaults to false.","default":false},"start_time":{"type":"integer","description":"Start time in seconds to begin dubbing from. Useful for dubbing a specific segment."},"end_time":{"type":"integer","description":"End time in seconds to stop dubbing at. Useful for dubbing a specific segment."}},"required":["source_url","target_lang"]},"annotations":{},"examples":[{"description":"Dub an English YouTube video into Spanish","input":{"source_url":"https://filesamples.com/samples/video/mp4/sample_640x360.mp4","target_lang":"es","source_lang":"en"}},{"description":"Dub a podcast segment into Japanese with high resolution","input":{"source_url":"https://filesamples.com/samples/audio/mp3/sample3.mp3","target_lang":"ja","num_speakers":2,"highest_resolution":true,"start_time":60,"end_time":300}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"dubbing_id":{"type":"string","description":"Unique identifier for the dubbing job — use with get_dubbed_audio to retrieve the result"},"expected_duration_sec":{"type":"number","description":"Estimated processing time in seconds"},"target_lang":{"type":"string","description":"Target language code requested"},"source_lang":{"type":"string","description":"Source language code used (may be \"auto\")"}}},"returns":"Dubbing job ID, estimated processing duration, target language, and source language. Use the dubbing_id with get_dubbed_audio to retrieve the translated audio once processing completes."},{"name":"get_dubbed_audio","displayName":"Get Dubbed Audio","description":"Check the status of a dubbing job and retrieve the translated audio file when complete. Provide the dubbing_id from a previous dub_audio call and the target language code. If processing is still in progress, returns the current status so you can poll again later.","inputSchema":{"type":"object","properties":{"dubbing_id":{"type":"string","description":"The dubbing job ID returned by a previous dub_audio call."},"language_code":{"type":"string","description":"The target language code to retrieve the dubbed audio for. Must match the target_lang used in the original dub_audio call."}},"required":["dubbing_id","language_code"]},"annotations":{},"examples":[{"description":"Retrieve a completed Spanish dubbing job","input":{"dubbing_id":"dub_abc123def456","language_code":"es"}},{"description":"Check status of a Japanese dubbing job","input":{"dubbing_id":"dub_xyz789ghi012","language_code":"ja"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"audio_path":{"type":"string","description":"Local file path to the dubbed audio file (auto-uploaded via asset system). Only present when status is \"dubbed\"."},"dubbing_id":{"type":"string","description":"The dubbing job ID"},"language_code":{"type":"string","description":"Language code of the dubbed audio"},"status":{"type":"string","description":"Current status of the dubbing job (e.g. \"dubbed\", \"dubbing\", \"queued\")"},"file_size_bytes":{"type":"number","description":"Size of the dubbed audio file in bytes. Only present when status is \"dubbed\"."},"message":{"type":"string","description":"Human-readable status message. Only present when dubbing is not yet complete."}}},"returns":"When complete: dubbed audio file path (auto-uploaded as downloadable asset), dubbing ID, language code, status, and file size. When pending: current status and a message to try again later."},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["dub_audio","get_dubbed_audio","list_models"],"icon":"/icons/audio-dubber.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Dub this audio/video into [target language]: [URL]. Keep the original speakers' timing and produce a natural-sounding dubbed version.","requirements":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"deep-research","displayName":"Deep Research","subtitle":"AI research reports with citations","about":"**Deep Research** turns any question into a cited research report by searching and synthesizing multiple web sources in parallel. Cross-references findings, assigns confidence scores, and returns structured intelligence with field-level citations.\n\nStandard web search returns links — you still have to read and synthesize everything yourself. Deep Research does the reading for you. It explores multiple sources, identifies where they agree and disagree, and produces a structured report you can act on. Multiple depth tiers let you trade speed against thoroughness: a quick scan takes under a minute, a full analyst-grade deep dive runs for up to 25 minutes and covers far more ground.\n\n### What you can do\n- **research** — run a deep research job on any topic; choose a processor tier from lite (fast summary) to ultra (analyst-grade deep dive with full cross-referencing)\n\n### Who it's for\nAnalysts, researchers, journalists, consultants, and anyone who needs a thorough answer backed by sources rather than a quick summary. Also useful for due diligence, market research, competitive intelligence, and fact-checking.\n\n### How to use it\n1. Use **research** with a specific, detailed question — more detail gives better results\n2. Choose a processor: pro is the default and handles most research tasks well; ultra for the deepest coverage\n3. Add -fast to any tier name (e.g. pro-fast) for faster results at the cost of some depth\n4. Set output_mode to \"text\" for a readable markdown report, or \"auto\" for structured JSON with citations\n5. The tool runs asynchronously — it returns a job ID; poll with get_job_result until complete","version":"0.03","categories":["search","data","analytics"],"currency":"USD","skills":[{"name":"research","displayName":"Deep Research","description":"Run deep research on any topic. Automatically explores multiple web sources, cross-references findings, and returns structured intelligence with citations. Choose a processor tier to control depth vs speed.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language research query — be specific and detailed for best results (max 15,000 chars)"},"processor":{"type":"string","description":"Research depth tier. lite/base: quick. core: cross-referenced. pro: web research (2-10min). ultra: deep research (5-25min). Add -fast for speed.","enum":["lite","base","core","core2x","pro","ultra","ultra2x","ultra4x","ultra8x","lite-fast","base-fast","core-fast","core2x-fast","pro-fast","ultra-fast","ultra2x-fast","ultra4x-fast","ultra8x-fast"],"default":"pro"},"output_mode":{"type":"string","description":"Output format. auto: structured JSON with field-level citations. text: markdown report with inline citations.","enum":["auto","text"],"default":"auto"},"output_description":{"type":"string","description":"Guidance for text mode output — e.g. \"focus on market size and key players\" or \"keep it under 2000 words\""},"source_domains":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Only use sources from these domains (e.g. [\"reuters.com\", \"bloomberg.com\"]). Maximum 10 domains."},"exclude_domains":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Exclude sources from these domains. Maximum 10 domains."}},"required":["query"]},"annotations":{"execution":{"estimatedSeconds":300,"timeoutSeconds":2700,"mode":"io"}},"examples":[{"description":"Quick market research with pro processor","input":{"query":"What is the current market size of the global AI agent platform market? Who are the key players and what are the growth projections?","processor":"pro"}},{"description":"Deep competitive analysis with ultra processor","input":{"query":"Comprehensive competitive analysis of MCP tool marketplaces including Composio, OpenTools, and ToolRouter. Compare pricing, tool count, developer experience, and market positioning.","processor":"ultra","output_mode":"text","output_description":"Focus on market positioning and differentiation. Include a comparison table."}},{"description":"Fast research from specific sources","input":{"query":"Latest developments in Model Context Protocol adoption by AI coding assistants","processor":"pro-fast","source_domains":["github.com","modelcontextprotocol.io","anthropic.com"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"run_id":{"type":"string","description":"Task run ID"},"processor":{"type":"string","description":"Processor tier used"},"output_type":{"type":"string","description":"Output format (json or text)"},"content":{"type":"object","description":"Research findings — structured JSON or markdown text"},"basis":{"type":"array","description":"Field-level citations with reasoning and confidence","items":{"type":"object","properties":{"field":{"type":"string","description":"Output field this basis supports"},"reasoning":{"type":"string","description":"Why this finding is supported"},"confidence":{"type":"string","description":"Confidence level (low, medium, high)"},"citations":{"type":"array","description":"Source URLs with excerpts","items":{"type":"object","properties":{"url":{"type":"string","description":"Source URL"},"title":{"type":"string","description":"Page title"},"excerpts":{"type":"array","items":{"type":"string"},"description":"Relevant excerpts"}}}}}}},"citation_count":{"type":"number","description":"Total citations across all fields"},"field_count":{"type":"number","description":"Number of structured output fields"},"created_at":{"type":"string","description":"Task creation timestamp"}}},"returns":"Structured research findings with field-level citations, confidence scores, and source excerpts. Content is either structured JSON (auto mode) or a markdown report (text mode)."}],"icon":"/icons/deep-research.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-17","changes":["source_domains and exclude_domains now enforce a 10-domain maximum with a clear error message"]}],"premadePrompt":"Research [topic] and give me a thorough report with sources. I want to understand the key players, recent developments, and what the data says.","brain":{"instructions":"When brain knowledge is available:\n  - Apply industry and domain context to research queries\n  - Reference known facts to avoid re-researching established knowledge\n  - Tailor research depth and focus to the user's expertise level","produces":["research_insights"]},"requirements":[{"name":"parallel","type":"secret","displayName":"Parallel AI API Key","description":"Optional: use your own Parallel AI key instead of the platform default","acquireUrl":"https://parallel.ai","envFallback":"PARALLEL_API_KEY"}],"credentials":[{"name":"parallel","type":"secret","displayName":"Parallel AI API Key","description":"Optional: use your own Parallel AI key instead of the platform default","acquireUrl":"https://parallel.ai","envFallback":"PARALLEL_API_KEY"}]},{"name":"localize-app-store-screenshots","displayName":"Localize App Store Screenshots","subtitle":"AI-localize your app screenshots","about":"**Localize App Store Screenshots** translates text in App Store and Play Store screenshots into any language while keeping the layout, branding, UI elements, and icons exactly as they are. It also adapts currency symbols and date formats so the localized version feels native to the target market — not just translated.\n\nLocalizing app store listings is one of the highest-leverage things you can do for international growth, but paying a designer to redo every screenshot for every language adds up fast. This tool replaces that entirely: pass any screenshot URL, choose a language and target country, and get back a submission-ready image.\n\n### What you can do\n- **get_screenshots** — fetch existing App Store screenshots by app name or URL for use as source images\n- **localize_screenshot** — translate all text in a screenshot to a target language with cultural adaptation for the target country\n\n### Who it's for\nApp developers expanding into new markets who want localized store listings without a design agency. Growth teams A/B testing localized screenshots for different regions. Anyone preparing an international app submission on a tight timeline.\n\n### How to use it\n1. Use **get_screenshots** to fetch your existing screenshots by app name, or gather your source image URLs directly\n2. For each screenshot, call **localize_screenshot** with the image URL, target language, and target country\n3. Run multiple localizations in parallel — pass different language and country pairs to process several markets at once\n4. Download the output images and upload them directly to App Store Connect or Play Console\n\n### Getting started\nHigh-value markets to prioritize: Japanese, Simplified Chinese, German, French, Brazilian Portuguese, and Korean. Always pass both language and country — country drives currency and date format adaptation, not just the translation.","version":"0.02","categories":["media","marketing"],"currency":"USD","skills":[{"name":"get_screenshots","displayName":"Get App Store Screenshots","description":"Fetch high-resolution screenshots and metadata from the Apple App Store for any app. Returns 1290x2796 screenshot URLs, app name, subtitle, icon, and category.","inputSchema":{"type":"object","properties":{"app_store_url":{"type":"string","description":"Full Apple App Store URL (e.g. https://apps.apple.com/us/app/example/id123456789). Provide this or app_id."},"app_id":{"type":"string","description":"Numeric Apple App Store ID (e.g. \"284882215\" for Facebook). Provide this or app_store_url."},"country":{"type":"string","description":"Two-letter country code for the App Store region (e.g. \"us\", \"gb\", \"jp\"). Defaults to \"us\".","default":"us"}},"required":[]},"annotations":{},"examples":[{"description":"Fetch screenshots using an App Store URL","input":{"app_store_url":"https://apps.apple.com/us/app/facebook/id284882215"}},{"description":"Fetch screenshots using an app ID with country","input":{"app_id":"284882215","country":"gb"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"screenshots":{"type":"array","items":{"type":"string"},"description":"Array of high-resolution screenshot URLs (1290x2796)"},"app_name":{"type":"string","description":"App display name from the store listing"},"subtitle":{"type":"string","description":"App subtitle from the store listing"},"icon_url":{"type":"string","description":"App icon URL (512x512)"},"category":{"type":"string","description":"Primary App Store category"}}},"returns":"High-resolution screenshot URLs (1290x2796), app name, subtitle, icon URL, and primary category"},{"name":"localize_screenshot","displayName":"Localize Screenshot","description":"Translate all text in an app screenshot to a target language using AI while preserving layout, branding, UI structure, icons, and visual identity. Adapts currency symbols and date formats.","inputSchema":{"type":"object","properties":{"image":{"type":"string","description":"Source screenshot to localize. Can be a ToolRouter file ID, hosted HTTP(S) URL, or server-local path."},"language":{"type":"string","description":"Target language for translation (e.g. \"Japanese\", \"French\", \"Brazilian Portuguese\")."},"country":{"type":"string","description":"Target country or region for cultural adaptation (e.g. \"Japan\", \"France\", \"Brazil\")."}},"required":["image","language","country"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Localize a local screenshot to Japanese","input":{"image":"/path/to/screenshot.png","language":"Japanese","country":"Japan"}},{"description":"Localize a screenshot URL to Brazilian Portuguese","input":{"image":"https://is1-ssl.mzstatic.com/image/thumb/example/1290x2796bb.jpg","language":"Brazilian Portuguese","country":"Brazil"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local file path to the localized screenshot JPEG"},"language":{"type":"string","description":"Language the screenshot was translated to"},"country":{"type":"string","description":"Target country used for cultural adaptation"}}},"contentType":"image","returns":"Local file path to the localized screenshot JPEG, target language, and country"}],"workflow":["get_screenshots","localize_screenshot"],"icon":"/icons/localize-app-store-screenshots.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Localize my [app name] App Store screenshots into [language] for the [country] market.","requirements":[{"name":"openai","type":"secret","displayName":"OpenAI API Key","description":"Used to identify fashion items in screenshots (vision)","acquireUrl":"https://platform.openai.com/api-keys","envFallback":"OPENAI_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"openai","type":"secret","displayName":"OpenAI API Key","description":"Used to identify fashion items in screenshots (vision)","acquireUrl":"https://platform.openai.com/api-keys","envFallback":"OPENAI_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"restyle-app-store-screenshots","displayName":"Restyle App Store Screenshots","subtitle":"Restyle screenshots in any style","about":"**Restyle App Store Screenshots** transfers the visual style of any inspiration app onto your existing App Store screenshots using AI image generation. The output is a full set of restyled screenshots at App Store resolution (1290x2796) — ready to upload and test.\n\nInstead of a multi-week design sprint to explore a new visual direction, you can generate a complete restyled set in minutes. Great for A/B testing entirely different creative directions, refreshing a dated store page, or exploring what your app might look like with a competitor's aesthetic.\n\n### What you can do\n- **get_screenshots** — fetch App Store screenshots for any app by name or URL (source and inspiration)\n- **generate_overview** — produce a restyled overview strip by transferring the inspiration app's visual style onto the source app's UI content\n- **extract_slots** — extract and upscale each individual screenshot from the overview strip to full App Store resolution\n\n### Who it's for\nMobile app developers and marketing teams who want to test new visual directions for their store listings, growth teams running App Store Optimization experiments, and designers who want to explore style variations without a full design sprint.\n\n### How to use it\n1. Call **get_screenshots** to fetch screenshots for both your source app and the inspiration app whose style you want to copy.\n2. Call **generate_overview** with the source and inspiration images to produce a restyled overview strip.\n3. Call **extract_slots** with the overview to get each screenshot extracted and upscaled to full 1290x2796 App Store resolution.\n\n### Getting started\nStart by fetching both sets of screenshots with **get_screenshots** — then pass them together to **generate_overview** to kick off the restyling. Both generation steps run asynchronously and take 60–120 seconds each.","version":"0.02","categories":["media","marketing"],"currency":"USD","skills":[{"name":"get_screenshots","displayName":"Get App Store Screenshots","description":"Fetch high-resolution screenshots and metadata from the Apple App Store for any app. Returns 1290x2796 screenshot URLs, app name, subtitle, icon, and category.","inputSchema":{"type":"object","properties":{"app_store_url":{"type":"string","description":"Full Apple App Store URL (e.g. https://apps.apple.com/us/app/example/id123456789). Provide this or app_id."},"app_id":{"type":"string","description":"Numeric Apple App Store ID (e.g. \"284882215\" for Facebook). Provide this or app_store_url."},"country":{"type":"string","description":"Two-letter country code for the App Store region (e.g. \"us\", \"gb\", \"jp\"). Defaults to \"us\".","default":"us"}},"required":[]},"annotations":{},"examples":[{"description":"Fetch screenshots using an App Store URL","input":{"app_store_url":"https://apps.apple.com/us/app/facebook/id284882215"}},{"description":"Fetch screenshots using an app ID with country","input":{"app_id":"284882215","country":"gb"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"screenshots":{"type":"array","items":{"type":"string"},"description":"Array of high-resolution screenshot URLs (1290x2796)"},"app_name":{"type":"string","description":"App display name from the store listing"},"subtitle":{"type":"string","description":"App subtitle from the store listing"},"icon_url":{"type":"string","description":"App icon URL (512x512)"},"category":{"type":"string","description":"Primary App Store category"}}},"returns":"High-resolution screenshot URLs (1290x2796), app name, subtitle, icon URL, and primary category"},{"name":"generate_overview","displayName":"Generate Overview Strip","description":"Generate an overview strip that transfers the visual style of inspiration screenshots onto source app screenshots. Creates a horizontal strip with all slots rendered in the inspiration style while preserving the source app UI content.","inputSchema":{"type":"object","properties":{"source_images":{"type":"array","items":{"type":"string"},"description":"Source screenshots as ToolRouter file IDs, hosted HTTP(S) URLs, or server-local paths. Max 10 images."},"inspiration_images":{"type":"array","items":{"type":"string"},"description":"Inspiration screenshots as ToolRouter file IDs, hosted HTTP(S) URLs, or server-local paths. Max 10 images."},"source_app_name":{"type":"string","description":"Name of the source app (used in marketing text generation)."},"source_app_description":{"type":"string","description":"Description of the source app (used for context in marketing text)."},"inspiration_app_name":{"type":"string","description":"Name of the inspiration app (used for prompt context)."},"source_app_primary_color":{"type":"string","description":"Optional source app brand color for prompt context."},"inspiration_app_category":{"type":"string","description":"Optional inspiration app category for prompt context."},"feedback":{"type":"string","description":"Optional user feedback to adjust the generation (e.g. \"make backgrounds darker\")."}},"required":["source_images","inspiration_images"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"cpu"}},"examples":[{"description":"Generate overview strip from source and inspiration screenshots","input":{"source_images":["https://is1-ssl.mzstatic.com/image/thumb/example1/1290x2796bb.jpg","https://is1-ssl.mzstatic.com/image/thumb/example2/1290x2796bb.jpg"],"inspiration_images":["https://is1-ssl.mzstatic.com/image/thumb/example3/1290x2796bb.jpg","https://is1-ssl.mzstatic.com/image/thumb/example4/1290x2796bb.jpg"],"source_app_name":"My App","inspiration_app_name":"Beautiful App"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"overview_path":{"type":"string","description":"Local file path to the generated overview strip PNG"},"slot_count":{"type":"number","description":"Number of slots in the overview strip"},"source_app":{"type":"string","description":"Name of the source app"},"inspiration_app":{"type":"string","description":"Name of the inspiration app"}}},"contentType":"image","returns":"Local file path to the overview strip PNG, slot count, source app name, and inspiration app name"},{"name":"extract_slots","displayName":"Extract Individual Screenshots","description":"Extract and upscale individual screenshots from an overview strip. Analyzes slot mapping to determine source content, then generates each slot at full App Store resolution (1290x2796) with proper UI insertion and style preservation.","inputSchema":{"type":"object","properties":{"overview_image":{"type":"string","description":"ToolRouter file ID, hosted HTTP(S) URL, or server-local path for the overview strip from generate_overview."},"source_images":{"type":"array","items":{"type":"string"},"description":"Original source screenshots as ToolRouter file IDs, hosted HTTP(S) URLs, or server-local paths."},"inspiration_images":{"type":"array","items":{"type":"string"},"description":"Optional inspiration screenshots as ToolRouter file IDs, hosted HTTP(S) URLs, or server-local paths."},"slot_count":{"type":"number","description":"Number of slots to extract. Defaults to the number of source images."},"slot_mapping":{"type":"object","description":"Optional pre-computed slot mapping from a previous analysis. If not provided, automatic analysis will be performed."},"source_app_name":{"type":"string","description":"Name of the source app (used for prompt context)."},"source_app_description":{"type":"string","description":"Description of the source app (used for prompt context)."},"source_app_primary_color":{"type":"string","description":"Optional source app brand color for prompt context."},"inspiration_app_name":{"type":"string","description":"Name of the inspiration app (used for prompt context)."},"inspiration_app_category":{"type":"string","description":"Optional inspiration app category for prompt context."}},"required":["overview_image","source_images"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"cpu"}},"examples":[{"description":"Extract slots from an overview strip","input":{"overview_image":"/path/to/overview.png","source_images":["https://is1-ssl.mzstatic.com/image/thumb/example1/1290x2796bb.jpg","https://is1-ssl.mzstatic.com/image/thumb/example2/1290x2796bb.jpg"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"screenshots":{"type":"array","items":{"type":"object","properties":{"slot":{"type":"number"},"image_path":{"type":"string"},"image_url":{"type":"string"}}},"description":"Extracted screenshot assets. image_path is auto-uploaded to image_url."},"image_path":{"type":"string","description":"Local path for the first extracted screenshot, auto-uploaded to image_url."},"image_url":{"type":"string","description":"Permanent downloadable URL for the first extracted screenshot."},"slot_count":{"type":"number","description":"Number of slots processed"},"slot_mapping":{"type":"object","description":"Slot mapping used for extraction (source index and quality per slot)"}}},"contentType":"image","returns":"Array of local file paths to extracted screenshot JPEGs, slot count, and the slot mapping used"}],"workflow":["get_screenshots","generate_overview","extract_slots"],"icon":"/icons/restyle-app-store-screenshots.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Restyle my [app name] App Store screenshots to match the look and feel of [inspiration app name]. Generate a full set of restyled screenshots at App Store resolution.","requirements":[{"name":"openai","type":"secret","displayName":"OpenAI API Key","description":"Used to identify fashion items in screenshots (vision)","acquireUrl":"https://platform.openai.com/api-keys","envFallback":"OPENAI_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"openai","type":"secret","displayName":"OpenAI API Key","description":"Used to identify fashion items in screenshots (vision)","acquireUrl":"https://platform.openai.com/api-keys","envFallback":"OPENAI_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"qr-code-generator","displayName":"QR Code Generator","subtitle":"QR codes for links, WiFi & contacts","about":"**QR Code Generator** creates scannable QR codes for URLs, text, WiFi credentials, and contact cards in seconds. Get back a permanent image URL in PNG, SVG, JPG, or GIF with full control over size, colors, error correction, and margins.\n\nQR codes are everywhere — on flyers, packaging, business cards, menus, signage, and event materials. This tool generates production-ready codes that work reliably in print and on screen, with SVG output for infinite scaling and high error correction for codes overlaid on logos or used outdoors.\n\n### What you can do\n- **generate_qr** — create a QR code for any URL, text, email address, phone number, or other string\n- **generate_wifi_qr** — generate a QR code that auto-connects a phone to a WiFi network when scanned\n- **generate_vcard_qr** — create a contact card QR that adds a person directly to the scanner's address book\n\n### Who it's for\nMarketers linking print materials to landing pages, restaurants and venues sharing WiFi passwords, business professionals putting contact QR codes on cards and email signatures, event organizers directing attendees to apps or websites, and developers building anything that needs scannable codes.\n\n### How to use it\n1. For a URL or text, call **generate_qr** with the data you want to encode. Use SVG format for print and PNG for digital use.\n2. For WiFi sharing, call **generate_wifi_qr** with the network name (SSID) and password — it produces a code phones can scan to connect automatically.\n3. For a contact card, call **generate_vcard_qr** with name, phone, email, and company — scanning it adds the contact instantly.\n\n### Getting started\nCall **generate_qr** with any URL to get a permanent image link immediately — no setup required.","version":"0.02","categories":["productivity","media"],"currency":"USD","skills":[{"name":"generate_qr","displayName":"Generate QR Code","description":"Generate a QR code from any text or URL. Returns a permanent image URL and downloadable file. Supports custom size, colors, format (PNG/SVG/JPG/GIF), and error correction level.","inputSchema":{"type":"object","properties":{"data":{"type":"string","description":"The content to encode in the QR code — a URL, plain text, email address, phone number, or any string up to ~900 characters"},"size":{"type":"number","default":300,"description":"QR code image size in pixels (10–1000, default 300). The image is always square."},"format":{"type":"string","enum":["png","svg","jpg","gif"],"default":"png","description":"Output image format (default \"png\"). Use \"svg\" for scalable vector output."},"ecc":{"type":"string","enum":["L","M","Q","H"],"default":"M","description":"Error correction level: L (~7%), M (~15%), Q (~25%), H (~30%). Higher = more resilient but denser. Default \"M\"."},"color":{"type":"string","description":"QR code foreground color as hex (e.g. \"#000000\", \"FF0000\"). Default is black."},"bgcolor":{"type":"string","description":"Background color as hex (e.g. \"#FFFFFF\", \"FFF\"). Default is white."},"margin":{"type":"number","description":"Quiet zone margin in pixels (0–50). Default 1."}},"required":["data"]},"annotations":{},"examples":[{"description":"QR code for a URL","input":{"data":"https://toolrouter.com"}},{"description":"Large SVG QR code with custom colors","input":{"data":"https://github.com/public-apis/public-apis","size":500,"format":"svg","color":"#1a1a2e","bgcolor":"#e8e8e8","ecc":"H"}},{"description":"QR code for plain text","input":{"data":"Hello, scan this QR code to read a message!"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"qr_url_direct":{"type":"string","description":"Permanent URL that renders the QR code on-demand"},"format":{"type":"string","description":"Output image format"},"size":{"type":"number","description":"Image dimensions in pixels (square)"},"data_length":{"type":"number","description":"Length of the encoded data string"}}},"contentType":"image","returns":"QR code image URL (permanent), downloadable image via asset system, image dimensions, and encoded data length"},{"name":"generate_wifi_qr","displayName":"Generate WiFi QR Code","description":"Generate a QR code that lets people connect to a WiFi network by scanning. Encodes SSID, password, and encryption type in the standard WiFi QR format. Scanning auto-connects on most phones.","inputSchema":{"type":"object","properties":{"ssid":{"type":"string","description":"The WiFi network name (SSID)"},"password":{"type":"string","description":"The WiFi password. Omit for open networks."},"encryption":{"type":"string","enum":["WPA","WEP","nopass"],"default":"WPA","description":"Encryption type: \"WPA\" (WPA/WPA2/WPA3), \"WEP\" (legacy), \"nopass\" (open). Auto-detects based on password presence."},"hidden":{"type":"boolean","default":false,"description":"Whether the network is hidden (not broadcasting SSID). Default false."},"size":{"type":"number","default":300,"description":"QR code image size in pixels (default 300)"},"format":{"type":"string","enum":["png","svg","jpg","gif"],"default":"png","description":"Output image format (default \"png\")"},"ecc":{"type":"string","enum":["L","M","Q","H"],"default":"H","description":"Error correction level (default \"H\" for WiFi QR — higher resilience when printed)"},"color":{"type":"string","description":"QR code foreground color as hex"},"bgcolor":{"type":"string","description":"Background color as hex"}},"required":["ssid"]},"annotations":{},"examples":[{"description":"WiFi QR for a WPA2 network","input":{"ssid":"MyHomeWifi","password":"supersecret123"}},{"description":"WiFi QR for an open guest network","input":{"ssid":"CoffeeShop_Guest","encryption":"nopass"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"qr_url_direct":{"type":"string","description":"Permanent URL that renders the QR code on-demand"},"format":{"type":"string","description":"Output image format"},"size":{"type":"number","description":"Image dimensions in pixels"},"ssid":{"type":"string","description":"The WiFi network name"},"encryption":{"type":"string","description":"The encryption type used"},"hidden":{"type":"boolean","description":"Whether the network is hidden"}}},"contentType":"image","returns":"WiFi QR code image URL, downloadable image, network details (SSID, encryption, hidden status)"},{"name":"generate_vcard_qr","displayName":"Generate Contact QR Code","description":"Generate a QR code containing a vCard contact card. When scanned, the contact is automatically added to the phone's address book. Supports name, phone, email, organization, title, URL, and address.","inputSchema":{"type":"object","properties":{"first_name":{"type":"string","description":"Contact first name (required)"},"last_name":{"type":"string","description":"Contact last name"},"phone":{"type":"string","description":"Phone number (e.g. \"+1-555-123-4567\")"},"email":{"type":"string","description":"Email address"},"organization":{"type":"string","description":"Company or organization name"},"title":{"type":"string","description":"Job title or role"},"url":{"type":"string","description":"Website URL"},"address":{"type":"string","description":"Street address"},"note":{"type":"string","description":"Additional notes about the contact"},"size":{"type":"number","default":300,"description":"QR code image size in pixels (default 300)"},"format":{"type":"string","enum":["png","svg","jpg","gif"],"default":"png","description":"Output image format (default \"png\")"},"ecc":{"type":"string","enum":["L","M","Q","H"],"default":"M","description":"Error correction level (default \"M\")"},"color":{"type":"string","description":"QR code foreground color as hex"},"bgcolor":{"type":"string","description":"Background color as hex"}},"required":["first_name"]},"annotations":{},"examples":[{"description":"Business card QR with full contact details","input":{"first_name":"Jane","last_name":"Smith","phone":"+1-555-123-4567","email":"jane@example.com","organization":"Acme Corp","title":"CTO","url":"https://acme.com"}},{"description":"Simple contact QR with just name and phone","input":{"first_name":"John","phone":"+44-20-1234-5678"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"qr_url_direct":{"type":"string","description":"Permanent URL that renders the QR code on-demand"},"format":{"type":"string","description":"Output image format"},"size":{"type":"number","description":"Image dimensions in pixels"},"contact_name":{"type":"string","description":"Full name of the contact"},"vcard_fields":{"type":"array","items":{"type":"string"},"description":"List of vCard fields included"}}},"contentType":"image","returns":"Contact vCard QR code image URL, downloadable image, contact name, and list of included fields"}],"icon":"/icons/qr-code-generator.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Generate a QR code for [URL or text]. Make it [size] pixels and save it as a PNG.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"play-store-aso","displayName":"Play Store ASO","subtitle":"Optimize your Play Store listing","about":"**Play Store ASO** covers the full cycle of Android app store optimisation — from competitor research with no credentials required, to managing your own listing, screenshots, releases, and reviews through the official API. It's the fastest way to research what's ranking for a keyword, audit your listing for gaps, update titles and descriptions across multiple locales, and respond to user reviews at scale.\n\nResearch skills work without any account connection. Management skills — updating listings, uploading screenshots, replying to reviews — require a Google Play Console service account. The workflow is designed to be safe: update_listing defaults to dry-run mode so you can preview every change before applying it.\n\n### What you can do\n- Search Google Play by keyword to see what apps rank and their ratings, installs, and prices\n- Get full metadata for any Android app by package name\n- Audit all your store listings across locales for missing or short content\n- Export a complete backup of all listings, images, and track data\n- Update titles, descriptions, and video URLs per locale — with dry-run preview\n- List, upload, and manage screenshots and feature graphics by type and locale\n- Check release track status across production, beta, alpha, and internal tracks\n- Fetch and reply to user reviews\n\n### Who it's for\nMobile app developers, product managers, growth marketers, and ASO specialists who need to research competitors and optimise their own Google Play listings. Useful for agencies managing multiple apps and developers launching new apps who want to understand the competitive landscape.\n\n### How to use it\n1. Use **search_apps** to find what ranks for your target keyword — no credentials needed\n2. Use **app_details** to get full metadata for any app by package name\n3. Connect your Google Play service account, then use **audit_listings** to find gaps in your listing\n4. Use **update_listing** with dry_run: true to preview changes before applying them\n5. Use **list_reviews** and **reply_to_review** to manage user feedback\n\n### Getting started\nResearch skills work immediately. Management skills require connecting your Google Play Console service account.","version":"0.04","categories":["marketing","analytics"],"currency":"USD","skills":[{"name":"search_apps","displayName":"Search Apps","description":"Search the Google Play Store for apps matching a search term. Returns app title, developer, rating, reviews, installs, and price for each result. Use this to see what apps rank for a given keyword.","inputSchema":{"type":"object","properties":{"term":{"type":"string","description":"Search term to look up"},"country":{"type":"string","default":"us","description":"Country code (e.g. us, gb, de, jp)"},"num":{"type":"number","default":10,"description":"Number of results to return (max 20)"}},"required":["term"]},"annotations":{},"examples":[{"description":"Search Google Play for fitness apps","input":{"term":"fitness tracker","country":"us","num":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Matching apps","items":{"type":"object","properties":{"app_id":{"type":"string","description":"Android package name"},"title":{"type":"string","description":"App title"},"rating":{"type":"number","description":"Average rating (1-5)"},"reviews":{"type":"number","description":"Total review count"},"installs":{"type":"string","description":"Install count range"},"price":{"type":"string","description":"Price string (e.g. \"Free\", \"$4.99\")"},"category":{"type":"string","description":"Primary category or genre"},"url":{"type":"string","description":"Play Store URL"}}}},"count":{"type":"number","description":"Number of results returned"},"term":{"type":"string","description":"Search term used"},"country":{"type":"string","description":"Country code used"}}},"returns":"List of matching Android apps with title, developer, rating, review count, installs, price, and package name"},{"name":"app_details","displayName":"App Details","description":"Get full details for a specific Android app on Google Play Store. Returns title, rating, reviews, description, version, category, developer info, install counts, and more. Use a package name like \"com.example.app\".","inputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Android package name (e.g. \"com.whatsapp\")"},"country":{"type":"string","default":"us","description":"Country code"}},"required":[]},"annotations":{},"examples":[{"description":"Get details for WhatsApp on Android","input":{"app_id":"com.whatsapp"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"app_id":{"type":"string","description":"Package name"},"title":{"type":"string","description":"App title"},"rating":{"type":"number","description":"Average rating (1-5)"},"reviews":{"type":"number","description":"Total review count"},"installs":{"type":"string","description":"Install count range"},"min_installs":{"type":"number","description":"Minimum install count"},"max_installs":{"type":"number","description":"Maximum install count"},"price":{"type":"string","description":"Price string"},"category":{"type":"string","description":"Primary category"},"description":{"type":"string","description":"Full description"},"summary":{"type":"string","description":"Short summary"},"version":{"type":"string","description":"Current version"},"updated":{"type":"string","description":"Last updated date"},"content_rating":{"type":"string","description":"Content rating"},"url":{"type":"string","description":"Play Store URL"}}},"returns":"Full Android app metadata including title, rating, reviews, description, version, category, installs, and developer info"},{"name":"audit_listings","displayName":"Audit Listings","description":"Audit all Google Play store listings across locales with warnings for missing or underutilized fields. Checks for empty short descriptions, full descriptions under 100 characters, and missing titles.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name (e.g. \"com.example.app\"). Falls back to saved play_store_app_id."}},"required":[]},"annotations":{},"examples":[{"description":"Audit listings for an Android app","input":{"package_name":"com.example.app"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Package name audited"},"listings":{"type":"array","description":"All locale listings","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code (e.g. en-US)"},"title":{"type":"string","description":"Listing title"},"short_description":{"type":"string","description":"Short description"},"full_description":{"type":"string","description":"Full description"},"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."}}}},"summary":{"type":"object","properties":{"total_locales":{"type":"number","description":"Number of locales found"},"warnings":{"type":"array","description":"List of warning messages","items":{"type":"string"}}}}}},"returns":"Audit report with all locale listings and warnings for missing or short content"},{"name":"export_listings","displayName":"Export Listings","description":"Full export of all Google Play Store data including listings, images, tracks, and app details. Returns a comprehensive JSON backup of the entire store presence for a given package.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."}},"required":[]},"annotations":{},"examples":[{"description":"Export all data for an Android app","input":{"package_name":"com.example.app"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Package name exported"},"export_date":{"type":"string","description":"ISO timestamp of export"},"details":{"type":"object","description":"App details (default language, contact info)"},"listings":{"type":"object","description":"Map of locale to listing data (title, descriptions)"},"tracks":{"type":"array","description":"Release tracks with version info"},"images":{"type":"object","description":"Map of locale to image type to image list"}}},"returns":"Complete JSON export of all Play Store data: listings, images, tracks, and app details"},{"name":"update_listing","displayName":"Update Listing","description":"Update a Google Play store listing for a specific locale. Supports title, short description, full description, and video URL. Defaults to dry-run mode — set dry_run to false to apply changes.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."},"locale":{"type":"string","description":"Locale code (e.g. \"en-US\", \"de-DE\")"},"title":{"type":"string","description":"New app title (max 30 chars)"},"short_description":{"type":"string","description":"New short description (max 80 chars)"},"full_description":{"type":"string","description":"New full description (max 4000 chars)"},"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"dry_run":{"type":"boolean","default":true,"description":"If true, show changes without applying them (default: true)"}},"required":["locale"]},"annotations":{},"examples":[{"description":"Preview listing update for en-US","input":{"package_name":"com.example.app","locale":"en-US","title":"My App","short_description":"The best app ever","dry_run":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"updates_applied":{"type":"array","description":"List of field changes","items":{"type":"object","properties":{"field":{"type":"string","description":"Field name changed"},"old_value":{"type":"string","description":"Previous value"},"new_value":{"type":"string","description":"New value"}}}},"locale":{"type":"string","description":"Locale updated"},"dry_run":{"type":"boolean","description":"Whether this was a dry run"}}},"returns":"List of changes applied (or that would be applied in dry-run mode) with old and new values"},{"name":"list_images","displayName":"List Images","description":"List images by type and locale for a Google Play store listing. Returns image IDs, URLs, and SHA256 hashes. Supports phone screenshots, feature graphics, icons, tablet screenshots, wear, and TV assets.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."},"locale":{"type":"string","default":"en-US","description":"Locale code (default: en-US)"},"image_type":{"type":"string","enum":["phoneScreenshots","featureGraphic","icon","sevenInchScreenshots","tenInchScreenshots","wearScreenshots","tvBanner","tvScreenshots"],"description":"Type of image to list"}},"required":["image_type"]},"annotations":{},"examples":[{"description":"List phone screenshots for en-US","input":{"package_name":"com.example.app","image_type":"phoneScreenshots","locale":"en-US"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"List of images","items":{"type":"object","properties":{"id":{"type":"string","description":"Image ID"},"url":{"type":"string","description":"Image URL"},"sha256":{"type":"string","description":"SHA256 hash"}}}},"image_type":{"type":"string","description":"Image type queried"},"locale":{"type":"string","description":"Locale queried"},"count":{"type":"number","description":"Number of images found"}}},"returns":"List of images with IDs, URLs, and SHA256 hashes for the specified type and locale"},{"name":"upload_image","displayName":"Upload Image","description":"Upload an image (screenshot, icon, or feature graphic) to a Google Play store listing. Downloads the image from the provided URL and uploads it via the Google Play API. The edit is committed immediately.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."},"locale":{"type":"string","description":"Locale code (e.g. \"en-US\")"},"image_type":{"type":"string","enum":["phoneScreenshots","featureGraphic","icon","sevenInchScreenshots","tenInchScreenshots","wearScreenshots","tvBanner","tvScreenshots"],"description":"Type of image to upload"},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["locale","image_type","image_url"]},"annotations":{},"examples":[{"description":"Upload a phone screenshot","input":{"package_name":"com.example.app","locale":"en-US","image_type":"phoneScreenshots","image_url":"https://example.com/screenshot.png"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"uploaded":{"type":"boolean","description":"Whether the upload succeeded"},"image_type":{"type":"string","description":"Image type uploaded"},"locale":{"type":"string","description":"Locale uploaded to"},"image_id":{"type":"string","description":"ID of the uploaded image"}}},"returns":"Confirmation of successful upload with the image ID, type, and locale"},{"name":"list_tracks","displayName":"List Tracks","description":"Query all release tracks with version info for a Google Play app. Returns track name, release status, version codes, user fraction (for staged rollouts), and release notes per locale.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."}},"required":[]},"annotations":{},"examples":[{"description":"List all release tracks","input":{"package_name":"com.example.app"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tracks":{"type":"array","description":"All release tracks","items":{"type":"object","properties":{"track":{"type":"string","description":"Track name (e.g. production, beta, alpha, internal)"},"releases":{"type":"array","description":"Releases in this track","items":{"type":"object","properties":{"name":{"type":"string","description":"Release name"},"version_codes":{"type":"array","description":"Version codes","items":{"type":"number"}},"status":{"type":"string","description":"Release status (e.g. completed, draft, inProgress)"},"release_notes":{"type":"array","description":"Release notes per locale","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code"},"text":{"type":"string","description":"Release note text"}}}}}}}}}},"package_name":{"type":"string","description":"Package name queried"}}},"returns":"All release tracks with version codes, status, rollout fraction, and localized release notes"},{"name":"list_reviews","displayName":"List Reviews","description":"Fetch recent user reviews for a Google Play app. Returns review text, star rating, author, device info, app version, and any developer reply. Requires Google Play Console API access.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."},"max_results":{"type":"number","default":20,"description":"Maximum number of reviews to return (default: 20)"}},"required":[]},"annotations":{},"examples":[{"description":"Fetch recent reviews","input":{"package_name":"com.example.app","max_results":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"reviews":{"type":"array","description":"List of reviews","items":{"type":"object","properties":{"id":{"type":"string","description":"Review ID"},"author":{"type":"string","description":"Author name"},"rating":{"type":"number","description":"Star rating (1-5)"},"text":{"type":"string","description":"Review text"},"date":{"type":"string","description":"Review date (ISO)"},"device":{"type":"string","description":"Device name"},"os_version":{"type":"string","description":"Android OS version"},"app_version":{"type":"string","description":"App version at time of review"},"reply":{"type":"object","description":"Developer reply (if any)","properties":{"text":{"type":"string","description":"Reply text"},"date":{"type":"string","description":"Reply date (ISO)"}}}}}},"total":{"type":"number","description":"Number of reviews returned"},"package_name":{"type":"string","description":"Package name queried"}}},"returns":"List of user reviews with rating, text, device info, app version, and developer reply status"},{"name":"reply_to_review","displayName":"Reply to Review","description":"Reply to a user review on Google Play. Requires the review ID (from list_reviews) and the reply text. The reply will be visible publicly on the Play Store listing.","inputSchema":{"type":"object","properties":{"package_name":{"type":"string","description":"Android package name. Falls back to saved play_store_app_id."},"review_id":{"type":"string","description":"Review ID to reply to (from list_reviews)"},"reply_text":{"type":"string","description":"Reply text to post"}},"required":["review_id","reply_text"]},"annotations":{},"examples":[{"description":"Reply to a review","input":{"package_name":"com.example.app","review_id":"abc123","reply_text":"Thanks for the feedback!"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"review_id":{"type":"string","description":"Review ID replied to"},"replied":{"type":"boolean","description":"Whether the reply was posted"},"reply_text":{"type":"string","description":"Reply text posted"}}},"returns":"Confirmation that the reply was posted with the review ID and reply text"}],"icon":"/icons/play-store-aso.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-06","changes":["Fixed free app price displaying incorrectly in search results"]},{"version":"0.04","date":"2026-05-18","changes":["Skills that need a connected Google Play Console account now explain how to connect it, instead of showing a generic \"service unavailable\" message"]}],"premadePrompt":"Research the top apps on Google Play for the keyword \"[search keyword]\" and tell me how my app [app name or package name] compares. What gaps are there in my listing I should fix?","requirements":[{"name":"gpc_service_account_key","type":"secret","displayName":"Google Play Service Account Key","description":"Google Play Console service account JSON key for API access","envFallback":"GPC_SERVICE_ACCOUNT_KEY","acquireUrl":"https://console.cloud.google.com/iam-admin/serviceaccounts","setupGuide":"A Google Cloud service account JSON key that has been granted access in Google Play Console.\n\nStep 1 — Create a Google Cloud project:\n1. Go to https://console.cloud.google.com/\n2. Click the project dropdown at the top and click \"New Project\"\n3. Name it (e.g. \"Play Store API\") and click \"Create\"\n\nStep 2 — Enable the Google Play Android Developer API:\n1. Go to https://console.cloud.google.com/apis/library/androidpublisher.googleapis.com\n2. Make sure your project is selected, then click \"Enable\"\n\nStep 3 — Create a service account:\n1. Go to https://console.cloud.google.com/iam-admin/serviceaccounts\n2. Click \"+ Create Service Account\"\n3. Name it (e.g. \"Play Store API Access\") and click \"Create and Continue\"\n4. Skip the role assignment steps — permissions are set in Play Console instead\n5. Click \"Done\" and note the service account email address\n\nStep 4 — Download the JSON key:\n1. Click the three-dot menu on your service account row\n2. Click \"Manage keys\" > \"Add Key\" > \"Create new key\"\n3. Select \"JSON\" and click \"Create\" — the key file downloads automatically\n\nStep 5 — Grant access in Google Play Console:\n1. Go to https://play.google.com/console/\n2. Click \"Users and permissions\" in the sidebar\n3. Click \"Invite new users\"\n4. Paste the service account email address\n5. Check \"View app information and download bulk reports\" (and other permissions as needed)\n6. Click \"Invite user\"\n\nNote: It can take up to 24–36 hours for the credentials to start working after setup.\n\nPaste the ENTIRE contents of the downloaded JSON file as the credential value."},{"name":"play_store_app_id","type":"credential","displayName":"Google Play App ID","description":"Default Android package name (e.g. com.example.app)","acquireUrl":"https://play.google.com/console","setupGuide":"Your Play Store App ID is your Android package name (e.g. com.instagram.android).\n\nFrom Google Play Console (app owners):\n1. Go to https://play.google.com/console and sign in\n2. Your package name is shown next to each app in the \"All apps\" list\n3. Or select your app and go to Grow > Store presence > Store settings\n\nFrom a public Play Store URL (anyone):\nThe package name is the \"id\" parameter in the URL. For example:\nhttps://play.google.com/store/apps/details?id=com.instagram.android → App ID is com.instagram.android"}],"credentials":[{"name":"gpc_service_account_key","type":"secret","displayName":"Google Play Service Account Key","description":"Google Play Console service account JSON key for API access","envFallback":"GPC_SERVICE_ACCOUNT_KEY","acquireUrl":"https://console.cloud.google.com/iam-admin/serviceaccounts","setupGuide":"A Google Cloud service account JSON key that has been granted access in Google Play Console.\n\nStep 1 — Create a Google Cloud project:\n1. Go to https://console.cloud.google.com/\n2. Click the project dropdown at the top and click \"New Project\"\n3. Name it (e.g. \"Play Store API\") and click \"Create\"\n\nStep 2 — Enable the Google Play Android Developer API:\n1. Go to https://console.cloud.google.com/apis/library/androidpublisher.googleapis.com\n2. Make sure your project is selected, then click \"Enable\"\n\nStep 3 — Create a service account:\n1. Go to https://console.cloud.google.com/iam-admin/serviceaccounts\n2. Click \"+ Create Service Account\"\n3. Name it (e.g. \"Play Store API Access\") and click \"Create and Continue\"\n4. Skip the role assignment steps — permissions are set in Play Console instead\n5. Click \"Done\" and note the service account email address\n\nStep 4 — Download the JSON key:\n1. Click the three-dot menu on your service account row\n2. Click \"Manage keys\" > \"Add Key\" > \"Create new key\"\n3. Select \"JSON\" and click \"Create\" — the key file downloads automatically\n\nStep 5 — Grant access in Google Play Console:\n1. Go to https://play.google.com/console/\n2. Click \"Users and permissions\" in the sidebar\n3. Click \"Invite new users\"\n4. Paste the service account email address\n5. Check \"View app information and download bulk reports\" (and other permissions as needed)\n6. Click \"Invite user\"\n\nNote: It can take up to 24–36 hours for the credentials to start working after setup.\n\nPaste the ENTIRE contents of the downloaded JSON file as the credential value."},{"name":"play_store_app_id","type":"credential","displayName":"Google Play App ID","description":"Default Android package name (e.g. com.example.app)","acquireUrl":"https://play.google.com/console","setupGuide":"Your Play Store App ID is your Android package name (e.g. com.instagram.android).\n\nFrom Google Play Console (app owners):\n1. Go to https://play.google.com/console and sign in\n2. Your package name is shown next to each app in the \"All apps\" list\n3. Or select your app and go to Grow > Store presence > Store settings\n\nFrom a public Play Store URL (anyone):\nThe package name is the \"id\" parameter in the URL. For example:\nhttps://play.google.com/store/apps/details?id=com.instagram.android → App ID is com.instagram.android"}]},{"name":"app-review-analysis","displayName":"App Review Analysis","subtitle":"Turn reviews into product insights","about":"**App Review Analysis** pulls reviews from the App Store and Google Play, then surfaces patterns in sentiment, themes, and user complaints across one or more apps. It's a fast way to understand what users love, what they hate, and how you stack up against competitors.\n\nRather than reading hundreds of reviews manually, you can fetch a sample, cluster it into themes, track sentiment over time, and run side-by-side competitor comparisons. Every review is normalized across both platforms so iOS and Android data sits in a consistent format.\n\n### What you can do\n- Fetch and normalize reviews from App Store and Google Play for any app\n- Cluster reviews into meaningful themes and topics automatically\n- Track sentiment trends over time to spot rating changes after updates\n- Compare your app against competitors side by side on sentiment, ratings, and recurring themes\n\n### Who it's for\nProduct managers and app developers who want to understand user feedback at scale. Growth teams tracking competitive positioning through public review data. Marketers identifying the messaging themes that resonate most with users.\n\n### How to use it\n1. Use **aggregate_reviews** to fetch reviews for one or more apps — specify platform, app ID, and optionally a role (primary or competitor)\n2. Run **cluster_themes** on the fetched reviews to group feedback into topics\n3. Use **sentiment_trends** to see how ratings and sentiment have shifted over time\n4. Call **compare_competitors** with a primary app and one or more competitor apps to run a side-by-side breakdown\n\n### Getting started\nStart with **aggregate_reviews** — pass the App Store numeric ID or bundle ID for iOS, or the package name for Android.","version":"0.03","categories":["analytics","marketing","ai"],"currency":"USD","skills":[{"name":"aggregate_reviews","displayName":"Aggregate Reviews","description":"Fetch and normalize App Store and Play Store reviews across one or more apps so you can analyze one consistent review dataset.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","description":"Apps to aggregate reviews for. Omit to use saved ios_app_id and/or play_store_app_id defaults.","items":{"type":"object","description":"One app target to fetch reviews for","properties":{"platform":{"type":"string","description":"Store platform: \"ios\" for App Store or \"android\" for Google Play"},"app_id":{"type":"string","description":"App identifier. Use an App Store numeric ID or bundle ID for iOS, and a package name for Android."},"label":{"type":"string","description":"Optional label used in analysis output instead of the store title"},"role":{"type":"string","description":"Role in the analysis: \"primary\" or \"competitor\""},"country":{"type":"string","description":"Optional country override for this specific target"}}}},"country":{"type":"string","description":"Country code used for review fetching. Defaults to \"us\".","default":"us"},"language":{"type":"string","description":"Language code for Play Store review fetching. Defaults to \"en\".","default":"en"},"sort":{"type":"string","description":"Review ordering: \"recent\" or \"helpful\". Defaults to \"recent\".","enum":["recent","helpful"],"default":"recent"},"limit_per_target":{"type":"number","description":"Maximum reviews to fetch per app target. Defaults to 50 and caps at 200.","default":50}},"required":[]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Aggregate Spotify reviews across iOS and Android","input":{"targets":[{"platform":"ios","app_id":"324684580","label":"Spotify iOS","role":"primary"},{"platform":"android","app_id":"com.spotify.music","label":"Spotify Android","role":"primary"}],"country":"us","limit_per_target":20}},{"description":"Aggregate reviews for one iOS app","input":{"targets":[{"platform":"ios","app_id":"com.spotify.client","label":"Spotify App Store","role":"primary"}],"country":"us","sort":"helpful","limit_per_target":25}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"generated_at":{"type":"string","description":"Timestamp when the aggregation ran"},"country":{"type":"string","description":"Country used for the fetch"},"language":{"type":"string","description":"Language used for Play Store review fetching"},"sort":{"type":"string","description":"Review sort order used"},"total_reviews":{"type":"number","description":"Total normalized reviews returned across all targets"},"targets":{"type":"array","description":"Per-app review summaries","items":{"type":"object","description":"Summary stats for one analyzed app target","properties":{"target_key":{"type":"string","description":"Stable key combining platform and store app ID"},"platform":{"type":"string","description":"Platform analyzed"},"role":{"type":"string","description":"Role in the analysis set"},"label":{"type":"string","description":"Display label for the app"},"app_id":{"type":"string","description":"Canonical app identifier used for the target"},"title":{"type":"string","description":"Store title for the app"},"developer":{"type":"string","description":"Developer name"},"rating_average_store":{"type":"number","description":"Storewide average rating when available"},"review_count_store":{"type":"number","description":"Storewide review count when available"},"reviews_fetched":{"type":"number","description":"How many reviews were fetched for this target"},"average_rating_sample":{"type":"number","description":"Average rating across the fetched review sample"},"average_sentiment_score":{"type":"number","description":"Average sentiment score across the fetched review sample"},"sentiment_label":{"type":"string","description":"Dominant sentiment across the fetched review sample"}}}},"reviews":{"type":"array","description":"Normalized reviews across all requested apps","items":{"type":"object","description":"One normalized review across App Store or Play Store","properties":{"review_key":{"type":"string","description":"Stable unique key for the review across platform and app"},"review_id":{"type":"string","description":"Store-native review identifier"},"target_key":{"type":"string","description":"Associated target key"},"platform":{"type":"string","description":"Platform the review came from"},"role":{"type":"string","description":"Role of the app in the analysis set"},"label":{"type":"string","description":"App label used in analysis"},"app_title":{"type":"string","description":"Store title for the app"},"author_name":{"type":"string","description":"Reviewer display name"},"rating":{"type":"number","description":"Star rating from 1-5"},"title":{"type":"string","description":"Review title when available"},"text":{"type":"string","description":"Review body text"},"review_date":{"type":"string","description":"ISO timestamp for the review when available"},"sentiment_label":{"type":"string","description":"Derived sentiment label"},"sentiment_score":{"type":"number","description":"Derived sentiment score from -1 to 1"}}}},"summary":{"type":"object","description":"Aggregate counts, sentiment breakdown, rating distribution, and review date range"}}},"returns":"Unified review dataset with normalized review rows, per-app summaries, and aggregate sentiment and rating stats"},{"name":"cluster_themes","displayName":"Cluster Themes","description":"Cluster reviews into what users love and hate so you can spot feature opportunities, recurring pain points worth solving, and the biggest product signals.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","description":"Apps to analyze. Omit to use saved ios_app_id and/or play_store_app_id defaults.","items":{"type":"object","description":"One app target to fetch reviews for","properties":{"platform":{"type":"string","description":"Store platform: \"ios\" for App Store or \"android\" for Google Play"},"app_id":{"type":"string","description":"App identifier. Use an App Store numeric ID or bundle ID for iOS, and a package name for Android."},"label":{"type":"string","description":"Optional label used in analysis output instead of the store title"},"role":{"type":"string","description":"Role in the analysis: \"primary\" or \"competitor\""},"country":{"type":"string","description":"Optional country override for this specific target"}}}},"country":{"type":"string","description":"Country code used for review fetching. Defaults to \"us\".","default":"us"},"language":{"type":"string","description":"Language code for Play Store review fetching. Defaults to \"en\".","default":"en"},"sort":{"type":"string","description":"Review ordering: \"recent\" or \"helpful\". Defaults to \"recent\".","enum":["recent","helpful"],"default":"recent"},"limit_per_target":{"type":"number","description":"Maximum reviews to fetch per app before sampling for analysis. Defaults to 50.","default":50},"max_themes":{"type":"number","description":"Maximum number of themes to return. Defaults to 6 and caps at 10.","default":6},"focus":{"type":"string","description":"Optional angle for clustering such as bugs, onboarding, pricing, ads, or retention."}},"required":[]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Cluster recurring themes for Spotify reviews","input":{"targets":[{"platform":"ios","app_id":"324684580","label":"Spotify iOS","role":"primary"},{"platform":"android","app_id":"com.spotify.music","label":"Spotify Android","role":"primary"}],"country":"us","limit_per_target":25,"max_themes":5}},{"description":"Cluster bug-focused themes for one Android app","input":{"targets":[{"platform":"android","app_id":"com.spotify.music","label":"Spotify Android","role":"primary"}],"country":"us","focus":"bugs, crashes, playback issues, and ads","limit_per_target":30}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"generated_at":{"type":"string","description":"Timestamp when the clustering ran"},"country":{"type":"string","description":"Country used for review fetching"},"language":{"type":"string","description":"Language used for Play Store review fetching"},"sort":{"type":"string","description":"Review sort order used"},"total_reviews_fetched":{"type":"number","description":"Total reviews fetched before sampling"},"reviews_analyzed":{"type":"number","description":"Review sample size actually sent for clustering"},"target_count":{"type":"number","description":"Number of app targets included"},"targets":{"type":"array","description":"Per-app review summaries used for analysis","items":{"type":"object","description":"Summary stats for one analyzed app target","properties":{"target_key":{"type":"string","description":"Stable key combining platform and store app ID"},"platform":{"type":"string","description":"Platform analyzed"},"role":{"type":"string","description":"Role in the analysis set"},"label":{"type":"string","description":"Display label for the app"},"app_id":{"type":"string","description":"Canonical app identifier used for the target"},"title":{"type":"string","description":"Store title for the app"},"developer":{"type":"string","description":"Developer name"},"rating_average_store":{"type":"number","description":"Storewide average rating when available"},"review_count_store":{"type":"number","description":"Storewide review count when available"},"reviews_fetched":{"type":"number","description":"How many reviews were fetched for this target"},"average_rating_sample":{"type":"number","description":"Average rating across the fetched review sample"},"average_sentiment_score":{"type":"number","description":"Average sentiment score across the fetched review sample"},"sentiment_label":{"type":"string","description":"Dominant sentiment across the fetched review sample"}}}},"sample_review_keys":{"type":"array","description":"Review keys included in the LLM sample","items":{"type":"string"}},"market_summary":{"type":"string","description":"High-level synthesis of the review landscape"},"themes":{"type":"array","description":"Clustered review themes with evidence and actions","items":{"type":"object","description":"One clustered review theme grounded in the analyzed sample","properties":{"theme":{"type":"string","description":"Short label for the recurring theme"},"sentiment":{"type":"string","description":"Overall theme sentiment: positive, neutral, negative, or mixed"},"review_count":{"type":"number","description":"How many sampled reviews matched this theme"},"share_of_reviews":{"type":"number","description":"Theme share across the analyzed review sample"},"severity":{"type":"string","description":"Suggested urgency for this theme"},"summary":{"type":"string","description":"Why the theme matters"},"affected_targets":{"type":"array","description":"Target keys affected by the theme","items":{"type":"string"}},"affected_apps":{"type":"array","description":"App labels affected by the theme","items":{"type":"string"}},"evidence":{"type":"array","description":"Representative review evidence for the theme","items":{"type":"object","properties":{"review_key":{"type":"string","description":"Review key used as evidence"},"quote":{"type":"string","description":"Short quote from the review"}}}},"suggested_actions":{"type":"array","description":"Suggested product, support, or ASO actions","items":{"type":"string"}}}}},"quick_wins":{"type":"array","description":"Immediate actions suggested by the review sample","items":{"type":"string"}},"watchouts":{"type":"array","description":"Risks or emerging issues to monitor","items":{"type":"string"}}}},"returns":"Theme clusters with evidence, severity, cross-app impact, and prioritized actions grounded in the sampled reviews"},{"name":"sentiment_trends","displayName":"Sentiment Trends","description":"Track sentiment, rating mix, and recurring positive and negative terms over time so you can spot improving or declining review momentum.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","description":"Apps to analyze. Omit to use saved ios_app_id and/or play_store_app_id defaults.","items":{"type":"object","description":"One app target to fetch reviews for","properties":{"platform":{"type":"string","description":"Store platform: \"ios\" for App Store or \"android\" for Google Play"},"app_id":{"type":"string","description":"App identifier. Use an App Store numeric ID or bundle ID for iOS, and a package name for Android."},"label":{"type":"string","description":"Optional label used in analysis output instead of the store title"},"role":{"type":"string","description":"Role in the analysis: \"primary\" or \"competitor\""},"country":{"type":"string","description":"Optional country override for this specific target"}}}},"country":{"type":"string","description":"Country code used for review fetching. Defaults to \"us\".","default":"us"},"language":{"type":"string","description":"Language code for Play Store review fetching. Defaults to \"en\".","default":"en"},"sort":{"type":"string","description":"Review ordering: \"recent\" or \"helpful\". Defaults to \"recent\".","enum":["recent","helpful"],"default":"recent"},"limit_per_target":{"type":"number","description":"Maximum reviews to fetch per app target. Defaults to 50.","default":50},"bucket":{"type":"string","description":"Time bucket for the trend series: day, week, or month. Defaults to week.","enum":["day","week","month"],"default":"week"}},"required":[]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Track weekly sentiment trends for Spotify reviews","input":{"targets":[{"platform":"ios","app_id":"324684580","label":"Spotify iOS","role":"primary"},{"platform":"android","app_id":"com.spotify.music","label":"Spotify Android","role":"primary"}],"country":"us","limit_per_target":30,"bucket":"week"}},{"description":"Track monthly sentiment for one app using helpful reviews","input":{"targets":[{"platform":"android","app_id":"com.spotify.music","label":"Spotify Android","role":"primary"}],"country":"us","sort":"helpful","limit_per_target":40,"bucket":"month"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"generated_at":{"type":"string","description":"Timestamp when the trend calculation ran"},"country":{"type":"string","description":"Country used for review fetching"},"language":{"type":"string","description":"Language used for Play Store review fetching"},"sort":{"type":"string","description":"Review sort order used"},"bucket":{"type":"string","description":"Bucket size used for the trend series"},"total_reviews":{"type":"number","description":"Total reviews included in the analysis"},"overall":{"type":"object","description":"Aggregate review, sentiment, and rating summary"},"series":{"type":"array","description":"Time series across all analyzed apps","items":{"type":"object","description":"Sentiment and rating snapshot for one time bucket","properties":{"bucket":{"type":"string","description":"Bucket start date in ISO YYYY-MM-DD format"},"review_count":{"type":"number","description":"Number of reviews in the bucket"},"average_rating":{"type":"number","description":"Average star rating in the bucket"},"average_sentiment_score":{"type":"number","description":"Average sentiment score in the bucket"},"positive":{"type":"number","description":"Positive review count in the bucket"},"neutral":{"type":"number","description":"Neutral review count in the bucket"},"negative":{"type":"number","description":"Negative review count in the bucket"}}}},"per_target":{"type":"array","description":"Per-app trend breakdown with top positive and negative terms","items":{"type":"object","properties":{"target_key":{"type":"string","description":"Target key for the app"},"label":{"type":"string","description":"App label"},"platform":{"type":"string","description":"Platform for the app"},"role":{"type":"string","description":"Role in the analysis set"},"review_count":{"type":"number","description":"Number of reviews analyzed for the app"},"average_rating_sample":{"type":"number","description":"Average rating across the fetched sample"},"average_sentiment_score":{"type":"number","description":"Average sentiment score across the fetched sample"},"trend_direction":{"type":"string","description":"Overall direction: improving, declining, or stable"},"top_positive_terms":{"type":"array","description":"Most frequent positive terms for the app","items":{"type":"object","description":"A frequently occurring sentiment term","properties":{"term":{"type":"string","description":"Term found in the reviews"},"count":{"type":"number","description":"How many reviews in the sample used this term"}}}},"top_negative_terms":{"type":"array","description":"Most frequent negative terms for the app","items":{"type":"object","description":"A frequently occurring sentiment term","properties":{"term":{"type":"string","description":"Term found in the reviews"},"count":{"type":"number","description":"How many reviews in the sample used this term"}}}},"series":{"type":"array","description":"Per-app time series","items":{"type":"object","description":"Sentiment and rating snapshot for one time bucket","properties":{"bucket":{"type":"string","description":"Bucket start date in ISO YYYY-MM-DD format"},"review_count":{"type":"number","description":"Number of reviews in the bucket"},"average_rating":{"type":"number","description":"Average star rating in the bucket"},"average_sentiment_score":{"type":"number","description":"Average sentiment score in the bucket"},"positive":{"type":"number","description":"Positive review count in the bucket"},"neutral":{"type":"number","description":"Neutral review count in the bucket"},"negative":{"type":"number","description":"Negative review count in the bucket"}}}}}}},"top_positive_terms":{"type":"array","description":"Most frequent positive terms across the full review set","items":{"type":"object","description":"A frequently occurring sentiment term","properties":{"term":{"type":"string","description":"Term found in the reviews"},"count":{"type":"number","description":"How many reviews in the sample used this term"}}}},"top_negative_terms":{"type":"array","description":"Most frequent negative terms across the full review set","items":{"type":"object","description":"A frequently occurring sentiment term","properties":{"term":{"type":"string","description":"Term found in the reviews"},"count":{"type":"number","description":"How many reviews in the sample used this term"}}}}}},"returns":"Sentiment and rating trend series with per-app direction changes plus the terms driving positive and negative feedback"},{"name":"compare_competitors","displayName":"Compare Competitors","description":"Compare your app against competitors to find gaps worth exploiting — features users hate about them become opportunities for you.","inputSchema":{"type":"object","properties":{"primary_target":{"type":"object","description":"Your app to compare against competitors. Omit to use a saved default app when available.","properties":{"platform":{"type":"string","description":"Store platform: \"ios\" for App Store or \"android\" for Google Play"},"app_id":{"type":"string","description":"App identifier. Use an App Store numeric ID or bundle ID for iOS, and a package name for Android."},"label":{"type":"string","description":"Optional label used in analysis output instead of the store title"},"role":{"type":"string","description":"Role in the analysis: \"primary\" or \"competitor\""},"country":{"type":"string","description":"Optional country override for this specific target"}}},"competitor_targets":{"type":"array","description":"Competitor apps to compare against the primary app.","items":{"type":"object","description":"One app target to fetch reviews for","properties":{"platform":{"type":"string","description":"Store platform: \"ios\" for App Store or \"android\" for Google Play"},"app_id":{"type":"string","description":"App identifier. Use an App Store numeric ID or bundle ID for iOS, and a package name for Android."},"label":{"type":"string","description":"Optional label used in analysis output instead of the store title"},"role":{"type":"string","description":"Role in the analysis: \"primary\" or \"competitor\""},"country":{"type":"string","description":"Optional country override for this specific target"}}}},"country":{"type":"string","description":"Country code used for review fetching. Defaults to \"us\".","default":"us"},"language":{"type":"string","description":"Language code for Play Store review fetching. Defaults to \"en\".","default":"en"},"sort":{"type":"string","description":"Review ordering: \"recent\" or \"helpful\". Defaults to \"recent\".","enum":["recent","helpful"],"default":"recent"},"limit_per_target":{"type":"number","description":"Maximum reviews to fetch per app before sampling for analysis. Defaults to 50.","default":50},"focus":{"type":"string","description":"Optional comparison angle such as pricing pain, onboarding, ad load, or feature depth."}},"required":["competitor_targets"]},"annotations":{"execution":{"estimatedSeconds":35,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Compare Calm against Headspace using Play Store reviews","input":{"primary_target":{"platform":"android","app_id":"com.calm.android","label":"Calm","role":"primary"},"competitor_targets":[{"platform":"android","app_id":"com.getsomeheadspace.android","label":"Headspace","role":"competitor"}],"country":"us","limit_per_target":20}},{"description":"Compare one iOS app against two competitors with a pricing focus","input":{"primary_target":{"platform":"ios","app_id":"324684580","label":"Spotify iOS","role":"primary"},"competitor_targets":[{"platform":"ios","app_id":"1108187390","label":"Apple Music","role":"competitor"},{"platform":"ios","app_id":"1452263949","label":"YouTube Music","role":"competitor"}],"country":"us","focus":"pricing, ads, premium conversion friction, and perceived value","limit_per_target":18}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"generated_at":{"type":"string","description":"Timestamp when the comparison ran"},"country":{"type":"string","description":"Country used for review fetching"},"language":{"type":"string","description":"Language used for Play Store review fetching"},"sort":{"type":"string","description":"Review sort order used"},"total_reviews_fetched":{"type":"number","description":"Total reviews fetched across the primary app and competitors"},"reviews_analyzed":{"type":"number","description":"Review sample size actually sent for comparison"},"primary_app":{"type":"object","description":"Resolved primary app summary","properties":{"target_key":{"type":"string","description":"Stable key combining platform and store app ID"},"platform":{"type":"string","description":"Platform analyzed"},"role":{"type":"string","description":"Role in the analysis set"},"label":{"type":"string","description":"Display label for the app"},"app_id":{"type":"string","description":"Canonical app identifier used for the target"},"title":{"type":"string","description":"Store title for the app"},"developer":{"type":"string","description":"Developer name"},"rating_average_store":{"type":"number","description":"Storewide average rating when available"},"review_count_store":{"type":"number","description":"Storewide review count when available"},"reviews_fetched":{"type":"number","description":"How many reviews were fetched for this target"},"average_rating_sample":{"type":"number","description":"Average rating across the fetched review sample"},"average_sentiment_score":{"type":"number","description":"Average sentiment score across the fetched review sample"},"sentiment_label":{"type":"string","description":"Dominant sentiment across the fetched review sample"}}},"competitors":{"type":"array","description":"Resolved competitor app summaries","items":{"type":"object","description":"Summary stats for one analyzed app target","properties":{"target_key":{"type":"string","description":"Stable key combining platform and store app ID"},"platform":{"type":"string","description":"Platform analyzed"},"role":{"type":"string","description":"Role in the analysis set"},"label":{"type":"string","description":"Display label for the app"},"app_id":{"type":"string","description":"Canonical app identifier used for the target"},"title":{"type":"string","description":"Store title for the app"},"developer":{"type":"string","description":"Developer name"},"rating_average_store":{"type":"number","description":"Storewide average rating when available"},"review_count_store":{"type":"number","description":"Storewide review count when available"},"reviews_fetched":{"type":"number","description":"How many reviews were fetched for this target"},"average_rating_sample":{"type":"number","description":"Average rating across the fetched review sample"},"average_sentiment_score":{"type":"number","description":"Average sentiment score across the fetched review sample"},"sentiment_label":{"type":"string","description":"Dominant sentiment across the fetched review sample"}}}},"sample_review_keys":{"type":"array","description":"Review keys included in the comparison sample","items":{"type":"string"}},"market_summary":{"type":"string","description":"High-level comparison synthesis"},"comparison_table":{"type":"array","description":"Per-app positioning, strengths, weaknesses, and customer mood","items":{"type":"object","properties":{"target_key":{"type":"string","description":"Target key for the app"},"label":{"type":"string","description":"App label"},"position":{"type":"string","description":"Relative position from the review sample"},"strengths":{"type":"array","description":"Review-backed strengths","items":{"type":"string"}},"weaknesses":{"type":"array","description":"Review-backed weaknesses","items":{"type":"string"}},"customer_mood":{"type":"string","description":"Short mood summary from the reviews"}}}},"primary_wins":{"type":"array","description":"Areas where the primary app is ahead","items":{"type":"string"}},"primary_gaps":{"type":"array","description":"Areas where the primary app is behind","items":{"type":"string"}},"theme_gaps":{"type":"array","description":"Theme-level gaps between the primary app and competitors","items":{"type":"object","properties":{"theme":{"type":"string","description":"Theme or issue area"},"competitor_edge":{"type":"string","description":"Who is ahead on the theme and why"},"why_it_matters":{"type":"string","description":"Why the gap matters"},"recommended_move":{"type":"string","description":"Suggested move for the primary app"}}}},"recommended_moves":{"type":"array","description":"Prioritized product, support, or ASO moves","items":{"type":"string"}},"reply_opportunities":{"type":"array","description":"Places where reply operations could change sentiment or conversion","items":{"type":"string"}}}},"returns":"Competitor comparison with per-app strengths and weaknesses, the primary app’s wins and gaps, and concrete next moves"}],"workflow":["aggregate_reviews","sentiment_trends","cluster_themes","compare_competitors"],"homepage":"https://toolrouter.com/tools/app-review-analysis","icon":"/icons/app-review-analysis.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-21","changes":["Removed draft_replies skill","Refocused on product opportunity discovery","All skills now paid ($0.005 min)"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Analyze the App Store and Google Play reviews for [app name] and tell me the top recurring complaints, what users love most, and the biggest opportunities to improve the product.","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"ios_app_id","type":"credential","displayName":"iOS App Bundle ID","description":"The bundle identifier for your iOS app (e.g. com.myapp.fitness)","setupGuide":"Your iOS App ID is the numeric Apple ID assigned when your app was created.\n\nFrom App Store Connect (app owners):\n1. Go to https://appstoreconnect.apple.com and sign in\n2. Click \"My Apps\" and select your app\n3. Go to \"App Information\" under General in the left sidebar\n4. Find the \"Apple ID\" field — it is a read-only numeric value (e.g. 389801252)\n\nFrom a public App Store URL (anyone):\nThe numeric ID is in the URL after \"id\". For example:\nhttps://apps.apple.com/us/app/instagram/id389801252 → App ID is 389801252\n\nSearch for any app in the App Store on desktop and extract the number after \"id\" in the URL."},{"name":"play_store_app_id","type":"credential","displayName":"Google Play App ID","description":"Default Android package name (e.g. com.example.app)","acquireUrl":"https://play.google.com/console","setupGuide":"Your Play Store App ID is your Android package name (e.g. com.instagram.android).\n\nFrom Google Play Console (app owners):\n1. Go to https://play.google.com/console and sign in\n2. Your package name is shown next to each app in the \"All apps\" list\n3. Or select your app and go to Grow > Store presence > Store settings\n\nFrom a public Play Store URL (anyone):\nThe package name is the \"id\" parameter in the URL. For example:\nhttps://play.google.com/store/apps/details?id=com.instagram.android → App ID is com.instagram.android"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"ios_app_id","type":"credential","displayName":"iOS App Bundle ID","description":"The bundle identifier for your iOS app (e.g. com.myapp.fitness)","setupGuide":"Your iOS App ID is the numeric Apple ID assigned when your app was created.\n\nFrom App Store Connect (app owners):\n1. Go to https://appstoreconnect.apple.com and sign in\n2. Click \"My Apps\" and select your app\n3. Go to \"App Information\" under General in the left sidebar\n4. Find the \"Apple ID\" field — it is a read-only numeric value (e.g. 389801252)\n\nFrom a public App Store URL (anyone):\nThe numeric ID is in the URL after \"id\". For example:\nhttps://apps.apple.com/us/app/instagram/id389801252 → App ID is 389801252\n\nSearch for any app in the App Store on desktop and extract the number after \"id\" in the URL."},{"name":"play_store_app_id","type":"credential","displayName":"Google Play App ID","description":"Default Android package name (e.g. com.example.app)","acquireUrl":"https://play.google.com/console","setupGuide":"Your Play Store App ID is your Android package name (e.g. com.instagram.android).\n\nFrom Google Play Console (app owners):\n1. Go to https://play.google.com/console and sign in\n2. Your package name is shown next to each app in the \"All apps\" list\n3. Or select your app and go to Grow > Store presence > Store settings\n\nFrom a public Play Store URL (anyone):\nThe package name is the \"id\" parameter in the URL. For example:\nhttps://play.google.com/store/apps/details?id=com.instagram.android → App ID is com.instagram.android"}]},{"name":"social-profiles","displayName":"Social Profiles","subtitle":"Bios, followers & audience data","about":"**Social Profiles** retrieves public profile data from 13 platforms — TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Facebook, Reddit, Threads, Bluesky, Snapchat, Twitch, and Truth Social. Look up follower counts, bios, verification status, and audience data by username or URL.\n\nThis is the research layer for influencer vetting, creator analysis, and competitive intelligence. Get structured profile data from any platform without logging into each one separately.\n\n### What you can do\n- Look up profiles by username on TikTok, Instagram, Twitter/X, Threads, Bluesky, Snapchat, and Twitch\n- Get YouTube channel data by handle\n- Look up LinkedIn personal profiles and company pages by URL\n- Get Facebook profile data by URL\n- Look up Reddit subreddits by name\n- Get TikTok audience breakdown by country\n- Map follower and following lists for creator network analysis\n- Estimate demographics from a profile photo\n\n### Who it's for\nMarketing teams vetting influencers and creators before partnerships. Researchers building audience and creator datasets. Brands doing competitive analysis on competitor social presence. Anyone who needs structured profile data from multiple platforms without switching between apps.\n\n### How to use it\n1. For most platforms, use the handle-based skill — e.g. **get_tiktok_profile** or **get_instagram_profile** with the username (no @ needed)\n2. For LinkedIn and Facebook, use the URL-based skills — e.g. **get_linkedin_profile** or **get_facebook_profile**\n3. For TikTok creator research, use **get_tiktok_audience** for country-level breakdown or **get_tiktok_followers** to map their network\n4. Use **detect_age_gender** to estimate demographics from a profile photo URL\n\n### Getting started\nConnect your social data account to enable profile lookups — then search any username or profile URL.","version":"0.03","categories":["data","analytics"],"currency":"USD","skills":[{"name":"get_tiktok_profile","displayName":"Get TikTok Profile","description":"Retrieve a TikTok user profile including bio, follower count, following count, likes, and verified status.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"TikTok username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a TikTok creator","input":{"handle":"charlidamelio"}}],"pricing":"paid","returns":"TikTok profile with bio, follower count, following count, total likes, and verification status"},{"name":"get_instagram_profile","displayName":"Get Instagram Profile","description":"Retrieve an Instagram user profile including bio, follower count, following count, post count, and verified status.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Instagram username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up an Instagram account","input":{"handle":"natgeo"}}],"pricing":"paid","returns":"Instagram profile with bio, follower count, following count, post count, and verification status"},{"name":"get_youtube_channel","displayName":"Get YouTube Channel","description":"Retrieve a YouTube channel profile including description, subscriber count, total views, video count, and creation date.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"YouTube handle (e.g. @mkbhd)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a YouTube channel","input":{"handle":"@mkbhd"}}],"pricing":"paid","returns":"YouTube channel with description, subscriber count, total views, video count, and join date"},{"name":"get_twitter_profile","displayName":"Get Twitter Profile","description":"Retrieve a Twitter/X user profile including bio, follower count, following count, tweet count, and verified status.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Twitter/X username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a Twitter account","input":{"handle":"elonmusk"}}],"pricing":"paid","returns":"Twitter profile with bio, follower count, following count, tweet count, and verification status"},{"name":"get_linkedin_profile","displayName":"Get LinkedIn Profile","description":"Retrieve a LinkedIn personal profile including headline, summary, experience, education, and connection count.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full LinkedIn profile URL"}},"required":["url"]},"annotations":{},"examples":[{"description":"Look up a LinkedIn profile","input":{"url":"https://www.linkedin.com/in/satyanadella/"}}],"pricing":"paid","returns":"LinkedIn profile with headline, summary, experience, education, skills, and connection count"},{"name":"get_linkedin_company","displayName":"Get LinkedIn Company","description":"Retrieve a LinkedIn company page including description, industry, employee count, headquarters, and specialties.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full LinkedIn company profile URL"}},"required":["url"]},"annotations":{},"examples":[{"description":"Look up a LinkedIn company page","input":{"url":"https://www.linkedin.com/company/google/"}}],"pricing":"paid","returns":"LinkedIn company with description, industry, employee count, headquarters, and founded year"},{"name":"get_facebook_profile","displayName":"Get Facebook Profile","description":"Retrieve a Facebook profile or page including name, bio, follower count, likes, and category information.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full Facebook profile URL"}},"required":["url"]},"annotations":{},"examples":[{"description":"Look up a Facebook page","input":{"url":"https://www.facebook.com/zuck"}}],"pricing":"paid","returns":"Facebook profile with name, bio, follower count, page likes, and category"},{"name":"get_reddit_subreddit","displayName":"Get Reddit Subreddit","description":"Retrieve subreddit information including description, member count, active users, creation date, and rules.","inputSchema":{"type":"object","properties":{"subreddit":{"type":"string","description":"Subreddit name without the r/ prefix (e.g. \"programming\")"}},"required":["subreddit"]},"annotations":{},"examples":[{"description":"Look up a subreddit","input":{"subreddit":"programming"}}],"pricing":"paid","returns":"Subreddit info with description, member count, active users, creation date, and community rules"},{"name":"get_threads_profile","displayName":"Get Threads Profile","description":"Retrieve a Threads user profile including bio, follower count, following count, and verified status.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Threads username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a Threads account","input":{"handle":"zuck"}}],"pricing":"paid","returns":"Threads profile with bio, follower count, following count, and verification status"},{"name":"get_bluesky_profile","displayName":"Get Bluesky Profile","description":"Retrieve a Bluesky user profile including display name, bio, follower count, following count, and post count.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Bluesky username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a Bluesky account","input":{"handle":"jay.bsky.team"}}],"pricing":"paid","returns":"Bluesky profile with display name, bio, follower count, following count, and post count"},{"name":"get_truthsocial_profile","displayName":"Get Truth Social Profile","description":"Retrieve a Truth Social user profile including display name, bio, follower count, following count, and post count.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Truth Social username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a Truth Social account","input":{"handle":"realDonaldTrump"}}],"pricing":"paid","returns":"Truth Social profile with display name, bio, follower count, following count, and post count"},{"name":"get_snapchat_profile","displayName":"Get Snapchat Profile","description":"Retrieve a Snapchat user profile including display name, bitmoji, subscriber count, and snap score information.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Snapchat username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a Snapchat account","input":{"handle":"djkhaled305"}}],"pricing":"paid","returns":"Snapchat profile with display name, bitmoji, subscriber count, and snap score"},{"name":"get_twitch_profile","displayName":"Get Twitch Profile","description":"Retrieve a Twitch streamer profile including bio, follower count, total views, broadcaster type, and creation date.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Twitch username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Look up a Twitch streamer","input":{"handle":"ninja"}}],"pricing":"paid","returns":"Twitch profile with bio, follower count, total views, broadcaster type, and account creation date"},{"name":"get_tiktok_followers","displayName":"Get TikTok Followers","description":"Retrieve the list of followers for a TikTok user, including their usernames, display names, and profile details.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"TikTok username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get followers of a TikTok creator","input":{"handle":"charlidamelio"}}],"pricing":"paid","returns":"List of TikTok followers with usernames, display names, and profile details"},{"name":"get_tiktok_following","displayName":"Get TikTok Following","description":"Retrieve the list of accounts a TikTok user is following, including their usernames, display names, and profile details.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"TikTok username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get accounts a TikTok creator follows","input":{"handle":"charlidamelio"}}],"pricing":"paid","returns":"List of TikTok accounts the user follows with usernames, display names, and profile details"},{"name":"get_tiktok_audience","displayName":"Get TikTok Audience Demographics","description":"Get audience demographic data for a TikTok user. Currently returns audience breakdown by country. Costs 26 credits.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"TikTok username or handle"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get audience demographics for a TikTok creator","input":{"handle":"charlidamelio"}}],"pricing":"paid","returns":"Audience location breakdown with country names, codes, counts, and percentages"},{"name":"get_reddit_subreddit_details","displayName":"Get Reddit Subreddit Details","description":"Get detailed information about a subreddit including description, rules, moderators, and community settings. Pass a subreddit name or URL.","inputSchema":{"type":"object","properties":{"subreddit":{"type":"string","description":"Subreddit name without r/ prefix"},"url":{"type":"string","description":"Full subreddit URL (alternative to name)"}}},"annotations":{},"examples":[{"description":"Get details about a subreddit","input":{"subreddit":"programming"}}],"pricing":"paid","returns":"Detailed subreddit info with description, rules, moderators, and community settings"},{"name":"detect_age_gender","displayName":"Detect Creator Age and Gender","description":"Estimate the age and gender of a social media creator using AI analysis of their profile photo. The profile photo must clearly show a face.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the profile image or social media profile page"}},"required":["url"]},"annotations":{},"examples":[{"description":"Estimate age and gender from a profile","input":{"url":"https://www.tiktok.com/@creator"}}],"pricing":"paid","returns":"Estimated age range and gender of the creator based on their profile photo"}],"icon":"/icons/social-profiles.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-03","changes":["Fixed Bluesky profile endpoint path"]}],"premadePrompt":"Look up the social media profile for [username] on [platform] and tell me their follower count, bio, and engagement stats.","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}]},{"name":"social-media-content","displayName":"Social Media Content","subtitle":"Posts & videos from 10+ platforms","about":"**Social Media Content** pulls structured post and video data from 12 platforms — TikTok, Instagram, YouTube, Twitter/X, Facebook, LinkedIn, Threads, Bluesky, Twitch, Kick, Pinterest, and Truth Social. Get captions, engagement metrics, media URLs, and timestamps from any handle or post URL.\n\nIt's the data layer for content research and competitor monitoring. Whether you're tracking what a brand posts, analyzing video performance, or pulling a creator's recent output, you get clean structured data without scraping manually.\n\n### What you can do\n- Fetch recent posts or videos by handle from TikTok, Instagram, YouTube, Twitter/X, and more\n- Get full post details — captions, engagement metrics, media URLs, and timestamps — by URL\n- Pull YouTube channel videos, individual videos, and playlists\n- Get LinkedIn company posts and individual post details\n- Retrieve Instagram story highlights and highlight details\n- Access content from Threads, Bluesky, Twitch, Kick, Pinterest, and Truth Social\n\n### Who it's for\nMarketers doing competitor content research. Agencies tracking client or competitor performance across platforms. Researchers building datasets of social content. Anyone who needs structured post data from multiple platforms without logging into each one.\n\n### How to use it\n1. For recent content from a creator, use the plural skill for your platform — e.g. **get_tiktok_videos** or **get_instagram_posts** — with the handle\n2. For a single post, use the singular skill with the full post URL — e.g. **get_tiktok_video** or **get_instagram_post**\n3. For YouTube playlists, use **get_youtube_playlist** with the playlist URL\n4. For Instagram stories, use **get_instagram_highlights** then **get_instagram_highlight_detail** with the returned ID\n\n### Getting started\nConnect your social data account to enable content fetching — then pass any handle or post URL to get started.","version":"0.03","categories":["data","media"],"currency":"USD","skills":[{"name":"get_tiktok_videos","displayName":"Get TikTok Videos","description":"Get videos posted by a TikTok user including captions, view counts, and engagement metrics.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get videos from a TikTok creator","input":{"handle":"charlidamelio"}}],"pricing":"paid","returns":"Array of TikTok videos with captions, view counts, likes, comments, and shares"},{"name":"get_tiktok_video","displayName":"Get TikTok Video","description":"Get details of a specific TikTok video including caption, stats, and audio information.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a TikTok video","input":{"url":"https://www.tiktok.com/@charlidamelio/video/7234567890123456789"}}],"pricing":"paid","returns":"TikTok video details with caption, author, view count, likes, comments, shares, and audio info"},{"name":"get_tiktok_live","displayName":"Get TikTok Live","description":"Get live stream information for a TikTok user including stream status and viewer count.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Check if a TikTok user is live","input":{"handle":"charlidamelio"}}],"pricing":"paid","returns":"TikTok live stream info with status, title, viewer count, and stream details"},{"name":"get_instagram_posts","displayName":"Get Instagram Posts","description":"Get posts from an Instagram user including images, captions, likes, and comments.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get posts from an Instagram account","input":{"handle":"natgeo"}}],"pricing":"paid","returns":"Array of Instagram posts with images, captions, like counts, and comment counts"},{"name":"get_instagram_reels","displayName":"Get Instagram Reels","description":"Get reels from an Instagram user including video details, views, and engagement metrics.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get reels from an Instagram creator","input":{"handle":"natgeo"}}],"pricing":"paid","returns":"Array of Instagram reels with video URLs, view counts, likes, and comments"},{"name":"get_instagram_highlights","displayName":"Get Instagram Highlights","description":"Get story highlights from an Instagram user including highlight covers and titles.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get story highlights from an Instagram profile","input":{"handle":"natgeo"}}],"pricing":"paid","returns":"Array of Instagram story highlights with titles, cover images, and media items"},{"name":"get_instagram_post","displayName":"Get Instagram Post","description":"Get details of a specific Instagram post or reel including media, caption, and engagement.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of an Instagram post","input":{"url":"https://www.instagram.com/p/ABC123def456/"}}],"pricing":"paid","returns":"Instagram post details with media URLs, caption, author, likes, comments, and timestamp"},{"name":"get_youtube_videos","displayName":"Get YouTube Videos","description":"Get videos from a YouTube channel including titles, view counts, and publish dates.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get videos from a YouTube channel","input":{"handle":"mkbhd"}}],"pricing":"paid","returns":"Array of YouTube videos with titles, view counts, durations, thumbnails, and publish dates"},{"name":"get_youtube_shorts","displayName":"Get YouTube Shorts","description":"Get shorts from a YouTube channel including titles, view counts, and thumbnails.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get shorts from a YouTube channel","input":{"handle":"mkbhd"}}],"pricing":"paid","returns":"Array of YouTube shorts with titles, view counts, thumbnails, and publish dates"},{"name":"get_youtube_video","displayName":"Get YouTube Video","description":"Get details of a specific YouTube video including title, description, stats, and channel info.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a YouTube video","input":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}}],"pricing":"paid","returns":"YouTube video details with title, description, view count, likes, channel, duration, and publish date"},{"name":"get_youtube_playlist","displayName":"Get YouTube Playlist","description":"Get videos from a YouTube playlist including titles, channels, and video order.","inputSchema":{"type":"object","properties":{"playlist_id":{"type":"string","description":"YouTube playlist ID (e.g. PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf)"}},"required":["playlist_id"]},"annotations":{},"examples":[{"description":"Get videos from a YouTube playlist","input":{"playlist_id":"PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"}}],"pricing":"paid","returns":"Array of playlist videos with titles, channels, durations, and positions"},{"name":"get_youtube_community_post","displayName":"Get YouTube Community Post","description":"Get a YouTube community post including text content, images, polls, and engagement.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get a YouTube community post","input":{"url":"https://www.youtube.com/post/Ugkx1234567890abcdef"}}],"pricing":"paid","returns":"YouTube community post with text, images, poll data, likes, and comments"},{"name":"get_twitter_tweets","displayName":"Get Twitter Tweets","description":"Get tweets from a Twitter/X user including text, media, likes, retweets, and replies.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get tweets from a Twitter user","input":{"handle":"elonmusk"}}],"pricing":"paid","returns":"Array of tweets with text, media, like count, retweet count, reply count, and timestamp"},{"name":"get_twitter_tweet","displayName":"Get Twitter Tweet","description":"Get details of a specific tweet including text, media, engagement metrics, and replies.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a specific tweet","input":{"url":"https://x.com/elonmusk/status/1234567890123456789"}}],"pricing":"paid","returns":"Tweet details with text, author, media, likes, retweets, replies, quotes, and timestamp"},{"name":"get_facebook_posts","displayName":"Get Facebook Posts","description":"Get posts from a Facebook profile including text, media, reactions, and comments.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get posts from a Facebook page","input":{"url":"https://www.facebook.com/NASA"}}],"pricing":"paid","returns":"Array of Facebook posts with text, media, reaction counts, comments, and shares"},{"name":"get_facebook_reels","displayName":"Get Facebook Reels","description":"Get reels from a Facebook profile including video details, views, and reactions.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get reels from a Facebook page","input":{"url":"https://www.facebook.com/NASA"}}],"pricing":"paid","returns":"Array of Facebook reels with video URLs, view counts, reactions, and comments"},{"name":"get_facebook_photos","displayName":"Get Facebook Photos","description":"Get photos from a Facebook profile including image URLs, captions, and reactions.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get photos from a Facebook page","input":{"url":"https://www.facebook.com/NASA"}}],"pricing":"paid","returns":"Array of Facebook photos with image URLs, captions, reaction counts, and comments"},{"name":"get_facebook_post","displayName":"Get Facebook Post","description":"Get details of a specific Facebook post including text, media, reactions, and comments.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a Facebook post","input":{"url":"https://www.facebook.com/NASA/posts/1234567890"}}],"pricing":"paid","returns":"Facebook post details with text, media, author, reactions, comments, shares, and timestamp"},{"name":"get_facebook_group_posts","displayName":"Get Facebook Group Posts","description":"Get posts from a Facebook group including text, media, reactions, and member activity.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get posts from a Facebook group","input":{"url":"https://www.facebook.com/groups/reactjs"}}],"pricing":"paid","returns":"Array of Facebook group posts with text, author, media, reactions, comments, and timestamp"},{"name":"get_linkedin_post","displayName":"Get LinkedIn Post","description":"Get details of a specific LinkedIn post including text, media, reactions, and comments.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a LinkedIn post","input":{"url":"https://www.linkedin.com/posts/satyanadella_activity-1234567890"}}],"pricing":"paid","returns":"LinkedIn post details with text, author, media, reaction counts, comments, and reposts"},{"name":"get_threads_post","displayName":"Get Threads Post","description":"Get details of a specific Threads post including text, media, likes, and replies.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a Threads post","input":{"url":"https://www.threads.net/@zuck/post/ABC123def456"}}],"pricing":"paid","returns":"Threads post details with text, author, media, like count, reply count, and timestamp"},{"name":"get_bluesky_post","displayName":"Get Bluesky Post","description":"Get details of a specific Bluesky post including text, media, likes, and reposts.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a Bluesky post","input":{"url":"https://bsky.app/profile/jay.bsky.team/post/3abc123def456"}}],"pricing":"paid","returns":"Bluesky post details with text, author, media, like count, repost count, and timestamp"},{"name":"get_twitch_clip","displayName":"Get Twitch Clip","description":"Get details of a Twitch clip including title, streamer, game, duration, and view count.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a Twitch clip","input":{"url":"https://clips.twitch.tv/ExampleClipName-AbCdEfGhIj123"}}],"pricing":"paid","returns":"Twitch clip details with title, streamer, game, duration, view count, and thumbnail"},{"name":"get_kick_clip","displayName":"Get Kick Clip","description":"Get details of a Kick clip including title, streamer, category, duration, and view count.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a Kick clip","input":{"url":"https://kick.com/streamer/clips/clip_ABC123"}}],"pricing":"paid","returns":"Kick clip details with title, streamer, category, duration, view count, and thumbnail"},{"name":"get_pinterest_pin","displayName":"Get Pinterest Pin","description":"Get details of a Pinterest pin including image, description, saves, and source link.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a Pinterest pin","input":{"url":"https://www.pinterest.com/pin/1234567890/"}}],"pricing":"paid","returns":"Pinterest pin details with image URL, title, description, save count, and source link"},{"name":"get_pinterest_board","displayName":"Get Pinterest Board","description":"Get all pins from a Pinterest board including images, descriptions, and save counts.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get pins from a Pinterest board","input":{"url":"https://www.pinterest.com/user/board-name/"}}],"pricing":"paid","returns":"Array of pins from the board with image URLs, titles, descriptions, and save counts"},{"name":"get_pinterest_boards","displayName":"Get Pinterest User Boards","description":"Get all boards from a Pinterest user including board names, pin counts, and cover images.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get boards from a Pinterest user","input":{"handle":"pinterest"}}],"pricing":"paid","returns":"Array of Pinterest boards with names, descriptions, pin counts, and cover images"},{"name":"get_truthsocial_post","displayName":"Get Truth Social Post","description":"Get details of a specific Truth Social post including text, media, and engagement metrics.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get a Truth Social post","input":{"url":"https://truthsocial.com/@realDonaldTrump/posts/123456789"}}],"pricing":"paid","returns":"Truth Social post details with text, media, author, likes, reposts, and timestamp"},{"name":"get_truthsocial_posts","displayName":"Get Truth Social User Posts","description":"Get posts from a Truth Social user. Currently limited to prominent/verified users by the platform.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get posts from a Truth Social user","input":{"handle":"realDonaldTrump"}}],"pricing":"paid","returns":"Array of Truth Social posts with text, media, likes, reposts, and timestamps"},{"name":"get_threads_posts","displayName":"Get Threads User Posts","description":"Get posts from a Threads user. Returns the most recent 20-30 posts (platform limitation).","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get posts from a Threads user","input":{"handle":"zuck"}}],"pricing":"paid","returns":"Array of Threads posts with text, media, likes, replies, and timestamps"},{"name":"get_bluesky_posts","displayName":"Get Bluesky User Posts","description":"Get posts from a Bluesky user including text, media, likes, and reposts.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle of the account (without @ prefix)"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get posts from a Bluesky user","input":{"handle":"jay.bsky.team"}}],"pricing":"paid","returns":"Array of Bluesky posts with text, media, like count, repost count, and timestamps"},{"name":"get_linkedin_company_posts","displayName":"Get LinkedIn Company Posts","description":"Get posts from a LinkedIn company page. Limited to 7 pages of results (platform limitation).","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get posts from a LinkedIn company","input":{"url":"https://www.linkedin.com/company/google/"}}],"pricing":"paid","returns":"Array of LinkedIn company posts with text, media, reactions, comments, and timestamps"},{"name":"get_twitter_community","displayName":"Get Twitter Community","description":"Get details of a Twitter/X Community including name, description, member count, and rules.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get a Twitter community","input":{"url":"https://x.com/i/communities/1234567890"}}],"pricing":"paid","returns":"Twitter community details with name, description, member count, and rules"},{"name":"get_twitter_community_tweets","displayName":"Get Twitter Community Tweets","description":"Get tweets from a Twitter/X Community including text, media, and engagement metrics.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post, video, or content"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get tweets from a Twitter community","input":{"url":"https://x.com/i/communities/1234567890"}}],"pricing":"paid","returns":"Array of community tweets with text, author, media, likes, retweets, and timestamps"},{"name":"get_instagram_highlight_detail","displayName":"Get Instagram Highlight Detail","description":"Get the full media items from a specific Instagram story highlight by its ID.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Instagram highlight ID"}},"required":["id"]},"annotations":{},"examples":[{"description":"Get media from an Instagram highlight","input":{"id":"17890534567890123"}}],"pricing":"paid","returns":"Highlight detail with all media items including images, videos, and timestamps"}],"icon":"/icons/social-media-content.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-03","changes":["Fixed Bluesky post and user posts endpoint paths"]}],"premadePrompt":"Pull the recent posts from [brand or creator handle] on [platform] and show me their engagement metrics — likes, views, and shares — so I can see what's performing best.","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"social-media-search","displayName":"Social Media Search","subtitle":"Search creators, tags & posts","about":"**Social Media Search** searches TikTok, YouTube, Reddit, Pinterest, Threads, Instagram, and Google from one tool. Find trending videos, discover creators, track hashtags, and monitor discussions across the social web without switching between platforms.\n\nIt's built for research workflows that need to span multiple platforms at once — whether you're discovering influencers, tracking a trending topic, or mapping what conversations exist around a brand or keyword.\n\n### What you can do\n- Search for creators on TikTok and Threads by name or keyword\n- Find trending TikTok and YouTube videos by keyword or hashtag\n- Search Reddit for posts and discussions, or drill into a specific subreddit\n- Search Pinterest for visual content by keyword\n- Search Instagram Reels by keyword\n- Search Google web results from the same workflow\n- Check hashtag view counts on TikTok and YouTube to gauge trend scale\n\n### Who it's for\nContent strategists looking for trending formats and creators to reference. Brand managers monitoring mentions and conversations. Researchers mapping what's being discussed around a topic across different communities. Anyone doing influencer discovery or trend analysis.\n\n### How to use it\n1. For creator discovery, use **search_tiktok_users** or **search_threads_users** with a keyword or name\n2. For trending content, use **search_tiktok_keywords** or **search_youtube** with your topic\n3. For community research, use **search_reddit** for broad results or **search_reddit_subreddit** to focus on a specific community\n4. Chain searches across platforms to triangulate where a trend is biggest and who's driving it\n\n### Getting started\nConnect your social data account to enable cross-platform search — then search any keyword across platforms.","version":"0.03","categories":["search","data"],"currency":"USD","skills":[{"name":"search_tiktok_users","displayName":"Search TikTok Users","description":"Search for TikTok users matching a query. Returns user profiles with follower counts, bios, and verification status.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find TikTok creators in a niche","input":{"query":"fitness coach"}}],"pricing":"paid","returns":"Array of TikTok user profiles with username, display name, follower count, and bio"},{"name":"search_tiktok_keywords","displayName":"Search TikTok Keywords","description":"Search TikTok videos by keyword. Returns videos with engagement metrics, captions, and author information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search TikTok videos about a topic","input":{"query":"morning routine productivity"}}],"pricing":"paid","returns":"Array of TikTok videos with description, play count, likes, shares, and author details"},{"name":"search_tiktok_hashtags","displayName":"Search TikTok Hashtags","description":"Search TikTok content by hashtag. Returns videos and hashtag metadata including view counts and trending status.","inputSchema":{"type":"object","properties":{"hashtag":{"type":"string","description":"Hashtag to search for (without the # symbol)"}},"required":["hashtag"]},"annotations":{},"examples":[{"description":"Find TikTok content for a hashtag","input":{"hashtag":"smallbusiness"}}],"pricing":"paid","returns":"Hashtag metadata with view count and related TikTok videos"},{"name":"search_tiktok_top","displayName":"Search TikTok Top Results","description":"Get top TikTok search results for a query. Returns the highest-ranked mix of videos, users, and sounds.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Get top TikTok results for a trending topic","input":{"query":"AI tools for creators"}}],"pricing":"paid","returns":"Top-ranked TikTok results including videos, users, and sounds"},{"name":"search_youtube","displayName":"Search YouTube","description":"Search YouTube for videos, channels, and playlists. Returns results with titles, view counts, and channel information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search YouTube for tutorial content","input":{"query":"React Server Components tutorial"}}],"pricing":"paid","returns":"Array of YouTube results with title, view count, channel name, duration, and thumbnail"},{"name":"search_youtube_hashtag","displayName":"Search YouTube Hashtag","description":"Search YouTube content by hashtag. Returns videos tagged with the specified hashtag and their engagement metrics.","inputSchema":{"type":"object","properties":{"hashtag":{"type":"string","description":"Hashtag to search for (without the # symbol)"}},"required":["hashtag"]},"annotations":{},"examples":[{"description":"Find YouTube videos with a hashtag","input":{"hashtag":"webdev"}}],"pricing":"paid","returns":"Array of YouTube videos tagged with the hashtag, including title, views, and channel"},{"name":"search_reddit","displayName":"Search Reddit","description":"Search Reddit posts and communities. Returns posts with titles, scores, comment counts, and subreddit information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search Reddit for discussions on a topic","input":{"query":"best IDE for TypeScript development"}}],"pricing":"paid","returns":"Array of Reddit posts with title, score, comment count, subreddit, and permalink"},{"name":"search_pinterest","displayName":"Search Pinterest","description":"Search Pinterest for pins. Returns pins with images, descriptions, save counts, and board information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search Pinterest for design inspiration","input":{"query":"minimalist home office design"}}],"pricing":"paid","returns":"Array of Pinterest pins with image URL, description, save count, and source link"},{"name":"search_threads_users","displayName":"Search Threads Users","description":"Search for users on Threads. Returns user profiles with follower counts, bios, and verification status.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find users on Threads","input":{"query":"tech journalist"}}],"pricing":"paid","returns":"Array of Threads user profiles with username, display name, follower count, and bio"},{"name":"search_google","displayName":"Search Google","description":"Search Google and get structured results. Returns organic listings, knowledge panels, and related searches.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search Google for a topic","input":{"query":"latest machine learning frameworks 2026"}}],"pricing":"paid","returns":"Structured Google search results with organic listings, knowledge graph, and related searches"},{"name":"search_instagram_reels","displayName":"Search Instagram Reels","description":"Search for Instagram reels by keyword. Uses Google Search to find reels since Instagram search requires login.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Instagram reels about a topic","input":{"query":"cooking recipes"}}],"pricing":"paid","returns":"Array of Instagram reels matching the keyword with video URLs, captions, and engagement"},{"name":"search_reddit_subreddit","displayName":"Search Reddit Subreddit","description":"Search within a specific subreddit for posts, comments, or media matching a query. Filter by sort order and timeframe.","inputSchema":{"type":"object","properties":{"subreddit":{"type":"string","description":"Subreddit name without the r/ prefix"},"query":{"type":"string","description":"Search query string"},"sort":{"type":"string","description":"Sort order for results (e.g. relevance, hot, new, top)"},"timeframe":{"type":"string","description":"Time filter (e.g. hour, day, week, month, year, all)"}},"required":["subreddit"]},"annotations":{},"examples":[{"description":"Search a subreddit for a topic","input":{"subreddit":"programming","query":"TypeScript tips"}}],"pricing":"paid","returns":"Array of Reddit posts within the subreddit matching the query"},{"name":"search_threads","displayName":"Search Threads","description":"Search Threads by keyword to find posts. Supports optional date range filtering. Returns up to 10 results per request (platform limitation).","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string"},"start_date":{"type":"string","description":"Start date filter in YYYY-MM-DD format (optional)"},"end_date":{"type":"string","description":"End date filter in YYYY-MM-DD format (optional)"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search Threads for a keyword","input":{"query":"artificial intelligence"}},{"description":"Search Threads with date range","input":{"query":"basketball","start_date":"2026-01-01","end_date":"2026-03-31"}}],"pricing":"paid","returns":"Array of Threads posts matching the keyword with text, author, likes, and timestamps"}],"icon":"/icons/social-media-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-03","changes":["Added Threads keyword search skill"]}],"premadePrompt":"Find trending content about [topic] across TikTok, YouTube, and Reddit. Who are the top creators posting about [topic], and what hashtags are they using?","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}]},{"name":"linkedin-post","displayName":"LinkedIn Post","subtitle":"Publish text, link, and image posts to your LinkedIn feed","about":"**LinkedIn Post** lets AI agents publish directly to your LinkedIn feed — text updates, link shares with preview cards, image posts, and carousels. Once you connect your account, agents can draft and post on your behalf without you needing to copy, paste, or log in.\n\nThe gap between \"draft a LinkedIn post\" and \"post it\" is always a manual step. This tool closes that gap: agents can write something, show it to you for approval, and then publish it directly — or in an autonomous workflow, post on a schedule without interrupting you at all.\n\n### What you can do\n- **post_text** — publish a plain-text post to your LinkedIn feed with visibility controls\n- **post_link** — share a URL with LinkedIn's auto-generated preview card and optional commentary\n- **post_image** — post one image or a carousel of up to nine images with a caption\n- **delete_post** — remove a post that was created through this tool\n\n### Who it's for\nFounders and creators who want AI to handle the publishing side of a content workflow. Marketing teams running scheduled or automated LinkedIn programs. Anyone who wants their AI assistant to be able to act on LinkedIn, not just draft.\n\n### How to use it\n1. Connect your LinkedIn account first — every skill returns a connect URL if you haven't done this yet\n2. Use **post_text** for announcements, thoughts, or updates\n3. Use **post_link** when sharing an article or page — LinkedIn will auto-fetch the title and thumbnail\n4. Use **post_image** for single images or multi-image carousels (up to 9 slides)\n5. Save the post_urn returned by any post skill if you might need to delete the post later\n\n### Getting started\nConnect your LinkedIn account via the connector setup. The tool only requests permission to post — it cannot read your feed, messages, or connections.","version":"0.01","categories":["marketing","communication"],"currency":"USD","skills":[{"name":"post_text","displayName":"Post Text Update","description":"Publish a plain-text post to the user's LinkedIn feed. Supports visibility controls (public or connections-only).","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The post body. Plain text only. LinkedIn renders newlines as paragraph breaks.","minLength":1,"maxLength":3000},"visibility":{"type":"string","description":"Who can see the post. \"PUBLIC\" (anyone on or off LinkedIn) or \"CONNECTIONS\" (your connections only).","enum":["PUBLIC","CONNECTIONS"],"default":"PUBLIC"}},"required":["text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Publish a short announcement to your feed","input":{"text":"Just shipped a new LinkedIn integration for ToolRouter. Agents can now publish on your behalf."}},{"description":"Post a connections-only update","input":{"text":"Heads up to my network — job hunting again.","visibility":"CONNECTIONS"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"The LinkedIn post URN (e.g. \"urn:li:share:7XXX\"). Save this if you want to delete the post later."},"post_url":{"type":"string","description":"Public URL of the post on LinkedIn."},"author_urn":{"type":"string","description":"URN of the authenticated member who posted."},"visibility":{"type":"string","description":"Visibility the post was published with."}}},"returns":"The new post URN and public URL, plus the author URN and visibility used."},{"name":"post_link","displayName":"Share a Link","description":"Share a URL to the user's LinkedIn feed with a preview card. LinkedIn auto-fetches the page title, description, and thumbnail.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to share. LinkedIn fetches its OpenGraph metadata to build the preview card.","format":"uri"},"commentary":{"type":"string","description":"Optional text to post above the link preview. Think of it as your take on the link.","maxLength":3000},"visibility":{"type":"string","description":"Who can see the post. \"PUBLIC\" or \"CONNECTIONS\".","enum":["PUBLIC","CONNECTIONS"],"default":"PUBLIC"}},"required":["url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Share a blog post with a comment","input":{"url":"https://toolrouter.com/blog/connectors-launch","commentary":"Excited to share what we've been building — OAuth connectors so agents can actually do things."}}],"pricing":"free","outputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"The LinkedIn post URN."},"post_url":{"type":"string","description":"Public URL of the post on LinkedIn."},"author_urn":{"type":"string","description":"URN of the authenticated member."},"visibility":{"type":"string","description":"Visibility the post was published with."}}},"returns":"The new post URN and public URL."},{"name":"post_image","displayName":"Post Image or Carousel","description":"Publish a post with one or more images (up to 9 for a carousel) and a caption. Images are uploaded to LinkedIn first, then referenced in the post.","inputSchema":{"type":"object","properties":{"caption":{"type":"string","description":"The post body / caption shown above the images.","minLength":1,"maxLength":3000},"image_urls":{"type":"array","description":"Images as ToolRouter file IDs or hosted HTTP(S) URLs. 1-9 images.","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":9},"visibility":{"type":"string","description":"Who can see the post. \"PUBLIC\" or \"CONNECTIONS\".","enum":["PUBLIC","CONNECTIONS"],"default":"PUBLIC"}},"required":["caption","image_urls"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":12,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Post a single image with caption","input":{"caption":"Our new office in Sydney — finally moved in.","image_urls":["https://example.com/office.jpg"]}},{"description":"Post a 3-image carousel","input":{"caption":"Three-slide breakdown of our Q2 launch.","image_urls":["https://example.com/slide1.png","https://example.com/slide2.png","https://example.com/slide3.png"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"The LinkedIn post URN."},"post_url":{"type":"string","description":"Public URL of the post on LinkedIn."},"author_urn":{"type":"string","description":"URN of the authenticated member."},"image_count":{"type":"number","description":"Number of images attached."},"visibility":{"type":"string","description":"Visibility the post was published with."}}},"returns":"The new post URN, public URL, and the number of images that were uploaded."},{"name":"delete_post","displayName":"Delete a Post","description":"Remove a post from the user's LinkedIn feed. Only works for posts the tool created — you must pass the post_urn returned by a prior post.","inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"The URN of the post to delete (e.g. \"urn:li:share:7XXX\"). Returned by post_text, post_link, or post_image.","pattern":"^urn:li:(share|ugcPost):\\d+$"}},"required":["post_urn"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Delete a previously-created post","input":{"post_urn":"urn:li:share:7123456789012345678"}},{"description":"Delete a ugcPost URN (legacy format)","input":{"post_urn":"urn:li:ugcPost:7999999999999999999"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"deleted":{"type":"boolean","description":"True if the post was removed successfully."},"post_urn":{"type":"string","description":"The URN that was deleted."}}},"returns":"Confirmation that the post was deleted."}],"workflow":["post_text","post_link","post_image","delete_post"],"icon":"/icons/linkedin-post.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release: text, link, image posts, and delete"]}],"premadePrompt":"Use ToolRouter to draft and publish a LinkedIn post about [topic]. Write it in my voice, then post it to my feed.","requirements":[{"name":"linkedin","type":"connector","connector":"linkedin","displayName":"LinkedIn account","description":"Connect your LinkedIn account so agents can publish posts to your feed. Grants only the w_member_social scope — no access to messages, feed, or connections."}],"credentials":[{"name":"linkedin","type":"connector","connector":"linkedin","displayName":"LinkedIn account","description":"Connect your LinkedIn account so agents can publish posts to your feed. Grants only the w_member_social scope — no access to messages, feed, or connections."}]},{"name":"slack","displayName":"Slack","subtitle":"Read, send, and search your Slack","about":"**Slack** gives AI agents full access to your Slack workspace — reading channels, sending messages, searching conversations, reacting with emoji, and sharing files. It acts as you, so everything comes from your account, not a bot.\n\nThis is the tool for agents that need to stay in the loop on team conversations, post updates, summarize channel activity, or route information between Slack and other tools in a workflow.\n\n### What you can do\n- List public and private channels in your workspace\n- Read channel history and thread replies\n- Send messages to channels, reply in threads, or DM teammates\n- Edit and delete your own messages\n- Search with full Slack syntax — by channel, user, date range, and keyword\n- React to messages with any emoji\n- Upload files to channels and list earlier uploads\n- Find any user by email to open a direct message\n\n### Who it's for\nTeams who want AI agents embedded in their Slack workflows — summarizing standup channels, posting digests, routing alerts, or searching conversation history for context. Anyone who wants to automate the back-and-forth without leaving their existing chat setup.\n\n### How to use it\n1. Use **list_channels** to find the right channel, or **find_user** by email to target a DM\n2. Use **read_messages** to pull recent history from a channel or thread\n3. Use **send_message** to post to a channel or user — pass a thread_ts to reply in-thread\n4. Use **search** with Slack query syntax to find specific conversations across the workspace\n\n### Getting started\nConnect your Slack workspace to get started — the tool acts as your user account, so it can only see channels you have access to.","version":"0.01","categories":["communication","productivity"],"currency":"USD","skills":[{"name":"list_channels","displayName":"List Channels","description":"List public and private channels in the workspace. Defaults to channels the user can see; pass only_member=true to filter to channels they actually belong to.","inputSchema":{"type":"object","properties":{"types":{"type":"string","description":"Which channel types to include.","enum":["public","private","both","all"],"default":"both"},"limit":{"type":"number","description":"Maximum channels to return (1-500).","default":100},"only_member":{"type":"boolean","description":"If true, only return channels the connected user is a member of.","default":false},"exclude_archived":{"type":"boolean","description":"Hide archived channels (default true).","default":true},"cursor":{"type":"string","description":"Pagination cursor returned by a previous call as next_cursor. Pass to fetch the next page."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List public + private channels the user sees","input":{}},{"description":"Only channels the user is a member of","input":{"only_member":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"channels":{"type":"array","description":"List of channels with id, name, and topic."},"total":{"type":"number","description":"Number of channels returned."},"next_cursor":{"type":"string","description":"Pagination cursor for the next page, if any."}}},"returns":"Channels with name, id, member count, and topic."},{"name":"list_conversations","displayName":"List DMs and Group DMs","description":"List direct-message and group-direct-message conversations. Use this to find a conversation id to read or write to.","inputSchema":{"type":"object","properties":{"kind":{"type":"string","description":"Which conversation kind to include.","enum":["dm","group","all"],"default":"all"},"limit":{"type":"number","description":"Max conversations to return (1-500).","default":100},"cursor":{"type":"string","description":"Pagination cursor from a previous call."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List all DMs and group DMs","input":{}},{"description":"Only 1:1 DMs","input":{"kind":"dm"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"conversations":{"type":"array","description":"List of DM and group DM conversations."},"total":{"type":"number","description":"Number returned."}}},"returns":"Direct-message and group-DM conversations with their ids."},{"name":"list_users","displayName":"List Workspace Users","description":"List members of the workspace. Filters out bots and deleted accounts by default; pass include_bots / include_deleted to override.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max users to return (1-500).","default":100},"include_bots":{"type":"boolean","description":"Include bot users (default false).","default":false},"include_deleted":{"type":"boolean","description":"Include deactivated users (default false).","default":false},"cursor":{"type":"string","description":"Pagination cursor from a previous call."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List active human users","input":{}},{"description":"Include bots too","input":{"include_bots":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"users":{"type":"array","description":"List of workspace users."},"total":{"type":"number","description":"Number returned."}}},"returns":"Workspace members with name, id, email, and admin status."},{"name":"find_user","displayName":"Find User","description":"Find a workspace member by email address or user id. Use this to resolve someone to a user_id before calling send_message with user_id.","inputSchema":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the user to find."},"user_id":{"type":"string","description":"Slack user id (e.g. \"U01ABCDEFGH\") to look up."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find user by email","input":{"email":"blake@humanleap.co"}},{"description":"Look up user by id","input":{"user_id":"U01ABCDEFGH"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"user":{"type":"object","description":"The resolved user."}}},"returns":"The matching user with name, email, and Slack id."},{"name":"read_messages","displayName":"Read Messages","description":"Read recent messages from a channel or DM. Pass thread_ts to read a specific thread instead of the channel timeline. Messages are newest-first.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"Channel, DM, or group DM id (e.g. \"C01ABCDEFGH\"). Get this from list_channels or list_conversations."},"thread_ts":{"type":"string","description":"If provided, read replies in this specific thread instead of the channel timeline."},"limit":{"type":"number","description":"Max messages to return (1-200).","default":50},"oldest":{"type":"string","description":"Only return messages newer than this Slack timestamp (e.g. \"1712547890.123456\")."},"latest":{"type":"string","description":"Only return messages older than this Slack timestamp."},"cursor":{"type":"string","description":"Pagination cursor from a previous call."}},"required":["channel_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Read latest 50 messages from a channel","input":{"channel_id":"C01ABCDEFGH"}},{"description":"Read replies in a specific thread","input":{"channel_id":"C01ABCDEFGH","thread_ts":"1712547890.123456"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"messages":{"type":"array","description":"Array of messages newest-first."},"has_more":{"type":"boolean","description":"True if additional messages exist beyond the returned set."},"next_cursor":{"type":"string","description":"Pagination cursor for the next page."}}},"returns":"Messages with text, author, reactions, and any attached files."},{"name":"send_message","displayName":"Send Message","description":"Send a message to a channel, DM, or thread. Pass channel_id for a known channel, or user_id for a 1:1 DM (the skill opens the DM automatically). Pass thread_ts to reply inside an existing thread.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"Target channel or DM id. Either this or user_id is required."},"user_id":{"type":"string","description":"Target user id for a 1:1 DM. The skill opens the DM automatically."},"text":{"type":"string","description":"Message body. Supports Slack markdown (*bold*, _italic_, `code`)."},"thread_ts":{"type":"string","description":"If provided, posts as a reply inside this thread instead of the channel timeline."},"reply_broadcast":{"type":"boolean","description":"When replying in a thread, also post the reply to the main channel timeline.","default":false},"unfurl_links":{"type":"boolean","description":"Whether Slack should generate link previews (default true)."},"unfurl_media":{"type":"boolean","description":"Whether Slack should embed media previews (default true)."},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks for rich formatting. Advanced — leave undefined to send plain text.","items":{"type":"object"}}},"required":["text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Post to a channel","input":{"channel_id":"C01ABCDEFGH","text":"Hey team — deploying the slack tool now."}},{"description":"DM a user by id","input":{"user_id":"U01ABCDEFGH","text":"Quick favour — can you review the PR?"}},{"description":"Reply inside a thread","input":{"channel_id":"C01ABCDEFGH","thread_ts":"1712547890.123456","text":"+1 to this"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ok":{"type":"boolean","description":"True if the message was posted."},"channel_id":{"type":"string","description":"The channel id the message was posted to."},"ts":{"type":"string","description":"The Slack timestamp of the posted message — use this as thread_ts for replies, or with update_message / delete_message."},"permalink":{"type":"string","description":"Shareable Slack URL for the posted message."}}},"returns":"The posted message ts and permalink."},{"name":"update_message","displayName":"Edit Message","description":"Edit the text of a previously-sent message. Only works for messages the connected user posted — Slack rejects edits on other people's messages.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"Channel containing the message."},"ts":{"type":"string","description":"Timestamp of the message to edit (returned by send_message)."},"text":{"type":"string","description":"New message body."},"blocks":{"type":"array","description":"Optional new Slack Block Kit blocks.","items":{"type":"object"}}},"required":["channel_id","ts","text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Edit a message to fix a typo","input":{"channel_id":"C01ABCDEFGH","ts":"1712547890.123456","text":"Updated: deploy is live."}},{"description":"Edit a DM message","input":{"channel_id":"D01ABCDEFGH","ts":"1712547890.123456","text":"Updated text"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ok":{"type":"boolean","description":"True if the message was edited."},"ts":{"type":"string","description":"Timestamp of the edited message."},"permalink":{"type":"string","description":"Shareable Slack URL."}}},"returns":"The edited message ts and permalink."},{"name":"delete_message","displayName":"Delete Message","description":"Delete a previously-sent message. Only works for messages the connected user posted.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"Channel containing the message."},"ts":{"type":"string","description":"Timestamp of the message to delete."}},"required":["channel_id","ts"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Delete a message by ts","input":{"channel_id":"C01ABCDEFGH","ts":"1712547890.123456"}},{"description":"Delete a DM message","input":{"channel_id":"D01ABCDEFGH","ts":"1712547890.123456"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"deleted":{"type":"boolean","description":"True if the message was removed."},"ts":{"type":"string","description":"Timestamp of the deleted message."}}},"returns":"Confirmation the message was deleted."},{"name":"react","displayName":"Add or Remove Reaction","description":"Add or remove an emoji reaction on a message. Pass the emoji name without colons (e.g. \"thumbsup\", not \":thumbsup:\").","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"Channel containing the message."},"ts":{"type":"string","description":"Timestamp of the message to react to."},"emoji":{"type":"string","description":"Emoji name without colons, e.g. \"thumbsup\", \"eyes\", \"rocket\"."},"action":{"type":"string","description":"Whether to add or remove the reaction.","enum":["add","remove"],"default":"add"}},"required":["channel_id","ts","emoji"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"React with thumbs up","input":{"channel_id":"C01ABCDEFGH","ts":"1712547890.123456","emoji":"thumbsup"}},{"description":"Remove an eyes reaction","input":{"channel_id":"C01ABCDEFGH","ts":"1712547890.123456","emoji":"eyes","action":"remove"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ok":{"type":"boolean","description":"True if the reaction was added or removed."},"action":{"type":"string","description":"Which action was performed."}}},"returns":"Confirmation the reaction was added or removed."},{"name":"search","displayName":"Search Messages","description":"Full-text search across workspace messages. Supports Slack query modifiers: in:#channel-name, from:@username, before:YYYY-MM-DD, after:YYYY-MM-DD, has::emoji:. Results are newest-first by default.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query. Supports Slack modifiers — in:#channel, from:@user, before:2026-04-01, has::rocket:."},"count":{"type":"number","description":"Max matches to return (1-100).","default":20},"sort":{"type":"string","description":"Sort field.","enum":["timestamp","score"],"default":"timestamp"},"sort_dir":{"type":"string","description":"Sort direction.","enum":["asc","desc"],"default":"desc"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for a keyword workspace-wide","input":{"query":"deploy"}},{"description":"Find recent messages from a user in a channel","input":{"query":"from:@blake in:#engineering","count":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"matches":{"type":"array","description":"Matching messages newest-first."},"total":{"type":"number","description":"Total matches available."}}},"returns":"Matching messages with channel context, text, and shareable permalinks."},{"name":"upload_file","displayName":"Upload File","description":"Upload a file from a public URL and share it into a channel or DM. Supports any file type — Slack renders images, PDFs, and videos inline.","inputSchema":{"type":"object","properties":{"file_url":{"type":"string","description":"File as ToolRouter file ID or hosted HTTP(S) URL.","format":"uri"},"channel_id":{"type":"string","description":"Channel or DM to share the file into. Omit to upload without sharing."},"filename":{"type":"string","description":"Filename to display in Slack. Defaults to the last path segment of file_url."},"title":{"type":"string","description":"File title shown in Slack. Defaults to the filename."},"initial_comment":{"type":"string","description":"Optional comment to post alongside the file."},"thread_ts":{"type":"string","description":"If provided, shares the file as a reply in this thread."}},"required":["file_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Share a PDF into a channel","input":{"file_url":"https://example.com/q1-report.pdf","channel_id":"C01ABCDEFGH","initial_comment":"Q1 report — please review before Friday."}},{"description":"Share an image with a title","input":{"file_url":"https://example.com/mockup.png","channel_id":"C01ABCDEFGH","title":"New landing page mockup"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ok":{"type":"boolean","description":"True if the file was uploaded and shared."},"file_id":{"type":"string","description":"Slack file id — use with list_files or to reference later."},"permalink":{"type":"string","description":"Shareable Slack URL for the file."}}},"returns":"The new file id and permalink."},{"name":"list_files","displayName":"List Files","description":"List files previously shared in the workspace, optionally filtered by channel or uploader. Useful for finding a specific attachment or auditing what has been shared.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"Limit to files shared in this channel."},"user_id":{"type":"string","description":"Limit to files uploaded by this user."},"count":{"type":"number","description":"Max files to return (1-100).","default":20},"types":{"type":"string","description":"Comma-separated filter: images, pdfs, videos, gdocs, etc."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List recent files in a channel","input":{"channel_id":"C01ABCDEFGH","count":10}},{"description":"Only images uploaded by a user","input":{"user_id":"U01ABCDEFGH","types":"images"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"files":{"type":"array","description":"Array of file metadata with permalinks."},"total":{"type":"number","description":"Total matches available."}}},"returns":"Files with name, type, size, uploader, and shareable permalink."}],"workflow":["list_channels → read_messages → send_message","find_user → send_message","search → read_messages → send_message"],"icon":"/icons/slack.webp","changelog":[{"version":"0.01","date":"2026-04-09","changes":["Initial release: list/read channels and DMs, send/update/delete messages, reply in threads, react with emoji, search messages, find users, upload and list files"]}],"premadePrompt":"Use ToolRouter to summarise what happened in my [#channel-name] channel today, then post a short recap to [#channel-name].","requirements":[{"name":"slack","type":"connector","connector":"slack","displayName":"Slack account","description":"Connect your Slack workspace so agents can read channels, send messages, search conversations, and share files on your behalf. Acts as your user — no bot account."}],"credentials":[{"name":"slack","type":"connector","connector":"slack","displayName":"Slack account","description":"Connect your Slack workspace so agents can read channels, send messages, search conversations, and share files on your behalf. Acts as your user — no bot account."}]},{"name":"x-manager","displayName":"X Manager","subtitle":"Post tweets, search, engage, follow, bookmark, and DM on X","about":"**X Manager** gives AI agents full control over your X (Twitter) account — posting text and image tweets, replying to threads, searching recent posts, looking up user profiles, liking and retweeting, following and unfollowing, managing bookmarks, and sending direct messages. One tool for everything your account can do.\n\nInstead of manually logging into X to execute a content plan, you can describe what you want to post and it happens. Search and engage with relevant conversations, manage your social graph, and handle direct messages — all without touching the app.\n\n### What you can do\n- **post_tweet** — post text tweets; supports threads via reply_to_tweet_id and quote tweets via quote_tweet_id\n- **post_image_tweet** — post tweets with up to 4 images attached\n- **delete_tweet** — remove a tweet by ID\n- **search_tweets** — search recent posts using X's full query syntax (from:, has:media, -is:retweet, etc.)\n- **get_tweet** — fetch a specific tweet by ID\n- **get_user_tweets** — pull the timeline for any user\n- **get_user** — look up a user's profile by handle or ID\n- **like_tweet / unlike_tweet / retweet / unretweet** — engagement actions on any tweet\n- **follow_user / unfollow_user** — manage your social graph\n- **bookmark_tweet / remove_bookmark / get_bookmarks** — private reading list management\n- **send_dm** — send a direct message to any user\n\n### Who it's for\nSocial media managers executing content calendars without manual posting. Brands running engagement workflows across mentions and replies. Researchers monitoring topics and conversations in real time. Anyone who wants their AI assistant to handle their X presence.\n\n### How to use it\n1. Connect your X account via the connector setup — all skills require OAuth authorization\n2. Use **post_tweet** for text content and **post_image_tweet** when attaching images\n3. Use **search_tweets** with X query syntax to find relevant conversations to engage with\n4. Use **like_tweet**, **retweet**, or **follow_user** to execute engagement actions\n\n### Getting started\nConnect your X account first — the tool will prompt you with a connect link if it hasn't been authorized yet.","version":"0.01","categories":["marketing","communication"],"currency":"USD","skills":[{"name":"post_tweet","displayName":"Post Tweet","description":"Publish a text tweet to the user's X feed. Supports replies (reply to an existing tweet) and quote tweets.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The tweet text. Maximum 280 characters (or 25,000 for long-form if the user has access).","minLength":1,"maxLength":25000},"reply_to_tweet_id":{"type":"string","description":"Tweet ID to reply to. Makes this tweet a reply in that thread."},"quote_tweet_id":{"type":"string","description":"Tweet ID to quote. Embeds the quoted tweet below this one."}},"required":["text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Post a simple tweet","input":{"text":"Just shipped a new feature. Feels good."}},{"description":"Reply to an existing tweet","input":{"text":"Congrats on the launch!","reply_to_tweet_id":"1234567890123456789"}},{"description":"Quote tweet with commentary","input":{"text":"This is worth reading.","quote_tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The new tweet ID."},"text":{"type":"string","description":"The tweet text as published."},"tweet_url":{"type":"string","description":"Public URL of the tweet."},"author_id":{"type":"string","description":"User ID of the authenticated user."},"author_username":{"type":"string","description":"Username of the authenticated user."}}},"returns":"The new tweet ID, URL, and author info."},{"name":"post_image_tweet","displayName":"Post Image Tweet","description":"Publish a tweet with 1-4 images attached. Images are uploaded to X first, then referenced in the tweet. Each image must be under 5 MB.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The tweet text.","minLength":1,"maxLength":25000},"image_urls":{"type":"array","description":"Media as ToolRouter file ID or hosted HTTP(S) URL.","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":4},"reply_to_tweet_id":{"type":"string","description":"Tweet ID to reply to (optional)."}},"required":["text","image_urls"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":45,"mode":"io"}},"examples":[{"description":"Tweet with a single image","input":{"text":"Check out this view from the office.","image_urls":["https://example.com/office.jpg"]}},{"description":"Tweet with multiple images","input":{"text":"Product launch day!","image_urls":["https://example.com/product1.jpg","https://example.com/product2.jpg"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The new tweet ID."},"text":{"type":"string","description":"The tweet text as published."},"tweet_url":{"type":"string","description":"Public URL of the tweet."},"author_id":{"type":"string","description":"User ID of the authenticated user."},"author_username":{"type":"string","description":"Username of the authenticated user."},"image_count":{"type":"number","description":"Number of images attached."}}},"returns":"The new tweet ID, URL, and the number of images uploaded."},{"name":"delete_tweet","displayName":"Delete Tweet","description":"Remove a tweet from the user's X feed. Only works for tweets the user authored.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to delete.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Delete a previously-created tweet","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"deleted":{"type":"boolean","description":"True if the tweet was deleted."},"tweet_id":{"type":"string","description":"The ID that was deleted."}}},"returns":"Confirmation that the tweet was deleted."},{"name":"get_tweet","displayName":"Get Tweet","description":"Look up a single tweet by ID. Returns full details including metrics, entities, and author info.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The tweet ID to look up.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up a tweet by ID","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Tweet ID."},"text":{"type":"string","description":"Tweet text."},"created_at":{"type":"string","description":"When the tweet was posted."},"author_username":{"type":"string","description":"Author's username."},"public_metrics":{"type":"object","description":"Like, retweet, reply, and impression counts."},"tweet_url":{"type":"string","description":"Public URL of the tweet."}}},"returns":"Full tweet details with metrics and author info."},{"name":"get_user_tweets","displayName":"Get User Tweets","description":"Fetch recent tweets from a user's timeline. Supports pagination for scrolling through history.","inputSchema":{"type":"object","properties":{"username":{"type":"string","description":"The user's X handle (without @). Either username or user_id is required."},"user_id":{"type":"string","description":"The user's X ID. Either username or user_id is required."},"max_results":{"type":"number","description":"Number of tweets to return per page. 5-100, default 10.","minimum":5,"maximum":100,"default":10},"pagination_token":{"type":"string","description":"Cursor for the next page. Pass the next_token from a previous response."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get recent tweets from a user","input":{"username":"elonmusk","max_results":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tweets":{"type":"array","description":"Array of tweet objects."},"result_count":{"type":"number","description":"Number of tweets returned."},"next_token":{"type":"string","description":"Cursor for the next page, or null."}}},"returns":"A paginated list of recent tweets from the user's timeline."},{"name":"search_tweets","displayName":"Search Tweets","description":"Search recent tweets (last 7 days) using X's query syntax. Supports operators like from:, has:media, -is:retweet, lang:, and boolean logic.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query using X's query syntax. Examples: \"AI tools\", \"from:openai\", \"machine learning -is:retweet has:links\".","minLength":1,"maxLength":512},"max_results":{"type":"number","description":"Number of tweets to return per page. 10-100, default 10.","minimum":10,"maximum":100,"default":10},"pagination_token":{"type":"string","description":"Cursor for the next page."}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for tweets about a topic","input":{"query":"AI agents -is:retweet lang:en","max_results":10}},{"description":"Find tweets from a specific user with media","input":{"query":"from:ToolRouter has:media"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tweets":{"type":"array","description":"Array of matching tweet objects."},"result_count":{"type":"number","description":"Number of tweets returned."},"next_token":{"type":"string","description":"Cursor for the next page, or null."}}},"returns":"A paginated list of tweets matching the search query."},{"name":"get_user","displayName":"Get User Profile","description":"Look up an X user's profile by username or user ID. Returns bio, follower counts, verification status, and more.","inputSchema":{"type":"object","properties":{"username":{"type":"string","description":"The user's X handle (without @). Either username or user_id is required."},"user_id":{"type":"string","description":"The user's X ID. Either username or user_id is required."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up a user by handle","input":{"username":"ToolRouter"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"User ID."},"name":{"type":"string","description":"Display name."},"username":{"type":"string","description":"Handle (without @)."},"description":{"type":"string","description":"Bio text."},"public_metrics":{"type":"object","description":"Follower, following, and tweet counts."},"verified":{"type":"boolean","description":"Whether the user is verified."},"profile_url":{"type":"string","description":"Link to the user's X profile."}}},"returns":"Full user profile with bio, metrics, and verification status."},{"name":"like_tweet","displayName":"Like Tweet","description":"Like a tweet on behalf of the connected user.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to like.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Like a tweet","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"liked":{"type":"boolean","description":"True if the tweet was liked."},"tweet_id":{"type":"string","description":"The tweet that was liked."},"tweet_url":{"type":"string","description":"URL of the liked tweet."}}},"returns":"Confirmation that the tweet was liked."},{"name":"unlike_tweet","displayName":"Unlike Tweet","description":"Remove a previously-added like from a tweet by tweet ID.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to unlike.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Unlike a tweet","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"unliked":{"type":"boolean","description":"True if the like was removed."},"tweet_id":{"type":"string","description":"The tweet that was unliked."}}},"returns":"Confirmation that the like was removed."},{"name":"retweet","displayName":"Retweet","description":"Retweet a tweet on behalf of the connected user.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to retweet.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Retweet a tweet","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"retweeted":{"type":"boolean","description":"True if the tweet was retweeted."},"tweet_id":{"type":"string","description":"The tweet that was retweeted."},"tweet_url":{"type":"string","description":"URL of the retweeted tweet."}}},"returns":"Confirmation that the tweet was retweeted."},{"name":"unretweet","displayName":"Undo Retweet","description":"Remove a retweet you previously made, taking the retweeted tweet off your timeline.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to unretweet.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Undo a retweet","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"unretweeted":{"type":"boolean","description":"True if the retweet was removed."},"tweet_id":{"type":"string","description":"The tweet that was unretweeted."}}},"returns":"Confirmation that the retweet was removed."},{"name":"follow_user","displayName":"Follow User","description":"Follow an X user. If the user has a protected account, this sends a follow request.","inputSchema":{"type":"object","properties":{"username":{"type":"string","description":"The user's X handle (without @). Either username or user_id is required."},"user_id":{"type":"string","description":"The user's X ID."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Follow a user by handle","input":{"username":"ToolRouter"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"following":{"type":"boolean","description":"True if now following the user."},"pending_follow":{"type":"boolean","description":"True if follow request is pending (protected account)."},"target_user_id":{"type":"string","description":"The followed user's ID."},"target_username":{"type":"string","description":"The followed user's handle."},"profile_url":{"type":"string","description":"Link to the followed user's profile."}}},"returns":"Confirmation of the follow, or pending status for protected accounts."},{"name":"unfollow_user","displayName":"Unfollow User","description":"Unfollow an X user so their posts no longer appear in your timeline.","inputSchema":{"type":"object","properties":{"username":{"type":"string","description":"The user's X handle (without @). Either username or user_id is required."},"user_id":{"type":"string","description":"The user's X ID."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Unfollow a user","input":{"username":"example_user"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"unfollowed":{"type":"boolean","description":"True if the user was unfollowed."},"target_user_id":{"type":"string","description":"The unfollowed user's ID."}}},"returns":"Confirmation that the user was unfollowed."},{"name":"bookmark_tweet","displayName":"Bookmark Tweet","description":"Add a tweet to the user's private bookmarks.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to bookmark.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Bookmark a tweet","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"bookmarked":{"type":"boolean","description":"True if the tweet was bookmarked."},"tweet_id":{"type":"string","description":"The bookmarked tweet ID."},"tweet_url":{"type":"string","description":"URL of the bookmarked tweet."}}},"returns":"Confirmation that the tweet was bookmarked."},{"name":"remove_bookmark","displayName":"Remove Bookmark","description":"Remove a tweet from the user's bookmarks.","inputSchema":{"type":"object","properties":{"tweet_id":{"type":"string","description":"The ID of the tweet to unbookmark.","pattern":"^\\d+$"}},"required":["tweet_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Remove a bookmark","input":{"tweet_id":"1234567890123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"removed":{"type":"boolean","description":"True if the bookmark was removed."},"tweet_id":{"type":"string","description":"The tweet that was unbookmarked."}}},"returns":"Confirmation that the bookmark was removed."},{"name":"get_bookmarks","displayName":"Get Bookmarks","description":"List the user's saved bookmarks. Bookmarks are private — only the connected user can see them.","inputSchema":{"type":"object","properties":{"max_results":{"type":"number","description":"Number of bookmarks to return per page. 1-100, default 10.","minimum":1,"maximum":100,"default":10},"pagination_token":{"type":"string","description":"Cursor for the next page."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Get your latest bookmarks","input":{"max_results":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"bookmarks":{"type":"array","description":"Array of bookmarked tweet objects."},"result_count":{"type":"number","description":"Number of bookmarks returned."},"next_token":{"type":"string","description":"Cursor for the next page, or null."}}},"returns":"A paginated list of bookmarked tweets."},{"name":"send_dm","displayName":"Send Direct Message","description":"Send a text direct message to another X user. Creates a 1-on-1 conversation or sends to an existing one.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The message text.","minLength":1,"maxLength":10000},"username":{"type":"string","description":"Recipient's X handle (without @). Either username or user_id is required."},"user_id":{"type":"string","description":"Recipient's X user ID."}},"required":["text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Send a DM to a user","input":{"text":"Hey, just wanted to follow up on our conversation.","username":"example_user"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sent":{"type":"boolean","description":"True if the message was sent."},"dm_conversation_id":{"type":"string","description":"The DM conversation ID."},"dm_event_id":{"type":"string","description":"The message event ID."},"recipient_user_id":{"type":"string","description":"Recipient's user ID."}}},"returns":"Confirmation that the DM was sent, with conversation and event IDs."}],"workflow":["post_tweet","post_image_tweet","search_tweets","get_tweet","get_user_tweets","get_user","like_tweet","retweet","follow_user","bookmark_tweet","get_bookmarks","send_dm"],"icon":"/icons/x-manager.webp","changelog":[{"version":"0.01","date":"2026-04-12","changes":["Initial release: tweets, images, search, engagement, follows, bookmarks, and DMs"]}],"premadePrompt":"Use ToolRouter to draft and post a tweet about [topic]. Write it in my voice, then publish it to my X feed.","requirements":[{"name":"x","type":"connector","connector":"x","displayName":"X account","description":"Connect your X account so agents can post, search, engage, and manage your account on your behalf."}],"credentials":[{"name":"x","type":"connector","connector":"x","displayName":"X account","description":"Connect your X account so agents can post, search, engage, and manage your account on your behalf."}]},{"name":"video-transcripts","displayName":"Video Transcripts","subtitle":"Transcribe TikTok, YouTube & more","about":"**Video Transcripts** extracts the full spoken text from social videos on TikTok, YouTube, Instagram, Twitter/X, and Facebook. Paste a video URL and get clean, readable text back in seconds — no upload required, no manual transcription.\n\nThis is the fastest way to turn video content into something you can read, quote, analyze, or repurpose. It works on any public video from the major platforms, whether you want to study a competitor's talking points, pull quotes for a blog post, or build a training dataset from a large collection of videos.\n\n### What you can do\n- **get_tiktok_transcript** — extract spoken text from any public TikTok video\n- **get_youtube_transcript** — pull the transcript from a YouTube video (fastest — uses existing captions when available)\n- **get_instagram_transcript** — transcribe a public Instagram video or Reel\n- **get_twitter_transcript** — extract speech from a Twitter/X video post\n- **get_facebook_transcript** — transcribe a public Facebook video\n\n### Who it's for\nContent researchers repurposing video into blogs, newsletters, or social posts. Competitive analysts studying what rivals are saying. Marketers pulling quotes and key messages from creator content. Data teams building text datasets from video sources.\n\n### How to use it\n1. Find the public URL of the video you want to transcribe\n2. Choose the skill matching the platform: **get_youtube_transcript** for YouTube, **get_tiktok_transcript** for TikTok, etc.\n3. Pass the full URL including the https:// prefix\n4. The skill returns plain text — no timestamps — ready to read or pass into another tool\n\n### Getting started\nAll skills work with public videos. Copy the video URL from the platform's share button and pass it directly to the relevant skill.","version":"0.02","categories":["data","media"],"currency":"USD","skills":[{"name":"get_tiktok_transcript","displayName":"Get TikTok Transcript","description":"Extract the spoken text transcript from a TikTok video. Returns the full transcribed audio content.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract transcript from a TikTok video","input":{"url":"https://www.tiktok.com/@charlidamelio/video/7281923046182938922"}}],"pricing":"paid","returns":"Full spoken text transcript of the TikTok video"},{"name":"get_youtube_transcript","displayName":"Get YouTube Transcript","description":"Extract the spoken text transcript from a YouTube video or short. Returns the full transcribed audio content.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract transcript from a YouTube video","input":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}}],"pricing":"paid","returns":"Full spoken text transcript of the YouTube video or short"},{"name":"get_twitter_transcript","displayName":"Get Twitter Video Transcript","description":"Extract the spoken text transcript from a Twitter/X video tweet. Uses AI transcription so may be slightly slow.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract transcript from a Twitter video","input":{"url":"https://x.com/elonmusk/status/1234567890123456789"}}],"pricing":"paid","returns":"Full spoken text transcript of the Twitter video tweet"},{"name":"get_instagram_transcript","displayName":"Get Instagram Transcript","description":"Extract the spoken text transcript from an Instagram post or reel video. Uses AI transcription so may be slightly slow.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract transcript from an Instagram reel","input":{"url":"https://www.instagram.com/reel/ABC123def456/"}}],"pricing":"paid","returns":"Full spoken text transcript of the Instagram video or reel"},{"name":"get_facebook_transcript","displayName":"Get Facebook Transcript","description":"Extract the spoken text transcript from a Facebook post or reel video. Only works for videos with spoken content.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract transcript from a Facebook video","input":{"url":"https://www.facebook.com/watch/?v=1234567890"}}],"pricing":"paid","returns":"Full spoken text transcript of the Facebook video or reel"}],"icon":"/icons/video-transcripts.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Get me the full transcript of this video: [video URL]. I want to repurpose the content into a blog post.","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"ad-library-search","displayName":"Ad Library Search","subtitle":"Spy on ads across every platform","about":"**Ad Library Search** lets you browse the public ad libraries of Facebook, Google, LinkedIn, and Reddit — surfacing live creatives, impression data, and ad copy from any advertiser. It's the fastest way to see exactly what your competitors are saying and spending on.\n\nMarketers use it to track competitive messaging, spot trends in creative formats, and reverse-engineer campaigns that are working. You can search by keyword to understand the landscape around a topic, or look up a specific company to see every ad they're currently running. Google results include OCR-extracted text from image ads when you enable it.\n\n### What you can do\n- Search Facebook ads by keyword — filter by country, status, media type, and date range\n- Look up all active ads for a specific Facebook page or company\n- Search Google advertisers by name and pull their full ad inventory\n- Find B2B ads on LinkedIn by keyword or company\n- Browse Reddit sponsored posts\n- Get full creative details for any individual ad by URL or ID\n\n### Who it's for\nMarketers and brand strategists monitoring competitive advertising. Growth teams researching what messaging is working in their market. Agencies doing creative research before pitching or launching campaigns.\n\n### How to use it\n1. Use **search_facebook_ad_companies** to find a brand's page ID, then **get_facebook_company_ads** to see all their active ads\n2. Use **search_facebook_ads** to search by keyword across all advertisers — great for spotting industry trends\n3. Use **search_linkedin_ads** for B2B campaigns, or **search_reddit_ads** for community-targeted ads\n4. Filter status: \"ACTIVE\" to see only running ads, or media_type: \"VIDEO\" to focus on video creatives\n\n### Getting started\nConnect your account to enable ad library access, then start with a keyword search or company name lookup.","version":"0.02","categories":["marketing","analytics"],"currency":"USD","skills":[{"name":"search_facebook_ads","displayName":"Search Facebook Ads","description":"Search the Facebook (Meta) Ad Library by keyword. Filter by country, status, media type, date range, and more. Returns up to ~1,500 results with pagination.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword to search for in ads"},"country":{"type":"string","description":"Two-letter country code to filter by (e.g. \"US\", \"GB\"). Defaults to ALL"},"status":{"type":"string","enum":["ALL","ACTIVE","INACTIVE"],"description":"Ad status filter. Defaults to ACTIVE"},"media_type":{"type":"string","enum":["ALL","IMAGE","VIDEO","MEME","IMAGE_AND_MEME","NONE"],"description":"Media type filter. Defaults to ALL"},"sort_by":{"type":"string","enum":["total_impressions","relevancy_monthly_grouped"],"description":"Sort by impressions or most recent. Defaults to impressions"},"search_type":{"type":"string","enum":["keyword_unordered","keyword_exact_phrase"],"description":"Search by keyword or exact phrase"},"ad_type":{"type":"string","enum":["all","political_and_issue_ads"],"description":"Filter for political/issue ads or all ads"},"start_date":{"type":"string","description":"Impressions start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"Impressions end date in YYYY-MM-DD format"},"cursor":{"type":"string","description":"Pagination cursor from previous response"},"trim":{"type":"boolean","description":"Set to true for a trimmed response"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search Facebook ads by keyword","input":{"query":"running shoes"}},{"description":"Search active video ads in the US","input":{"query":"fitness app","country":"US","status":"ACTIVE","media_type":"VIDEO"}}],"pricing":"paid","returns":"List of Facebook ads with ad content, impressions data, media assets, and advertiser information"},{"name":"search_facebook_ad_companies","displayName":"Search Facebook Ad Companies","description":"Search for companies in the Facebook Ad Library by name. Returns company names and their ad library page IDs, which can be used with get_facebook_company_ads.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Company name to search for"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find a company in the Facebook Ad Library","input":{"query":"Nike"}}],"pricing":"paid","returns":"List of companies with their names and ad library page IDs"},{"name":"get_facebook_company_ads","displayName":"Get Facebook Company Ads","description":"Get all ads a company is running on Facebook/Meta. Search by company name or page ID. Filter by country, status, media type, language, and date range.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company name to get ads for"},"page_id":{"type":"string","description":"Ad library page ID (from search_facebook_ad_companies). Use this or company_name"},"country":{"type":"string","description":"Two-letter country code (e.g. \"US\"). Defaults to ALL"},"status":{"type":"string","enum":["ALL","ACTIVE","INACTIVE"],"description":"Ad status filter. Defaults to ACTIVE"},"media_type":{"type":"string","enum":["ALL","IMAGE","VIDEO","MEME","IMAGE_AND_MEME","NONE"],"description":"Media type filter. Defaults to ALL"},"language":{"type":"string","description":"Two-letter language code to filter by (e.g. \"EN\", \"ES\")"},"sort_by":{"type":"string","enum":["total_impressions","relevancy_monthly_grouped"],"description":"Sort by impressions or most recent"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"},"cursor":{"type":"string","description":"Pagination cursor from previous response"},"trim":{"type":"boolean","description":"Set to true for a trimmed response"}}},"annotations":{},"examples":[{"description":"Get all Nike ads on Facebook","input":{"company_name":"Nike"}},{"description":"Get active video ads by page ID","input":{"page_id":"123456789","status":"ACTIVE","media_type":"VIDEO"}}],"pricing":"paid","returns":"List of ads the company is running with ad content, impressions, media, and targeting data"},{"name":"get_facebook_ad","displayName":"Get Facebook Ad Details","description":"Get full details of a specific Facebook ad by ID or URL. Includes ad copy, media, cards, and optional video transcript (for videos under 2 minutes).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Facebook Ad ID"},"url":{"type":"string","description":"Facebook Ad URL. Use this or id"},"get_transcript":{"type":"boolean","description":"Get video transcript (only for videos under 2 minutes)"},"trim":{"type":"boolean","description":"Set to true for a trimmed response"}}},"annotations":{},"examples":[{"description":"Get a Facebook ad by ID","input":{"id":"123456789"}}],"pricing":"paid","returns":"Full ad details including ad copy, media assets, cards, advertiser info, and optional transcript"},{"name":"search_google_advertisers","displayName":"Search Google Advertisers","description":"Search the Google Ad Transparency Library for advertisers by name. Returns advertiser IDs that can be used with get_google_company_ads.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Advertiser name to search for"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for an advertiser on Google","input":{"query":"Shopify"}}],"pricing":"paid","returns":"List of advertisers with their names and advertiser IDs"},{"name":"get_google_company_ads","displayName":"Get Google Company Ads","description":"Get ads a company is running on Google. Search by domain or advertiser ID. Filter by topic, region, and date range. Only public ads are available.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain (e.g. \"shopify.com\")"},"advertiser_id":{"type":"string","description":"Google advertiser ID (from search_google_advertisers). Use this or domain"},"topic":{"type":"string","enum":["all","political"],"description":"Filter by topic. Political ads also require a region"},"region":{"type":"string","description":"Two-letter region code (e.g. \"US\"). Required for political topic"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"},"get_ad_details":{"type":"boolean","description":"Set to true to get full ad details (costs 25 credits per ad instead of 1)"},"cursor":{"type":"string","description":"Pagination cursor from previous response"}}},"annotations":{},"examples":[{"description":"Get ads by domain","input":{"domain":"shopify.com"}},{"description":"Get ads with full details by advertiser ID","input":{"advertiser_id":"AR17804957702832168961","get_ad_details":true}}],"pricing":"paid","returns":"List of Google ads with advertiser and creative IDs, and optionally full ad details with OCR text"},{"name":"get_google_ad","displayName":"Get Google Ad Details","description":"Get details of a specific Google ad by its Ad Transparency URL. The URL must include both advertiser and creative IDs. Uses OCR to extract ad text.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Google Ad Transparency URL (must contain advertiser and creative IDs, e.g. https://adstransparency.google.com/advertiser/AR.../creative/CR...)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get a specific Google ad","input":{"url":"https://adstransparency.google.com/advertiser/AR17804957702832168961/creative/CR04185088030974935041"}}],"pricing":"paid","returns":"Ad details including OCR-extracted text, media type, and advertiser information"},{"name":"search_linkedin_ads","displayName":"Search LinkedIn Ads","description":"Search the LinkedIn ad library by company name, keyword, or company ID. At least one parameter is required.","inputSchema":{"type":"object","properties":{"company":{"type":"string","description":"Company name to search for ads (e.g. \"Salesforce\")"},"keyword":{"type":"string","description":"Keyword to search for in ad content"},"company_id":{"type":"string","description":"LinkedIn company ID to filter ads by"}}},"annotations":{},"examples":[{"description":"Search LinkedIn ads by company name","input":{"company":"Salesforce"}}],"pricing":"paid","returns":"List of LinkedIn advertisements with ad content, sponsor details, and campaign metadata"},{"name":"get_linkedin_ad","displayName":"Get LinkedIn Ad Details","description":"Get full details of a specific LinkedIn advertisement by URL. Returns ad copy, media, sponsor information, and engagement data.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the LinkedIn advertisement"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a LinkedIn ad","input":{"url":"https://www.linkedin.com/ad/library/123456789"}}],"pricing":"paid","returns":"LinkedIn ad details including ad copy, media assets, sponsor info, and engagement metrics"},{"name":"search_reddit_ads","displayName":"Search Reddit Ads","description":"Search Reddit for promoted and sponsored posts matching a query. Returns ad content, targeting info, and engagement metrics.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query to find Reddit advertisements"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Reddit ads about a product category","input":{"query":"project management software"}}],"pricing":"paid","returns":"List of Reddit sponsored posts with ad content, subreddit targeting, and engagement data"},{"name":"get_reddit_ad","displayName":"Get Reddit Ad","description":"Get full details of a specific Reddit advertisement by URL, including ad copy, media, targeting, and engagement metrics.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the Reddit advertisement post"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get details of a specific Reddit ad","input":{"url":"https://www.reddit.com/user/ExampleBrand/comments/abc123/try_our_new_product/"}}],"pricing":"paid","returns":"Reddit ad details including ad copy, media assets, advertiser info, and engagement metrics"}],"icon":"/icons/ad-library-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Show me what ads [company name] is currently running on Facebook and LinkedIn — I want to see their messaging, creative formats, and any patterns in their ad strategy.","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}]},{"name":"social-media-comments","displayName":"Social Media Comments","subtitle":"Pull comments from social platforms","about":"**Social Media Comments** retrieves full comment threads from TikTok, YouTube, Instagram, Facebook, and Reddit — including author details, like counts, and timestamps. Paste any post URL and get back the actual conversation happening underneath it.\n\nComment sections are where real audience reactions live. This tool makes them structured and searchable — ideal for sentiment research, community analysis, trend detection, and competitor monitoring without manually scrolling through each platform.\n\n### What you can do\n- Pull comments from TikTok videos with author names, like counts, and timestamps\n- Retrieve YouTube comment threads including replies\n- Fetch Instagram post comments\n- Get Facebook post comment threads\n- Pull Reddit comment threads with upvote counts\n- Fetch replies to specific TikTok or YouTube comments\n\n### Who it's for\nMarketers and researchers who want to understand audience reactions to content. Brands monitoring what people say about their posts or competitors' posts. Analysts doing sentiment research across multiple platforms. Anyone who needs raw comment data for qualitative or quantitative analysis.\n\n### How to use it\n1. Pick the skill matching your platform: **get_tiktok_comments**, **get_youtube_comments**, **get_instagram_comments**, **get_facebook_comments**, or **get_reddit_comments**\n2. Pass the full URL of the post or video\n3. For TikTok replies, use **get_tiktok_comment_replies** with the comment ID and original post URL\n4. For YouTube replies, use **get_youtube_comment_replies** with the continuation token from the parent comment\n\n### Getting started\nConnect your social data account to enable comment fetching — then pass any post URL to get started.","version":"0.03","categories":["data","analytics"],"currency":"USD","skills":[{"name":"get_tiktok_comments","displayName":"Get TikTok Comments","description":"Retrieve comments and replies on a TikTok video including author details, likes, and timestamps.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post or video to retrieve comments from"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get comments on a TikTok video","input":{"url":"https://www.tiktok.com/@charlidamelio/video/7281939328492387630"}}],"pricing":"paid","returns":"Array of comments with author, text, likes, replies, and timestamps"},{"name":"get_tiktok_comment_replies","displayName":"Get TikTok Comment Replies","description":"Retrieve replies to a specific TikTok comment by comment ID and video URL. Use the cid and url fields from a `get_tiktok_comments` response.","inputSchema":{"type":"object","properties":{"comment_id":{"type":"string","description":"TikTok comment ID — the `cid` field from a `get_tiktok_comments` response"},"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"cursor":{"type":"number","description":"Pagination cursor from a previous response to fetch more replies"}},"required":["comment_id","url"]},"annotations":{},"examples":[{"description":"Get replies to a TikTok comment","input":{"comment_id":"7281939328492387631","url":"https://www.tiktok.com/@charlidamelio/video/7281939328492387630"}}],"pricing":"paid","returns":"Array of reply objects with author, text, likes, and timestamps"},{"name":"get_youtube_comments","displayName":"Get YouTube Comments","description":"Retrieve comments and replies on a YouTube video including author details, likes, and timestamps.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post or video to retrieve comments from"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get comments on a YouTube video","input":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}}],"pricing":"paid","returns":"Array of comments with author, text, likes, replies, and timestamps"},{"name":"get_youtube_comment_replies","displayName":"Get YouTube Comment Replies","description":"Retrieve replies to a specific YouTube comment thread using the repliesContinuationToken from a `get_youtube_comments` response.","inputSchema":{"type":"object","properties":{"continuation_token":{"type":"string","description":"Replies continuation token — the `repliesContinuationToken` field from a comment in a `get_youtube_comments` response"}},"required":["continuation_token"]},"annotations":{},"examples":[{"description":"Get replies to a YouTube comment thread","input":{"continuation_token":"4qmFsgKrCBIYVUNkRkpXVWE0M3NtUm00SXBIQnB"}}],"pricing":"paid","returns":"Array of reply objects with author, text, likes, and publication timestamp"},{"name":"get_instagram_comments","displayName":"Get Instagram Comments","description":"Retrieve comments and replies on an Instagram post or reel including author details, likes, and timestamps.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post or video to retrieve comments from"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get comments on an Instagram post","input":{"url":"https://www.instagram.com/p/CzR1V8xLq7M/"}}],"pricing":"paid","returns":"Array of comments with author, text, likes, replies, and timestamps"},{"name":"get_facebook_comments","displayName":"Get Facebook Comments","description":"Retrieve comments and replies on a Facebook post including author details, reactions, and timestamps.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post or video to retrieve comments from"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get comments on a Facebook post","input":{"url":"https://www.facebook.com/Meta/posts/pfbid02kXvZR7tPqYGdRNmkA"}}],"pricing":"paid","returns":"Array of comments with author, text, reactions, replies, and timestamps"},{"name":"get_reddit_comments","displayName":"Get Reddit Comments","description":"Retrieve comments and replies on a Reddit post including author details, upvotes, and timestamps.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the post or video to retrieve comments from"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get comments on a Reddit post","input":{"url":"https://www.reddit.com/r/programming/comments/1a2b3c4/example_post_title/"}}],"pricing":"paid","returns":"Array of comments with author, text, upvotes, replies, and timestamps"}],"icon":"/icons/social-media-comments.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-03","changes":["Added skills to fetch replies to specific TikTok and YouTube comments"]}],"premadePrompt":"Fetch the comments on this [platform] post: [URL]. Summarise the overall sentiment and highlight the most-liked reactions.","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}]},{"name":"social-shop-products","displayName":"Social Shop Products","subtitle":"Browse creator storefronts & shops","about":"**Social Shop Products** lets you browse creator commerce — TikTok Shop product listings, Amazon storefronts, and link hubs like Linktree, Komi, Pillar, Linkbio, and Linkme. Use it for product research, affiliate discovery, and understanding what creators are selling.\n\nThe social commerce space is huge and fragmented. This tool pulls it together — search TikTok Shop for products, look up what's in any Amazon storefront, read customer reviews, and extract every link from a creator's link-in-bio page.\n\n### What you can do\n- Search TikTok Shop for products by keyword — get prices, ratings, and seller info\n- Get full product details from any TikTok Shop listing\n- List all products from a TikTok Shop storefront by URL\n- Read customer reviews for any TikTok Shop product\n- Browse products from any Amazon storefront URL\n- Extract all links from Linktree, Komi, Pillar, Linkbio, and Linkme pages\n\n### Who it's for\nE-commerce researchers tracking what's selling on TikTok Shop. Affiliate marketers discovering what products creators promote. Brands doing competitive research on creator storefronts. Anyone who needs to understand the product and link landscape around specific creators or niches.\n\n### How to use it\n1. Use **search_tiktok_shop** to find products by keyword, then **get_tiktok_product** for full details on any listing\n2. Use **get_tiktok_shop_products** with a shop URL to list everything in a specific storefront\n3. Use **get_tiktok_shop_reviews** with a product ID or URL to see customer feedback\n4. Use **get_amazon_shop** with an Amazon storefront URL to list a creator's recommended products\n5. Use **get_linktree_page** or the equivalent for other link hubs to extract all linked products and resources\n\n### Getting started\nConnect your social data account to enable shop and storefront access — then search by product keyword or pass any storefront URL.","version":"0.03","categories":["data","analytics"],"currency":"USD","skills":[{"name":"search_tiktok_shop","displayName":"Search TikTok Shop","description":"Search TikTok Shop for products matching a query and return structured product listings with prices, ratings, and seller info.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Product search query for TikTok Shop"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for trending beauty products","input":{"query":"viral skincare serum"}}],"pricing":"paid","returns":"Array of TikTok Shop product listings with titles, prices, ratings, and seller details"},{"name":"get_tiktok_shop_reviews","displayName":"Get TikTok Shop Reviews","description":"Get reviews for a TikTok Shop product. Accepts either a product ID or a full product URL to retrieve customer reviews.","inputSchema":{"type":"object","properties":{"product_id":{"type":"string","description":"TikTok Shop product ID"},"url":{"type":"string","description":"Full URL of the TikTok Shop product page"}},"required":[]},"annotations":{},"examples":[{"description":"Get reviews by product URL","input":{"url":"https://www.tiktok.com/@shop/product/1729382456"}}],"pricing":"paid","returns":"Array of customer reviews with ratings, text, author info, and dates"},{"name":"get_linktree_page","displayName":"Get Linktree Page","description":"Get all links, bio info, and social accounts from a Linktree page. URL must include https:// prefix.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full Linktree URL including https:// (e.g. https://linktr.ee/username)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract links from a creator Linktree","input":{"url":"https://linktr.ee/garyvee"}}],"pricing":"paid","returns":"Linktree page data with bio, avatar, and array of links with titles and URLs"},{"name":"get_amazon_shop","displayName":"Get Amazon Shop","description":"Get product details, listings, and storefront info from an Amazon shop page URL.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the Amazon shop or storefront page"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get products from an Amazon storefront","input":{"url":"https://www.amazon.com/stores/page/B08N5WRWNW"}}],"pricing":"paid","returns":"Amazon shop page data with product listings, prices, ratings, and storefront details"},{"name":"get_tiktok_product","displayName":"Get TikTok Product Details","description":"Get detailed information about a TikTok Shop product including exact stock count, related TikTok videos, pricing, and seller info.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the TikTok Shop product page"},"get_related_videos":{"type":"boolean","description":"Also fetch related TikTok videos for this product"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get TikTok product details","input":{"url":"https://www.tiktok.com/@shop/product/1729382456"}}],"pricing":"paid","returns":"TikTok product details with stock count, pricing, seller info, ratings, and optionally related videos"},{"name":"get_tiktok_shop_products","displayName":"Get TikTok Shop Products","description":"Get all products from a TikTok Shop by shop URL. Supports pagination via cursor.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the TikTok Shop page"},"cursor":{"type":"string","description":"Pagination cursor from previous response"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get products from a TikTok Shop","input":{"url":"https://www.tiktok.com/@brand/shop"}}],"pricing":"paid","returns":"Array of TikTok Shop products with titles, prices, ratings, and pagination cursor"},{"name":"get_komi_page","displayName":"Get Komi Page","description":"Get all links, bio info, and social accounts from a Komi creator link page.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full Komi page URL (e.g. https://komi.io/username)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract links from a Komi page","input":{"url":"https://komi.io/creator"}}],"pricing":"paid","returns":"Komi page data with bio, avatar, and array of links with titles and URLs"},{"name":"get_pillar_page","displayName":"Get Pillar Page","description":"Get all links, bio info, and social accounts from a Pillar creator link page.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full Pillar page URL"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract links from a Pillar page","input":{"url":"https://pillar.io/creator"}}],"pricing":"paid","returns":"Pillar page data with bio, avatar, and array of links with titles and URLs"},{"name":"get_linkbio_page","displayName":"Get Linkbio Page","description":"Get all links, bio info, and social accounts from a Linkbio (lnk.bio) creator link page.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full Linkbio URL (e.g. https://lnk.bio/username)"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract links from a Linkbio page","input":{"url":"https://lnk.bio/creator"}}],"pricing":"paid","returns":"Linkbio page data with bio, avatar, and array of links with titles and URLs"},{"name":"get_linkme_page","displayName":"Get Linkme Page","description":"Get profile info and links from a Linkme creator page.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full Linkme page URL"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract links from a Linkme page","input":{"url":"https://linkme.bio/creator"}}],"pricing":"paid","returns":"Linkme page data with profile info and array of links"},{"name":"get_tiktok_showcase","displayName":"Get TikTok Creator Showcase","description":"Get the product showcase for a TikTok creator — the products they are actively promoting or affiliated with. Supports pagination.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"TikTok creator username without the @ symbol"},"region":{"type":"string","description":"Region code for localised pricing and availability (e.g. US, GB)"},"cursor":{"type":"string","description":"Pagination cursor from a previous response to fetch the next page"}},"required":["handle"]},"annotations":{},"examples":[{"description":"Get showcase products for a TikTok creator","input":{"handle":"mrtiktokreviews"}},{"description":"Get showcase products with region filter","input":{"handle":"mrtiktokreviews","region":"US"}}],"pricing":"paid","returns":"Array of showcase products with title, price, rating, sold count, and product URL"}],"icon":"/icons/social-shop-products.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-03","changes":["Added TikTok creator showcase skill"]}],"premadePrompt":"Search for [product] on TikTok Shop and show me the top listings with prices and ratings. What are customers saying in the reviews?","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}]},{"name":"social-reader","displayName":"Social Reader","subtitle":"Read any social media URL, profile, or feed","about":"**Social Reader** reads any social media URL, profile, or feed — auto-detecting the platform and returning structured content. Paste a TikTok video, a Reddit thread, an Instagram post, or any web page, and get back clean, structured data without building platform-specific logic.\n\nIt covers 14 platforms plus RSS feeds and general web pages. For agents that need to read social content as part of a broader workflow, this is the single entry point — one skill, any URL.\n\n### What you can do\n- Read any social media URL and get structured content with auto-detected platform\n- Look up profiles by handle on TikTok, Instagram, YouTube, Twitter/X, Facebook, and more\n- Fetch recent posts from any creator by handle and platform\n- Pull comments from any post URL\n- Search posts across a single platform or multiple at once\n- Get trending content on TikTok and YouTube\n- Read any RSS or Atom feed as structured items\n- Read any web page as clean markdown\n\n### Who it's for\nAgents that need to read social content as part of automated workflows. Researchers who want a single interface across platforms. Anyone building tools that ingest social media data and don't want to maintain platform-specific fetching logic.\n\n### How to use it\n1. For any social URL, use **read_url** — it auto-detects the platform and returns structured data\n2. For profile lookups, use **read_profile** with a handle and platform name\n3. For a creator's recent content, use **read_posts** with a handle and optional content type filter\n4. For comment threads, use **read_comments** with the post URL\n5. For web pages or RSS feeds, use **read_webpage** or **read_feed**\n\n### Getting started\nConnect your social data account to enable platform reads — then pass any URL to read_url and it handles the rest.","version":"0.01","categories":["data","search"],"currency":"USD","skills":[{"name":"read_url","displayName":"Read URL","description":"Paste any social media URL — auto-detects the platform and content type and returns structured data. Falls back to clean markdown for unrecognized URLs.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL to read"}},"required":["url"]},"annotations":{},"examples":[{"description":"Read a tweet","input":{"url":"https://x.com/elonmusk/status/1585841080431321088"}},{"description":"Read a TikTok video","input":{"url":"https://www.tiktok.com/@charlidamelio/video/7140382169013624110"}},{"description":"Read a Reddit post","input":{"url":"https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"}},{"description":"Read any web page","input":{"url":"https://paulgraham.com/greatwork.html"}}],"pricing":"paid","returns":"Structured content from the detected platform, or clean markdown for web pages. Includes detected_platform and detected_type metadata."},{"name":"read_profile","displayName":"Read Profile","description":"Get profile data for any social media account by username and platform. Returns bio, follower counts, engagement metrics, and profile details.","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username or handle (without @ prefix)"},"platform":{"type":"string","description":"Platform: tiktok, instagram, youtube, twitter, linkedin, facebook, reddit, threads, bluesky, truthsocial, snapchat, twitch","enum":["tiktok","instagram","youtube","twitter","linkedin","facebook","reddit","threads","bluesky","truthsocial","snapchat","twitch"]}},"required":["handle","platform"]},"annotations":{},"examples":[{"description":"Get a TikTok profile","input":{"handle":"charlidamelio","platform":"tiktok"}},{"description":"Get a Twitter profile","input":{"handle":"elonmusk","platform":"twitter"}},{"description":"Get subreddit info","input":{"handle":"technology","platform":"reddit"}}],"pricing":"paid","returns":"Profile data including bio, follower/following counts, engagement metrics, and profile media"},{"name":"read_posts","displayName":"Read Posts","description":"Get recent posts from any social media account. Supports content type filtering: Instagram (posts, reels, highlights), YouTube (videos, shorts), Facebook (posts, reels, photos).","inputSchema":{"type":"object","properties":{"handle":{"type":"string","description":"Username, handle, or identifier"},"platform":{"type":"string","description":"Platform","enum":["tiktok","instagram","youtube","twitter","facebook","linkedin","threads","bluesky","truthsocial","reddit","pinterest"]},"content_type":{"type":"string","description":"Content type filter. Instagram: posts, reels, highlights. YouTube: videos, shorts. Facebook: posts, reels, photos."}},"required":["handle","platform"]},"annotations":{},"examples":[{"description":"Get Instagram posts","input":{"handle":"natgeo","platform":"instagram"}},{"description":"Get Instagram reels","input":{"handle":"natgeo","platform":"instagram","content_type":"reels"}},{"description":"Get YouTube shorts","input":{"handle":"mkbhd","platform":"youtube","content_type":"shorts"}}],"pricing":"paid","returns":"Array of posts with captions, engagement metrics, media URLs, and timestamps"},{"name":"read_comments","displayName":"Read Comments","description":"Get the comment thread for any post URL. Supports TikTok, YouTube, Instagram, Facebook, Reddit, Twitter, and Threads.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL to read"}},"required":["url"]},"annotations":{},"examples":[{"description":"Get comments on a YouTube video","input":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{"description":"Get Reddit post comments","input":{"url":"https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"}}],"pricing":"paid","returns":"Comments with author info, text, likes/upvotes, timestamps, and nested replies"},{"name":"search_posts","displayName":"Search Posts","description":"Search for content across social platforms. Specify a platform for focused search, or omit to search TikTok, YouTube, Twitter, and Reddit simultaneously.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"platform":{"type":"string","description":"Limit to one platform. Omit for multi-platform search.","enum":["tiktok","youtube","twitter","reddit","pinterest","instagram"]},"search_type":{"type":"string","description":"Type of search: posts (default), users, hashtags.","enum":["posts","users","hashtags"]}},"required":["query"]},"annotations":{},"examples":[{"description":"Search TikTok for cooking videos","input":{"query":"cooking tips","platform":"tiktok"}},{"description":"Search everywhere for AI news","input":{"query":"artificial intelligence"}},{"description":"Find TikTok users","input":{"query":"fitness","platform":"tiktok","search_type":"users"}}],"pricing":"paid","returns":"Search results with content, authors, and engagement metrics. Multi-platform search returns results grouped by platform."},{"name":"get_trending","displayName":"Get Trending","description":"Get trending content. TikTok: videos, songs, hashtags, creators, or For You feed. YouTube: trending Shorts.","inputSchema":{"type":"object","properties":{"platform":{"type":"string","description":"Platform: tiktok or youtube","enum":["tiktok","youtube"]},"trending_type":{"type":"string","description":"TikTok: videos, songs, hashtags, creators, feed. YouTube: shorts."},"country":{"type":"string","description":"ISO country code (e.g. US, GB)"},"period":{"type":"string","description":"Time period in days: 1, 7, or 30"}},"required":["platform"]},"annotations":{},"examples":[{"description":"Get trending TikTok videos","input":{"platform":"tiktok"}},{"description":"Get trending TikTok songs in the US","input":{"platform":"tiktok","trending_type":"songs","country":"US"}}],"pricing":"paid","returns":"Trending content with engagement metrics, sorted by popularity"},{"name":"read_feed","displayName":"Read Feed","description":"Parse any RSS or Atom feed URL. Returns structured feed items with titles, links, descriptions, dates, and authors.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"RSS or Atom feed URL"}},"required":["url"]},"annotations":{},"examples":[{"description":"Read Hacker News RSS","input":{"url":"https://hnrss.org/frontpage"}},{"description":"Read a technology news feed","input":{"url":"https://feeds.arstechnica.com/arstechnica/index"}}],"pricing":"free","returns":"Feed metadata and array of items with title, link, description, published date, and author"},{"name":"read_webpage","displayName":"Read Webpage","description":"Read any web page as clean markdown text. Strips navigation, ads, and boilerplate to extract the main content.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full URL of the web page to read"}},"required":["url"]},"annotations":{},"examples":[{"description":"Read a blog post","input":{"url":"https://paulgraham.com/greatwork.html"}},{"description":"Read a news article","input":{"url":"https://techcrunch.com/2024/01/16/apple-vision-pro-review/"}}],"pricing":"free","returns":"Clean markdown text of the main page content"}],"icon":"/icons/social-reader.webp","changelog":[{"version":"0.01","date":"2026-03-30","changes":["Initial release with 8 skills: read_url, read_profile, read_posts, read_comments, search_posts, get_trending, read_feed, read_webpage"]}],"premadePrompt":"Read this post and show me the comments: [URL]. What are people saying about it?","requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"}]},{"name":"brand-extract","displayName":"Brand Extract","subtitle":"Colors, fonts, and visual identity","about":"**Brand Extract** crawls any website and returns a complete brand profile — color palette, typography, spacing, component styles, logos, icons, animations, layout patterns, and personality traits. It gives you a structured, machine-readable picture of a brand's visual identity in one call.\n\nDesigners use it to reverse-engineer a visual style before replicating it. Marketers use it to audit competitors and understand how their visual language differs. Developers use it to extract design tokens from live sites without manual inspection. The returned profile is broken into nested sections so you can query exactly what you need.\n\n### What you can do\n- Extract color palettes including primary, secondary, accent, background, and text roles\n- Pull font families and typography scale from any live website\n- Capture spacing, layout patterns, and component styles\n- Identify logos, icons, and animation characteristics\n- Get brand personality descriptors based on visual language analysis\n\n### Who it's for\nDesigners replicating or drawing inspiration from an existing visual style. Marketing teams auditing competitor brand positioning. Developers extracting design tokens from live sites for use in build systems. Brand strategists doing visual research across multiple companies.\n\n### How to use it\n1. Call **extract_brand** with the URL you want to analyze — the homepage is usually the best starting point\n2. Check the colorScheme and colors sections for palette roles and hex values\n3. Look at fonts for typeface names and personality for tone descriptors\n4. For competitive research, run **extract_brand** on multiple URLs and compare the resulting profiles\n\n### Getting started\nPass any website URL to **extract_brand** — it works on any publicly accessible page with no configuration.","version":"0.02","categories":["data","marketing"],"currency":"USD","skills":[{"name":"extract_brand","displayName":"Extract Brand","description":"Crawl a website and extract its complete brand profile including color scheme, typography, spacing, component styles, logos, icons, animations, layout, and brand personality.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the website to extract brand information from"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract brand profile from a website","input":{"url":"https://stripe.com"}},{"description":"Extract brand from a SaaS landing page","input":{"url":"https://linear.app"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL that was analyzed"},"branding":{"type":"object","description":"Complete brand profile: colorScheme, logo, colors, fonts, typography, spacing, components, icons, images, animations, layout, personality"},"metadata":{"type":"object","description":"Page metadata including title and source URL"},"timestamp":{"type":"string","description":"ISO timestamp of the extraction"}}},"returns":"Complete brand profile with colors, fonts, typography, spacing, component styles, logos, animations, layout, and personality traits"}],"icon":"/icons/brand-extract.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Extract the brand identity from [website URL] — I want to see the color palette, fonts, and overall visual style. I'm trying to replicate this design for a new project.","brain":{"instructions":"When brain knowledge is available:\n  - Compare extracted brand elements against known brand guidelines\n  - Reference existing brand assets for consistency validation\n  - Contextualise brand extraction with known market positioning","produces":["brand_insights"]},"requirements":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}],"credentials":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}]},{"name":"brand-mentions-ai","displayName":"Brand Mentions AI","subtitle":"Monitor how AI chatbots talk about your brand","about":"**Brand Mentions AI** shows you how ChatGPT, Claude, Gemini, and Perplexity answer questions about your brand — with web search enabled, exactly as real users experience it. You see the sentiment, how your brand is framed, and which competitors are being recommended instead of you.\n\nAI chatbots are becoming a primary way people discover products and businesses. If your brand isn't showing up or is being misrepresented, that's a visibility problem you can't fix without first seeing it. This tool queries multiple AI models with brand-relevant prompts and returns a structured report on mentions, framing, tone, and competitive positioning.\n\n### What you can do\n- Query ChatGPT, Claude, Gemini, and Perplexity with brand-specific prompts and see each model's response\n- Get a structured report on sentiment, framing, and how your brand compares to competitors\n- Check specific recommendation queries like \"best CRM software\" to see if your brand is included\n- Use custom queries to test specific narratives or categories\n\n### Who it's for\nBrand managers and PR teams monitoring how AI chatbots represent their company. Marketing teams benchmarking competitive positioning in AI-generated recommendations. Founders understanding whether AI assistants are directing potential customers toward or away from them.\n\n### How to use it\n1. Call **monitor** with your brand name and industry — it queries all four AI models and returns a full sentiment and framing report\n2. Use **check_recommendations** for focused queries like \"best tools for [category]\" to test whether your brand gets recommended\n3. Review competitor mentions in the report to understand how your brand is positioned relative to alternatives\n\n### Getting started\n**monitor** auto-generates brand-specific queries if you don't provide custom ones — just pass your brand name and industry to get started.","version":"0.01","categories":["marketing","analytics"],"currency":"USD","skills":[{"name":"monitor","displayName":"Monitor Brand Mentions","description":"Query ChatGPT, Claude, and Gemini to check how each AI model talks about your brand. Returns mentions, sentiment, framing, and competitor comparisons. ⏱ 30-60s async — returns job_id, poll with get_job_result.","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Your brand or company name to monitor (e.g. \"Notion\", \"Acme Corp\")"},"industry":{"type":"string","description":"Industry or category for context (e.g. \"project management\", \"CRM software\")"},"queries":{"type":"array","items":{"type":"string"},"description":"Optional custom queries to ask AI models. If omitted, auto-generates brand-specific queries."},"models":{"type":"array","items":{"type":"string","enum":["chatgpt","claude","gemini","perplexity"]},"description":"Which AI models to query. Defaults to all four. Perplexity is skipped if no key is configured."}},"required":["brand"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Monitor how AI models talk about Notion","input":{"brand":"Notion","industry":"project management"}},{"description":"Check brand mentions with custom queries","input":{"brand":"Stripe","industry":"payment processing","queries":["what is the best payment gateway","Stripe review","Stripe vs competitors"]}},{"description":"Monitor across specific models only","input":{"brand":"Figma","industry":"design tools","models":["chatgpt","claude"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Brand name monitored"},"models_queried":{"type":"array","items":{"type":"string"},"description":"AI models queried"},"overall_mention_rate":{"type":"number","description":"Percentage of queries where the brand was mentioned"},"overall_sentiment":{"type":"string","description":"Aggregate sentiment: positive, neutral, negative, or mixed"},"overall_sentiment_score":{"type":"number","description":"Sentiment score 0-100"},"per_model":{"type":"array","items":{"type":"object","properties":{"model":{"type":"string","description":"AI model name"},"mention_rate":{"type":"number","description":"Mention rate for this model"},"sentiment":{"type":"string","description":"Sentiment for this model"},"framing":{"type":"string","description":"How this model frames the brand"}}}},"competitors_mentioned":{"type":"array","items":{"type":"object"},"description":"Competitors mentioned alongside or instead of the brand"},"recommendations":{"type":"array","items":{"type":"string"},"description":"Actionable recommendations"}}},"returns":"Comprehensive brand mention report across AI models with sentiment, framing, competitors, and recommendations"},{"name":"check_recommendations","displayName":"Check AI Recommendations","description":"Ask AI models \"best X\" queries for your industry and check if your brand gets recommended. Shows rank, who gets recommended instead, and competitive positioning. ⏱ 20-40s async — returns job_id, poll with get_job_result.","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Your brand or company name (e.g. \"Slack\", \"Mailchimp\")"},"category":{"type":"string","description":"Product category for recommendation queries (e.g. \"team messaging app\", \"email marketing platform\")"},"queries":{"type":"array","items":{"type":"string"},"description":"Optional custom recommendation queries. If omitted, auto-generates \"best X\" queries from category."},"models":{"type":"array","items":{"type":"string","enum":["chatgpt","claude","gemini","perplexity"]},"description":"Which AI models to query. Defaults to all three."}},"required":["brand","category"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Check if Slack gets recommended as a messaging app","input":{"brand":"Slack","category":"team messaging app"}},{"description":"Check recommendations with custom queries","input":{"brand":"Mailchimp","category":"email marketing","queries":["best email marketing platform for small business","top email marketing tools 2026"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Brand checked"},"category":{"type":"string","description":"Category queried"},"recommended_rate":{"type":"number","description":"Percentage of queries where brand was recommended"},"per_model":{"type":"array","items":{"type":"object"},"description":"Per-model recommendation results"},"top_recommended":{"type":"array","items":{"type":"object"},"description":"Most-recommended brands across models"}}},"returns":"Recommendation analysis showing if and where your brand gets recommended by AI models"}],"workflow":["monitor","check_recommendations"],"icon":"/icons/brand-mentions-ai.webp","changelog":[{"version":"0.01","date":"2026-03-29","changes":["Initial release — monitor brand mentions across ChatGPT, Claude, and Gemini"]}],"premadePrompt":"Check what AI chatbots like ChatGPT and Claude are saying about [brand name] in the [industry] space. I want to know the sentiment, how we're being framed, and which competitors are being recommended instead.","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"perplexity","type":"secret","displayName":"Perplexity API Key","description":"Optional: use your own Perplexity key instead of the platform default","envFallback":"PERPLEXITY_API_KEY","acquireUrl":"https://www.perplexity.ai/settings/api"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"perplexity","type":"secret","displayName":"Perplexity API Key","description":"Optional: use your own Perplexity key instead of the platform default","envFallback":"PERPLEXITY_API_KEY","acquireUrl":"https://www.perplexity.ai/settings/api"}]},{"name":"ugc-video-turbo","displayName":"UGC Video Turbo","subtitle":"UGC videos with face-reference lip-sync","about":"**UGC Video Turbo** generates authentic UGC-style videos with real face references, native voice synthesis, and ambient audio — all from a single persona headshot. Drop in a real photo and get back clips where the character speaks in a natural voice with consistent face across every scene.\n\nUnlike standard video generation tools, Turbo accepts real person photos as the face reference with no blocking. The voice is generated natively in each clip, steered by persona tone and accent settings in the prompt — no separate TTS pass, no dubbed audio, no lip-sync mismatches. The result sounds and looks like real iPhone UGC footage, not AI-generated video.\n\n### What you can do\n- **research_audience** — deep audience research: pain points, emotional triggers, language patterns, objections\n- **plan_bias_stack** — optional pre-planning step: maps psychological mechanisms (information gap, empathy gap, zeigarnik effect, etc.) to each section of the script before writing\n- **generate_creative** — hooks, scripts, and scenes in one fast call with ugc_style direction\n- **generate_frames** — first-frame images with real persona face reference and product compositing\n- **generate_videos** — animate frames via face-reference synthesis with native voice and ambient audio\n- **composite_product** — insert a real product image into frames before video generation\n- **regenerate_frame** — fix a single weak frame without re-running the pipeline\n- **assemble_final** — stitch clips into a finished video with transitions\n- **check_video** / **check_image** — poll for pending generation jobs\n\n### Who it's for\nDTC brands, performance marketers, and agencies who need character-consistent UGC video with real-looking faces and natural-sounding speech — not dubbed AI voices over animated avatars.\n\n### How to use it\n1. Start with **research_audience** — pass company name, product name, and description\n2. Run **generate_creative** with the full research output and ugc_style — review before proceeding\n3. Call **generate_frames** with a real persona headshot as persona_image_url for face consistency\n4. Run **generate_videos** — Turbo passes your headshot as a face reference so the character looks consistent across clips (takes 2–10 minutes)\n5. Finish with **assemble_final** to produce the completed video\n\n### Getting started\nConnect your MuAPI account to enable Turbo video generation. Upload persona, scene, product, and outfit assets to your file library for best results.","version":"0.07","categories":["media","marketing","ai"],"currency":"USD","skills":[{"name":"research_audience","displayName":"Research Audience","description":"Step 1: Research audience pain points, language, triggers, and objections. Async (1-3 min). Do NOT skip. Pass full output to generate_creative.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company or brand name"},"product_name":{"type":"string","description":"Product or feature name"},"product_description":{"type":"string","description":"Detailed description of the product and what it does"},"target_audience":{"type":"string","description":"Optional target audience description"},"processor":{"type":"string","enum":["lite","base","core","pro"],"default":"core","description":"Research depth: \"core\" (default, 1-3 min) or \"pro\" (deeper, 5-15 min)"},"source_domains":{"type":"array","items":{"type":"string"},"description":"Optional domains to focus research on"}},"required":["company_name","product_name","product_description"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":900,"mode":"io"}},"examples":[{"description":"Research audience for an AI meal planning app","input":{"company_name":"NutriPlan","product_name":"MealAI","product_description":"AI-powered meal planning app that creates personalized weekly meal plans based on dietary preferences, budget, and schedule"}}],"pricing":"paid","returns":"Structured audience research with pain points, problems, language patterns, emotional triggers, objections, and research summary"},{"name":"write_hooks","displayName":"Write Hooks","description":"Generate UGC video hooks using the 3-variable framework (Angle + Aesthetic + Action). Uses RAG from the UGC playbook. ⏱ ~5 seconds. Requires research output from step 1.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company or brand name"},"product_name":{"type":"string","description":"Product or feature name"},"product_description":{"type":"string","description":"Detailed product description"},"research":{"type":"object","description":"Audience research output from research_audience step"},"num_hooks":{"type":"number","default":1,"description":"Number of hooks to generate (default: 1)"},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype to tailor hooks to"},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Persona name"},"description":{"type":"string","description":"Persona description"},"tone":{"type":"string","description":"Voice tone"},"style":{"type":"string","description":"Content style"}},"description":"Optional creator persona for hook voice/style"},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["company_name","product_name","product_description","research"]},"annotations":{},"examples":[{"description":"Generate 1 hook from research","input":{"company_name":"NutriPlan","product_name":"MealAI","product_description":"AI-powered meal planning app","research":{"pain_points":["spending too much time deciding what to cook"],"emotional_triggers":["overwhelm","guilt"]},"num_hooks":1}}],"pricing":"paid","returns":"Array of hooks, each with text, angle, aesthetic, action, emotional trigger, and target pain point"},{"name":"write_scripts","displayName":"Write Scripts","description":"Generate authentic UGC scripts using But/Therefore zigzag structure. ⏱ 5-10s per hook. Requires hooks from write_hooks.","inputSchema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"object"},"description":"Array of hooks from write_hooks step"},"company_name":{"type":"string","description":"Company or brand name"},"product_name":{"type":"string","description":"Product or feature name"},"product_description":{"type":"string","description":"Detailed product description"},"research":{"type":"object","description":"Audience research output from research_audience step"},"scripts_per_hook":{"type":"number","default":1,"description":"Number of script variations per hook (default: 1)"},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype"},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Persona name"},"description":{"type":"string","description":"Persona description"},"tone":{"type":"string","description":"Voice tone"},"style":{"type":"string","description":"Content style"}},"description":"Optional creator persona"},"llm_model":{"type":"string","description":"OpenRouter model ID"}},"required":["hooks","company_name","product_name","product_description","research"]},"annotations":{},"examples":[{"description":"Generate 1 script per hook","input":{"hooks":[{"id":"hook_1","text":"I used to spend 2 hours deciding what to cook","angle":"time-waste","aesthetic":"selfie-rant","action":"frustrated-face"}],"company_name":"NutriPlan","product_name":"MealAI","product_description":"AI-powered meal planning app","research":{"pain_points":["decision fatigue around meals"]},"scripts_per_hook":1}}],"pricing":"paid","returns":"Array of scripts, each with hook_id, variation, hook_text, script_body, CTA, duration estimate, and mini-hooks at drop-off timestamps"},{"name":"generate_scenes","displayName":"Generate Scenes","description":"Generate visual scene descriptions for each script, optimized for AI image/video generation. Set \"format\" for format-specific direction. Takes ~5s per script.","inputSchema":{"type":"object","properties":{"scripts":{"type":"array","items":{"type":"object"},"description":"Array of scripts from write_scripts step"},"format":{"type":"string","enum":["talking_to_camera","product_demo","product_showcase","grwm","unboxing","before_after","problem_solution","storytime","pov","voiceover_broll","reaction"],"description":"UGC video format for format-specific scene direction"},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Persona name"},"description":{"type":"string","description":"Persona visual description"},"appearance":{"type":"string","description":"Detailed physical appearance"},"tone":{"type":"string","description":"Voice tone"},"style":{"type":"string","description":"Content style"}},"description":"Optional creator persona"},"familiar_elements":{"type":"object","properties":{"location":{"type":"string","description":"Recurring location"},"wardrobe":{"type":"string","description":"Recurring wardrobe element"},"camera_angle":{"type":"string","description":"Recurring camera angle"},"opening_line":{"type":"string","description":"Recurring opening phrase"},"visual_motif":{"type":"string","description":"Recurring visual element"}},"description":"Repetitive brand elements for memorability"},"wardrobe_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform for framing guidance"},"ugc_style":{"type":"string","enum":["hand-held","outfit-showcase","mirror-selfie","grwm","unboxing","walk-and-talk","custom"],"description":"Filming style — hand-held, outfit-showcase, mirror-selfie, grwm, unboxing, walk-and-talk, or custom. Drives camera setup and motion."},"custom_style":{"type":"object","description":"Required when ugc_style is \"custom\". Pass this object to every pipeline step.","properties":{"camera_prompt":{"type":"string","description":"Camera position, phone handling, and sensor look for frame generation"},"scene_direction":{"type":"string","description":"Shot format and framing constraints for scene writing"},"video_prompt":{"type":"string","description":"Camera movement and motion direction for Seedance video generation"},"stationary_camera":{"type":"boolean","description":"true = camera propped stationary (default false = handheld)"},"phone_visible":{"type":"boolean","description":"true = phone intentionally visible in frame (default false)"},"add_closing_shot":{"type":"boolean","description":"true = closing shot where person reaches to stop recording (default false)"}},"required":["camera_prompt","scene_direction","video_prompt"]},"llm_model":{"type":"string","description":"OpenRouter model ID"}},"required":["scripts","ugc_style"]},"annotations":{},"examples":[{"description":"Generate scenes for scripts","input":{"scripts":[{"hook_id":"hook_1","hook_text":"I used to spend 2 hours deciding what to cook","script_body":"But then I found this app that plans my whole week in 30 seconds.","cta":"Link in bio"}],"ugc_style":"hand-held"}}],"pricing":"paid","returns":"Array of scenes, each with scene description, setting, lighting, wardrobe, camera angle, mood, and shot list with visual changes"},{"name":"plan_bias_stack","displayName":"Plan Bias Stack","description":"Step 1.5 (optional but recommended): Map psychological mechanisms to each video section before writing scripts. Fast (~5s). Pass full research_audience output and receive a bias_stack to pass to generate_creative.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company or brand name"},"product_name":{"type":"string","description":"Product or feature name"},"product_description":{"type":"string","description":"Detailed product description"},"research":{"type":"object","description":"Full output from research_audience — must have at least one of pain_points, language_patterns, research_summary"},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype — influences mechanism selection"},"format":{"type":"string","description":"UGC format slug — used to flag mechanically incompatible biases (e.g. Pratfall Effect does not work in product_flat_lay)"},"video_length_seconds":{"type":"number","default":30,"description":"Estimated video length in seconds. Flags mechanisms that cannot execute in the available time."},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["company_name","product_name","product_description","research"]},"annotations":{},"examples":[{"description":"Plan bias stack for a skincare product","input":{"company_name":"GlowLab","product_name":"Retinol Night Serum","product_description":"Fast-acting retinol serum for reducing fine lines, used nightly","research":{"pain_points":["breaking out despite careful skincare"],"language_patterns":["my skin was doing the most","I've tried everything"],"emotional_triggers":["embarrassment","frustration"]}}}],"pricing":"paid","returns":"bias_stack with hook/pain/mechanism_bridge/transformation/cta plans, execution_order, incompatibility_warnings, research_quality_warnings. Pass to generate_creative."},{"name":"generate_creative","displayName":"Generate Creative (Fast)","description":"Generate hooks, scripts, and scene descriptions in one call (~8s). Set \"format\" for format-specific output. Photo formats return compositions instead of hooks/scripts. Pass FULL research output. If no preset fits, use ugc_style='custom' with custom_style.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company or brand name"},"product_name":{"type":"string","description":"Product or feature name"},"product_description":{"type":"string","description":"Detailed product description"},"research":{"type":"object","description":"Audience research output"},"format":{"type":"string","enum":["talking_to_camera","product_demo","product_showcase","grwm","unboxing","before_after","problem_solution","storytime","pov","voiceover_broll","reaction","lifestyle_still","product_flat_lay","in_use_shot","aesthetic_moment","mirror_selfie"],"description":"UGC format. Most require persona_image_url. Product formats require product_images."},"num_hooks":{"type":"number","default":1,"description":"Number of hooks (default: 1)"},"num_compositions":{"type":"number","default":1,"description":"Number of photo compositions (default: 1)"},"scripts_per_hook":{"type":"number","default":1,"description":"Script variations per hook (default: 1)"},"aspect_ratio":{"type":"string","description":"Custom aspect ratio"},"creative_direction":{"type":"string","description":"Optional script direction"},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype"},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Creator name"},"description":{"type":"string","description":"Bio"},"appearance":{"type":"string","description":"Detailed physical appearance"},"tone":{"type":"string","description":"Voice tone"},"style":{"type":"string","description":"Content style"}},"description":"Creator persona"},"persona_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"wardrobe_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"product_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform"},"familiar_elements":{"type":"object","properties":{"location":{"type":"string","description":"Recurring location"},"wardrobe":{"type":"string","description":"Recurring wardrobe element"},"camera_angle":{"type":"string","description":"Recurring camera angle"},"opening_line":{"type":"string","description":"Recurring opening phrase"},"visual_motif":{"type":"string","description":"Recurring visual element"}},"description":"Repetitive brand elements"},"ugc_style":{"type":"string","enum":["hand-held","outfit-showcase","mirror-selfie","grwm","unboxing","walk-and-talk","custom"],"description":"Filming style — hand-held, outfit-showcase, mirror-selfie, grwm, unboxing, walk-and-talk, or custom. Drives camera setup and motion."},"custom_style":{"type":"object","description":"Required when ugc_style is \"custom\". Pass this object to every pipeline step.","properties":{"camera_prompt":{"type":"string","description":"Camera position, phone handling, and sensor look for frame generation"},"scene_direction":{"type":"string","description":"Shot format and framing constraints for scene writing"},"video_prompt":{"type":"string","description":"Camera movement and motion direction for Seedance video generation"},"stationary_camera":{"type":"boolean","description":"true = camera propped stationary (default false = handheld)"},"phone_visible":{"type":"boolean","description":"true = phone intentionally visible in frame (default false)"},"add_closing_shot":{"type":"boolean","description":"true = closing shot where person reaches to stop recording (default false)"}},"required":["camera_prompt","scene_direction","video_prompt"]},"no_dialogue":{"type":"boolean","description":"true = silent video, no spoken dialogue. Skips hook/script generation. Pass to generate_videos too."},"bias_stack":{"type":"object","description":"Optional: bias_stack from plan_bias_stack. Pass directly, do not reshape. Injects per-section mechanism plans into the script prompt.","properties":{"hook":{"type":"object","description":"Hook mechanism plan (mechanism, opening_claim, tension_created)"},"pain":{"type":"object","description":"Pain section plan (mechanisms[], sequence[] with verbatim_language)"},"mechanism_bridge":{"type":"object","description":"Mechanism bridge plan (open_loop_statement, anchor_cost, transition_phrase)"},"transformation":{"type":"object","description":"Transformation plan (mechanisms[], scene, awe_element)"},"cta":{"type":"object","description":"CTA plan (mechanism, value_given)"},"research_quality_warnings":{"type":"array","items":{"type":"string"},"description":"Warnings from plan_bias_stack about thin research"}}},"llm_model":{"type":"string","description":"OpenRouter model ID"}},"required":["company_name","product_name","product_description","research","ugc_style"]},"annotations":{},"examples":[{"description":"Generate 1 hook with script and scene","input":{"company_name":"NutriPlan","product_name":"MealAI","product_description":"AI-powered meal planning app","research":{"pain_points":["decision fatigue around meals"],"emotional_triggers":["overwhelm","guilt"]},"num_hooks":1,"ugc_style":"hand-held"}}],"pricing":"paid","returns":"Video: hooks, scripts (with written_hook, hook_mechanism, hook_gap_text, vulnerability_moment, loss_statement, zeigarnik_loops), scenes arrays. Photo: compositions + scenes."},{"name":"generate_frames","displayName":"Generate First Frames","description":"Generate first-frame images from scenes. ~30s async. Pass existing_frames to skip frames that already have image_url. persona_image_url for face consistency.","inputSchema":{"type":"object","properties":{"scenes":{"type":"array","items":{"type":"object"},"description":"Array of scenes from generate_scenes"},"existing_frames":{"type":"array","items":{"type":"object","properties":{"script_index":{"type":"number","description":"Index of the script this frame belongs to"},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"scene_description":{"type":"string","description":"Scene description"}}},"description":"Optional: frames to reuse (skip regeneration)"},"persona_description":{"type":"string","description":"Visual description of the persona"},"persona_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"wardrobe_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"product_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"product_type":{"type":"string","enum":["physical","digital"],"description":"Physical products are held/shown; digital products get composited onto a device mockup first (auto-populated from product_file_id)"},"product_device":{"type":"string","enum":["iphone","macbook","auto"],"default":"auto","description":"Device for digital products. auto detects from description (app → iPhone, website → MacBook)"},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform"},"model":{"type":"string","default":"nano-banana-2","description":"Image model"},"aspect_ratio":{"type":"string","default":"9:16","description":"Image aspect ratio"},"ugc_style":{"type":"string","enum":["hand-held","outfit-showcase","mirror-selfie","grwm","unboxing","walk-and-talk","custom"],"description":"Camera and filming style — must match generate_scenes. Use 'custom' with custom_style."},"custom_style":{"type":"object","description":"Required when ugc_style is \"custom\". Pass this object to every pipeline step.","properties":{"camera_prompt":{"type":"string","description":"Camera position, phone handling, and sensor look for frame generation"},"scene_direction":{"type":"string","description":"Shot format and framing constraints for scene writing"},"video_prompt":{"type":"string","description":"Camera movement and motion direction for Seedance video generation"},"stationary_camera":{"type":"boolean","description":"true = camera propped stationary (default false = handheld)"},"phone_visible":{"type":"boolean","description":"true = phone intentionally visible in frame (default false)"},"add_closing_shot":{"type":"boolean","description":"true = closing shot where person reaches to stop recording (default false)"}},"required":["camera_prompt","scene_direction","video_prompt"]}},"required":["scenes","ugc_style"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Generate first frames from scenes","input":{"scenes":[{"script_index":0,"scene_description":"Young woman in kitchen, looking frustrated at open fridge, selfie camera angle"}],"ugc_style":"hand-held"}}],"pricing":"paid","returns":"Array of frames with image URLs and scene descriptions, plus asset paths for auto-upload"},{"name":"generate_videos","displayName":"Generate Videos (Turbo)","description":"Generate UGC video clips via MuAPI Seedance 2.0 Omni-Reference. Accepts real face photos as persona_image_url (no fal.ai face block). Takes 2-10 MINUTES. Seedance generates speech and ambient natively — voice is steered by persona.tone + persona.accent. Use check_video for pending clips.","inputSchema":{"type":"object","properties":{"frames":{"type":"array","items":{"type":"object"},"description":"Array of frames from generate_frames (objects with image_url, scene_description, script_index)"},"scripts":{"type":"array","items":{"type":"object"},"description":"Array of scripts from write_scripts"},"scenes":{"type":"array","items":{"type":"object"},"description":"Array of scenes from generate_scenes"},"persona_description":{"type":"string","description":"Visual/behavioral description of the persona"},"persona_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"persona":{"type":"object","properties":{"tone":{"type":"string","description":"Voice tone (e.g. \"casual and warm\", \"confident, slightly snarky\")"},"accent":{"type":"string","description":"Accent (e.g. \"british\", \"american\", \"australian\") — steers Seedance's native voice synth"}},"description":"Persona voice steering. tone and accent flow into the prompt to shape the generated voice."},"wardrobe_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"wardrobe_styling_direction":{"type":"string","description":"Written styling notes for the outfit (auto-populated from outfit_file_id)"},"product_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"product_type":{"type":"string","enum":["physical","digital"],"description":"Changes @Image3 prompt direction — physical: held by character; digital: shown on device screen (auto-populated from product_file_id)"},"product_device":{"type":"string","enum":["iphone","macbook","auto"],"default":"auto","description":"Device context for digital products (auto-detected from description)"},"duration":{"type":"number","description":"Optional max-duration cap per clip in seconds (4-15). Omit to auto-fit each script in one clip up to 15s — recommended."},"quality":{"type":"string","enum":["high","basic"],"default":"high","description":"Seedance quality: \"high\" ($0.30/s) or \"basic\" ($0.21/s)"},"aspect_ratio":{"type":"string","enum":["auto","21:9","16:9","4:3","1:1","3:4","9:16"],"default":"9:16","description":"Video aspect ratio"},"ugc_style":{"type":"string","enum":["hand-held","outfit-showcase","mirror-selfie","grwm","unboxing","walk-and-talk","custom"],"description":"Camera and filming style — must match generate_scenes and generate_frames. Use 'custom' with custom_style."},"custom_style":{"type":"object","description":"Required when ugc_style is \"custom\". Pass this object to every pipeline step.","properties":{"camera_prompt":{"type":"string","description":"Camera position, phone handling, and sensor look for frame generation"},"scene_direction":{"type":"string","description":"Shot format and framing constraints for scene writing"},"video_prompt":{"type":"string","description":"Camera movement and motion direction for Seedance video generation"},"stationary_camera":{"type":"boolean","description":"true = camera propped stationary (default false = handheld)"},"phone_visible":{"type":"boolean","description":"true = phone intentionally visible in frame (default false)"},"add_closing_shot":{"type":"boolean","description":"true = closing shot where person reaches to stop recording (default false)"}},"required":["camera_prompt","scene_direction","video_prompt"]},"no_dialogue":{"type":"boolean","description":"true = silent video. Omit dialogue from prompt, use 8s clip duration. Pass if generate_creative was called with no_dialogue."}},"required":["frames","scripts","scenes","ugc_style"]},"annotations":{"execution":{"estimatedSeconds":300,"timeoutSeconds":900,"mode":"io"}},"examples":[{"description":"Generate videos from frames with persona reference","input":{"frames":[{"image_url":"https://picsum.photos/id/225/1080/1920.jpg","scene_description":"Kitchen selfie scene","script_index":0}],"scripts":[{"hook_text":"I used to spend 2 hours deciding what to cook","script_body":"But then I found this app that plans my whole week in 30 seconds.","cta":"Link in bio"}],"scenes":[{"shot_list":[{"timestamp_seconds":0,"description":"Frustrated face at fridge","visual_change":"Close-up to medium shot"}],"setting":"Modern kitchen","mood":"Relatable frustration to excitement"}],"persona_image_url":"https://example.com/headshot.jpg","ugc_style":"hand-held"}}],"pricing":"paid","returns":"Array of video clips with video URLs, script indices, segment indices, and duration. Long scripts auto-split across multiple clips with continuation keyframes."},{"name":"check_video","displayName":"Check Video Status","description":"Check on a pending MuAPI video that was still generating when generate_videos returned. Pass the muapi_request_id. Returns the video URL if ready, or current status.","inputSchema":{"type":"object","properties":{"muapi_request_id":{"type":"string","description":"The request ID from pending_videos output"}},"required":["muapi_request_id"]},"annotations":{},"examples":[{"description":"Check on a pending MuAPI video","input":{"muapi_request_id":"86b4b7f8-910a-44cc-954a-8af1eb805407"}},{"description":"Poll another pending request","input":{"muapi_request_id":"abc123-def456"}}],"pricing":"free","returns":"Video URL if completed, or current status (processing/failed) with instructions"},{"name":"check_image","displayName":"Check Image Status","description":"Check on a pending image that was still generating when generate_frames timed out. Pass the fal_request_id from pending_frames.","inputSchema":{"type":"object","properties":{"fal_request_id":{"type":"string","description":"The request ID from pending_frames output"},"model_id":{"type":"string","description":"Image model ID (default: nano-banana-2)"}},"required":["fal_request_id"]},"annotations":{},"examples":[{"description":"Check on a pending frame","input":{"fal_request_id":"abc123-def456","model_id":"nano-banana-2"}}],"pricing":"free","returns":"Image URL if completed, or current status with instructions"},{"name":"regenerate_frame","displayName":"Regenerate Frame","description":"Re-generate a single frame without re-running the full pipeline. Accepts optional revision notes for targeted edits.","inputSchema":{"type":"object","properties":{"frame_index":{"type":"number","description":"Index of the frame to regenerate (0-based)"},"scenes":{"type":"array","items":{"type":"object"},"description":"Full scenes array"},"persona_description":{"type":"string","description":"Visual description of the persona"},"persona_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"wardrobe_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"revision_notes":{"type":"string","description":"What to change about this frame"},"model":{"type":"string","default":"nano-banana-2","description":"Image model"},"aspect_ratio":{"type":"string","description":"Image aspect ratio"},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform for default aspect ratio"}},"required":["frame_index","scenes"]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Regenerate frame 2 with revision notes","input":{"frame_index":2,"scenes":[{"script_index":0,"scene_description":"Kitchen selfie scene"},{"script_index":1,"scene_description":"Living room couch scene"},{"script_index":2,"scene_description":"Outdoor park scene"}],"revision_notes":"Make her smile more, change to outdoor setting"}}],"pricing":"paid","returns":"Single frame object with image URL and scene description"},{"name":"composite_product","displayName":"Composite Product","description":"Composite real product into frames. Inline chat images CANNOT be passed as URLs. Direct user to toolrouter.com/dashboard/files to upload their image.","inputSchema":{"type":"object","properties":{"frames":{"type":"array","items":{"type":"object"},"description":"Array of frames from generate_frames"},"product_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"product_name":{"type":"string","description":"Product name for the LLM placement prompt"},"product_description":{"type":"string","description":"Brief product description"},"placement_hints":{"type":"array","items":{"type":"string"},"description":"Optional per-frame placement hints"},"strength":{"type":"number","default":0.5,"description":"How much to change the frame (0.0-1.0)"}},"required":["frames","product_images","product_name"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Composite a water bottle into UGC frames","input":{"frames":[{"image_url":"https://picsum.photos/id/225/1080/1920.jpg","scene_description":"Kitchen selfie scene","script_index":0}],"product_images":["https://images.unsplash.com/photo-1602143407151-7111542de6e8?w=800"],"product_name":"HydroFlask Pro","product_description":"Insulated stainless steel water bottle, matte black","placement_hints":["holding casually in right hand"]}}],"pricing":"paid","returns":"Object with \"frames\" array (composited frames) — pass directly to generate_videos"},{"name":"assemble_final","displayName":"Assemble Final Video","description":"Stitch video clips into one final video with text overlays and transitions. Last step after generate_videos. Takes ~30-120s. Async.","inputSchema":{"type":"object","properties":{"videos":{"type":"array","items":{"type":"object"},"maxItems":20,"description":"Videos from generate_videos. Max 20 per call."},"scripts":{"type":"array","items":{"type":"object"},"description":"Scripts array for text overlays"},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform"},"transition":{"type":"string","enum":["fade","slide","flip","clock-wipe","none"],"default":"none","description":"Transition effect between clips. Default \"none\" — hard cuts for authentic UGC feel."},"transition_duration":{"type":"number","default":0.3,"description":"Transition duration in seconds (0-2)"},"captions":{"type":"boolean","default":false,"description":"Overlay hook text and CTA on video"},"style":{"type":"object","properties":{"font":{"type":"string","description":"Font family for text overlays"},"primaryColor":{"type":"string","description":"Primary accent color (hex)"},"backgroundColor":{"type":"string","description":"Background color (hex)"}},"description":"Optional style overrides"}},"required":["videos","scripts"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Assemble TikTok video from clips","input":{"videos":[{"video_url":"https://filesamples.com/samples/video/mp4/sample_640x360.mp4","script_index":0,"duration_seconds":10},{"video_url":"https://filesamples.com/samples/video/mp4/sample_640x360.mp4","script_index":1,"duration_seconds":10}],"scripts":[{"hook_text":"I used to spend 2 hours deciding what to cook","cta":"Link in bio"},{"hook_text":"But then I found this app","cta":"Link in bio"}],"platform":"tiktok"}}],"pricing":"paid","returns":"Final assembled video file (auto-uploaded via asset system)"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["research_audience","plan_bias_stack","generate_creative","generate_frames","composite_product","generate_videos","assemble_final","list_models"],"icon":"/icons/ugc-video-turbo.webp","changelog":[{"version":"0.01","date":"2026-04-13","changes":["Initial release — Seedance 2.0 Omni-Reference via MuAPI, face-reference persona images, ElevenLabs TTS lip-sync"]},{"version":"0.02","date":"2026-04-14","changes":["Renamed to UGC Video Turbo — accept scenes, products, and outfits from your file library"]},{"version":"0.03","date":"2026-04-22","changes":["Product image now composited into frames and passed as @Image3 reference to Seedance so the real product appears in every clip","Tightened iPhone front-camera sensor aesthetic — grain, highlight clipping, compressed dynamic range"]},{"version":"0.04","date":"2026-04-24","changes":["Added ugc_style — choose how the video is filmed: hand-held selfie, outfit showcase (propped camera, full body, closing shot), mirror selfie, GRWM, unboxing, or walk-and-talk. Style drives camera setup, scene direction, and video motion across the full pipeline."]},{"version":"0.05","date":"2026-04-25","changes":["Added \"custom\" ugc_style — supply your own camera_prompt, scene_direction, and video_prompt to film in any style beyond the six presets."]},{"version":"0.06","date":"2026-04-27","changes":["Added no_dialogue option — generate silent visual-only videos where the creator does not speak. Pass no_dialogue: true to generate_creative and generate_videos."]},{"version":"0.07","date":"2026-04-27","changes":["Added plan_bias_stack — optional behavioral science pre-planning step that maps psychological mechanisms (information gap, empathy gap, Zeigarnik effect, narrative transportation) to each section of the script before writing. Scripts now output a written_hook (3–8 word text overlay, readable muted) separate from the spoken hook_text."]}],"premadePrompt":"Create a UGC Turbo video for my [product name]. It's a [brief product description] aimed at [target audience]. Use my persona for the face and make it feel like authentic iPhone UGC.","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"brain":{"instructions":"When brain knowledge is available:\n    - Match the brand's voice and tone in all generated scripts and hooks\n    - Reference products accurately with correct names, prices, and features\n    - Tailor content for the target audience demographics and preferences\n    - Use style references and visual direction from brand guidelines","produces":["content_performance","audience_insights"]},"requirements":[{"name":"muapi","type":"secret","displayName":"MuAPI API Key","description":"API key for MuAPI — hosts Seedance 2.0 without face restrictions","required":true,"acquireUrl":"https://muapi.ai","envFallback":"MUAPI_API_KEY"},{"name":"parallel","type":"secret","displayName":"Parallel AI API Key","description":"Optional: use your own Parallel AI key instead of the platform default","acquireUrl":"https://parallel.ai","envFallback":"PARALLEL_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"muapi","type":"secret","displayName":"MuAPI API Key","description":"API key for MuAPI — hosts Seedance 2.0 without face restrictions","required":true,"acquireUrl":"https://muapi.ai","envFallback":"MUAPI_API_KEY"},{"name":"parallel","type":"secret","displayName":"Parallel AI API Key","description":"Optional: use your own Parallel AI key instead of the platform default","acquireUrl":"https://parallel.ai","envFallback":"PARALLEL_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"ugc-image","displayName":"UGC Image Generator","subtitle":"One-shot UGC product images","about":"**UGC Image Generator** creates one-shot UGC-style product images by composing a persona, scene, product, and optional outfit from your file library. Pick a UGC archetype and the tool builds the prompt, applies realism cues, and generates a finished image — no prompt engineering required.\n\nIt turns your creative assets into polished content-ready images that look like they were shot by a real creator. Testimonial holds up product, reviewing it with genuine expression. Unboxing catches the moment of discovery. Tutorial frames the product in use. Each archetype has its own pose, expression, framing, and composition logic built in.\n\n### What you can do\n- **list_formats** — browse all available UGC archetypes with descriptions and which reference types each format needs\n- **generate_image** — compose a single UGC-style image from persona, scene, product, and optional outfit references\n\n### Who it's for\nDTC brands, performance marketers, and social media managers who need authentic-looking product content at scale without a photo shoot. Works with any product category.\n\n### How to use it\n1. Use **list_formats** to browse available archetypes and pick the one that fits your brief\n2. Ensure you have persona, scene, and product files in your library — create them with persona-generator, scene-creator, and catalogue-scraper if not\n3. Call **generate_image** with your persona_file_id, scene_file_id, and product_file_ids plus the format you chose\n4. The tool returns an image URL and a permanent shareable page link — share the image_page link with stakeholders\n\n### Getting started\nUpload your product images and create a persona and scene first — use the persona-generator, scene-creator, and catalogue-scraper tools to build your asset library.","version":"0.01","categories":["media","marketing","ai"],"currency":"USD","skills":[{"name":"list_formats","displayName":"List UGC Formats","description":"List every UGC archetype this tool supports, with descriptions and which inputs each format expects.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"List every supported UGC format","input":{}},{"description":"Fetch the catalogue so the agent can show options to the user","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"formats":{"type":"array","description":"All available UGC photo formats.","items":{"type":"object","properties":{"slug":{"type":"string","description":"Format identifier to pass as `format` on generate_image."},"name":{"type":"string","description":"Human-friendly format name."},"description":{"type":"string","description":"What this format is for."},"default_aspect_ratio":{"type":"string","description":"Default aspect ratio for this format (e.g. 9:16, 1:1)."},"accepts_inputs":{"type":"object","description":"Which reference-image types this format works with.","properties":{"persona_image":{"type":"boolean","description":"Accepts a persona reference."},"product_image":{"type":"boolean","description":"Accepts a product reference."},"outfit_image":{"type":"boolean","description":"Accepts an outfit reference."},"scene_image":{"type":"boolean","description":"Accepts a scene reference."}}}}}},"total":{"type":"number","description":"Number of formats returned."}}},"returns":"All supported UGC photo formats with descriptions and default aspect ratios."},{"name":"generate_image","displayName":"Generate UGC Image","description":"Compose a single UGC-style image from a persona, scene, product, and optional outfit, styled as the chosen UGC archetype. Uses multi-reference image generation to keep persona and product identity consistent.","inputSchema":{"type":"object","properties":{"persona_file_id":{"type":"string","description":"REQUIRED. Persona file ID from the user's library. Create one with the `persona-generator` tool if missing."},"scene_file_id":{"type":"string","description":"REQUIRED. Scene file ID from the user's library. Create one with the `scene-creator` tool if missing."},"product_file_ids":{"type":"array","items":{"type":"string"},"description":"REQUIRED. One or more product file IDs from the user's library. Create products with the `catalogue-scraper` tool if missing.","minItems":1},"outfit_file_ids":{"type":"array","items":{"type":"string"},"description":"Optional. One or more outfit file IDs. Create outfits with the `outfit-stylist` tool."},"format":{"type":"string","description":"UGC archetype that shapes the pose, expression, and framing. Call `list_formats` to browse options.","enum":["lifestyle_still","product_flat_lay","in_use_shot","aesthetic_moment","mirror_selfie","testimonial","day_in_the_life","tutorial","review","comparison","faceless_ugc","founder_bts"],"default":"testimonial"},"aspect_ratio":{"type":"string","description":"Output aspect ratio. Defaults to the format's native ratio (usually 9:16). Common values: 9:16, 1:1, 4:5, 3:4, 16:9."}},"required":[]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":25,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Generate a testimonial UGC image for a skincare product","input":{"persona_file_id":"asset_persona_123","scene_file_id":"asset_scene_456","product_file_ids":["asset_product_789"],"format":"testimonial"}},{"description":"Generate an unboxing image with a specific outfit and 1:1 aspect ratio","input":{"persona_file_id":"asset_persona_123","scene_file_id":"asset_scene_456","product_file_ids":["asset_product_789"],"outfit_file_ids":["asset_outfit_abc"],"format":"unboxing","aspect_ratio":"1:1"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"The composed image(s). Usually one unless num_images was passed.","items":{"type":"object","properties":{"url":{"type":"string","description":"Permanent image URL."},"width":{"type":"number","description":"Image width in pixels."},"height":{"type":"number","description":"Image height in pixels."}}}},"image_path":{"type":"string","description":"Local path to the generated image — triggers framework auto-upload to Convex."},"source_images":{"type":"array","items":{"type":"string"},"description":"The reference URLs used (persona, products, outfits, scene)."},"model":{"type":"string","description":"Display name of the model used."},"model_key":{"type":"string","description":"Registry key for the model used."},"status":{"type":"string","description":"\"completed\" or \"pending\" (if the fal.ai queue was congested)."},"request_id":{"type":"string","description":"fal.ai request ID — useful for retrieval if status is \"pending\"."}}},"returns":"A composed UGC image plus permanent hosting URL and OG preview page. Show the `image_page` link to the user."},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["list_formats → generate_image","generate_image","list_models"],"icon":"/icons/ugc-image.webp","changelog":[{"version":"0.01","date":"2026-04-15","changes":["Initial release — single UGC image from persona + scene + product + optional outfit"]}],"premadePrompt":"Use ToolRouter to create a [testimonial|unboxing|tutorial] UGC image for my [product] using persona [persona_file_id] and scene [scene_file_id].","acceptsImageReferences":true,"imageReferenceSkills":["generate_image"],"imageReferencesKey":"image_urls","imageReferencesMax":4,"brain":{"instructions":"When brain knowledge is available:\n- Match brand voice and visual direction when choosing the creative format\n- Reinforce product positioning from knowledge when writing the creative direction\n- Apply colour palette and style cues from the brand kit to the prompt","produces":["content_performance","audience_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"faceless-carousels","displayName":"Faceless Carousel Generator","subtitle":"Scroll-stopping carousels, no face","about":"**Faceless Carousel Generator** creates scroll-stopping Instagram and TikTok carousel posts without you ever appearing on camera. Point at any public Instagram carousel and get it fully rebranded in your style — or pick a niche and topic and get fully generated slides in a single call.\n\nSlides are generated by GPT Image 2, producing complete layouts, typography, and imagery in one shot. No templates, no SVG, no Playwright — just high-quality rendered carousels.\n\n### What you can do\n- **create_carousel** — one-call rendered carousel from a niche/topic or an Instagram URL (fastest route, ~15-30 seconds)\n- **write_carousel** — write and design slides in one call without the research step (balanced speed/quality)\n- **research_niche** — deep research into audience pain points, trending topics, and competitor strategies\n- **write_hooks** — generate high-performing hook options for your carousel topic\n- **write_slides** — craft the per-slide copy with a clear narrative arc\n- **design_slides** — generate a detailed visual design brief for each slide\n- **generate_images** — generate slide images from design briefs using GPT Image 2\n- **export_editable** — export slides as editable SVG files for Figma or Canva\n\n### Who it's for\nContent creators, faceless page operators, social media managers, and marketers who want to produce high-quality educational or inspirational carousels at scale.\n\n### How to use it\n1. For the fastest result, call **create_carousel** with a niche/topic or an Instagram URL.\n2. For higher quality, start with **research_niche**, then follow the full pipeline through to **generate_images**.\n3. Add **export_editable** at the end if you want editable SVG files.\n\n### Getting started\nCall **create_carousel** with a niche and topic to get your first rendered carousel immediately.","version":"0.05","categories":["media","marketing","ai"],"currency":"USD","skills":[{"name":"research_niche","displayName":"Research Niche","description":"Research target niche, audience pain points, trending carousel topics, and competitor strategies using Parallel AI deep research. ⏱ Takes 5-15 minutes. Returns a job_id — poll with get_job_result until complete. Tell the user this is running and approximately how long it will take.","inputSchema":{"type":"object","properties":{"niche":{"type":"string","description":"Niche or topic area (e.g. \"personal finance for millennials\")"},"micro_niche":{"type":"string","description":"Optional micro-niche focus (e.g. \"budgeting for freelancers\")"},"target_audience":{"type":"string","description":"Target audience description (e.g. \"25-35 year old freelancers\")"},"platform":{"type":"string","enum":["instagram","tiktok","both"],"description":"Platform priority (default: instagram)"},"goals":{"type":"array","items":{"type":"string"},"description":"Content goals (e.g. [\"followers\", \"saves\", \"DMs\"])"},"competitors":{"type":"array","items":{"type":"string"},"description":"Competitor account handles to research"},"source_domains":{"type":"array","items":{"type":"string"},"description":"Domains to focus research on"}},"required":["niche"]},"annotations":{"execution":{"estimatedSeconds":600,"timeoutSeconds":1800,"mode":"io"}},"examples":[{"description":"Research personal finance niche for Instagram carousels","input":{"niche":"personal finance for millennials","platform":"instagram","goals":["followers","saves"]}}],"pricing":"paid","returns":"Structured niche research with trending topics, audience pain points, language patterns, emotional triggers, content types, platform tips, and sources"},{"name":"write_hooks","displayName":"Write Hooks","description":"Generate carousel-specific Slide 1 hooks using 6 proven formulas (question, statistic, promise, list, mistake, curiosity). Text-first hooks optimized for bold display on static images. ⏱ Takes ~5 seconds. Step 2 — requires research from step 1.","inputSchema":{"type":"object","properties":{"niche":{"type":"string","description":"Niche or topic area"},"research":{"type":"object","description":"Research output from research_niche step"},"topic":{"type":"string","description":"Specific carousel topic"},"creative_direction":{"type":"object","properties":{"tone_of_voice":{"type":"string","description":"Voice tone (e.g. \"witty and slightly sarcastic\")"},"brand_differentiation":{"type":"string","description":"What makes this account unique"},"platform":{"type":"string","enum":["instagram","tiktok","both"]}},"description":"Optional creative direction for hook style"},"num_hooks":{"type":"number","default":5,"description":"Number of hooks to generate (default 5)"},"goal":{"type":"string","description":"Goal for this carousel (e.g. \"saves\", \"follows\", \"DMs\")"},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["niche","research","topic"]},"annotations":{},"examples":[{"description":"Generate 5 hooks for a budgeting carousel","input":{"niche":"personal finance for millennials","research":{"audience_pain_points":["living paycheck to paycheck"],"trending_topics":["50/30/20 budget rule"]},"topic":"5 budgeting mistakes that keep you broke","num_hooks":5}}],"pricing":"paid","returns":"Array of hooks with text, formula type, target emotion, and target pain point"},{"name":"write_slides","displayName":"Write Slides","description":"Generate complete slide-by-slide text content for each hook. Produces 10-slide carousels (configurable) with hook, body, and CTA slides following U-curve engagement principles. ⏱ Takes ~10 seconds per hook. Step 3 — requires hooks from step 2.","inputSchema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"object"},"description":"Array of hooks from write_hooks step"},"niche":{"type":"string","description":"Niche or topic area"},"research":{"type":"object","description":"Research output from research_niche step"},"topic":{"type":"string","description":"Specific carousel topic"},"creative_direction":{"type":"object","properties":{"tone_of_voice":{"type":"string","description":"Voice tone"},"content_framework":{"type":"string","enum":["listicle","myth_vs_fact","before_after","step_by_step","tips"]},"cta_type":{"type":"string","enum":["save","share","comment","follow","dm","link"]}},"description":"Optional creative direction for slide copy"},"slide_count":{"type":"number","default":10,"description":"Number of slides per carousel (default 10, max 20)"},"source_material":{"type":"string","description":"Additional context or data to weave into slides"},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["hooks","niche","research","topic"]},"annotations":{},"examples":[{"description":"Generate 10-slide carousels from hooks","input":{"hooks":[{"id":"hook_1","text":"5 budgeting mistakes keeping you broke","formula_type":"mistake"}],"niche":"personal finance for millennials","research":{"audience_pain_points":["living paycheck to paycheck"]},"topic":"5 budgeting mistakes that keep you broke"}}],"pricing":"paid","returns":"Array of carousels, each with hook_id, title, slides (headline, body, emphasis, type), CTA text and instruction"},{"name":"design_slides","displayName":"Design Slides","description":"Generate visual design specifications for each slide including image prompts, layout, typography, colors, and decorative elements. Bridges copywriting and image generation with platform-specific optimization. ⏱ Takes ~5 seconds per carousel. Step 4 — requires carousels from step 3.","inputSchema":{"type":"object","properties":{"carousels":{"type":"array","items":{"type":"object"},"description":"Array of carousels from write_slides step"},"creative_direction":{"type":"object","properties":{"brand_colors":{"type":"object","properties":{"primary":{"type":"string","description":"Primary brand color (hex)"},"secondary":{"type":"string","description":"Secondary color (hex)"},"accent":{"type":"string","description":"Accent color (hex)"},"background":{"type":"string","description":"Background color (hex)"},"text":{"type":"string","description":"Text color (hex)"}}},"brand_fonts":{"type":"object","properties":{"heading":{"type":"string","description":"Heading font (e.g. \"Heavitas\", \"bold sans-serif\")"},"body":{"type":"string","description":"Body font (e.g. \"Poppins\", \"Montserrat\")"}}},"logo_url":{"type":"string","description":"URL to logo image for slide overlays"},"visual_style":{"type":"string","description":"Visual style (e.g. \"clean minimalist\", \"bold gradient\", \"dark mode\")"},"slide_aesthetic":{"type":"string","enum":["text_only","image_background","screenshot_cards","scrapbook","infographic"]},"reference_accounts":{"type":"array","items":{"type":"string"},"description":"Reference accounts for style inspiration"},"reference_images":{"type":"array","items":{"type":"string"},"description":"Reference carousel images as ToolRouter file IDs or hosted HTTP(S) URLs"},"platform":{"type":"string","enum":["instagram","tiktok","both"]}},"description":"Optional creative direction for visual design"},"brand_url":{"type":"string","description":"Optional website URL to auto-extract brand colors, fonts, logo, and style. Skipped if brand_colors already provided in creative_direction."},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["carousels"]},"annotations":{},"examples":[{"description":"Design slides with brand colors","input":{"carousels":[{"hook_id":"hook_1","carousel_title":"Budgeting Mistakes","slides":[{"slide_number":1,"headline":"5 budgeting mistakes","slide_type":"hook"}]}],"creative_direction":{"brand_colors":{"primary":"#1a1a2e","accent":"#ffd700"},"visual_style":"dark mode"}}}],"pricing":"paid","returns":"Array of designed carousels with image prompts, layout specs, color schemes, and visual consistency notes per slide"},{"name":"write_carousel","displayName":"Write Complete Carousel (Fast)","description":"Generate a complete carousel in ONE call — hook, copy, emphasis text, and color scheme. Fast path replacing write_hooks + write_slides + design_slides in a single LLM call (~5s). Outputs designed_carousels ready for generate_images.","inputSchema":{"type":"object","properties":{"niche":{"type":"string","description":"Niche or topic area (e.g. \"personal finance for millennials\")"},"topic":{"type":"string","description":"Specific carousel topic (e.g. \"5 money habits that keep you broke\")"},"research":{"type":"object","description":"Optional research output from research_niche step"},"slide_count":{"type":"number","default":7,"description":"Number of slides (default 7, max 15)"},"creative_direction":{"type":"object","properties":{"tone_of_voice":{"type":"string","description":"Voice tone (e.g. \"witty and direct\")"},"visual_style":{"type":"string","description":"Visual style (e.g. \"dark mode bold\", \"warm minimalist\")"},"brand_colors":{"type":"object","description":"Brand colors: { primary, secondary, accent, background, text }"},"platform":{"type":"string","enum":["instagram","tiktok","both"],"description":"Target platform"},"content_framework":{"type":"string","enum":["listicle","myth_vs_fact","before_after","step_by_step","tips"],"description":"Content structure framework"},"cta_type":{"type":"string","enum":["save","share","comment","follow","dm","link"],"description":"Primary CTA type"}},"description":"Optional creative direction for style, colors, and tone"},"llm_model":{"type":"string","description":"OpenRouter model ID"}},"required":["niche","topic"]},"annotations":{},"examples":[{"description":"Generate a 7-slide finance carousel","input":{"niche":"personal finance","topic":"5 money habits that keep you broke","creative_direction":{"visual_style":"dark mode bold","platform":"instagram"}}}],"pricing":"paid","returns":"Complete designed_carousels array ready for generate_images, plus color_scheme"},{"name":"create_carousel","displayName":"Create Complete Carousel (End-to-End)","description":"End-to-end carousel in one call with GPT Image 2. Point at an Instagram URL to rebrand an existing post, or provide niche and topic for a fresh one. Writes copy, generates all slides with full layout and imagery, returns image URLs. ⏱ ~15-30 seconds.","inputSchema":{"type":"object","properties":{"instagram_url":{"type":"string","description":"Instagram carousel URL (instagram.com/p/...) — scrapes slides as visual reference and rewrites copy. Required when niche/topic are not provided."},"niche":{"type":"string","description":"Niche or topic area (e.g. \"personal finance for millennials\"). Required when instagram_url is not provided."},"topic":{"type":"string","description":"Specific carousel topic (e.g. \"5 money habits that keep you broke\"). Required when instagram_url is not provided."},"slide_count":{"type":"number","default":7,"maximum":15,"description":"Number of slides (default 7, max 15). Ignored when instagram_url is provided (uses scraped count)."},"brand_url":{"type":"string","description":"Website URL to auto-extract brand colors and visual style."},"creative_direction":{"type":"object","properties":{"tone_of_voice":{"type":"string","description":"Voice tone (e.g. \"witty and direct\")"},"visual_style":{"type":"string","description":"Visual style (e.g. \"dark mode bold\", \"warm minimalist\")"},"brand_colors":{"type":"object","description":"Brand colors: { primary, secondary, accent, background, text }"},"platform":{"type":"string","enum":["instagram","tiktok","both"],"description":"Target platform (affects aspect ratio)"},"content_framework":{"type":"string","enum":["listicle","myth_vs_fact","before_after","step_by_step","tips"],"description":"Content structure framework"},"cta_type":{"type":"string","enum":["save","share","comment","follow","dm","link"],"description":"Primary CTA type"}},"description":"Optional creative direction for style, colors, and tone"},"style_reference_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"product_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"quality":{"type":"string","enum":["low","medium","high"],"default":"medium","description":"GPT Image 2 quality tier. low=fastest/cheapest, high=best quality. Default: medium."},"llm_model":{"type":"string","description":"Override the LLM model for slide copy writing (default: google/gemini-2.5-flash)."}},"required":[]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Create a 7-slide finance carousel from scratch","input":{"niche":"personal finance","topic":"5 money habits that keep you broke","creative_direction":{"visual_style":"dark mode bold","platform":"instagram"}}},{"description":"Rebrand an Instagram carousel in your style","input":{"instagram_url":"https://www.instagram.com/p/C1abc23DEFg/","brand_url":"https://example.com","quality":"high"}}],"pricing":"paid","returns":"Carousel with slide image URLs, color scheme, platform, and dimensions — ready to post. Images rendered by GPT Image 2 with full layout and typography."},{"name":"generate_images","displayName":"Generate Slide Images","description":"Generate carousel slide images. Supports 70+ models; default: gpt-image-2 for high-quality full-slide generation. Requires designed carousels from the design step. ⏱ Takes ~5-10 seconds per slide. Returns a job_id — poll with get_job_result until complete.","inputSchema":{"type":"object","properties":{"designed_carousels":{"type":"array","items":{"type":"object"},"description":"Array of designed carousels from design_slides step"},"creative_direction":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","tiktok","both"],"description":"Platform determines aspect ratio: instagram=4:5, tiktok=9:16"},"reference_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"description":"Optional creative direction"},"model":{"type":"string","default":"gpt-image-2","description":"Model to use. Call list_models to see available options. Omit for the recommended default."}},"required":["designed_carousels"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Generate images for designed carousel","input":{"designed_carousels":[{"hook_id":"hook_1","carousel_title":"Budgeting Mistakes","slides":[{"slide_number":1,"image_prompt":"Clean dark carousel slide with bold white text reading \"5 budgeting mistakes keeping you broke\""}]}]}}],"pricing":"paid","returns":"Array of carousels with generated slide image URLs, plus asset paths for auto-upload"},{"name":"export_editable","displayName":"Export Editable SVGs","description":"Generate editable SVG files for each carousel slide. SVGs import into Figma, Canva, or Illustrator with fully editable text layers. No external API needed. ⏱ Takes ~1-2 seconds per slide. Step 6 (optional) — requires designed carousels from step 4.","inputSchema":{"type":"object","properties":{"designed_carousels":{"type":"array","items":{"type":"object"},"description":"Array of designed carousels from design_slides step"},"creative_direction":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","tiktok","both"],"description":"Platform determines dimensions: instagram=1080x1350, tiktok=1080x1920"}},"description":"Optional creative direction"},"format":{"type":"string","enum":["svg","svg_bundle"],"description":"Output format (default: svg)"}},"required":["designed_carousels"]},"annotations":{},"examples":[{"description":"Export editable SVGs for Figma","input":{"designed_carousels":[{"hook_id":"hook_1","carousel_title":"Budgeting Mistakes","slides":[{"slide_number":1,"text_overlay":{"headline":{"text":"5 budgeting mistakes"}},"color_scheme":{"background":"#1a1a2e","text":"#ffffff","accent":"#ffd700"}}]}]}}],"pricing":"paid","returns":"Array of carousels with SVG content per slide, plus asset paths for auto-upload"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["create_carousel","write_carousel → generate_images","research_niche → write_hooks → write_slides → design_slides → generate_images","export_editable","list_models"],"icon":"/icons/faceless-carousels.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across carousel images"]},{"version":"0.04","date":"2026-04-14","changes":["Accept products from your file library"]},{"version":"0.05","date":"2026-04-28","changes":["create_carousel now accepts an Instagram URL — scrape any public carousel and get it fully rebranded in your style","Slides now generated by GPT Image 2 — full layout, typography, and imagery in one shot, no templates required","Added style_reference and product inputs to create_carousel for consistent visual direction","Removed render_slides skill — use create_carousel or generate_images for rendered output"]}],"premadePrompt":"Create a faceless Instagram carousel about [topic, e.g. \"5 habits that will make you rich\"] for the [niche, e.g. personal finance] niche. Use a bold dark-mode style.","usesProducts":true,"usesStyleReferences":true,"styleReferenceSkills":["generate_images"],"brain":{"instructions":"When brain knowledge is available:\n    - Match brand voice in all carousel copy and captions\n    - Use brand colours and visual style in slide design direction\n    - Reference products and services accurately\n    - Tailor content angle for the target audience","produces":["content_insights"]},"requirements":[{"name":"parallel","type":"secret","displayName":"Parallel AI API Key","description":"Optional: use your own Parallel AI key instead of the platform default","acquireUrl":"https://parallel.ai","envFallback":"PARALLEL_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"parallel","type":"secret","displayName":"Parallel AI API Key","description":"Optional: use your own Parallel AI key instead of the platform default","acquireUrl":"https://parallel.ai","envFallback":"PARALLEL_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"get-brand-logo","displayName":"Get Brand Logo","subtitle":"Official logos by domain or ticker","about":"**Get Brand Logo** retrieves official logos for any company, stock, or cryptocurrency — by domain, ticker, ISIN, or crypto symbol. You get the logo image plus every available variant in light and dark themes, SVG and raster formats, and icon or full lockup versions.\n\nIt's the cleanest way to pull a brand's official visual identity into a report, dashboard, app, or document without hunting through company websites or guessing at CDN paths.\n\n### What you can do\n- **get_logo** — fetch any brand's logo using a domain (nike.com), stock ticker (AAPL), ISIN code, or crypto symbol (crypto/BTC)\n- Choose between icon (compact square), full logo (horizontal lockup), or symbol variants\n- Specify light or dark theme to match your background\n- Get all available variants and formats (SVG, PNG, WebP, JPEG) in one response\n\n### Who it's for\nDevelopers building dashboards or financial apps that display company logos, analysts producing branded reports, designers who need clean brand assets quickly, and anyone building tools that work with companies, stocks, or crypto.\n\n### How to use it\n1. Use **get_logo** with an identifier — a domain works for most companies, a ticker for listed stocks, or a crypto symbol for digital assets\n2. Set type to \"icon\" for compact UIs or \"logo\" for full horizontal lockups\n3. Set theme to \"dark\" or \"light\" based on your background\n4. Use logo_url for the selected variant, or all_logos to let users pick their preferred format\n\n### Getting started\nWorks immediately with no configuration for most brands — connecting your own account key removes shared rate limits for high-volume use.","version":"0.03","categories":["media"],"currency":"USD","skills":[{"name":"get_logo","displayName":"Get Logo","description":"Fetch a brand logo by domain, stock ticker, ISIN code, or crypto symbol. Returns the logo image file plus all available logo URLs in multiple formats, types, and themes.","inputSchema":{"type":"object","properties":{"identifier":{"type":"string","description":"Brand identifier — domain (nike.com), stock ticker (AAPL), ISIN (US6541061031), or crypto symbol (crypto/BTC)"},"type":{"type":"string","description":"Preferred logo type to retrieve","enum":["icon","logo","symbol"],"default":"icon"},"theme":{"type":"string","description":"Preferred color theme variant","enum":["light","dark"]},"format":{"type":"string","description":"Preferred image format for the downloaded file","enum":["svg","png","webp","jpeg"]}},"required":["identifier"]},"annotations":{},"examples":[{"description":"Get the Nike icon by domain","input":{"identifier":"nike.com"}},{"description":"Get a dark theme full logo for Apple by stock ticker","input":{"identifier":"AAPL","type":"logo","theme":"dark"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"found":{"type":"boolean","description":"Whether a logo was found"},"identifier":{"type":"string","description":"The identifier that was queried"},"brand_name":{"type":"string","description":"Official brand name"},"brand_domain":{"type":"string","description":"Brand primary domain"},"logo_url":{"type":"string","description":"Direct CDN URL for the selected logo variant"},"format":{"type":"string","description":"Image format of the selected logo"},"width":{"type":"number","description":"Image width in pixels (null for SVG)"},"height":{"type":"number","description":"Image height in pixels (null for SVG)"},"type":{"type":"string","description":"Logo type returned (icon, logo, symbol)"},"theme":{"type":"string","description":"Theme of the returned logo (light or dark)"},"all_logos":{"type":"array","description":"All available logos with their formats and URLs","items":{"type":"object","properties":{"type":{"type":"string","description":"Logo type"},"theme":{"type":"string","description":"Theme variant"},"formats":{"type":"array","description":"Available formats with URLs","items":{"type":"object","properties":{"format":{"type":"string","description":"Image format"},"src":{"type":"string","description":"CDN URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}}}}}}}}},"contentType":"image","returns":"Brand logo image file with metadata, CDN URL, and all available logo variants in multiple formats"}],"icon":"/icons/get-brand-logo.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-23","changes":["Returns logo_url (CDN link) instead of a downloaded file — reference material, not a created asset"]}],"premadePrompt":"Get the official logo for [company name, domain, or stock ticker] in PNG format.","requirements":[{"name":"brandfetch","type":"secret","displayName":"Brandfetch API Key","description":"Optional: use your own Brandfetch key instead of the platform default","acquireUrl":"https://developers.brandfetch.com/register","envFallback":"BRANDFETCH_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"brandfetch","type":"secret","displayName":"Brandfetch API Key","description":"Optional: use your own Brandfetch key instead of the platform default","acquireUrl":"https://developers.brandfetch.com/register","envFallback":"BRANDFETCH_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"stock-market","displayName":"Stock Market","subtitle":"Quotes, history & analyst insights","about":"**Stock Market** gives you real-time quotes, historical price data, analyst insights, and market-wide snapshots for stocks, ETFs, indices, futures, forex, and crypto — all in one tool. Whether you're checking a single ticker or scanning the whole market, it has you covered.\n\nIt pulls together everything a serious investor needs: current prices with 52-week ranges, OHLCV history down to 1-minute bars, side-by-side comparisons, screeners for gainers and losers, dividend history, and deep analyst-grade reports with bull/bear thesis and price targets. For institutional-grade data, it also surfaces large block trades and auction imbalance from direct exchange feeds.\n\n### What you can do\n- **get_quote** — current price, daily change, volume, and 52-week range for up to 10 symbols\n- **price_history** — OHLCV bars from 1-minute to monthly, up to max history\n- **analyst_insights** — technical signals, valuation, price targets, bull/bear thesis, and research reports\n- **market_overview** — full US or global market dashboard in one call\n- **market_movers** — top gainers, losers, most active, and screened lists\n- **compare_stocks** — side-by-side performance for 2–5 instruments\n- **dividends_splits** — dividend payment history and stock split records\n- **trending** — hottest tickers right now by region\n- **institutional_flow** — large block trades from direct exchange feeds\n- **auction_imbalance** — opening and closing auction queue data\n\n### Who it's for\nActive traders, investors, financial researchers, and anyone building market-aware AI workflows. Works equally well for quick price checks and deep pre-trade analysis.\n\n### How to use it\n1. Start with **get_quote** to pull current prices for any symbol — stocks, ETFs, indices like ^GSPC, futures like GC=F, or crypto like BTC-USD\n2. Use **price_history** to pull OHLCV bars for charting or backtesting\n3. Run **analyst_insights** for a full pre-trade report with technicals, valuation, and the bull/bear case\n4. Use **market_overview** for a daily market snapshot before diving into individual names\n\n### Getting started\nNo setup needed for quotes, history, and most skills. Connect your Databento account to unlock institutional_flow and auction_imbalance.","version":"0.03","categories":["finance"],"currency":"USD","skills":[{"name":"get_quote","displayName":"Get Quote","description":"Get current price, daily change, volume, and 52-week range for one or more ticker symbols. Supports stocks, ETFs, indices (^GSPC, ^DJI), futures (GC=F, CL=F), forex (EURUSD=X), and crypto (BTC-USD).","inputSchema":{"type":"object","properties":{"symbols":{"type":"string","description":"Comma-separated ticker symbols, up to 10 (e.g. \"AAPL,MSFT\", \"^GSPC,^VIX\", \"GC=F,CL=F\", \"EURUSD=X\", \"BTC-USD\")"}},"required":["symbols"]},"annotations":{},"examples":[{"description":"Get Apple and Microsoft stock quotes","input":{"symbols":"AAPL,MSFT"}},{"description":"Get major indices and VIX","input":{"symbols":"^GSPC,^DJI,^IXIC,^VIX"}},{"description":"Get gold, oil, and treasury yields","input":{"symbols":"GC=F,CL=F,^TNX"}},{"description":"Get Bitcoin and EUR/USD","input":{"symbols":"BTC-USD,EURUSD=X"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"quotes":{"type":"array","description":"Array of quote objects with price, change, volume, 52-week range"},"count":{"type":"number"},"timestamp":{"type":"string"}}},"returns":"Current price, daily change, day range, volume, 52-week range, currency, exchange, and instrument type"},{"name":"search_symbol","displayName":"Search Symbol","description":"Search for ticker symbols by company name, keyword, or partial match. Returns matching stocks, ETFs, indices, futures, and crypto with exchange, sector, and industry info, plus related news articles.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term — company name, ticker, or keyword (e.g. \"tesla\", \"gold futures\", \"S&P 500\")"},"limit":{"type":"number","description":"Max results (1-20, default 10)","default":10}},"required":["query"]},"annotations":{},"examples":[{"description":"Find Tesla ticker","input":{"query":"tesla"}},{"description":"Search for gold futures","input":{"query":"gold futures"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Matching instruments with symbol, name, type, exchange, sector, industry"},"news":{"type":"array","description":"Related news articles"}}},"returns":"Matching instruments with metadata and related news articles"},{"name":"price_history","displayName":"Price History","description":"Historical OHLCV (open, high, low, close, volume) data with adjusted close. Supports intervals from 1 minute to 3 months, ranges from 1 day to max history. Optionally includes pre-market and after-hours data. Works for stocks, ETFs, indices, futures, forex, and crypto.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"^GSPC\", \"GC=F\", \"EURUSD=X\", \"BTC-USD\")"},"interval":{"type":"string","description":"Bar interval: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo (default \"1d\")","default":"1d"},"range":{"type":"string","description":"Time range: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max (default \"1mo\")","default":"1mo"},"include_prepost":{"type":"boolean","description":"Include pre-market (4:00 AM) and after-hours (8:00 PM) data (default false)","default":false}},"required":["symbol"]},"annotations":{},"examples":[{"description":"Apple daily prices for the last month","input":{"symbol":"AAPL"}},{"description":"Tesla weekly prices over 1 year","input":{"symbol":"TSLA","interval":"1wk","range":"1y"}},{"description":"Intraday 1-minute with extended hours","input":{"symbol":"AAPL","interval":"1m","range":"1d","include_prepost":true}},{"description":"S&P 500 monthly over 10 years","input":{"symbol":"^GSPC","interval":"1mo","range":"10y"}},{"description":"Gold futures weekly over 2 years","input":{"symbol":"GC=F","interval":"1wk","range":"2y"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"bars":{"type":"array","description":"OHLCV bars with date, open, high, low, close, volume, adjusted_close"},"data_points":{"type":"number"}}},"returns":"OHLCV bars with metadata, current price, and 52-week range"},{"name":"dividends_splits","displayName":"Dividends & Splits","description":"Get dividend payment history and stock split records for any equity. Returns individual dividend payments, annual totals, and split ratios. Essential for income investors and total return analysis.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"MSFT\", \"KO\", \"JNJ\")"},"range":{"type":"string","description":"Lookback period: 1y, 2y, 5y, 10y, max (default \"5y\")","default":"5y"}},"required":["symbol"]},"annotations":{},"examples":[{"description":"Apple dividends and splits over 5 years","input":{"symbol":"AAPL"}},{"description":"Coca-Cola full dividend history","input":{"symbol":"KO","range":"max"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"dividends":{"type":"object","description":"Dividend records and annual totals"},"splits":{"type":"object","description":"Stock split records with ratios"}}},"returns":"Dividend records with dates and amounts, annual totals, and stock split history with ratios"},{"name":"compare_stocks","displayName":"Compare Stocks","description":"Side-by-side comparison of 2-5 instruments over a time period. Shows current price, period return, high/low, average volume — sorted by performance. Works across asset classes.","inputSchema":{"type":"object","properties":{"symbols":{"type":"string","description":"Comma-separated list of 2-5 symbols (e.g. \"AAPL,MSFT,GOOGL\", \"GC=F,SI=F,CL=F\")"},"range":{"type":"string","description":"Comparison period: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, ytd, max (default \"1mo\")","default":"1mo"}},"required":["symbols"]},"annotations":{},"examples":[{"description":"Compare mega-cap tech year-to-date","input":{"symbols":"AAPL,MSFT,GOOGL,NVDA,META","range":"ytd"}},{"description":"Compare gold vs silver vs oil over 1 year","input":{"symbols":"GC=F,SI=F,CL=F","range":"1y"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"comparison":{"type":"array","description":"Instruments ranked by period return"}}},"returns":"Instruments ranked by period return with price, change, high/low, average volume, and 52-week range"},{"name":"analyst_insights","displayName":"Analyst Insights","description":"Deep analyst-grade analysis for a stock: multi-timeframe technical signals (short/intermediate/long-term), support/resistance levels, valuation assessment, company scores (innovation, hiring, sustainability, insider sentiment, earnings), analyst price targets, bull/bear thesis, and research reports.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"TSLA\", \"NVDA\")"}},"required":["symbol"]},"annotations":{},"examples":[{"description":"Full analyst analysis for Apple","input":{"symbol":"AAPL"}},{"description":"Technical and valuation analysis for NVIDIA","input":{"symbol":"NVDA"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"technicals":{"type":"object","description":"Short/intermediate/long-term outlook with scores"},"key_levels":{"type":"object","description":"Support, resistance, stop loss"},"valuation":{"type":"object","description":"Over/undervalued assessment with discount"},"company_scores":{"type":"object","description":"Innovation, hiring, sustainability, insider, earnings, dividends scores"},"recommendation":{"type":"object","description":"Analyst rating and target price"},"bull_case":{"type":"string","description":"Bullish thesis summary"},"bear_case":{"type":"string","description":"Bearish thesis summary"},"research_reports":{"type":"array","description":"Recent research reports"}}},"returns":"Technical analysis (multi-timeframe), key levels, valuation, company scores, analyst target, bull/bear thesis, and research reports"},{"name":"market_overview","displayName":"Market Overview","description":"Full market dashboard in one call — major indices (S&P 500, Dow, Nasdaq, Russell 2000), VIX volatility, Treasury yields (5Y, 10Y, 30Y), commodities (gold, silver, oil, natural gas), forex (DXY, EUR/USD, GBP/USD, USD/JPY), and crypto (BTC, ETH). Choose US or GLOBAL scope for international indices.","inputSchema":{"type":"object","properties":{"scope":{"type":"string","description":"US (18 instruments) or GLOBAL (14 instruments including FTSE, DAX, Nikkei, Hang Seng, etc.)","default":"US","enum":["US","GLOBAL"]}}},"annotations":{},"examples":[{"description":"Full US market dashboard","input":{}},{"description":"Global markets overview","input":{"scope":"GLOBAL"}}],"pricing":"free","returns":"Multi-asset market snapshot organized by category: indices, volatility, bonds, commodities, forex, crypto"},{"name":"market_movers","displayName":"Market Movers","description":"Top market movers — day gainers, day losers, most active, trending, undervalued growth stocks, tech growth stocks, undervalued large caps, small cap gainers. Each result includes price, change, volume, market cap, P/E ratios, EPS, dividend yield, analyst rating, and next earnings date.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Screener category (default \"gainers\"). See enum for all options.","default":"gainers","enum":["gainers","losers","most_active","trending","undervalued_growth","tech_growth","undervalued_large_caps","aggressive_small_caps","small_cap_gainers"]},"count":{"type":"number","description":"Number of results (1-25, default 10)","default":10}}},"annotations":{},"examples":[{"description":"Top 10 day gainers","input":{}},{"description":"Top 25 most active stocks","input":{"category":"most_active","count":25}},{"description":"Top losers today","input":{"category":"losers"}},{"description":"Undervalued growth stocks","input":{"category":"undervalued_growth","count":15}}],"pricing":"free","outputSchema":{"type":"object","properties":{"movers":{"type":"array","description":"Ranked stocks with price, change, volume, market cap, P/E, EPS, dividend yield, analyst rating"},"total_matching":{"type":"number","description":"Total stocks matching the screener criteria"}}},"returns":"Ranked stocks with price, change, volume, market cap, P/E (trailing + forward), EPS, dividend yield, 52-week change, analyst rating, and next earnings date"},{"name":"trending","displayName":"Trending Tickers","description":"Most trending tickers right now, enriched with current price data. Shows what the market is watching — stocks, ETFs, and crypto. Supports regional markets.","inputSchema":{"type":"object","properties":{"region":{"type":"string","description":"Market region code (default \"US\"). Examples: US, GB, DE, JP, AU, CA","default":"US"},"limit":{"type":"number","description":"Number of tickers (1-20, default 10)","default":10}}},"annotations":{},"examples":[{"description":"Top 10 trending US tickers","input":{}},{"description":"Top 5 trending UK tickers","input":{"region":"GB","limit":5}}],"pricing":"free","returns":"Ranked trending tickers with current price, daily change, volume, and 52-week range"},{"name":"institutional_flow","displayName":"Institutional Flow","description":"Large block trades and institutional-size prints for a stock on a given date. Filters to trades above a minimum share count, showing price, size, aggressor side, and venue. Uses consolidated US equity data from direct exchange feeds.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"NVDA\", \"SPY\")"},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format (default: most recent trading day)"},"min_size":{"type":"number","description":"Minimum shares per trade to include (default: 10000)","default":10000},"side":{"type":"string","description":"Aggressor side filter: buy, sell, or both (default: both)","enum":["buy","sell","both"],"default":"both"},"limit":{"type":"number","description":"Maximum number of trades to return (default: 100, max: 1000)","default":100}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"AAPL institutional trades today","input":{"symbol":"AAPL"}},{"description":"NVDA large buy-side trades","input":{"symbol":"NVDA","min_size":50000,"side":"buy"}},{"description":"SPY 100k+ share prints","input":{"symbol":"SPY","min_size":100000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"trades":{"type":"array","description":"Large trades with time, price, size, side, and venue"},"total_trades":{"type":"number"}}},"returns":"Large trades with timestamp, price, share count, aggressor side (buy/sell), and venue"},{"name":"auction_imbalance","displayName":"Auction Imbalance","description":"Opening and closing auction imbalance data for a stock. Shows how many more buy vs sell orders are queued in the auction, reference price, and indicative clearing prices. Essential for predicting MOC/LOC fill prices and managing end-of-day positioning.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"MSFT\")"},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format (default: most recent trading day)"},"auction_type":{"type":"string","description":"Which auction to fetch: open, close, or both (default: close)","enum":["open","close","both"],"default":"close"},"venue":{"type":"string","description":"Exchange venue: nasdaq, nyse, or both (default: both)","enum":["nasdaq","nyse","both"],"default":"both"}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"AAPL closing auction imbalance","input":{"symbol":"AAPL"}},{"description":"MSFT opening auction on Nasdaq","input":{"symbol":"MSFT","auction_type":"open","venue":"nasdaq"}},{"description":"SPY full auction data both venues","input":{"symbol":"SPY","auction_type":"both"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"imbalances":{"type":"array","description":"Auction imbalance records with paired/imbalance quantity and prices"}}},"returns":"Auction imbalance records with time, paired quantity, imbalance quantity, imbalance side (buy/sell/balanced), reference price, and near/far indicative prices"}],"icon":"/icons/stock-market.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-19","changes":["Added institutional_flow — large block trades from direct exchange feeds","Added auction_imbalance — opening and closing auction imbalance data"]}],"premadePrompt":"What is the current price and analyst outlook for [ticker symbol]? Give me a summary of the bull and bear case, plus recent price history.","requirements":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}],"credentials":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}]},{"name":"futures-market","displayName":"Futures Market","subtitle":"Futures curves, OI & settlements","about":"**Futures Market** delivers institutional-grade futures data from CME, CBOT, NYMEX, COMEX, and CBOE. Forward curves, back-adjusted price history, open interest, official settlements, Level 2 order book snapshots, and full contract specifications — all in one tool.\n\nWhether you're analyzing contango and backwardation in crude oil, backtesting a strategy on S&P 500 futures, or studying positioning ahead of expiry, this tool gives you the same data professionals use without needing multiple vendor subscriptions.\n\n### What you can do\n- **term_structure** — pull the full forward curve for any product with basis and roll yield between front months\n- **continuous_contract** — back-adjusted OHLCV history with calendar, OI-based, or volume-based roll rules\n- **open_interest** — total OI over time or broken down by individual contract\n- **settlement_prices** — official exchange settlements for any date range and contract set\n- **price_history** — OHLCV bars for specific contracts, continuous series, or parent symbols at daily, hourly, or minute resolution\n- **contract_specs** — tick size, multiplier, currency, exchange, and expiry for all listed contracts\n- **order_book_snapshot** — Level 2 bid/ask depth at any historical moment for microstructure research\n\n### Who it's for\nQuant researchers, derivatives traders, portfolio managers, and data analysts who need clean, structured futures data for analysis, strategy development, or reporting. Covers ES, NQ, CL, GC, ZN, ZB, 6E, RTY, VX, and all listed products.\n\n### How to use it\n1. Use **term_structure** to see the full forward curve and identify contango or backwardation\n2. Use **continuous_contract** with a start date to pull long-term back-adjusted price history\n3. Use **open_interest** to track positioning over time and spot roll dynamics\n4. Connect your account with a data API key to activate all skills.","version":"0.01","categories":["finance","data"],"currency":"USD","skills":[{"name":"term_structure","displayName":"Term Structure","description":"Full futures forward curve: all listed contracts from front to far, with settlement prices, open interest, volume, basis (spread vs front month), and roll yield. Essential for contango/backwardation analysis.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Root symbol (e.g. \"ES\", \"NQ\", \"CL\", \"GC\", \"ZN\", \"ZB\", \"6E\", \"RTY\", \"VX\")"},"date":{"type":"string","description":"Date to fetch curve for (YYYY-MM-DD). Defaults to yesterday."}},"required":["product"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"ES (S&P 500) term structure for yesterday","input":{"product":"ES"}},{"description":"Crude oil term structure for a specific date","input":{"product":"CL","date":"2025-03-01"}},{"description":"Gold futures forward curve","input":{"product":"GC"}},{"description":"VIX futures term structure","input":{"product":"VX"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"product":{"type":"string"},"date":{"type":"string"},"roll_yield_pct":{"type":"number","description":"Roll yield % between front and second contract"},"contracts":{"type":"array","description":"Forward curve rows: contract, expiry, days_to_expiry, close, settle, volume, open_interest, basis"}}},"returns":"Table of all listed contracts with settlement, volume, OI, basis vs front month, and roll yield between front two contracts"},{"name":"continuous_contract","displayName":"Continuous Contract","description":"Back-adjusted continuous contract OHLCV history. Rolls automatically by calendar date, open interest, or volume. Use for long-term price charts and quantitative research without gaps at expiry.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Root symbol (e.g. \"ES\", \"CL\", \"GC\", \"ZN\")"},"interval":{"type":"string","description":"Bar interval: \"1d\" | \"1h\" | \"1m\" (default \"1d\")","enum":["1d","1h","1m"],"default":"1d"},"start":{"type":"string","description":"Start date (YYYY-MM-DD)"},"end":{"type":"string","description":"End date (YYYY-MM-DD). Defaults to yesterday."},"roll_rule":{"type":"string","description":"Roll method: \"calendar\" (default), \"open_interest\", or \"volume\"","enum":["calendar","open_interest","volume"],"default":"calendar"},"back_months":{"type":"number","description":"Contract offset from front: 0 = front month (default), 1 = second month","default":0}},"required":["product","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"ES front-month calendar continuous for 2024","input":{"product":"ES","start":"2024-01-01","end":"2024-12-31"}},{"description":"Crude oil OI-rolled continuous, hourly bars for 3 months","input":{"product":"CL","interval":"1h","start":"2025-01-01","roll_rule":"open_interest"}},{"description":"Gold second-month continuous daily bars","input":{"product":"GC","start":"2024-01-01","back_months":1}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"bars":{"type":"array","description":"OHLCV bars with date, open, high, low, close, volume"},"data_points":{"type":"number"}}},"returns":"Line chart of close prices with full OHLCV bar data for the back-adjusted continuous series"},{"name":"open_interest","displayName":"Open Interest","description":"Open interest history from exchange statistics. Aggregate total OI over time as a chart, or break down by contract as a table. Useful for positioning analysis and roll monitoring.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Root symbol (e.g. \"ES\", \"NQ\", \"CL\", \"GC\")"},"start":{"type":"string","description":"Start date (YYYY-MM-DD)"},"end":{"type":"string","description":"End date (YYYY-MM-DD). Defaults to yesterday."},"aggregate":{"type":"string","description":"\"total\" (default) — sum OI across all contracts and chart over time. \"by_contract\" — OI per contract per day as a table.","enum":["total","by_contract"],"default":"total"}},"required":["product","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"ES total open interest over last 30 days","input":{"product":"ES","start":"2025-03-01"}},{"description":"CL open interest by contract for January 2025","input":{"product":"CL","start":"2025-01-01","end":"2025-01-31","aggregate":"by_contract"}},{"description":"Gold total OI trend over Q1 2025","input":{"product":"GC","start":"2025-01-01","end":"2025-03-31"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"series":{"type":"array","description":"Date + open_interest pairs (total mode)"},"contracts":{"type":"array","description":"Per-contract OI rows (by_contract mode)"}}},"returns":"Chart of total open interest by date (aggregate=total), or table of OI per contract per day (aggregate=by_contract)"},{"name":"settlement_prices","displayName":"Settlement Prices","description":"Official exchange settlement prices for futures contracts over a date range. Includes open interest. Filter to specific contracts or pull all active contracts for a product.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Root symbol (e.g. \"ES\", \"NQ\", \"CL\", \"GC\", \"ZN\")"},"start":{"type":"string","description":"Start date (YYYY-MM-DD)"},"end":{"type":"string","description":"End date (YYYY-MM-DD). Defaults to yesterday."},"contracts":{"type":"string","description":"Optional: comma-separated specific contract codes (e.g. \"ESH5,ESM5\"). If omitted, fetches all contracts for the product."}},"required":["product","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"All ES settlement prices for March 2025","input":{"product":"ES","start":"2025-03-01","end":"2025-03-31"}},{"description":"CL front two contracts settlement for a week","input":{"product":"CL","start":"2025-02-01","end":"2025-02-07","contracts":"CLH5,CLJ5"}},{"description":"Gold settlements for Q4 2024","input":{"product":"GC","start":"2024-10-01","end":"2024-12-31"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"rows":{"type":"array","description":"Settlement price rows: date, contract, settlement, open_interest"},"row_count":{"type":"number"}}},"returns":"Table of official settlement prices and open interest by date and contract"},{"name":"price_history","displayName":"Price History","description":"OHLCV price history for any futures symbol: specific contract (e.g. \"ESH5\"), continuous series (e.g. \"ES.c.0\"), or parent (e.g. \"ES.FUT\"). Returns a chart with full bar data.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Symbol: specific contract (\"ESH5\"), continuous (\"ES.c.0\"), or parent (\"ES.FUT\")"},"interval":{"type":"string","description":"Bar interval: \"1d\" | \"1h\" | \"1m\" (default \"1d\")","enum":["1d","1h","1m"],"default":"1d"},"start":{"type":"string","description":"Start date (YYYY-MM-DD)"},"end":{"type":"string","description":"End date (YYYY-MM-DD). Defaults to yesterday."}},"required":["symbol","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"March 2025 ES contract daily bars","input":{"symbol":"ESH5","start":"2025-01-01","end":"2025-03-21"}},{"description":"ES front-month continuous hourly for a week","input":{"symbol":"ES.c.0","interval":"1h","start":"2025-02-10","end":"2025-02-14"}},{"description":"CL parent (all contracts) daily bars for Jan 2025","input":{"symbol":"CL.FUT","start":"2025-01-01","end":"2025-01-31"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"bars":{"type":"array","description":"OHLCV bars with date, open, high, low, close, volume"},"data_points":{"type":"number"}}},"returns":"Line chart of close prices plus full OHLCV bar array"},{"name":"contract_specs","displayName":"Contract Specs","description":"Exchange contract specifications for all listed futures contracts in a product. Includes expiry, tick size, contract multiplier, currency, and exchange. Filter to active contracts only.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Root symbol (e.g. \"ES\", \"CL\", \"GC\", \"ZN\", \"6E\")"},"active_only":{"type":"boolean","description":"Only return contracts that have not yet expired (default true)","default":true}},"required":["product"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Active ES contract specs","input":{"product":"ES"}},{"description":"All CL contracts including expired","input":{"product":"CL","active_only":false}},{"description":"10-year Treasury (ZN) active contracts","input":{"product":"ZN"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"contracts":{"type":"array","description":"Contract spec rows: contract, expiry, exchange, currency, min_price_increment, contract_multiplier, asset"},"contract_count":{"type":"number"}}},"returns":"Table of contract specifications including tick size, multiplier, expiry, currency, and exchange"},{"name":"order_book_snapshot","displayName":"Order Book Snapshot","description":"Level-2 order book depth at a specific historical moment. Returns top 10 bid and ask price levels with sizes, mid price, and spread. Useful for microstructure research and execution analysis.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Specific futures contract code (e.g. \"ESH5\", \"CLM5\")"},"datetime":{"type":"string","description":"ISO 8601 datetime (e.g. \"2025-01-15T14:30:00Z\"). Must be a historical date."},"duration_seconds":{"type":"number","description":"Window size in seconds (1-60, default 1). Larger windows increase cost.","default":1}},"required":["symbol","datetime"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"ES order book at 2025 market open","input":{"symbol":"ESH5","datetime":"2025-01-15T14:30:00Z"}},{"description":"CL order book with 5-second window","input":{"symbol":"CLH5","datetime":"2025-01-10T20:00:00Z","duration_seconds":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"timestamp":{"type":"string"},"bids":{"type":"array","description":"Bid levels [{price, size}] from best to worst"},"asks":{"type":"array","description":"Ask levels [{price, size}] from best to worst"},"mid_price":{"type":"number"},"spread":{"type":"number"}}},"returns":"Level-2 order book snapshot with up to 10 bid and ask levels, mid price, and spread"}],"icon":"/icons/futures-market.webp","changelog":[{"version":"0.01","date":"2026-04-19","changes":["Initial release"]}],"premadePrompt":"Show me the term structure for [product like ES or CL] futures and how the front two months have moved over the past month.","requirements":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}],"credentials":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}]},{"name":"commodities","displayName":"Commodities","subtitle":"Futures prices, curves & options","about":"**Commodities** delivers institutional-grade futures data from CME, NYMEX, COMEX, and ICE direct exchange feeds. Energy, metals, agriculture, and softs — spot prices, forward curves, settlement prices, open interest, options activity, and spread analysis in one tool.\n\nMost market data tools give you delayed prices from a secondary aggregator. This tool pulls from direct exchange feeds so the data is accurate and complete. Whether you're tracking the crude oil term structure, analyzing the gold-silver ratio, or monitoring options flow on corn futures, you get the same data a professional trading desk uses.\n\n### What you can do\n- **spot_price** — front-month futures price with OHLCV, settlement, and open interest\n- **term_structure** — full forward curve with contango/backwardation signal\n- **price_history** — continuous OHLCV history with calendar or OI roll methodology\n- **settlement_prices** — official daily settlement prices for any contract\n- **open_interest** — total OI trend over any date range\n- **options_activity** — options flow sorted by volume/OI ratio for key CME contracts\n- **spread_analysis** — crack spreads, soy crush, gold/silver ratio, calendar spreads, and custom spreads with z-score\n\n### Who it's for\nCommodity traders, energy analysts, portfolio managers, and researchers who need accurate futures market data. Also useful for businesses with commodity price exposure who want to monitor markets programmatically.\n\n### How to use it\n1. Connect your data account first\n2. Use **spot_price** with a commodity root (CL, GC, ZC, etc.) for the current front-month price\n3. Use **term_structure** to see the full forward curve and whether the market is in contango or backwardation\n4. Use **spread_analysis** to monitor crack spreads or other structural relationships","version":"0.01","categories":["finance","data"],"currency":"USD","skills":[{"name":"spot_price","displayName":"Spot Price","description":"Get the front-month futures price for a commodity including open, high, low, close, official settlement, volume, and open interest. Supports all CME/NYMEX/COMEX commodities and ICE soft commodities with a raw contract code.","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"Commodity root: CL, NG, RB, HO (energy), GC, SI, HG, PA, PL (metals), ZC, ZW, ZS, ZL, ZM, KE (ags), SB, KC, CC, CT (ICE softs)."},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to yesterday."},"raw_contract":{"type":"string","description":"Raw contract code for ICE soft commodities only (e.g. \"SBH5\" for March 2025 sugar). Required for SB, KC, CC, CT."}},"required":["commodity"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"WTI crude oil spot price","input":{"commodity":"CL"}},{"description":"Gold front-month price for a specific date","input":{"commodity":"GC","date":"2025-03-14"}},{"description":"Natural gas spot price","input":{"commodity":"NG"}},{"description":"Corn futures price","input":{"commodity":"ZC"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"commodity":{"type":"string"},"contract":{"type":"string"},"date":{"type":"string"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"settle":{"type":"number"},"volume":{"type":"number"},"open_interest":{"type":"number"},"exchange":{"type":"string"}}},"returns":"Front-month contract with open, high, low, close, settlement, volume, open interest, exchange, and expiration"},{"name":"term_structure","displayName":"Term Structure","description":"Fetch the full forward curve for a CME/NYMEX/COMEX commodity showing settlement prices across all active contract months. Identifies whether the market is in contango (forward prices higher) or backwardation (forward prices lower).","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"Commodity root symbol (e.g. CL, GC, NG, ZC, ZW, ZS). ICE softs (SB, KC, CC, CT) are not supported."},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to yesterday."}},"required":["commodity"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"WTI crude oil forward curve","input":{"commodity":"CL"}},{"description":"Natural gas term structure","input":{"commodity":"NG"}},{"description":"Gold forward curve","input":{"commodity":"GC"}},{"description":"Corn futures curve","input":{"commodity":"ZC"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"commodity":{"type":"string"},"market_structure":{"type":"string","enum":["contango","backwardation","mixed"]},"table_data":{"type":"array"},"contracts_in_curve":{"type":"number"}}},"returns":"Line chart of settlement prices by contract month, market structure classification, and table of all curve points"},{"name":"price_history","displayName":"Price History","description":"OHLCV price history for a commodity continuous contract at daily, hourly, or minute intervals. Uses CME/NYMEX/COMEX continuous front-month with calendar or open-interest roll rules.","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"Commodity root symbol (e.g. CL, GC, NG, ZC). ICE softs (SB, KC, CC, CT) are not supported for continuous history."},"interval":{"type":"string","description":"Bar interval: 1d, 1h, 1m (default \"1d\")","enum":["1d","1h","1m"],"default":"1d"},"start":{"type":"string","description":"Start date in YYYY-MM-DD format (required)."},"end":{"type":"string","description":"End date in YYYY-MM-DD format (default: yesterday)."},"roll_rule":{"type":"string","description":"Contract roll method: \"calendar\" (default) rolls on fixed schedule; \"open_interest\" rolls to highest-OI contract.","enum":["calendar","open_interest"],"default":"calendar"}},"required":["commodity","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"WTI crude oil daily price history for 3 months","input":{"commodity":"CL","start":"2025-01-01","end":"2025-03-31"}},{"description":"Gold daily history using open-interest roll","input":{"commodity":"GC","start":"2024-10-01","roll_rule":"open_interest"}},{"description":"Natural gas hourly bars for one week","input":{"commodity":"NG","interval":"1h","start":"2025-03-10","end":"2025-03-17"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"commodity":{"type":"string"},"bars":{"type":"array"},"data_points":{"type":"number"}}},"returns":"OHLCV bars as a line chart of close prices, with full bars array and summary statistics"},{"name":"settlement_prices","displayName":"Settlement Prices","description":"Official daily settlement prices and open interest for all active contract months of a CME/NYMEX/COMEX commodity over a date range. Settlement prices are the official end-of-day reference prices used for mark-to-market and margin calculations.","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"Commodity root symbol (e.g. CL, GC, NG, ZC). ICE softs are not supported."},"start":{"type":"string","description":"Start date in YYYY-MM-DD format (required)."},"end":{"type":"string","description":"End date in YYYY-MM-DD format (default: yesterday)."}},"required":["commodity","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Gold settlement prices for the past month","input":{"commodity":"GC","start":"2025-03-01"}},{"description":"Crude oil settlement prices across all active contracts","input":{"commodity":"CL","start":"2025-02-01","end":"2025-03-31"}},{"description":"Corn settlement prices for the past week","input":{"commodity":"ZC","start":"2025-03-10","end":"2025-03-14"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"commodity":{"type":"string"},"rows":{"type":"array","description":"Rows with date, contract, expiration, settlement, open_interest"},"row_count":{"type":"number"}}},"returns":"Table of daily official settlement prices by contract, with open interest per contract per day"},{"name":"open_interest","displayName":"Open Interest","description":"Total open interest trend for a commodity complex over a date range. Aggregates open interest across all active contracts per day to show market participation trends. Rising OI with rising prices confirms a trend; rising OI with falling prices signals a bearish trend.","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"Commodity root symbol (e.g. CL, GC, NG, ZC). ICE softs are not supported."},"start":{"type":"string","description":"Start date in YYYY-MM-DD format (required)."},"end":{"type":"string","description":"End date in YYYY-MM-DD format (default: yesterday)."}},"required":["commodity","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"WTI crude oil open interest over the past month","input":{"commodity":"CL","start":"2025-03-01"}},{"description":"Gold open interest trend over 3 months","input":{"commodity":"GC","start":"2025-01-01","end":"2025-03-31"}},{"description":"Natural gas open interest","input":{"commodity":"NG","start":"2025-02-01"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"commodity":{"type":"string"},"latest_oi":{"type":"number"},"oi_change_pct":{"type":"number"},"daily_oi":{"type":"array"}}},"returns":"Line chart of total open interest by date, with latest OI, min/max, and percentage change over period"},{"name":"options_activity","displayName":"Options Activity","description":"Options volume and open interest for CME commodity futures options. Returns calls and/or puts sorted by volume/OI ratio to surface the most actively traded contracts relative to existing positions. Supports CL, GC, SI, NG, ZC, ZW, ZS, and HG.","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"CME commodity root with options: CL (crude), GC (gold), SI (silver), NG (nat gas), ZC (corn), ZW (wheat), ZS (soybeans), HG (copper).","enum":["CL","GC","SI","NG","ZC","ZW","ZS","HG"]},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to yesterday."},"type":{"type":"string","description":"Filter by option type: \"call\", \"put\", or \"both\" (default)","enum":["call","put","both"],"default":"both"},"min_volume":{"type":"number","description":"Minimum volume to include in results (default 10)","default":10}},"required":["commodity"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Most active crude oil options","input":{"commodity":"CL"}},{"description":"Gold call options with volume above 50","input":{"commodity":"GC","type":"call","min_volume":50}},{"description":"All corn options activity","input":{"commodity":"ZC","type":"both"}},{"description":"Natural gas put options","input":{"commodity":"NG","type":"put"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"commodity":{"type":"string"},"rows":{"type":"array","description":"Options sorted by volume/OI ratio with strike, expiry, type, volume, OI, last price"},"row_count":{"type":"number"}}},"returns":"Table of options sorted by volume/OI ratio with strike, expiry, type, volume, open interest, and last price"},{"name":"spread_analysis","displayName":"Spread Analysis","description":"Commodity spread and ratio analysis over time with statistical signals. Predefined spreads: crack (CL/RB), soy crush (ZS/ZL), gold/silver ratio. Also calendar spreads for any commodity or custom two-leg spreads. Returns mean, stdev, and z-score to identify statistically extreme readings.","inputSchema":{"type":"object","properties":{"spread_type":{"type":"string","description":"Type of spread to compute.","enum":["crack_spread","soy_crush","gold_silver_ratio","calendar_spread","custom"]},"commodity":{"type":"string","description":"Commodity root for calendar_spread (e.g. \"CL\", \"GC\"). Required only for calendar_spread."},"custom_leg1":{"type":"string","description":"First leg commodity root for custom spread (e.g. \"HO\"). Required for custom spread_type."},"custom_leg2":{"type":"string","description":"Second leg commodity root for custom spread (e.g. \"RB\"). Required for custom spread_type."},"start":{"type":"string","description":"Start date in YYYY-MM-DD format (required)."},"end":{"type":"string","description":"End date in YYYY-MM-DD format (default: yesterday)."}},"required":["spread_type","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Crack spread (crude vs gasoline) over the past 6 months","input":{"spread_type":"crack_spread","start":"2024-10-01"}},{"description":"Gold/silver ratio over 1 year","input":{"spread_type":"gold_silver_ratio","start":"2024-04-01"}},{"description":"WTI crude oil calendar spread (front vs second month)","input":{"spread_type":"calendar_spread","commodity":"CL","start":"2025-01-01"}},{"description":"Heating oil vs gasoline custom spread","input":{"spread_type":"custom","custom_leg1":"HO","custom_leg2":"RB","start":"2025-01-01"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"spread_type":{"type":"string"},"current_value":{"type":"number"},"mean":{"type":"number"},"stdev":{"type":"number"},"zscore":{"type":"number"},"interpretation":{"type":"string"},"series":{"type":"array"}}},"returns":"Line chart of spread/ratio over time with current value, historical mean, standard deviation, and z-score signal"}],"icon":"/icons/commodities.webp","changelog":[{"version":"0.01","date":"2026-04-19","changes":["Initial release"]}],"premadePrompt":"Show me the WTI crude oil (CL) term structure today — is the market in contango or backwardation? Also pull the last 3 months of daily price history.","requirements":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}],"credentials":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}]},{"name":"video-editor","displayName":"Video Studio","subtitle":"Edit footage, add motion & render","about":"**Video Studio** turns raw camera footage into publish-ready videos. It handles the entire post-production pipeline: silence removal, dynamic zoom cuts, color correction, audio mastering, captions from transcription, motion graphics, B-roll insertion, and final export — all from a single automated workflow.\n\nThis is the tool for talking-head content, podcasts, YouTube videos, and online courses. You feed it raw footage and describe what you want; it produces a polished cut without requiring manual editing software or frame-by-frame review.\n\n### What you can do\n- **edit_footage** — process raw footage with silence removal, dynamic zoom, color correction, and audio mastering (-16 LUFS); supports two-camera setups with auto sync\n- **transcribe_video** — word-level transcription with frame-accurate timestamps for caption generation\n- **create_animations** — motion graphics and captions built from the transcript, with brand styling\n- **finalize_video** — merge the cut, captions, B-roll, and animations into a final export\n- **render_video** — render a video from a JSON template directly\n- **render_still** — extract a single frame from a video or template\n\n### Who it's for\nContent creators editing talking-head YouTube videos, podcast producers turning recordings into visual content, course creators who need polished lecture videos, and agencies delivering edited content at scale.\n\n### How to use it\n1. Use **list_capabilities** first to check available fonts, transitions, and output formats\n2. Run **edit_footage** with your raw video URL — it removes silences, applies zoom cuts, and masters the audio\n3. Run **transcribe_video** to get word-level timestamps for caption-accurate animations\n4. Run **create_animations** to add captions and motion graphics in your brand style\n5. Run **finalize_video** to merge everything into the final output\n\n### Getting started\nUpload your raw footage to a public URL and pass it to **edit_footage**. All async skills return a job ID — the tool will poll automatically until the result is ready.","version":"0.03","categories":["media"],"currency":"USD","skills":[{"name":"edit_footage","displayName":"Edit Footage","description":"Edit raw footage into a professional cut. 1-2 cameras with auto audio sync, silence removal, dynamic zoom (normal/punched-in/tight), color correction, and audio mastering (-16 LUFS) with EQ, compression, and de-essing via ffmpeg.","inputSchema":{"type":"object","properties":{"videos":{"type":"array","description":"Array of video files with \"url\" (ToolRouter file ID or hosted HTTP(S) URL) and optional \"label\". Supports 1-2 cameras with automatic audio-based sync.","items":{"type":"object","properties":{"url":{"type":"string","description":"Video file as a ToolRouter file ID or hosted HTTP(S) URL"},"label":{"type":"string","description":"Camera label (e.g. \"main\", \"secondary\"). Auto-assigned if omitted."}},"required":["url"]}},"camera_sync":{"type":"object","description":"Camera sync settings (only used with 2+ cameras). Uses audio correlation for automatic alignment.","properties":{"max_offset_drift":{"type":"number","description":"Maximum acceptable drift between sync measurements in seconds (default: 0.04 = 1 frame at 25fps)"}}},"silence_removal":{"type":"object","description":"Silence detection and removal settings. Cuts dead air while preserving natural speech rhythm.","properties":{"enabled":{"type":"boolean","description":"Enable silence removal (default: true)"},"threshold_db":{"type":"number","description":"Audio level below which is considered silence in dB (default: -30)"},"min_duration":{"type":"number","description":"Minimum silence duration to cut in seconds (default: 0.5)"},"keep_padding":{"type":"number","description":"Seconds of natural pause to keep at each cut point (default: 0.3, split as 0.15s tail + 0.15s lead)"}}},"zoom_levels":{"type":"object","description":"Dynamic zoom settings. Creates 3 frame sizes by cropping, alternates on each cut. Zoom chosen by transcript content analysis.","properties":{"enabled":{"type":"boolean","description":"Enable dynamic zoom levels (default: true)"},"normal_crop":{"type":"number","description":"Normal/medium shot crop factor (default: 1.0 = no crop). Used for default, factual content."},"punched_in_crop":{"type":"number","description":"Punched-in close-up crop factor (default: 1.3). Used for important points."},"tight_crop":{"type":"number","description":"Tight face-only crop factor (default: 1.5). Used for emotional peaks and bold claims."},"max_same_zoom_seconds":{"type":"number","description":"Maximum seconds at the same zoom level before forcing a switch (default: 7)"}}},"color_correction":{"type":"object","description":"Color correction applied via ffmpeg: color balance (warmth shift), S-curve contrast, brightness, and saturation adjustments.","properties":{"enabled":{"type":"boolean","description":"Enable color correction (default: true)"},"warmth":{"type":"number","description":"Warm color shift — adds red, reduces blue (default: 0.02)"},"contrast":{"type":"number","description":"Contrast multiplier (default: 1.05)"},"saturation":{"type":"number","description":"Saturation multiplier (default: 1.05)"},"brightness":{"type":"number","description":"Brightness offset (default: 0.02)"}}},"audio_mastering":{"type":"object","description":"Audio mastering chain: highpass, lowpass, presence EQ, warmth EQ, de-esser, compressor, loudness normalization. Targets -16 LUFS.","properties":{"enabled":{"type":"boolean","description":"Enable audio mastering (default: true)"},"target_lufs":{"type":"number","description":"Target integrated loudness in LUFS (default: -16)"},"true_peak":{"type":"number","description":"Maximum true peak in dBTP (default: -1.5)"},"highpass_hz":{"type":"number","description":"Highpass filter cutoff to remove room rumble (default: 80)"},"lowpass_hz":{"type":"number","description":"Lowpass filter cutoff to remove hiss (default: 14000)"},"presence_db":{"type":"number","description":"Presence EQ boost at 3kHz for voice clarity (default: 3)"},"warmth_db":{"type":"number","description":"Warmth EQ boost at 200Hz for fuller sound (default: 2)"},"compressor_ratio":{"type":"number","description":"Compressor ratio (default: 3)"},"compressor_threshold_db":{"type":"number","description":"Compressor threshold in dB (default: -21)"},"deesser_intensity":{"type":"number","description":"De-esser intensity 0-1 (default: 0.4)"}}},"output":{"type":"object","description":"Output format settings.","properties":{"fps":{"type":"number","description":"Output frames per second (default: 30)"},"resolution":{"type":"string","description":"Output resolution as \"WxH\" (default: \"1920x1080\")"},"codec":{"type":"string","description":"Video codec (default: \"libx264\")"},"crf":{"type":"number","description":"Constant Rate Factor for quality — lower is higher quality (default: 18)"}}}},"required":["videos"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Edit a single-camera talking head video with all defaults","input":{"videos":[{"url":"https://storage.example.com/raw-footage.mp4"}]}},{"description":"Edit dual-camera footage with custom silence threshold and aggressive zoom","input":{"videos":[{"url":"https://storage.example.com/camera-a.mp4","label":"main"},{"url":"https://storage.example.com/camera-b.mp4","label":"wide"}],"silence_removal":{"threshold_db":-28,"min_duration":0.3},"zoom_levels":{"punched_in_crop":1.4,"tight_crop":1.6,"max_same_zoom_seconds":5},"audio_mastering":{"target_lufs":-14,"warmth_db":3}}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"URL to download the edited MP4 video"},"job_id":{"type":"string","description":"Edit job ID"},"cameras":{"type":"number","description":"Number of cameras processed"},"segments":{"type":"number","description":"Number of segments in the final edit"},"silences_removed":{"type":"number","description":"Number of silence gaps removed"},"duration_seconds":{"type":"number","description":"Final video duration in seconds"}}},"returns":"Downloadable edited MP4 video URL, job ID, camera count, segment count, silences removed, and final duration"},{"name":"create_animations","displayName":"Create Animations","description":"Analyze edited video and generate branded motion graphics for key moments. Detects verbal cues, data points, comparisons, and processes, then renders overlays (counters, flowcharts, quotes, lists, highlights) via Remotion. Returns timestamped animation files for finalize_video.","inputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"brand_style":{"type":"object","description":"Brand design system for consistent animation styling.","properties":{"heading_font":{"type":"string","description":"Heading font family (default: \"DM Serif Display\")"},"body_font":{"type":"string","description":"Body font family (default: \"DM Sans\")"},"primary_color":{"type":"string","description":"Primary/accent color as hex (default: \"#E8620E\")"},"secondary_color":{"type":"string","description":"Secondary color as hex (default: \"#0E5C58\")"},"background_color":{"type":"string","description":"Background color as hex (default: \"#0f0f0f\")"}}},"detection":{"type":"object","description":"Control which types of \"show moments\" to detect in the transcript.","properties":{"verbal_cues":{"type":"boolean","description":"Detect phrases like \"let me show you\", \"check this out\" (default: true)"},"tool_context":{"type":"boolean","description":"Detect tool/app mentions near screen indicators like \"tab\", \"window\", \"button\" (default: true)"},"data_points":{"type":"boolean","description":"Detect statistics, numbers, and data worth animating (default: true)"},"comparisons":{"type":"boolean","description":"Detect before/after, A vs B, side-by-side comparison moments (default: true)"},"processes":{"type":"boolean","description":"Detect step-by-step processes and workflows worth visualizing as flowcharts (default: true)"}}},"animation_types":{"type":"array","description":"Animation types to generate: counter, flowchart, comparison, quote, side_by_side, list, highlight. Default: all.","items":{"type":"string","enum":["counter","flowchart","comparison","quote","side_by_side","list","highlight"]}},"render_variants":{"type":"array","description":"Color variants to render for each animation (default: [\"dark\"])","items":{"type":"string","enum":["dark","light"]}},"output_resolution":{"type":"string","enum":["1080p","4k"],"description":"Output resolution for animations (default: \"1080p\")"},"fps":{"type":"number","description":"Frames per second (default: 30)"}},"required":["video_url"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Create animations for an edited video with default settings","input":{"video_url":"https://storage.example.com/edited-video.mp4"}},{"description":"Create branded animations with custom style and 4K output","input":{"video_url":"https://storage.example.com/edited-video.mp4","brand_style":{"heading_font":"Playfair Display","body_font":"Inter","primary_color":"#6c63ff","secondary_color":"#ff6b6b"},"animation_types":["counter","flowchart","comparison"],"render_variants":["dark","light"],"output_resolution":"4k"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"animations":{"type":"array","description":"Array of generated animations with timestamps","items":{"type":"object","properties":{"animation_url":{"type":"string","description":"URL to the animation MP4 file"},"timestamp_seconds":{"type":"number","description":"Where to overlay this animation in the video"},"duration_seconds":{"type":"number","description":"Animation duration"},"type":{"type":"string","description":"Animation type (counter, flowchart, etc.)"},"description":{"type":"string","description":"What this animation visualizes"}}}},"animation_count":{"type":"number","description":"Total animations generated"},"job_id":{"type":"string","description":"Animation job ID"},"transcript":{"type":"object","description":"Full transcript with word-level timestamps (for reference)"}}},"returns":"Array of timestamped animation MP4 files, animation count, job ID, and full transcript"},{"name":"finalize_video","displayName":"Finalize Video","description":"Assemble the final video by combining edited footage with animation overlays and B-roll clips. Outputs high-quality MP4 (libx264, 320k AAC). Use after edit_footage and create_animations.","inputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"animations":{"type":"array","description":"Animation overlays from create_animations. Each plays at its specified timestamp.","items":{"type":"object","properties":{"url":{"type":"string","description":"URL of the animation MP4 file"},"timestamp_seconds":{"type":"number","description":"Start time in the video to overlay this animation"},"duration_seconds":{"type":"number","description":"Duration of the animation overlay"}},"required":["url","timestamp_seconds","duration_seconds"]}},"b_roll":{"type":"array","description":"B-roll footage clips to insert. Each replaces the main video at its timestamp.","items":{"type":"object","properties":{"url":{"type":"string","description":"URL of the B-roll video clip"},"timestamp_seconds":{"type":"number","description":"Start time in the video to insert this clip"},"duration_seconds":{"type":"number","description":"Duration of the B-roll clip (default: 3)"},"transition":{"type":"string","enum":["fade","cut","dissolve"],"description":"Transition style for B-roll (default: \"fade\")"}},"required":["url","timestamp_seconds"]}},"output":{"type":"object","description":"Final output encoding settings.","properties":{"codec":{"type":"string","description":"Video codec (default: \"libx264\")"},"crf":{"type":"number","description":"Quality — lower is higher quality (default: 18)"},"audio_bitrate":{"type":"string","description":"Audio bitrate (default: \"320k\")"},"fps":{"type":"number","description":"Output frames per second (default: 30)"}}}},"required":["video_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Finalize a video with animations and B-roll","input":{"video_url":"https://storage.example.com/edited-video.mp4","animations":[{"url":"https://storage.example.com/anim-01.mp4","timestamp_seconds":42.5,"duration_seconds":4.5},{"url":"https://storage.example.com/anim-02.mp4","timestamp_seconds":93.2,"duration_seconds":4.6}],"b_roll":[{"url":"https://storage.example.com/broll-typing.mp4","timestamp_seconds":65,"duration_seconds":3}]}},{"description":"Finalize with only animations, no B-roll","input":{"video_url":"https://storage.example.com/edited-video.mp4","animations":[{"url":"https://storage.example.com/counter-anim.mp4","timestamp_seconds":15,"duration_seconds":3}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"URL to download the final YouTube-ready MP4"},"job_id":{"type":"string","description":"Finalize job ID"},"animations_applied":{"type":"number","description":"Number of animation overlays applied"},"b_roll_inserted":{"type":"number","description":"Number of B-roll clips inserted"},"duration_seconds":{"type":"number","description":"Final video duration"}}},"returns":"Downloadable final MP4 video URL, job ID, animation count, B-roll count, and final duration"},{"name":"transcribe_video","displayName":"Transcribe Video","description":"Transcribe a video with word-level timestamps using speech-to-text. Returns the full transcript text, time-coded segments, and per-word timestamps. Useful standalone for subtitles, content analysis, or as a precursor to create_animations. Supports multiple languages.","inputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"language":{"type":"string","description":"Language code for transcription (default: \"en\"). Examples: \"en\", \"es\", \"fr\", \"de\", \"ja\""},"word_timestamps":{"type":"boolean","description":"Include per-word timestamps (default: true)"},"model":{"type":"string","enum":["base","small","medium","large"],"description":"Transcription model size — larger is more accurate but slower (default: \"medium\")"}},"required":["video_url"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Transcribe a video with word-level timestamps","input":{"video_url":"https://storage.example.com/my-video.mp4"}},{"description":"Transcribe a Spanish video with the large model for maximum accuracy","input":{"video_url":"https://storage.example.com/video-es.mp4","language":"es","model":"large"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Full transcript text"},"segments":{"type":"array","description":"Time-coded transcript segments","items":{"type":"object","properties":{"start":{"type":"number","description":"Segment start time in seconds"},"end":{"type":"number","description":"Segment end time in seconds"},"text":{"type":"string","description":"Segment text"}}}},"word_timestamps":{"type":"array","description":"Per-word timestamps (if enabled)","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"confidence":{"type":"number"}}}},"language":{"type":"string","description":"Detected or specified language"},"duration_seconds":{"type":"number","description":"Total video duration in seconds"},"job_id":{"type":"string","description":"Transcription job ID"}}},"returns":"Full transcript text, time-coded segments, per-word timestamps, detected language, and video duration"},{"name":"render_video","displayName":"Render Video","description":"Render a video from an ordered array of scenes. Each scene has positioned elements (text, images, shapes) with full layout, animation, and styling control. Use template_props for quick presets. Returns a downloadable MP4. Call list_capabilities first.","inputSchema":{"type":"object","properties":{"scenes":{"type":"array","description":"Ordered array of scenes with \"elements\" (positioned text/image/shape) and \"background\", or \"template_props\" for presets.","items":{"type":"object","description":"A scene canvas. Use EITHER \"elements\" for full control OR \"template_props\" for quick presets.","properties":{"elements":{"type":"array","description":"Array of elements to render on the canvas. Each element has type (text/image/shape), position (x/y as percentage), styling, and animation.","items":{"type":"object","properties":{"type":{"type":"string","enum":["text","image","shape"],"description":"Element type"},"content":{"type":"string","description":"Text content (for type=text)"},"src":{"type":"string","description":"Image URL (for type=image)"},"shape":{"type":"string","enum":["rectangle","circle","line","underline"],"description":"Shape type (for type=shape)"},"x":{"type":"string","description":"Horizontal position as percentage or pixels (default: \"50%\")"},"y":{"type":"string","description":"Vertical position as percentage or pixels (default: \"50%\")"},"width":{"type":"string","description":"Width constraint (e.g. \"80%\", \"400px\")"},"height":{"type":"string","description":"Height (for images/shapes)"},"size":{"type":"number","description":"Font size in pixels (for text, default: 48)"},"weight":{"type":"number","description":"Font weight 100-900 (for text, default: 400)"},"color":{"type":"string","description":"Color as hex (default: \"#ffffff\")"},"font":{"type":"string","description":"Font family override (default: global style font)"},"align":{"type":"string","enum":["left","center","right"],"description":"Text alignment (default: center)"},"opacity":{"type":"number","description":"Element opacity 0-1 (default: 1)"},"fit":{"type":"string","enum":["cover","contain","fill"],"description":"Image fit mode (default: cover)"},"border_radius":{"type":"number","description":"Border radius in pixels"},"animation":{"type":"string","enum":["none","fade-in","slide-up","slide-down","slide-left","slide-right","scale-in","word-by-word","typewriter","bounce-in"],"description":"Entrance animation (default: fade-in)"},"animation_style":{"type":"string","enum":["smooth","snappy","bouncy","heavy","elastic"],"description":"Animation feel/physics (default: smooth)"},"delay":{"type":"number","description":"Animation delay in seconds (default: 0)"}},"required":["type"]}},"background":{"type":"object","description":"Scene background: color, gradient, image, grain, particles.","properties":{"color":{"type":"string","description":"Background color as hex (default: \"#0f0f0f\")"},"gradient":{"type":"object","description":"Two-color gradient background","properties":{"to":{"type":"string","description":"Second gradient color (hex)"},"direction":{"type":"string","enum":["top","bottom","left","right","top-right","bottom-right"],"description":"Gradient direction"}}},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"image_opacity":{"type":"number","description":"Background image opacity (default: 1)"},"blur":{"type":"number","description":"Background blur in pixels (default: 0)"},"grain":{"type":"boolean","description":"Film grain noise overlay (default: true)"},"particles":{"type":"boolean","description":"Floating particles (default: false)"},"particle_count":{"type":"number","description":"Number of particles (default: 20)"}}},"template_props":{"type":"object","description":"Quick preset: set \"template\" to a scene type (title, content, quote, list, outro, stats, code, split, device, image).","properties":{"template":{"type":"string","enum":["title","content","image","quote","list","outro","device","stats","code","split"],"description":"Template name"}}},"duration":{"type":"number","description":"Scene duration in seconds (default: 5)"}}}},"format":{"type":"string","enum":["landscape","portrait","square"],"description":"Video aspect ratio (default: landscape)"},"style":{"type":"object","description":"Global visual style: font, colors. Applied to all scenes unless overridden per-element.","properties":{"font":{"type":"string","enum":["Inter","Poppins","Montserrat","Playfair Display","Roboto"],"description":"Font family (default: Inter)"},"primary_color":{"type":"string","description":"Primary/accent color as hex (default: #0b84f3)"},"secondary_color":{"type":"string","description":"Text color as hex (default: #ffffff)"},"background_color":{"type":"string","description":"Background color as hex (default: #0f0f0f)"}}},"transition":{"type":"string","enum":["fade","slide","flip","clock-wipe","none"],"description":"Transition between scenes (default: fade)"},"transition_duration":{"type":"number","description":"Transition duration in seconds (default: 0.5)"},"fps":{"type":"number","description":"Frames per second (default: 30)"}},"required":["scenes"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Create a video with full element control — custom layout, positioning, animations","input":{"scenes":[{"elements":[{"type":"text","content":"Hello World","x":"50%","y":"40%","size":80,"weight":800,"color":"#ffffff","animation":"slide-up"},{"type":"text","content":"Built with ToolRouter","x":"50%","y":"55%","size":32,"color":"#6c63ff","animation":"fade-in","delay":0.5},{"type":"shape","shape":"underline","x":"50%","y":"63%","width":"200px","color":"#6c63ff","animation":"draw","delay":0.8}],"background":{"color":"#0a0a1a","grain":true,"particles":true},"duration":4},{"elements":[{"type":"text","content":"Full Creative Control","x":"50%","y":"35%","size":56,"weight":700,"animation":"word-by-word"},{"type":"text","content":"Position anything anywhere. Animate everything.","x":"50%","y":"55%","size":24,"color":"#aaaaaa","animation":"fade-in","delay":0.8}],"background":{"color":"#0f0f0f","gradient":{"to":"#1a1a3a","direction":"bottom-right"}},"duration":5}],"format":"landscape","style":{"font":"Inter"},"transition":"fade"}},{"description":"Quick video using templates (backward compatible)","input":{"scenes":[{"template_props":{"template":"title","headline":"5 Tips for Better Sleep"},"duration":3},{"template_props":{"template":"list","heading":"The Tips","items":["No screens","Cool room","Consistent schedule"]},"duration":5},{"template_props":{"template":"outro","headline":"Sweet Dreams","cta":"Subscribe"},"duration":3}],"style":{"font":"Poppins","primary_color":"#ff6b6b","background_color":"#1a1a2e"}}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"URL to download the rendered MP4 video"},"render_id":{"type":"string","description":"Render job ID"},"scenes_count":{"type":"number","description":"Number of scenes rendered"},"format":{"type":"string","description":"Video format used"},"transition":{"type":"string","description":"Transition type used"},"fps":{"type":"number","description":"FPS used"}}},"returns":"Downloadable MP4 video URL, render ID, scene count, format, transition type, and FPS"},{"name":"render_still","displayName":"Render Still Image","description":"Render a single scene as a still image (PNG, JPEG, or WebP). Same element-based canvas as render_video. Useful for thumbnails, social graphics, and previews.","inputSchema":{"type":"object","properties":{"scene":{"type":"object","description":"Scene to render. Use \"elements\" for full control or \"template_props\" for quick presets.","properties":{"elements":{"type":"array","description":"Array of elements (text/image/shape) with position and animation"},"background":{"type":"object","description":"Background config (color, gradient, image, grain, particles)"},"template_props":{"type":"object","description":"Quick preset with template name and props"}}},"format":{"type":"string","enum":["landscape","portrait","square"],"description":"Image aspect ratio (default: landscape)"},"style":{"type":"object","description":"Visual style: font and colors.","properties":{"font":{"type":"string","description":"Font family"},"primary_color":{"type":"string","description":"Primary color (hex)"},"secondary_color":{"type":"string","description":"Text color (hex)"},"background_color":{"type":"string","description":"Background color (hex)"}}},"image_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format (default: png)"}},"required":["scene"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Render a custom thumbnail with positioned elements","input":{"scene":{"elements":[{"type":"text","content":"Episode 12","x":"50%","y":"40%","size":72,"weight":800,"color":"#ffffff"},{"type":"text","content":"The Future of AI","x":"50%","y":"58%","size":36,"color":"#6c63ff"}],"background":{"color":"#0a0a1a","gradient":{"to":"#1a0a3a"}}},"format":"landscape","image_format":"png"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"URL to download the rendered image"},"render_id":{"type":"string","description":"Render job ID"},"format":{"type":"string","description":"Image format used"},"image_format":{"type":"string","description":"Output format (png/jpeg/webp)"}}},"returns":"Downloadable image URL, render ID, format, and image format"},{"name":"list_capabilities","displayName":"List Capabilities","description":"List all available capabilities: footage editing pipeline (edit, animate, finalize), scene-based video creation (elements, animations, templates), transcription, and all configurable options. Call this first to understand the full toolkit.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"List all creative capabilities","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"editing_pipeline":{"type":"object","description":"Footage editing pipeline capabilities"},"element_types":{"type":"array","description":"Available element types with properties"},"animations":{"type":"array","description":"Available animation effects"},"animation_styles":{"type":"array","description":"Animation physics presets"},"backgrounds":{"type":"object","description":"Background options"},"templates":{"type":"array","description":"Quick-start template names"},"formats":{"type":"array","description":"Video/image formats"},"transitions":{"type":"array","description":"Scene transition effects"},"fonts":{"type":"array","description":"Available font families"}}},"returns":"Complete list of editing pipeline options, element types, animations, backgrounds, templates, formats, transitions, and fonts"}],"workflow":["list_capabilities","edit_footage → create_animations → finalize_video","render_video","render_still","transcribe_video"],"icon":"/icons/video-editor.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Added edit_footage skill: multi-camera sync, silence removal, zoom levels, color correction, audio mastering","Added create_animations skill: transcription-based motion graphics with brand styling","Added finalize_video skill: animation overlay, B-roll insertion, final encode","Added transcribe_video skill: word-level transcription","Renamed tool to Video Studio to reflect full production pipeline"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Edit my raw footage at [video URL] into a polished video — remove silences, add dynamic zoom cuts, fix the color, and master the audio. Then add captions from the transcript.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"viral-video-clone","displayName":"Viral Video Clone","subtitle":"Clone any viral video format for your brand","about":"**Viral Video Clone** reverse-engineers the exact format of any viral TikTok, Instagram, or YouTube video and adapts it for your brand. It gives you a forensic breakdown of what makes the video work — hook style, scene structure, camera angles, transitions, pacing, audio — then writes a production brief in that same format, tailored to your product and audience.\n\nMost content teams try to describe \"what made that video go viral\" from memory. This tool reads it frame by frame and tells you precisely: the hook fires at second 1.2, the cut rhythm is every 2.8 seconds, the audio drops at the emotional peak. Then it tells you exactly how to replicate that structure for your brand.\n\n### What you can do\n- **analyze_video** — forensic breakdown of a TikTok, Instagram, or YouTube video: hook type, scene structure with timing, camera angles, transitions, text overlays, pacing rhythm, and audio style\n- **adapt_format** — take the analyzed format and generate a brand-adapted production brief ready to feed into the video generation pipeline\n\n### Who it's for\nSocial media managers who want to replicate proven formats without copying content. Brand teams building UGC campaigns. Content strategists who need repeatable frameworks for their creators. Agencies producing high volumes of short-form video across multiple clients.\n\n### How to use it\n1. Find a viral video you want to clone — TikTok, Instagram Reel, or YouTube Short\n2. Run **analyze_video** with the URL to get the full format breakdown\n3. Run **adapt_format** with the VideoFormat output, your brand name, product description, and target audience\n4. Feed the resulting production brief into the video generation pipeline to produce the actual video\n\n### Getting started\nStart with a video that has performed well for a competitor or in your niche — ideally 15–60 seconds. The tool works best with videos that have a clear structure and distinct visual style.","version":"0.04","categories":["media","marketing"],"currency":"USD","skills":[{"name":"analyze_video","displayName":"Analyze Video Format","description":"Forensic breakdown of a TikTok, Instagram, or YouTube video. Extracts hook type, scene structure with timing, camera angles, transitions, text overlays, pacing rhythm, audio style. Async — returns job_id, poll with get_job_result. Takes ~60s.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"platform":{"type":"string","description":"Platform the video is from. Auto-detected from URL if omitted.","enum":["tiktok","instagram","youtube"]}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Analyze a TikTok video","input":{"url":"https://www.tiktok.com/@creator/video/7123456789"}},{"description":"Analyze an Instagram Reel","input":{"url":"https://www.instagram.com/reel/ABC123/","platform":"instagram"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"source":{"type":"object","description":"Source video metadata (url, platform, duration, aspect ratio)"},"transcript":{"type":"string","description":"Full transcript text"},"hook":{"type":"object","description":"Hook analysis (type, text, duration, technique)"},"scenes":{"type":"array","description":"Scene-by-scene breakdown with timing, camera, transitions"},"pacing":{"type":"object","description":"Pacing analysis (scene count, rhythm, visual change frequency)"},"audio":{"type":"object","description":"Audio analysis (style, pace, tone, energy curve, music)"},"cta":{"type":"object","description":"Call-to-action analysis (type, text, position)"},"style":{"type":"object","description":"Visual style (aesthetic, color mood, text style, overall vibe)"}}},"returns":"Complete VideoFormat object with forensic breakdown of every production detail"},{"name":"adapt_format","displayName":"Adapt Format to Brand","description":"Adapt a forensic video analysis to a new brand, persona, and product. Preserves the exact format structure (scene count, timing, camera angles, transitions, pacing, hook type) while adapting all content. Output is compatible with ugc-video pipeline.","inputSchema":{"type":"object","properties":{"video_format":{"type":"object","description":"The VideoFormat object returned by analyze_video"},"brand_name":{"type":"string","description":"Brand or business name"},"product_description":{"type":"string","description":"What the product/service does and who it is for"},"target_audience":{"type":"string","description":"Target audience description (demographics, interests, pain points)"},"persona_description":{"type":"string","description":"On-screen persona (age, appearance, style, energy). If omitted, inferred from source video style."},"key_messages":{"type":"array","items":{"type":"string"},"description":"Specific messaging points to communicate"},"platform":{"type":"string","description":"Target platform. Defaults to source video platform.","enum":["tiktok","instagram","youtube"]},"tone_override":{"type":"string","description":"Override the source video tone if desired (e.g. \"more authoritative\", \"casual and funny\")"}},"required":["video_format","brand_name","product_description","target_audience"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Adapt a viral format to a skincare brand","input":{"video_format":{"source":{"url":"https://tiktok.com/example","platform":"tiktok","duration_seconds":20,"aspect_ratio":"9:16"},"transcript":"Example transcript","hook":{"type":"question","text":"Did you know?","duration_seconds":3,"technique":"Curiosity gap"},"scenes":[],"pacing":{"total_scenes":4,"avg_scene_duration_seconds":5,"rhythm":"fast-slow-fast","visual_change_frequency":"every 3s"},"audio":{"style":"talking_head","speaking_pace_wps":2.5,"tone":"casual","energy_curve":"high-low-high","background_music":null,"sound_effects":[]},"cta":{"type":"follow","text":"Follow for more","position":"end"},"style":{"aesthetic":"raw/authentic","color_mood":"warm","text_style":null,"overall_vibe":"Casual selfie-style talking head"}},"brand_name":"GlowSkin","product_description":"Natural vitamin C serum for radiant skin","target_audience":"Women 25-35 interested in clean skincare","persona_description":"28-year-old woman, casual style, warm energy"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format_source":{"type":"object","description":"Reference to original video"},"adapted_hook":{"type":"object","description":"Adapted hook text and type"},"scripts":{"type":"array","description":"Scripts compatible with ugc-video pipeline"},"scenes":{"type":"array","description":"Scene descriptions compatible with ugc-video pipeline"},"audio_direction":{"type":"object","description":"Audio/voice direction for the new video"},"persona":{"type":"object","description":"Persona summary"},"ugc_format":{"type":"string","description":"Closest ugc-video format template"},"creative_notes":{"type":"string","description":"What was preserved vs adapted"}}},"returns":"Production brief for ugc-video pipeline. Pass as \"creative\" to ugc-video/generate_frames, set format to ugc_format, then generate_videos → assemble_final."}],"workflow":["analyze_video → adapt_format"],"icon":"/icons/viral-video-clone.webp","changelog":[{"version":"0.01","date":"2026-03-31","changes":["Initial release: forensic video analysis + brand-adapted production briefs"]},{"version":"0.02","date":"2026-04-03","changes":["Format analyses and clone briefs are now saved to your Files library automatically — searchable, persistent, reusable"]},{"version":"0.03","date":"2026-04-05","changes":["Personas from your library are now auto-discovered and injected — pass persona_file_id instead of manual persona fields"]},{"version":"0.04","date":"2026-04-14","changes":["Accept scenes, outfits and products from your file library too"]}],"premadePrompt":"Analyze this viral video [video URL] and adapt its exact format for my brand [brand name]. My product is [product description] and my target audience is [target audience description].","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"brain":{"instructions":"When brain knowledge is available:\n  - Adapt viral formats to match the brand's voice and tone\n  - Reference products and services in format adaptation\n  - Tailor adapted content for the target audience\n  - Apply brand visual style to production direction","produces":["video_insights","content_insights"]},"requirements":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"scrapecreators","type":"secret","displayName":"ScrapeCreators API Key","description":"Required for all social media data extraction via ScrapeCreators","required":true,"acquireUrl":"https://scrapecreators.com","envFallback":"SCRAPECREATORS_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"web-screenshot","displayName":"Web Screenshot","subtitle":"Screenshot any page at any viewport","about":"**Web Screenshot** captures pixel-perfect screenshots of any URL with full JavaScript rendering. Take a single screenshot at any viewport size, or capture the same page across desktop, tablet, and mobile in a single call for responsive design review.\n\nUnlike browser-based screenshots that miss lazy-loaded content or cut off at the viewport, this tool renders the page completely before capturing — including JS-heavy apps, SPAs, and content that loads on scroll. It supports full-page captures, retina resolution, and configurable wait times for slow-loading pages.\n\n### What you can do\n- **capture** — screenshot a single URL at desktop, tablet, mobile, or a custom viewport size; full-page and retina options available\n- **capture_responsive** — screenshot the same URL at multiple viewports in one call, returning all sizes together\n\n### Who it's for\nDesigners doing visual QA across breakpoints. Developers checking how a deploy looks before sharing with stakeholders. Marketers capturing competitor landing pages for competitive research. Teams building visual regression testing into their workflows. Anyone who needs a rendered image of a web page without opening a browser.\n\n### How to use it\n1. For a single screenshot, use **capture** with the URL and viewport preset (desktop, tablet, or mobile)\n2. For responsive review across all breakpoints, use **capture_responsive** to get desktop, tablet, and mobile in one request\n3. Add full_page: true to capture the entire scrolling page, not just the visible area\n4. Set device_scale_factor: 2 for retina-quality output; use jpeg for smaller files, png for sharp text\n\n### Getting started\nAll skills are ready to use without any setup. Pass a fully qualified URL (including https://) and choose a viewport.","version":"0.02","categories":["media","development"],"currency":"USD","skills":[{"name":"capture","displayName":"Capture Screenshot","description":"Take a screenshot of a single URL at a specified viewport size. Supports desktop, tablet, mobile, and custom viewport dimensions with configurable image format and retina scaling.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to screenshot. Must be a fully qualified URL (e.g. https://example.com)."},"viewport":{"type":"string","enum":["desktop","tablet","mobile","custom"],"description":"Viewport preset to use. desktop=1440x900, tablet=768x1024, mobile=390x844. Use \"custom\" with width/height for arbitrary sizes.","default":"desktop"},"width":{"type":"number","description":"Custom viewport width in pixels. Only used when viewport is \"custom\"."},"height":{"type":"number","description":"Custom viewport height in pixels. Only used when viewport is \"custom\"."},"full_page":{"type":"boolean","description":"Capture the full scrolling page instead of just the visible viewport.","default":false},"image_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format.","default":"png"},"wait_for":{"type":"number","description":"Milliseconds to wait after page load for JS rendering to complete.","default":2000},"device_scale_factor":{"type":"number","description":"Device pixel ratio for retina/HiDPI screenshots. 2 produces @2x images.","default":2}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Screenshot a website at desktop resolution","input":{"url":"https://example.com"}},{"description":"Full-page mobile screenshot in JPEG format","input":{"url":"https://example.com","viewport":"mobile","full_page":true,"image_format":"jpeg"}},{"description":"Custom viewport screenshot","input":{"url":"https://example.com","viewport":"custom","width":1920,"height":1080}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local file path to the screenshot image (auto-uploaded to S3 by asset pipeline)"},"width":{"type":"number","description":"Viewport width used for the capture"},"height":{"type":"number","description":"Viewport height used for the capture"},"url":{"type":"string","description":"The URL that was screenshotted"},"viewport":{"type":"string","description":"Viewport preset that was used"}}},"returns":"Screenshot image path (auto-uploaded to S3), viewport dimensions, URL, and viewport preset used"},{"name":"capture_responsive","displayName":"Capture Responsive Screenshots","description":"Screenshot the same URL at multiple viewport sizes in one call. Efficiently reuses a single browser session across all viewports. Returns an array of screenshots for desktop, tablet, and mobile.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to screenshot. Must be a fully qualified URL (e.g. https://example.com)."},"viewports":{"type":"array","items":{"type":"string","enum":["desktop","tablet","mobile"]},"description":"Array of viewport presets to capture. Defaults to all three: desktop, tablet, mobile."},"full_page":{"type":"boolean","description":"Capture the full scrolling page instead of just the visible viewport.","default":false},"image_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format for all screenshots.","default":"png"},"wait_for":{"type":"number","description":"Milliseconds to wait after page load for JS rendering to complete.","default":2000}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":20,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Responsive screenshots at all viewports","input":{"url":"https://example.com"}},{"description":"Only desktop and mobile, full-page","input":{"url":"https://example.com","viewports":["desktop","mobile"],"full_page":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"screenshots":{"type":"array","description":"Array of captured screenshots, one per viewport","items":{"type":"object","properties":{"viewport":{"type":"string","description":"Viewport preset name"},"width":{"type":"number","description":"Viewport width used"},"height":{"type":"number","description":"Viewport height used"},"image_path":{"type":"string","description":"Local file path to the screenshot (auto-uploaded to S3)"}}}},"url":{"type":"string","description":"The URL that was screenshotted"},"count":{"type":"number","description":"Number of screenshots captured"}}},"returns":"Array of screenshot image paths (auto-uploaded to S3) with viewport dimensions, URL, and total count"}],"icon":"/icons/web-screenshot.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Take a screenshot of [URL] on desktop, tablet, and mobile so I can see how it looks across different screen sizes.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"translate","displayName":"Translate","subtitle":"Accurate translation, 30+ languages","about":"**Translate** delivers professional-quality translations across 30+ languages with formality control, context hints, HTML preservation, and batch support. It goes well beyond word-for-word — use context to disambiguate meaning, control formality for formal or casual tone, and translate whole batches in one efficient call.\n\nIt handles everything from a single sentence to arrays of strings, auto-detects the source language, and preserves HTML and XML markup so translated content drops straight into your templates. For content pipelines, customer support tools, multilingual apps, and any AI assistant that needs to work across languages.\n\n### What you can do\n- **translate_text** — translate one or more texts into any target language with formality control, context hints, HTML handling, and batch support\n- **detect_language** — identify the language of any text with a sample English translation for verification\n- **list_languages** — list all supported language codes for source and target languages with formality support flags\n\n### Who it's for\nDevelopers, content teams, and AI builders who need reliable, nuanced translations in their workflows. Supports customer support automation, content localisation, multilingual research tools, and language detection pipelines.\n\n### How to use it\n1. Start with **list_languages** to find the correct language code for your target — codes like DE, FR, JA, EN-US, PT-BR\n2. Call **translate_text** with your text and target_lang — source language is auto-detected if you omit it\n3. Pass an array of strings for batch translation — far more efficient than multiple individual calls\n4. Use the context param to disambiguate words (e.g. \"banking context\" when translating \"bank\") and formality to control register\n\n### Getting started\nNo setup needed — the tool works immediately. Bring your own account for higher volume usage.","version":"0.02","categories":["data","communication","productivity"],"currency":"USD","skills":[{"name":"translate_text","displayName":"Translate Text","description":"Translate one or more texts into any target language. Supports auto-detection of source language, formality control (formal/informal), contextual hints for better accuracy, and HTML/XML tag handling. Pass an array for batch translation.","inputSchema":{"type":"object","properties":{"text":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Text to translate. A single string or an array of strings for batch translation."},"target_lang":{"type":"string","description":"Target language code (e.g. \"DE\", \"FR\", \"ES\", \"JA\", \"ZH\", \"EN-US\", \"EN-GB\", \"PT-BR\"). Use list_languages to see all supported codes."},"source_lang":{"type":"string","description":"Source language code. If omitted, the language is auto-detected."},"formality":{"type":"string","enum":["default","more","less","prefer_more","prefer_less"],"description":"Formality: \"more\" = formal, \"less\" = informal. \"prefer_more\"/\"prefer_less\" = best effort. Not all target languages supported."},"context":{"type":"string","description":"Context that influences translation but is not translated. Disambiguates meaning (e.g. \"banking context\" when translating \"bank\")."},"tag_handling":{"type":"string","enum":["html","xml"],"description":"Specifies tag handling: \"html\" or \"xml\". Tags are preserved and content within them is translated appropriately."},"split_sentences":{"type":"string","enum":["0","1","nonewlines"],"description":"Controls sentence splitting. \"0\" = no splitting, \"1\" = split on punctuation + newlines (default), \"nonewlines\" = split on punctuation only."},"preserve_formatting":{"type":"string","enum":["0","1"],"description":"Whether to preserve formatting. \"1\" = preserve original formatting (default)."},"model_type":{"type":"string","enum":["quality_optimized","latency_optimized","prefer_quality_optimized"],"description":"Model: \"quality_optimized\" = best quality, \"latency_optimized\" = fastest, \"prefer_quality_optimized\" = default."}},"required":["text","target_lang"]},"annotations":{},"examples":[{"description":"Translate English to German","input":{"text":"Hello, how are you?","target_lang":"DE"}},{"description":"Translate formally to French","input":{"text":"Please send me the report by Friday.","target_lang":"FR","formality":"more"}},{"description":"Batch translate to Japanese","input":{"text":["Good morning","Thank you","Goodbye"],"target_lang":"JA"}},{"description":"Translate with context for disambiguation","input":{"text":"I need to go to the bank.","target_lang":"ES","context":"The speaker is going to a financial institution to deposit money."}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"translations":{"type":"array","description":"Array of translation results with source text, translated text, and detected source language"},"target_language":{"type":"string","description":"Target language code used"},"total_characters":{"type":"number","description":"Total characters translated (for billing reference)"}}},"returns":"Translated text(s) with detected source language, target language used, and character count for billing"},{"name":"detect_language","displayName":"Detect Language","description":"Detect the language of a given text. Returns the detected language code and a sample translation to English for verification.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Text whose language you want to detect"}},"required":["text"]},"annotations":{},"examples":[{"description":"Detect the language of a German sentence","input":{"text":"Wie geht es Ihnen heute?"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"detected_language":{"type":"string","description":"Detected language code (e.g. \"DE\", \"FR\", \"JA\")"},"confidence":{"type":"string","description":"Confidence level of the detection"},"sample_text":{"type":"string","description":"Input text sample used for detection"},"sample_translation":{"type":"string","description":"English translation of the sample for verification"}}},"returns":"Detected language code with a sample English translation for verification"},{"name":"list_languages","displayName":"List Languages","description":"List all supported languages for translation. Can show source languages (translate from) or target languages (translate to) with formality support info.","inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["source","target"],"default":"target","description":"\"source\" = languages you can translate from, \"target\" = languages you can translate to (default). Target languages include formality support info."}},"required":[]},"annotations":{},"examples":[{"description":"List all target languages","input":{"type":"target"}},{"description":"List all source languages","input":{"type":"source"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"type":{"type":"string","description":"Whether these are source or target languages"},"count":{"type":"number","description":"Number of supported languages"},"languages":{"type":"array","description":"List of languages with code, name, and formality support (for target)"}}},"returns":"List of supported languages with codes, names, and formality support indicators"}],"icon":"/icons/translate.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Translate the following text into [language]: \"[text]\". Use a formal tone.","requirements":[{"name":"deepl","type":"secret","displayName":"DeepL API Key","description":"Optional: use your own DeepL key instead of the platform default","acquireUrl":"https://www.deepl.com/pro-api","envFallback":"DEEPL_API_KEY"}],"credentials":[{"name":"deepl","type":"secret","displayName":"DeepL API Key","description":"Optional: use your own DeepL key instead of the platform default","acquireUrl":"https://www.deepl.com/pro-api","envFallback":"DEEPL_API_KEY"}]},{"name":"persona-generator","displayName":"Persona Generator","subtitle":"AI personas with portrait sheets","about":"**Persona Generator** creates detailed customer personas with demographics, psychographics, goals, pain points, objections, messaging angles — and a multi-angle portrait turnaround sheet showing the person from front, left, right, and back. Describe your business and your target audience and get presentation-ready personas in minutes.\n\nEach persona is grounded in your specific business context, not generic templates. The AI uses your product description and audience brief to produce realistic, specific individuals — not abstract archetypes. Portraits are generated to match each persona's description and composited into a 2x2 turnaround grid suitable for strategy decks, product pitches, and design briefs.\n\n### What you can do\n- Generate complete persona profiles with demographics, psychographics, goals, and pain points\n- Get messaging angles and key objections for each persona — ready to use in copy and sales\n- Generate multi-angle portrait turnaround sheets (front/left/right/back) for each persona\n- Turn a real person into a reusable persona — supply their photos and get an identity-accurate turnaround sheet\n- Set locale to get culturally relevant names, locations, and references (UK, US, Japan, etc.)\n- Generate up to 5 personas per call\n- Review profiles before generating portraits using the two-step path\n\n### Who it's for\nMarketers, product managers, UX researchers, copywriters, and brand strategists who need well-defined target audience profiles to guide decision-making. Useful for new product launches, repositioning exercises, ad targeting strategy, and onboarding new team members to the audience.\n\n### How to use it\n1. Use **create_persona** for the fastest path — profiles and portraits in one async call\n2. Optionally use **generate_persona** first to review profiles before committing to image generation\n3. Pass the profile descriptions to **generate_images** to produce portrait sheets separately\n4. Set the locale parameter to get region-appropriate personas\n\n### Getting started\nNo API key required to get started — describe your business and audience to begin.","version":"0.04","categories":["marketing","ai"],"currency":"USD","skills":[{"name":"create_persona","displayName":"Create Persona (Full)","description":"Generate persona profiles with demographics, psychographics, goals, pain points, messaging, plus multi-angle portrait sheets (front/left/right/back). All in one call. Takes ~70s per persona. Async — poll with get_job_result. Render sheets inline via sheet_N_url.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"What the business does — product/service overview in 1-3 sentences"},"target_description":{"type":"string","description":"Who the target audience is — their role, context, and what they care about"},"count":{"type":"number","description":"Number of personas to generate (1-5, default: 1)","default":1},"locale":{"type":"string","description":"Target locale — affects names, locations, currency, cultural references (e.g. \"UK\", \"US\", \"Japan\")","default":"US"},"additional_context":{"type":"string","description":"Extra context — industry specifics, brand positioning, segments to focus on"},"style":{"type":"string","description":"Optional style direction for portrait images (e.g. \"professional headshot\", \"casual outdoor setting\")"}},"required":["business_description","target_description"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":360,"mode":"io"}},"examples":[{"description":"Generate 2 personas for an electrician booking platform","input":{"business_description":"An online platform for booking qualified electricians in London. Same-day availability, upfront pricing, all electricians are vetted and insured.","target_description":"Property owners and landlords who need electrical work done in their rental properties — EICR certificates, safety inspections, repairs.","count":2,"locale":"UK"}},{"description":"Generate a single persona for a DevOps SaaS","input":{"business_description":"CI/CD platform that deploys to any cloud in under 60 seconds. Zero-config, auto-scaling, SOC 2 compliant.","target_description":"Engineering leaders at mid-to-large companies who care about deployment reliability and reducing infrastructure overhead."}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"personas":{"type":"array","description":"Array of persona objects with profile data, turnaround_sheet_path, and portrait_path"}}},"returns":"Persona profiles with demographics, goals, pain points, messaging, and portrait paths. Render inline with sheet_N_url images — bold labels, short bullets, no separate document."},{"name":"generate_persona","displayName":"Generate Persona Profiles","description":"Generate detailed persona profiles — demographics, psychographics, goals, pain points, objections, behavior patterns, messaging angles, and a photo description for image generation. Use this when you want to review or edit profiles before generating portraits.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"What the business does — product/service overview in 1-3 sentences"},"target_description":{"type":"string","description":"Who the target audience is — their role, context, and what they care about"},"count":{"type":"number","description":"Number of personas to generate (1-5, default: 1)","default":1},"locale":{"type":"string","description":"Target locale — affects names, locations, currency, cultural references (e.g. \"UK\", \"US\", \"Japan\")","default":"US"},"additional_context":{"type":"string","description":"Extra context — industry specifics, brand positioning, segments to focus on"}},"required":["business_description","target_description"]},"annotations":{},"examples":[{"description":"Generate 3 personas for a property management SaaS","input":{"business_description":"Cloud-based property management software for landlords and letting agents. Handles tenant screening, rent collection, maintenance requests, and compliance tracking.","target_description":"UK landlords and letting agents managing residential rental portfolios of 5-50 properties.","count":3,"locale":"UK"}},{"description":"Generate a single persona for a fitness app","input":{"business_description":"AI-powered personal training app with custom workout plans, nutrition tracking, and progress photos.","target_description":"Health-conscious adults aged 25-45 who want to get fit but struggle with consistency and motivation."}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"personas":{"type":"array","description":"Array of persona profile objects including photoDescription"},"count":{"type":"number","description":"Number of personas generated"}}},"returns":"Array of persona profiles with demographics, psychographics, goals, pain points, behavior, messaging angles, and photoDescription for portrait generation"},{"name":"generate_images","displayName":"Generate Persona Turnaround Sheets","description":"Generate multi-angle turnaround sheets (front/left/right/back) as a 2x2 grid. Pass reference photos via image_urls or persona_file_id to preserve a real person's facial identity instead of inventing a face. ~70s/persona, async — poll get_job_result, render via sheet_N_url.","inputSchema":{"type":"object","properties":{"descriptions":{"type":"array","description":"Photo description strings, one per persona (typically each persona's photoDescription). Optional when reference images are supplied.","items":{"type":"string"}},"image_urls":{"type":"array","items":{"type":"string"},"description":"Reference photos of a real person — ToolRouter file IDs or hosted HTTP(S) URLs. Preserves their facial identity; produces one sheet."},"persona_file_id":{"type":"string","description":"Optional saved persona file from list_personas. Resolved to its image automatically and used as the identity reference for the turnaround sheet."},"style":{"type":"string","description":"Optional style direction applied to all portraits (e.g. \"professional headshot\", \"casual outdoor\")"}},"required":[]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Generate turnaround sheets from persona descriptions","input":{"descriptions":["A 42-year-old South Asian man with short greying hair, wearing a navy polo shirt. Standing in front of a terraced house, holding a set of keys. Friendly but tired expression.","A 35-year-old white woman with shoulder-length brown hair, wearing a blazer over a casual top. Sitting at a desk with a laptop, natural office lighting."]}},{"description":"Generate a single turnaround sheet with style override","input":{"descriptions":["A 28-year-old Black woman with natural hair, wearing athletic wear. Checking her phone after a workout, slight smile."],"style":"warm golden hour lighting, outdoor park setting"}},{"description":"Build an identity-accurate turnaround sheet of a real person from their photos","input":{"image_urls":["https://example.com/founder-photo-1.jpg","https://example.com/founder-photo-2.jpg"],"descriptions":["Wearing a charcoal crew-neck jumper, relaxed confident expression"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"portraits":{"type":"array","description":"Array of portrait objects with sheet_path (2x2 grid), front_path, left_path, right_path, back_path, and description"}}},"returns":"Portrait objects with turnaround sheet (2x2 grid) and per-angle image paths. With reference photos, the sheet preserves the real person's identity. Display inline via sheet_N_url."}],"workflow":["create_persona","generate_persona → generate_images"],"icon":"/icons/persona-generator.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-21","changes":["Enhanced realism prompts for portrait generation — skin pores, eye detail, hair texture, vellus hairs, natural imperfections"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.04","date":"2026-05-18","changes":["generate_images: turn a real person into a turnaround sheet — pass reference photos via image_urls or a saved persona file, and the sheet preserves their actual facial identity across all four angles instead of inventing a face"]}],"premadePrompt":"Create 2 customer personas for my business: [describe your product or service]. My target audience is [describe who you want to reach]. Include demographics, goals, pain points, and portrait images.","acceptsImageReferences":true,"imageReferenceSkills":["generate_images"],"imageReferencesKey":"image_urls","imageReferencesMax":4,"brain":{"instructions":"When brain knowledge is available:\n  - Reference the user's existing customer segments and demographics\n  - Apply knowledge of products, services, and market positioning\n  - Tailor persona detail to the user's industry and business context","produces":["audience_insights"],"followEdges":true},"requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}]},{"name":"poetry-cinema","displayName":"Poetry Cinema","subtitle":"Poetry to vertical micro-cinema films","about":"**Poetry Cinema** turns any poem into a fully assembled 30-second vertical short film. The pipeline takes your poem from raw text all the way to a finished micro-cinema video — scene breakdown, AI storyboard images, animated video clips, text overlays, voiceover narration, ambient sound, and final assembly with transitions and fade to black.\n\nThe production follows a four-phase workflow with review gates between each phase. Scene breakdown assigns timing, emotional beats, and colour phases to each line. Storyboard generation creates visual references for every scene. Video generation animates each storyboard into a clip. The final assembly stitches everything together with breathing text overlays, narration, and sound design.\n\n### What you can do\n- Break any poem into timed scenes with emotional arcs and colour phases\n- Define recurring characters with multi-angle portrait turnaround sheets for visual consistency\n- Generate storyboard images for each scene in a consistent visual style\n- Animate storyboard images into short video clips\n- Add text overlays, voiceover narration, and ambient sound to each clip\n- Assemble the final vertical film with transitions and fade to black\n- Resume an existing project and pick up from where you left off\n\n### Who it's for\nPoets, spoken word artists, filmmakers, content creators, and literary organisations who want to turn written work into shareable vertical video. Also useful for publishers creating book trailers, arts organisations producing digital content, and educators bringing poetry to life for students.\n\n### How to use it\n1. If returning to a project, use **resume_project** first — it reads your saved files and tells you the next step\n2. Use **create_project** to set visual style, or skip straight to **break_poem** with your poem text\n3. Review the scene breakdown, then use **write_script** for detailed visual direction per scene\n4. Progress through **generate_storyboard**, **generate_scenes**, **add_layers**, and **assemble_film** with reviews between each phase\n\n### Getting started\nNo API key required to get started — the tool uses the platform's default image and video models.","version":"0.06","categories":["media"],"currency":"USD","skills":[{"name":"resume_project","displayName":"Resume Project","description":"Check what already exists for a project and determine the next step. Agent reads user files via MCP tools and passes contents here. Returns what's ready, what's missing, and the next skill to call with pre-loaded inputs.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier to resume"},"poem_name":{"type":"string","description":"Specific poem to resume (optional)"},"project_config":{"type":"object","description":"Config JSON read from user files (if it exists)"},"personas":{"type":"array","description":"Persona JSONs read from user files (if they exist)"},"scenes":{"type":"array","description":"Scenes JSON read from user files (if it exists)"},"script":{"type":"object","description":"Script JSON read from user files (if it exists)"},"storyboard_images":{"type":"array","description":"Storyboard image metadata from user files (if they exist)"}},"required":["project_name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Resume a project for a new poem","input":{"project_name":"the-way-through","poem_name":"bloodline","project_config":{"visual_style":"scratch cinema"},"personas":[{"persona_name":"lou","front_url":"https://picsum.photos/id/177/800/800.jpg"}]}},{"description":"Check project state without a specific poem","input":{"project_name":"the-way-through"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"next_skill":{"type":"string","description":"The next skill to call"},"next_inputs":{"type":"object","description":"Pre-loaded inputs for the next skill"},"message":{"type":"string","description":"Human-readable status summary"}}},"returns":"Project state summary with next_skill and pre-loaded next_inputs ready to pass to the next call."},{"name":"create_project","displayName":"Create Project","description":"Set up a new poetry cinema project with production bible configuration. Uses scratch cinema defaults or parses an uploaded production bible document to extract visual style, colour worlds, and film rules.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier (kebab-case, e.g. \"the-way-through\")"},"production_bible_text":{"type":"string","description":"Full text of a production bible document to parse with LLM. Paste the content directly."},"visual_style":{"type":"string","description":"Visual style description. Default: scratch cinema (extreme scratchy ball-point pen texture, dense cross-hatching, raw and tactile)"},"aspect_ratio":{"type":"string","description":"Frame aspect ratio. Default: \"9:16\" (vertical)","default":"9:16"},"target_duration":{"type":"number","description":"Default film length in seconds. Default: 30","default":30},"colour_worlds":{"type":"object","description":"Phase-to-colour mappings. Keys = emotional states, values = colours. E.g. { \"oppression\": \"cold greys\", \"memory\": \"indigo\" }"}},"required":["project_name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Create project with scratch cinema defaults","input":{"project_name":"the-way-through"}},{"description":"Create project from production bible text","input":{"project_name":"the-way-through","production_bible_text":"Vertical Micro-Cinema. 9:16 format. Scratch cinema aesthetic..."}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier"},"config_saved":{"type":"boolean","description":"Whether config was saved to files"},"visual_style":{"type":"string","description":"The resolved visual style"},"film_rules":{"type":"array","description":"Array of film rule descriptions"}}},"returns":"Project configuration saved to files with visual style and film rules"},{"name":"define_persona","displayName":"Define Persona","description":"Define a recurring or per-poem character and generate turnaround sheets (front/left/right/back portraits) for visual consistency across scenes. Uses the persona-generator tool for turnaround sheet creation. Takes ~70s per persona. Async — poll with get_job_result.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Which project this persona belongs to"},"persona_name":{"type":"string","description":"Character identifier (kebab-case, e.g. \"jeronimo\")"},"description":{"type":"string","description":"Visual description: age, ethnicity, build, clothing, distinguishing features"},"age_variants":{"type":"array","items":{"type":"string"},"description":"Generate the persona at different ages, e.g. [\"child\", \"teenager\", \"adult\", \"elderly\"]"},"reference_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["project_name","persona_name","description"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Define protagonist at multiple ages","input":{"project_name":"the-way-through","persona_name":"lou","description":"British woman, art-school background, expressive face with kind grey eyes, layered clothing, natural hair with grey streaks","age_variants":["child","young-adult","middle-aged","elderly"]}},{"description":"Define a poem-specific character","input":{"project_name":"the-way-through","persona_name":"jeronimo","description":"Middle-aged man, weathered face with spark in eyes, jovial grin, layered worn clothing, sitting low in frame"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"persona_name":{"type":"string","description":"Character identifier"},"sheet_url":{"type":"string","description":"Turnaround sheet URL (2x2 grid)"},"front_url":{"type":"string","description":"Front portrait URL"}}},"returns":"Persona definition with turnaround sheet URLs saved to project files. Render sheets inline via sheet_url."},{"name":"break_poem","displayName":"Break Poem into Scenes","description":"Divide a poem into ~12 scenes with timing, emotional arc (4-beat: hook/setup/disruption/release), and colour phase assignments. Poem text can be passed directly or read from an uploaded file. Saves scenes.json to project files.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier. If omitted, uses scratch cinema defaults."},"poem_name":{"type":"string","description":"Identifier for this poem (kebab-case, e.g. \"not-a-nobody\")"},"poem_text":{"type":"string","description":"The full poem text — paste the complete poem here"},"poem_title":{"type":"string","description":"Human-readable title of the poem"},"target_duration":{"type":"number","description":"Target film duration in seconds. Default: 30","default":30},"project_config":{"type":"object","description":"Config object from create_project output. If omitted, uses scratch cinema defaults."}},"required":["poem_name","poem_text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Break down a poem","input":{"poem_name":"not-a-nobody","poem_text":"He broke his back\non a building site.\n\nLaid up for months\nin a hospital bed.\n\nFlat gone.\nWife gone.\nTools sold.","poem_title":"Not A Nobody"}},{"description":"Break a poem with custom duration and project config","input":{"poem_name":"bloodline","poem_text":"My grandmother carried water\nfrom the well at dawn.\n\nHer mother before her.\nHer mother before that.","poem_title":"Bloodline","target_duration":20,"project_name":"the-way-through"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"poem_name":{"type":"string","description":"Poem identifier"},"scene_count":{"type":"number","description":"Number of scenes created"},"total_duration":{"type":"number","description":"Total duration in seconds"},"scenes":{"type":"array","description":"Array of scene objects with line_text, timing, beat, colour_phase"}}},"returns":"Scene breakdown with timing, emotional beats, and colour phases saved to scenes.json"},{"name":"write_script","displayName":"Write Script","description":"Generate the full storyboard document from the scene breakdown — detailed visual descriptions, camera direction, sound design, and text treatment per scene. Reads scenes.json from project files. Saves script.json. This completes Phase 1 (Pre-production) — user should review before proceeding.","inputSchema":{"type":"object","properties":{"poem_name":{"type":"string","description":"Poem identifier"},"scenes":{"type":"array","description":"Scenes array from break_poem output — pass it directly"},"project_config":{"type":"object","description":"Config object from create_project output. If omitted, uses scratch cinema defaults."},"personas":{"type":"array","description":"Array of persona objects from define_persona output (optional)"}},"required":["poem_name","scenes"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Generate script from scene breakdown","input":{"poem_name":"not-a-nobody","scenes":[{"scene_index":0,"line_text":"He broke his back on a building site.","start_sec":0,"end_sec":3,"beat":"hook","colour_phase":"cold greys","emotional_note":"physical collapse","characters":[]}]}},{"description":"Generate script with personas for character consistency","input":{"poem_name":"bloodline","scenes":[{"scene_index":0,"line_text":"My grandmother carried water from the well at dawn.","start_sec":0,"end_sec":4,"beat":"setup","colour_phase":"warm ochre","emotional_note":"quiet labour","characters":["grandmother"]}],"personas":[{"persona_name":"grandmother","description":"Elderly woman, wiry frame, deep lines around her eyes, headscarf"}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"poem_name":{"type":"string","description":"Poem identifier"},"script_saved":{"type":"boolean","description":"Whether script was saved to files"},"scene_count":{"type":"number","description":"Number of scenes in the script"},"message":{"type":"string","description":"Review instructions for the user"}}},"returns":"Storyboard script saved to script.json. User should review before proceeding to storyboard generation."},{"name":"generate_storyboard","displayName":"Generate Storyboard Images","description":"Generate one storyboard image per scene in the project's visual style. Includes persona references for character consistency. Use skip_scenes for user-uploaded images. Completes Phase 2 — review before proceeding.","inputSchema":{"type":"object","properties":{"poem_name":{"type":"string","description":"Poem identifier"},"script":{"description":"Script from write_script output. Pass the full script object (preferred) or the bare scenes array."},"project_config":{"type":"object","description":"Config object from create_project output. If omitted, uses scratch cinema defaults."},"personas":{"type":"array","description":"Array of persona objects from define_persona output (optional, for character consistency)"},"style_override":{"type":"string","description":"Additional prompt text appended to the visual style (for experimentation)"},"skip_scenes":{"type":"array","items":{"type":"number"},"description":"Scene indices to skip — use when the user has uploaded their own images for those scenes"}},"required":["poem_name","script"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Generate storyboard from script","input":{"poem_name":"not-a-nobody","script":{"scenes":[{"scene_index":0,"line_text":"He broke his back.","visual_description":"Exterior. Building site. Man mid-fall.","camera_direction":"Wide shot","characters_present":[],"sound_design":"distant traffic","text_treatment":"center, fade in slowly","start_sec":0,"end_sec":3,"beat":"hook","colour_phase":"cold greys"}]}}},{"description":"Generate storyboard skipping scenes the user already uploaded","input":{"poem_name":"bloodline","script":{"scenes":[{"scene_index":0,"line_text":"My grandmother carried water.","visual_description":"Dawn. Rural well.","camera_direction":"Medium shot","characters_present":["grandmother"],"sound_design":"birds, bucket chain","text_treatment":"lower third","start_sec":0,"end_sec":4,"beat":"setup","colour_phase":"warm ochre"}]},"skip_scenes":[0]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"poem_name":{"type":"string","description":"Poem identifier"},"images_generated":{"type":"number","description":"Number of images generated"},"storyboard_images":{"type":"array","description":"Array of image objects with scene_index, image_url, image_page"},"message":{"type":"string","description":"Review instructions"}}},"returns":"Storyboard images saved to project files. User should review before proceeding to video generation."},{"name":"generate_scenes","displayName":"Generate Scene Video Clips","description":"Animate each storyboard image into a short video clip. Takes 2-5 minutes. Runs asynchronously — returns a job_id, poll with get_job_result until complete. If videos are still generating when the job completes, use check_scenes to poll for them.","inputSchema":{"type":"object","properties":{"poem_name":{"type":"string","description":"Poem identifier"},"script":{"description":"Script from write_script output. Pass the full script object (preferred) or the bare scenes array."},"project_config":{"type":"object","description":"Config object from create_project output. If omitted, uses scratch cinema defaults."},"motion_intensity":{"type":"string","description":"\"subtle\", \"moderate\", or \"dynamic\". Default: \"subtle\" (matches observational aesthetic)","default":"subtle","enum":["subtle","moderate","dynamic"]},"model":{"type":"string","description":"Video model to use. Call list_models for options. Omit for the recommended default."}},"required":["poem_name","script"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":300,"timeoutSeconds":900,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Generate video clips from script","input":{"poem_name":"not-a-nobody","script":{"scenes":[{"scene_index":0,"line_text":"He broke his back.","visual_description":"Exterior. Building site. Man mid-fall.","camera_direction":"Wide shot","characters_present":[],"sound_design":"distant traffic","text_treatment":"center","start_sec":0,"end_sec":3,"beat":"hook","colour_phase":"cold greys"}]}}},{"description":"Generate dynamic motion clips","input":{"poem_name":"bloodline","motion_intensity":"dynamic","script":{"scenes":[{"scene_index":0,"line_text":"My grandmother carried water.","visual_description":"Dawn. Rural well.","camera_direction":"Tracking shot","characters_present":[],"sound_design":"birds","text_treatment":"lower third","start_sec":0,"end_sec":4,"beat":"setup","colour_phase":"warm ochre"}]}}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"completed_clips":{"type":"array","description":"Array of completed video clip objects"},"pending_videos":{"type":"array","description":"Array of pending video objects with fal_request_id for polling via check_scenes"}}},"returns":"Completed video clips and/or pending video references. Use check_scenes to poll for pending videos."},{"name":"check_scenes","displayName":"Check Pending Scene Clips","description":"Poll for pending video clips that are still generating. Pass the pending_videos array from generate_scenes output. Returns completed clips and any still-pending references.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier. For saving completed clips to the right folder."},"poem_name":{"type":"string","description":"Poem identifier"},"pending_videos":{"type":"array","description":"Array of pending video objects from generate_scenes output","items":{"type":"object","properties":{"fal_request_id":{"type":"string","description":"Request ID for polling"},"fal_model_id":{"type":"string","description":"Model ID used for generation"},"scene_index":{"type":"number","description":"Scene index (0-based)"}}}}},"required":["poem_name","pending_videos"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check pending scene clips","input":{"poem_name":"not-a-nobody","pending_videos":[{"fal_request_id":"abc123","fal_model_id":"fal-ai/kling-video/v3/pro/text-to-video","scene_index":1}]}},{"description":"Check multiple pending scenes","input":{"poem_name":"bloodline","pending_videos":[{"fal_request_id":"def456","fal_model_id":"fal-ai/kling-video/v3/pro/text-to-video","scene_index":0},{"fal_request_id":"ghi789","fal_model_id":"fal-ai/kling-video/v3/pro/text-to-video","scene_index":2}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"completed":{"type":"array","description":"Newly completed clips"},"still_pending":{"type":"array","description":"Videos still generating"}}},"returns":"Completed clips saved to project files, plus any still-pending references for further polling"},{"name":"add_layers","displayName":"Add Text, Voice & Sound","description":"Composite breathing text overlays, voiceover narration, and ambient sound onto each video clip. Completes Phase 3 — review layered clips before final assembly.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier. Reads config for text treatment rules."},"poem_name":{"type":"string","description":"Poem identifier. Reads clips + script from this poem's folder."},"voice_id":{"type":"string","description":"Voice ID for narration. If omitted, uses a default poetic voice."},"voice_sample_url":{"type":"string","description":"URL of a voice sample for cloning (uploaded to ToolRouter files). The tool server CAN fetch any public URL — always pass it."},"narration_speed":{"type":"number","description":"TTS speed multiplier. Default: 0.9 (slightly slower for poetry)","default":0.9},"ambient_style":{"type":"string","description":"Sound design direction. Default: derived from script. E.g. \"urban naturalistic\", \"wind and footsteps\", \"minimal piano\""}},"required":["poem_name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":180,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Add layers with default voice","input":{"project_name":"the-way-through","poem_name":"not-a-nobody"}},{"description":"Add layers with custom voice clone","input":{"project_name":"the-way-through","poem_name":"not-a-nobody","voice_sample_url":"https://api.toolrouter.com/v1/assets/abc123","narration_speed":0.85}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"layered_clips":{"type":"array","description":"Array of layered clip objects with video_url"},"message":{"type":"string","description":"Review instructions"}}},"returns":"Layered clips with text, voiceover, and sound design. User should review before final assembly."},{"name":"assemble_film","displayName":"Assemble Final Film","description":"Stitch all layered clips into the final vertical micro-cinema film. Adds transitions (brief breath between scenes), holds final frame with last poetry line, fades to black. This completes Phase 4 (Final) — the finished film.","inputSchema":{"type":"object","properties":{"project_name":{"type":"string","description":"Project identifier. Reads config for transition style."},"poem_name":{"type":"string","description":"Poem identifier. Reads layered clips from this poem's folder."},"transition_style":{"type":"string","description":"Transition type. Default: \"cut\" with 0.5s breath (black) between scenes","default":"cut"},"hold_final_frame":{"type":"number","description":"Seconds to hold the final frame with last poetry line. Default: 2","default":2},"fade_to_black":{"type":"number","description":"Final fade duration in seconds. Default: 1","default":1}},"required":["poem_name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Assemble final film with defaults","input":{"project_name":"the-way-through","poem_name":"not-a-nobody"}},{"description":"Assemble with longer hold on final line","input":{"project_name":"the-way-through","poem_name":"not-a-nobody","hold_final_frame":3,"fade_to_black":1.5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"film_path":{"type":"string","description":"Local path for asset upload"},"film_url":{"type":"string","description":"Permanent ToolRouter URL"},"film_page":{"type":"string","description":"Shareable download page with OG preview"},"duration_seconds":{"type":"number","description":"Final film duration"}}},"returns":"The finished vertical micro-cinema film. Show film_page to the user for sharing and download."},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["resume_project","create_project → define_persona → break_poem → write_script → generate_storyboard → generate_scenes → add_layers → assemble_film","break_poem → write_script → generate_storyboard → generate_scenes → add_layers → assemble_film","list_models"],"icon":"/icons/poetry-cinema.webp","changelog":[{"version":"0.01","date":"2026-04-02","changes":["Initial release — poetry-to-film pipeline with scratch cinema defaults, 4-phase verification gates"]},{"version":"0.02","date":"2026-04-03","changes":["Fix: data flows through inputs/outputs. Better error messages. Parallel persona generation. Added resume_project for returning users."]},{"version":"0.03","date":"2026-04-04","changes":["Clearer error when colour_worlds is passed as an array instead of a key-value object.","Fix: generated scene videos now save to ToolRouter storage (were only saved to fal.ai).","Fix: add_layers and assemble_film no longer fail with phase gate errors after running the pipeline normally."]},{"version":"0.04","date":"2026-04-05","changes":["Personas from your library are now auto-discovered and injected — pass persona_file_id instead of manual persona fields"]},{"version":"0.05","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across scenes"]},{"version":"0.06","date":"2026-04-07","changes":["Upgraded to Nano Banana 2 for storyboard images and Kling 3.0 Pro for video clips — higher quality output"]}],"premadePrompt":"Turn this poem into a short vertical film: [paste your poem or provide the poem title and file]. Walk me through each stage — scene breakdown, storyboard images, and the final assembled film.","usesPersonas":true,"usesStyleReferences":true,"styleReferenceSkills":["generate_storyboard","generate_scenes"],"brain":{"instructions":"When brain knowledge is available:\n    - Use visual style preferences for scene direction\n    - Match the creator's artistic tone and aesthetic\n    - Reference any style guides or mood references","produces":["creative_insights"]},"requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"recipe-finder","displayName":"Recipe Finder","subtitle":"Recipes by dish or ingredients","about":"**Recipe Finder** searches thousands of recipes by dish name, ingredients you have on hand, cuisine, or category. It also pulls trending recipes daily from 12 top food blogs so you can discover what the food community is cooking right now.\n\nWhether you're deciding what to make with the ingredients in your fridge or looking for a specific dish with full step-by-step instructions, this tool finds it with all the details you need: ingredients, measurements, cooking steps, images, and video links where available.\n\n### What you can do\n- **search_recipes** — look up any recipe by name or keyword and get full instructions\n- **search_by_ingredients** — find recipes that use the ingredients you already have\n- **filter_by_cuisine** — browse recipes by cuisine like Italian, Japanese, or Mexican\n- **filter_by_category** — browse by meal type like Vegetarian, Dessert, or Seafood\n- **trending_recipes** — latest recipes from top food blogs, updated daily\n- **recipe_of_the_day** — a freshly featured recipe that changes every day\n- **random_recipe** — a surprise recipe suggestion\n- **list_categories** — see all available meal categories\n\n### Who it's for\nHome cooks deciding what to make with what they have, food enthusiasts discovering new dishes and cuisines, meal planners building weekly menus, and anyone who wants reliable recipes with clear instructions rather than SEO-bloated blog posts.\n\n### How to use it\n1. If you have specific ingredients, call **search_by_ingredients** with a comma-separated list to find matching recipes.\n2. If you know what you want to make, call **search_recipes** with the dish name for full details.\n3. For daily inspiration, call **trending_recipes** to see what food bloggers are publishing right now.\n\n### Getting started\nCall **search_by_ingredients** with ingredients like \"chicken, garlic, rice\" or **search_recipes** with any dish name — no setup required.","version":"0.05","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_recipes","displayName":"Search Recipes","description":"Search recipes by name or keyword. Returns matching recipes with full details including name, category, cuisine, instructions, ingredients with measurements, thumbnail image, and optional YouTube link.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Recipe name or keyword to search for (e.g. \"chicken\", \"pasta carbonara\", \"chocolate cake\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for chicken recipes","input":{"query":"chicken"}},{"description":"Find a specific recipe by name","input":{"query":"pasta carbonara"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"recipes":{"type":"array","description":"Matching recipes with full details","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique meal ID"},"name":{"type":"string","description":"Recipe name"},"category":{"type":"string","description":"Meal category (e.g. Chicken, Dessert, Pasta)"},"cuisine":{"type":"string","description":"Cuisine/area of origin (e.g. Italian, Japanese)"},"instructions":{"type":"string","description":"Full cooking instructions"},"ingredients":{"type":"array","description":"List of ingredients with measurements","items":{"type":"object","properties":{"ingredient":{"type":"string","description":"Ingredient name"},"measure":{"type":"string","description":"Amount/measurement"}}}},"thumbnail":{"type":"string","description":"URL to recipe thumbnail image"},"youtube_url":{"type":"string","description":"YouTube video URL (if available)"},"source_url":{"type":"string","description":"Original recipe source URL (if available)"},"tags":{"type":"array","description":"Recipe tags","items":{"type":"string"}}}}},"count":{"type":"number","description":"Number of recipes found"}}},"returns":"Matching recipes with name, category, cuisine, full instructions, ingredients with measurements, thumbnail, and optional YouTube/source links"},{"name":"random_recipe","displayName":"Random Recipe","description":"Get a random recipe for meal inspiration. Returns a single recipe with full details including name, category, cuisine, cooking instructions, ingredients with measurements, thumbnail image, and video link.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"Get a random meal idea","input":{}},{"description":"Random recipe for dinner inspiration","input":{}}],"pricing":"free","returns":"A single random recipe with full details including name, category, cuisine, instructions, ingredients, thumbnail, and optional YouTube link"},{"name":"filter_by_ingredient","displayName":"Filter by Ingredient","description":"Find recipes that use a specific ingredient. Returns matching recipe names, IDs, and thumbnail images. Use search_recipes with the recipe name to get full details and instructions.","inputSchema":{"type":"object","properties":{"ingredient":{"type":"string","description":"Ingredient to filter by (e.g. \"chicken_breast\", \"salmon\", \"garlic\"). Use underscores for multi-word ingredients."}},"required":["ingredient"]},"annotations":{},"examples":[{"description":"Find recipes using chicken breast","input":{"ingredient":"chicken_breast"}},{"description":"Find recipes with salmon","input":{"ingredient":"salmon"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ingredient":{"type":"string","description":"The ingredient filtered on"},"recipes":{"type":"array","description":"Matching recipes (simplified — use search_recipes for full details)","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique meal ID"},"name":{"type":"string","description":"Recipe name"},"thumbnail":{"type":"string","description":"URL to recipe thumbnail image"}}}},"count":{"type":"number","description":"Number of recipes found"}}},"returns":"List of recipe names, IDs, and thumbnails that use the specified ingredient (simplified data — use search_recipes for full details)"},{"name":"filter_by_cuisine","displayName":"Filter by Cuisine","description":"Find recipes from a specific cuisine or region. Returns matching recipe names, IDs, and thumbnail images. Use search_recipes with the recipe name to get full cooking instructions and ingredients.","inputSchema":{"type":"object","properties":{"cuisine":{"type":"string","description":"Cuisine or area to filter by (e.g. \"Italian\", \"Japanese\", \"Mexican\", \"Indian\", \"French\", \"Chinese\")"}},"required":["cuisine"]},"annotations":{},"examples":[{"description":"Find Italian recipes","input":{"cuisine":"Italian"}},{"description":"Browse Japanese meals","input":{"cuisine":"Japanese"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"cuisine":{"type":"string","description":"The cuisine filtered on"},"recipes":{"type":"array","description":"Matching recipes (simplified — use search_recipes for full details)","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique meal ID"},"name":{"type":"string","description":"Recipe name"},"thumbnail":{"type":"string","description":"URL to recipe thumbnail image"}}}},"count":{"type":"number","description":"Number of recipes found"}}},"returns":"List of recipe names, IDs, and thumbnails from the specified cuisine (simplified data — use search_recipes for full details)"},{"name":"filter_by_category","displayName":"Filter by Category","description":"Find recipes in a specific category like Vegetarian, Dessert, Breakfast, Seafood, or Pasta. Returns matching recipe names, IDs, and thumbnail images. Use list_categories to see all available options.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Recipe category like 'Vegetarian', 'Dessert', 'Breakfast', 'Seafood', 'Pasta' — use list_categories to see all available options"}},"required":["category"]},"annotations":{},"examples":[{"description":"Find vegetarian recipes","input":{"category":"Vegetarian"}},{"description":"Browse dessert recipes","input":{"category":"Dessert"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"category":{"type":"string","description":"The category filtered on"},"recipes":{"type":"array","description":"Matching recipes (simplified — use search_recipes for full details)","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique meal ID"},"name":{"type":"string","description":"Recipe name"},"thumbnail":{"type":"string","description":"URL to recipe thumbnail image"}}}},"count":{"type":"number","description":"Number of recipes found"}}},"returns":"List of recipe names, IDs, and thumbnails in the specified category (simplified data — use search_recipes for full details)"},{"name":"list_categories","displayName":"List Categories","description":"List all available recipe categories with descriptions and thumbnail images. Useful for browsing what types of recipes are available before filtering.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"See all recipe categories","input":{}},{"description":"Browse available meal types","input":{}}],"pricing":"free","returns":"All recipe categories with names, descriptions, and thumbnail images"},{"name":"search_by_ingredients","displayName":"Search by Ingredients","description":"Find recipes from raw ingredients you have on hand. Pass up to 5 comma-separated ingredients and get recipes that use them — with full details including instructions, measurements, and images. Smart partial matching returns the best recipes even when no single recipe uses all ingredients together.","inputSchema":{"type":"object","properties":{"ingredients":{"type":"string","description":"Comma-separated list of ingredients you have (e.g. \"chicken, garlic, rice\" or \"salmon, lemon, dill\"). Max 5 ingredients."}},"required":["ingredients"]},"annotations":{},"examples":[{"description":"Find recipes with chicken, garlic, and rice","input":{"ingredients":"chicken, garlic, rice"}},{"description":"What can I make with salmon and lemon?","input":{"ingredients":"salmon, lemon"}},{"description":"Recipes using potatoes and cheese","input":{"ingredients":"potatoes, cheese"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ingredients":{"type":"array","description":"The parsed ingredient list","items":{"type":"string"}},"exact_match":{"type":"boolean","description":"Whether all results use every queried ingredient"},"recipes":{"type":"array","description":"Matching recipes with full details","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"cuisine":{"type":"string"},"instructions":{"type":"string"},"ingredients":{"type":"array","items":{"type":"object"}},"thumbnail":{"type":"string"},"matched_ingredients":{"type":"number","description":"Number of queried ingredients this recipe uses (only in partial matches)"}}}},"count":{"type":"number","description":"Number of recipes returned"},"total_matches":{"type":"number","description":"Total exact matches found (may exceed returned count)"}}},"returns":"Recipes matching the given ingredients with full details (instructions, measurements, images). Shows exact matches when possible, ranked partial matches otherwise."},{"name":"trending_recipes","displayName":"Trending Recipes","description":"Discover the latest recipes from 12 top food blogs updated daily. Aggregates fresh content from Pinch of Yum, Minimalist Baker, Smitten Kitchen, Budget Bytes, Serious Eats, RecipeTin Eats, and more. Optionally filter by cuisine keyword.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Number of recipes to return (1-50, default 20)"},"cuisine":{"type":"string","description":"Optional cuisine keyword to filter results (e.g. \"thai\", \"italian\", \"korean\")"}}},"annotations":{},"examples":[{"description":"Get latest trending recipes","input":{}},{"description":"Trending Korean recipes","input":{"cuisine":"korean"}},{"description":"Top 5 latest recipes","input":{"limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"recipes":{"type":"array","description":"Latest recipes from food blogs, sorted newest first","items":{"type":"object","properties":{"title":{"type":"string","description":"Recipe title"},"link":{"type":"string","description":"Full recipe URL on the source blog"},"description":{"type":"string","description":"Recipe summary/excerpt (up to 300 chars)"},"published":{"type":"string","description":"Publication date"},"source":{"type":"string","description":"Blog name"},"source_focus":{"type":"string","description":"What this blog specializes in"}}}},"count":{"type":"number"},"total_available":{"type":"number","description":"Total recipes available across all feeds"},"sources":{"type":"array","description":"All blog sources checked"}}},"returns":"Fresh recipes from top food blogs with title, link, description, publication date, and source. Updated daily from 12+ blogs."},{"name":"recipe_of_the_day","displayName":"Recipe of the Day","description":"Get a featured recipe of the day, freshly picked from top food blogs. Changes daily — same recipe for everyone on the same day. Includes 3 runner-up suggestions from different blogs.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"What should I cook today?","input":{}},{"description":"Get the recipe of the day","input":{}}],"pricing":"free","returns":"Featured recipe of the day with title, link, description, and source, plus 3 runner-up recipes from different blogs"}],"icon":"/icons/recipe-finder.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with search, random, filter by ingredient/cuisine, and category listing"]},{"version":"0.02","date":"2026-03-20","changes":["Added filter_by_category skill for browsing recipes by category","Improved filter_by_ingredient with plural/singular normalization and common ingredient aliases"]},{"version":"0.03","date":"2026-03-20","changes":["Added mince/ground meat/pepper/ham/sugar/flour ingredient aliases","Improved zero-result messages for cuisine and category filters with available options"]},{"version":"0.04","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.05","date":"2026-03-22","changes":["Added search_by_ingredients skill — find recipes from raw ingredients you have on hand","Added trending_recipes skill — daily fresh recipes from 12 top food blog RSS feeds","Added recipe_of_the_day skill — deterministic daily featured recipe from blog feeds"]}],"premadePrompt":"I have [ingredients, e.g. chicken, garlic, and rice] — what can I make? Or find me a good [cuisine] recipe for [dish name]."},{"name":"finance-data","displayName":"Finance Data","subtitle":"Markets, rates, commodities & macro","about":"**Finance Data** is a live macro and market data hub covering commodities, currencies, rates, equities, credit, and economic indicators in one tool. Use it for portfolio research, macro briefings, risk monitoring, and financial analysis without juggling multiple data sources.\n\nIt spans the full financial landscape: real-time prices for energy, metals, agriculture, indices, FX, and crypto; US yield curves with spread analysis; central bank benchmark rates across four institutions; employment and housing data; consumer sentiment; European government bond yields; crypto markets with Fear & Greed; COT positioning data; and the US federal budget. Historical data from official sources like FRED sits alongside real-time feeds.\n\n### What you can do\n- **live_prices** — real-time OHLCV prices for energy, metals, agriculture, indices, FX, crypto, and bond futures\n- **commodity_prices** — historical FRED commodity data\n- **treasury_yields** — US yield curve with spread and inversion analysis\n- **benchmark_rates** — SOFR, ESTER, SONIA, CORRA central bank rates\n- **exchange_rates** — live rates for 30+ currency pairs\n- **economic_indicators** — GDP, CPI, and unemployment for the US and global economies\n- **energy_markets** — EIA oil, gas, coal, and inventory data\n- **labor_market** — payrolls, initial claims, JOLTS, wages, and unemployment\n- **housing_market** — mortgage rates, Case-Shiller, housing starts, and existing sales\n- **crypto_markets** — top coins, Fear & Greed index, and DeFi data\n- **government_bonds**, **credit_conditions**, **precious_metals**, **leading_indicators**, and more\n\n### Who it's for\nPortfolio managers, macro analysts, quant researchers, financial journalists, and anyone building investment tools or market dashboards.\n\n### How to use it\n1. Call **live_prices** for current market levels across asset classes.\n2. Use **treasury_yields** and **economic_indicators** for macro context.\n3. Combine **labor_market** and **consumer_sentiment** for a complete economic picture.\n\n### Getting started\nCall **live_prices** with a list of symbols to get current prices immediately. Add an EIA key for richer energy data.","version":"0.06","categories":["finance","data"],"currency":"USD","skills":[{"name":"commodity_prices","displayName":"Commodity Prices","description":"Get live commodity prices from FRED. Covers oil (WTI, Brent), natural gas (Henry Hub, European TTF), gold, silver, copper, corn, wheat, soybeans, coffee, sugar, and nickel. Request a specific commodity for 30-day history, or omit for a snapshot of all prices.","inputSchema":{"type":"object","properties":{"commodity":{"type":"string","description":"Commodity to fetch (e.g. oil_wti, gold, copper, corn). Omit for all.","enum":["oil_wti","oil_brent","natural_gas","natural_gas_ttf","gold","silver","copper","corn","wheat","soybeans","coffee","sugar","nickel"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all commodity prices","input":{}},{"description":"Get WTI crude oil price history","input":{"commodity":"oil_wti"}},{"description":"Get European TTF natural gas price","input":{"commodity":"natural_gas_ttf"}},{"description":"Get gold price","input":{"commodity":"gold"}}],"pricing":"free","returns":"Commodity prices with name, FRED series ID, latest value, unit, and date. Single commodity includes 30-day history."},{"name":"treasury_yields","displayName":"Treasury Yields","description":"Get the full US Treasury yield curve from FRED. Covers 11 tenors from 1-month to 30-year, plus key spread indicators (10Y-2Y, 10Y-3M, High Yield OAS). Detects yield curve inversions automatically.","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Specific tenor to fetch. One of: 1m, 3m, 6m, 1y, 2y, 3y, 5y, 7y, 10y, 20y, 30y. Omit for full curve.","enum":["1m","3m","6m","1y","2y","3y","5y","7y","10y","20y","30y"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get full yield curve with spreads","input":{}},{"description":"Get 10-year Treasury yield","input":{"period":"10y"}},{"description":"Get 2-year Treasury yield","input":{"period":"2y"}}],"pricing":"free","returns":"Yield curve data with rates per tenor, key spreads (10Y-2Y, 10Y-3M, HY OAS), and inversion detection."},{"name":"benchmark_rates","displayName":"Benchmark Rates","description":"Get key central bank interest rates from the Federal Reserve, ECB, Bank of England, and Bank of Canada. US: SOFR, EFFR, OBFR. EU: ESTER, Main Refinancing Rate, Deposit Facility Rate. UK: Bank Rate, SONIA. CA: Policy Interest Rate, CORRA. Filter by region or get all.","inputSchema":{"type":"object","properties":{"region":{"type":"string","description":"Filter by region: us, eu, uk, ca, or all. Default: all.","enum":["us","eu","uk","ca","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all central bank rates","input":{}},{"description":"Get US rates (SOFR, EFFR)","input":{"region":"us"}},{"description":"Get ECB rates","input":{"region":"eu"}},{"description":"Get Bank of England rates","input":{"region":"uk"}},{"description":"Get Bank of Canada rates","input":{"region":"ca"}}],"pricing":"free","returns":"Benchmark interest rates grouped by region with rate name, value, date, and source."},{"name":"exchange_rates","displayName":"Exchange Rates","description":"Get foreign exchange rates for 30+ currencies sourced from the ECB via Frankfurter API. Supports custom base currency, symbol filtering, and historical date lookups.","inputSchema":{"type":"object","properties":{"base":{"type":"string","description":"Base currency code (e.g. USD, EUR, GBP). Default: USD."},"symbols":{"type":"string","description":"Comma-separated target currencies (e.g. \"EUR,GBP,JPY\"). Omit for all."},"date":{"type":"string","description":"Historical date in YYYY-MM-DD format. Omit for latest rates."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all rates with USD base","input":{}},{"description":"Get EUR/GBP/JPY rates","input":{"symbols":"EUR,GBP,JPY"}},{"description":"Get rates in EUR base","input":{"base":"EUR"}},{"description":"Get historical rates","input":{"date":"2026-01-15"}}],"pricing":"free","returns":"Exchange rates with base currency, date, and rates object mapping currency codes to values."},{"name":"economic_indicators","displayName":"Economic Indicators","description":"Get key economic indicators: GDP, GDP growth, inflation, unemployment, and CPI. US data from the Bureau of Labor Statistics. Global data from the World Bank. Supports any country by ISO code.","inputSchema":{"type":"object","properties":{"indicator":{"type":"string","description":"Specific indicator: gdp, inflation, unemployment, cpi, or all. Default: all.","enum":["gdp","inflation","unemployment","cpi","all"]},"country":{"type":"string","description":"ISO 2-letter country code (US, GB, DE, JP, CN, IN, BR, etc.) or \"global\" for major economies. Default: US."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all US economic indicators","input":{}},{"description":"Get US CPI data","input":{"indicator":"cpi"}},{"description":"Get UK GDP and inflation","input":{"country":"GB"}},{"description":"Get global GDP comparison","input":{"indicator":"gdp","country":"global"}}],"pricing":"free","returns":"Economic indicators with values, dates, and source attribution (BLS for US, World Bank for global)."},{"name":"energy_markets","displayName":"Energy Markets","description":"Get US energy market data from the EIA. Covers crude oil spot prices (WTI, Brent), retail gasoline/diesel prices, Henry Hub natural gas futures, electricity prices by sector, coal prices, and petroleum inventory levels including the Strategic Petroleum Reserve.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Data category: oil, gas, natural_gas, electricity, coal, or inventories. Default: oil.","enum":["oil","gas","natural_gas","electricity","coal","inventories"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get crude oil spot prices","input":{}},{"description":"Get retail gasoline prices","input":{"category":"gas"}},{"description":"Get natural gas futures","input":{"category":"natural_gas"}},{"description":"Get electricity retail prices","input":{"category":"electricity"}},{"description":"Get coal prices","input":{"category":"coal"}},{"description":"Get petroleum inventories","input":{"category":"inventories"}}],"pricing":"free","returns":"Energy market data points with period, product name, value, and units. Source: US EIA."},{"name":"cot_report","displayName":"COT Report","description":"Get CFTC Commitment of Traders positioning data showing how commercial hedgers and speculative traders are positioned in major futures markets. Covers energy, metals, agriculture, financials, and currencies. Updated weekly.","inputSchema":{"type":"object","properties":{"market":{"type":"string","description":"Filter by market keyword (e.g. \"wheat\", \"crude\", \"gold\", \"natural gas\", \"euro\", \"s&p\"). Omit for all major markets."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all major COT positions","input":{}},{"description":"Get crude oil positioning","input":{"market":"crude"}},{"description":"Get gold COT data","input":{"market":"gold"}},{"description":"Get wheat trader positions","input":{"market":"wheat"}}],"pricing":"free","returns":"COT report with open interest, commercial and non-commercial long/short positions, net positions, and changes. Source: CFTC."},{"name":"us_national_debt","displayName":"US National Debt","description":"Get US national debt figures and average interest rates on Treasury securities from the Treasury Fiscal Data API. Includes debt-to-the-penny (total, held by public, intragovernmental) and average coupon rates by security type.","inputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Data to fetch: debt (totals), interest_rates (avg coupon by security), or all. Default: all.","enum":["debt","interest_rates","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all debt and rate data","input":{}},{"description":"Get debt-to-the-penny","input":{"metric":"debt"}},{"description":"Get average interest rates","input":{"metric":"interest_rates"}}],"pricing":"free","returns":"US national debt figures (total, public, intragovernmental) and average interest rates by security type. Source: US Treasury."},{"name":"fed_balance_sheet","displayName":"Fed Balance Sheet","description":"Get the Federal Reserve balance sheet (SOMA holdings) from the New York Fed. Shows total holdings and breakdown by asset class: Treasury securities, mortgage-backed securities, agency debt, and more.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get current Fed balance sheet","input":{}}],"pricing":"free","returns":"Federal Reserve SOMA holdings with total value, asset class breakdown, and as-of date. Source: NY Fed."},{"name":"vix_index","displayName":"VIX Index","description":"Get the CBOE VIX (Volatility Index) from FRED. Returns daily values with summary stats and fear-level classification.","inputSchema":{"type":"object","properties":{"days":{"type":"number","description":"Number of days of history to fetch (1-365). Default: 30."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get 30 days of VIX data","input":{}},{"description":"Get 7 days of VIX data","input":{"days":7}},{"description":"Get 90 days of VIX data","input":{"days":90}}],"pricing":"free","returns":"VIX daily values with summary stats (high, low, average, latest, trend direction) and fear-level classification."},{"name":"labor_market","displayName":"Labor Market","description":"Get comprehensive US labor market data from FRED. Covers nonfarm payrolls, initial jobless claims (weekly), JOLTS job openings, average hourly earnings, labor force participation rate, unemployment rate, and U-6 underemployment rate.","inputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Metric to fetch (e.g. nonfarm_payrolls, initial_claims, jolts, unemployment). Default: all.","enum":["nonfarm_payrolls","initial_claims","jolts","avg_hourly_earnings","participation_rate","unemployment","underemployment","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all labor market data","input":{}},{"description":"Get nonfarm payrolls history","input":{"metric":"nonfarm_payrolls"}},{"description":"Get weekly initial claims","input":{"metric":"initial_claims"}},{"description":"Get JOLTS job openings","input":{"metric":"jolts"}}],"pricing":"free","returns":"US labor market metrics with values, dates, and units. Single metric includes 12-month history."},{"name":"housing_market","displayName":"Housing Market","description":"Get US housing market data from FRED. Covers 30-year and 15-year fixed mortgage rates, S&P/Case-Shiller home price index, median sale price, housing starts, existing home sales, building permits, vacancy rate, and homeownership rate.","inputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Specific metric: mortgage_rates, home_prices, housing_starts, existing_sales, permits, vacancy, homeownership, or all. Default: all.","enum":["mortgage_rates","home_prices","housing_starts","existing_sales","permits","vacancy","homeownership","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all housing market data","input":{}},{"description":"Get current mortgage rates","input":{"metric":"mortgage_rates"}},{"description":"Get Case-Shiller home prices","input":{"metric":"home_prices"}},{"description":"Get housing starts data","input":{"metric":"housing_starts"}}],"pricing":"free","returns":"US housing market metrics with values, dates, and units. Single metric includes 12-month history."},{"name":"money_supply","displayName":"Money Supply","description":"Get US money supply and monetary aggregates from FRED. Covers M1 and M2 money stock, velocity of money, monetary base, total reserves, excess reserves, Fed reserve balances, and Fed total assets (WALCL). Includes a Fed summary with total assets and reserves.","inputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Specific metric: m1, m2, velocity, monetary_base, reserves, fed_assets, or all. Default: all.","enum":["m1","m2","velocity","monetary_base","reserves","fed_assets","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all money supply data","input":{}},{"description":"Get M2 money stock history","input":{"metric":"m2"}},{"description":"Get Fed total assets","input":{"metric":"fed_assets"}},{"description":"Get velocity of money","input":{"metric":"velocity"}}],"pricing":"free","returns":"US money supply metrics with values, dates, and units. Single metric includes 24-month history. Includes Fed summary."},{"name":"consumer_sentiment","displayName":"Consumer Sentiment","description":"Get US consumer confidence and sentiment data from FRED. Covers UMich Consumer Sentiment Index, 1-year inflation expectations, OECD Consumer Confidence, personal consumption (durable goods), personal saving rate, total vehicle sales, and advance retail sales.","inputSchema":{"type":"object","properties":{"index":{"type":"string","description":"Specific index: umich (sentiment + inflation expectations), spending (consumption, saving, retail), vehicles, or all. Default: all.","enum":["umich","spending","vehicles","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all consumer data","input":{}},{"description":"Get UMich sentiment data","input":{"index":"umich"}},{"description":"Get consumer spending data","input":{"index":"spending"}}],"pricing":"free","returns":"Consumer sentiment and spending metrics with values, dates, and units. Single index includes 24-month history."},{"name":"government_bonds","displayName":"Government Bonds","description":"Get Euro area 10-year government bond yields from the ECB for 11 countries: Germany, France, Italy, Spain, Netherlands, Belgium, Austria, Portugal, Greece, Ireland, and Finland. Computes spread vs Germany (benchmark) in basis points.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 2-letter country code: DE, FR, IT, ES, NL, BE, AT, PT, GR, IE, FI. Omit for all countries.","enum":["DE","FR","IT","ES","NL","BE","AT","PT","GR","IE","FI"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all Euro area bond yields","input":{}},{"description":"Get Italy 10Y yield","input":{"country":"IT"}},{"description":"Get Germany 10Y yield","input":{"country":"DE"}}],"pricing":"free","returns":"Euro area 10Y government bond yields by country with spread vs Germany in basis points. Source: ECB."},{"name":"crypto_markets","displayName":"Crypto Markets","description":"Get crypto market data from CoinGecko. Global stats, top coins by market cap, trending coins, DeFi stats, Fear & Greed Index, category breakdowns, and single-coin details. Real-time.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Data category: overview (global stats + fear/greed + top 5), top_coins, trending, defi, fear_greed, categories. Default: overview.","enum":["overview","top_coins","trending","defi","fear_greed","categories"]},"coin":{"type":"string","description":"Specific coin ID for details (e.g. \"bitcoin\", \"ethereum\", \"solana\"). Used with overview or on its own."},"limit":{"type":"number","description":"Number of coins for top_coins (1-100). Default: 20."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get crypto market overview","input":{}},{"description":"Get top 10 coins by market cap","input":{"category":"top_coins","limit":10}},{"description":"Get Bitcoin details","input":{"coin":"bitcoin"}},{"description":"Get trending coins","input":{"category":"trending"}},{"description":"Get crypto Fear & Greed Index","input":{"category":"fear_greed"}},{"description":"Get DeFi market stats","input":{"category":"defi"}}],"pricing":"free","returns":"Crypto market data with prices, market caps, volumes, dominance, Fear & Greed sentiment, and trends. Source: CoinGecko + Alternative.me."},{"name":"credit_conditions","displayName":"Credit Conditions","description":"Get US credit market conditions from FRED. Covers credit spreads (IG, HY, BBB, TED), bank lending (credit, C&I loans, real estate), consumer credit (outstanding, cards, debt service), delinquency rates, and SLOOS lending standards.","inputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Specific metric: credit_spreads, bank_lending, consumer_credit, delinquencies, lending_standards, or all. Default: all.","enum":["credit_spreads","bank_lending","consumer_credit","delinquencies","lending_standards","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all credit conditions","input":{}},{"description":"Get credit spreads (IG, HY, BBB)","input":{"metric":"credit_spreads"}},{"description":"Get bank lending data","input":{"metric":"bank_lending"}},{"description":"Get delinquency rates","input":{"metric":"delinquencies"}},{"description":"Get SLOOS lending standards","input":{"metric":"lending_standards"}}],"pricing":"free","returns":"US credit market metrics with values, dates, and units. Single metric includes 24-month history."},{"name":"precious_metals","displayName":"Precious Metals","description":"Get real-time precious metals spot prices from Gold-API. Covers gold, silver, platinum, and palladium with live bid/ask, daily high/low, change from previous close, and gold price per gram in multiple karats (24k, 22k, 18k, 14k). Updated every few seconds — much more current than daily FRED data.","inputSchema":{"type":"object","properties":{"metal":{"type":"string","description":"Specific metal: gold, silver, platinum, palladium, or all. Default: all.","enum":["gold","silver","platinum","palladium","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all precious metals prices","input":{}},{"description":"Get live gold price","input":{"metal":"gold"}},{"description":"Get live silver price","input":{"metal":"silver"}}],"pricing":"free","returns":"Live precious metals spot prices with bid/ask, high/low, change, and per-gram prices for gold. Source: Gold-API.com."},{"name":"leading_indicators","displayName":"Leading Indicators","description":"Get OECD Composite Leading Indicators (CLI) for 14 major economies. Predicts turning points 6-9 months ahead — above 100 = expansion, below 100 = contraction. Covers US, UK, DE, JP, FR, IT, CA, CN, BR, IN, MX, KR, AU, ZA.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 2-letter country code (US, GB, DE, JP, FR, IT, CA, CN, BR, IN, MX, KR, AU, ZA) or \"all\" for all 14 economies. Default: all."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get CLI for all major economies","input":{}},{"description":"Get US leading indicator","input":{"country":"US"}},{"description":"Get China leading indicator","input":{"country":"CN"}},{"description":"Get Germany leading indicator","input":{"country":"DE"}}],"pricing":"free","returns":"OECD CLI values with direction (expanding/contracting/stabilizing), trend position (above/below 100), and 6-month history. Source: OECD."},{"name":"federal_budget","displayName":"Federal Budget","description":"Get US federal budget data from the Treasury Monthly Treasury Statement (MTS) API. Covers monthly receipts, outlays, surplus/deficit, and year-to-date fiscal totals. Includes outlays broken down by government function. Updated monthly.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Data category: summary (receipts/outlays/deficit), receipts (same as summary), outlays (by function), or all. Default: summary.","enum":["summary","receipts","outlays","all"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get federal budget summary","input":{}},{"description":"Get outlays by government function","input":{"category":"outlays"}},{"description":"Get all budget data","input":{"category":"all"}}],"pricing":"free","returns":"Federal budget data with monthly receipts, outlays, surplus/deficit, year-to-date totals, and optionally outlays by function. Source: US Treasury."},{"name":"live_prices","displayName":"Live Prices","description":"Real-time market prices with intraday charts. Covers energy, metals, agriculture futures, global stock indices, FX majors, crypto, and bond futures. Supports 5-minute to daily intervals.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Yahoo Finance ticker symbol (e.g. \"BZ=F\" for Brent, \"GC=F\" for gold, \"^GSPC\" for S&P 500, \"BTC-USD\" for Bitcoin)."},"category":{"type":"string","description":"Fetch all instruments in a group: energy, metals, agriculture, indices, fx_majors, crypto, bonds. Returns a price table for the whole category.","enum":["energy","metals","agriculture","indices","fx_majors","crypto","bonds"]},"interval":{"type":"string","description":"Price interval: 5m, 15m, 1h, 1d. Default: 1d. Intraday intervals (5m/15m/1h) only work with short ranges (1d/5d).","enum":["5m","15m","1h","1d"]},"range":{"type":"string","description":"Time range: 1d, 5d, 1mo, 3mo, 6mo, 1y. Default: 5d.","enum":["1d","5d","1mo","3mo","6mo","1y"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get live TTF natural gas price","input":{"symbol":"TTF=F"}},{"description":"Get all energy futures prices","input":{"category":"energy"}},{"description":"Get S&P 500 intraday 5-min chart","input":{"symbol":"^GSPC","interval":"5m","range":"1d"}},{"description":"Get all global stock indices","input":{"category":"indices"}},{"description":"Get gold futures price","input":{"symbol":"GC=F"}},{"description":"Get all FX major pairs","input":{"category":"fx_majors"}},{"description":"Get Brent crude 3-month daily chart","input":{"symbol":"BZ=F","range":"3mo"}},{"description":"Get all crypto prices","input":{"category":"crypto"}},{"description":"Get bond futures","input":{"category":"bonds"}}],"pricing":"free","returns":"Real-time OHLCV data for single symbols (with price, change, 52-week range, and history), or a price summary table for categories."},{"name":"electricity_prices","displayName":"Electricity Prices","description":"European wholesale electricity day-ahead prices at 15-minute resolution. Covers 24 bidding zones across Europe including Germany, France, Netherlands, Belgium, Spain, Italy, Nordics, UK, Poland, and more. Shows current spot price, average, min/max, and full time series.","inputSchema":{"type":"object","properties":{"zone":{"type":"string","description":"Bidding zone code (e.g. DE-LU, FR, NL, BE, AT, ES, IT-North, GB). Default: DE-LU."},"hours":{"type":"number","description":"Hours of data to fetch (1-168). Default: 24 (last day)."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get current German electricity price","input":{}},{"description":"Get French electricity prices","input":{"zone":"FR"}},{"description":"Get UK electricity prices for the week","input":{"zone":"GB","hours":168}},{"description":"Get Netherlands electricity prices","input":{"zone":"NL"}},{"description":"Get Nordic electricity prices","input":{"zone":"NO1"}}],"pricing":"free","returns":"Wholesale electricity prices with summary stats (latest, average, min, max) and 15-minute time series data."},{"name":"futures_curve","displayName":"Futures Curve","description":"Full futures term structure (forward curve) for 16 major contracts. Shows every contract month with price, change, volume, and market structure (contango vs backwardation). Covers energy, metals, agriculture, and Treasury futures.","inputSchema":{"type":"object","properties":{"contract":{"type":"string","description":"Contract ID (e.g. ttf_gas, wti_crude, gold, corn, treasury_10y). Omit to list all available contracts.","enum":["ttf_gas","henry_hub","wti_crude","brent_crude","heating_oil","gasoline","gold","silver","copper","corn","wheat","soybeans","treasury_2y","treasury_5y","treasury_10y","treasury_30y"]},"months":{"type":"number","description":"Number of contract months to fetch (3-24). Default: 12."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get TTF gas futures curve (CME settlements equivalent)","input":{"contract":"ttf_gas"}},{"description":"Get WTI crude oil term structure","input":{"contract":"wti_crude"}},{"description":"Get gold futures curve","input":{"contract":"gold"}},{"description":"Get Brent crude next 6 months","input":{"contract":"brent_crude","months":6}},{"description":"Get Henry Hub natural gas curve","input":{"contract":"henry_hub"}},{"description":"List all available futures contracts","input":{}}],"pricing":"free","returns":"Futures curve with price per contract month, front month, calendar spread, market structure (contango/backwardation), and volume. Proxy for CME/ICE settlement data."}],"icon":"/icons/finance-data.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 10 skills: commodity_prices, treasury_yields, benchmark_rates, exchange_rates, economic_indicators, energy_markets, cot_report, us_national_debt, fed_balance_sheet, vix_index"]},{"version":"0.02","date":"2026-03-22","changes":["Added labor_market skill — nonfarm payrolls, initial claims, JOLTS, avg hourly earnings, participation rate, U-6 underemployment","Added housing_market skill — mortgage rates (30y/15y), Case-Shiller, median price, housing starts, existing sales, permits, vacancy/homeownership rates","Added money_supply skill — M1/M2 money stock, velocity, monetary base, reserves, Fed total assets (WALCL)","Added consumer_sentiment skill — UMich sentiment, inflation expectations, OECD confidence, retail sales, saving rate, vehicle sales","Added government_bonds skill — Euro area 10Y yields for 11 countries with spread vs Germany (bps) from ECB"]},{"version":"0.03","date":"2026-03-22","changes":["Added crypto_markets skill — CoinGecko market data (top coins, trending, DeFi, categories) + Fear & Greed Index","Added credit_conditions skill — credit spreads (IG/HY/BBB/TED), bank lending, consumer credit, delinquencies, SLOOS lending standards","Added precious_metals skill — real-time gold, silver, platinum, palladium spot prices with bid/ask from Gold-API","Added leading_indicators skill — OECD Composite Leading Indicators for 14 major economies"]},{"version":"0.04","date":"2026-03-22","changes":["Added Bank of Canada rates (Policy Rate, CORRA) to benchmark_rates — now covers 4 central banks","Added Euro Area HICP inflation from ECB to economic_indicators for Euro area countries","Added federal_budget skill — US Treasury Monthly Treasury Statement (receipts, outlays, surplus/deficit)","Added electricity retail prices and coal prices to energy_markets"]},{"version":"0.05","date":"2026-03-23","changes":["Added live_prices skill — real-time OHLCV from Yahoo Finance covering energy, metals, agriculture, indices, FX, crypto, and bond futures with intraday support","Added electricity_prices skill — European wholesale day-ahead prices at 15-min resolution for 24 bidding zones from Energy-Charts"]},{"version":"0.06","date":"2026-03-23","changes":["Added Yahoo Finance real-time fallback for FRED-dependent skills — treasury_yields, vix_index, commodity_prices, and credit_conditions now automatically fall back to Yahoo Finance when FRED is unavailable","Fixed cot_report parser — tries multiple CFTC URLs, validates response format, added market name aliases for common searches (crude, oil, gold, etc.)","Added credit ETF proxy signals (HYG, LQD, JNK, VIX) to credit_conditions fallback — shows spread direction when FRED OAS data is unavailable"]}],"premadePrompt":"What are the current gold and oil prices, and how has the US yield curve moved over the past month? Give me a macro snapshot including the latest inflation and unemployment figures.","requirements":[{"name":"eia","type":"secret","displayName":"EIA API Key","description":"US Energy Information Administration API key — get one free at eia.gov/opendata. Falls back to DEMO_KEY if not set.","envFallback":"EIA_API_KEY","acquireUrl":"https://www.eia.gov/opendata/"}],"credentials":[{"name":"eia","type":"secret","displayName":"EIA API Key","description":"US Energy Information Administration API key — get one free at eia.gov/opendata. Falls back to DEMO_KEY if not set.","envFallback":"EIA_API_KEY","acquireUrl":"https://www.eia.gov/opendata/"}]},{"name":"grocery-prices","displayName":"Grocery Prices","subtitle":"Live grocery prices & deals","about":"**Grocery Prices** lets you search, compare, and track grocery prices in real time across more than 120 countries. Find the cheapest store near you for a specific product, optimize a full shopping list across multiple stores, or track how food prices have moved over time.\n\nIt covers major retailers in the US, UK, Austria, Netherlands, and Australia with live store-level pricing, and falls back to crowdsourced price data for everywhere else. Whether you're trying to save money on a weekly shop or tracking food inflation, the data is always current.\n\n### What you can do\n- **search_products** — find grocery products by name with live store prices at nearby locations\n- **compare_prices** — find the cheapest store for a specific product across multiple nearby retailers\n- **find_stores** — discover grocery stores near any location by chain or proximity\n- **product_details** — full product information by barcode or name including nutrition facts, allergens, and Nutri-Score\n- **basket_compare** — submit a shopping list and find which nearby store has the cheapest total\n- **browse_deals** — find products currently on promotion with discount percentages and savings\n- **price_history** — US national average price trends for staple foods over the past 20 years\n\n### Who it's for\nBudget-conscious shoppers optimizing their weekly grocery spend, researchers tracking food price inflation, developers building price comparison features, and anyone who wants to know where the cheapest eggs or milk are near them right now.\n\n### How to use it\n1. Always pass a country code (e.g. \"US\", \"GB\", \"AU\") and a zip_code or city to get local store prices\n2. Use **find_stores** first if you need a store_id for a specific location\n3. Use **basket_compare** for shopping list optimization across up to 5 nearby stores\n4. Use **price_history** to see how a food category's national average has moved\n\n### Getting started\nWorks immediately for most countries — connecting Kroger account credentials unlocks real-time pricing across 2,750+ US stores.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_products","displayName":"Search Products","description":"Search for grocery products by name and get live store prices. Works worldwide — pass a country code to search local stores.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Product search term (e.g. \"organic milk\", \"Cheerios\", \"ground beef\")"},"country":{"type":"string","description":"ISO country code (e.g. \"US\", \"GB\", \"DE\", \"AU\", \"NL\", \"AT\", \"FR\"). Defaults to US."},"zip_code":{"type":"string","description":"Postal code for location (e.g. \"90210\", \"SW1A 1AA\", \"1010\")"},"city":{"type":"string","description":"City name (alternative to zip_code, e.g. \"London\", \"Vienna\")"},"store_id":{"type":"string","description":"Store ID from find_stores (source-specific)"},"brand":{"type":"string","description":"Filter by brand name (e.g. \"Kroger\", \"Organic Valley\")"},"limit":{"type":"number","description":"Max results (1-50, default 10)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for eggs near a zip code","input":{"query":"eggs","zip_code":"45202"}},{"description":"Search for a specific brand","input":{"query":"milk","brand":"Organic Valley","zip_code":"10001"}}],"pricing":"paid","returns":"Products with name, brand, price (regular + promo), size, nutrition, and store info. Prices require a zip_code or store_id."},{"name":"compare_prices","displayName":"Compare Prices","description":"Compare the price of a product across multiple nearby stores to find the cheapest option.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Product to compare (e.g. \"Heinz ketchup\", \"whole milk\")"},"country":{"type":"string","description":"ISO country code (e.g. \"US\", \"GB\", \"DE\", \"AU\", \"NL\", \"AT\", \"FR\"). Defaults to US."},"zip_code":{"type":"string","description":"Postal code to search around"},"city":{"type":"string","description":"City name (alternative to zip_code)"},"radius_miles":{"type":"number","description":"Search radius in miles (1-100, default 10)"},"max_stores":{"type":"number","description":"Max stores to compare (1-5, default 3)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find cheapest eggs nearby","input":{"query":"eggs large grade A","zip_code":"45202"}},{"description":"Compare milk prices in wider radius","input":{"query":"whole milk gallon","zip_code":"90210","radius_miles":20,"max_stores":5}}],"pricing":"paid","returns":"Price comparison across stores sorted cheapest first, with savings summary."},{"name":"find_stores","displayName":"Find Stores","description":"Find grocery stores near a location. Returns store details, addresses, and locations.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO country code (e.g. \"US\", \"GB\", \"DE\", \"AU\", \"NL\", \"AT\", \"FR\"). Defaults to US."},"zip_code":{"type":"string","description":"Postal code to search around"},"city":{"type":"string","description":"City name (alternative to zip_code)"},"latitude":{"type":"number","description":"Latitude (alternative to zip code)"},"longitude":{"type":"number","description":"Longitude (alternative to zip code)"},"radius_miles":{"type":"number","description":"Search radius in miles (1-100, default 10)"},"chain":{"type":"string","description":"Filter by chain name (e.g. \"Kroger\", \"Billa\", \"Albert Heijn\", \"Woolworths\")"},"limit":{"type":"number","description":"Max results (1-50, default 10)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find stores near a zip code","input":{"zip_code":"45202"}},{"description":"Find Ralphs stores in LA area","input":{"zip_code":"90001","chain":"Ralphs","radius_miles":15}}],"pricing":"paid","returns":"List of nearby stores with chain name, address, coordinates, hours, and departments."},{"name":"product_details","displayName":"Product Details","description":"Get full product details by barcode or name — includes nutrition facts, ingredients, allergens, Nutri-Score, and store pricing.","inputSchema":{"type":"object","properties":{"upc":{"type":"string","description":"Product barcode (UPC/EAN, e.g. \"0001111041600\")"},"product_name":{"type":"string","description":"Product name to search (alternative to UPC)"},"country":{"type":"string","description":"ISO country code (e.g. \"US\", \"GB\", \"DE\", \"AU\", \"NL\", \"AT\", \"FR\"). Defaults to US."},"zip_code":{"type":"string","description":"Postal code for store pricing"},"city":{"type":"string","description":"City name (alternative to zip_code)"},"store_id":{"type":"string","description":"Store ID for pricing (source-specific)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up a product by barcode","input":{"upc":"0001111041600","zip_code":"45202"}},{"description":"Look up a product by name","input":{"product_name":"Kroger 2% Milk","zip_code":"45202"}}],"pricing":"paid","returns":"Full product info with nutrition, ingredients, allergens, Nutri-Score, eco-score, and store pricing."},{"name":"price_history","displayName":"Price History","description":"Get national average price trends for staple food items (US only). Shows monthly prices over time with year-over-year change.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Food category key (e.g. \"eggs\", \"milk_whole\", \"ground_beef\"). Omit to see all available categories."},"categories":{"type":"array","items":{"type":"string"},"description":"Multiple food category keys to compare (e.g. [\"eggs\", \"butter\", \"bread_white\"])"},"years_back":{"type":"number","description":"Years of history to retrieve (default 2, max 20)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check egg price trends","input":{"category":"eggs"}},{"description":"Compare staple prices over 5 years","input":{"categories":["eggs","milk_whole","bread_white","ground_beef"],"years_back":5}},{"description":"List all available categories","input":{}}],"pricing":"paid","returns":"Monthly price history with latest value, YoY change, and trend direction. Covers ~45 food items."},{"name":"basket_compare","displayName":"Basket Compare","description":"Submit a shopping list and find which nearby store has the cheapest total. Compares all items across multiple stores.","inputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string","description":"Product search term"},"quantity":{"type":"number","description":"Number of units needed (default 1)"}},"required":["query"]},"description":"Shopping list items (max 20)"},"country":{"type":"string","description":"ISO country code (e.g. \"US\", \"GB\", \"DE\", \"AU\", \"NL\", \"AT\", \"FR\"). Defaults to US."},"zip_code":{"type":"string","description":"Postal code to search around"},"city":{"type":"string","description":"City name (alternative to zip_code)"},"radius_miles":{"type":"number","description":"Search radius in miles (1-100, default 10)"},"max_stores":{"type":"number","description":"Max stores to compare (1-5, default 3)"}},"required":["items"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":45,"mode":"io"}},"examples":[{"description":"Compare a weekly grocery basket","input":{"items":[{"query":"milk whole gallon","quantity":1},{"query":"eggs large dozen","quantity":2},{"query":"bread whole wheat","quantity":1},{"query":"chicken breast","quantity":2},{"query":"bananas","quantity":1}],"zip_code":"45202","max_stores":3}}],"pricing":"paid","returns":"Per-store basket totals with item-level breakdown, cheapest store recommendation, and potential savings."},{"name":"browse_deals","displayName":"Browse Deals","description":"Find products currently on sale or promotion. Shows discount percentage and savings.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO country code (e.g. \"US\", \"GB\", \"DE\", \"AU\", \"NL\", \"AT\", \"FR\"). Defaults to US."},"zip_code":{"type":"string","description":"Postal code to find nearest store"},"city":{"type":"string","description":"City name (alternative to zip_code)"},"store_id":{"type":"string","description":"Store ID (from find_stores)"},"category":{"type":"string","description":"Search category (e.g. \"dairy\", \"meat\", \"produce\", \"snacks\")"},"limit":{"type":"number","description":"Max deals to return (1-50, default 20)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Browse all deals at nearest store","input":{"zip_code":"45202"}},{"description":"Find dairy deals","input":{"zip_code":"45202","category":"dairy"}}],"pricing":"paid","returns":"Products on sale sorted by discount percentage, with regular price, sale price, and savings amount."}],"workflow":["find_stores → search_products","find_stores → compare_prices","find_stores → browse_deals","search_products → product_details","basket_compare","price_history"],"icon":"/icons/grocery-prices.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with 7 skills: search_products, compare_prices, find_stores, product_details, price_history, basket_compare, browse_deals","Data sources: Kroger API (real-time US store prices), Open Food Facts (product info, nutrition), BLS (national average price trends)","Covers 2,750+ Kroger-family stores across 19 banners in 35 US states"]},{"version":"0.02","date":"2026-04-12","changes":["Now available in 120+ countries — search and compare grocery prices worldwide","Added live store prices for Austria (Billa, Spar, Hofer, Lidl), Netherlands (Albert Heijn), and Australia (Woolworths, Coles)","New country parameter on all skills — pass any ISO country code (e.g. \"GB\", \"DE\", \"AU\")","Global fallback via crowdsourced price data when no country-specific source is available"]}],"premadePrompt":"Which store near [zip code] has the cheapest price on [product]? Also compare the total cost of my weekly shopping list: [list of items].","requirements":[{"name":"kroger_client_id","type":"secret","displayName":"Kroger Client ID","description":"OAuth2 client ID for Kroger Developer API","envFallback":"KROGER_CLIENT_ID","acquireUrl":"https://developer.kroger.com/"},{"name":"kroger_client_secret","type":"secret","displayName":"Kroger Client Secret","description":"OAuth2 client secret for Kroger Developer API","envFallback":"KROGER_CLIENT_SECRET","acquireUrl":"https://developer.kroger.com/"}],"credentials":[{"name":"kroger_client_id","type":"secret","displayName":"Kroger Client ID","description":"OAuth2 client ID for Kroger Developer API","envFallback":"KROGER_CLIENT_ID","acquireUrl":"https://developer.kroger.com/"},{"name":"kroger_client_secret","type":"secret","displayName":"Kroger Client Secret","description":"OAuth2 client secret for Kroger Developer API","envFallback":"KROGER_CLIENT_SECRET","acquireUrl":"https://developer.kroger.com/"}]},{"name":"drug-info","displayName":"Drug Information","subtitle":"Drug info: recalls & side effects","about":"**Drug Information** gives you authoritative FDA data on any medication — what it treats, how to take it, what to watch out for, and whether it's ever been recalled. All data comes directly from official FDA databases.\n\nThis isn't a general health chatbot. It pulls real labeling data: indications, dosage instructions, contraindications, black box warnings, drug interaction flags, and adverse event reports from the FDA's FAERS system. It also surfaces recall history so you know if a product has had Class I safety issues.\n\n### What you can do\n- **lookup_drug** — full FDA label by brand or generic name: indications, dosage, warnings, contraindications, interactions\n- **check_adverse_events** — real-world side effect reports from the FDA adverse event database\n- **check_recalls** — recall history for a drug including severity class\n- **search_by_condition** — find drugs approved for a specific medical condition when you don't know the drug name\n\n### Who it's for\nPatients researching their medications, healthcare professionals doing quick reference checks, researchers analyzing drug safety data, and journalists or analysts investigating pharmaceutical recalls.\n\n### How to use it\n1. If you know the drug name, call **lookup_drug** directly — pass the brand or generic name.\n2. If you only know the condition, use **search_by_condition** first to find relevant drugs.\n3. Follow up with **check_adverse_events** to see real-world reported side effects.\n4. Use **check_recalls** to verify no safety recalls are on record.\n\n### Getting started\nCall **lookup_drug** with a drug name. All responses include the FDA disclaimer — always present this to users.","version":"0.04","categories":["data","productivity"],"currency":"USD","skills":[{"name":"lookup_drug","displayName":"Look Up Drug","description":"Look up detailed drug information by brand or generic name. Returns prescribing details including indications, warnings, dosage, contraindications, adverse reactions, and drug interactions from FDA labeling data.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Drug name to look up (brand name like \"Advil\" or generic name like \"ibuprofen\")"},"type":{"type":"string","enum":["brand","generic","any"],"default":"any","description":"Whether to search by brand name, generic name, or try both (default: \"any\")"}},"required":["name"]},"annotations":{},"examples":[{"description":"Look up aspirin by generic name","input":{"name":"aspirin","type":"generic"}},{"description":"Look up a brand-name drug","input":{"name":"Tylenol","type":"brand"}},{"description":"Look up a drug with auto-detection","input":{"name":"metformin"}}],"pricing":"free","returns":"Drug name, generic name, manufacturer, route, indications, warnings, dosage, contraindications, adverse reactions, drug interactions, and FDA disclaimer"},{"name":"check_adverse_events","displayName":"Check Adverse Events","description":"Search FDA adverse event reports (FAERS) for a drug. Shows reported side effects, hospitalizations, and outcomes. Note: this shows reported events, not confirmed drug interactions. For drug-drug interaction warnings, use lookup_drug and check the drug_interactions field.","inputSchema":{"type":"object","properties":{"drug_name":{"type":"string","description":"Drug name to check adverse events for (brand or generic name)"},"limit":{"type":"number","default":10,"description":"Number of adverse event reports to return (default: 10, max: 50)"}},"required":["drug_name"]},"annotations":{},"examples":[{"description":"Check adverse events for ibuprofen","input":{"drug_name":"ibuprofen"}},{"description":"Get more adverse event reports for a drug","input":{"drug_name":"amoxicillin","limit":25}}],"pricing":"free","returns":"Adverse event reports with reactions, patient demographics, seriousness outcomes, concomitant drugs, and a summary of the most common reactions."},{"name":"check_recalls","displayName":"Check Drug Recalls","description":"Check if a drug has been recalled by searching the FDA enforcement database. Returns recall events with reason, severity classification (Class I/II/III), status, distribution pattern, and dates.","inputSchema":{"type":"object","properties":{"drug_name":{"type":"string","description":"Drug name to check for recalls (brand or generic name)"},"limit":{"type":"number","default":10,"description":"Number of recall records to return (default: 10, max: 25)"}},"required":["drug_name"]},"annotations":{},"examples":[{"description":"Check if metformin has been recalled","input":{"drug_name":"metformin"}},{"description":"Check recall history for a brand-name drug","input":{"drug_name":"Lipitor","limit":5}}],"pricing":"free","returns":"Recall events with reason for recall, classification (Class I = most serious, Class III = least serious), status, recalling firm, distribution pattern, dates, lot info, and quantity"},{"name":"search_by_condition","displayName":"Search Drugs by Condition","description":"Find drugs commonly used for a medical condition by searching FDA drug labeling indications. Returns matching drugs with their brand and generic names, manufacturer, route, and a snippet of their indicated uses.","inputSchema":{"type":"object","properties":{"condition":{"type":"string","description":"Medical condition or symptom to search for (e.g. \"headache\", \"high blood pressure\", \"diabetes\")"},"limit":{"type":"number","default":10,"description":"Maximum number of drugs to return (default: 10, max: 50)"}},"required":["condition"]},"annotations":{},"examples":[{"description":"Find drugs for headache relief","input":{"condition":"headache"}},{"description":"Find drugs for high blood pressure","input":{"condition":"high blood pressure","limit":15}}],"pricing":"free","returns":"List of drugs matching the condition with brand name, generic name, manufacturer, route of administration, product type (Prescription/OTC), and a snippet of the indications and usage text"}],"icon":"/icons/drug-info.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with drug lookup, adverse events, recalls, and condition search"]},{"version":"0.02","date":"2026-03-20","changes":["Fix lookup_drug to prefer exact matches over combination products and children's formulations","Add summary field to lookup_drug response","Rename check_interactions to check_adverse_events for clarity","Deprioritize homeopathic products in search_by_condition results","Add product_type field to search_by_condition results"]},{"version":"0.03","date":"2026-03-20","changes":["Fix lookup_drug to prefer ORAL route over TOPICAL/injectable formulations (e.g. Advil returns pills, not gel)","Add condition synonym mapping to search_by_condition — lay terms like \"acid reflux\" now also search \"gastroesophageal reflux\" for real medications"]},{"version":"0.04","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What is [drug name] used for, what are its warnings and side effects, and has it ever been recalled?"},{"name":"stays-search","displayName":"Stays Search","subtitle":"Hotels, Airbnb & vacation rentals","about":"**Stays Search** finds and compares accommodation worldwide — Airbnb listings with photos, ratings, prices, and direct booking links, plus hotel rates across multiple booking platforms. It's the research layer for travel planning without switching between apps.\n\nWhether you're looking for a beachfront Airbnb in Bali or comparing hotel prices in Paris across Booking.com, Agoda, and Trip.com, this tool handles the search and returns clean structured results with everything you need to make a decision.\n\n### What you can do\n- Search Airbnb listings by location and date with filters for price, beds, bathrooms, property type, and amenities\n- Get direct Airbnb booking URLs for any listing\n- Compare hotel rates across major booking platforms — sorted cheapest first\n- Search destinations to get location IDs for more precise filtering\n- Set currency for all returned prices\n\n### Who it's for\nTravelers and trip planners who want AI to do the accommodation research. Travel agents and assistants building itineraries. Anyone comparing Airbnb and hotel options for the same trip without opening multiple tabs.\n\n### How to use it\n1. For Airbnb: use **search_stays** with a location name and dates — skip **search_destinations** unless you need a precise place ID\n2. Filter results by price range, number of beds, bathrooms, and property type\n3. For hotels: use **compare_hotel_rates** with a TripAdvisor property key and check-in/out dates to compare prices across booking sites\n4. Prices default to USD — set a currency code if you need another currency\n\n### Getting started\nConnect your travel data account to enable accommodation search — then pass any city name and date range to search_stays.","version":"0.07","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_destinations","displayName":"Search Destinations","description":"Search for a destination by name to find matching cities, regions, and neighborhoods. Returns location names with Place IDs and country codes.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"City, region, or address to search (e.g. \"Paris\", \"Bali\", \"Manhattan New York\")"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for Paris","input":{"query":"Paris"}},{"description":"Search for a specific area","input":{"query":"Shibuya Tokyo"}}],"pricing":"paid","returns":"List of matching destinations with display names, Place IDs, and country codes"},{"name":"search_stays","displayName":"Search Stays","description":"Search for available stays (Airbnb, vacation rentals, apartments, unique homes) in a destination. Returns listings with names, photos, ratings, prices, coordinates, and direct Airbnb booking links. Supports date filtering, guest counts, and pagination.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"Location to search (e.g. \"Barcelona, Spain\", \"Paris\", \"Gracia, Barcelona\")"},"checkin":{"type":"string","description":"Check-in date in YYYY-MM-DD format"},"checkout":{"type":"string","description":"Check-out date in YYYY-MM-DD format"},"adults":{"type":"number","description":"Number of adult guests (default 1)","default":1},"children":{"type":"number","description":"Number of children"},"infants":{"type":"number","description":"Number of infants"},"pets":{"type":"number","description":"Number of pets"},"currency":{"type":"string","description":"Currency code for prices (e.g. \"USD\", \"EUR\", \"GBP\")"},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search stays in Barcelona for 2 adults","input":{"location":"Barcelona, Spain","checkin":"2026-04-15","checkout":"2026-04-17","adults":2}},{"description":"Search a specific neighborhood","input":{"location":"Gracia, Barcelona, Spain","checkin":"2026-06-01","checkout":"2026-06-07"}}],"pricing":"paid","returns":"List of stays with names, photos, ratings, prices, coordinates, beds/bedrooms, and Airbnb booking URLs"},{"name":"compare_hotel_rates","displayName":"Compare Hotel Rates","description":"Compare hotel rates across Booking.com, Agoda, Trip.com, and hotel websites. Returns per-night and total costs sorted cheapest first. Requires a TripAdvisor hotel key (format: g{location}-d{property}, e.g. \"g60763-d99762\").","inputSchema":{"type":"object","properties":{"hotel_key":{"type":"string","description":"TripAdvisor hotel key (format: g{location}-d{property}, e.g. \"g60763-d99762\", \"g187147-d197572\"). Find this from TripAdvisor hotel URLs."},"check_in":{"type":"string","description":"Check-in date in YYYY-MM-DD format"},"check_out":{"type":"string","description":"Check-out date in YYYY-MM-DD format"},"currency":{"type":"string","description":"Currency code for prices (e.g. \"USD\", \"EUR\", \"GBP\"). Defaults to USD."},"rooms":{"type":"number","description":"Number of rooms (default 1)","default":1},"adults":{"type":"number","description":"Number of adults per room (default 2)","default":2}},"required":["hotel_key","check_in","check_out"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Compare rates for a Paris hotel","input":{"hotel_key":"g187147-d197572","check_in":"2026-04-15","check_out":"2026-04-17"}},{"description":"Compare rates in EUR with 2 rooms","input":{"hotel_key":"g60763-d99762","check_in":"2026-05-01","check_out":"2026-05-05","currency":"EUR","rooms":2}}],"pricing":"free","returns":"Rates from Booking.com, Agoda, Trip.com, and hotel websites with per-night and total stay costs sorted cheapest first, plus savings summary"}],"workflow":["search_destinations → search_stays","compare_hotel_rates"],"icon":"/icons/stays-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release as hotel-search with hotel search, rate comparison, and price calendar"]},{"version":"0.02","date":"2026-03-20","changes":["Improved error handling and hotel_key format validation"]},{"version":"0.03","date":"2026-03-20","changes":["Fixed price labels and added total stay cost calculations"]},{"version":"0.04","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.05","date":"2026-03-22","changes":["Renamed from hotel-search to stays-search — now covers hotels, Airbnb, vacation rentals, and experiences","Switched to Airbnb Search API for comprehensive global coverage","Added 13 skills: search_destinations, search_stays, get_stay_details, check_availability, get_price_details, get_checkout_price, get_reviews, search_experiences, get_experience_details, get_experience_dates, get_experience_reviews, get_languages, get_currencies","Search supports filters: price range, beds, bathrooms, property type, amenities, guest favorite","Full property details: descriptions, amenities, photos, ratings, host info, policies","Availability calendar with date-level booking status and min/max night requirements","Guest reviews with ratings, category breakdowns, and host responses","Local experiences: search tours and activities, check dates and reviews"]},{"version":"0.06","date":"2026-03-22","changes":["Added compare_hotel_rates — compares hotel prices across Booking.com, Agoda, Trip.com, and hotel websites","Tool now covers both Airbnb listings and traditional hotels from multiple booking providers","Updated description and instructions to guide agents to the right path (Airbnb vs hotel)"]},{"version":"0.07","date":"2026-03-24","changes":["Switched Airbnb API provider from airbnb-search to airbnb13 (3b-data) — previous provider returned null for all listing fields","search_stays now returns rich results: names, photos, ratings, coordinates, beds, prices, and direct Airbnb booking URLs","search_stays no longer requires a place_id — accepts location name directly (e.g. \"Barcelona, Spain\")","Removed skills that depended on broken API: get_stay_details, check_availability, get_price_details, get_checkout_price, get_reviews, search_experiences, get_experience_details, get_experience_dates, get_experience_reviews, get_languages, get_currencies","Simplified workflow: search_destinations → search_stays, or search_stays directly with a location name"]}],"premadePrompt":"Find available places to stay in [city] from [check-in date] to [check-out date] for [number] guests. Show me options with photos, ratings, and prices.","requirements":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}],"credentials":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}]},{"name":"movie-tv-search","displayName":"Movie & TV Search","subtitle":"Ratings, cast & episode guides","about":"**Movie & TV Search** looks up any film or television show and returns ratings from IMDB, Rotten Tomatoes, and Metacritic alongside cast, director, plot, awards, and box office data. For TV shows it goes further — episode guides, per-episode ratings, full cast lists, and complete season breakdowns.\n\nWhether you're making a watch recommendation, researching a show, or building an entertainment-themed project, this tool gives you the structured data you need in one call. No manual searching across sites, no tab-switching — just ask and get the full picture.\n\n### What you can do\n- **search** — find movies or TV shows by name and get IMDB IDs for precise follow-up lookups\n- **get_details** — fetch full ratings, cast, director, plot, awards, and box office for any title\n- **get_episodes** — get the episode list for a specific season with titles, air dates, and per-episode ratings\n- **tv_show_cast** — retrieve the full cast of a TV show with actor and character names\n- **tv_episodes_detailed** — get all seasons at once with episode summaries and ratings\n\n### Who it's for\nPeople who want to know whether a show is worth watching before committing. Agents helping users find their next favorite series. Researchers or writers who need entertainment data. Anyone building watchlists, recommendations, or entertainment content.\n\n### How to use it\n1. Start with **search** to find the title and get the IMDB ID — use it for precise lookups\n2. Use **get_details** with the IMDB ID or title for full ratings, cast, and plot information\n3. For TV shows, use **tv_episodes_detailed** to get all seasons at once with episode ratings\n4. Use **tv_show_cast** when you need the complete character and actor list\n\n### Getting started\nSearch by title first to confirm you have the right show — especially useful for titles with sequels or remakes. Then pass the imdb_id to get_details for reliable, precise results.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search","displayName":"Search","description":"Search movies and TV shows by name. Returns a list of results with title, year, IMDB ID, type, and poster image.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Movie or TV show name to search for"},"type":{"type":"string","enum":["movie","series","any"],"default":"any","description":"Filter by type — movie, series, or any (all results)"},"year":{"type":"number","description":"Filter by release year"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Inception","input":{"query":"Inception"}},{"description":"Search for TV series matching Breaking Bad","input":{"query":"Breaking Bad","type":"series"}},{"description":"Search for movies from 2023 matching Oppenheimer","input":{"query":"Oppenheimer","type":"movie","year":2023}}],"pricing":"free","returns":"List of matching results with title, year, imdb_id, type, and poster_url"},{"name":"get_details","displayName":"Get Details","description":"Get full details for a movie or TV show including ratings from IMDB, Rotten Tomatoes, and Metacritic, plus cast, director, plot, awards, and box office data.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Movie or TV show title to look up"},"imdb_id":{"type":"string","description":"IMDB ID like tt1375666 for direct lookup"},"plot":{"type":"string","enum":["short","full"],"default":"short","description":"Plot summary length — short or full"}}},"annotations":{},"examples":[{"description":"Get details for Inception by title","input":{"title":"Inception"}},{"description":"Get full details by IMDB ID","input":{"imdb_id":"tt1375666","plot":"full"}},{"description":"Get details for Breaking Bad","input":{"title":"Breaking Bad"}}],"pricing":"free","returns":"Title, year, runtime, genre, director, actors, plot, awards, poster, ratings (IMDB/RT/Metacritic), box office, total seasons"},{"name":"get_episodes","displayName":"Get Episodes","description":"Get the episode list for a specific season of a TV show. Returns episode titles, air dates, and IMDB ratings for each episode.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"TV show title"},"season":{"type":"number","description":"Season number"}},"required":["title","season"]},"annotations":{},"examples":[{"description":"Get Breaking Bad season 1 episodes","input":{"title":"Breaking Bad","season":1}},{"description":"Get Game of Thrones season 8 episodes","input":{"title":"Game of Thrones","season":8}}],"pricing":"free","returns":"List of episodes with title, episode number, released date, imdb_rating, and imdb_id"},{"name":"tv_show_cast","displayName":"TV Show Cast","description":"Get the full cast of a TV show with actor names and character names.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"TV show name to look up cast for"}},"required":["query"]},"annotations":{},"examples":[{"description":"Get the cast of Breaking Bad","input":{"query":"Breaking Bad"}},{"description":"Get the cast of The Office","input":{"query":"The Office"}}],"pricing":"free","returns":"Cast list with actor name, character name, and actor image URL"},{"name":"tv_episodes_detailed","displayName":"TV Episodes Detailed","description":"Get detailed episodes with ratings and summaries for a TV show, grouped by season.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"TV show name to get episodes for"}},"required":["query"]},"annotations":{},"examples":[{"description":"Get all Game of Thrones episodes with ratings","input":{"query":"Game of Thrones"}},{"description":"Get all Stranger Things episodes","input":{"query":"Stranger Things"}}],"pricing":"free","returns":"All episodes with season, episode number, name, airdate, rating, and summary"}],"icon":"/icons/movie-tv-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with movie and TV search, ratings, cast, and episode guides"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Look up [movie or TV show title] — I want ratings, cast, plot, and episode guide.","requirements":[{"name":"omdb","type":"secret","displayName":"Movie Database API Key","description":"API key for movie and TV show data lookups (free signup with email verification)","acquireUrl":"https://www.omdbapi.com/apikey.aspx","envFallback":"OMDB_API_KEY"}],"credentials":[{"name":"omdb","type":"secret","displayName":"Movie Database API Key","description":"API key for movie and TV show data lookups (free signup with email verification)","acquireUrl":"https://www.omdbapi.com/apikey.aspx","envFallback":"OMDB_API_KEY"}]},{"name":"similar-movies","displayName":"Similar Movies","subtitle":"Find the next movie with the same energy","about":"**Similar Movies** turns one film you loved into a ranked shortlist of what to watch next. Skip the endless scroll — give it a title and get back genuinely similar movies with clear reasons why each one matches.\n\nIt works from the specific things that made a film work: tone, genre, era, and narrative structure. You can start from a single movie or blend two to five seeds to find films that sit at an unusual intersection of tastes.\n\n### What you can do\n- Find movies similar to a single title, ranked by how closely they match\n- Blend two to five seed movies and get a shortlist that combines all of those tastes\n- Filter out franchise sequels when you want fresh alternatives\n- Set a minimum rating threshold to keep quality high\n- Browse deeper results with pagination\n\n### Who it's for\nAnyone building a watchlist or planning movie night. Recommendation apps that need explainable suggestions rather than black-box results. Agents that need to answer \"what should I watch next\" with real reasoning.\n\n### How to use it\n1. Use **find_similar** with a movie title to get a ranked list of similar films — add a release year if the title is ambiguous\n2. Use **blend_taste** with two to five seed titles to find films at the intersection of those tastes\n3. Set **include_same_collection** to false if you want fresh picks instead of sequels and prequels\n4. Use **min_vote_average** to filter out low-rated results, and **page** to browse deeper\n\n### Getting started\nConnect your movie database account to unlock recommendations — search by title and you're ready to go.","version":"0.01","categories":["search","data"],"currency":"USD","skills":[{"name":"find_similar","displayName":"Find Similar","description":"Resolve one movie title or TMDb id and return a ranked shortlist of similar films with clear match reasons and alternate seed matches when the title is ambiguous.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Movie title to resolve, such as \"Inception\" or \"The Prestige\""},"tmdb_id":{"type":"number","description":"Optional TMDb movie id for an exact seed lookup"},"year":{"type":"number","description":"Optional release year to disambiguate the seed title"},"strategy":{"type":"string","description":"Ranking source: blended uses both recommendations and similar titles, recommendations uses TMDb recommendations only, similar uses TMDb similar only","enum":["blended","recommendations","similar"],"default":"blended"},"include_same_collection":{"type":"boolean","description":"When false, exclude movies from the same TMDb collection or franchise where possible","default":false},"min_vote_average":{"type":"number","description":"Optional minimum TMDb vote average for returned movies, from 0 to 10","default":0,"minimum":0,"maximum":10},"language":{"type":"string","description":"Optional TMDb language code for localized titles and overviews, such as en-US or fr-FR","default":"en-US"},"limit":{"type":"number","description":"Maximum movies to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Result page number for the ranked shortlist (default 1)","default":1,"minimum":1,"maximum":5}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find movies similar to Inception without returning the same franchise","input":{"title":"Inception","include_same_collection":false,"limit":8}},{"description":"Use recommendation-only ranking for Arrival with a quality floor","input":{"title":"Arrival","strategy":"recommendations","min_vote_average":7,"limit":6}}],"pricing":"free","outputSchema":{"type":"object","properties":{"seed":{"type":"object","description":"Resolved seed movie used for the recommendation run"},"match_reason":{"type":"string","description":"Short explanation of how the seed movie was resolved"},"alternate_seed_matches":{"type":"array","description":"Fallback seed candidates when the title could map to multiple movies"},"strategy":{"type":"string","description":"Recommendation strategy used for this run"},"total_candidates":{"type":"number","description":"Total ranked candidates found before pagination"},"total_pages":{"type":"number","description":"Total result pages available for the ranked shortlist"},"page":{"type":"number","description":"Current result page number"},"limit":{"type":"number","description":"Maximum results returned on the current page"},"results":{"type":"array","description":"Ranked similar-movie results with reasons, relation sources, and match scores"}}},"returns":"A resolved seed movie plus a paginated shortlist of similar films with match scores and human-readable reasons"},{"name":"blend_taste","displayName":"Blend Taste","description":"Blend recommendations from multiple seed movies into one ranked shortlist so you can discover films that sit at the intersection of several favorites.","inputSchema":{"type":"object","properties":{"titles":{"type":"array","description":"Seed movie titles to blend together, using two to five favorites for the strongest results","items":{"type":"string"}},"tmdb_ids":{"type":"array","description":"Optional exact TMDb movie ids to use as seeds instead of title resolution","items":{"type":"number"}},"avoid_titles":{"type":"array","description":"Optional movie titles to exclude from the final shortlist","items":{"type":"string"}},"avoid_tmdb_ids":{"type":"array","description":"Optional exact TMDb ids to exclude from the final shortlist","items":{"type":"number"}},"include_same_collection":{"type":"boolean","description":"When false, exclude movies from the same TMDb collection or franchise where possible","default":false},"min_vote_average":{"type":"number","description":"Optional minimum TMDb vote average for returned movies, from 0 to 10","default":0,"minimum":0,"maximum":10},"language":{"type":"string","description":"Optional TMDb language code for localized titles and overviews, such as en-US or es-ES","default":"en-US"},"limit":{"type":"number","description":"Maximum movies to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Result page number for the ranked shortlist (default 1)","default":1,"minimum":1,"maximum":5}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":20,"mode":"io"}},"examples":[{"description":"Blend Inception and Arrival into one sci-fi shortlist","input":{"titles":["Inception","Arrival"],"include_same_collection":false,"limit":8}},{"description":"Blend Knives Out, Zodiac, and Gone Girl while excluding Se7en","input":{"titles":["Knives Out","Zodiac","Gone Girl"],"avoid_titles":["Se7en"],"min_vote_average":7,"limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"seeds":{"type":"array","description":"Resolved seed movies used in the blend"},"unresolved_titles":{"type":"array","description":"Seed titles that could not be resolved to a movie"},"avoided_movies":{"type":"array","description":"Resolved movies explicitly excluded from the shortlist"},"unresolved_avoid_titles":{"type":"array","description":"Avoid titles that could not be resolved"},"total_candidates":{"type":"number","description":"Total ranked candidates found before pagination"},"total_pages":{"type":"number","description":"Total result pages available for the ranked shortlist"},"page":{"type":"number","description":"Current result page number"},"limit":{"type":"number","description":"Maximum results returned on the current page"},"results":{"type":"array","description":"Ranked blended recommendations with matched-seed info and match reasons"}}},"returns":"A blended, paginated shortlist built from multiple seed movies, including matched seeds, excluded titles, and explainable reasons"}],"workflow":["find_similar","blend_taste"],"icon":"/icons/similar-movies.webp","changelog":[{"version":"0.01","date":"2026-03-29","changes":["Initial release with single-seed similar-movie lookup and multi-seed taste blending backed by TMDb recommendations and similar-title data."]}],"premadePrompt":"I loved [movie title] — what are some similar movies I should watch next? Nothing from the same franchise, just films with a similar feel.","requirements":[{"name":"tmdb","type":"secret","displayName":"TMDb API Key","description":"API key or read-access token for The Movie Database search and recommendation endpoints","acquireUrl":"https://www.themoviedb.org/settings/api","envFallback":"TMDB_API_KEY"}],"credentials":[{"name":"tmdb","type":"secret","displayName":"TMDb API Key","description":"API key or read-access token for The Movie Database search and recommendation endpoints","acquireUrl":"https://www.themoviedb.org/settings/api","envFallback":"TMDB_API_KEY"}]},{"name":"events-nearby","displayName":"Events Nearby","subtitle":"Concerts, sports & local events","about":"**Events Nearby** discovers live events in any city worldwide — concerts, sports, comedy, theatre, festivals, and more. Search by keyword, category, date range, or coordinates and get ticket prices, seat maps, and direct booking links all in one place.\n\nIt covers both mainstream and niche events across music, sports, arts, and family categories. You can drill into any event for full venue details and seat maps, look up specific venues and their upcoming schedules, or search for an artist and see their entire tour calendar. Ideal for trip planning, date night research, or just finding something to do this weekend.\n\n### What you can do\n- **search_events** — find events by keyword, city, category, or date range with ticket price ranges\n- **event_details** — full details on a specific event: venue info, seat maps, and ticket purchase links\n- **find_venues** — look up arenas, theatres, and clubs with box office hours and upcoming event counts\n- **search_artists** — find performer profiles and check upcoming tour dates\n\n### Who it's for\nTravelers planning city visits, locals looking for weekend plans, event researchers, and anyone building entertainment recommendation features.\n\n### How to use it\n1. Call **search_events** with a city name and optional category or date range to see what's on.\n2. For a specific event, call **event_details** with the event ID to get full venue info and ticket links.\n3. To follow a specific artist, call **search_artists** and then **search_events** filtered by their name to build a tour schedule.\n\n### Getting started\nConnect your events API key, then call **search_events** with a city name and a date range to see what's happening.","version":"0.03","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_events","displayName":"Search Events","description":"Search for events by keyword, location, date, or category. Find concerts, sports, theatre, comedy, family events, and more near any city or coordinates.","inputSchema":{"type":"object","properties":{"keyword":{"type":"string","description":"Search term like artist name, event name, or genre"},"latitude":{"type":"number","description":"Latitude for geographic search (use with longitude)"},"longitude":{"type":"number","description":"Longitude for geographic search (use with latitude)"},"city":{"type":"string","description":"City name to search in"},"country_code":{"type":"string","default":"US","description":"ISO country code (e.g. \"US\", \"GB\", \"CA\", \"AU\")"},"category":{"type":"string","enum":["music","sports","arts","theatre","comedy","family","film"],"description":"Event category filter"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"},"radius":{"type":"number","default":50,"description":"Search radius in miles (used with latitude/longitude)"},"limit":{"type":"number","default":20,"description":"Maximum number of results to return (1-50)"}}},"annotations":{},"examples":[{"description":"Find concerts in London","input":{"keyword":"concert","city":"London","country_code":"GB"}},{"description":"Music events in New York this weekend","input":{"city":"New York","category":"music","start_date":"2026-03-21","end_date":"2026-03-22"}},{"description":"Sports events near coordinates","input":{"latitude":40.7128,"longitude":-74.006,"category":"sports","radius":25}}],"pricing":"free","outputSchema":{"type":"object","properties":{"events":{"type":"array","description":"List of events with name, date, time, venue, city, genre, price range, image, and ticket URL"},"total_results":{"type":"number","description":"Total number of matching events"},"page":{"type":"number","description":"Current page number"},"total_pages":{"type":"number","description":"Total number of pages"}}},"returns":"Events with name, date/time, venue, city, price range, image, ticket URL, and genre"},{"name":"event_details","displayName":"Event Details","description":"Get full details for a specific event including venue info, price ranges, ticket status, seat map, performers, accessibility, and booking links.","inputSchema":{"type":"object","properties":{"event_id":{"type":"string","description":"Event ID from search results"}},"required":["event_id"]},"annotations":{},"examples":[{"description":"Get full details for an event found via search_events","input":{"event_id":"abc123"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Event ID"},"name":{"type":"string","description":"Event name"},"date":{"type":"string","description":"Local date"},"time":{"type":"string","description":"Local time"},"status":{"type":"string","description":"Ticket status (onsale/offsale/cancelled/rescheduled)"},"venue":{"type":"object","description":"Venue details with name, address, city, country, coordinates"},"price_range":{"type":"object","description":"Price range with min, max, and currency"},"attractions":{"type":"array","description":"Performers/artists with external links"},"seatmap_url":{"type":"string","description":"Seat map image URL"},"ticket_url":{"type":"string","description":"Direct link to purchase tickets"}}},"returns":"Full event info: venue, prices, ticket status, seat map, promoter, genre, accessibility, and ticket URL"},{"name":"find_venues","displayName":"Find Venues","description":"Search for event venues by name, city, or coordinates. Find arenas, theatres, stadiums, and concert halls with address, upcoming event counts, and box office info.","inputSchema":{"type":"object","properties":{"keyword":{"type":"string","description":"Venue name or keyword to search for"},"latitude":{"type":"number","description":"Latitude for geographic search (use with longitude)"},"longitude":{"type":"number","description":"Longitude for geographic search (use with latitude)"},"city":{"type":"string","description":"City name to search in"},"radius":{"type":"number","default":25,"description":"Search radius in miles (used with latitude/longitude)"}}},"annotations":{},"examples":[{"description":"Find venues in Chicago","input":{"city":"Chicago"}},{"description":"Search for Madison Square Garden","input":{"keyword":"Madison Square Garden"}},{"description":"Venues near downtown LA","input":{"latitude":34.0522,"longitude":-118.2437,"radius":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"venues":{"type":"array","description":"List of venues with name, address, city, country, coordinates, upcoming events, and box office info"},"total_results":{"type":"number","description":"Total number of matching venues"}}},"returns":"Venues with name, address, city, country, coordinates, upcoming event count, box office hours/phone, parking info, and images"},{"name":"search_artists","displayName":"Search Artists","description":"Search for artists, bands, sports teams, or performers. Find upcoming event counts, genre info, and links to external profiles like social media and streaming platforms.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Artist, band, or team name to search for"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find Taylor Swift events","input":{"query":"Taylor Swift"}},{"description":"Search for LA Lakers","input":{"query":"Los Angeles Lakers"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"attractions":{"type":"array","description":"Matching artists/teams with name, genre, upcoming events, and external links"},"total_results":{"type":"number","description":"Total number of matching attractions"}}},"returns":"Matching attractions with name, genre, subgenre, upcoming event count, external links (social media, streaming), and images"}],"icon":"/icons/events-nearby.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with event search, details, venue lookup, and artist search"]},{"version":"0.02","date":"2026-03-20","changes":["Remove provider branding from user-facing output and error messages"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What concerts and live events are happening in [city] over the next two weeks? Show me ticket prices and links.","requirements":[{"name":"ticketmaster","type":"secret","displayName":"Events API Key","description":"API key for searching events, venues, and attractions worldwide","envFallback":"TICKETMASTER_API_KEY"}],"credentials":[{"name":"ticketmaster","type":"secret","displayName":"Events API Key","description":"API key for searching events, venues, and attractions worldwide","envFallback":"TICKETMASTER_API_KEY"}]},{"name":"sports-scores","displayName":"Sports Scores","subtitle":"Live scores, standings & schedules","about":"**Sports Scores** delivers real-time game data across football, basketball, American football, baseball, and hockey. Live scores, results by date, team schedules, league standings, and team search — all from one tool.\n\nWhether you're building a sports dashboard, answering \"who's winning right now,\" or checking when your team plays next, this tool gives you current-season data across the major global leagues.\n\n### What you can do\n- Get live scores for any sport currently in progress\n- Look up all game results and fixtures for any date\n- Get a team's full season schedule by team name\n- Check league standings for the Premier League, NBA, NHL, NFL, and more\n- Search for the exact team name to use with other skills\n\n### Who it's for\nSports fans who want instant score updates through Claude. Developers building sports feeds and dashboards. Anyone integrating live sports data into an app or workflow without wanting to parse raw league APIs.\n\n### How to use it\n1. Use **live_scores** with a sport to see all currently in-progress games\n2. Use **scores_by_date** with a sport and date (YYYY-MM-DD) to see results or upcoming fixtures\n3. Use **search_team** to find the exact team name, then **team_schedule** to get their full season calendar\n4. Use **standings** with a league name — \"Premier League\", \"NBA\", \"NHL\", or \"NFL\" — for the current table\n\n### Getting started\nNo setup required — pick a sport and call live_scores to see what's happening right now.","version":"0.03","categories":["data","productivity"],"currency":"USD","skills":[{"name":"live_scores","displayName":"Live Scores","description":"Get live scores across all supported sports. Returns all currently in-progress games with teams, scores, match status, and elapsed time or period.","inputSchema":{"type":"object","properties":{"sport":{"type":"string","enum":["football","basketball","american-football","baseball","hockey"],"description":"Sport to check live scores for"}},"required":["sport"]},"annotations":{},"examples":[{"description":"Get all live football (soccer) scores","input":{"sport":"football"}},{"description":"Get all live basketball scores","input":{"sport":"basketball"}},{"description":"Get all live hockey games","input":{"sport":"hockey"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sport":{"type":"string","description":"The sport queried"},"live_games":{"type":"array","description":"All currently live games with teams, scores, status, and elapsed time"},"total":{"type":"number","description":"Number of live games"},"timestamp":{"type":"string","description":"ISO timestamp of the response"}}},"returns":"All currently live games with team names, current scores, match status, elapsed time/period, league, and venue"},{"name":"scores_by_date","displayName":"Scores by Date","description":"Get game scores and schedules for a specific date. Returns all games for that date with teams, scores, status (scheduled, live, or finished), start time, and venue.","inputSchema":{"type":"object","properties":{"sport":{"type":"string","enum":["football","basketball","american-football","baseball","hockey"],"description":"Sport to check scores for"},"date":{"type":"string","description":"Date in YYYY-MM-DD format (e.g. \"2026-03-20\")"}},"required":["sport","date"]},"annotations":{},"examples":[{"description":"Get all football matches on March 20, 2026","input":{"sport":"football","date":"2026-03-20"}},{"description":"Get NBA games on Christmas Day","input":{"sport":"basketball","date":"2025-12-25"}},{"description":"Get baseball games today","input":{"sport":"baseball","date":"2026-03-20"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sport":{"type":"string","description":"The sport queried"},"date":{"type":"string","description":"The date queried"},"games":{"type":"array","description":"All games for the date with teams, scores, status, and start time"},"total":{"type":"number","description":"Number of games on that date"},"timestamp":{"type":"string","description":"ISO timestamp of the response"}}},"returns":"All games for the date with team names, scores, game status, start time, league, round, and venue"},{"name":"team_schedule","displayName":"Team Schedule","description":"Get upcoming and recent games for a specific team. Searches for the team by name, then returns their full season fixtures with opponents, scores, dates, and competition details.","inputSchema":{"type":"object","properties":{"sport":{"type":"string","enum":["football","basketball","american-football","baseball","hockey"],"description":"Sport the team plays"},"team_name":{"type":"string","description":"Team name to search for (e.g. \"Arsenal\", \"Lakers\", \"Patriots\", \"Yankees\", \"Bruins\")"}},"required":["sport","team_name"]},"annotations":{},"examples":[{"description":"Get Arsenal fixtures for the current season","input":{"sport":"football","team_name":"Arsenal"}},{"description":"Get Lakers schedule","input":{"sport":"basketball","team_name":"Lakers"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sport":{"type":"string","description":"The sport queried"},"team":{"type":"object","description":"Team info with id, name, abbreviation, logo, and league"},"fixtures":{"type":"array","description":"Team fixtures with date, opponent, score, status, league, and venue"},"total":{"type":"number","description":"Number of fixtures"},"timestamp":{"type":"string","description":"ISO timestamp of the response"}}},"returns":"Team info and full list of season fixtures with dates, opponents, scores, match status, league, and venue"},{"name":"search_team","displayName":"Search Team","description":"Search for a team by name across any supported sport. Returns matching teams with their ID, name, logo, and league. Use team IDs with other skills.","inputSchema":{"type":"object","properties":{"sport":{"type":"string","enum":["football","basketball","american-football","baseball","hockey"],"description":"Sport to search teams in"},"query":{"type":"string","description":"Team name to search (e.g. \"Manchester\", \"Real Madrid\", \"Celtics\")"}},"required":["sport","query"]},"annotations":{},"examples":[{"description":"Search for Manchester football teams","input":{"sport":"football","query":"Manchester"}},{"description":"Search for basketball teams named \"Warriors\"","input":{"sport":"basketball","query":"Warriors"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sport":{"type":"string","description":"The sport queried"},"query":{"type":"string","description":"The search query"},"teams":{"type":"array","description":"Matching teams with id, name, country, logo, and venue"},"total":{"type":"number","description":"Number of matching teams"},"timestamp":{"type":"string","description":"ISO timestamp of the response"}}},"returns":"Matching teams with ID, name, country, logo, founding year, and venue details"},{"name":"standings","displayName":"League Standings","description":"Get league standings and table for any supported sport. Returns team rankings with wins, losses, draws, points, goal/point difference, and qualification status.","inputSchema":{"type":"object","properties":{"sport":{"type":"string","enum":["football","basketball","american-football","baseball","hockey"],"description":"Sport to get standings for"},"league_name":{"type":"string","description":"League name (e.g. \"Premier League\", \"NBA\", \"NFL\", \"MLB\", \"NHL\", \"La Liga\", \"Bundesliga\")"}},"required":["sport","league_name"]},"annotations":{},"examples":[{"description":"Get Premier League standings","input":{"sport":"football","league_name":"Premier League"}},{"description":"Get NBA standings","input":{"sport":"basketball","league_name":"NBA"}},{"description":"Get NHL standings","input":{"sport":"hockey","league_name":"NHL"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sport":{"type":"string","description":"The sport queried"},"league":{"type":"object","description":"League info with id, name, country, and season"},"standings":{"type":"array","description":"Ranked teams with wins, losses, draws, points, and goal/point difference"},"total":{"type":"number","description":"Number of teams in standings"},"timestamp":{"type":"string","description":"ISO timestamp of the response"}}},"returns":"League table with team rankings, wins, losses, draws, points, goals scored/conceded, goal difference, and qualification/relegation status"}],"icon":"/icons/sports-scores.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with live scores, schedules, standings, and team search across 5 sports"]},{"version":"0.02","date":"2026-03-20","changes":["Switched to ESPN API for real-time current season data"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What are the live scores for [sport] right now? Show me the current [league] standings too."},{"name":"flight-search","displayName":"Flight Search","subtitle":"Live flights with prices & baggage","about":"**Flight Search** finds live flight availability and pricing across airlines for any route — one-way, round-trip, or flexible dates. Get real-time fares, baggage allowances, emissions data, number of stops, and booking deadlines in a single search.\n\nIt searches actual live inventory, not cached prices, so results reflect what's bookable right now. You can scan a date window to find the cheapest travel days, filter to direct-only flights, and narrow by airline. Results include IDs for handoff to a booking tool.\n\nUse **price_calendar**, **popular_routes**, and **where_to_fly** to discover cheap fares and destinations — each result includes a booking link so users can complete purchase directly.\n\n### What you can do\n- **search_flights** — search for flights between two airports on a specific date with price, stops, and duration\n- **search_dates** — scan a date range to find the cheapest days to fly a given route\n- **find_airport** — look up IATA airport codes from city or airport names\n- **get_offer** — refresh a specific offer to get current pricing before purchase\n- **price_calendar** — see the cheapest fare for each day of a month on a route, with a direct booking link per day\n- **popular_routes** — discover the cheapest destinations to fly to from any city, sorted by price with booking links\n- **where_to_fly** — find the cheapest destinations from an origin across all dates (\"where can I fly cheaply from London?\")\n- **airline_routes** — see the busiest routes for a specific airline by annual passenger volume\n\n### Who it's for\nTravelers planning trips, travel agents building itineraries, and anyone looking for cheap flight deals.\n\n### How to use it\n1. If you don't know the IATA codes, call **find_airport** first.\n2. Call **search_flights** with origin, destination, and departure date for live bookable results.\n3. If dates are flexible, use **search_dates** to find the cheapest day in a window, then **search_flights** on that date.\n4. To browse cheapest fares day-by-day, use **price_calendar** — each day includes a booking link.\n5. Not sure where to go? Use **where_to_fly** or **popular_routes** to find the cheapest destinations from your city.\n6. Before booking via the platform, call **get_offer** to confirm current pricing.\n\n### Getting started\nNo account connection required — call **find_airport** to look up your origin and destination codes before searching.","version":"0.08","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_flights","displayName":"Search Flights","description":"Search for flight offers between two airports. Returns prices, airlines, departure and arrival times, duration, number of stops, baggage, emissions, and booking deadlines for each offer.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Origin airport or city IATA code (e.g. 'LHR', 'NYC', 'SYD')"},"destination":{"type":"string","description":"Destination airport or city IATA code"},"departure_date":{"type":"string","description":"Departure date in YYYY-MM-DD format"},"return_date":{"type":"string","description":"Return date for round-trip (omit for one-way)"},"adults":{"type":"number","default":1,"minimum":1,"maximum":9,"description":"Number of adult passengers (1-9)"},"children":{"type":"number","minimum":0,"maximum":9,"description":"Number of children (2-11 years)"},"cabin_class":{"type":"string","enum":["economy","premium_economy","business","first"],"description":"Cabin class preference"},"max_connections":{"type":"number","default":1,"minimum":0,"maximum":2,"description":"Maximum number of stops (0 for direct only, 1-2 for connections)"},"max_results":{"type":"number","default":10,"maximum":25,"minimum":1,"description":"Maximum number of offers to return"},"airlines":{"type":"array","description":"Restrict results to airline IATA codes (e.g. ['BA', 'AA'])","items":{"type":"string"}},"departure_window":{"type":"string","description":"Departure time window in HH-HH local time (e.g. \"6-20\")"},"sort_by":{"type":"string","enum":["price","duration","departure_time","arrival_time"],"description":"Sort results by price, duration, departure time, or arrival time"}},"required":["origin","destination","departure_date"]},"annotations":{},"examples":[{"description":"One-way flight from London to New York","input":{"origin":"LHR","destination":"JFK","departure_date":"2026-04-15"}},{"description":"Round-trip business class from Sydney to Tokyo for 2 adults","input":{"origin":"SYD","destination":"NRT","departure_date":"2026-05-01","return_date":"2026-05-10","cabin_class":"business","adults":2}},{"description":"Direct flights only from Los Angeles to Paris","input":{"origin":"LAX","destination":"CDG","departure_date":"2026-06-15","max_connections":0,"max_results":5}},{"description":"Morning departures on a preferred airline sorted by duration","input":{"origin":"JFK","destination":"LHR","departure_date":"2026-06-20","airlines":["BA"],"departure_window":"6-12","sort_by":"duration"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"offers":{"type":"array","description":"Flight offers with price, airlines, itineraries, stops, baggage, emissions, and booking deadlines"},"offer_request_id":{"type":"string","description":"Offer request ID for reference"},"count":{"type":"number","description":"Number of offers returned"},"passenger_ids":{"type":"array","description":"Passenger IDs needed for booking — pass these to travel-booking book_flight","items":{"type":"object","properties":{"id":{"type":"string","description":"Passenger ID (starts with 'pas_')"},"type":{"type":"string","description":"Passenger type (adult, child, etc.)"},"age":{"type":"number","description":"Passenger age (for children)"}}}},"passengers":{"type":"object","description":"Passenger breakdown — prices are total for all passengers combined","properties":{"adults":{"type":"number","description":"Number of adult passengers"},"children":{"type":"number","description":"Number of child passengers"},"total":{"type":"number","description":"Total number of passengers"}}},"route":{"type":"string","description":"Route summary (e.g. \"LHR → JFK\")"},"departure_date":{"type":"string","description":"Departure date searched"},"return_date":{"type":"string","description":"Return date searched (null for one-way)"},"trip_type":{"type":"string","description":"Trip type: \"one-way\" or \"round-trip\""}}},"returns":"List of flight offers with airlines, departure/arrival times, duration, stops, prices, baggage, emissions, and booking deadlines"},{"name":"search_dates","displayName":"Search Flexible Dates","description":"Scan a bounded date window and return the cheapest departure dates for a route, using the same flight filters you would use for a normal search.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Origin airport or city IATA code (e.g. 'LHR', 'NYC', 'SYD')"},"destination":{"type":"string","description":"Destination airport or city IATA code"},"start_date":{"type":"string","description":"Start of the search window in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End of the search window in YYYY-MM-DD format (up to 21 days from start_date)"},"trip_duration":{"type":"number","minimum":1,"maximum":30,"description":"Trip length in days for round-trip searches (omit for one-way flexible date search)"},"adults":{"type":"number","default":1,"minimum":1,"maximum":9,"description":"Number of adult passengers (1-9)"},"children":{"type":"number","minimum":0,"maximum":9,"description":"Number of children (2-11 years)"},"cabin_class":{"type":"string","enum":["economy","premium_economy","business","first"],"description":"Cabin class preference"},"max_connections":{"type":"number","default":1,"minimum":0,"maximum":2,"description":"Maximum number of stops (0 for direct only, 1-2 for connections)"},"max_results":{"type":"number","default":10,"minimum":1,"maximum":25,"description":"Maximum number of date options to return"},"airlines":{"type":"array","description":"Restrict date search to airline IATA codes (e.g. ['BA', 'AA'])","items":{"type":"string"}},"departure_window":{"type":"string","description":"Departure time window in HH-HH local time (e.g. \"6-20\")"},"sort_by_price":{"type":"boolean","description":"Sort returned dates by price ascending. Set false to keep dates in chronological order."}},"required":["origin","destination","start_date","end_date"]},"annotations":{},"examples":[{"description":"Cheapest one-way flights across a week","input":{"origin":"JFK","destination":"LHR","start_date":"2026-06-01","end_date":"2026-06-07"}},{"description":"Cheapest 7-day round-trip over a flexible two-week window","input":{"origin":"SFO","destination":"NRT","start_date":"2026-07-01","end_date":"2026-07-14","trip_duration":7,"max_connections":0}}],"pricing":"free","outputSchema":{"type":"object","properties":{"dates":{"type":"array","description":"Flexible date options with the cheapest matching fare found for each departure date"},"count":{"type":"number","description":"Number of date options returned"},"date_range":{"type":"string","description":"Date window searched"},"trip_type":{"type":"string","description":"Trip type: \"one-way\" or \"round-trip\""},"trip_duration":{"type":"number","description":"Round-trip duration in days, if used"},"partial_failures":{"type":"array","description":"Per-date failures skipped during the sweep"}}},"returns":"Cheapest departure dates within a bounded search window, plus a sample fare for each matching day"},{"name":"find_airport","displayName":"Find Airport","description":"Search for airport or city IATA codes by name. Useful when you know the city or airport name but need the IATA code for flight searches.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Airport name, city name, or IATA code to search for"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find airports in London","input":{"query":"London"}},{"description":"Look up an airport by partial name","input":{"query":"Charles de Gaulle"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Matching airports and cities with IATA codes, names, and locations"},"count":{"type":"number","description":"Number of results found"},"query":{"type":"string","description":"Original search query"}}},"returns":"Matching airports and cities with IATA code, name, city, country, coordinates, and timezone"},{"name":"get_offer","displayName":"Get Offer Details","description":"Get refreshed details for a specific Duffel flight offer by its ID. Returns updated pricing, baggage info, available services, and booking deadline. Requires a Duffel API account connection.","inputSchema":{"type":"object","properties":{"offer_id":{"type":"string","description":"Offer ID from search_flights results (e.g. 'off_0000...')"}},"required":["offer_id"]},"annotations":{},"examples":[{"description":"Get details for a specific offer","input":{"offer_id":"off_0000AEdHh0OlkSORal"}},{"description":"Check if an offer is still available","input":{"offer_id":"off_0000AEdHh0OlkSORal"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"offer_id":{"type":"string","description":"The offer ID"},"airline":{"type":"object","description":"Airline name, IATA code, and logo"},"price":{"type":"object","description":"Total, base, and tax amounts with currency"},"outbound":{"type":"object","description":"Outbound flight details"},"return":{"type":"object","description":"Return flight details (if round-trip)"},"conditions":{"type":"object","description":"Refund and change conditions"},"booking_deadline":{"type":"string","description":"Deadline for booking this offer"}}},"returns":"Refreshed offer details with updated pricing, baggage, emissions, and booking deadline"},{"name":"price_calendar","displayName":"Price Calendar","description":"Show the cheapest available fare for each day of a month on a given route. Each day includes a direct booking link. Useful for finding the cheapest travel day.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Origin airport or city IATA code (e.g. 'LON', 'JFK')"},"destination":{"type":"string","description":"Destination airport or city IATA code (e.g. 'NYC', 'CDG')"},"month":{"type":"string","description":"Month to scan in YYYY-MM format (e.g. \"2026-06\")"},"adults":{"type":"number","default":1,"minimum":1,"maximum":9,"description":"Number of adult passengers (used when building the booking link)"}},"required":["origin","destination","month"]},"annotations":{},"examples":[{"description":"Find the cheapest days to fly London to Paris in May","input":{"origin":"LON","destination":"CDG","month":"2026-05"}},{"description":"Price calendar for New York to Miami in June","input":{"origin":"JFK","destination":"MIA","month":"2026-06"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"days":{"type":"array","description":"One entry per day with cheapest fare, airline code, departure time, stops, and booking URL"},"count":{"type":"number","description":"Number of days with available fares"},"route":{"type":"string","description":"Route summary"},"month":{"type":"string","description":"Month searched (YYYY-MM)"},"currency":{"type":"string","description":"Price currency (USD)"}}},"returns":"Day-by-day cheapest fare for the route with airline, departure time, stops, and a direct booking link per day"},{"name":"popular_routes","displayName":"Popular Routes","description":"Discover the cheapest destinations to fly to from a given city, sorted by price. Each result includes a direct booking link.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Origin airport or city IATA code (e.g. 'LON', 'JFK', 'SYD')"},"adults":{"type":"number","default":1,"minimum":1,"maximum":9,"description":"Number of adult passengers"},"max_results":{"type":"number","default":20,"minimum":1,"maximum":50,"description":"Maximum number of destinations to return"}},"required":["origin"]},"annotations":{},"examples":[{"description":"Find the cheapest places to fly from London","input":{"origin":"LON"}},{"description":"Top 10 cheapest routes from New York","input":{"origin":"JFK","max_results":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"routes":{"type":"array","description":"Cheapest destinations sorted by price, each with airline, date, stops, and booking URL"},"count":{"type":"number","description":"Number of destinations returned"},"origin":{"type":"string","description":"Origin IATA code"},"currency":{"type":"string","description":"Price currency (USD)"}}},"returns":"Cheapest destinations from the origin city sorted by price with airline, departure date, and a direct booking link"},{"name":"where_to_fly","displayName":"Where to Fly","description":"Find the cheapest destinations to fly to from any origin city across all upcoming dates. Great for open-jaw \"where should I go?\" searches with optional direct-only and cabin class filters.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Origin airport or city IATA code (e.g. 'LON', 'JFK', 'SYD')"},"cabin_class":{"type":"string","enum":["economy","premium_economy","business","first"],"description":"Cabin class preference (default: economy)"},"direct_only":{"type":"boolean","description":"Return only non-stop flights (default: false)"},"adults":{"type":"number","default":1,"minimum":1,"maximum":9,"description":"Number of adult passengers (used to build the booking link)"},"max_results":{"type":"number","default":20,"minimum":1,"maximum":50,"description":"Maximum number of destinations to return"}},"required":["origin"]},"annotations":{},"examples":[{"description":"Where can I fly cheaply from London?","input":{"origin":"LON"}},{"description":"Cheapest direct flights from New York","input":{"origin":"JFK","direct_only":true,"max_results":10}},{"description":"Cheapest business class destinations from Dubai","input":{"origin":"DXB","cabin_class":"business","max_results":15}}],"pricing":"free","outputSchema":{"type":"object","properties":{"deals":{"type":"array","description":"Cheapest destinations sorted by price, each with airline, date, stops, duration, and booking URL"},"count":{"type":"number","description":"Number of destinations returned"},"origin":{"type":"string","description":"Origin IATA code"},"currency":{"type":"string","description":"Price currency (USD)"}}},"returns":"Cheapest destinations from the origin across all upcoming dates, sorted by price, with airline, stops, duration, and a direct booking link"},{"name":"airline_routes","displayName":"Airline Routes","description":"See the busiest routes operated by a specific airline, ranked by annual passenger volume. Useful for finding which cities an airline serves most frequently.","inputSchema":{"type":"object","properties":{"airline_code":{"type":"string","description":"2-letter IATA airline code (e.g. 'BA' for British Airways, 'AA' for American)"},"max_results":{"type":"number","default":20,"minimum":1,"maximum":50,"description":"Maximum number of routes to return"}},"required":["airline_code"]},"annotations":{},"examples":[{"description":"Top routes operated by British Airways","input":{"airline_code":"BA"}},{"description":"Top 10 routes for American Airlines","input":{"airline_code":"AA","max_results":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"routes":{"type":"array","description":"Busiest routes for the airline sorted by annual passenger count"},"count":{"type":"number","description":"Number of routes returned"},"airline_code":{"type":"string","description":"Airline IATA code queried"}}},"returns":"Busiest routes for the airline sorted by annual passenger volume with origin, destination, and passenger count"}],"icon":"/icons/flight-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with flight search, airport lookup, and offer details"]},{"version":"0.02","date":"2026-03-20","changes":["Return passenger_ids and offer_request_id from search results for booking"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.04","date":"2026-03-29","changes":["Added flexible-date search, airline and time-window filters, local sorting, and more resilient Duffel requests"]},{"version":"0.05","date":"2026-04-27","changes":["Added price_calendar (cheapest fare per day with booking links) and popular_routes (cheapest destinations from any city)"]},{"version":"0.06","date":"2026-04-27","changes":["search_flights, search_dates, and find_airport now work out of the box with no API key required"]},{"version":"0.07","date":"2026-04-27","changes":["Added where_to_fly (cheapest destinations from any origin across all dates) and airline_routes (busiest routes for a given airline)"]},{"version":"0.08","date":"2026-05-08","changes":["search_flights now respects the exact requested departure date — previously it sliced the date down to its month and returned the cheapest day in that month, so asking for 2026-05-30 could return offers for 2026-05-20. Results outside the requested date are filtered out, and a no_exact_date_matches flag plus relabelled card title surfaces it when only nearby dates are available."]}],"premadePrompt":"Find me the cheapest economy flights from [origin city] to [destination city] around [travel date]. I'm flexible by a few days if it saves money."},{"name":"travel-booking","displayName":"Travel Booking","subtitle":"Book flights & hotels — real bookings","about":"**Travel Booking** books real flights and hotel stays — not just searches. Both return a secure checkout link so the traveller pays directly with their card. It handles the full booking lifecycle from search results to confirmation, cancellation, and status checks.\n\nFor flights, pair it with the flight-search tool to find offers, then use this tool to convert the best offer into a real booking with a payment link. For hotels, search by location and dates, pick a rate, and get a checkout URL in seconds. Both flows support cancellation with a preview of refund terms before you commit.\n\n### What you can do\n- **book_flight** — book a flight from a search offer and return a checkout URL for the passenger to pay\n- **get_booking** — check status, tickets, and available actions for an existing flight booking\n- **list_bookings** — list recent flight bookings with status and totals\n- **cancel_booking** — preview refund terms or confirm cancellation for a flight booking\n- **pay_held_booking** — complete payment on a flight booking that was held without payment\n- **search_stays** — search for available hotels by location and dates with room rates and cancellation timelines\n- **book_stay** — book a hotel room from search results and return a checkout URL for the guest\n- **get_stay_booking** — retrieve full details of an existing hotel stay booking\n- **cancel_stay** — preview cancellation policy or cancel a hotel stay booking\n- **search_deals** — find the cheapest flight fares for a route in a given month, each with a direct booking link to complete purchase on Aviasales\n\n### Who it's for\nTravel agents, AI concierge assistants, and anyone building booking workflows for flights and hotels.\n\n### How to use it\n1. For flights: use **search_deals** to find cheap fares with booking links, or run flight-search and call **book_flight** to book via the platform with a checkout URL\n2. For hotels: call **search_stays** with a location and dates, then **book_stay** with the rate_id and guest details to get a checkout URL\n3. Share the checkout URL or booking link with the traveller — they complete payment directly\n4. Use **get_booking** or **get_stay_booking** to check status after payment, and **cancel_booking** or **cancel_stay** to see refund terms before cancelling\n\n### Getting started\nConnect your flight booking account to enable platform flight bookings. Hotel search and deal search work out of the box.","version":"0.06","categories":["productivity","data"],"currency":"USD","skills":[{"name":"book_flight","displayName":"Book Flight","description":"Book a flight from search results. Creates a booking and returns a payment link for the customer to complete the purchase with their card. The flight is held until payment is received. If the airline requires immediate payment, charges the platform balance instead.","inputSchema":{"type":"object","properties":{"offer_id":{"type":"string","description":"Flight offer ID from flight-search results (starts with 'off_')"},"passengers":{"type":"array","description":"Passenger details: id (from search), given_name, family_name, title, gender, born_on, email, phone_number. Add identity_documents for international.","items":{"type":"object","properties":{"id":{"type":"string","description":"Passenger ID from the flight search offer (starts with pas_)"},"given_name":{"type":"string","description":"First name as on passport/ID"},"family_name":{"type":"string","description":"Last name as on passport/ID"},"title":{"type":"string","enum":["mr","mrs","ms","miss","dr"],"description":"Title (mr/mrs/ms/miss/dr)"},"gender":{"type":"string","enum":["m","f"],"description":"Gender (m or f)"},"born_on":{"type":"string","description":"Date of birth in YYYY-MM-DD format"},"email":{"type":"string","description":"Contact email address"},"phone_number":{"type":"string","description":"Phone number in international format (e.g. +442080160509)"},"identity_documents":{"type":"array","description":"Passport or ID documents (required for international flights)","items":{"type":"object","properties":{"type":{"type":"string","description":"Document type (e.g. passport)"},"unique_identifier":{"type":"string","description":"Document number"},"issuing_country_code":{"type":"string","description":"Two-letter country code (e.g. GB)"},"expires_on":{"type":"string","description":"Expiry date in YYYY-MM-DD format"}}}}},"required":["id","given_name","family_name","title","gender","born_on","email","phone_number"]}},"payment_type":{"type":"string","default":"balance","enum":["balance"],"description":"Payment method — balance uses the platform's pre-funded account"}},"required":["offer_id","passengers"]},"annotations":{},"examples":[{"description":"Book a one-way flight for one adult passenger","input":{"offer_id":"off_0000AEdHh0OlkSORal","passengers":[{"id":"pas_0000AEdHh0OlkSORam","given_name":"Amelia","family_name":"Earhart","title":"ms","gender":"f","born_on":"1990-07-24","email":"amelia@example.com","phone_number":"+442080160509"}]}},{"description":"Book an international flight with passport details","input":{"offer_id":"off_0000AEdHh0OlkSORal","passengers":[{"id":"pas_0000AEdHh0OlkSORam","given_name":"James","family_name":"Smith","title":"mr","gender":"m","born_on":"1985-03-15","email":"james@example.com","phone_number":"+442080160509","identity_documents":[{"type":"passport","unique_identifier":"ST0123456","issuing_country_code":"GB","expires_on":"2029-04-25"}]}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Booking status (confirmed or held)"},"order_id":{"type":"string","description":"Order ID for managing this booking"},"checkout_url":{"type":"string","description":"Payment link for the customer to pay by card (null if already paid)"},"booking_reference":{"type":"string","description":"Airline booking reference (PNR)"},"airline":{"type":"string","description":"Airline name"},"total_amount":{"type":"string","description":"Total amount charged"},"total_currency":{"type":"string","description":"Currency of the charge"},"slices":{"type":"array","description":"Flight route details"},"tickets":{"type":"array","description":"Ticket/document details"},"available_actions":{"type":"array","description":"Available actions (cancel, change)"},"cancellation_deadline":{"type":"string","description":"Deadline for free cancellation"}}},"returns":"Booking confirmation with order ID, booking reference, airline, ticket details, total charged, and cancellation deadline"},{"name":"get_booking","displayName":"Get Booking Details","description":"Check the status of an existing flight booking. Returns booking reference, airline, route, dates, passengers, payment status, available actions, and ticket numbers.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Booking order ID (starts with 'ord_')"}},"required":["order_id"]},"annotations":{},"examples":[{"description":"Check the status of a booking","input":{"order_id":"ord_0000AEdHh0OlkSORal"}},{"description":"Get ticket details for an existing booking","input":{"order_id":"ord_0000BFdIi1PlkTQSbm"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Order ID"},"booking_reference":{"type":"string","description":"Airline booking reference (PNR)"},"airline":{"type":"string","description":"Airline name"},"total_amount":{"type":"string","description":"Total booking amount"},"total_currency":{"type":"string","description":"Currency"},"payment_status":{"type":"string","description":"Payment status (paid/pending)"},"slices":{"type":"array","description":"Flight route details with segments"},"passengers":{"type":"array","description":"Passenger details"},"tickets":{"type":"array","description":"Ticket/document details"},"available_actions":{"type":"array","description":"Available actions (cancel, change)"}}},"returns":"Full booking details including reference, airline, route, dates, passengers, payment status, tickets, and available actions"},{"name":"list_bookings","displayName":"List Bookings","description":"List recent flight bookings. Returns a summary of each booking with order ID, booking reference, airline, route, dates, status, and total amount.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","default":10,"minimum":1,"maximum":50,"description":"Number of bookings to return (1-50)"}},"required":[]},"annotations":{},"examples":[{"description":"List the 10 most recent bookings","input":{}},{"description":"List the last 5 bookings","input":{"limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"bookings":{"type":"array","description":"List of recent bookings"},"count":{"type":"number","description":"Number of bookings returned"}}},"returns":"List of recent bookings with order ID, booking reference, airline, route, dates, status, and total amount"},{"name":"cancel_booking","displayName":"Cancel Booking","description":"Cancel a flight booking and get refund information. When confirm is false (default), returns a refund quote without cancelling. When confirm is true, executes the cancellation with the airline and processes the refund.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Booking order ID to cancel (starts with 'ord_')"},"confirm":{"type":"boolean","default":false,"description":"Set to true to confirm the cancellation. When false, returns refund quote only without cancelling."}},"required":["order_id"]},"annotations":{},"examples":[{"description":"Get a refund quote for a booking (does not cancel)","input":{"order_id":"ord_0000AEdHh0OlkSORal"}},{"description":"Cancel a booking and confirm the refund","input":{"order_id":"ord_0000AEdHh0OlkSORal","confirm":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Status: refund_quote or cancelled"},"cancellation_id":{"type":"string","description":"Cancellation request ID"},"refund_amount":{"type":"string","description":"Refund amount"},"refund_currency":{"type":"string","description":"Refund currency"},"refund_to":{"type":"string","description":"Where the refund goes (e.g. balance)"},"expires_at":{"type":"string","description":"Deadline to confirm the cancellation (quote only)"},"confirmed_at":{"type":"string","description":"When the cancellation was confirmed"}}},"returns":"Refund quote (when confirm is false) or cancellation confirmation with refund details (when confirm is true)"},{"name":"pay_held_booking","displayName":"Pay Held Booking","description":"Pay for a booking that was held without payment. Fetches the current order total and submits payment. Only works for orders that have not yet been paid.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Order ID of the held booking (starts with 'ord_')"}},"required":["order_id"]},"annotations":{},"examples":[{"description":"Pay for a held booking","input":{"order_id":"ord_0000AEdHh0OlkSORal"}},{"description":"Complete payment on a pending order","input":{"order_id":"ord_0000BFdIi1PlkTQSbm"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Payment status (paid)"},"payment_id":{"type":"string","description":"Payment ID"},"order_id":{"type":"string","description":"Order ID"},"amount":{"type":"string","description":"Amount paid"},"currency":{"type":"string","description":"Currency"}}},"returns":"Payment confirmation with payment ID, amount paid, and currency"},{"name":"search_stays","displayName":"Search Hotel Stays","description":"Search for available hotel stays by location and dates. Returns accommodations with room options, rates, pricing breakdown (total, tax, fee, due at accommodation), cancellation timelines, rate conditions, and check-in/out times. Use rate_id from results to book.","inputSchema":{"type":"object","properties":{"check_in_date":{"type":"string","description":"Check-in date in YYYY-MM-DD format"},"check_out_date":{"type":"string","description":"Check-out date in YYYY-MM-DD format"},"accommodation_id":{"type":"string","description":"Search a specific property by its Duffel accommodation ID (starts with 'acc_'). Use instead of location/coordinates."},"location":{"type":"string","description":"Location name to search near (e.g. \"Paris\", \"London Bridge\") — geocoded automatically. Use instead of latitude/longitude."},"latitude":{"type":"number","description":"Latitude of the search centre (use with longitude instead of location)"},"longitude":{"type":"number","description":"Longitude of the search centre (use with latitude instead of location)"},"radius_km":{"type":"number","default":5,"description":"Search radius in kilometres (default 5, max 100)"},"rooms":{"type":"number","default":1,"description":"Number of rooms required (default 1)"},"adults":{"type":"number","default":1,"description":"Number of adult guests (default 1)"},"children_ages":{"type":"array","description":"Ages of child guests (e.g. [5, 10] for two children)","items":{"type":"number"}},"limit":{"type":"number","default":5,"description":"Max number of properties to return (1-10, default 5)"}},"required":["check_in_date","check_out_date"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Search for hotels in Paris for 2 nights","input":{"location":"Paris","check_in_date":"2026-05-10","check_out_date":"2026-05-12","adults":2}},{"description":"Search near specific coordinates","input":{"latitude":51.5074,"longitude":-0.1278,"check_in_date":"2026-06-01","check_out_date":"2026-06-03","rooms":1,"adults":1}}],"pricing":"free","outputSchema":{"type":"object","properties":{"accommodations":{"type":"array","description":"List of available accommodations with room rates"},"count":{"type":"number","description":"Number of accommodations returned"},"check_in_date":{"type":"string","description":"Check-in date"},"check_out_date":{"type":"string","description":"Check-out date"}}},"returns":"List of available accommodations with room rates, pricing breakdown, cancellation timelines, and key collection info"},{"name":"book_stay","displayName":"Book Hotel Stay","description":"Book a hotel stay from search results. Returns a checkout_url for the guest to pay via card. The checkout page confirms the rate, collects payment, and creates the booking — showing all required pricing, cancellation policy, conditions, and key collection details.","inputSchema":{"type":"object","properties":{"rate_id":{"type":"string","description":"Room rate ID from search_stays results (starts with 'rat_')"},"guests":{"type":"array","description":"Guest details — at least one required","items":{"type":"object","properties":{"given_name":{"type":"string","description":"First name"},"family_name":{"type":"string","description":"Last name"},"born_on":{"type":"string","description":"Date of birth in YYYY-MM-DD format"}},"required":["given_name","family_name","born_on"]}},"email":{"type":"string","description":"Lead guest email address"},"phone_number":{"type":"string","description":"Lead guest phone number in international format (e.g. +442080160509)"},"special_requests":{"type":"string","description":"Optional special requests (e.g. early check-in, cot required)"}},"required":["rate_id","guests","email","phone_number"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Book a hotel room for one guest","input":{"rate_id":"rat_0000AEdHh0OlkSORal","guests":[{"given_name":"Amelia","family_name":"Earhart","born_on":"1987-07-24"}],"email":"amelia@example.com","phone_number":"+442080160509"}},{"description":"Book with a special request","input":{"rate_id":"rat_0000BFdIi1PlkTQSbm","guests":[{"given_name":"James","family_name":"Smith","born_on":"1985-03-15"}],"email":"james@example.com","phone_number":"+442080160510","special_requests":"Early check-in at 2pm if possible"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Status: awaiting_payment"},"checkout_url":{"type":"string","description":"Payment link — send this to the guest to complete the booking"}}},"returns":"checkout_url for the guest to pay and complete the booking at toolrouter.com/checkout/stay"},{"name":"get_stay_booking","displayName":"Get Stay Booking","description":"Retrieve full details of an existing hotel stay booking. Returns booking reference, status, accommodation info, check-in/out times, pricing breakdown, cancellation timeline, rate conditions, and key collection instructions.","inputSchema":{"type":"object","properties":{"booking_id":{"type":"string","description":"Stay booking ID (starts with 'bok_')"}},"required":["booking_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get details of a stay booking","input":{"booking_id":"bok_0000AEdHh0OlkSORal"}},{"description":"Check key collection instructions","input":{"booking_id":"bok_0000BFdIi1PlkTQSbm"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"booking_id":{"type":"string","description":"Booking ID"},"reference":{"type":"string","description":"Accommodation booking reference"},"status":{"type":"string","description":"Booking status (confirmed or cancelled)"},"confirmed_at":{"type":"string","description":"Confirmation timestamp"},"accommodation_name":{"type":"string","description":"Accommodation name"},"check_in_date":{"type":"string","description":"Check-in date"},"check_out_date":{"type":"string","description":"Check-out date"},"key_collection":{"type":"object","description":"Key collection instructions"}}},"returns":"Full stay booking details including reference, pricing, cancellation policy, and key collection instructions"},{"name":"cancel_stay","displayName":"Cancel Stay Booking","description":"Cancel a hotel stay booking. When confirm is false (default), shows the cancellation policy and conditions without cancelling. When confirm is true, cancels the booking immediately.","inputSchema":{"type":"object","properties":{"booking_id":{"type":"string","description":"Stay booking ID to cancel (starts with 'bok_')"},"confirm":{"type":"boolean","default":false,"description":"Set to true to confirm cancellation. When false (default), shows cancellation policy only without cancelling."}},"required":["booking_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Preview cancellation policy (does not cancel)","input":{"booking_id":"bok_0000AEdHh0OlkSORal"}},{"description":"Cancel a stay booking","input":{"booking_id":"bok_0000AEdHh0OlkSORal","confirm":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Status: cancellation_preview or cancelled"},"booking_id":{"type":"string","description":"Booking ID"},"accommodation_name":{"type":"string","description":"Accommodation name (preview only)"},"cancellation_timeline":{"type":"array","description":"Refund policy timeline (preview only)"},"message":{"type":"string","description":"Summary of action taken"}}},"returns":"Cancellation policy preview (confirm:false) or cancellation confirmation (confirm:true)"},{"name":"search_deals","displayName":"Search Flight Deals","description":"Find the cheapest flight fares for a route in a given month. Returns results sorted by price, each with a direct booking link to Aviasales so the traveller can complete the purchase.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Origin airport or city IATA code (e.g. 'LON', 'JFK', 'SYD')"},"destination":{"type":"string","description":"Destination airport or city IATA code (e.g. 'NYC', 'CDG', 'NRT')"},"departure_date":{"type":"string","description":"Month to search in YYYY-MM format (e.g. \"2026-06\"), or a specific date in YYYY-MM-DD format"},"cabin_class":{"type":"string","enum":["economy","business","first"],"description":"Cabin class (default: economy)"},"adults":{"type":"number","default":1,"minimum":1,"maximum":9,"description":"Number of adult passengers (1–9)"},"max_results":{"type":"number","default":10,"minimum":1,"maximum":20,"description":"Maximum number of results to return"}},"required":["origin","destination","departure_date"]},"annotations":{},"examples":[{"description":"Cheapest flights from London to New York in June","input":{"origin":"LON","destination":"NYC","departure_date":"2026-06"}},{"description":"Business class deals from Sydney to Tokyo","input":{"origin":"SYD","destination":"NRT","departure_date":"2026-07","cabin_class":"business"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"deals":{"type":"array","description":"Flight deals sorted by price, each with departure date, stops, duration, price, and a booking URL"},"count":{"type":"number","description":"Number of results returned"},"route":{"type":"string","description":"Route summary (e.g. \"LON → JFK\")"},"month":{"type":"string","description":"Month searched (YYYY-MM)"},"currency":{"type":"string","description":"Price currency (USD)"}}},"returns":"Cheapest fares for the route sorted by price, with departure date, stops, duration, and a direct Aviasales booking link"}],"icon":"/icons/travel-booking.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with flight booking, order management, cancellations, and payment"]},{"version":"0.02","date":"2026-03-20","changes":["Hold bookings without payment when airline allows, fall back to instant payment","Require title and gender fields for Duffel API compatibility"]},{"version":"0.03","date":"2026-03-20","changes":["Return checkout_url for held bookings — customers pay via card on the website"]},{"version":"0.04","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.05","date":"2026-04-03","changes":["Added hotel stay booking: search_stays, book_stay, get_stay_booking, cancel_stay"]},{"version":"0.06","date":"2026-04-27","changes":["Added search_deals: cheapest flight fares for a route with direct Aviasales booking links"]}],"premadePrompt":"I need to fly from [city] to [city] on [date] for [number] passenger. Find me some options and book the best one. Also find a hotel near [area] for [check-in date] to [check-out date].","requirements":[{"name":"duffel","type":"secret","displayName":"Flight Data API Token","description":"API token for real-time flight search and pricing data","acquireUrl":"https://app.duffel.com/tokens","envFallback":"DUFFEL_API_TOKEN"}],"credentials":[{"name":"duffel","type":"secret","displayName":"Flight Data API Token","description":"API token for real-time flight search and pricing data","acquireUrl":"https://app.duffel.com/tokens","envFallback":"DUFFEL_API_TOKEN"}]},{"name":"book-search","displayName":"Book Search","subtitle":"Millions of books and free ebooks","about":"**Book Search** searches a massive catalog of books by title, author, subject, or ISBN — and gives you full access to 60,000+ public domain ebooks you can read in full. Get cover images, descriptions, publication details, author bios, and trending titles, all in one place.\n\nIt's useful for readers discovering what to read next, researchers tracking down specific editions, and developers building book recommendation or reading features. The free ebook library includes classic literature, history, philosophy, and science texts from Project Gutenberg that you can read directly without downloading anything.\n\n### What you can do\n- Search books by title, author, topic, or any keyword combination\n- Look up exact editions by ISBN for precise publication details\n- Browse by author name or subject/genre\n- Get full author biographies and their top works\n- Discover trending and popular books\n- Search 60,000+ public domain ebooks and read their full text\n\n### Who it's for\nReaders looking for their next book or exploring a genre. Researchers tracking down source texts or specific editions. Writers and content creators looking for source material. Developers building reading apps, recommendation systems, or research tools.\n\n### How to use it\n1. Use **search_books** for open-ended discovery — try a topic, author, or genre\n2. Call **get_book_details** with a work key from search results to get the full description, cover, and publication history\n3. Use **lookup_isbn** when you need details for a specific edition\n4. Use **search_free_ebooks** to find public domain books, then **read_ebook** to fetch the full text\n\n### Getting started\n**search_books** needs no setup — run it with any query to start exploring the catalog immediately.","version":"0.04","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_books","displayName":"Search Books","description":"Search for books by any query including title, author, or topic. Returns matching books with cover images, authors, publication year, and page counts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query — can be a book title, author name, topic, or any combination"},"limit":{"type":"number","description":"Maximum number of results to return (1-50, default 10)","default":10,"minimum":1,"maximum":50},"page":{"type":"number","description":"Page number for paginated results (default 1)","default":1,"minimum":1},"sort":{"type":"string","description":"Sort order for results — \"title\" (alphabetical), \"editions\" (most editions), \"old\" (oldest first), \"new\" (newest first)","enum":["title","editions","old","new"]},"language":{"type":"string","description":"Filter by language using a 3-letter ISO 639-2 code (e.g. \"eng\", \"fra\", \"spa\", \"deu\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for books about machine learning","input":{"query":"machine learning"}},{"description":"Search for a specific book title with limited results","input":{"query":"The Great Gatsby","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_found":{"type":"number","description":"Total number of matching books in the catalog"},"page":{"type":"number","description":"Current page number"},"limit":{"type":"number","description":"Results per page"},"books":{"type":"array","description":"Matching books with title, authors, cover URLs, publish year, and subjects"},"count":{"type":"number","description":"Number of books returned in this page"}}},"returns":"List of matching books with title, authors, cover image URLs, publication year, page count, subjects, and work keys for detailed lookup"},{"name":"get_book_details","displayName":"Get Book Details","description":"Get full details for a specific book by its Open Library work key. Returns the complete description, subjects, cover images, publication date, and related links.","inputSchema":{"type":"object","properties":{"work_key":{"type":"string","description":"Open Library work key (e.g. \"OL45804W\") — obtained from search_books results"}},"required":["work_key"]},"annotations":{},"examples":[{"description":"Get details for \"The Lord of the Rings\"","input":{"work_key":"OL27448W"}},{"description":"Get details using a work key from search results","input":{"work_key":"OL45804W"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"work_key":{"type":"string","description":"The work key looked up"},"title":{"type":"string","description":"Book title"},"description":{"type":"string","description":"Full book description or synopsis"},"subjects":{"type":"array","description":"Subject categories the book belongs to"},"covers":{"type":"array","description":"Cover image URLs"},"first_publish_date":{"type":"string","description":"Date the book was first published"},"links":{"type":"array","description":"Related links (Wikipedia, author sites, etc.)"}}},"returns":"Complete book details including description, subjects, subject places and times, cover image URLs, first publish date, and related links"},{"name":"lookup_isbn","displayName":"Lookup ISBN","description":"Look up a book by its ISBN (10 or 13 digit). Returns the specific edition details including title, publisher, page count, publish date, and cover image.","inputSchema":{"type":"object","properties":{"isbn":{"type":"string","description":"ISBN-10 or ISBN-13 of the book (hyphens are stripped automatically)"}},"required":["isbn"]},"annotations":{},"examples":[{"description":"Look up a book by ISBN-13","input":{"isbn":"9780261103573"}},{"description":"Look up a book by ISBN-10 with hyphens","input":{"isbn":"0-14-028329-X"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"isbn":{"type":"string","description":"The cleaned ISBN looked up"},"title":{"type":"string","description":"Book title"},"publishers":{"type":"array","description":"Publisher names"},"publish_date":{"type":"string","description":"Publication date of this edition"},"number_of_pages":{"type":"number","description":"Number of pages"},"cover_url":{"type":"string","description":"Cover image URL"},"work_key":{"type":"string","description":"Work key for fetching full details via get_book_details"}}},"returns":"Edition details including title, publishers, publish date, page count, cover images, physical format, and work key for further lookup"},{"name":"search_by_author","displayName":"Search by Author","description":"Search for books by a specific author name. Returns all matching books by that author with cover images, publication years, and subjects.","inputSchema":{"type":"object","properties":{"author":{"type":"string","description":"Author name to search for (e.g. \"J.R.R. Tolkien\", \"Stephen King\")"},"limit":{"type":"number","description":"Maximum number of results to return (1-50, default 10)","default":10,"minimum":1,"maximum":50}},"required":["author"]},"annotations":{},"examples":[{"description":"Find books by J.R.R. Tolkien","input":{"author":"J.R.R. Tolkien"}},{"description":"Find books by Stephen King with more results","input":{"author":"Stephen King","limit":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"author":{"type":"string","description":"The author name searched"},"total_found":{"type":"number","description":"Total number of books found by this author"},"books":{"type":"array","description":"Books by the author with titles, covers, and publication details"},"count":{"type":"number","description":"Number of books returned"}}},"returns":"List of books by the specified author with titles, cover image URLs, publication years, page counts, subjects, and work keys"},{"name":"search_by_subject","displayName":"Search by Subject","description":"Find books in a specific subject or topic area. Uses the Open Library subject catalog to return curated book lists for categories like fiction, science, history, and more.","inputSchema":{"type":"object","properties":{"subject":{"type":"string","description":"Subject or topic to browse (e.g. \"science fiction\", \"biography\", \"artificial intelligence\")"},"limit":{"type":"number","description":"Maximum number of results to return (1-50, default 10)","default":10,"minimum":1,"maximum":50}},"required":["subject"]},"annotations":{},"examples":[{"description":"Browse science fiction books","input":{"subject":"science fiction"}},{"description":"Find books about artificial intelligence","input":{"subject":"artificial intelligence","limit":15}}],"pricing":"free","outputSchema":{"type":"object","properties":{"subject":{"type":"string","description":"The subject name"},"total_found":{"type":"number","description":"Total number of books in this subject"},"books":{"type":"array","description":"Books in this subject with titles, authors, and covers"},"count":{"type":"number","description":"Number of books returned"}}},"returns":"List of books in the specified subject with titles, authors, cover image URLs, publication years, and edition counts"},{"name":"get_author_details","displayName":"Get Author Details","description":"Get detailed information about an author by their Open Library author key. Returns biography, birth and death dates, photo, and their top works with publication details.","inputSchema":{"type":"object","properties":{"author_key":{"type":"string","description":"Open Library author key (e.g. \"OL34184A\") — found in search results or author URLs"}},"required":["author_key"]},"annotations":{},"examples":[{"description":"Get details for J.R.R. Tolkien","input":{"author_key":"OL26320A"}},{"description":"Get details for Isaac Asimov","input":{"author_key":"OL34184A"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"author_key":{"type":"string","description":"The author key looked up"},"name":{"type":"string","description":"Author full name"},"bio":{"type":"string","description":"Author biography"},"birth_date":{"type":"string","description":"Author birth date"},"death_date":{"type":"string","description":"Author death date (if applicable)"},"photo_url":{"type":"string","description":"Author photo URL (medium size)"},"total_works":{"type":"number","description":"Total number of works by this author"},"works":{"type":"array","description":"Top works by the author with titles and publication dates"},"works_count":{"type":"number","description":"Number of works returned"}}},"returns":"Author details including name, biography, birth/death dates, photo URLs, total works count, and top works with titles and publication dates"},{"name":"trending_books","displayName":"Trending Books","description":"Discover trending and popular books on Open Library. Returns books that are currently being read, wishlisted, or talked about, with daily, weekly, monthly, or yearly trends.","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Trending period — how far back to look for trending activity (default \"daily\")","enum":["daily","weekly","monthly","yearly"],"default":"daily"}},"required":[]},"annotations":{},"examples":[{"description":"Get today's trending books","input":{}},{"description":"Get books trending this month","input":{"period":"monthly"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"period":{"type":"string","description":"The trending period used"},"books":{"type":"array","description":"Trending books with titles, authors, covers, and reading stats"},"count":{"type":"number","description":"Number of trending books returned"}}},"returns":"List of trending books with titles, authors, cover image URLs, publication years, edition counts, and reading activity stats (already read, want to read, currently reading)"},{"name":"search_free_ebooks","displayName":"Search Free Ebooks","description":"Search over 60,000 public domain books from Project Gutenberg. Find free ebooks by title, author, or topic with download links in multiple formats including plain text, HTML, and EPUB.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query — can be a book title, author name, or keyword"},"language":{"type":"string","description":"Filter by language using ISO 639-1 code (e.g. \"en\", \"fr\", \"de\")"},"topic":{"type":"string","description":"Filter by topic or bookshelf category (e.g. \"children\", \"history\")"},"sort":{"type":"string","description":"Sort order — \"popular\" (most downloaded), \"ascending\" (A-Z), \"descending\" (Z-A)","enum":["popular","ascending","descending"],"default":"popular"},"limit":{"type":"number","description":"Maximum number of results to return (1-32, default 10)","default":10,"minimum":1,"maximum":32}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Shakespeare works","input":{"query":"shakespeare"}},{"description":"Find free history books in English","input":{"query":"history","topic":"history","language":"en","limit":15}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_found":{"type":"number","description":"Total number of matching books in the catalog"},"books":{"type":"array","description":"Matching free ebooks with metadata and download links in multiple formats"},"count":{"type":"number","description":"Number of books returned in this response"}}},"returns":"List of matching free ebooks with titles, authors, subjects, download counts, and download links in HTML, plain text, EPUB, Kindle, and cover image formats"},{"name":"read_ebook","displayName":"Read Ebook","description":"Fetch the actual text content of a free ebook from Project Gutenberg by its book ID. Use this to read, summarize, analyze, or quote from public domain books.","inputSchema":{"type":"object","properties":{"book_id":{"type":"number","description":"Project Gutenberg book ID — obtained from search_free_ebooks results"},"format":{"type":"string","description":"Text format to fetch — \"plain_text\" for raw text or \"html\" for formatted HTML","enum":["plain_text","html"],"default":"plain_text"},"max_length":{"type":"number","description":"Maximum number of characters to return (default 5000, max 50000). Longer books are truncated with a link to the full text.","default":5000,"minimum":1,"maximum":50000}},"required":["book_id"]},"annotations":{},"examples":[{"description":"Read the beginning of Frankenstein","input":{"book_id":84}},{"description":"Read Pride and Prejudice in HTML format with more text","input":{"book_id":1342,"format":"html","max_length":20000}}],"pricing":"free","outputSchema":{"type":"object","properties":{"book_id":{"type":"number","description":"The Gutenberg book ID"},"title":{"type":"string","description":"Book title"},"authors":{"type":"array","description":"Author names"},"text":{"type":"string","description":"The book text content (may be truncated)"},"format":{"type":"string","description":"The format of the returned text (plain_text or html)"},"text_length":{"type":"number","description":"Number of characters in the returned text"},"truncated":{"type":"boolean","description":"Whether the text was truncated to max_length"},"full_text_url":{"type":"string","description":"URL to download the complete book text"}}},"returns":"The book text content with title, authors, format, character count, truncation status, and a URL to the full text for reading the complete work"}],"icon":"/icons/book-search.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with search, book details, ISBN lookup, author search, and subject browsing"]},{"version":"0.02","date":"2026-03-20","changes":["Added sort and language filters to search_books","Added get_author_details skill","Added trending_books skill"]},{"version":"0.03","date":"2026-03-21","changes":["Added search_free_ebooks skill for Project Gutenberg public domain books","Added read_ebook skill to fetch full text of free ebooks"]},{"version":"0.04","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Find me the best books on [topic or genre] and give me a summary of each one with cover images, publication dates, and what makes each worth reading."},{"name":"art-collection-search","displayName":"Art Collection Search","subtitle":"Search art records across global open collections","about":"**Art Collection Search** searches artworks and artists across open museum collections, cultural aggregators, and global art sources — all from a single query. Browse the Metropolitan Museum, Art Institute of Chicago, Cleveland Museum of Art, DigitalNZ, Japan Search, Wikidata, and more in one place.\n\nFinding art across institutions normally means visiting each museum's website separately. This tool normalizes results into a consistent format with images, institutions, dates, mediums, and record links — so you can compare works across collections, discover artists across cultures, and build art-rich content without manual research.\n\n### What you can do\n- Search artworks by artist name, title, movement, keyword, or subject across all supported collections\n- Filter to a specific museum or source for targeted browsing\n- Pull full normalized metadata for any artwork including provenance, medium, dimensions, and record links\n- Look up artists by name to get biographies and top works\n\n### Who it's for\nResearchers, writers, and educators exploring art history. Designers and content creators sourcing public domain imagery. Art enthusiasts discovering works across global institutions without museum memberships.\n\n### How to use it\n1. Use **search_artworks** with an artist name, movement, or keyword — leave source as \"all\" to search everything, or narrow to \"met\", \"artic\", \"cma\", or another provider\n2. Enable has_images: true to filter toward results with usable image URLs for gallery output\n3. Pick a result and call **artwork_details** with its provider and ID to get full normalized metadata\n4. Use **search_artists** to look up a specific artist and get their biography and notable works\n\n### Getting started\n**search_artworks** needs no setup and runs immediately — try any artist name or art movement to get started.","version":"0.02","categories":["data","search"],"currency":"USD","skills":[{"name":"search_artworks","displayName":"Search Artworks","description":"Search artworks across open museum collections, cultural aggregators, and global art-adjacent sources. Returns normalized results with images, institutions, artists, dates, and record links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query such as an artist name, artwork title, movement, keyword, or subject"},"source":{"type":"string","description":"Provider to search: all, met, artic, cma, digitalnz, jpsearch, wikidata, or openverse","enum":["all","met","artic","cma","digitalnz","jpsearch","wikidata","openverse"],"default":"all"},"limit":{"type":"number","description":"Maximum number of artworks to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Results page number for pagination (default 1)","default":1,"minimum":1},"has_images":{"type":"boolean","description":"When true, filter toward results that include a usable image URL for gallery output","default":true}},"required":["query"]},"annotations":{},"examples":[{"description":"Search global open collections for Monet-related artworks with images","input":{"query":"monet","source":"all","limit":6}},{"description":"Search Japan Search specifically for Hiroshige-related records","input":{"query":"hiroshige","source":"jpsearch","limit":4,"has_images":false}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Original search query"},"source":{"type":"string","description":"Provider source used for the search"},"page":{"type":"number","description":"Current results page"},"limit":{"type":"number","description":"Maximum items requested for the page"},"has_images":{"type":"boolean","description":"Whether image-friendly filtering was applied"},"total_found":{"type":"number","description":"Combined provider result count before final page slicing"},"source_totals":{"type":"object","description":"Per-provider result totals used in the search"},"artworks":{"type":"array","description":"Normalized artwork results with provider, institution, identifiers, metadata, and image URLs"},"count":{"type":"number","description":"Number of artworks returned in this response"}}},"returns":"Artwork matches with normalized provider, institution, artist, date, image, and canonical record links"},{"name":"artwork_details","displayName":"Artwork Details","description":"Get the normalized public record for one artwork from any supported provider. Returns richer metadata including institution, rights, dimensions, description, and source links.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Provider source for the artwork record","enum":["met","artic","cma","digitalnz","jpsearch","wikidata","openverse"],"default":"artic"},"artwork_id":{"type":"string","description":"Artwork identifier returned by search_artworks, such as numeric museum IDs, Q-IDs, UUIDs, or a full Japan Search data URI"}},"required":["source","artwork_id"]},"annotations":{},"examples":[{"description":"Get details for a Monet painting from the Art Institute of Chicago","input":{"source":"artic","artwork_id":"16568"}},{"description":"Get details for an Openverse image record","input":{"source":"openverse","artwork_id":"ac533400-7456-4486-9251-7b732980ef0f"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Provider source for the returned artwork"},"museum":{"type":"string","description":"Institution display name retained for backward compatibility"},"institution":{"type":"string","description":"Institution or provider display name"},"artwork_id":{"type":"string","description":"Provider artwork identifier"},"title":{"type":"string","description":"Artwork title"},"artist":{"type":"string","description":"Primary artist or maker name when available"},"date":{"type":"string","description":"Display date for the artwork"},"medium":{"type":"string","description":"Artwork medium or materials"},"dimensions":{"type":"string","description":"Artwork dimensions when available"},"country":{"type":"string","description":"Institution country when known"},"region":{"type":"string","description":"Institution region when known"},"rights":{"type":"string","description":"Rights or usage statement when available"},"license":{"type":"string","description":"License string when available"},"description":{"type":"string","description":"Plain-text description or curatorial summary when available"},"image_url":{"type":"string","description":"Primary image URL for the artwork"},"artwork_url":{"type":"string","description":"Original record URL for the provider item"},"tags":{"type":"array","description":"Tags, styles, or subject labels associated with the artwork"}}},"returns":"A normalized single-artwork record with provider metadata, rights, image URLs, and descriptive fields"},{"name":"search_artists","displayName":"Search Artists","description":"Search artist records across the Art Institute of Chicago and Wikidata. Returns artist names, life dates, short bios, and links to canonical source pages.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Artist search query such as a full name, surname, or transliterated variant"},"source":{"type":"string","description":"Provider to search for artist records: all, artic, or wikidata","enum":["all","artic","wikidata"],"default":"all"},"limit":{"type":"number","description":"Maximum number of artist records to return (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Results page number for pagination (default 1)","default":1,"minimum":1}},"required":["query"]},"annotations":{},"examples":[{"description":"Search global artist sources for Claude Monet","input":{"query":"monet","source":"all","limit":5}},{"description":"Search Wikidata for Hiroshige artist records","input":{"query":"hiroshige","source":"wikidata","limit":3}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Original artist search query"},"source":{"type":"string","description":"Provider used for artist lookup"},"page":{"type":"number","description":"Current results page"},"limit":{"type":"number","description":"Maximum artist results requested"},"source_total_candidates":{"type":"number","description":"Provider candidate count before artist-only filtering"},"source_totals":{"type":"object","description":"Per-provider artist totals used in the search"},"artists":{"type":"array","description":"Normalized artist records with life dates, bios, and museum URLs"},"count":{"type":"number","description":"Number of artist records returned"}}},"returns":"Artist matches with identifiers, life dates, short bios, and links to source records"}],"author":{"name":"Humanleap","url":"https://toolrouter.com","email":"hello@toolrouter.com"},"repository":"https://github.com/Humanleap/toolrouter.git","license":"UNLICENSED","homepage":"https://toolrouter.com/tools/art-collection-search","icon":"/icons/art-collection-search.webp","changelog":[{"version":"0.01","date":"2026-03-26","changes":["Initial release with cross-museum artwork search, artwork details, and artist search backed by public museum APIs."]},{"version":"0.02","date":"2026-03-26","changes":["Expanded to global open sources including Cleveland Museum of Art, DigitalNZ, Japan Search, Wikidata, and Openverse with a normalized provider layer."]}],"premadePrompt":"Search museum collections worldwide for artworks by [artist name] and show me the results with images, institutions, and dates. Then give me a brief background on the artist."},{"name":"contract-opportunities","displayName":"Contract Opportunities","subtitle":"Search public tenders and award history","about":"**Contract Opportunities** searches official public-sector procurement sources for live tenders, recent awards, buyer activity, and supplier-fit signals — all in one place. No more manually checking multiple portals for opportunities you might be missing.\n\nPublic procurement is a large and underserved market. Bid teams spend hours each week across government portals looking for relevant tenders, checking who won previous contracts, and assessing whether their profile fits. This tool automates that research. It covers SAM.gov for US federal contracts, UK and EU procurement notices, and normalizes results into a consistent format regardless of source.\n\n### What you can do\n- **search_opportunities** — find active live tenders by keyword, category, geography, or value band\n- **opportunity_details** — get the full detail view for a specific opportunity: canonical buyer, deadline, codes, and source link\n- **search_awards** — look up recent contract awards to identify incumbents and spending history\n- **buyer_intelligence** — profile a specific buyer: their spending patterns, preferred suppliers, and upcoming activity\n- **match_supplier_profile** — rank tenders by fit against your company's codes, geography, value band, and set-aside status\n- **watchlist_snapshot** — compact digest of new opportunities across a saved watchlist, designed for automation\n\n### Who it's for\nBid managers, business development teams, consultants, and agencies that sell to the public sector. Also useful for market intelligence teams tracking government spending in a particular category.\n\n### How to use it\n1. Start with **search_opportunities** using a keyword or service description to find live tenders\n2. Use **search_awards** on the same keyword to see who's winning contracts and for how much\n3. Open a result with **opportunity_details** to get the full brief and source link\n4. Use **match_supplier_profile** to rank opportunities against your capability profile\n5. Connect your SAM.gov account to include US federal opportunities","version":"0.01","categories":["data","search","finance"],"currency":"USD","skills":[{"name":"search_opportunities","displayName":"Search Opportunities","description":"Search live and recent public procurement opportunities across official tender sources with filters for buyer, codes, geography, dates, values, and set-asides.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword, service, product, buyer, or sector phrase to search for"},"source":{"type":"string","description":"Source to search: all, sam, ted, contracts_finder, public_contracts_scotland, or world_bank","enum":["all","sam","ted","contracts_finder","public_contracts_scotland","world_bank"],"default":"all"},"country_codes":{"type":"array","items":{"type":"string"},"description":"Optional ISO alpha-2 country codes to keep results near target markets"},"buyer_name":{"type":"string","description":"Buyer, agency, or authority name to narrow the search"},"classification_system":{"type":"string","description":"Classification system to interpret classification_code","enum":["any","naics","psc","cpv","unspsc"],"default":"any"},"classification_code":{"type":"string","description":"NAICS, PSC, CPV, or UNSPSC code fragment to match"},"published_from":{"type":"string","description":"Only include notices published on or after this date (YYYY-MM-DD)"},"deadline_before":{"type":"string","description":"Only include opportunities with response deadlines on or before this date (YYYY-MM-DD)"},"value_min":{"type":"number","description":"Minimum contract value to include when a value is available"},"value_max":{"type":"number","description":"Maximum contract value to include when a value is available"},"set_aside":{"type":"string","description":"Set-aside or small-business term to match when the source exposes it"},"include_expired":{"type":"boolean","description":"When true, keep expired opportunities in the results","default":false},"limit":{"type":"number","description":"Maximum opportunities to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}}},"annotations":{},"examples":[{"description":"Find cyber security tenders across public procurement sources","input":{"query":"cyber security","source":"all","limit":6}},{"description":"Find UK public opportunities by CPV code before a deadline","input":{"source":"contracts_finder","classification_system":"cpv","classification_code":"72000000","deadline_before":"2026-06-30","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Total number of matching opportunities found before paging"},"source_totals":{"type":"object","description":"Per-source counts behind the current search"},"skipped_sources":{"type":"array","description":"Sources that were skipped because they were unavailable for this request"},"opportunities":{"type":"array","description":"Normalized opportunity records with buyer, deadline, codes, and source links"},"count":{"type":"number","description":"Number of opportunities returned in this response"}}},"returns":"Normalized tender opportunities with buyer, deadline, value, code, and source metadata"},{"name":"opportunity_details","displayName":"Opportunity Details","description":"Open the canonical notice details for one procurement opportunity so you can inspect deadlines, buyer data, codes, and source documents.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Source that owns the notice record","enum":["sam","ted","contracts_finder","public_contracts_scotland","world_bank"]},"record_id":{"type":"string","description":"Record identifier returned by search_opportunities"},"notice_id":{"type":"string","description":"Optional alias for record_id when you already have a notice id"},"ocid":{"type":"string","description":"Optional alias for record_id when the source uses an OCDS identifier"}},"required":["source"]},"annotations":{},"examples":[{"description":"Open a TED notice by publication number","input":{"source":"ted","record_id":"102534-2016"}},{"description":"Open a Contracts Finder opportunity by OCDS record id","input":{"source":"contracts_finder","record_id":"ocds-h6vhtk-040f17"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"record_id":{"type":"string","description":"Canonical record identifier used for the lookup"},"source_url":{"type":"string","description":"Best source URL for the official notice page or API detail"},"buyer_name":{"type":"string","description":"Buyer or authority behind the notice when available"},"response_deadline_at":{"type":"string","description":"Response deadline for the opportunity when available"},"classifications":{"type":"array","description":"Normalized classification codes attached to the opportunity"}}},"returns":"The normalized detail record for one opportunity with source-specific identifiers and metadata"},{"name":"search_awards","displayName":"Search Awards","description":"Search recent contract awards and incumbents across official public spending and procurement award sources.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword, service, buyer, or sector phrase to search awards for"},"source":{"type":"string","description":"Source to search: all, sam, usaspending, contracts_finder, or public_contracts_scotland","enum":["all","sam","usaspending","contracts_finder","public_contracts_scotland"],"default":"all"},"country_codes":{"type":"array","items":{"type":"string"},"description":"Optional ISO alpha-2 country codes to keep awards near target markets"},"buyer_name":{"type":"string","description":"Buyer or agency name to narrow the award search"},"supplier_name":{"type":"string","description":"Awarded supplier or incumbent name to match"},"classification_system":{"type":"string","description":"Classification system to interpret classification_code","enum":["any","naics","psc","cpv","unspsc"],"default":"any"},"classification_code":{"type":"string","description":"NAICS, PSC, CPV, or UNSPSC code fragment to match"},"awarded_from":{"type":"string","description":"Only include awards on or after this date (YYYY-MM-DD)"},"value_min":{"type":"number","description":"Minimum award value to include when available"},"value_max":{"type":"number","description":"Maximum award value to include when available"},"limit":{"type":"number","description":"Maximum awards to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}}},"annotations":{},"examples":[{"description":"Find recent cyber security contract awards","input":{"query":"cyber security","source":"all","awarded_from":"2025-01-01","limit":6}},{"description":"Find recent awards to a named supplier","input":{"source":"usaspending","supplier_name":"Lockheed Martin","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Total number of matching awards found before paging"},"source_totals":{"type":"object","description":"Per-source counts behind the current award search"},"skipped_sources":{"type":"array","description":"Sources skipped because they were unavailable for this request"},"awards":{"type":"array","description":"Normalized award records with buyer, supplier, value, and source links"},"count":{"type":"number","description":"Number of awards returned in this response"}}},"returns":"Award matches with buyers, incumbents, dates, values, and source metadata"},{"name":"buyer_intelligence","displayName":"Buyer Intelligence","description":"Summarize a buyer or agency by combining open opportunities, recent awards, top suppliers, and value signals from the available sources.","inputSchema":{"type":"object","properties":{"buyer_name":{"type":"string","description":"Buyer, agency, authority, or contracting body to analyze"},"source":{"type":"string","description":"Optional source focus: all or any supported procurement source","enum":["all","sam","ted","contracts_finder","public_contracts_scotland","world_bank","usaspending"],"default":"all"},"country_codes":{"type":"array","items":{"type":"string"},"description":"Optional ISO alpha-2 country codes to keep the buyer analysis geographically tight"},"published_from":{"type":"string","description":"Only include opportunities published on or after this date (YYYY-MM-DD)"},"awarded_from":{"type":"string","description":"Only include awards on or after this date (YYYY-MM-DD)"},"limit":{"type":"number","description":"Number of opportunities and awards to sample for the summary (1-20, default 10)","default":10,"minimum":1,"maximum":20}},"required":["buyer_name"]},"annotations":{},"examples":[{"description":"Summarize a buyer across open tenders and recent awards","input":{"buyer_name":"Ministry of Defence","source":"all","limit":8}}],"pricing":"free","outputSchema":{"type":"object","properties":{"active_opportunity_count":{"type":"number","description":"Opportunity count found for the buyer across the searched sources"},"recent_award_count":{"type":"number","description":"Award count found for the buyer across the searched sources"},"total_awarded_value":{"type":"number","description":"Sampled award value total across the returned award set"},"top_suppliers":{"type":"array","description":"Top suppliers or incumbents found in the buyer award sample"},"open_deadlines":{"type":"array","description":"Nearest open opportunity deadlines for the buyer"}}},"returns":"A buyer-level procurement summary covering open opportunities, recent awards, and incumbent signals"},{"name":"match_supplier_profile","displayName":"Match Supplier Profile","description":"Score opportunities against a supplier profile using classification codes, geography, value range, set-asides, target buyers, and freshness.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Optional search phrase to seed the candidate opportunity set"},"source":{"type":"string","description":"Source to score opportunities from: all, sam, ted, contracts_finder, public_contracts_scotland, or world_bank","enum":["all","sam","ted","contracts_finder","public_contracts_scotland","world_bank"],"default":"all"},"classification_system":{"type":"string","description":"Classification system used by target_classification_codes","enum":["any","naics","psc","cpv","unspsc"],"default":"any"},"target_classification_codes":{"type":"array","items":{"type":"string"},"description":"Target NAICS, PSC, CPV, or UNSPSC codes that define the supplier fit"},"target_country_codes":{"type":"array","items":{"type":"string"},"description":"Target ISO alpha-2 country codes where the supplier wants to bid"},"target_regions":{"type":"array","items":{"type":"string"},"description":"Target subregions, states, or regions that matter for delivery coverage"},"preferred_buyers":{"type":"array","items":{"type":"string"},"description":"Buyer names that should boost the fit score when matched"},"set_aside_eligibility":{"type":"array","items":{"type":"string"},"description":"Set-aside terms the supplier is eligible for"},"value_min":{"type":"number","description":"Preferred minimum deal size for the supplier profile"},"value_max":{"type":"number","description":"Preferred maximum deal size for the supplier profile"},"limit":{"type":"number","description":"Maximum scored matches to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination after scoring (default 1)","default":1,"minimum":1}}},"annotations":{},"examples":[{"description":"Score technology procurement opportunities against a supplier profile","input":{"query":"software development","classification_system":"cpv","target_classification_codes":["72000000"],"target_country_codes":["GB","US"],"value_min":50000,"value_max":5000000,"limit":6}}],"pricing":"free","outputSchema":{"type":"object","properties":{"candidate_count":{"type":"number","description":"Number of scored opportunities considered before final paging"},"profile":{"type":"object","description":"Normalized supplier profile used for scoring"},"matches":{"type":"array","description":"Scored opportunity matches sorted by fit score"},"count":{"type":"number","description":"Number of scored matches returned in this response"}}},"returns":"Ranked opportunity matches with fit scores and reasons tied to the supplier profile"},{"name":"watchlist_snapshot","displayName":"Watchlist Snapshot","description":"Return a compact tender watchlist snapshot sorted by deadline, publication recency, or value for alerting and automation use cases.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword, service, buyer, or sector phrase to monitor"},"source":{"type":"string","description":"Source to monitor: all, sam, ted, contracts_finder, public_contracts_scotland, or world_bank","enum":["all","sam","ted","contracts_finder","public_contracts_scotland","world_bank"],"default":"all"},"country_codes":{"type":"array","items":{"type":"string"},"description":"Optional ISO alpha-2 country codes to keep the watchlist relevant to target markets"},"buyer_name":{"type":"string","description":"Buyer or authority name to monitor"},"classification_system":{"type":"string","description":"Classification system to interpret classification_code","enum":["any","naics","psc","cpv","unspsc"],"default":"any"},"classification_code":{"type":"string","description":"Classification code fragment to filter by"},"published_from":{"type":"string","description":"Only include notices published on or after this date (YYYY-MM-DD)"},"deadline_before":{"type":"string","description":"Only include notices due on or before this date (YYYY-MM-DD)"},"set_aside":{"type":"string","description":"Set-aside term to monitor when available"},"include_expired":{"type":"boolean","description":"When true, include expired notices in the snapshot","default":false},"sort_by":{"type":"string","description":"How to rank the snapshot items","enum":["deadline","published","value"],"default":"deadline"},"limit":{"type":"number","description":"Maximum snapshot items to return (1-20, default 10)","default":10,"minimum":1,"maximum":20}}},"annotations":{},"examples":[{"description":"Build a deadline-sorted watchlist for cyber security tenders","input":{"query":"cyber security","sort_by":"deadline","limit":6}}],"pricing":"free","outputSchema":{"type":"object","properties":{"snapshot_generated_at":{"type":"string","description":"Timestamp when the snapshot was generated"},"snapshot":{"type":"array","description":"Compact watchlist items with urgency and source links"},"count":{"type":"number","description":"Number of snapshot items returned"}}},"returns":"A compact, sortable watchlist snapshot for recurring procurement monitoring"}],"workflow":["search_opportunities","opportunity_details","search_awards","buyer_intelligence","match_supplier_profile","watchlist_snapshot"],"author":{"name":"Humanleap","url":"https://toolrouter.com","email":"hello@toolrouter.com"},"repository":"https://github.com/Humanleap/toolrouter.git","license":"UNLICENSED","homepage":"https://toolrouter.com/tools/contract-opportunities","icon":"/icons/contract-opportunities.webp","changelog":[{"version":"0.01","date":"2026-03-27","changes":["Initial release with normalized opportunity search, award search, buyer intelligence, supplier-fit scoring, and watchlist snapshots across public procurement sources."]}],"premadePrompt":"Find live government tenders related to [service or keyword, e.g. cyber security] in [country or region]. Also show me recent contract awards to see who the incumbents are.","requirements":[{"name":"sam_gov_api_key","type":"secret","displayName":"SAM.gov API Key","description":"Credential for the official SAM.gov opportunities API so the tool can include US federal opportunities and award notices.","acquireUrl":"https://open.gsa.gov/api/get-opportunities-public-api/","envFallback":"SAM_GOV_API_KEY"}],"credentials":[{"name":"sam_gov_api_key","type":"secret","displayName":"SAM.gov API Key","description":"Credential for the official SAM.gov opportunities API so the tool can include US federal opportunities and award notices.","acquireUrl":"https://open.gsa.gov/api/get-opportunities-public-api/","envFallback":"SAM_GOV_API_KEY"}]},{"name":"space-data","displayName":"Space Data","subtitle":"NASA data: APOD, asteroids & ISS","about":"**Space Data** brings real-time and historical NASA data into any workflow — the Astronomy Picture of the Day, near-Earth asteroid tracking with hazard ratings, live ISS position, the current crew in space, and full-disc Earth photos from orbit.\n\nWhether you're building an educational app, a space-themed dashboard, or just want to know if any asteroids are passing close to Earth this week, this tool gives you clean structured access to NASA's public data feeds.\n\n### What you can do\n- Get NASA's Astronomy Picture of the Day — today, any specific date, a date range, or random picks\n- Track near-Earth objects: asteroid names, sizes, miss distances, velocities, and hazard status\n- Get the ISS's real-time latitude, longitude, altitude, and velocity\n- See who is currently in space, grouped by spacecraft\n- Retrieve full-disc Earth images from the DSCOVR satellite\n\n### Who it's for\nEducators and students who want live space data for lessons and projects. Developers building space or astronomy apps. Dashboard builders who want a live NASA data feed. Anyone who wants to know what's happening in space right now.\n\n### How to use it\n1. Use **picture_of_the_day** with no parameters for today's image, or pass a date for a specific day\n2. Use **near_earth_objects** with a date range (up to 7 days) to see upcoming asteroid activity — check hazardous_count and miss_distance\n3. Use **iss_position** for a real-time lat/lon, altitude, and velocity snapshot\n4. Use **people_in_space** to see the current crew list grouped by spacecraft\n5. Use **earth_imagery** for full-disc Earth photos from DSCOVR\n\n### Getting started\nNo setup required — all skills run immediately with no API key needed.","version":"0.06","categories":["data","productivity"],"currency":"USD","skills":[{"name":"picture_of_the_day","displayName":"Picture of the Day","description":"Get NASA's Astronomy Picture of the Day (APOD). Get today's picture, a specific date, a date range, or random pictures.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Specific date in YYYY-MM-DD format. Defaults to today if omitted."},"start_date":{"type":"string","description":"Start of date range in YYYY-MM-DD format. Returns all APODs in the range."},"end_date":{"type":"string","description":"End of date range in YYYY-MM-DD format. Defaults to today if start_date is set."},"count":{"type":"number","description":"Get N random pictures (1-10). Cannot be used with date params."}}},"annotations":{},"examples":[{"description":"Get today's astronomy picture","input":{}},{"description":"Get 5 random astronomy pictures","input":{"count":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Title of the astronomy picture"},"date":{"type":"string","description":"Date of the picture (YYYY-MM-DD)"},"explanation":{"type":"string","description":"Detailed explanation of the image"},"media_type":{"type":"string","description":"Media type: image or video"},"url":{"type":"string","description":"URL of the image or video"},"hd_url":{"type":"string","description":"High-definition image URL (null for videos)"},"thumbnail_url":{"type":"string","description":"Thumbnail URL for video entries"},"copyright":{"type":"string","description":"Image copyright holder (null if public domain)"}}},"returns":"Title, explanation, image URL, HD URL, media type, and copyright for the astronomy picture of the day"},{"name":"near_earth_objects","displayName":"Near Earth Objects","description":"Get asteroids and near-Earth objects passing close to Earth in a date range. Returns name, estimated size, hazard status, velocity, and miss distance for each object.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format for the search range"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format. Defaults to start_date if omitted (single day)."}},"required":["start_date"]},"annotations":{},"examples":[{"description":"Get near-Earth objects for a single day","input":{"start_date":"2026-03-20"}},{"description":"Get near-Earth objects for a date range","input":{"start_date":"2026-03-20","end_date":"2026-03-22"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"element_count":{"type":"number","description":"Total number of near-Earth objects found"},"start_date":{"type":"string","description":"Start date of the search range"},"end_date":{"type":"string","description":"End date of the search range"},"hazardous_count":{"type":"number","description":"Number of potentially hazardous asteroids"},"asteroids":{"type":"array","description":"List of near-Earth objects sorted by closest approach distance"}}},"returns":"List of asteroids with name, estimated diameter, hazard status, velocity, and miss distance sorted by closest approach"},{"name":"iss_position","displayName":"ISS Position","description":"Get the current real-time position of the International Space Station. Returns latitude and longitude coordinates with a UTC timestamp.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"Get the current position of the ISS","input":{}},{"description":"Track the International Space Station location","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Current latitude of the ISS"},"longitude":{"type":"number","description":"Current longitude of the ISS"},"timestamp":{"type":"number","description":"Unix timestamp of the position reading"},"timestamp_utc":{"type":"string","description":"UTC ISO timestamp of the position reading"}}},"returns":"Current latitude, longitude, and timestamp of the International Space Station"},{"name":"people_in_space","displayName":"People in Space","description":"Get a list of everyone currently in space right now. Returns the total count, each person's name and which spacecraft they are aboard, grouped by spacecraft.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"Get everyone currently in space","input":{}},{"description":"See how many astronauts are in space right now","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"count":{"type":"number","description":"Total number of people currently in space"},"people":{"type":"array","description":"List of people with their name and spacecraft"},"by_spacecraft":{"type":"object","description":"People grouped by spacecraft name"},"source":{"type":"string","description":"Upstream API URL used for this snapshot"},"note":{"type":"string","description":"Caveat about data freshness from the upstream feed"}}},"returns":"Count of people in space, list of astronauts with names and spacecraft, grouped by spacecraft"},{"name":"earth_imagery","displayName":"Earth Imagery","description":"Get the most recent Earth images from NASA's EPIC (Earth Polychromatic Imaging Camera) on the DSCOVR satellite. Returns full-disc images of Earth with date, caption, and coordinates.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"Get the latest Earth images from EPIC","input":{}},{"description":"View recent full-disc photos of Earth from space","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"count":{"type":"number","description":"Number of images returned"},"date":{"type":"string","description":"Date of the most recent images"},"images":{"type":"array","description":"List of Earth images with URLs, captions, and coordinates"}}},"returns":"Latest Earth images from the EPIC camera with image URLs, captions, dates, and centroid coordinates"}],"icon":"/icons/space-data.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with 5 skills: APOD, near-Earth objects, ISS position, people in space, Earth imagery"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-05","changes":["Improved reliability of ISS position and people in space data"]},{"version":"0.04","date":"2026-04-06","changes":["ISS position now also returns altitude and velocity"]},{"version":"0.05","date":"2026-04-07","changes":["ISS position now computed directly from authoritative NORAD orbital data via CelesTrak, eliminating dependency on third-party tracking APIs"]},{"version":"0.06","date":"2026-04-24","changes":["People in Space now discloses the source and warns that the upstream feed can lag by months"]}],"premadePrompt":"Show me today's NASA astronomy picture of the day. Also, are there any asteroids passing close to Earth this week?"},{"name":"trivia-quiz","displayName":"Trivia Quiz","subtitle":"20+ categories of trivia questions","about":"**Trivia Quiz** delivers curated trivia questions across 20+ categories — history, science, sports, video games, music, film, geography, and more. Filter by category, difficulty, and question type, and every response includes shuffled answer choices with the correct one clearly marked.\n\nIt's ready to power quiz nights, educational games, onboarding experiences, or any app that needs quality trivia content on demand. Questions are drawn from a large verified database so you get well-structured, accurate questions every time — not AI-generated guesses.\n\n### What you can do\n- **get_questions** — fetch trivia questions filtered by category, difficulty (easy/medium/hard), and type (multiple choice or true/false)\n- **list_categories** — get all 20+ available category names and IDs\n- **category_stats** — check how many questions are available in a category, broken down by difficulty\n\n### Who it's for\nDevelopers building quiz games, event hosts running quiz nights, educators creating assessment tools, and anyone who wants a reliable source of trivia questions on demand.\n\n### How to use it\n1. Use **list_categories** first to see all available categories and get their IDs\n2. Call **get_questions** with an amount, category, difficulty, and type to get a batch of questions — up to 50 per call\n3. Before requesting a large batch, use **category_stats** to confirm there are enough questions at your target difficulty level\n4. Batch questions in groups of 10 and track used question IDs to avoid repeating questions across rounds\n\n### Getting started\nNo setup needed — all three skills work immediately with no credentials required.","version":"0.03","categories":["data","productivity"],"currency":"USD","skills":[{"name":"get_questions","displayName":"Get Questions","description":"Get trivia questions with answers. Supports filtering by category, difficulty, and question type. Returns shuffled answer choices with the correct answer marked.","inputSchema":{"type":"object","properties":{"amount":{"type":"number","description":"Number of questions to return (1-50)","default":10,"minimum":1,"maximum":50},"category":{"type":"string","description":"Category name (e.g. \"Science\", \"History\", \"Video Games\") or category ID. Use list_categories to see all options."},"difficulty":{"type":"string","enum":["easy","medium","hard"],"description":"Question difficulty level"},"type":{"type":"string","enum":["multiple_choice","true_false"],"description":"Question type: multiple_choice (4 options) or true_false"}},"required":[]},"annotations":{},"examples":[{"description":"Get 10 random trivia questions across all categories","input":{"amount":10}},{"description":"Get 5 hard science questions (multiple choice)","input":{"amount":5,"category":"Science","difficulty":"hard","type":"multiple_choice"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"questions":{"type":"array","description":"Array of trivia questions with answers, correct answer, and metadata"},"count":{"type":"number","description":"Number of questions returned"},"filters":{"type":"object","description":"Applied filter values"}}},"returns":"List of trivia questions with shuffled answer choices, correct answer, category, difficulty, and question type"},{"name":"list_categories","displayName":"List Categories","description":"List all available trivia categories with their IDs. Use these category names or IDs when requesting questions with get_questions.","inputSchema":{"type":"object","properties":{},"required":[]},"annotations":{},"examples":[{"description":"List all available trivia categories","input":{}},{"description":"Get category IDs for use with get_questions","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"categories":{"type":"array","description":"Array of categories with id and name"},"count":{"type":"number","description":"Total number of available categories"}}},"returns":"List of all trivia categories with their IDs and names"},{"name":"category_stats","displayName":"Category Stats","description":"Get the total number of available questions for a specific trivia category, broken down by difficulty level (easy, medium, hard).","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Category name (e.g. \"Science & Nature\", \"History\") or category ID number"}},"required":["category"]},"annotations":{},"examples":[{"description":"Get question counts for the Science & Nature category","input":{"category":"Science & Nature"}},{"description":"Get stats for a category by ID","input":{"category":"18"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"category_id":{"type":"number","description":"Category ID"},"category_name":{"type":"string","description":"Category display name"},"total_questions":{"type":"number","description":"Total number of questions in this category"},"by_difficulty":{"type":"object","description":"Question count breakdown by difficulty (easy, medium, hard)"}}},"returns":"Category name, ID, total question count, and breakdown by difficulty level"}],"icon":"/icons/trivia-quiz.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with get_questions, list_categories, and category_stats skills"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-24","changes":["Questions with accented characters (e.g. É, ç, ñ) now display correctly instead of raw HTML entities"]}],"premadePrompt":"Give me 10 [easy/medium/hard] trivia questions about [topic] for a quiz night. Include the answers."},{"name":"wikipedia-lookup","displayName":"Wikipedia Lookup","subtitle":"Wikipedia search in 50+ languages","about":"**Wikipedia Lookup** gives you fast, structured access to Wikipedia across 50+ language editions — search by keyword, get article summaries, pull full article text, discover historical events for any date, or retrieve a random article for exploration. It's the cleanest way to ground AI responses in factual reference knowledge.\n\nWikipedia is the largest structured knowledge base in existence, and this tool makes it queryable in a way that fits naturally into a conversation. Get a concise summary when you need a quick answer, or fetch the full article text when you're doing deeper research.\n\n### What you can do\n- **search** — find relevant articles by keyword or phrase, with titles, excerpts, and descriptions\n- **get_summary** — concise overview of a specific article by title\n- **get_full_article** — complete article text up to a configurable length\n- **on_this_day** — historical events, births, and deaths for any calendar date\n- **random_article** — retrieve a random Wikipedia article for discovery and exploration\n\n### Who it's for\nResearchers fact-checking or sourcing background information. Educators and students building reference-grounded content. Developers building knowledge-augmented applications. Writers verifying facts and adding context to their work. Anyone who wants reliable encyclopedic information on any person, place, concept, or event.\n\n### How to use it\n1. Use **search** to find the right article when you're not sure of the exact title\n2. Use **get_summary** for a quick, concise overview — usually 2–5 paragraphs\n3. Use **get_full_article** when you need the complete text — set max_length to control how much you get back\n4. Use **on_this_day** with a month and day to explore historical context for any date\n5. Add a language code (es, de, fr, ja, etc.) to any skill for non-English editions\n\n### Getting started\nAll skills are free and ready to use without any setup. Start with **search** and a keyword, then use the returned article titles with **get_summary** or **get_full_article**.","version":"0.04","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search","displayName":"Search Wikipedia","description":"Search Wikipedia articles by keyword or phrase. Returns matching articles with titles, excerpts, descriptions, and thumbnails.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query — keywords or phrase to find articles about"},"limit":{"type":"number","description":"Maximum number of results to return (1-50)","default":5,"minimum":1,"maximum":50},"language":{"type":"string","description":"Wikipedia language code (e.g. \"en\", \"es\", \"fr\", \"de\", \"ja\")","default":"en"}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for articles about quantum computing","input":{"query":"quantum computing"}},{"description":"Search French Wikipedia for the Eiffel Tower","input":{"query":"Tour Eiffel","language":"fr","limit":3}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Original search query"},"language":{"type":"string","description":"Language code used"},"results":{"type":"array","description":"Matching Wikipedia articles with title, excerpt, description, thumbnail, and URL"},"count":{"type":"number","description":"Number of results returned"}}},"returns":"List of matching Wikipedia articles with title, excerpt, description, thumbnail URL, and article link"},{"name":"get_summary","displayName":"Get Article Summary","description":"Get a concise summary of any Wikipedia article by title. Returns the article description, summary text, thumbnail, coordinates (for places), and direct URLs.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Wikipedia article title (e.g. \"Albert Einstein\", \"Tokyo\", \"Python (programming language)\")"},"language":{"type":"string","description":"Wikipedia language code (e.g. \"en\", \"es\", \"fr\", \"de\", \"ja\")","default":"en"}},"required":["title"]},"annotations":{},"examples":[{"description":"Get a summary of the article about Albert Einstein","input":{"title":"Albert Einstein"}},{"description":"Get a summary of Tokyo from Japanese Wikipedia","input":{"title":"東京都","language":"ja"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Article title"},"display_title":{"type":"string","description":"HTML display title"},"description":{"type":"string","description":"Short article description"},"summary":{"type":"string","description":"Plain text summary of the article"},"thumbnail":{"type":"object","description":"Thumbnail image with url, width, height"},"original_image":{"type":"object","description":"Full-resolution image with url, width, height"},"article_url":{"type":"string","description":"Desktop Wikipedia URL"},"mobile_url":{"type":"string","description":"Mobile Wikipedia URL"},"coordinates":{"type":"object","description":"Geographic coordinates (latitude, longitude) if applicable"},"last_edited":{"type":"string","description":"ISO timestamp of last edit"},"language":{"type":"string","description":"Language code used"}}},"returns":"Article summary with title, description, plain text extract, thumbnail, article URL, and coordinates if applicable"},{"name":"get_full_article","displayName":"Get Full Article","description":"Get the full plain text content of a Wikipedia article. Use this when you need detailed information beyond the summary. Content is truncated at max_length to control response size.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Wikipedia article title (e.g. \"World War II\", \"Machine learning\")"},"language":{"type":"string","description":"Wikipedia language code (e.g. \"en\", \"es\", \"fr\", \"de\", \"ja\")","default":"en"},"max_length":{"type":"number","description":"Maximum character length of returned content (100-50000)","default":5000,"minimum":100,"maximum":50000}},"required":["title"]},"annotations":{},"examples":[{"description":"Get the full article about machine learning","input":{"title":"Machine learning"}},{"description":"Get a longer excerpt of the World War II article in Spanish","input":{"title":"Segunda Guerra Mundial","language":"es","max_length":15000}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Article title"},"page_id":{"type":"number","description":"Wikipedia page ID"},"content":{"type":"string","description":"Full plain text article content (may be truncated)"},"length":{"type":"number","description":"Length of returned content in characters"},"full_length":{"type":"number","description":"Full article length before truncation"},"truncated":{"type":"boolean","description":"Whether the content was truncated"},"article_url":{"type":"string","description":"Wikipedia article URL"},"language":{"type":"string","description":"Language code used"}}},"returns":"Full plain text article content with metadata, truncated at max_length if the article exceeds it"},{"name":"on_this_day","displayName":"On This Day","description":"Get historical events, births, deaths, or notable happenings for any date. Returns a list of events with year and linked Wikipedia articles.","inputSchema":{"type":"object","properties":{"month":{"type":"number","description":"Month of the year (1-12)","minimum":1,"maximum":12},"day":{"type":"number","description":"Day of the month (1-31)","minimum":1,"maximum":31},"type":{"type":"string","enum":["events","births","deaths","selected","holidays"],"description":"Type of historical entries to retrieve","default":"selected"},"limit":{"type":"number","description":"Maximum number of entries to return (1-100). For events/births/deaths the most recent entries are returned first.","default":20,"minimum":1,"maximum":100}},"required":["month","day"]},"annotations":{},"examples":[{"description":"Get notable events that happened on July 4th","input":{"month":7,"day":4}},{"description":"Get famous births on December 25th","input":{"month":12,"day":25,"type":"births"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date in MM/DD format"},"type":{"type":"string","description":"Type of entries returned"},"events":{"type":"array","description":"Historical events with text, year, and linked Wikipedia articles"},"count":{"type":"number","description":"Number of events returned"},"total_available":{"type":"number","description":"Total entries Wikipedia returned before the limit was applied"}}},"returns":"List of historical events for the given date, each with descriptive text, year, and up to 3 linked Wikipedia articles"},{"name":"random_article","displayName":"Random Article","description":"Get a random Wikipedia article summary. Great for discovery, trivia, or serendipitous learning. Returns the same format as get_summary.","inputSchema":{"type":"object","properties":{"language":{"type":"string","description":"Wikipedia language code (e.g. \"en\", \"es\", \"fr\", \"de\", \"ja\")","default":"en"}}},"annotations":{},"examples":[{"description":"Get a random English Wikipedia article","input":{}},{"description":"Get a random article from German Wikipedia","input":{"language":"de"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Article title"},"display_title":{"type":"string","description":"HTML display title"},"description":{"type":"string","description":"Short article description"},"summary":{"type":"string","description":"Plain text summary of the article"},"thumbnail":{"type":"object","description":"Thumbnail image with url, width, height"},"original_image":{"type":"object","description":"Full-resolution image with url, width, height"},"article_url":{"type":"string","description":"Desktop Wikipedia URL"},"mobile_url":{"type":"string","description":"Mobile Wikipedia URL"},"coordinates":{"type":"object","description":"Geographic coordinates (latitude, longitude) if applicable"},"last_edited":{"type":"string","description":"ISO timestamp of last edit"},"language":{"type":"string","description":"Language code used"}}},"returns":"Random Wikipedia article summary with title, description, extract, thumbnail, and article URL"}],"icon":"/icons/wikipedia-lookup.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with search, summary, full article, on this day, and random article skills"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-24","changes":["Search excerpts now correctly decode HTML entities (e.g. apostrophes and quotes display as plain text)"]},{"version":"0.04","date":"2026-04-24","changes":["On This Day: added a limit (default 20) so events/births/deaths no longer overflow with hundreds of entries"]}],"premadePrompt":"Give me a summary of [topic, person, or place] from Wikipedia. If there's a lot of detail, fetch the full article."},{"name":"library-docs","displayName":"Library Docs","subtitle":"Up-to-date docs and code examples for any library","about":"**Library Docs** fetches accurate, version-specific documentation and code examples for any library or framework — always from the live source, never from training data that may be months out of date. It covers thousands of libraries including React, Next.js, Prisma, Tailwind, Express, and more.\n\nAI models often hallucinate outdated or incorrect API syntax because their training data doesn't reflect recent library changes. This tool bypasses that problem by fetching current documentation on demand, so you get the right method signature, the right import path, and the right configuration options for the version you're actually using.\n\n### What you can do\n- **resolve_library** — search for any library by name and get its documentation ID plus available versions\n- **get_docs** — fetch relevant documentation and code examples for a specific topic within a library\n\n### Who it's for\nDevelopers who need accurate API references while coding. AI agents that write or review code and need to verify current syntax. Anyone migrating between library versions who needs to check what changed.\n\n### How to use it\n1. Start with **resolve_library** — search by library name to get the documentation ID (e.g. search \"next.js\" to find \"/vercel/next.js\")\n2. Use **get_docs** with the library ID and a natural language query to fetch relevant docs and code snippets\n3. Specify a version in the library ID (e.g. \"/prisma/prisma/v5\") to pin to version-specific docs\n4. Increase the tokens parameter beyond the default 5000 when you need more comprehensive coverage\n\n### Getting started\nCall **resolve_library** with the library name first — you need the ID it returns before you can fetch docs. For most popular libraries the ID is predictable but resolve_library confirms it and shows what versions are available.","version":"0.02","categories":["development","productivity"],"currency":"USD","skills":[{"name":"resolve_library","displayName":"Resolve Library","description":"Search for a library by name and return its Context7-compatible library ID along with metadata like trust score, available versions, and snippet count. Always call this first to get the ID needed by get_docs.","inputSchema":{"type":"object","properties":{"library_name":{"type":"string","description":"Library or framework name to search for (e.g. \"react\", \"next.js\", \"prisma\", \"tailwindcss\")"},"query":{"type":"string","description":"Optional natural language context to help rank results (e.g. \"React hooks for state management\")"}},"required":["library_name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find the library ID for React","input":{"library_name":"react"}},{"description":"Find Next.js library ID with context for routing docs","input":{"library_name":"next.js","query":"app router routing"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"libraries":{"type":"array","description":"Matching libraries with id, title, description, trust_score, versions, and snippet counts"},"count":{"type":"number","description":"Number of results returned"}}},"returns":"List of matching libraries with Context7 IDs, trust scores, available versions, and documentation coverage"},{"name":"get_docs","displayName":"Get Documentation","description":"Fetch up-to-date documentation and code examples for a library using its Context7-compatible ID. Returns relevant snippets ranked by the query. Use after resolve_library to get the library ID.","inputSchema":{"type":"object","properties":{"library_id":{"type":"string","description":"Context7-compatible library ID in format \"/owner/repo\", \"/owner/repo/version\", or \"/owner/repo@version\" — obtained from resolve_library"},"query":{"type":"string","description":"Natural language question or topic to fetch relevant documentation for (e.g. \"how to use useEffect\", \"server actions\")"},"tokens":{"type":"number","description":"Maximum tokens of documentation to retrieve (default: 5000, increase for more context)","default":5000,"minimum":500,"maximum":20000},"topic":{"type":"string","description":"Optional focused topic filter to narrow results (e.g. \"hooks\", \"routing\", \"authentication\")"}},"required":["library_id","query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get React hooks documentation","input":{"library_id":"/facebook/react","query":"how to use useEffect","topic":"hooks"}},{"description":"Get Next.js app router docs","input":{"library_id":"/vercel/next.js","query":"server actions and form handling"}},{"description":"Get Prisma docs for a specific version","input":{"library_id":"/prisma/prisma/v5","query":"database transactions","tokens":10000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"library_id":{"type":"string","description":"Library ID used"},"query":{"type":"string","description":"Query used"},"documentation":{"type":"string","description":"Markdown-formatted documentation and code snippets"},"tokens_used":{"type":"number","description":"Approximate tokens in the returned documentation"}}},"returns":"Markdown documentation and code examples relevant to the query, ranked by relevance"}],"workflow":["resolve_library → get_docs"],"icon":"/icons/library-docs.webp","changelog":[{"version":"0.01","date":"2026-03-29","changes":["Initial release with resolve_library and get_docs skills"]},{"version":"0.02","date":"2026-03-29","changes":["Both skills marked paid at $0.005/request"]}],"premadePrompt":"Show me the latest documentation and code examples for [library name] on [topic, e.g. authentication, hooks, server actions].","requirements":[{"name":"context7","type":"secret","displayName":"Context7 API Key","description":"API key for Context7 library docs — get one at context7.com/dashboard","required":false,"acquireUrl":"https://context7.com/dashboard","envFallback":"CONTEXT7_API_KEY"}],"credentials":[{"name":"context7","type":"secret","displayName":"Context7 API Key","description":"API key for Context7 library docs — get one at context7.com/dashboard","required":false,"acquireUrl":"https://context7.com/dashboard","envFallback":"CONTEXT7_API_KEY"}]},{"name":"timezone-converter","displayName":"Timezone Converter","subtitle":"Time zones, conversions & DST info","about":"**Timezone Converter** tells you the current time anywhere in the world, converts between timezones, explains DST transitions, and lists all valid timezone identifiers — all without needing to know IANA codes. Just type the city name.\n\nIt supports 80+ city names directly so you never have to look up \"America/New_York\" again. Ask for the time in Tokyo, convert a meeting time from London to Sydney, check whether a city is currently observing daylight saving, or browse all European timezones — it handles all of it cleanly and quickly.\n\n### What you can do\n- **current_time** — current date and time in any city, IANA timezone, or GPS coordinates\n- **convert_time** — convert a specific time (or the current time) from one timezone to another\n- **timezone_info** — UTC offset, standard offset, DST status, and transition dates for any timezone\n- **list_timezones** — browse all IANA timezone identifiers, optionally filtered by region\n\n### Who it's for\nAnyone scheduling across timezones — remote teams, travel planners, event organizers, and developers building scheduling or calendar features. Works well as part of any assistant that handles international communication.\n\n### How to use it\n1. Use **current_time** with a city name like \"New York\" or \"Tokyo\" to get the current time instantly\n2. For scheduling, use **convert_time** with two city names and a specific time to convert\n3. Before a big trip or call, use **timezone_info** to check whether the destination is currently on DST and what the UTC offset is\n4. Use **list_timezones** with a region like \"Europe\" or \"Asia\" to browse valid identifiers when you need the exact IANA code\n\n### Getting started\nNo setup needed — all four skills work immediately with just city names or timezone strings.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"current_time","displayName":"Current Time","description":"Get the current time in any timezone, city, or geographic coordinates. Supports 80+ city names, IANA timezone codes, or latitude/longitude.","inputSchema":{"type":"object","properties":{"timezone":{"type":"string","description":"Timezone name (e.g. \"America/New_York\") or city name (e.g. \"Tokyo\", \"New York\"). Use this OR latitude+longitude."},"latitude":{"type":"number","description":"Latitude (-90 to 90). Use with longitude instead of timezone."},"longitude":{"type":"number","description":"Longitude (-180 to 180). Use with latitude instead of timezone."}}},"annotations":{},"examples":[{"description":"Get current time in Tokyo","input":{"timezone":"Tokyo"}},{"description":"Get current time in New York using IANA timezone","input":{"timezone":"America/New_York"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone identifier"},"requested":{"type":"string","description":"Original input if it was resolved from a city name"},"date":{"type":"string","description":"Current date (MM/DD/YYYY)"},"time":{"type":"string","description":"Current time (HH:MM)"},"datetime":{"type":"string","description":"Full ISO datetime string"},"day_of_week":{"type":"string","description":"Day of the week (e.g. \"Monday\")"},"year":{"type":"number","description":"Current year"},"month":{"type":"number","description":"Current month (1-12)"},"day":{"type":"number","description":"Current day of month"},"hour":{"type":"number","description":"Current hour (0-23)"},"minute":{"type":"number","description":"Current minute (0-59)"},"seconds":{"type":"number","description":"Current seconds (0-59)"},"dst_active":{"type":"boolean","description":"Whether daylight saving time is currently active"}}},"returns":"Current date, time, day of week, and DST status for the specified timezone"},{"name":"convert_time","displayName":"Convert Time","description":"Convert a specific time (or the current time) from one timezone to another. Supports IANA timezone names and city names. Omit the datetime parameter to convert the current time.","inputSchema":{"type":"object","properties":{"from_timezone":{"type":"string","description":"Source timezone or city name (e.g. \"America/New_York\", \"London\", \"Tokyo\")"},"to_timezone":{"type":"string","description":"Target timezone or city name (e.g. \"Asia/Tokyo\", \"Sydney\", \"Paris\")"},"datetime":{"type":"string","description":"Date and time to convert in \"YYYY-MM-DD HH:MM:SS\" format. Omit or set to \"now\" to convert the current time."}},"required":["from_timezone","to_timezone"]},"annotations":{},"examples":[{"description":"Convert current time from New York to Tokyo","input":{"from_timezone":"New York","to_timezone":"Tokyo"}},{"description":"Convert a specific time from London to Sydney","input":{"from_timezone":"London","to_timezone":"Sydney","datetime":"2026-03-20 14:30:00"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"original":{"type":"object","description":"Original time details including timezone and datetime"},"converted":{"type":"object","description":"Converted time details including timezone, date, time, day of week, and DST status"}}},"returns":"Original and converted times with full date, time, day of week, and DST status for both timezones"},{"name":"timezone_info","displayName":"Timezone Info","description":"Get detailed information about a timezone including current UTC offset, standard offset, daylight saving time status, and DST transition dates. Supports IANA timezone names and city names.","inputSchema":{"type":"object","properties":{"timezone":{"type":"string","description":"Timezone name (e.g. \"America/New_York\", \"Europe/London\") or city name (e.g. \"Tokyo\", \"New York\", \"Sydney\")"}},"required":["timezone"]},"annotations":{},"examples":[{"description":"Get timezone info for New York","input":{"timezone":"New York"}},{"description":"Check DST details for London","input":{"timezone":"Europe/London"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone identifier"},"requested":{"type":"string","description":"Original input if it was resolved from a city name"},"current_local_time":{"type":"string","description":"Current local time in this timezone"},"current_utc_offset":{"type":"object","description":"Current UTC offset (may differ from standard if DST is active)"},"standard_utc_offset":{"type":"object","description":"Standard (non-DST) UTC offset"},"has_daylight_saving":{"type":"boolean","description":"Whether this timezone observes DST"},"is_dst_active":{"type":"boolean","description":"Whether DST is currently active"},"dst_interval":{"type":"object","description":"DST transition dates, offsets, and name (null if timezone has no DST)"}}},"returns":"UTC offset, standard offset, DST status, and DST transition dates for the timezone"},{"name":"list_timezones","displayName":"List Timezones","description":"List all available IANA timezones. Optionally filter by region prefix like \"America\", \"Europe\", \"Asia\", \"Africa\", \"Pacific\", \"Australia\", \"Atlantic\", or \"Indian\".","inputSchema":{"type":"object","properties":{"region":{"type":"string","description":"Optional region prefix to filter by (e.g. \"America\", \"Europe\", \"Asia\", \"Pacific\")"}}},"annotations":{},"examples":[{"description":"List all European timezones","input":{"region":"Europe"}},{"description":"List all available timezones","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"region":{"type":"string","description":"Region filter applied, or \"all\" if no filter"},"timezones":{"type":"array","description":"List of IANA timezone identifiers","items":{"type":"string"}},"count":{"type":"number","description":"Number of timezones returned"}}},"returns":"List of IANA timezone identifiers, optionally filtered by region"}],"icon":"/icons/timezone-converter.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release with current time, time conversion, timezone info, and timezone listing"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What time is it right now in [city]? Convert [time] from [city] to [city] so I can schedule a meeting."},{"name":"keyword-research","displayName":"Keyword Research","subtitle":"Find & prioritize SEO keywords","about":"**Keyword Research** turns a seed topic into a full content strategy — finding keyword opportunities, breaking them into page clusters, and scoring them so you know exactly what to publish first. Every result comes with intent classification, difficulty estimates, and a content brief so agents can act on the data immediately.\n\nMost SEO workflows require switching between multiple tools just to go from idea to plan. This one handles the full stack: discover keywords, understand what the SERP looks like, group everything into a logical site architecture, and rank targets by opportunity score so the highest-leverage pages get prioritized.\n\n### What you can do\n- **find_keywords** — discover keyword ideas for any topic with intent, demand, and difficulty signals\n- **analyze_keyword** — get a full breakdown of a single keyword including SERP shape, content brief, and title angles\n- **cluster_keywords** — group a list of keywords into logical page clusters with recommended slugs\n- **score_opportunities** — rank a keyword list by opportunity to separate quick wins from long-term bets\n\n### Who it's for\nContent marketers planning an editorial calendar. SEO managers building a keyword strategy for a new product or market. Founders who want to understand the search landscape before commissioning content. Product teams researching what terms competitors rank for.\n\n### How to use it\n1. Start with **find_keywords** and provide your seed topic — optionally add a business goal to bias results toward revenue or signups\n2. Pass the results to **cluster_keywords** to organize them into a content architecture with page slugs\n3. Use **score_opportunities** to rank the clusters by priority so you know what to build first\n4. Use **analyze_keyword** on your top targets to get detailed SERP analysis and a content brief\n\n### Getting started\nCall **find_keywords** with your topic and a business goal. Pass your site URL to check for existing content coverage gaps.","version":"0.03","categories":["search","marketing","analytics"],"currency":"USD","skills":[{"name":"find_keywords","displayName":"Find Keywords","description":"Research related keywords for a topic so you can spot demand patterns, intent, and the best gaps to target.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"Seed topic or product area to research"},"business_goal":{"type":"string","description":"Optional business goal to bias recommendations toward revenue, signups, leads, or awareness"},"site_url":{"type":"string","description":"Optional site URL to compare topic coverage against your current site"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code to localize search results","default":"us"},"language":{"type":"string","description":"Language code for SERP research","default":"en"},"limit":{"type":"number","description":"Maximum number of keyword ideas to return (default: 15, max: 25)","default":15}},"required":["topic"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Find keywords for an AI CRM category","input":{"topic":"AI CRM software","business_goal":"generate demo requests","limit":12}},{"description":"Find content gaps around a topic for an existing site","input":{"topic":"warehouse automation software","site_url":"https://example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"Seed topic that was researched"},"market_summary":{"type":"object","description":"High-level summary of the keyword landscape and focus areas"},"keyword_ideas":{"type":"array","description":"Keyword ideas with intent, modeled demand, difficulty, and opportunity scoring"},"site_coverage":{"type":"object","description":"Existing matching pages found on the provided site, when site_url is supplied"},"next_steps":{"type":"array","description":"Recommended follow-up actions based on the research"}}},"returns":"A prioritized set of keyword ideas with intent, modeled demand, difficulty, and next-step guidance"},{"name":"analyze_keyword","displayName":"Analyze Keyword","description":"Break down a keyword so you can see intent, SERP features, modeled demand, difficulty, and the best page to create.","inputSchema":{"type":"object","properties":{"keyword":{"type":"string","description":"Keyword or query to analyze"},"business_goal":{"type":"string","description":"Optional business goal to factor into the opportunity recommendation"},"site_url":{"type":"string","description":"Optional site URL to check whether your domain already appears in the SERP"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code to localize search results","default":"us"},"language":{"type":"string","description":"Language code for SERP research","default":"en"}},"required":["keyword"]},"annotations":{"execution":{"estimatedSeconds":25,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Analyze a commercial software keyword","input":{"keyword":"best crm for startups","business_goal":"drive paid trials"}},{"description":"Analyze whether a site should target a comparison keyword","input":{"keyword":"hubspot alternatives","site_url":"https://example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"keyword":{"type":"string","description":"Keyword that was analyzed"},"intent":{"type":"object","description":"Primary and secondary intent classification with confidence"},"difficulty":{"type":"object","description":"Difficulty score, level, and rationale"},"opportunity_score":{"type":"object","description":"Opportunity score and explanation"},"serp_snapshot":{"type":"object","description":"SERP features, top results, related searches, and People Also Ask signals"},"content_brief":{"type":"object","description":"Recommended page type, angle, titles, and FAQ prompts"}}},"returns":"A keyword breakdown with intent, SERP shape, modeled demand, difficulty, and a content brief"},{"name":"cluster_keywords","displayName":"Cluster Keywords","description":"Group keyword lists into clear page clusters so teams can turn raw research into a sane content architecture.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","items":{"type":"string"},"description":"Keyword list to cluster into related page groups"},"business_goal":{"type":"string","description":"Optional business goal to bias cluster priorities"},"site_url":{"type":"string","description":"Optional site URL to align clusters to an existing site structure"},"max_clusters":{"type":"number","description":"Maximum number of clusters to return (default: min(8, keyword count), max: 20)"}},"required":["keywords"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Cluster a batch of CRM keywords into page groups","input":{"keywords":["crm for startups","best crm for startups","startup sales pipeline","hubspot alternatives","pipedrive alternatives"]}},{"description":"Cluster keywords for an existing site roadmap","input":{"keywords":["warehouse automation","warehouse picking software","warehouse robotics","inventory automation software"],"site_url":"https://example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"summary":{"type":"object","description":"Suggested information architecture and pillar-page recommendations"},"clusters":{"type":"array","description":"Keyword clusters with page type, primary keyword, slug, and priority score"},"outliers":{"type":"array","description":"Keywords that did not fit cleanly into a cluster"},"next_steps":{"type":"array","description":"Recommended follow-up actions after clustering"}}},"returns":"Keyword clusters mapped to likely pages, priorities, and information architecture guidance"},{"name":"score_opportunities","displayName":"Score Opportunities","description":"Prioritize a keyword list so you can decide what to publish now, what to save for later, and what to skip.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to score and rank by opportunity"},"business_goal":{"type":"string","description":"Optional business goal to bias the prioritization model"},"site_url":{"type":"string","description":"Optional site URL to factor current domain presence into the score"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code to localize search results","default":"us"},"language":{"type":"string","description":"Language code for SERP research","default":"en"}},"required":["keywords"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Score a shortlist of CRM keywords for prioritization","input":{"keywords":["crm for startups","best crm for startups","startup sales software","hubspot alternatives"],"business_goal":"generate qualified demos"}},{"description":"Score keywords against an existing site footprint","input":{"keywords":["warehouse automation software","warehouse robotics","inventory picking software"],"site_url":"https://example.com"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"summary":{"type":"object","description":"Recommended quick wins, strategic bets, and deprioritized terms"},"prioritized_keywords":{"type":"array","description":"Keywords ranked by opportunity with modeled demand, difficulty, and recommended page type"},"next_steps":{"type":"array","description":"Recommended follow-up actions after scoring"}}},"returns":"A ranked keyword priority list with modeled demand, difficulty, opportunity, and clear next moves"}],"workflow":["find_keywords","analyze_keyword","cluster_keywords","score_opportunities"],"icon":"/icons/keyword-research.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-16","changes":["Fixed search-powered skills (find_keywords, analyze_keyword, score_opportunities) that were failing with a connection error"]}],"premadePrompt":"Find the best SEO keywords for [topic or product] in [country]. Group them into content clusters and tell me which ones are the quickest wins to target first.","brain":{"instructions":"When brain knowledge is available:\n  - Reference the user's niche, industry, and target market\n  - Apply knowledge of existing content strategy and keywords\n  - Focus research on topics aligned with business goals","produces":["seo_insights"]},"requirements":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries"}],"credentials":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"country_code","type":"credential","displayName":"Country Code","description":"Your ISO 3166-1 alpha-2 country code (e.g. US, GB, DE) — used as default for country-specific queries"}]},{"name":"workout-planner","displayName":"Workout Planner","subtitle":"1300+ exercises by muscle & gear","about":"**Workout Planner** gives you access to a database of 1300+ exercises, each with the muscles worked, equipment required, and step-by-step movement instructions. Filter by body part, target muscle, or available equipment to build workout routines that match any goal or constraint.\n\nThe database covers everything from compound barbell movements to bodyweight exercises, machine work, resistance bands, and cardio. Every exercise includes the primary muscles targeted, secondary stabilizers, and illustrated movement instructions so you know exactly how to perform it correctly.\n\n### What you can do\n- **search_exercises** — find exercises by name when you know what you're looking for\n- **browse_exercises** — paginate through the full exercise library\n- **get_exercise** — full instructions and muscle detail for a specific exercise by ID\n- **exercises_by_body_part** — filter all exercises targeting a body part like chest, legs, or back\n- **exercises_by_target_muscle** — filter by specific muscle like biceps, glutes, or hamstrings\n- **exercises_by_equipment** — filter by available equipment like barbell, dumbbell, or body weight\n- **list_body_parts / list_target_muscles / list_equipment** — browse valid filter values\n\n### Who it's for\nPersonal trainers building customized programs for clients. Fitness app developers integrating exercise databases. Athletes designing sport-specific training plans. Beginners building their first routines. Rehab professionals selecting low-impact alternatives around an injury.\n\n### How to use it\n1. Use **list_body_parts**, **list_target_muscles**, or **list_equipment** to see valid filter values\n2. Use **exercises_by_body_part** or **exercises_by_target_muscle** to get a filtered list for your workout focus\n3. Use **exercises_by_equipment** with \"body weight\" for no-equipment routines\n4. Use **get_exercise** with an ID to get the full step-by-step instructions for any specific exercise\n\n### Getting started\nConnect your account to enable the exercise database. Start with **list_body_parts** to see available categories, then filter with the relevant skill.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"search_exercises","displayName":"Search Exercises","description":"Find exercises by name when you already know what you are looking for, like \"bench press\" or \"squat\". Good for checking form instructions or finding variations.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Exercise name to search for (partial match supported)"},"limit":{"type":"integer","description":"Maximum number of results to return (default 10)","default":10},"offset":{"type":"integer","description":"Number of results to skip for pagination (default 0)","default":0}},"required":["name"]},"annotations":{},"examples":[{"description":"What bench press variations are there?","input":{"name":"bench press"}},{"description":"Show me different squat exercises","input":{"name":"squat","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exercises":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID"},"name":{"type":"string","description":"Exercise name"},"bodyPart":{"type":"string","description":"Primary body part targeted"},"target":{"type":"string","description":"Specific target muscle"},"equipment":{"type":"string","description":"Equipment required"},"secondaryMuscles":{"type":"array","items":{"type":"string"},"description":"Secondary muscles worked"},"instructions":{"type":"array","items":{"type":"string"},"description":"Step-by-step instructions"}}},"description":"List of matching exercises"},"count":{"type":"integer","description":"Number of exercises returned"}}},"returns":"Matching exercises with muscles worked, equipment needed, and how to do them"},{"name":"get_exercise","displayName":"Get Exercise","description":"Get the full breakdown for a specific exercise, including which muscles it works and step-by-step instructions on how to perform it.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID (e.g. \"0001\")"}},"required":["id"]},"annotations":{},"examples":[{"description":"How do I do exercise 0001?","input":{"id":"0001"}},{"description":"Show me the details for this exercise","input":{"id":"0025"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID"},"name":{"type":"string","description":"Exercise name"},"bodyPart":{"type":"string","description":"Primary body part targeted"},"target":{"type":"string","description":"Specific target muscle"},"equipment":{"type":"string","description":"Equipment required"},"secondaryMuscles":{"type":"array","items":{"type":"string"},"description":"Secondary muscles worked"},"instructions":{"type":"array","items":{"type":"string"},"description":"Step-by-step instructions"}}},"returns":"Full exercise breakdown with target muscles, equipment, and instructions"},{"name":"browse_exercises","displayName":"Browse Exercises","description":"Browse the full exercise library with pagination. Use this when you want to explore what is available without a specific search in mind.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results to return (default 10)","default":10},"offset":{"type":"integer","description":"Number of results to skip for pagination (default 0)","default":0}}},"annotations":{},"examples":[{"description":"Show me some exercises to browse","input":{}},{"description":"What else is in the library? Show page 2","input":{"offset":10,"limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exercises":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID"},"name":{"type":"string","description":"Exercise name"},"bodyPart":{"type":"string","description":"Primary body part targeted"},"target":{"type":"string","description":"Specific target muscle"},"equipment":{"type":"string","description":"Equipment required"},"secondaryMuscles":{"type":"array","items":{"type":"string"},"description":"Secondary muscles worked"},"instructions":{"type":"array","items":{"type":"string"},"description":"Step-by-step instructions"}}},"description":"List of matching exercises"},"count":{"type":"integer","description":"Number of exercises returned"}}},"returns":"A page of exercises from the full library"},{"name":"exercises_by_body_part","displayName":"Exercises by Body Part","description":"Find exercises for a specific body part like chest, back, or legs. Use list_body_parts first if you are not sure which values are valid.","inputSchema":{"type":"object","properties":{"body_part":{"type":"string","description":"Body part to filter by (e.g. \"chest\", \"back\", \"upper legs\")"},"limit":{"type":"integer","description":"Maximum number of results to return (default 10)","default":10},"offset":{"type":"integer","description":"Number of results to skip for pagination (default 0)","default":0}},"required":["body_part"]},"annotations":{},"examples":[{"description":"What exercises can I do for chest?","input":{"body_part":"chest"}},{"description":"Give me some back exercises","input":{"body_part":"back","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exercises":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID"},"name":{"type":"string","description":"Exercise name"},"bodyPart":{"type":"string","description":"Primary body part targeted"},"target":{"type":"string","description":"Specific target muscle"},"equipment":{"type":"string","description":"Equipment required"},"secondaryMuscles":{"type":"array","items":{"type":"string"},"description":"Secondary muscles worked"},"instructions":{"type":"array","items":{"type":"string"},"description":"Step-by-step instructions"}}},"description":"List of matching exercises"},"count":{"type":"integer","description":"Number of exercises returned"}}},"returns":"Exercises that work the requested body part with full details"},{"name":"exercises_by_target_muscle","displayName":"Exercises by Target Muscle","description":"Find exercises that isolate a specific muscle like biceps, glutes, or abs. Use list_target_muscles first if you are not sure which values are valid.","inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"Target muscle to filter by (e.g. \"biceps\", \"glutes\", \"abs\")"},"limit":{"type":"integer","description":"Maximum number of results to return (default 10)","default":10},"offset":{"type":"integer","description":"Number of results to skip for pagination (default 0)","default":0}},"required":["target"]},"annotations":{},"examples":[{"description":"What are the best exercises for biceps?","input":{"target":"biceps"}},{"description":"I want to work my glutes","input":{"target":"glutes","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exercises":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID"},"name":{"type":"string","description":"Exercise name"},"bodyPart":{"type":"string","description":"Primary body part targeted"},"target":{"type":"string","description":"Specific target muscle"},"equipment":{"type":"string","description":"Equipment required"},"secondaryMuscles":{"type":"array","items":{"type":"string"},"description":"Secondary muscles worked"},"instructions":{"type":"array","items":{"type":"string"},"description":"Step-by-step instructions"}}},"description":"List of matching exercises"},"count":{"type":"integer","description":"Number of exercises returned"}}},"returns":"Exercises that target the requested muscle with full details"},{"name":"exercises_by_equipment","displayName":"Exercises by Equipment","description":"Find exercises you can do with specific equipment like dumbbells, a barbell, or just body weight. Use list_equipment first if you are not sure which values are valid.","inputSchema":{"type":"object","properties":{"equipment":{"type":"string","description":"Equipment type to filter by (e.g. \"dumbbell\", \"barbell\", \"body weight\")"},"limit":{"type":"integer","description":"Maximum number of results to return (default 10)","default":10},"offset":{"type":"integer","description":"Number of results to skip for pagination (default 0)","default":0}},"required":["equipment"]},"annotations":{},"examples":[{"description":"What can I do with dumbbells?","input":{"equipment":"dumbbell"}},{"description":"I only have my body weight, what exercises are there?","input":{"equipment":"body weight","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exercises":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique exercise ID"},"name":{"type":"string","description":"Exercise name"},"bodyPart":{"type":"string","description":"Primary body part targeted"},"target":{"type":"string","description":"Specific target muscle"},"equipment":{"type":"string","description":"Equipment required"},"secondaryMuscles":{"type":"array","items":{"type":"string"},"description":"Secondary muscles worked"},"instructions":{"type":"array","items":{"type":"string"},"description":"Step-by-step instructions"}}},"description":"List of matching exercises"},"count":{"type":"integer","description":"Number of exercises returned"}}},"returns":"Exercises you can do with the specified equipment"},{"name":"list_body_parts","displayName":"List Body Parts","description":"See all the body part categories you can filter by. Run this first if you are unsure what to pass to exercises_by_body_part.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"What body parts can I filter by?","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"body_parts":{"type":"array","items":{"type":"string"},"description":"All valid body part names"}}},"returns":"All body part categories you can use to filter exercises"},{"name":"list_target_muscles","displayName":"List Target Muscles","description":"See all the target muscle categories you can filter by. Run this first if you are unsure what to pass to exercises_by_target_muscle.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"What muscles can I search by?","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"target_muscles":{"type":"array","items":{"type":"string"},"description":"All valid target muscle names"}}},"returns":"All target muscle categories you can use to filter exercises"},{"name":"list_equipment","displayName":"List Equipment","description":"See all the equipment types you can filter by. Run this first if you are unsure what to pass to exercises_by_equipment.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"What equipment options can I filter by?","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"equipment":{"type":"array","items":{"type":"string"},"description":"All valid equipment type names"}}},"returns":"All equipment types you can use to filter exercises"}],"icon":"/icons/workout-planner.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with 9 skills covering full ExerciseDB API"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Give me a list of exercises I can do for [body part or muscle group] using [equipment or \"no equipment\"]. Include step-by-step instructions.","requirements":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}],"credentials":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}]},{"name":"video-production","displayName":"Video Production","subtitle":"Brief to finished video, end-to-end","about":"**Video Production** takes a creative brief and produces a complete video — treatment, screenplay, AI storyboard with generated keyframes, individual video clips, and a final assembled cut with music and transitions. It's an end-to-end production pipeline accessible from a single conversation.\n\nMost video tools only handle one stage. This one chains all six stages in sequence, passing the output of each step into the next automatically. You describe what you want to make; the pipeline handles writing, visual planning, generation, and assembly.\n\n### What you can do\n- **create_treatment** — develop a creative treatment from a brief: tone, narrative arc, visual direction\n- **create_script** — write a full screenplay with scene descriptions, dialogue, and timing\n- **create_storyboard** — generate AI keyframe images for each scene based on the script\n- **revise_storyboard** — iterate on individual scenes before committing to video generation\n- **generate_videos** — generate video clips from the approved storyboard frames\n- **assemble_video** — combine all clips with transitions and auto-generated music into a final video\n\n### Who it's for\nBrand and agency teams producing video content for campaigns, filmmakers prototyping short-form concepts, marketers creating product reveal and explainer videos, and content creators who want to move from idea to finished video without a production crew.\n\n### How to use it\n1. Start with **create_treatment** — describe your video concept, target duration, brand, and tone\n2. Run **create_script** with the treatment to get a scene-by-scene screenplay\n3. Run **create_storyboard** to generate visual keyframes for every scene\n4. Optionally use **revise_storyboard** to adjust individual scenes before generation\n5. Run **generate_videos** to produce AI video clips for each storyboard frame\n6. Run **assemble_video** to merge clips with transitions and music into the finished video\n\n### Getting started\nStart with a clear brief: what the video is for, how long it should be, what tone you want, and who the audience is. Set aspect_ratio to 16:9 for landscape or 9:16 for vertical/social formats.","version":"0.05","categories":["media","ai"],"currency":"USD","skills":[{"name":"create_treatment","displayName":"Create Treatment","description":"Step 1: Generate a treatment plan from a creative brief. Queries knowledge bases (cinematography, lighting, colour, wardrobe, scriptwriting) and returns visual style, camera, sound, typography, pacing, emotional arc, and persona directions. Takes ~10s.","inputSchema":{"type":"object","properties":{"brief":{"type":"string","description":"Creative brief describing the video -- concept, goals, tone, audience, duration, style preferences"},"creative_overrides":{"type":"object","properties":{"cinematography":{"type":"string","description":"e.g. \"anamorphic lenses, slow tracking shots\""},"lighting":{"type":"string","description":"e.g. \"chiaroscuro with warm practicals\""},"art_direction":{"type":"string","description":"e.g. \"minimalist Scandinavian interiors\""},"colour_grading":{"type":"string","description":"e.g. \"desaturated teal shadows, warm gold highlights\""},"wardrobe":{"type":"string","description":"e.g. \"tailored dark suits, silk textures\""},"sound_design":{"type":"string","description":"e.g. \"ambient electronic, cinematic swells\""},"editing":{"type":"string","description":"e.g. \"fast-cut montage, slow dissolves for emotion\""}},"description":"Optional per-role creative overrides that take priority over brief analysis"},"brand":{"type":"object","properties":{"name":{"type":"string"},"guidelines":{"type":"string"},"products":{"type":"array","items":{"type":"string"}},"tone_of_voice":{"type":"string"},"logo_url":{"type":"string"},"colors":{"type":"array","items":{"type":"string"}}},"description":"Brand information for integration"},"personas":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"turnaround_sheet_url":{"type":"string","description":"Reference image for visual consistency"},"description":{"type":"string"},"role":{"type":"string"}}},"description":"Character personas with optional turnaround sheet images"},"reference_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"target_platform":{"type":"string","enum":["youtube","instagram","tiktok","cinema","web"],"description":"Target distribution platform (default youtube)"},"llm_model":{"type":"string","description":"OpenRouter model ID override"}},"required":["brief"]},"annotations":{},"examples":[{"description":"Treatment for a luxury watch reveal","input":{"brief":"A 60-second cinematic product reveal for a luxury watch brand. Dark, moody aesthetic with precise movements.","target_platform":"youtube"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"concept":{"type":"string"},"logline":{"type":"string"},"target_duration_seconds":{"type":"number"},"estimated_shot_count":{"type":"number"},"visual":{"type":"object"},"camera":{"type":"object"},"sound":{"type":"object"},"typography":{"type":"object"},"wardrobe":{"type":"object"},"pacing":{"type":"object"},"emotional_arc":{"type":"array","items":{"type":"object"}},"persona_directions":{"type":"array","items":{"type":"object"}},"cost_estimate":{"type":"object"},"treatment_id":{"type":"string"}},"required":["concept","logline","target_duration_seconds","visual","camera","sound","pacing","emotional_arc","persona_directions","treatment_id"]},"returns":"Comprehensive treatment plan with visual, camera, sound, typography, pacing, emotional arc, persona directions, and cost estimate"},{"name":"create_script","displayName":"Create Script","description":"Step 2: Generate a full screenplay from the treatment. Uses scriptwriting frameworks for hooks, retention, and emotional architecture. Returns scenes with dialogue, voiceover, pacing markers, and audio cues. Takes ~10s. Requires full treatment from step 1.","inputSchema":{"type":"object","properties":{"treatment":{"type":"object","description":"Full treatment plan output from create_treatment"},"duration_seconds":{"type":"number","description":"Target video duration in seconds (overrides treatment estimate)"},"brand":{"type":"object","description":"Brand info (optional, same as create_treatment)"},"personas":{"type":"array","items":{"type":"object"},"description":"Persona list (optional)"},"target_platform":{"type":"string","enum":["youtube","instagram","tiktok","cinema","web"],"description":"Target distribution platform"},"llm_model":{"type":"string","description":"OpenRouter model ID override"}},"required":["treatment"]},"annotations":{},"examples":[{"description":"Script from treatment","input":{"treatment":{"concept":"Luxury watch reveal","target_duration_seconds":60,"visual":{},"camera":{},"sound":{"music_genre":"ambient electronic"},"pacing":{},"emotional_arc":[],"persona_directions":[]},"duration_seconds":60}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"title":{"type":"string"},"total_duration_seconds":{"type":"number"},"scenes":{"type":"array","items":{"type":"object"}},"voiceover_full_text":{"type":"string"},"dialogue_by_persona":{"type":"object"}},"required":["title","total_duration_seconds","scenes"]},"returns":"Full screenplay with scenes, dialogue, voiceover, pacing markers, emotional beats, and audio cues"},{"name":"create_storyboard","displayName":"Create Storyboard","description":"Step 3: Generate a shot list with AI keyframe images from script and treatment. Two-pass generation for consistency: establishing shots first, then remaining shots with persona references. Takes 1-5 min. Async -- poll with get_job_result. Requires steps 1-2.","inputSchema":{"type":"object","properties":{"script":{"type":"object","description":"Full script output from create_script"},"treatment":{"type":"object","description":"Full treatment output from create_treatment (includes treatment_id and persona_directions)"},"personas":{"type":"array","items":{"type":"object"},"description":"Persona list (optional)"},"model":{"type":"string","default":"nano-banana-2","description":"Image model for keyframe generation. Call list_models to see available options."},"aspect_ratio":{"type":"string","default":"16:9","description":"Keyframe aspect ratio (16:9, 9:16, 1:1)"},"llm_model":{"type":"string","description":"OpenRouter model ID override"}},"required":["script","treatment"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Storyboard from script and treatment","input":{"script":{"title":"Watch Reveal","total_duration_seconds":60,"scenes":[{"scene_number":1,"title":"Opening","duration_seconds":10,"location":"Dark studio","action":"Watch on velvet","dialogue":[],"voiceover":"","pacing":"slow","emotional_beat":"anticipation"}]},"treatment":{"treatment_id":"abc123","concept":"Luxury watch reveal","visual":{"style":"cinematic","color_palette":["#1a1a2e","#c9a55a"],"color_grading":"desaturated with gold highlights","lighting":"dramatic chiaroscuro"},"camera":{"default_framing":"medium close-up"},"pacing":{"default_shot_duration":5,"transition_style":"fade","transition_duration":0.5},"persona_directions":[]}}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"shots":{"type":"array","items":{"type":"object"}},"audio_plan":{"type":"object"},"cost_estimate":{"type":"object"}},"required":["shots","audio_plan"]},"returns":"Storyboard with shots (keyframe images, video prompts, overlays), audio plan, and cost estimate"},{"name":"revise_storyboard","displayName":"Revise Storyboard","description":"Step 4 (optional, repeatable): Edit individual shots and regenerate keyframes. Supports field-level changes, shot addition/removal, and reordering. Same seeds by default; set new_seed for fresh generation. Takes 30-60s. Async -- poll with get_job_result.","inputSchema":{"type":"object","properties":{"storyboard":{"type":"object","description":"Full storyboard output from create_storyboard or previous revise_storyboard"},"treatment":{"type":"object","description":"Full treatment output (for persona directions and visual settings)"},"personas":{"type":"array","items":{"type":"object"},"description":"Persona list (optional)"},"revisions":{"type":"array","items":{"type":"object","properties":{"shot_number":{"type":"number","description":"Shot to revise"},"changes":{"type":"object","properties":{"description":{"type":"string"},"framing":{"type":"string"},"camera_angle":{"type":"string"},"camera_movement":{"type":"string"},"lighting_setup":{"type":"string"},"wardrobe_notes":{"type":"string"},"duration_seconds":{"type":"number"},"dialogue":{"type":"string"},"voiceover":{"type":"string"}}},"regenerate_keyframe":{"type":"boolean","description":"Whether to regenerate the keyframe image"},"new_seed":{"type":"boolean","description":"Use a fresh seed instead of the original (default false)"}},"required":["shot_number","changes","regenerate_keyframe"]},"description":"Array of shot revisions"},"add_shots":{"type":"array","items":{"type":"object"},"description":"New shots to insert"},"remove_shots":{"type":"array","items":{"type":"number"},"description":"Shot numbers to remove"},"reorder":{"type":"array","items":{"type":"number"},"description":"New shot order (by shot_number)"}},"required":["storyboard","treatment"]},"annotations":{"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Change framing and regenerate keyframe for shot 3","input":{"storyboard":{"shots":[{"shot_number":1,"scene_number":1,"description":"Wide establishing shot","keyframe_url":"https://picsum.photos/id/64/1920/1080.jpg","keyframe_seed":12345}],"audio_plan":{"segments":[]},"cost_estimate":{}},"treatment":{"treatment_id":"abc123","visual":{"color_palette":["#1a1a2e"],"style":"cinematic"},"persona_directions":[]},"revisions":[{"shot_number":1,"changes":{"framing":"extreme close-up"},"regenerate_keyframe":true}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"shots":{"type":"array","items":{"type":"object"}},"audio_plan":{"type":"object"},"cost_estimate":{"type":"object"}},"required":["shots","audio_plan"]},"returns":"Updated storyboard with revised shots, renumbered, and regenerated keyframes"},{"name":"generate_videos","displayName":"Generate Videos","description":"Step 5: Generate video clips from storyboard keyframes. Each clip uses the keyframe + video_prompt to produce video with synced dialogue and audio. Takes 5-30 min. Async -- poll with get_job_result. Pending clips retrievable later.","inputSchema":{"type":"object","properties":{"storyboard":{"type":"object","description":"Full storyboard output from create_storyboard / revise_storyboard"},"model":{"type":"string","default":"kling-3.0","description":"Video model to use. Call list_models to see available options."},"shot_duration":{"type":"number","default":5,"description":"Target duration per clip in seconds (snapped to model-valid durations)"},"max_parallel":{"type":"number","default":3,"description":"Max parallel video generation requests"}},"required":["storyboard"]},"annotations":{"execution":{"estimatedSeconds":600,"timeoutSeconds":3600,"mode":"io"}},"examples":[{"description":"Generate videos from storyboard","input":{"storyboard":{"shots":[{"shot_number":1,"scene_number":1,"keyframe_url":"https://picsum.photos/id/64/1920/1080.jpg","video_prompt":"[Visual]: Dark studio, watch on velvet\n[Camera]: Slow dolly-in\n[Lighting]: Dramatic chiaroscuro\n[Mood]: Anticipation","duration_seconds":5}],"audio_plan":{"segments":[]}}}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"clips":{"type":"array","items":{"type":"object"}},"pending_clips":{"type":"array","items":{"type":"object"}},"total_cost":{"type":"number"},"model":{"type":"string"},"duration_per_clip":{"type":"number"},"audio_enabled":{"type":"boolean"}},"required":["clips","total_cost"]},"returns":"Video clips array with URLs and filenames, plus any pending clips still generating"},{"name":"assemble_video","displayName":"Assemble Video","description":"Step 6 (final): Stitch clips into a complete video with transitions, overlays, titles, end card, and audio mixing. Auto-generates music or uses provided URL, with volume ducking during speech. Takes 2-5 min. Async -- poll with get_job_result.","inputSchema":{"type":"object","properties":{"video_clips":{"type":"object","description":"Full output from generate_videos (contains clips array)"},"storyboard":{"type":"object","description":"Full storyboard output"},"treatment":{"type":"object","description":"Full treatment output (for sound, typography, pacing)"},"audio":{"type":"object","properties":{"music_prompt":{"type":"string","description":"Override treatment.sound for music generation"},"music_url":{"type":"string","description":"Use this track instead of generating one"},"music_volume":{"type":"number","description":"0-1, default 0.5"},"duck_during_speech":{"type":"boolean","description":"Reduce music volume during speech (default true)"},"voiceover_url":{"type":"string","description":"Optional separate VO track (overrides Kling speech)"},"voiceover_volume":{"type":"number","description":"0-1, default 1.0"},"clip_audio_volume":{"type":"number","description":"Volume for Kling clip audio (default 1.0)"}},"description":"Audio configuration"},"brand":{"type":"object","description":"Brand info for end card (logo_url, name, colors)"},"format":{"type":"string","enum":["landscape","portrait","square"],"default":"landscape","description":"Video aspect ratio format"},"fps":{"type":"number","default":30,"description":"Frames per second (default 30)"}},"required":["video_clips","storyboard","treatment"]},"annotations":{"execution":{"estimatedSeconds":180,"timeoutSeconds":600,"mode":"cpu"}},"examples":[{"description":"Assemble final video","input":{"video_clips":{"clips":[{"shot_number":1,"video_url":"https://filesamples.com/samples/video/mp4/sample_640x360.mp4","video_path":"/tmp/shot1.mp4","duration_seconds":5,"filename":"shot_001_scene_01.mp4"}]},"storyboard":{"shots":[{"shot_number":1,"scene_number":1,"overlays":[],"dialogue":"","voiceover":""}],"audio_plan":{"segments":[]}},"treatment":{"concept":"Luxury Watch","logline":"A cinematic reveal","sound":{"music_genre":"ambient electronic","music_arc":"building tension to release","sfx_style":"minimal"},"typography":{"heading_font":"Inter"},"visual":{"color_palette":["#1a1a2e"]},"pacing":{"transition_style":"fade","transition_duration":0.5}}}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_path":{"type":"string"},"total_duration_seconds":{"type":"number"},"scene_count":{"type":"number"},"clip_count":{"type":"number"},"has_music":{"type":"boolean"},"has_voiceover":{"type":"boolean"},"format":{"type":"string"},"fps":{"type":"number"},"cost_breakdown":{"type":"object"}},"required":["video_path","total_duration_seconds"]},"returns":"Final assembled video file (auto-uploaded via asset system) with duration and cost breakdown"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["create_treatment","create_script","create_storyboard","revise_storyboard","generate_videos","assemble_video","list_models"],"icon":"/icons/video-production.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release -- 6-skill video production pipeline"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-01","changes":["Renamed keyframe_model and video_model params to model for consistency with platform standard"]},{"version":"0.04","date":"2026-04-05","changes":["Personas from your library are now auto-discovered and injected — pass persona_file_id instead of manual persona fields"]},{"version":"0.05","date":"2026-04-14","changes":["Accept scenes, products, outfits and style references from your file library too"]}],"premadePrompt":"Produce a [duration, e.g. 60-second] video for [brand or concept] — [describe the tone and goal, e.g. a cinematic product reveal for a luxury watch with a dark, moody aesthetic]. Take it from brief all the way to a finished video with music.","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["create_treatment","create_storyboard","revise_storyboard"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand voice and tone in treatments, scripts, and narration\n  - Use brand visual style in storyboard direction and scene design\n  - Reference products and services accurately\n  - Tailor messaging for the target audience","produces":["video_insights","content_insights"],"followEdges":true},"requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"diagram-generator","displayName":"Diagram Generator","subtitle":"Render Mermaid, PlantUML & more","about":"**Diagram Generator** renders text-based diagram source code into SVG or PNG images with a permanent shareable URL. Mermaid, PlantUML, Graphviz DOT, D2, C4-PlantUML, ERD, DBML, and more — one tool for every diagram format.\n\nWriting a diagram in code is faster than dragging boxes in a GUI, but rendering it usually requires installing tools or finding an online editor. This tool takes the source code and returns a rendered image plus a permanent URL you can embed in docs, wikis, or presentations without hosting anything yourself.\n\n### What you can do\n- **generate_diagram** — render any diagram from text source in Mermaid, PlantUML, Graphviz DOT, D2, C4-PlantUML, ERD, DBML, blockdiag, seqdiag, or actdiag\n\n### Who it's for\nDevelopers documenting system architecture, technical writers creating process flows, data engineers modeling schemas, and anyone who prefers writing diagrams in code over drag-and-drop tools.\n\n### How to use it\n1. Write your diagram source code in any supported format\n2. Use **generate_diagram** and pass the source and type (default is mermaid)\n3. Choose format: svg for scalable output that works at any size, png for raster images\n4. The response includes a diagram_url — a permanent link that renders the diagram on demand, ready to embed anywhere\n\n### Getting started\nNo setup needed. Start with Mermaid if you're not sure which format to use — it's the most readable and covers flowcharts, sequence diagrams, class diagrams, and Gantt charts.","version":"0.02","categories":["data","media"],"currency":"USD","skills":[{"name":"generate_diagram","displayName":"Generate Diagram","description":"Render a diagram from text source code. Accepts Mermaid, PlantUML, Graphviz DOT, D2, C4-PlantUML, ERD, DBML, and more. Returns a rendered image file plus a permanent URL for embedding.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"The diagram source text in the specified diagram language"},"type":{"type":"string","enum":["mermaid","plantuml","graphviz","d2","c4plantuml","erd","dbml","blockdiag","seqdiag","actdiag"],"default":"mermaid","description":"Diagram language (default \"mermaid\"). Supported: mermaid, plantuml, graphviz (DOT), d2, c4plantuml, erd, dbml, blockdiag, seqdiag, actdiag."},"format":{"type":"string","enum":["svg","png"],"default":"svg","description":"Output image format (default \"svg\"). SVG is scalable and includes the raw markup; PNG is a raster image."}},"required":["source"]},"annotations":{},"examples":[{"description":"Mermaid flowchart showing a CI/CD pipeline","input":{"source":"graph TD\n  A[Push Code] --> B[Run Tests]\n  B --> C{Tests Pass?}\n  C -->|Yes| D[Deploy to Staging]\n  C -->|No| E[Fix & Retry]\n  D --> F[Deploy to Production]","type":"mermaid"}},{"description":"PlantUML sequence diagram for user authentication","input":{"source":"@startuml\nActor User\nUser -> App: Login Request\nApp -> AuthService: Validate Credentials\nAuthService --> App: JWT Token\nApp --> User: Login Success\n@enduml","type":"plantuml"}},{"description":"Graphviz DOT directed graph of microservices","input":{"source":"digraph G {\n  rankdir=LR;\n  Gateway -> UserService;\n  Gateway -> OrderService;\n  OrderService -> PaymentService;\n  OrderService -> InventoryService;\n}","type":"graphviz"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"diagram_url":{"type":"string","description":"Permanent URL that renders the diagram on-demand (Kroki GET endpoint)"},"format":{"type":"string","description":"Output image format (svg or png)"},"diagram_type":{"type":"string","description":"The diagram language used"},"source_length":{"type":"number","description":"Length of the source text in characters"},"svg_content":{"type":"string","description":"Raw SVG markup (only present when format is svg)"}}},"contentType":"image","returns":"Rendered diagram image as a downloadable file plus a permanent URL for embedding"}],"icon":"/icons/diagram-generator.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Create a flowchart showing [process or system description]. Render it as an SVG I can embed.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"address-geocoding","displayName":"Address Geocoding","subtitle":"Addresses to coordinates and back","about":"**Address Geocoding** converts between street addresses and geographic coordinates in both directions. Type in a full or partial address and get back latitude and longitude — or give it GPS coordinates and get back the nearest street address.\n\nIt's useful anywhere location data needs to cross formats: mapping workflows, logistics planning, enriching datasets with coordinates, or interpreting GPS output from devices and APIs. The geocoder handles everything from precise street addresses to landmarks and city names, and returns importance scores so you can pick the best match when multiple results come back.\n\n### What you can do\n- Convert any address (full, partial, or landmark) to latitude and longitude coordinates\n- Reverse geocode GPS coordinates back to a structured street address\n- Get structured address components including house number, road, city, postcode, and country\n- Handle bulk lookups by calling geocode_address in sequence for each address\n\n### Who it's for\nDevelopers and analysts enriching data with location coordinates. Anyone building mapping or logistics workflows who needs to move between human-readable addresses and machine-readable coordinates. Useful wherever you have one format and need the other.\n\n### How to use it\n1. Use **geocode_address** with any address string — the more specific, the more accurate the result\n2. Check the importance score (0–1) in the results to pick the best match when multiple locations are returned\n3. Use **reverse_geocode** when you have coordinates and need to display a human-readable address\n\n### Getting started\nBoth skills are ready to use immediately — no setup needed. Start with **geocode_address** and pass any address you have.","version":"0.03","categories":["data"],"currency":"USD","skills":[{"name":"geocode_address","displayName":"Geocode Address","description":"Convert a full or partial address into geographic coordinates. Returns matching locations with latitude, longitude, full address breakdown, and relevance scores.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Full or partial address to geocode (e.g. \"1600 Pennsylvania Avenue, Washington DC\"). A bare UK outcode (e.g. \"W5\", \"CR4\") returns that area's centre."},"limit":{"type":"number","description":"Maximum number of results to return (1-10, default 5)","minimum":1,"maximum":10,"default":5}},"required":["address"]},"annotations":{},"examples":[{"description":"Geocode the White House address","input":{"address":"1600 Pennsylvania Avenue, Washington DC"}},{"description":"Find coordinates for the Eiffel Tower","input":{"address":"Eiffel Tower, Paris"}},{"description":"Geocode a UK outcode to its area centre","input":{"address":"W5"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The address query that was geocoded"},"results":{"type":"array","description":"Matching locations with coordinates and address details","items":{"type":"object","properties":{"display_name":{"type":"string","description":"Full formatted address"},"latitude":{"type":"number","description":"Latitude coordinate"},"longitude":{"type":"number","description":"Longitude coordinate"},"importance":{"type":"number","description":"Relevance score (0-1)"},"type":{"type":"string","description":"Place type (e.g. house, street, city, postcode_area for a UK outcode)"},"address":{"type":"object","description":"Structured address components (house_number, road, city, state, postcode, country, country_code)"}}}},"count":{"type":"number","description":"Number of results returned"}}},"returns":"Matching locations with coordinates, full address breakdown, and relevance scores"},{"name":"reverse_geocode","displayName":"Reverse Geocode","description":"Convert latitude and longitude coordinates into a human-readable address. Returns the full address breakdown with street, city, state, country, and postal code.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude coordinate (e.g. 51.5074)"},"longitude":{"type":"number","description":"Longitude coordinate (e.g. -0.1278)"}},"required":["latitude","longitude"]},"annotations":{},"examples":[{"description":"Reverse geocode coordinates in London","input":{"latitude":51.5074,"longitude":-0.1278}},{"description":"Find address for coordinates in New York City","input":{"latitude":40.7128,"longitude":-74.006}}],"pricing":"free","outputSchema":{"type":"object","properties":{"display_name":{"type":"string","description":"Full formatted address"},"latitude":{"type":"number","description":"Latitude coordinate"},"longitude":{"type":"number","description":"Longitude coordinate"},"type":{"type":"string","description":"Place type (e.g. house, street, city)"},"name":{"type":"string","description":"Place name if applicable"},"address":{"type":"object","description":"Structured address components (house_number, road, city, state, postcode, country, country_code)"}}},"returns":"Full address breakdown with street, city, state, country, and postal code for the given coordinates"}],"icon":"/icons/address-geocoding.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-06-03","changes":["UK outcodes (e.g. \"W5\", \"CR4\") now return the correct area centre instead of an unrelated place"]}],"premadePrompt":"Convert this address to coordinates: [street address, city, country]. Then tell me the exact latitude and longitude I can use for mapping."},{"name":"address-lookup","displayName":"Address Lookup","subtitle":"Global address autocomplete and resolution","about":"**Address Lookup** resolves customer-supplied address fragments into verified, structured service addresses. It is designed for phone, SMS, email, and form intake where a customer may provide anything from a postcode and house number to a messy full address.\n\nUK addresses resolve at individual flat and property level — every premise for a postcode, with sub-building, UPRN, and UDPRN. Global addresses resolve from free text with house-number precision. Ambiguous results return ranked candidates and a clarification question rather than silently guessing.\n\n### What you can do\n- **lookup_postcode** — validate a postal code and return every individual premise, ready for the agent to ask which one the customer means\n- **resolve_address** — resolve messy full address text globally, or match postcode plus spoken property detail to one exact address\n- **autocomplete_address** / **autocomplete_postcode** — typed address suggestions, or complete a partial postcode\n- **reverse_geocode** — turn a latitude/longitude into the nearest UK postcode and admin areas\n- **validate_postcode**, **search_postcodes**, **nearest_postcodes**, **bulk_lookup_postcodes**, **lookup_outcode** — UK postcode utilities for forms, batches, and area routing\n- **search_places** — find UK towns, suburbs, and landmarks by name\n- **terminated_postcode** — check whether a postcode was retired by Royal Mail\n\n### Who it's for\nVoice agents, field-service teams, delivery teams, CRM intake flows, and operations software that must capture the exact service address before routing someone or saving a customer record.\n\n### How to use it\n1. Use **resolve_address** when the customer gives a complete or messy address in SMS, email, or chat\n2. Use **autocomplete_address** while the customer types an address into a form or chat UI — or **autocomplete_postcode** to complete just the postcode\n3. Use **lookup_postcode** when the customer only gives a postcode — returns every premise so you can ask \"which number or flat?\"\n4. Use **reverse_geocode** to turn a GPS coordinate (e.g. a driver's location) into the nearest postcode and area\n5. If the result is **ambiguous**, read back the candidate labels and ask the customer to pick one — never assume\n6. For a named business or shop, switch to the **places-search** tool instead\n\n### Getting started\nWorks with no configuration. Add a UK address credential for flat-level UK data including UPRN and UDPRN; the postcode utilities need no setup.","version":"0.09","categories":["data"],"currency":"USD","skills":[{"name":"lookup_postcode","displayName":"Lookup Postcode","description":"Validate and locate a postal code area using a configured address provider.","inputSchema":{"type":"object","properties":{"postcode":{"type":"string","description":"Postal code to look up, e.g. SW1A 2AA or 20500. A UK outcode (e.g. W5, CR4) returns that area's centroid (no street-level addresses)."},"country":{"type":"string","description":"ISO country code used to bias provider lookup.","default":"GB"},"max_results":{"type":"number","description":"Maximum candidate records to return, default 5.","default":5}},"required":["postcode"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up a UK postcode area","input":{"country":"GB","postcode":"SW1A 2AA","max_results":5}},{"description":"Check a postcode before asking for the house number","input":{"postcode":"E8 4DG"}},{"description":"Resolve a UK outcode (area) to its centroid","input":{"postcode":"W5"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Lookup status: success, invalid_postcode, not_found, or provider_unavailable. Outcode lookups return success with postcode_type \"outcode\"."},"country":{"type":"string","description":"ISO country code for the lookup."},"postcode":{"type":"string","description":"Normalized postcode (or the outcode for an outcode lookup)."},"postcode_valid":{"type":"boolean","description":"Whether the postcode exists as a valid record."},"postcode_type":{"type":"string","description":"UK: \"full\" for a full postcode, \"outcode\" for an outward-code area lookup (centroid only, empty addresses). \"postal_code\" for non-UK."},"admin_district":{"type":"string","description":"UK: borough or district name (e.g. Hackney, Westminster). Null for non-UK."},"admin_ward":{"type":"string","description":"UK: neighbourhood ward (e.g. Haggerston). Null for non-UK."},"outcode":{"type":"string","description":"UK: postcode prefix (e.g. E8 from E8 4DG). Null for non-UK."},"region":{"type":"string","description":"UK: top-level region (e.g. London, North West). Null for non-UK."},"centroid":{"type":"object","description":"Postcode centroid coordinates {lat, lng}. Present when known."},"summary":{"type":"object","description":"Town, locality, street list, and candidate count."},"addresses":{"type":"array","description":"Candidate structured address records."},"voice_prompt_hint":{"type":"string","description":"Suggested next question for a voice agent."}}},"returns":"Postal-code lookup candidates, UK admin hierarchy fields, centroid, and a prompt hint for the next customer question."},{"name":"resolve_address","displayName":"Resolve Address","description":"Resolve messy full address text globally, or postcode plus property detail, to one structured address where possible.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO country code used to bias provider resolution.","default":"GB"},"postcode":{"type":"string","description":"Full postcode if known, e.g. SW1A 2AA. A UK outcode (e.g. W5) resolves to the area centroid (status success, match_type \"outcode_centroid\")."},"address_text":{"type":"string","description":"Spoken or typed address detail, e.g. number 10 or Flat 3."},"building_number":{"type":"string","description":"Building or house number supplied separately."},"building_name":{"type":"string","description":"Building name supplied separately."},"sub_building":{"type":"string","description":"Flat, apartment, room, or unit detail supplied separately."},"max_results":{"type":"number","description":"Maximum ambiguous candidates to return, default 5.","default":5}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Resolve messy full address text","input":{"country":"US","address_text":"1600 Pennsylvania Washington DC"}},{"description":"Resolve house number within a postcode","input":{"country":"GB","postcode":"SW1A 2AA","building_number":"10"}},{"description":"Resolve a UK outcode to its area centre","input":{"country":"GB","postcode":"CR4"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Resolution status: resolved, ambiguous, success (outcode area centroid), invalid_postcode, not_found, or provider_unavailable."},"confidence":{"type":"number","description":"Match confidence from 0 to 1 when applicable (0.5 for an outcode area centroid)."},"match_type":{"type":"string","description":"Type of address match found, e.g. \"outcode_centroid\" for a UK outcode area lookup."},"postcode_type":{"type":"string","description":"UK: \"outcode\" when an outward-code area centroid was returned."},"address":{"type":"object","description":"Resolved structured address when one clear match exists."},"candidates":{"type":"array","description":"Candidate addresses when ambiguous. Each includes id, single_line, voice_label, latitude, longitude."},"admin_district":{"type":"string","description":"UK: borough or district name. Present when a UK postcode is known."},"admin_ward":{"type":"string","description":"UK: neighbourhood ward. Present when a UK postcode is known."},"outcode":{"type":"string","description":"UK: postcode prefix. Present when a UK postcode is known."},"region":{"type":"string","description":"UK: top-level region. Present when a UK postcode is known."},"centroid":{"type":"object","description":"Postcode centroid {lat, lng}. Present when a UK postcode is known."},"voice_confirmation":{"type":"string","description":"Short confirmation string for a resolved address."},"voice_prompt_hint":{"type":"string","description":"Suggested clarification when unresolved."}}},"returns":"A resolved structured address or ambiguous candidates (with coordinates), plus UK admin hierarchy fields when a postcode is known."},{"name":"autocomplete_address","displayName":"Autocomplete Address","description":"Return ranked typed address suggestions from a configured provider for forms and chat flows.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO country code for suggestions, default GB.","default":"GB"},"query":{"type":"string","description":"Partial typed address query."},"max_results":{"type":"number","description":"Maximum suggestions to return, default 10.","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Autocomplete a partial UK address","input":{"country":"GB","query":"10 Downing SW1","max_results":10}},{"description":"Suggest addresses from a street and postcode fragment","input":{"query":"Flat 1 Birchwood N4","country":"GB"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Autocomplete status."},"query":{"type":"string","description":"Original query string."},"suggestions":{"type":"array","description":"Ranked short address suggestions."},"voice_prompt_hint":{"type":"string","description":"Suggested next question when no suggestions are available."}}},"returns":"Ranked short address suggestions with provider-stable IDs where available."},{"name":"reverse_geocode","displayName":"Reverse Geocode","description":"Find the nearest UK postcode(s) and admin areas for a latitude/longitude coordinate.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude in WGS84 decimal degrees, e.g. 51.5034."},"longitude":{"type":"number","description":"Longitude in WGS84 decimal degrees, e.g. -0.1276."},"limit":{"type":"number","description":"Maximum nearby postcodes to return, default 1, max 100.","default":1},"radius":{"type":"number","description":"Search radius in metres, default 100, max 2000.","default":100}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find the postcode at a coordinate","input":{"latitude":51.5034,"longitude":-0.1276}},{"description":"Return the 5 nearest postcodes within 500m","input":{"latitude":53.4808,"longitude":-2.2426,"limit":5,"radius":500}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Lookup status: success, not_found, invalid_input, or provider_unavailable."},"nearest_postcode":{"type":"string","description":"The closest postcode to the coordinate."},"postcodes":{"type":"array","description":"Nearby postcodes ordered by distance, each with distance_m, centroid, outcode, and UK admin fields."},"voice_prompt_hint":{"type":"string","description":"Suggested confirmation question."}}},"returns":"The nearest UK postcode(s) to a coordinate, with distance and admin hierarchy."},{"name":"autocomplete_postcode","displayName":"Autocomplete Postcode","description":"Suggest valid UK postcodes from a partial postcode as the customer spells it out.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Partial postcode, e.g. \"SW1A\" or \"SW1A 2\"."},"limit":{"type":"number","description":"Maximum suggestions to return, default 10, max 100.","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Autocomplete a partial postcode","input":{"query":"SW1A 2"}},{"description":"Suggest postcodes for an outcode","input":{"query":"EC1A","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Autocomplete status: success, not_found, invalid_input, or provider_unavailable."},"query":{"type":"string","description":"Original partial postcode."},"suggestions":{"type":"array","description":"Matching full UK postcodes."},"voice_prompt_hint":{"type":"string","description":"Suggested next question."}}},"returns":"A list of valid UK postcodes matching the partial input."},{"name":"validate_postcode","displayName":"Validate Postcode","description":"Check whether a UK postcode is real and currently in use, without a full lookup.","inputSchema":{"type":"object","properties":{"postcode":{"type":"string","description":"UK postcode to validate, e.g. \"SW1A 2AA\"."}},"required":["postcode"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Validate a real postcode","input":{"postcode":"SW1A 2AA"}},{"description":"Validate a malformed postcode","input":{"postcode":"ZZ99 9ZZ"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success, invalid_input, or provider_unavailable."},"postcode":{"type":"string","description":"The postcode that was checked."},"valid":{"type":"boolean","description":"True if the postcode exists and is in use."},"voice_prompt_hint":{"type":"string","description":"Suggested next question."}}},"returns":"Whether the supplied UK postcode is valid."},{"name":"search_postcodes","displayName":"Search Postcodes","description":"Search UK postcodes by a partial string and return full records with coordinates and admin areas.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Partial or full postcode to search, e.g. \"SW1A 2\"."},"limit":{"type":"number","description":"Maximum results to return, default 10, max 100.","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search by partial postcode","input":{"query":"SW1A 2"}},{"description":"Search and cap results","input":{"query":"EC1A","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success, not_found, invalid_input, or provider_unavailable."},"query":{"type":"string","description":"Original search query."},"postcodes":{"type":"array","description":"Matching postcodes with centroid, outcode, and admin hierarchy."}}},"returns":"Matching UK postcodes with coordinates and admin areas."},{"name":"nearest_postcodes","displayName":"Nearest Postcodes","description":"Return the postcodes nearest to a given UK postcode, ordered by distance.","inputSchema":{"type":"object","properties":{"postcode":{"type":"string","description":"UK postcode to centre the search on, e.g. \"SW1A 2AA\"."},"limit":{"type":"number","description":"Maximum neighbours to return, default 10, max 100.","default":10},"radius":{"type":"number","description":"Search radius in metres, default 100, max 2000.","default":100}},"required":["postcode"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find neighbours of a postcode","input":{"postcode":"SW1A 2AA"}},{"description":"Widen the search radius","input":{"postcode":"M1 1AE","radius":1000,"limit":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success, not_found, invalid_input, or provider_unavailable."},"postcode":{"type":"string","description":"The centre postcode."},"postcodes":{"type":"array","description":"Nearby postcodes ordered by distance, each with distance_m and admin fields."}}},"returns":"Postcodes near the supplied postcode with distances."},{"name":"bulk_lookup_postcodes","displayName":"Bulk Lookup Postcodes","description":"Look up many UK postcodes in one call — returns coordinates and admin areas for each.","inputSchema":{"type":"object","properties":{"postcodes":{"type":"array","description":"Array of UK postcodes to look up (max 100).","items":{"type":"string"}}},"required":["postcodes"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up several postcodes at once","input":{"postcodes":["SW1A 2AA","EC1A 1BB","M1 1AE"]}},{"description":"Bulk lookup two postcodes","input":{"postcodes":["N1 7GU","E8 4DG"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success or invalid_input."},"count":{"type":"number","description":"Number of postcodes queried."},"found":{"type":"number","description":"How many were valid/found."},"results":{"type":"array","description":"Per-postcode results with found flag, centroid, and admin fields."}}},"returns":"A result row per input postcode, each with found flag and admin data."},{"name":"lookup_outcode","displayName":"Lookup Outcode","description":"Resolve a UK outcode (the area part of a postcode, e.g. \"W5\") to its centre and admin areas.","inputSchema":{"type":"object","properties":{"outcode":{"type":"string","description":"UK outward code, e.g. \"W5\", \"EC1A\", \"SW1A\"."}},"required":["outcode"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up an outcode area","input":{"outcode":"W5"}},{"description":"Look up a central London outcode","input":{"outcode":"EC1A"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success, not_found, invalid_input, or provider_unavailable."},"outcode":{"type":"string","description":"The normalised outcode."},"centroid":{"type":"object","description":"Area centre { lat, lng }."},"admin_district":{"type":"string","description":"District(s) the outcode covers (joined when it spans several)."},"admin_county":{"type":"string","description":"County/counties covered."},"region":{"type":"string","description":"Region."},"country":{"type":"string","description":"Country/countries covered."}}},"returns":"The outcode area centre and the admin areas it covers."},{"name":"search_places","displayName":"Search Places","description":"Search UK place names (towns, villages, suburbs, landmarks) and return their location and area.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Place name to search, e.g. \"Hyde Park\" or \"Shoreditch\"."},"limit":{"type":"number","description":"Maximum results to return, default 10, max 100.","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for a place by name","input":{"query":"Shoreditch"}},{"description":"Search for a landmark","input":{"query":"Hyde Park","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success, not_found, invalid_input, or provider_unavailable."},"query":{"type":"string","description":"Original search query."},"places":{"type":"array","description":"Matching places with name, type, county, district, region, and coordinates."}}},"returns":"Matching UK places with type and coordinates."},{"name":"terminated_postcode","displayName":"Terminated Postcode","description":"Check whether a UK postcode has been retired by Royal Mail, and when, with its historic location.","inputSchema":{"type":"object","properties":{"postcode":{"type":"string","description":"UK postcode to check, e.g. \"E1W 1UU\"."}},"required":["postcode"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check a possibly-retired postcode","input":{"postcode":"E1W 1UU"}},{"description":"Check an active postcode (returns terminated: false)","input":{"postcode":"SW1A 2AA"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"success, invalid_input, or provider_unavailable."},"postcode":{"type":"string","description":"The postcode that was checked."},"terminated":{"type":"boolean","description":"True if the postcode has been retired by Royal Mail."},"year_terminated":{"type":"number","description":"Year of termination, when terminated."},"month_terminated":{"type":"number","description":"Month of termination, when terminated."},"latitude":{"type":"number","description":"Historic centroid latitude, when terminated."},"longitude":{"type":"number","description":"Historic centroid longitude, when terminated."}}},"returns":"Whether the postcode was terminated, when, and its historic location."}],"workflow":["resolve_address","autocomplete_address","lookup_postcode","lookup_postcode → resolve_address","reverse_geocode","autocomplete_postcode","validate_postcode","search_postcodes","nearest_postcodes","bulk_lookup_postcodes","lookup_outcode","search_places","terminated_postcode"],"icon":"/icons/address-lookup.webp","changelog":[{"version":"0.01","date":"2026-05-12","changes":["Initial release with HERE global address resolution, postal-code lookup, and typed autocomplete.","Added optional Google Places Autocomplete as a secondary suggestion source."]},{"version":"0.02","date":"2026-05-12","changes":["Resolve no longer silently substitutes a nearby address when the requested building number or sub-building cannot be confirmed — returns ambiguous with candidates instead.","Sub-building requests (flat, unit) that cannot be verified from provider data now return ambiguous rather than a building-level resolved result.","Clarified that named-business lookups should use the places-search tool."]},{"version":"0.03","date":"2026-05-12","changes":["UK postcodes now return individual flat and premise records including sub-building, UPRN, and UDPRN when the Ordnance Survey credential is configured.","Added free global geocoding fallback — the tool works without any API key configured."]},{"version":"0.04","date":"2026-05-28","changes":["UK postcode lookups now include borough, ward, outcode, and region — useful for area-level routing and directory pages.","Non-existent UK postcodes now return a clear invalid-postcode signal instead of ambiguous candidates.","Ambiguous address candidates now include coordinates so distance calculations work without a separate lookup."]},{"version":"0.05","date":"2026-06-03","changes":["UK outcodes (the area part of a postcode, e.g. \"W5\" or \"CR4\") now resolve to that area's centre instead of being rejected — useful when only a partial postcode is known.","Outcode results are clearly marked as area-level (no single building), so you know to ask for a full postcode when an exact address is needed."]},{"version":"0.06","date":"2026-06-05","changes":["Improved UK flat- and building-level address resolution — sub-building, building name, UDPRN, and precise coordinates.","If the UK address source is unavailable, the tool now says so clearly instead of returning a postcode-only result that looks like a complete address."]},{"version":"0.07","date":"2026-06-05","changes":["UK address lookups now fall back to a second data source if the primary is unavailable, so flat- and building-level addresses keep resolving."]},{"version":"0.08","date":"2026-06-05","changes":["New: reverse geocode a latitude/longitude to the nearest UK postcode and admin areas.","New: autocomplete a partial UK postcode to valid full postcodes — useful for voice and form intake."]},{"version":"0.09","date":"2026-06-05","changes":["New UK postcode utilities: validate a postcode, search postcodes, find the nearest postcodes, look up many at once, resolve an outcode area, search place names, and check terminated (retired) postcodes."]}],"premadePrompt":"Resolve this customer address from the text [address], then return the best structured service address and any ambiguity.","requirements":[{"name":"postcoder_api_key","type":"secret","displayName":"Postcoder API Key","description":"API key for UK flat-level address data (Royal Mail PAF) — the primary UK premises source.","envFallback":"POSTCODER_API_KEY","acquireUrl":"https://postcoder.com/","setupGuide":"Primary UK address source — flat and premise-level precision.\n\n1. Sign up at postcoder.com and choose an address lookup plan\n2. Find your API key in the account dashboard\n3. Save it as this credential or set POSTCODER_API_KEY"},{"name":"ideal_postcodes_api_key","type":"secret","displayName":"Ideal Postcodes API Key","description":"API key for UK flat-level address data (Royal Mail PAF + UPRN). Automatic fallback used if the primary UK source is unavailable.","envFallback":"IDEAL_POSTCODES_API_KEY","acquireUrl":"https://ideal-postcodes.co.uk/","setupGuide":"Resilient fallback for UK address lookups with flat and premise-level precision.\n\n1. Sign up at ideal-postcodes.co.uk and add a balance (enable Automated Top-Ups so it never lapses)\n2. Copy your API key from the dashboard\n3. Save it as this credential or set IDEAL_POSTCODES_API_KEY"},{"name":"here_api_key","type":"secret","displayName":"HERE API Key","description":"Recommended API key for global address autocomplete and geocoding.","envFallback":"HERE_API_KEY","acquireUrl":"https://platform.here.com/","setupGuide":"Use HERE as the default global address provider.\n\n1. Open the HERE platform and create or select an app\n2. Create an API key under app credentials\n3. Save it as this credential or set HERE_API_KEY"},{"name":"google_places_api_key","type":"secret","displayName":"Google Places API Key","description":"Optional API key for Google Places Autocomplete typed suggestions.","envFallback":"GOOGLE_PLACES_API_KEY","acquireUrl":"https://developers.google.com/maps/documentation/places/web-service/place-autocomplete","setupGuide":"Use Google Places as an optional secondary typed suggestion source.\n\n1. Enable Places API in Google Cloud\n2. Create a restricted API key\n3. Save it as this credential or set GOOGLE_PLACES_API_KEY"}],"credentials":[{"name":"postcoder_api_key","type":"secret","displayName":"Postcoder API Key","description":"API key for UK flat-level address data (Royal Mail PAF) — the primary UK premises source.","envFallback":"POSTCODER_API_KEY","acquireUrl":"https://postcoder.com/","setupGuide":"Primary UK address source — flat and premise-level precision.\n\n1. Sign up at postcoder.com and choose an address lookup plan\n2. Find your API key in the account dashboard\n3. Save it as this credential or set POSTCODER_API_KEY"},{"name":"ideal_postcodes_api_key","type":"secret","displayName":"Ideal Postcodes API Key","description":"API key for UK flat-level address data (Royal Mail PAF + UPRN). Automatic fallback used if the primary UK source is unavailable.","envFallback":"IDEAL_POSTCODES_API_KEY","acquireUrl":"https://ideal-postcodes.co.uk/","setupGuide":"Resilient fallback for UK address lookups with flat and premise-level precision.\n\n1. Sign up at ideal-postcodes.co.uk and add a balance (enable Automated Top-Ups so it never lapses)\n2. Copy your API key from the dashboard\n3. Save it as this credential or set IDEAL_POSTCODES_API_KEY"},{"name":"here_api_key","type":"secret","displayName":"HERE API Key","description":"Recommended API key for global address autocomplete and geocoding.","envFallback":"HERE_API_KEY","acquireUrl":"https://platform.here.com/","setupGuide":"Use HERE as the default global address provider.\n\n1. Open the HERE platform and create or select an app\n2. Create an API key under app credentials\n3. Save it as this credential or set HERE_API_KEY"},{"name":"google_places_api_key","type":"secret","displayName":"Google Places API Key","description":"Optional API key for Google Places Autocomplete typed suggestions.","envFallback":"GOOGLE_PLACES_API_KEY","acquireUrl":"https://developers.google.com/maps/documentation/places/web-service/place-autocomplete","setupGuide":"Use Google Places as an optional secondary typed suggestion source.\n\n1. Enable Places API in Google Cloud\n2. Create a restricted API key\n3. Save it as this credential or set GOOGLE_PLACES_API_KEY"}]},{"name":"flight-status","displayName":"Flight Status","subtitle":"Live flight tracking in real time","about":"**Flight Status** gives you live tracking for any commercial flight or airport in the world. Whether you're waiting at the gate, picking someone up, or just keeping tabs on a connection, this tool tells you exactly what's happening in real time.\n\nIt pulls gate assignments, terminal numbers, delay minutes, and the gap between scheduled and actual departure or arrival times — so you always know what's actually going on, not just what was planned.\n\n### What you can do\n- **check_flight** — look up any flight by number to see current status, delay info, gate, terminal, and scheduled vs actual times\n- **airport_departures** — get the full departure board for any airport worldwide, up to 12 hours ahead\n- **airport_arrivals** — get the full arrivals board, useful for planning pickups or monitoring inbound connections\n\n### Who it's for\nTravelers who want to stay one step ahead of delays, ground transport coordinators, and anyone managing complex itineraries with tight connections. Also useful for apps or workflows that need live flight data without building API integrations from scratch.\n\n### How to use it\n1. Use **check_flight** with a flight number like BA115 or DL1 — it defaults to today but accepts a specific date\n2. If you don't know the flight number, look up the departure or arrivals board with **airport_departures** or **airport_arrivals** using the IATA airport code (LHR, JFK, SYD)\n3. Set hours_ahead to narrow or widen the time window shown on airport boards\n\n### Getting started\nConnect your account and start querying by flight number or airport code — no configuration needed.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"check_flight","displayName":"Check Flight Status","description":"Look up a specific flight by its number to see if it is on time, delayed, or cancelled. Also shows the gate, terminal, and aircraft details.","inputSchema":{"type":"object","properties":{"flight_number":{"type":"string","description":"IATA flight number (e.g. 'BA115', 'DL1', 'UA900', 'QF1')"},"date":{"type":"string","description":"Flight date in YYYY-MM-DD format (defaults to today)"}},"required":["flight_number"]},"annotations":{},"examples":[{"description":"Is BA115 running on time today?","input":{"flight_number":"BA115"}},{"description":"What is the status of Delta flight 1 on March 25th?","input":{"flight_number":"DL1","date":"2026-03-25"}},{"description":"Has my Qantas flight QF1 been delayed?","input":{"flight_number":"QF1","date":"2026-03-22"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"flights":{"type":"array","description":"Matching flights with status, times, delays, gates, terminals, and aircraft"},"count":{"type":"number","description":"Number of flights found"}}},"returns":"Current flight status with delay info, gate, terminal, and scheduled vs actual times"},{"name":"airport_departures","displayName":"Airport Departures","description":"See what flights are leaving an airport in the next few hours. Use this to check the departure board before heading to the airport or to spot delays.","inputSchema":{"type":"object","properties":{"airport":{"type":"string","description":"Airport IATA code (e.g. 'LHR', 'JFK', 'SYD', 'DXB')"},"hours_ahead":{"type":"number","default":6,"minimum":1,"maximum":12,"description":"Hours ahead to show departures for (1-12, default 6)"}},"required":["airport"]},"annotations":{},"examples":[{"description":"What flights are leaving Heathrow in the next few hours?","input":{"airport":"LHR"}},{"description":"Show me departures from JFK in the next 3 hours","input":{"airport":"JFK","hours_ahead":3}}],"pricing":"free","outputSchema":{"type":"object","properties":{"airport":{"type":"string","description":"Airport IATA code"},"departures":{"type":"array","description":"Departing flights with status, times, and gates"},"count":{"type":"number","description":"Number of departures returned (max 50)"},"total_available":{"type":"number","description":"Total departures in the time window"}}},"returns":"Upcoming departures with flight numbers, destinations, times, delays, and gates"},{"name":"airport_arrivals","displayName":"Airport Arrivals","description":"See what flights are arriving at an airport in the next few hours. Handy for picking someone up or checking if an inbound flight is delayed.","inputSchema":{"type":"object","properties":{"airport":{"type":"string","description":"Airport IATA code (e.g. 'LHR', 'JFK', 'SYD', 'DXB')"},"hours_ahead":{"type":"number","default":6,"minimum":1,"maximum":12,"description":"Hours ahead to show arrivals for (1-12, default 6)"}},"required":["airport"]},"annotations":{},"examples":[{"description":"When is the next flight landing at Sydney?","input":{"airport":"SYD"}},{"description":"What is arriving at Dubai in the next 2 hours?","input":{"airport":"DXB","hours_ahead":2}}],"pricing":"free","outputSchema":{"type":"object","properties":{"airport":{"type":"string","description":"Airport IATA code"},"arrivals":{"type":"array","description":"Arriving flights with status, times, and gates"},"count":{"type":"number","description":"Number of arrivals returned (max 50)"},"total_available":{"type":"number","description":"Total arrivals in the time window"}}},"returns":"Upcoming arrivals with flight numbers, origins, times, delays, and gates"}],"icon":"/icons/flight-status.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with flight status, airport departures, and airport arrivals"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Is flight [flight number] on time today? What gate is it departing from and are there any delays?","requirements":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}],"credentials":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}]},{"name":"job-search","displayName":"Job Search","subtitle":"Jobs & salary data worldwide","about":"**Job Search** pulls live job listings from millions of postings worldwide and pairs them with real salary data so you can find the right opportunity and walk into negotiations informed. One tool handles the full research flow — from broad search to full job details to compensation benchmarks.\n\nMost job boards lock you into one country or require you to click through dozens of listings to find salary information. This tool gives you everything in a single conversation: search globally, read full job descriptions, and check what companies actually pay — all without switching tabs.\n\n### What you can do\n- **search_jobs** — find openings by role, location, experience level, and employment type across dozens of countries\n- **get_job_details** — pull the full listing for any job including requirements, benefits, and how to apply\n- **estimate_salary** — look up the typical pay range for any role in any city or country\n- **company_salary** — check what a specific employer pays for a given position\n\n### Who it's for\nJob seekers researching opportunities in a new city or field. Recruiters benchmarking roles against the market. HR teams doing compensation research across regions. Anyone preparing for a salary negotiation who wants real data.\n\n### How to use it\n1. Start with **search_jobs** — include the job title and location in your query for the best results (e.g. \"product manager in Berlin\")\n2. Filter by remote, employment type, experience level, or recency to narrow results\n3. Use **get_job_details** with the job ID to read the full posting before deciding to apply\n4. Use **estimate_salary** or **company_salary** to understand the compensation landscape before you interview\n\n### Getting started\nRun **search_jobs** with a role and location. Set date_posted to \"week\" or \"3days\" to see the freshest listings first.","version":"0.03","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_jobs","displayName":"Search Jobs","description":"Find job openings by role, keyword, or location in any country. Filter by remote, employment type, experience level, and recency to narrow down the right opportunities.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Job search query — include job title and location (e.g. \"software engineer in Berlin\", \"data analyst remote\")"},"page":{"type":"integer","description":"Page number (1-50, each page has up to 10 results)","default":1,"minimum":1,"maximum":50},"num_pages":{"type":"integer","description":"Number of pages to return (1-10). Each page counts as one API credit.","default":1,"minimum":1,"maximum":10},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\", \"au\", \"in\", \"ca\", \"fr\", \"jp\"). Required for country-specific results."},"date_posted":{"type":"string","description":"Filter by when the job was posted","enum":["all","today","3days","week","month"],"default":"all"},"remote_only":{"type":"boolean","description":"Only return remote / work-from-home jobs","default":false},"employment_types":{"type":"string","description":"Comma-separated employment types to filter by (e.g. \"FULLTIME\", \"FULLTIME,CONTRACTOR\")","enum":["FULLTIME","CONTRACTOR","PARTTIME","INTERN","FULLTIME,CONTRACTOR","FULLTIME,PARTTIME","PARTTIME,INTERN"]},"experience_level":{"type":"string","description":"Filter by experience requirements","enum":["under_3_years_experience","more_than_3_years_experience","no_experience","no_degree"]},"location":{"type":"string","description":"Specific location for the search origin (e.g. \"New York, United States\", \"Mumbai, India\")"},"language":{"type":"string","description":"ISO 639 language code for results (e.g. \"en\", \"de\", \"fr\", \"es\", \"ja\"). Defaults to the primary language of the specified country."},"radius":{"type":"number","description":"Search radius in kilometers from the location specified in the query","minimum":1},"exclude_publishers":{"type":"string","description":"Comma-separated job publishers to exclude from results (e.g. \"BeeBe,Dice\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"What developer jobs are open in Chicago right now?","input":{"query":"developer jobs in chicago","country":"us"}},{"description":"I need a remote marketing manager role in the UK","input":{"query":"marketing manager","country":"gb","remote_only":true}},{"description":"Show me entry-level data analyst jobs in Berlin posted this week","input":{"query":"data analyst in Berlin","country":"de","date_posted":"week","experience_level":"no_experience"}},{"description":"Find full-time software engineering positions in Bangalore","input":{"query":"software engineer in Bangalore","country":"in","employment_types":"FULLTIME"}},{"description":"Any contract UX design gigs near Sydney?","input":{"query":"UX designer in Sydney","country":"au","employment_types":"CONTRACTOR","radius":50}}],"pricing":"free","outputSchema":{"type":"object","properties":{"jobs":{"type":"array","description":"Matching job listings with title, company, location, salary, qualifications, and apply links"},"count":{"type":"number","description":"Number of jobs returned on this page"},"query":{"type":"string","description":"The search query used"}}},"returns":"Matching jobs with company info, pay, qualifications, and direct links to apply"},{"name":"get_job_details","displayName":"Get Job Details","description":"Pull up the full listing for a job you found in search results. Use this when you need the complete description, requirements, or application details before deciding to apply.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","description":"Job ID from search_jobs results (e.g. \"adBqCPEBAAAAAAAAAAAA==\")"}},"required":["job_id"]},"annotations":{},"examples":[{"description":"Show me the full posting for this job I found","input":{"job_id":"adBqCPEBAAAAAAAAAAAA=="}},{"description":"What are the requirements and benefits for this role?","input":{"job_id":"xYz123ABcDeFgHiJkLm=="}}],"pricing":"free","outputSchema":{"type":"object","properties":{"job":{"type":"object","description":"Full job details including complete description, qualifications, benefits, and application info"},"found":{"type":"boolean","description":"Whether the job was found"}}},"returns":"The complete job posting with full description, requirements, benefits, and how to apply"},{"name":"estimate_salary","displayName":"Estimate Salary","description":"Look up what a role typically pays in a given location. Helpful for benchmarking compensation, preparing for negotiations, or comparing pay across cities.","inputSchema":{"type":"object","properties":{"job_title":{"type":"string","description":"Job title to estimate salary for (e.g. \"Software Engineer\", \"Product Manager\", \"Nurse\")"},"location":{"type":"string","description":"City, state, or country for the salary estimate (e.g. \"New York, NY\", \"London, UK\", \"Toronto, Canada\")"},"radius":{"type":"number","description":"Search radius in kilometers around the location (default 100)","default":100,"minimum":1}},"required":["job_title","location"]},"annotations":{},"examples":[{"description":"What do software engineers make in San Francisco?","input":{"job_title":"Software Engineer","location":"San Francisco, CA"}},{"description":"How much do nurses earn in London?","input":{"job_title":"Nurse","location":"London, UK"}},{"description":"What is the salary range for product managers in Tokyo?","input":{"job_title":"Product Manager","location":"Tokyo, Japan","radius":50}}],"pricing":"free","outputSchema":{"type":"object","properties":{"estimates":{"type":"array","description":"Salary estimates with min, max, and median values by publisher"},"job_title":{"type":"string","description":"Job title queried"},"location":{"type":"string","description":"Location queried"}}},"returns":"Salary range with low, median, and high pay for the role in that area"},{"name":"company_salary","displayName":"Company Job Salary","description":"Check what a specific company pays for a given role. Use this when researching an employer before applying or when preparing a compensation negotiation.","inputSchema":{"type":"object","properties":{"company":{"type":"string","description":"Company name to look up salaries for (e.g. \"Google\", \"Amazon\", \"Deloitte\", \"NHS\")"},"job_title":{"type":"string","description":"Optional job title to filter salary data (e.g. \"Software Engineer\", \"Product Manager\")"},"location":{"type":"string","description":"Optional location to scope results (e.g. \"San Francisco, CA\", \"London, UK\")"},"radius":{"type":"number","description":"Search radius in kilometers around the location (default 100)","default":100,"minimum":1}},"required":["company"]},"annotations":{},"examples":[{"description":"How much does Google pay software engineers?","input":{"company":"Google","job_title":"Software Engineer"}},{"description":"What are salaries like at Amazon in Seattle?","input":{"company":"Amazon","location":"Seattle, WA"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"salaries":{"type":"array","description":"Salary data entries for the company with min, max, and median values"},"company":{"type":"string","description":"Company name queried"},"job_title":{"type":"string","description":"Job title filter if provided"}}},"returns":"What the company pays for the role, with low, median, and high salary data"}],"workflow":["search_jobs","get_job_details","estimate_salary","company_salary"],"icon":"/icons/job-search.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with job search, job details, and salary estimation"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.03","date":"2026-04-22","changes":["All skills are now free — no credits required","Fixed job cards, salary tables, and job detail fields not rendering results","Auto-retries with broader query when scheduling terms (PRN, per diem) cause empty results","Shows a helpful suggestion when no jobs are found","Added Adzuna as a parallel job source for broader coverage","Fixed country and salary currency for international Adzuna results (UK shows GBP, Australia shows AUD, Canada shows CAD, etc.)"]}],"premadePrompt":"Find [job title] jobs in [city or country] posted in the last [week / month]. I am looking for [full-time / remote] positions and want to know the typical salary range too.","requirements":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"},{"name":"adzuna_app_id","type":"secret","displayName":"Adzuna App ID","description":"Adzuna App ID — adds a second job index for broader coverage (free at developer.adzuna.com)","required":false,"acquireUrl":"https://developer.adzuna.com/signup","envFallback":"ADZUNA_APP_ID"},{"name":"adzuna_app_key","type":"secret","displayName":"Adzuna App Key","description":"Adzuna App Key — pair with Adzuna App ID for expanded job coverage","required":false,"acquireUrl":"https://developer.adzuna.com/signup","envFallback":"ADZUNA_APP_KEY"}],"credentials":[{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"},{"name":"adzuna_app_id","type":"secret","displayName":"Adzuna App ID","description":"Adzuna App ID — adds a second job index for broader coverage (free at developer.adzuna.com)","required":false,"acquireUrl":"https://developer.adzuna.com/signup","envFallback":"ADZUNA_APP_ID"},{"name":"adzuna_app_key","type":"secret","displayName":"Adzuna App Key","description":"Adzuna App Key — pair with Adzuna App ID for expanded job coverage","required":false,"acquireUrl":"https://developer.adzuna.com/signup","envFallback":"ADZUNA_APP_KEY"}]},{"name":"link-preview","displayName":"Link Preview","subtitle":"Metadata from any URL, instantly","about":"**Link Preview** pulls structured metadata from any URL in seconds — title, description, Open Graph image, author, publisher, publication date, language, and site logo. It's the fastest way to understand what a URL contains without loading the full page or running a heavyweight scrape.\n\nWhen you're processing lists of URLs, building link cards, validating social previews, or enriching bookmarks, you don't need the full page content — you just need the metadata. This tool gives you exactly that, clean and structured, ready to use in summaries, link cards, or further processing.\n\n### What you can do\n- **preview_url** — extract title, description, image, author, publisher, date, language, and logo from any URL\n\n### Who it's for\nDevelopers building link card components or bookmark enrichment pipelines. Agents that process URL lists and need quick summaries before deciding which ones to follow up on. Content teams validating that pages have proper Open Graph metadata before sharing.\n\n### How to use it\n1. Pass any full URL (including the https://) to **preview_url**\n2. The image_url field returns the Open Graph or Twitter Card image — useful for link cards\n3. Use published_date and author when summarizing article links\n4. If you need the full page body text or headings, use a web scraping tool instead — this is for metadata only\n\n### Getting started\nJust call **preview_url** with the URL. Works on articles, product pages, GitHub repos, and most public web pages with standard Open Graph tags.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"preview_url","displayName":"Preview URL","description":"Extract metadata from a single URL. Returns title, description, image, author, publisher, language, and logo.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The full URL to extract metadata from (e.g. \"https://example.com/article\")"}},"required":["url"]},"annotations":{},"examples":[{"description":"Extract metadata from a blog post","input":{"url":"https://toolrouter.com"}},{"description":"Preview a GitHub repository page","input":{"url":"https://github.com/vercel/next.js"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Page title"},"description":{"type":"string","description":"Page meta description or summary"},"url":{"type":"string","description":"Canonical URL of the page"},"author":{"type":"string","description":"Content author name, if available"},"publisher":{"type":"string","description":"Publisher or site name"},"language":{"type":"string","description":"Language code (e.g. \"en\")"},"published_date":{"type":"string","description":"ISO date string of publication, if available"},"image_url":{"type":"string","description":"URL of the main preview image (Open Graph / Twitter Card)"},"image_width":{"type":"number","description":"Width of the preview image in pixels"},"image_height":{"type":"number","description":"Height of the preview image in pixels"},"logo_url":{"type":"string","description":"URL of the site logo or favicon"}}},"returns":"Page metadata including title, description, author, publisher, language, preview image URL, and site logo URL"}],"icon":"/icons/link-preview.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with preview_url skill"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Get me a preview of this URL — title, description, image, and author: [URL]."},{"name":"email-validator","displayName":"Email Validator","subtitle":"Check deliverability & catch fakes","about":"**Email Validator** checks whether an email address is real and deliverable — or a disposable, fake, or role-based address that will never convert. It returns a confidence score so you can make data-driven decisions about which addresses to keep.\n\nEach check verifies format, looks up DNS and MX records to confirm the domain can receive mail, detects disposable and temporary providers, flags role-based addresses like info@ and support@, and surfaces any blacklist signals. Bulk mode handles up to 20 addresses in a single call with summary counts so you can clean a list quickly.\n\n### What you can do\n- **validate_email** — validate a single address with format check, DNS/MX verification, disposable detection, confidence score, and risk signals\n- **bulk_validate** — validate up to 20 addresses at once with a summary of invalid and disposable counts\n\n### Who it's for\nMarketers cleaning email lists, developers validating signup forms, sales teams qualifying CRM data, and anyone who needs to stop bounces before they hurt deliverability.\n\n### How to use it\n1. For a single address, call **validate_email** — a confidence score below 50 means likely undeliverable.\n2. For list cleaning, call **bulk_validate** with an array of up to 20 addresses.\n3. Filter out any results where disposable is true or confidence is below 50 to keep only high-quality addresses.\n\n### Getting started\nCall **validate_email** with any email address. No setup or API key required.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"validate_email","displayName":"Validate Email","description":"Validate a single email address. Returns format validity, disposable/temporary provider detection, DNS and MX record verification, confidence score, role-based address detection, and risk signals.","inputSchema":{"type":"object","properties":{"email":{"type":"string","description":"Email address to validate (e.g. user@example.com)"}},"required":["email"]},"annotations":{},"examples":[{"description":"Validate a standard email","input":{"email":"user@example.com"}},{"description":"Check a suspicious disposable email","input":{"email":"test@guerrillamail.com"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"email":{"type":"string","description":"The email address that was validated"},"valid_format":{"type":"boolean","description":"Whether the email has a valid format"},"domain":{"type":"string","description":"Domain part of the email address"},"disposable":{"type":"boolean","description":"Whether the email uses a disposable/temporary provider"},"dns":{"type":"boolean","description":"Whether the domain has valid DNS records"},"confidence":{"type":"number","description":"Confidence score from 0-100 indicating deliverability likelihood"},"signals":{"type":"array","items":{"type":"string"},"description":"Risk signals detected (e.g. blacklist_exact, keyword_match, mx_blacklist_exact)"},"role":{"type":"boolean","description":"Whether the address is a role-based address (e.g. info@, admin@, support@)"},"free":{"type":"boolean","description":"Whether the email uses a free provider (e.g. Gmail, Yahoo)"}}},"returns":"Validation result including format check, disposable detection, DNS/MX verification, confidence score, role-based detection, and risk signals"},{"name":"bulk_validate","displayName":"Bulk Validate Emails","description":"Validate multiple email addresses at once (up to 20). Returns validation results for each address including format validity, disposable detection, DNS verification, confidence scores, and risk signals.","inputSchema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string"},"description":"List of email addresses to validate (max 20)","maxItems":20}},"required":["emails"]},"annotations":{},"examples":[{"description":"Validate a batch of emails","input":{"emails":["user@example.com","test@guerrillamail.com"]}},{"description":"Clean a mailing list","input":{"emails":["alice@company.com","bob@gmail.com","info@tempmail.com"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Validation result for each email address","items":{"type":"object","properties":{"email":{"type":"string","description":"The email address that was validated"},"format":{"type":"boolean","description":"Whether the email has a valid format"},"domain":{"type":"string","description":"Domain part of the email address"},"disposable":{"type":"boolean","description":"Whether the email uses a disposable provider"},"dns":{"type":"boolean","description":"Whether the domain has valid DNS records"},"confidence":{"type":"number","description":"Confidence score 0-100"},"signals":{"type":"array","items":{"type":"string"},"description":"Risk signals detected"},"role":{"type":"boolean","description":"Whether the address is role-based"},"free":{"type":"boolean","description":"Whether the email uses a free provider"},"error":{"type":"string","description":"Error message if validation failed for this email"}}}},"count":{"type":"number","description":"Total number of results returned"},"disposable_count":{"type":"number","description":"Number of disposable emails detected"},"invalid_count":{"type":"number","description":"Number of emails with invalid format or failed DNS"}}},"returns":"Array of validation results for each email with summary counts for disposable and invalid addresses"}],"icon":"/icons/email-validator.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with validate_email and bulk_validate skills"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Check whether [email address] is a real, deliverable email or a disposable/fake one. Flag any risk signals."},{"name":"name-enrichment","displayName":"Name Enrichment","subtitle":"Demographic signals from any name","about":"**Name Enrichment** estimates demographic signals from a first name — age range, gender with confidence score, and top nationalities by probability. It's a fast, lightweight way to add demographic context to a contact list without any personally identifiable data.\n\nWhen you have a list of first names and need to understand the audience — for personalization, segmentation, or outreach — this tool gives you probabilistic demographic signals in bulk. It uses large reference datasets, so the estimates come with sample sizes and confidence scores rather than black-box outputs.\n\n### What you can do\n- **enrich_name** — get estimated age, gender with probability, and nationality breakdown for a single first name\n- **bulk_enrich** — enrich up to 10 names at once using a native batch call for speed\n\n### Who it's for\nSales and marketing teams who want to personalize outreach without collecting sensitive data. Audience segmentation analysts who need demographic signals from name data alone. Researchers studying name distribution patterns across nationalities or age groups.\n\n### How to use it\n1. Use **enrich_name** for a single name — pass just the first name, case-insensitive\n2. For multiple names, use **bulk_enrich** with an array of up to 10 first names — it's faster than calling enrich_name in a loop\n3. Check the probability field on gender and nationality results — low values mean the name is ambiguous or culturally diverse\n4. The nationality result returns all predicted country codes with probabilities, not just the top one\n\n### Getting started\nPass first names only — not full names. The tool works on any first name from any culture. For large datasets, batch in groups of 10 using **bulk_enrich** for the most efficient processing.","version":"0.03","categories":["data","analytics"],"currency":"USD","skills":[{"name":"enrich_name","displayName":"Enrich Name","description":"Pass a single first name and get back estimated age, gender (with probability), and top nationalities (with probabilities). All three lookups run concurrently for speed.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"A first name to enrich (e.g. \"sarah\", \"michael\", \"tanaka\")"}},"required":["name"]},"annotations":{},"examples":[{"description":"Enrich the name Sarah","input":{"name":"sarah"}},{"description":"Get demographics for a Japanese name","input":{"name":"tanaka"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The name that was enriched"},"age":{"type":"object","description":"Estimated age data","properties":{"estimate":{"type":"number","description":"Estimated age"},"sample_size":{"type":"number","description":"Number of data points used for the estimate"}}},"gender":{"type":"object","description":"Estimated gender data","properties":{"estimate":{"type":"string","description":"Estimated gender (male or female)"},"probability":{"type":"number","description":"Confidence probability (0-1)"},"sample_size":{"type":"number","description":"Number of data points used"}}},"nationality":{"type":"object","description":"Estimated nationality data","properties":{"top":{"type":"object","description":"Most likely country","properties":{"country_code":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"probability":{"type":"number","description":"Probability (0-1)"}}},"all":{"type":"array","description":"All predicted countries with probabilities","items":{"type":"object","properties":{"country_code":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"probability":{"type":"number","description":"Probability (0-1)"}}}},"sample_size":{"type":"number","description":"Number of data points used"}}}}},"returns":"Estimated age, gender with confidence, and nationality probabilities for the given name"},{"name":"bulk_enrich","displayName":"Bulk Enrich Names","description":"Pass an array of first names (up to 10) and get back demographic estimates for each one. Uses native batch API — only 3 HTTP calls regardless of how many names. Returns results plus summary counts.","inputSchema":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"},"description":"List of first names to enrich (max 10)","maxItems":10}},"required":["names"]},"annotations":{},"examples":[{"description":"Enrich multiple names at once","input":{"names":["sarah","michael","tanaka"]}},{"description":"Enrich a pair of names for comparison","input":{"names":["emma","carlos"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Enrichment result for each name"},"count":{"type":"number","description":"Number of successfully enriched names"},"errors":{"type":"number","description":"Number of names that failed to enrich"}}},"returns":"Array of enriched name objects with age, gender, and nationality estimates, plus summary counts"}],"workflow":["enrich_name","bulk_enrich"],"icon":"/icons/name-enrichment.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release"]},{"version":"0.02","date":"2026-03-21","changes":["Refactored bulk_enrich to use native batch API — 3 HTTP calls instead of 3×N"]},{"version":"0.03","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What can you tell me about the name [first name] — estimated age range, gender, and likely nationality?"},{"name":"polymarket","displayName":"Polymarket","subtitle":"Prediction market prices & history","about":"**Polymarket** gives you read-only access to the world's largest prediction market. Browse thousands of active markets on elections, macroeconomic events, sports, crypto, and geopolitics. Fetch real-time prices, order books, spreads, and historical probability charts for any outcome token — all without needing a trading account.\n\nPrediction markets express collective beliefs as probabilities priced between 0 and 1. A price of 0.65 on a \"Yes\" token means the market currently gives that outcome a 65% chance. This makes Polymarket data useful not just for traders, but for researchers, journalists, and analysts who want to understand how the crowd is pricing specific future events compared to polls, forecasts, or models.\n\n### What you can do\n- Browse active markets with condition IDs, token IDs, and current prices\n- Get real-time bid and ask prices, midpoint prices, and last traded prices\n- View full order book depth for any outcome token\n- Fetch historical price charts at multiple intervals (1m, 1h, 1d, 1w, 1mo, 1y)\n- Calculate estimated fill price for a specific order size\n- Check bid-ask spreads, tick sizes, and fee rates\n- Batch multiple token queries in a single request\n\n### Who it's for\nTraders monitoring positions and market depth, researchers studying crowd-based probability forecasting, journalists tracking event odds, data analysts building prediction market datasets, and developers integrating Polymarket data into applications.\n\n### How to use it\n1. Use **list_simplified_markets** for a quick scan of active markets with prices\n2. Use **get_market** with a condition ID for full market details and token IDs\n3. Use **get_order_book** with a token ID to inspect liquidity and depth\n4. Use **get_prices_history** to chart how probability has changed over time\n5. Use **calculate_market_price** to estimate slippage for a specific order size\n\n### Getting started\nNo setup required — all skills use the public read-only market data endpoint.","version":"0.02","categories":["finance","data","analytics"],"currency":"USD","skills":[{"name":"health_check","displayName":"Health Check","description":"Verify that the public Polymarket CLOB API is reachable before you start making market data calls.","inputSchema":{"type":"object","properties":{}},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Check whether the public Polymarket CLOB API is up","input":{}},{"description":"Confirm the public CLOB health endpoint before starting a market data workflow","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Health check response string from the Polymarket CLOB service"}}},"returns":"A simple health status string confirming whether the public CLOB service responded"},{"name":"get_server_time","displayName":"Get Server Time","description":"Fetch the current Polymarket CLOB server timestamp so you can align polling or compare event freshness.","inputSchema":{"type":"object","properties":{}},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the current Polymarket server time","input":{}},{"description":"Fetch server time before comparing market updates from other systems","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"server_time":{"type":"number","description":"Current Polymarket CLOB server time as a Unix timestamp in seconds"}}},"returns":"The current CLOB server time as a Unix timestamp in seconds"},{"name":"list_markets","displayName":"List Markets","description":"List full CLOB market objects page by page so you can browse condition IDs, questions, tokens, and market metadata.","inputSchema":{"type":"object","properties":{"next_cursor":{"type":"string","description":"Pagination cursor from the previous response. Leave empty to start from the first page.","default":"MA=="},"max_results":{"type":"number","description":"Maximum number of items to return from the fetched page before trimming locally","default":50}}},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"List the first page of Polymarket CLOB markets","input":{}},{"description":"List a smaller trimmed slice of the first markets page","input":{"max_results":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"markets":{"type":"array","description":"Full Polymarket market objects from the requested page"},"next_cursor":{"type":"string","description":"Cursor to request the next page of results"},"limit":{"type":"number","description":"Page size returned by Polymarket"},"count":{"type":"number","description":"Number of market records available in the fetched page from Polymarket"},"returned_count":{"type":"number","description":"Number of market records returned after local trimming"}}},"returns":"A paginated page of full CLOB market objects plus the cursor for the next page"},{"name":"get_market","displayName":"Get Market","description":"Fetch one CLOB market by condition ID when you need the question, tokens, fees, timing, and reward config.","inputSchema":{"type":"object","properties":{"condition_id":{"type":"string","description":"Polymarket condition ID for the market you want to inspect"}},"required":["condition_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get a market by condition ID","input":{"condition_id":"0x5a8c5193008f76941e75598a31ef2915125ef0a8a7cfcb7369e8c451511c4452"}},{"description":"Load a market after discovering its condition ID from a list call","input":{"condition_id":"0x5a8c5193008f76941e75598a31ef2915125ef0a8a7cfcb7369e8c451511c4452"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"condition_id":{"type":"string","description":"Condition ID that was requested"},"market":{"type":"object","description":"Full market object returned by the Polymarket CLOB API"}}},"returns":"One full market object for the requested condition ID"},{"name":"list_simplified_markets","displayName":"List Simplified Markets","description":"List the lighter simplified market feed when you want condition IDs, token IDs, prices, and reward flags quickly.","inputSchema":{"type":"object","properties":{"next_cursor":{"type":"string","description":"Pagination cursor from the previous response. Leave empty to start from the first page.","default":"MA=="},"max_results":{"type":"number","description":"Maximum number of items to return from the fetched page before trimming locally","default":50}}},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"List the first page of simplified Polymarket markets","input":{}},{"description":"List a trimmed subset of simplified markets for quick scanning","input":{"max_results":25}}],"pricing":"free","outputSchema":{"type":"object","properties":{"markets":{"type":"array","description":"Simplified Polymarket market objects with token IDs and current prices"},"next_cursor":{"type":"string","description":"Cursor to request the next page of results"},"limit":{"type":"number","description":"Page size returned by Polymarket"},"count":{"type":"number","description":"Number of simplified market records available in the fetched page from Polymarket"},"returned_count":{"type":"number","description":"Number of simplified market records returned after local trimming"}}},"returns":"A paginated page of simplified market rows with token IDs and current prices"},{"name":"list_sampling_markets","displayName":"List Sampling Markets","description":"List full markets that are eligible for sampling or liquidity rewards so you can inspect incentive-backed opportunities.","inputSchema":{"type":"object","properties":{"next_cursor":{"type":"string","description":"Pagination cursor from the previous response. Leave empty to start from the first page.","default":"MA=="},"max_results":{"type":"number","description":"Maximum number of items to return from the fetched page before trimming locally","default":50}}},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"List reward-eligible sampling markets","input":{}},{"description":"List a trimmed slice of reward-eligible full markets","input":{"max_results":25}}],"pricing":"free","outputSchema":{"type":"object","properties":{"markets":{"type":"array","description":"Reward-eligible full market objects returned by Polymarket"},"next_cursor":{"type":"string","description":"Cursor to request the next page of results"},"limit":{"type":"number","description":"Page size returned by Polymarket"},"count":{"type":"number","description":"Number of market records available in the fetched page from Polymarket"},"returned_count":{"type":"number","description":"Number of market records returned after local trimming"}}},"returns":"A paginated page of reward-eligible full market objects"},{"name":"list_sampling_simplified_markets","displayName":"List Sampling Simplified Markets","description":"List the lighter reward-eligible markets feed when you need token IDs and current prices for sampling markets fast.","inputSchema":{"type":"object","properties":{"next_cursor":{"type":"string","description":"Pagination cursor from the previous response. Leave empty to start from the first page.","default":"MA=="},"max_results":{"type":"number","description":"Maximum number of items to return from the fetched page before trimming locally","default":50}}},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"List reward-eligible simplified markets","input":{}},{"description":"List a trimmed slice of reward-eligible simplified markets","input":{"max_results":25}}],"pricing":"free","outputSchema":{"type":"object","properties":{"markets":{"type":"array","description":"Reward-eligible simplified market objects with token IDs and prices"},"next_cursor":{"type":"string","description":"Cursor to request the next page of results"},"limit":{"type":"number","description":"Page size returned by Polymarket"},"count":{"type":"number","description":"Number of simplified market records available in the fetched page from Polymarket"},"returned_count":{"type":"number","description":"Number of simplified market records returned after local trimming"}}},"returns":"A paginated page of reward-eligible simplified market rows"},{"name":"get_order_book","displayName":"Get Order Book","description":"Fetch the full bid and ask ladder for one Polymarket token so you can inspect liquidity and visible depth.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the full order book for an active Polymarket token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Inspect the opposite outcome token order book in the same market","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID that was requested"},"order_book":{"type":"object","description":"Full order book snapshot including bids, asks, tick size, and hash"}}},"returns":"A full order book snapshot with bids, asks, tick size, minimum size, and the book hash"},{"name":"get_order_books","displayName":"Get Order Books","description":"Fetch multiple Polymarket order books in one request so you can compare liquidity across tokens efficiently.","inputSchema":{"type":"object","properties":{"requests":{"type":"array","description":"Batch of token requests. Each item needs a token_id and can optionally include side.","items":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}}}}},"required":["requests"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Fetch order books for both sides of a market","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}]}},{"description":"Fetch one order book through the batch endpoint","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"order_books":{"type":"array","description":"Array of order book snapshots for the requested token IDs"},"count":{"type":"number","description":"Number of order books returned"}}},"returns":"An array of order book snapshots for the requested token IDs"},{"name":"get_market_price","displayName":"Get Market Price","description":"Fetch the current best bid or ask for one token when you need the executable top-of-book price right now.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}},"required":["token_id","side"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the best ask price for buying a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","side":"BUY"}},{"description":"Get the best bid price for selling the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400","side":"SELL"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID that was priced"},"side":{"type":"string","description":"Requested order side"},"price":{"type":"string","description":"Current best price string for the requested side"}}},"returns":"The best currently executable price for the requested token and side"},{"name":"get_market_prices","displayName":"Get Market Prices","description":"Fetch best prices for multiple tokens in one call when you need a quick snapshot across a basket of outcomes.","inputSchema":{"type":"object","properties":{"requests":{"type":"array","description":"Batch of token requests. Each item needs a token_id and can optionally include side.","items":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}}}}},"required":["requests"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get best prices for both sides of a market","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","side":"BUY"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400","side":"SELL"}]}},{"description":"Get best buy-side prices for multiple tokens at once","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","side":"BUY"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400","side":"BUY"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"prices":{"type":"object","description":"Map of token IDs to their available best bid or ask prices"},"count":{"type":"number","description":"Number of token IDs represented in the response"}}},"returns":"A token-indexed map of best prices for the requested token IDs"},{"name":"get_midpoint_price","displayName":"Get Midpoint Price","description":"Fetch the midpoint between the best bid and ask for a token so you can inspect the displayed implied probability.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the midpoint price for a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Get the midpoint for the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID that was priced"},"midpoint":{"type":"string","description":"Current midpoint price string for the token"}}},"returns":"The midpoint price for the requested token"},{"name":"get_midpoint_prices","displayName":"Get Midpoint Prices","description":"Fetch midpoint prices for multiple tokens in one call when you want a compact implied probability snapshot.","inputSchema":{"type":"object","properties":{"requests":{"type":"array","description":"Batch of token requests. Each item needs a token_id and can optionally include side.","items":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}}}}},"required":["requests"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get midpoint prices for both outcomes in a market","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}]}},{"description":"Get midpoint prices for a smaller token batch","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"midpoints":{"type":"object","description":"Map of token IDs to midpoint price strings"},"count":{"type":"number","description":"Number of token IDs represented in the response"}}},"returns":"A token-indexed map of midpoint prices for the requested tokens"},{"name":"get_spread","displayName":"Get Spread","description":"Fetch the current bid-ask spread for one token so you can judge liquidity and slippage risk quickly.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the spread for a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Get the spread for the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID that was inspected"},"spread":{"type":"string","description":"Current bid-ask spread for the token"}}},"returns":"The current bid-ask spread for the requested token"},{"name":"get_spreads","displayName":"Get Spreads","description":"Fetch spreads for multiple tokens in one request when you want a quick liquidity comparison across outcomes.","inputSchema":{"type":"object","properties":{"requests":{"type":"array","description":"Batch of token requests. Each item needs a token_id and can optionally include side.","items":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}}}}},"required":["requests"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get spreads for multiple tokens","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}]}},{"description":"Get spreads for a single token through the batch endpoint","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"spreads":{"type":"object","description":"Map of token IDs to their current bid-ask spread strings"},"count":{"type":"number","description":"Number of token IDs represented in the response"}}},"returns":"A token-indexed map of current spreads for the requested tokens"},{"name":"get_last_trade_price","displayName":"Get Last Trade Price","description":"Fetch the most recent traded price and side for one token when you need the last executed market print.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the latest executed trade price for a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Get the latest executed trade for the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID that was inspected"},"price":{"type":"string","description":"Price of the most recent trade for the token"},"side":{"type":"string","description":"Side of the most recent trade"},"last_trade":{"type":"object","description":"Raw last-trade response object from Polymarket"}}},"returns":"The latest traded price and side for the requested token"},{"name":"get_last_trade_prices","displayName":"Get Last Trade Prices","description":"Fetch the latest traded price for multiple tokens in one request so you can compare the last executed prints.","inputSchema":{"type":"object","properties":{"requests":{"type":"array","description":"Batch of token requests. Each item needs a token_id and can optionally include side.","items":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}}}}},"required":["requests"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the latest trade prices for both outcomes in a market","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}]}},{"description":"Get the latest trade snapshot for a single token through the batch endpoint","input":{"requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"trades":{"type":"array","description":"Array of latest trade snapshots with token IDs, price, and side"},"count":{"type":"number","description":"Number of latest trade snapshots returned"}}},"returns":"An array of latest-trade snapshots for the requested token IDs"},{"name":"get_prices_history","displayName":"Get Prices History","description":"Fetch historical price points for one token so you can chart implied probability changes over time.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"start_ts":{"type":"number","description":"Optional Unix timestamp in seconds for the start of the requested history window"},"end_ts":{"type":"number","description":"Optional Unix timestamp in seconds for the end of the requested history window"},"fidelity":{"type":"number","description":"Optional numeric fidelity value for the history response, such as minutes between points"},"interval":{"type":"string","enum":["max","1w","1d","6h","1h"],"description":"History interval bucket to request from Polymarket","default":"1d"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":10,"timeoutSeconds":40,"mode":"io"}},"examples":[{"description":"Get one-day interval history for a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","interval":"1d"}},{"description":"Get one-hour interval history within an explicit time window","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","interval":"1h","start_ts":1774048000,"end_ts":1774134400}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID whose history was requested"},"interval":{"type":"string","description":"Interval bucket used for the history request"},"history":{"type":"array","description":"Array of time-price points, each with t and p values"},"count":{"type":"number","description":"Number of history points returned"}}},"returns":"Historical price points for the requested token and interval"},{"name":"get_tick_size","displayName":"Get Tick Size","description":"Fetch the minimum price increment for a token so you know what price precision the market currently accepts.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the tick size for a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Get the tick size for the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID whose tick size was requested"},"minimum_tick_size":{"type":"number","description":"Current minimum price increment for the token"}}},"returns":"The current minimum tick size for the requested token"},{"name":"get_fee_rate","displayName":"Get Fee Rate","description":"Fetch the base fee rate for a token so you can understand the cost assumptions behind order placement.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Get the fee rate for a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Get the fee rate for the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID whose fee rate was requested"},"base_fee":{"type":"number","description":"Base fee rate in basis points for the token"}}},"returns":"The base fee rate in basis points for the requested token"},{"name":"get_neg_risk","displayName":"Get Negative Risk Flag","description":"Check whether a token belongs to a negative-risk market so you can reason about complementary outcome mechanics.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"}},"required":["token_id"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Check whether a token uses negative risk","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846"}},{"description":"Check the negative-risk flag for the opposite outcome token","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID whose negative-risk setting was requested"},"neg_risk":{"type":"boolean","description":"Whether the market uses negative-risk mechanics"}}},"returns":"A boolean showing whether the requested token is part of a negative-risk market"},{"name":"calculate_market_price","displayName":"Calculate Market Price","description":"Estimate fill price for a given order size by walking the visible order book. Read-only — no order is placed.","inputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."},"amount":{"type":"number","description":"BUY uses dollar amount to spend; SELL uses number of shares to sell"},"order_type":{"type":"string","enum":["GTC","FOK","GTD","FAK"],"description":"Order execution assumption for market price estimation. FOK requires full liquidity; other values allow the worst visible fallback.","default":"FOK"}},"required":["token_id","side","amount"]},"annotations":{"execution":{"estimatedSeconds":8,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Estimate the fill price for buying 500 dollars worth of a token","input":{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","side":"BUY","amount":500,"order_type":"FOK"}},{"description":"Estimate the fill price for selling shares with a looser execution assumption","input":{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400","side":"SELL","amount":100,"order_type":"FAK"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"token_id":{"type":"string","description":"Token ID whose order book was evaluated"},"side":{"type":"string","description":"Requested order side"},"amount":{"type":"number","description":"Requested buy dollars or sell shares used in the estimate"},"order_type":{"type":"string","description":"Execution assumption used for the estimate"},"estimated_price":{"type":"number","description":"Estimated fill price implied by the visible order book"},"order_book_hash":{"type":"string","description":"Hash of the order book snapshot used for the estimate"},"tick_size":{"type":"string","description":"Tick size attached to the order book snapshot used for the estimate"}}},"returns":"An estimated fill price based on visible order book depth for the requested trade size"},{"name":"raw_public_request","displayName":"Raw Public Request","description":"Call an allowlisted unauthenticated public CLOB endpoint directly when you need a path that is not covered by the typed skills.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST"],"description":"HTTP method for the allowlisted public CLOB endpoint","default":"GET"},"path":{"type":"string","description":"Allowlisted public CLOB path such as /orderbook-history, /ohlc, /markets, /markets/<condition_id>, or /prices"},"query":{"type":"object","description":"Optional query-string parameters for GET requests. Scalar arrays are sent as repeated query keys."},"requests":{"type":"array","description":"Required for POST batch endpoints. Each item needs a token_id and can optionally include side.","items":{"type":"object","properties":{"token_id":{"type":"string","description":"Polymarket token ID for the outcome token you want to inspect"},"side":{"type":"string","enum":["BUY","SELL"],"description":"Order side to price or evaluate. BUY means taking asks; SELL means hitting bids."}}}}},"required":["path"]},"annotations":{"execution":{"estimatedSeconds":12,"timeoutSeconds":45,"mode":"io"}},"examples":[{"description":"Fetch a raw market payload directly from the public endpoint","input":{"method":"GET","path":"/markets/0x5a8c5193008f76941e75598a31ef2915125ef0a8a7cfcb7369e8c451511c4452"}},{"description":"Fetch raw batch prices for multiple tokens via the POST endpoint","input":{"method":"POST","path":"/prices","requests":[{"token_id":"67565972075898091709163371829761231762318232475740950317083391526954889294846","side":"BUY"},{"token_id":"103839456992405565726868179020008626822011827310693291614954291931191338865400","side":"SELL"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"method":{"type":"string","description":"HTTP method used for the request"},"path":{"type":"string","description":"Public CLOB path that was requested"},"query":{"type":"object","description":"Query parameters sent with the request, if any"},"data":{"type":"object","description":"Raw response payload returned by the public CLOB endpoint"}}},"returns":"The raw payload from an allowlisted unauthenticated public CLOB endpoint"}],"workflow":["list_markets","get_market","get_order_book","get_market_price","get_prices_history"],"homepage":"https://docs.polymarket.com/api-reference/introduction","icon":"/icons/polymarket.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with unauthenticated public CLOB market, price, orderbook, and raw request skills"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"What are the current odds on [event or topic] in prediction markets? Show me the price history and order book for [market name]."},{"name":"pdf","displayName":"PDF","subtitle":"Read, analyze & merge PDFs","about":"**PDF** lets you read, analyse, and merge PDF documents from any public URL — no uploading to third-party services, no file size wrestling. Summarise research papers, extract financial figures from annual reports, review contract clauses, or combine multiple documents into one — all from a single tool.\n\nThe analyse skill uses AI to answer specific questions about a document's content. Instead of reading a 200-page report yourself, you can ask it to pull all revenue figures into a table, flag unusual contract clauses, or summarise the methodology section. Page-range filtering lets you target exactly the section you need, keeping costs low and responses sharp.\n\n### What you can do\n- Extract raw text from any PDF for searching, quoting, or downstream processing\n- Ask AI to summarise, analyse, or extract specific information from a document\n- Get PDF metadata — page count, author, title, file size, creation date — without reading the content\n- Merge 2 to 20 PDFs into one combined document\n- Filter any skill to specific pages with ranges like \"1-10\" or \"3,7,12-15\"\n\n### Who it's for\nResearchers, analysts, lawyers, finance professionals, and anyone who regularly works with PDF documents. Useful for digesting academic papers, reviewing contracts, extracting data from reports, and building document processing workflows.\n\n### How to use it\n1. Use **get_info** to check page count and metadata before committing to a full read\n2. Use **extract_text** to pull raw content for searching or passing to another tool\n3. Use **analyze** with a specific prompt — \"extract all revenue figures as a table\" gets much better results than \"summarise\"\n4. Use **merge** to combine multiple PDFs into one downloadable file\n5. Add the pages parameter to any skill to target a specific section of a large document\n\n### Getting started\nNo setup required — pass any public PDF URL to get started.","version":"0.02","categories":["productivity","data"],"currency":"USD","skills":[{"name":"extract_text","displayName":"Extract Text","description":"Pull the text out of a PDF so you can search, quote, or process the content directly.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"pages":{"type":"string","description":"Page range to extract (e.g. \"1-5\", \"1,3,7-9\"). Omit for all pages."}},"required":["url"]},"annotations":{},"examples":[{"description":"Get the text from a research paper","input":{"url":"https://example.com/paper.pdf"}},{"description":"Get text from just the first 5 pages of a report","input":{"url":"https://example.com/report.pdf","pages":"1-5"}},{"description":"Pull text from pages 1, 3, and 7 through 9","input":{"url":"https://example.com/manual.pdf","pages":"1,3,7-9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Extracted text content"},"total_pages":{"type":"number","description":"Total pages in the PDF"},"pages_extracted":{"type":"array","description":"Pages that were extracted (if filtered)"},"file_size_bytes":{"type":"number","description":"File size in bytes"},"character_count":{"type":"number","description":"Total characters extracted"}}},"returns":"The extracted text along with page count and file size"},{"name":"analyze","displayName":"Analyze PDF","description":"Ask a question about a PDF and get an AI-written answer — summaries, data extraction, contract review, or any analysis you describe in your prompt.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Analysis instruction — what you want to know about the document. Defaults to a thorough summary."},"pages":{"type":"string","description":"Page range to analyze (e.g. \"1-5\", \"3,7-10\"). Omit for all pages."},"model":{"type":"string","description":"AI model override in provider/model format (e.g. \"anthropic/claude-3.5-sonnet\"). Uses a fast, capable default."}},"required":["url"]},"annotations":{},"examples":[{"description":"Give me a summary of this research paper","input":{"url":"https://example.com/paper.pdf","prompt":"Summarize the key findings and methodology"}},{"description":"Pull the revenue and profit numbers from this annual report","input":{"url":"https://example.com/annual-report.pdf","prompt":"Extract all financial figures, revenue, and profit numbers into a table"}},{"description":"Flag any risky clauses in the first 10 pages of this contract","input":{"url":"https://example.com/contract.pdf","prompt":"Identify any risky clauses or unusual terms","pages":"1-10"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"analysis":{"type":"string","description":"AI-generated analysis in markdown"},"total_pages":{"type":"number","description":"Total pages in the PDF"},"pages_analyzed":{"type":"array","description":"Pages that were analyzed (array of numbers, or \"all\" if not filtered)"},"text_length":{"type":"number","description":"Characters of text sent to the AI"},"truncated":{"type":"boolean","description":"Whether text was truncated due to length"},"tokens":{"type":"object","description":"Input and output token counts"}}},"returns":"AI-written analysis in markdown with token usage details"},{"name":"get_info","displayName":"Get PDF Info","description":"Check a PDF for page count, title, author, file size, and creation date without reading the full content.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["url"]},"annotations":{},"examples":[{"description":"How long is this PDF and who wrote it?","input":{"url":"https://example.com/document.pdf"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"total_pages":{"type":"number","description":"Total number of pages"},"file_size_bytes":{"type":"number","description":"File size in bytes"},"file_size_mb":{"type":"number","description":"File size in megabytes"},"title":{"type":"string","description":"Document title"},"author":{"type":"string","description":"Document author"},"subject":{"type":"string","description":"Document subject"},"creator":{"type":"string","description":"Creator application"},"producer":{"type":"string","description":"PDF producer"},"creation_date":{"type":"string","description":"When the PDF was created"},"modification_date":{"type":"string","description":"When the PDF was last modified"},"pdf_version":{"type":"string","description":"PDF specification version"},"text_length":{"type":"number","description":"Approximate text length in characters"},"has_text":{"type":"boolean","description":"Whether the PDF contains extractable text"}}},"returns":"Page count, author, title, file size, and other document properties"},{"name":"merge","displayName":"Merge PDFs","description":"Join multiple PDFs into one downloadable file so you can bundle reports, combine chapters, or consolidate documents.","inputSchema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["urls"]},"annotations":{},"examples":[{"description":"Combine the Q1 and Q2 reports into a single PDF","input":{"urls":["https://example.com/report-q1.pdf","https://example.com/report-q2.pdf"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"merged_pdf_path":{"type":"string","description":"Path to the merged PDF file"},"total_pages":{"type":"number","description":"Total pages in the merged document"},"source_count":{"type":"number","description":"Number of source PDFs merged"},"file_size_bytes":{"type":"number","description":"Merged file size in bytes"}}},"returns":"A single merged PDF with total page count and file size"}],"workflow":["get_info","extract_text","analyze","merge"],"icon":"/icons/pdf.webp","changelog":[{"version":"0.01","date":"2026-03-21","changes":["Initial release with extract_text, analyze, get_info, and merge skills"]},{"version":"0.02","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]}],"premadePrompt":"Summarize this PDF for me: [PDF URL]. Pull out the key findings, main arguments, and any important figures or data.","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"}]},{"name":"vehicle-data","displayName":"Vehicle Data","subtitle":"VIN, plates, recalls & specs","about":"**Vehicle Data** is a complete vehicle research tool — VIN decoding, license plate lookups, recall checks, complaints, fuel economy, crash ratings, MOT history, and physical specs across the US, UK, Canada, and Netherlands.\n\nWhether you're buying a used car and want to know its full history, checking if your current vehicle has any open recalls, or building a vehicle data feature into an app, this tool has the depth and coverage to do it. A 17-character VIN unlocks 140+ decoded fields. A UK plate unlocks the full MOT history. A US make, model, and year unlocks recalls, complaints, fuel economy, and crash ratings all at once.\n\n### What you can do\n- **decode_vin** — decode any 17-character VIN into 140+ fields\n- **plate_lookup** — look up Dutch vehicles by license plate\n- **inspection_history** — full UK MOT history with pass/fail, mileage, advisories\n- **check_recalls** — safety recalls for US and Canadian vehicles\n- **check_complaints** — consumer-filed complaints with crash and injury counts\n- **fuel_economy** — EPA city, highway, and combined MPG ratings\n- **safety_ratings** — crash test star ratings (frontal, side, rollover)\n- **vehicle_specs** — physical dimensions and weight\n- **fuel_prices** — current US national average fuel prices\n\n### Who it's for\nCar buyers, automotive researchers, fleet managers, mechanics, and developers building vehicle history, compliance, or fleet management tools.\n\n### How to use it\n1. If you have a VIN, start with **decode_vin** for a full vehicle profile in one call\n2. For UK vehicles, use **inspection_history** with the registration plate to see the full MOT history\n3. For any US or Canadian vehicle by make/model/year, chain **check_recalls**, **check_complaints**, **fuel_economy**, and **safety_ratings** for a complete picture\n4. Use **decode_wmi** to identify any vehicle manufacturer worldwide from just the first 3 VIN characters\n\n### Getting started\nMost skills work immediately with no credentials. Connect your DVSA account to enable UK MOT inspection history lookups.","version":"0.05","categories":["data"],"currency":"USD","skills":[{"name":"decode_vin","displayName":"Decode VIN","description":"Decode a 17-character Vehicle Identification Number to get make, model, year, engine type, body class, transmission, safety features, plant info, and 140+ data fields.","inputSchema":{"type":"object","properties":{"vin":{"type":"string","description":"A 17-character Vehicle Identification Number (VIN). Found on dashboard, door jamb, or registration documents."},"model_year":{"type":"number","description":"Optional model year to improve accuracy for pre-1981 VINs or ambiguous decodes"}},"required":["vin"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Decode a Honda Accord VIN","input":{"vin":"1HGCM82633A004352"}},{"description":"Decode with model year hint","input":{"vin":"1HGCM82633A004352","model_year":2003}}],"pricing":"free","outputSchema":{"type":"object","properties":{"vin":{"type":"string","description":"The decoded VIN"},"year":{"type":"number","description":"Model year"},"make":{"type":"string","description":"Manufacturer name"},"model":{"type":"string","description":"Model name"},"trim":{"type":"string","description":"Trim level"},"body_class":{"type":"string","description":"Body type (sedan, SUV, truck, etc.)"},"engine":{"type":"object","description":"Engine details (type, cylinders, displacement, fuel type, horsepower)"},"transmission":{"type":"object","description":"Transmission type and speeds"},"drivetrain":{"type":"string","description":"Drive type (FWD, RWD, AWD, 4WD)"},"plant":{"type":"object","description":"Manufacturing plant info (city, country)"},"safety":{"type":"object","description":"Safety features (airbags, ABS, ESC, etc.)"},"doors":{"type":"number","description":"Number of doors"},"gvwr":{"type":"string","description":"Gross Vehicle Weight Rating class"},"all_fields":{"type":"object","description":"All 140+ decoded fields as key-value pairs"}}},"returns":"Comprehensive vehicle data including make, model, year, engine, body class, safety features, plant info, and 140+ decoded fields"},{"name":"decode_wmi","displayName":"Decode WMI","description":"Identify any vehicle manufacturer worldwide from the first 3 characters of a VIN (World Manufacturer Identifier). Works for vehicles from any country — not limited to the US market.","inputSchema":{"type":"object","properties":{"wmi":{"type":"string","description":"A 3-character World Manufacturer Identifier, or a full 17-character VIN (first 3 chars will be used)"}},"required":["wmi"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Identify manufacturer from WMI code","input":{"wmi":"1HG"}},{"description":"Identify manufacturer from a full VIN","input":{"wmi":"WVWZZZ3CZWE123456"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"wmi":{"type":"string","description":"The 3-character WMI code"},"manufacturer":{"type":"string","description":"Full manufacturer name"},"make":{"type":"string","description":"Vehicle make/brand"},"common_name":{"type":"string","description":"Common manufacturer name"},"parent_company":{"type":"string","description":"Parent company name"},"vehicle_type":{"type":"string","description":"Vehicle type (car, truck, motorcycle, etc.)"}}},"returns":"Manufacturer name, make, parent company, and vehicle type for any VIN worldwide"},{"name":"plate_lookup","displayName":"Plate Lookup","description":"Look up a vehicle by license plate number. Returns make, model, colour, engine, fuel type, registration details, and more. Currently supports Netherlands (RDW).","inputSchema":{"type":"object","properties":{"plate":{"type":"string","description":"Vehicle license plate number (e.g. \"AB-895-P\" or \"AB895P\" for Netherlands)"},"country":{"type":"string","enum":["nl"],"description":"Country code: \"nl\" for Netherlands"}},"required":["plate","country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up a Dutch vehicle by plate","input":{"plate":"AB895P","country":"nl"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country code"},"plate":{"type":"string","description":"License plate number"},"make":{"type":"string","description":"Vehicle make/brand"},"model":{"type":"string","description":"Vehicle model"},"colour":{"type":"string","description":"Vehicle colour"},"year_of_manufacture":{"type":"number","description":"Year of manufacture"},"engine_capacity_cc":{"type":"number","description":"Engine capacity in cc"},"apk_expiry":{"type":"string","description":"APK inspection expiry date"}}},"returns":"Vehicle registration details including make, model, colour, fuel type, engine specs, and APK inspection status"},{"name":"inspection_history","displayName":"Inspection History","description":"Get full MOT inspection history for a UK vehicle by registration plate. Returns every test date, pass/fail result, mileage, expiry date, advisory notes, failure reasons, and minor defects.","inputSchema":{"type":"object","properties":{"plate":{"type":"string","description":"UK vehicle registration plate (e.g. \"AB12CDE\" or \"AB12 CDE\")"},"country":{"type":"string","enum":["uk"],"description":"Country code: \"uk\" for United Kingdom"}},"required":["plate","country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check MOT history for a UK vehicle","input":{"plate":"AB12CDE","country":"uk"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country code"},"plate":{"type":"string","description":"Registration plate"},"make":{"type":"string","description":"Vehicle make"},"model":{"type":"string","description":"Vehicle model"},"fuel_type":{"type":"string","description":"Fuel type"},"colour":{"type":"string","description":"Vehicle colour"},"first_used_date":{"type":"string","description":"Date first used"},"tests":{"type":"array","description":"MOT test history — date, result (PASSED/FAILED), mileage, expiry, advisories, failures, minors"},"test_count":{"type":"number","description":"Total number of MOT tests"},"source":{"type":"string","description":"Data source (DVSA MOT History API)"}}},"returns":"Full MOT inspection history including test dates, pass/fail results, mileage readings, advisory notes, failure reasons, and minor defects"},{"name":"search_models","displayName":"Search Models","description":"Find available vehicle models for a given make and optional model year. When make is omitted or list_all_makes is true, returns all known vehicle makes. Also returns vehicle types for the make.","inputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Vehicle manufacturer name (e.g. \"Honda\", \"Ford\", \"Tesla\", \"BMW\"). Omit to list all known makes."},"year":{"type":"number","description":"Optional model year to filter results (e.g. 2024)"},"list_all_makes":{"type":"boolean","description":"Set to true to list all known vehicle makes instead of searching models for a specific make"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find all Honda models","input":{"make":"Honda"}},{"description":"Find 2024 Tesla models","input":{"make":"Tesla","year":2024}},{"description":"List all known vehicle makes","input":{"list_all_makes":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Manufacturer name (null when listing all makes)"},"year":{"type":"number","description":"Model year filter (if provided)"},"makes":{"type":"array","description":"All known vehicle makes (when listing all makes)"},"models":{"type":"array","description":"List of model names with IDs (when searching by make)"},"vehicle_types":{"type":"array","description":"Vehicle types for the make (e.g. Passenger Car, Truck, Motorcycle)"},"count":{"type":"number","description":"Number of results found"}}},"returns":"List of vehicle models for the specified make and optional year, or all known vehicle makes when make is omitted"},{"name":"check_recalls","displayName":"Check Recalls","description":"Search safety recalls for a vehicle by make, model, and year. Supports US (NHTSA) and Canada (Transport Canada). Returns recall campaigns, affected components, and remedy information.","inputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"Toyota\", \"Ford\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"Camry\", \"F-150\")"},"year":{"type":"number","description":"Model year (e.g. 2020)"},"country":{"type":"string","enum":["us","ca"],"description":"Country: \"us\" for United States (default), \"ca\" for Canada","default":"us"}},"required":["make","model","year"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check US recalls for a 2020 Honda CR-V","input":{"make":"Honda","model":"CR-V","year":2020}},{"description":"Check Canadian recalls for a 2019 Toyota Camry","input":{"make":"Toyota","model":"Camry","year":2019,"country":"ca"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country code"},"make":{"type":"string","description":"Manufacturer"},"model":{"type":"string","description":"Model"},"year":{"type":"number","description":"Year"},"recalls":{"type":"array","description":"List of recall campaigns with campaign number, component, summary, consequence, and remedy"},"count":{"type":"number","description":"Number of recalls found"},"source":{"type":"string","description":"Data source (NHTSA or Transport Canada)"}}},"returns":"Safety recall campaigns including campaign number, affected component, defect description, consequence, and remedy"},{"name":"check_complaints","displayName":"Check Complaints","description":"Search consumer complaints for a specific vehicle by make, model, and year. Returns reported problems, crash and injury counts, and affected components. Supports optional date filtering. US market only.","inputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"Honda\", \"Ford\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"Civic\", \"Explorer\")"},"year":{"type":"number","description":"Model year (e.g. 2021)"},"start_date":{"type":"string","description":"Filter complaints filed on or after this date (YYYY-MM-DD format)"},"end_date":{"type":"string","description":"Filter complaints filed on or before this date (YYYY-MM-DD format)"}},"required":["make","model","year"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check complaints for a 2021 Ford Explorer","input":{"make":"Ford","model":"Explorer","year":2021}},{"description":"Check complaints filed in 2022","input":{"make":"Ford","model":"Explorer","year":2021,"start_date":"2022-01-01","end_date":"2022-12-31"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Manufacturer"},"model":{"type":"string","description":"Model"},"year":{"type":"number","description":"Year"},"complaints":{"type":"array","description":"Consumer complaints with component, description, crash/fire/injury counts, and date"},"count":{"type":"number","description":"Number of complaints found"},"date_filter":{"type":"object","description":"Applied date filter (if any)"}}},"returns":"Consumer complaints with component affected, problem description, crash and injury counts, and filing date"},{"name":"fuel_economy","displayName":"Fuel Economy","description":"Look up EPA fuel economy ratings for a vehicle by make, model, and year. Returns city, highway, and combined MPG for each available trim and engine configuration. US market only.","inputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"Toyota\", \"Tesla\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"Corolla\", \"Model 3\")"},"year":{"type":"number","description":"Model year (e.g. 2024)"}},"required":["make","model","year"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check fuel economy for a 2024 Toyota Corolla","input":{"make":"Toyota","model":"Corolla","year":2024}},{"description":"Check fuel economy for a 2024 Tesla Model 3","input":{"make":"Tesla","model":"Model 3","year":2024}}],"pricing":"free","outputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Manufacturer"},"model":{"type":"string","description":"Model"},"year":{"type":"number","description":"Year"},"vehicles":{"type":"array","description":"Fuel economy data for each trim/engine variant — city, highway, combined MPG, fuel type, annual fuel cost"},"count":{"type":"number","description":"Number of variants found"}}},"returns":"EPA fuel economy ratings including city, highway, and combined MPG, fuel type, annual fuel cost, and CO2 emissions for each trim"},{"name":"safety_ratings","displayName":"Safety Ratings","description":"Get NCAP crash test star ratings for a vehicle by make, model, and year. Returns overall rating (1-5 stars), frontal, side, side pole, and rollover ratings per variant. US market only.","inputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"Honda\", \"Toyota\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"Civic\", \"Camry\")"},"year":{"type":"number","description":"Model year (e.g. 2024)"}},"required":["make","model","year"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check safety ratings for a 2024 Toyota Camry","input":{"make":"Toyota","model":"Camry","year":2024}},{"description":"Check safety ratings for a 2023 Honda CR-V","input":{"make":"Honda","model":"CR-V","year":2023}}],"pricing":"free","outputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Manufacturer"},"model":{"type":"string","description":"Model"},"year":{"type":"number","description":"Year"},"ratings":{"type":"array","description":"NCAP ratings for each variant — overall stars, frontal crash, side crash, side pole, rollover, and safety feature availability"},"count":{"type":"number","description":"Number of rated variants"},"source":{"type":"string","description":"Data source (NHTSA NCAP Safety Ratings)"}}},"returns":"NCAP crash test ratings including overall stars (1-5), frontal crash, side crash, side pole, rollover ratings, and safety feature availability for each variant"},{"name":"manufacturer_brands","displayName":"Manufacturer Brands","description":"Find all vehicle brands and makes under a parent manufacturer. For example, Volkswagen Group produces Volkswagen, Audi, Porsche, Lamborghini, Bentley, and more.","inputSchema":{"type":"object","properties":{"manufacturer":{"type":"string","description":"Parent manufacturer name (e.g. \"Volkswagen\", \"Toyota Motor\", \"General Motors\", \"Stellantis\")"}},"required":["manufacturer"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find all brands under Volkswagen","input":{"manufacturer":"Volkswagen"}},{"description":"Find all brands under Toyota Motor","input":{"manufacturer":"Toyota Motor"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"manufacturer":{"type":"string","description":"Manufacturer name queried"},"brands":{"type":"array","description":"All vehicle makes/brands under this manufacturer"},"count":{"type":"number","description":"Number of brands found"},"source":{"type":"string","description":"Data source"}}},"returns":"All vehicle brands and makes produced under the specified parent manufacturer"},{"name":"vehicle_specs","displayName":"Vehicle Specs","description":"Get physical dimensions and weight for a vehicle by make, model, and year. Returns overall length, width, height, wheelbase, curb weight, and track width in metric units.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Model year (e.g. 2014)"},"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"Honda\", \"Toyota\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"Civic\", \"Camry\")"}},"required":["year","make","model"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get specs for a 2014 Toyota Corolla","input":{"year":2014,"make":"Toyota","model":"Corolla"}},{"description":"Get specs for a 2014 Honda Civic","input":{"year":2014,"make":"Honda","model":"Civic"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Model year"},"make":{"type":"string","description":"Manufacturer"},"model":{"type":"string","description":"Model"},"specs":{"type":"object","description":"Physical dimensions: overall length/width/height (cm), wheelbase (cm), curb weight (kg), track width front/rear (cm)"},"raw_specs":{"type":"object","description":"All raw spec key-value pairs from the API"},"source":{"type":"string","description":"Data source"}}},"returns":"Vehicle dimensions and weight including overall length, width, height, wheelbase, curb weight, and track widths in metric units"},{"name":"fuel_prices","displayName":"Fuel Prices","description":"Get current US national average fuel prices for all fuel types including regular, midgrade, premium gasoline, diesel, E85 ethanol, electricity ($/kWh), CNG, and LPG.","inputSchema":{"type":"object","properties":{},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get current US fuel prices","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"currency":{"type":"string","description":"Currency (USD)"},"prices":{"type":"object","description":"Prices per gallon (or per kWh for electric) for each fuel type"},"note":{"type":"string","description":"Explanation of units"},"source":{"type":"string","description":"Data source"}}},"returns":"Current US national average prices for regular, midgrade, premium, diesel, E85, electric ($/kWh), CNG, and LPG"},{"name":"check_investigations","displayName":"Check Investigations","description":"Search active and closed NHTSA safety investigations for a vehicle by make, model, and year. Returns investigation number, type, subject, status (open/closed), opening date, and description.","inputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"Tesla\", \"Toyota\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"Model 3\", \"Camry\")"},"year":{"type":"number","description":"Model year (e.g. 2022)"}},"required":["make","model","year"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check investigations for a 2022 Tesla Model 3","input":{"make":"Tesla","model":"Model 3","year":2022}},{"description":"Check investigations for a 2020 Honda CR-V","input":{"make":"Honda","model":"CR-V","year":2020}}],"pricing":"free","outputSchema":{"type":"object","properties":{"make":{"type":"string","description":"Manufacturer"},"model":{"type":"string","description":"Model"},"year":{"type":"number","description":"Year"},"investigations":{"type":"array","description":"Safety investigations with ID, type, subject, status, dates, summary, and corrective action"},"count":{"type":"number","description":"Number of investigations found"},"source":{"type":"string","description":"Data source"}}},"returns":"NHTSA safety investigations including investigation ID, type, subject, status (open/closed), opening date, summary, and corrective action"}],"icon":"/icons/vehicle-data.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 5 skills: decode_vin, search_models, check_recalls, check_complaints, fuel_economy"]},{"version":"0.02","date":"2026-03-22","changes":["Added plate_lookup skill — look up vehicles by Dutch license plate via RDW (no API key needed)","Added decode_wmi skill — identify any manufacturer worldwide from first 3 VIN characters","Extended check_recalls with Canada support via Transport Canada VRDB (use country \"ca\")"]},{"version":"0.03","date":"2026-03-22","changes":["Added safety_ratings skill — NCAP crash test star ratings from NHTSA (overall, frontal, side, rollover)"]},{"version":"0.04","date":"2026-03-22","changes":["Added manufacturer_brands skill — find all vehicle brands/makes under a parent manufacturer","Added vehicle_specs skill — get physical dimensions and weight from Canadian Vehicle Specifications database","Added fuel_prices skill — current US national average fuel prices for all fuel types","Added check_investigations skill — search active NHTSA safety investigations","Enhanced search_models — list all known vehicle makes when make is omitted, added vehicle types for each make","Enhanced check_complaints — added start_date and end_date parameters for client-side date filtering"]},{"version":"0.05","date":"2026-03-25","changes":["Added inspection_history skill — full UK MOT inspection history via DVSA API (test dates, pass/fail, mileage, advisories, failures)"]}],"premadePrompt":"Look up everything you can about my [year] [make] [model] — any open recalls, safety complaints, fuel economy, and crash test ratings.","requirements":[{"name":"dvsa_mot","type":"secret","displayName":"DVSA MOT API Key","description":"DVSA MOT History API key (for UK inspection history)","envFallback":"DVSA_MOT_API_KEY"}],"credentials":[{"name":"dvsa_mot","type":"secret","displayName":"DVSA MOT API Key","description":"DVSA MOT History API key (for UK inspection history)","envFallback":"DVSA_MOT_API_KEY"}]},{"name":"ocean-data","displayName":"Ocean & Tides","subtitle":"Tides, waves, and ocean forecasts","about":"**Ocean & Tides** is a comprehensive ocean conditions tool covering tides, waves, sea temperature, currents, marine alerts, and real sensor readings for any coastal location worldwide. Whether you're planning a surf session, navigating a harbour, or researching tidal patterns, it pulls from authoritative data sources to give you what you need.\n\nFor beaches and surf spots globally, you get hourly wave height, swell direction, period, and sea surface temperature up to 7 days out. For US coasts, you get precise tide predictions from NOAA stations, observed sensor readings, ocean current predictions, and active marine weather warnings. Historical tidal statistics let you analyse seasonal patterns and flood risk.\n\n### What you can do\n- Get a complete beach report — waves, water temp, currents, and alerts in one call\n- Forecast high and low tides for any NOAA station on US coasts\n- Get hourly wave and swell forecasts for any ocean location worldwide\n- Read real-time sensor data from NOAA stations (water temp, wind, pressure, salinity)\n- Predict ocean current velocity and direction at NOAA current stations\n- Check active marine weather warnings including gale, storm, and rip current alerts\n- Retrieve historical monthly tidal statistics for long-term analysis\n- Look up station datums, flood thresholds, and harmonic constituents\n\n### Who it's for\nSurfers, sailors, beach-goers, marine researchers, harbour pilots, coastal engineers, and anyone who needs reliable ocean and tide information for planning or analysis.\n\n### How to use it\n1. Start with **beach_report** for a full overview of any coastal location — pass latitude and longitude\n2. Use **find_stations** to locate the nearest NOAA station, then **tide_forecast** for precise tide times\n3. Use **wave_forecast** with coordinates for surf conditions anywhere in the world\n4. Use **marine_alerts** to check active warnings before heading out on US waters\n\n### Getting started\nNo setup required — all skills run without any API key.","version":"0.03","categories":["data"],"currency":"USD","skills":[{"name":"tide_forecast","displayName":"Tide Forecast","description":"Get high and low tide times and heights for a NOAA station. Covers US coasts, territories, and Great Lakes. Returns tide predictions for 1-7 days with times and water levels.","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID (e.g. \"8454000\" for Providence, RI). Use find_stations to look up station IDs near a location."},"days":{"type":"number","description":"Number of days to forecast (1-7, default 2)","default":2},"datum":{"type":"string","description":"Tidal datum reference (default MLLW). Options: MLLW, MLW, MSL, MHW, MHHW, NAVD","default":"MLLW"},"units":{"type":"string","description":"Units: \"english\" (feet) or \"metric\" (meters). Default english.","enum":["english","metric"],"default":"english"}},"required":["station_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Tides for Providence, RI","input":{"station_id":"8454000"}},{"description":"Tides for San Francisco in metric","input":{"station_id":"9414290","units":"metric","days":3}}],"pricing":"free","outputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID"},"tides":{"type":"array","description":"Array of high/low tide events with time, height, and type (H or L)"},"count":{"type":"number","description":"Number of tide events"}}},"returns":"High and low tide times and heights for the requested period"},{"name":"wave_forecast","displayName":"Wave Forecast","description":"Get wave height, swell, and surf conditions for any ocean location worldwide. Returns hourly forecasts including wave height, wave period, wave direction, swell height, swell period, wind wave details, and daily sea surface temperature for up to 7 days.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the ocean location (e.g. 33.77 for Huntington Beach)"},"longitude":{"type":"number","description":"Longitude of the ocean location (e.g. -118.19 for Huntington Beach)"},"days":{"type":"number","description":"Forecast days (1-7, default 3)","default":3}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Waves at Huntington Beach, CA","input":{"latitude":33.655,"longitude":-117.999}},{"description":"7-day wave forecast for Bondi Beach, Sydney","input":{"latitude":-33.89,"longitude":151.27,"days":7}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Latitude and longitude"},"current":{"type":"object","description":"Current wave conditions snapshot"},"hourly":{"type":"array","description":"Hourly forecast with wave height, direction, period, swell details"},"daily_summary":{"type":"array","description":"Daily max wave height, dominant swell direction, and sea surface temperature range"}}},"returns":"Hourly wave and swell forecast with current conditions snapshot, daily summary, and sea surface temperature"},{"name":"ocean_conditions","displayName":"Ocean Conditions","description":"Get sea surface temperature, ocean currents, and water conditions for any ocean location worldwide. Returns current conditions plus hourly forecasts.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the ocean location"},"longitude":{"type":"number","description":"Longitude of the ocean location"},"days":{"type":"number","description":"Forecast days (1-7, default 2)","default":2}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Ocean conditions off Miami","input":{"latitude":25.76,"longitude":-80.19}},{"description":"Water temperature in the Mediterranean","input":{"latitude":36.8,"longitude":14.5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Latitude and longitude"},"current":{"type":"object","description":"Current sea surface temperature and ocean current"},"hourly":{"type":"array","description":"Hourly SST, current velocity, and current direction"}}},"returns":"Sea surface temperature and ocean current data with hourly forecast"},{"name":"find_stations","displayName":"Find Stations","description":"Find NOAA tide prediction, water level, water temperature, or current prediction stations near a given location. Returns the closest stations with their IDs, names, coordinates, and distance. Use the station ID with tide_forecast, station_conditions, current_predictions, or station_info.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude to search near (e.g. 40.7 for New York)"},"longitude":{"type":"number","description":"Longitude to search near (e.g. -74.0 for New York)"},"type":{"type":"string","description":"Station type: \"tides\" (tide predictions), \"waterlevels\" (observed), \"watertemp\" (temperature), \"currents\" (current predictions)","enum":["tides","waterlevels","watertemp","currents"],"default":"tides"},"limit":{"type":"number","description":"Maximum number of stations to return (default 10)","default":10}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find tide stations near New York","input":{"latitude":40.7,"longitude":-74}},{"description":"Find water temp stations near San Diego","input":{"latitude":32.7,"longitude":-117.2,"type":"watertemp"}},{"description":"Find current stations near Chesapeake Bay","input":{"latitude":37,"longitude":-76,"type":"currents"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"search_location":{"type":"object","description":"Search coordinates"},"stations":{"type":"array","description":"Nearby stations with id, name, lat, lon, distance_km, state"},"count":{"type":"number","description":"Number of stations found"}}},"returns":"List of nearby NOAA stations with IDs, names, coordinates, and distance in km"},{"name":"marine_alerts","displayName":"Marine Alerts","description":"Get active marine weather alerts and warnings for a location. Covers small craft advisories, gale warnings, storm warnings, hurricane warnings, rip current statements, and tsunami alerts. US coasts only.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the coastal location (US coasts only)"},"longitude":{"type":"number","description":"Longitude of the coastal location (US coasts only)"}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Marine alerts near Cape Cod","input":{"latitude":41.67,"longitude":-70}},{"description":"Check alerts off the Florida coast","input":{"latitude":25.76,"longitude":-80.19}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Search coordinates"},"alerts":{"type":"array","description":"Active marine alerts with event type, headline, description, severity, urgency, and timing"},"count":{"type":"number","description":"Number of active alerts"}}},"returns":"Active marine weather alerts with event type, severity, headline, and detailed description"},{"name":"beach_report","displayName":"Beach Report","description":"Complete conditions report for a beach or coastal location. Combines waves, SST, currents, and marine alerts in one snapshot. Global for waves and water temp; US-only for tides and alerts.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the beach or coastal location"},"longitude":{"type":"number","description":"Longitude of the beach or coastal location"},"days":{"type":"number","description":"Forecast days (1-3, default 2)","default":2}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Beach report for Malibu, CA","input":{"latitude":34.03,"longitude":-118.68}},{"description":"Beach conditions at Byron Bay, Australia","input":{"latitude":-28.64,"longitude":153.61}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Coordinates"},"current_conditions":{"type":"object","description":"Current wave height, water temp, ocean current, wind"},"wave_forecast":{"type":"array","description":"Hourly wave and swell forecast"},"daily_summary":{"type":"array","description":"Daily max waves, conditions, and sea surface temperature range"},"alerts":{"type":"array","description":"Active marine weather alerts (US only)"}}},"returns":"Complete beach conditions: waves, water temp, currents, wind, sea surface temperature range, and marine alerts in one response"},{"name":"station_conditions","displayName":"Station Conditions","description":"Get real observed conditions from a NOAA CO-OPS station — actual sensor readings, not forecasts. Returns water temp, wind, air temp, pressure, water level, salinity, humidity, visibility, and conductivity. Unavailable sensors return null.","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA CO-OPS station ID (e.g. \"8454000\" for Providence, RI). Use find_stations to look up station IDs near a location."},"units":{"type":"string","description":"Units: \"english\" (°F, feet, knots) or \"metric\" (°C, meters, m/s). Default english.","enum":["english","metric"],"default":"english"}},"required":["station_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Current conditions at Providence, RI","input":{"station_id":"8454000"}},{"description":"Conditions at San Francisco in metric","input":{"station_id":"9414290","units":"metric"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID"},"water_temperature":{"type":"object","description":"Observed water temperature with value, unit, and timestamp (null if unavailable)"},"wind":{"type":"object","description":"Observed wind speed, direction, and gusts (null if unavailable)"},"air_temperature":{"type":"object","description":"Observed air temperature with value, unit, and timestamp (null if unavailable)"},"air_pressure":{"type":"object","description":"Observed barometric pressure in millibars (null if unavailable)"},"water_level":{"type":"object","description":"Observed water level relative to MLLW datum (null if unavailable)"},"salinity":{"type":"object","description":"Observed salinity in PSU (null if unavailable, PORTS stations only)"},"humidity":{"type":"object","description":"Observed relative humidity in percent (null if unavailable, PORTS stations only)"},"visibility":{"type":"object","description":"Observed visibility in nautical miles or km (null if unavailable, PORTS stations only)"},"conductivity":{"type":"object","description":"Observed water conductivity in mS/cm (null if unavailable, PORTS stations only)"},"products_available":{"type":"number","description":"Number of products with data"},"products_total":{"type":"number","description":"Total number of products queried"}}},"returns":"Real observed conditions from station sensors: water temp, wind, air temp, pressure, water level, salinity, humidity, visibility, and conductivity"},{"name":"current_predictions","displayName":"Current Predictions","description":"Get ocean current velocity and direction predictions at NOAA current stations. Returns predicted current speed, direction, flood/ebb indicators, and timing. Current stations are different from tide stations — use find_stations with type \"currents\" to locate them.","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA current station ID (e.g. \"PUG1515\" for Puget Sound). Use find_stations with type \"currents\" to look up current station IDs."},"days":{"type":"number","description":"Number of days to forecast (1-7, default 2)","default":2},"units":{"type":"string","description":"Units: \"english\" (knots) or \"metric\" (m/s). Default english.","enum":["english","metric"],"default":"english"}},"required":["station_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Current predictions for Puget Sound","input":{"station_id":"PUG1515"}},{"description":"Currents in metric for 3 days","input":{"station_id":"PUG1515","units":"metric","days":3}}],"pricing":"free","outputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA current station ID"},"predictions":{"type":"array","description":"Array of current predictions with time, speed, direction, and flood/ebb type"},"count":{"type":"number","description":"Number of predictions"},"summary":{"type":"object","description":"Max flood and ebb velocities"}}},"returns":"Predicted ocean current velocity, direction, and flood/ebb indicators for the requested period"},{"name":"tidal_statistics","displayName":"Tidal Statistics","description":"Get monthly mean tidal levels for a NOAA station over a date range. Returns monthly mean high water, low water, mean sea level, tide range, and highest/lowest values for historical analysis.","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID (e.g. \"8454000\" for Providence, RI). Use find_stations to look up station IDs."},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format (e.g. \"2024-01-01\")"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format (e.g. \"2024-12-31\")"},"units":{"type":"string","description":"Units: \"english\" (feet) or \"metric\" (meters). Default english.","enum":["english","metric"],"default":"english"}},"required":["station_id","start_date","end_date"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Monthly tidal means for Providence in 2024","input":{"station_id":"8454000","start_date":"2024-01-01","end_date":"2024-12-31"}},{"description":"Tidal statistics for San Francisco in metric","input":{"station_id":"9414290","start_date":"2024-06-01","end_date":"2024-12-31","units":"metric"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID"},"months":{"type":"array","description":"Array of monthly mean values: MHHW, MHW, MSL, MLW, MLLW, highest, lowest, tide ranges"},"count":{"type":"number","description":"Number of months with data"},"summary":{"type":"object","description":"Average MSL, overall highest and lowest across all months"}}},"returns":"Monthly mean tidal levels with statistical summary for historical analysis"},{"name":"station_info","displayName":"Station Info","description":"Get complete reference data for a NOAA station including tidal datums (MHHW, MHW, MSL, MLW, MLLW), flood level thresholds (minor, moderate, major), and top harmonic constituents. Not all stations have all three data types — each is fetched independently.","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID (e.g. \"8454000\" for Providence, RI). Use find_stations to look up station IDs."}},"required":["station_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Reference data for Providence, RI","input":{"station_id":"8454000"}},{"description":"Station info for San Francisco","input":{"station_id":"9414290"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"NOAA station ID"},"datums":{"type":"array","description":"Tidal datums with name and value (MHHW, MHW, MSL, MLW, MLLW, etc.)"},"flood_levels":{"type":"object","description":"Flood level thresholds: NOS and NWS minor, moderate, major (null if unavailable)"},"harmonic_constituents":{"type":"array","description":"Top 10 harmonic constituents by amplitude with name, amplitude, phase, and speed"},"sections_available":{"type":"number","description":"Number of data sections available (out of 3)"},"sections_total":{"type":"number","description":"Total sections queried (3: datums, flood levels, harmonics)"}}},"returns":"Station reference data: tidal datums, flood level thresholds, and harmonic constituents"}],"workflow":["beach_report","find_stations → tide_forecast","find_stations → station_conditions","find_stations → current_predictions","find_stations → station_info","wave_forecast","marine_alerts","tidal_statistics"],"icon":"/icons/ocean-data.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 6 skills: tide_forecast, wave_forecast, ocean_conditions, find_stations, marine_alerts, beach_report"]},{"version":"0.02","date":"2026-03-22","changes":["Added station_conditions skill for real observed NOAA CO-OPS station readings"]},{"version":"0.03","date":"2026-03-22","changes":["Added current_predictions skill for ocean current velocity and direction at NOAA current stations","Added tidal_statistics skill for monthly mean tidal levels and historical analysis","Added station_info skill for datums, flood levels, and harmonic constituents","Enhanced find_stations with currents station type","Enhanced station_conditions with salinity, humidity, visibility, and conductivity products","Enhanced wave_forecast and beach_report with daily sea surface temperature min/max"]}],"premadePrompt":"What are the current wave and tide conditions at [beach or coastal location]? I'm planning a trip and want to know water temperature, wave height, and any active marine warnings for the next few days."},{"name":"product-recalls","displayName":"Product Recalls","subtitle":"Food, drug, and product recalls","about":"**Product Recalls** gives you instant access to official US government recall and safety databases. Search food contamination alerts, drug withdrawals, and consumer product hazards — or run a safety check on any brand or product name across all sources at once.\n\nAll data comes directly from the FDA and the Consumer Product Safety Commission. Whether you're checking a product before buying, monitoring your industry for compliance, or researching a specific brand's safety record, this tool queries the same databases that regulators publish.\n\n### What you can do\n- **search_food_recalls** — find FDA food recalls by product, brand, or contaminant with severity and status filters\n- **search_drug_recalls** — look up pharmaceutical recalls by drug name or manufacturer\n- **search_product_recalls** — search CPSC consumer product recalls for toys, electronics, appliances, and more\n- **recent_recalls** — get the latest recalls across all categories without needing a search term\n- **check_product_safety** — run a cross-database safety check on any product or brand simultaneously\n\n### Who it's for\nParents checking toy and baby gear safety, consumers verifying a product before purchase, compliance professionals monitoring industry recalls, journalists and researchers tracking safety patterns, and anyone who wants to know if something they own or buy has been flagged.\n\n### How to use it\n1. To check if a specific brand or product is safe, use **check_product_safety** — it searches food, drug, and product databases at once and flags any active recalls.\n2. To search a specific category, use **search_food_recalls**, **search_drug_recalls**, or **search_product_recalls** with a product name or keyword.\n3. To see what's been recalled recently without a specific query, call **recent_recalls** with your preferred category.\n\n### Getting started\nCall **check_product_safety** with any product name to run the broadest safety sweep in one step.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"search_food_recalls","displayName":"Search Food Recalls","description":"Search FDA food recalls by product name, brand, or ingredient. Returns recall reason, classification (I/II/III), distribution pattern, and status.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Food product name, brand, or ingredient to search for (e.g. \"peanut butter\", \"Salmonella\", \"Listeria\")"},"limit":{"type":"number","default":10,"description":"Maximum number of results to return (default 10, max 100)"},"status":{"type":"string","enum":["ongoing","completed","terminated"],"description":"Filter by recall status"},"classification":{"type":"string","enum":["I","II","III"],"description":"Filter by severity — Class I is most serious (health hazard), Class II may cause problems, Class III unlikely to cause problems"},"start_date":{"type":"string","description":"Filter recalls from this date (YYYY-MM-DD format)"},"end_date":{"type":"string","description":"Filter recalls up to this date (YYYY-MM-DD format)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for peanut butter recalls","input":{"query":"peanut butter"}},{"description":"Find Listeria-related food recalls","input":{"query":"Listeria","limit":5}},{"description":"Find ongoing Class I food recalls","input":{"query":"Salmonella","status":"ongoing","classification":"I"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"recalls":{"type":"array","description":"List of food recalls with recall number, firm, product, reason, classification, and status"},"count":{"type":"number","description":"Number of results returned"},"total":{"type":"number","description":"Total matching recalls in database"}}},"returns":"FDA food recall records including recall number, recalling firm, product description, reason, classification (I/II/III), status, and distribution pattern"},{"name":"search_drug_recalls","displayName":"Search Drug Recalls","description":"Search FDA drug and medication recalls by drug name, brand, or manufacturer. Returns recall reason, classification (I/II/III), distribution, and status.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Drug name, brand name, or manufacturer to search for (e.g. \"ibuprofen\", \"metformin\", \"Pfizer\")"},"limit":{"type":"number","default":10,"description":"Maximum number of results to return (default 10, max 100)"},"status":{"type":"string","enum":["ongoing","completed","terminated"],"description":"Filter by recall status"},"classification":{"type":"string","enum":["I","II","III"],"description":"Filter by severity — Class I is most serious (health hazard), Class II may cause problems, Class III unlikely to cause problems"},"start_date":{"type":"string","description":"Filter recalls from this date (YYYY-MM-DD format)"},"end_date":{"type":"string","description":"Filter recalls up to this date (YYYY-MM-DD format)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for ibuprofen recalls","input":{"query":"ibuprofen"}},{"description":"Find recalls from a specific manufacturer","input":{"query":"Pfizer","limit":5}},{"description":"Find completed Class II drug recalls in 2025","input":{"query":"metformin","status":"completed","classification":"II","start_date":"2025-01-01","end_date":"2025-12-31"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"recalls":{"type":"array","description":"List of drug recalls with recall number, firm, product, reason, classification, and status"},"count":{"type":"number","description":"Number of results returned"},"total":{"type":"number","description":"Total matching recalls in database"}}},"returns":"FDA drug recall records including recall number, recalling firm, product description, reason, classification (I/II/III), status, and distribution pattern"},{"name":"search_product_recalls","displayName":"Search Product Recalls","description":"Search CPSC consumer product recalls for toys, electronics, baby gear, furniture, and household items. Returns hazard details, remedies, and manufacturer information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Product name, type, or brand to search for (e.g. \"stroller\", \"space heater\", \"IKEA\")"},"start_date":{"type":"string","description":"Only return recalls from this date onward (YYYY-MM-DD format)"},"end_date":{"type":"string","description":"Only return recalls up to this date (YYYY-MM-DD format)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for stroller recalls","input":{"query":"stroller"}},{"description":"Find space heater recalls in 2025","input":{"query":"space heater","start_date":"2025-01-01","end_date":"2025-12-31"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"start_date":{"type":"string","description":"Start date filter (if provided)"},"end_date":{"type":"string","description":"End date filter (if provided)"},"recalls":{"type":"array","description":"List of product recalls with recall number, title, date, hazards, remedies, and manufacturers"},"count":{"type":"number","description":"Number of results returned"}}},"returns":"CPSC product recall records including recall number, title, description, hazards, remedies, manufacturers, and retailers"},{"name":"recent_recalls","displayName":"Recent Recalls","description":"Get the latest recalls across all categories or filter by food, drug, device, or product. No search query needed — returns the most recent recall actions.","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["food","drug","device","product","all"],"default":"all","description":"Recall category to fetch: \"food\" (FDA), \"drug\" (FDA), \"device\" (FDA), \"product\" (CPSC), or \"all\" (default)"},"limit":{"type":"number","default":10,"description":"Maximum number of results per category (default 10)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get latest recalls across all categories","input":{}},{"description":"Get recent food recalls only","input":{"category":"food","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Category filter used"},"recalls":{"type":"array","description":"Recent recalls (array for single category, object with category keys for \"all\")"},"count":{"type":"number","description":"Total number of recalls returned"}}},"returns":"Most recent recalls sorted by date, grouped by category when fetching all categories"},{"name":"check_product_safety","displayName":"Check Product Safety","description":"Check if a specific product or brand has any active or ongoing recalls. Searches across FDA food, drug, and CPSC databases simultaneously and highlights ongoing issues.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Product name or brand to check for safety recalls (e.g. \"Tylenol\", \"Fisher-Price\", \"romaine lettuce\")"}},"required":["product"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check if romaine lettuce has active recalls","input":{"product":"romaine lettuce"}},{"description":"Check Fisher-Price product safety","input":{"product":"Fisher-Price"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Product or brand checked"},"has_active_recalls":{"type":"boolean","description":"Whether any active/ongoing recalls were found"},"summary":{"type":"object","description":"Summary counts: total recalls, ongoing FDA recalls, food/drug/product breakdown"},"food_recalls":{"type":"array","description":"Matching FDA food recalls"},"drug_recalls":{"type":"array","description":"Matching FDA drug recalls"},"product_recalls":{"type":"array","description":"Matching CPSC product recalls"}}},"returns":"Safety check results across all databases with recall counts, active/ongoing status flag, and full recall details"}],"icon":"/icons/product-recalls.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 5 skills: search_food_recalls, search_drug_recalls, search_product_recalls, recent_recalls, check_product_safety"]},{"version":"0.02","date":"2026-03-22","changes":["Added status, classification, and date range filters to search_food_recalls and search_drug_recalls","Added end_date filter to search_product_recalls"]}],"premadePrompt":"Are there any active recalls for [product name or brand]? Check food, drug, and consumer product safety records."},{"name":"night-sky","displayName":"Night Sky","subtitle":"Stars, planets, and moon phases","about":"**Night Sky** tells you what's in the sky from any location — which planets and stars are visible tonight, the current moon phase, sunrise and sunset times, upcoming eclipses, and a timeline of celestial events like meteor showers and solstices. All data is computed in real time for any coordinates.\n\nWhether you're planning a stargazing trip, a sunrise shoot, or just curious what that bright object is in the evening sky, this tool gives you precise astronomical data without requiring any apps or specialized knowledge. Everything is location and date specific.\n\n### What you can do\n- **whats_visible** — see all planets and bright stars above the horizon from any location and time\n- **moon_phase** — get the current moon phase, illumination percentage, and upcoming full/new moon dates\n- **sun_and_moon_times** — get sunrise, sunset, moonrise, moonset, twilight times, and total daylight hours\n- **eclipse_forecast** — find all solar and lunar eclipses in any given year\n- **celestial_events** — get a timeline of equinoxes, solstices, meteor shower peaks, and asteroid close approaches\n\n### Who it's for\nStargazers and amateur astronomers planning observation sessions. Photographers timing golden hour, blue hour, or night sky shoots. Anyone curious about celestial events or wanting to know what's visible from their location tonight.\n\n### How to use it\n1. Use **whats_visible** with your latitude, longitude, and local time offset to see what's in the sky right now\n2. Use **moon_phase** with a date to get illumination and phase — useful for planning dark-sky photography\n3. Use **sun_and_moon_times** with coordinates for precise sunrise, sunset, and twilight times for a specific day\n4. Use **celestial_events** to plan ahead — set a start date and days parameter to see what's coming up\n\n### Getting started\nFor **whats_visible**, you need latitude and longitude coordinates — use any city coordinates for a starting point. Always set timezone_offset to your local UTC offset so the visible objects match your actual local time.","version":"0.04","categories":["data"],"currency":"USD","skills":[{"name":"whats_visible","displayName":"What's Visible","description":"Find which planets and bright stars are visible from a location at a given time. Returns all celestial objects above the horizon with altitude, compass direction, and object type.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the observation location (e.g. 34.05 for Los Angeles)"},"longitude":{"type":"number","description":"Longitude of the observation location (e.g. -118.24 for Los Angeles)"},"date":{"type":"string","description":"Date in YYYY-MM-DD format (default: today)"},"time":{"type":"string","description":"Time in HH:MM format, 24-hour (default: 21:00)"},"timezone_offset":{"type":"number","description":"Hours offset from UTC (e.g. -7 for PDT, 0 for UTC, 1 for CET). Default 0."}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"What planets and stars are visible tonight from Los Angeles","input":{"latitude":34.05,"longitude":-118.24,"time":"21:00","timezone_offset":-7}},{"description":"Night sky from Sydney at midnight","input":{"latitude":-33.87,"longitude":151.21,"time":"00:00","timezone_offset":11}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Latitude and longitude"},"date":{"type":"string","description":"Observation date"},"time":{"type":"string","description":"Observation time"},"objects_visible":{"type":"number","description":"Total number of objects above the horizon"},"sun_above_horizon":{"type":"boolean","description":"Whether the Sun is up"},"moon_above_horizon":{"type":"boolean","description":"Whether the Moon is up"},"planets_visible":{"type":"number","description":"Number of visible planets"},"stars_visible":{"type":"number","description":"Number of visible bright stars"},"objects":{"type":"array","description":"Visible objects sorted by altitude, with name, type, altitude degrees, azimuth, and compass direction"}}},"returns":"List of visible celestial objects (planets and bright stars) above the horizon, sorted by altitude with compass directions"},{"name":"moon_phase","displayName":"Moon Phase","description":"Get the current moon phase, illumination percentage, moonrise and moonset times, and the dates of the next four major phases. Provide coordinates for location-specific moonrise/moonset times.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format (default: today)"},"latitude":{"type":"number","description":"Latitude for moonrise/moonset times (optional)"},"longitude":{"type":"number","description":"Longitude for moonrise/moonset times (optional)"},"timezone_offset":{"type":"number","description":"Hours offset from UTC (default 0)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Current moon phase and upcoming phases","input":{"date":"2026-03-22"}},{"description":"Moon phase with rise/set times for New York","input":{"date":"2026-03-22","latitude":40.71,"longitude":-74.01,"timezone_offset":-4}}],"pricing":"free","outputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Requested date"},"current_phase":{"type":"string","description":"Current moon phase name"},"illumination":{"type":"string","description":"Moon illumination percentage"},"moonrise":{"type":"string","description":"Moonrise time (if location provided)"},"moonset":{"type":"string","description":"Moonset time (if location provided)"},"upcoming_phases":{"type":"array","description":"Next 4 major moon phases with dates and times"}}},"returns":"Current moon phase, illumination, moonrise/moonset times, and upcoming phase dates"},{"name":"sun_and_moon_times","displayName":"Sun & Moon Times","description":"Get sunrise, sunset, moonrise, moonset, civil twilight begin and end, moon phase, and total daylight hours for any location and date. Essential for planning outdoor activities, photography, or stargazing.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the location (e.g. 40.71 for New York)"},"longitude":{"type":"number","description":"Longitude of the location (e.g. -74.01 for New York)"},"date":{"type":"string","description":"Date in YYYY-MM-DD format (default: today)"},"timezone_offset":{"type":"number","description":"Hours offset from UTC (default 0)"}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Sunrise and sunset for New York today","input":{"latitude":40.71,"longitude":-74.01,"timezone_offset":-4}},{"description":"Sun and moon times for London","input":{"latitude":51.51,"longitude":-0.13,"date":"2026-06-21","timezone_offset":1}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"object","description":"Latitude and longitude"},"date":{"type":"string","description":"Requested date"},"sun":{"type":"object","description":"Sunrise, sunset, solar transit, civil twilight times, and daylight hours"},"moon":{"type":"object","description":"Moonrise, moonset, moon transit, phase, and illumination"}}},"returns":"Sunrise, sunset, moonrise, moonset, twilight times, moon phase, and daylight hours"},{"name":"eclipse_forecast","displayName":"Eclipse Forecast","description":"Get upcoming solar and lunar eclipses for a given year, including dates, types (total, annular, partial, penumbral), and timing. Solar eclipse data from the US Naval Observatory; lunar eclipses from NASA GSFC catalog (2025-2040).","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year to check for eclipses (default: current year)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"All solar and lunar eclipses in 2026","input":{"year":2026}},{"description":"Eclipses in 2027","input":{"year":2027}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year queried"},"eclipses":{"type":"array","description":"Solar and lunar eclipses with date, kind (solar/lunar), subtype, and timing"},"solar_count":{"type":"number","description":"Number of solar eclipses in the year"},"lunar_count":{"type":"number","description":"Number of lunar eclipses in the year"},"count":{"type":"number","description":"Total number of eclipses in the year"}}},"returns":"List of solar and lunar eclipses for the year with dates, types, and UTC times"},{"name":"celestial_events","displayName":"Celestial Events","description":"Get a combined timeline of upcoming astronomical events including equinoxes, solstices, meteor shower peaks, and asteroid close approaches to Earth. Data from the US Naval Observatory and NASA JPL, plus well-known annual meteor shower dates.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format (default: today)"},"days":{"type":"number","description":"Number of days to look ahead (default: 30, max: 365)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Celestial events in the next 30 days","input":{"start_date":"2026-03-22"}},{"description":"Celestial events for the next 90 days including meteor showers","input":{"start_date":"2026-07-01","days":90}}],"pricing":"free","outputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"Window start date"},"end_date":{"type":"string","description":"Window end date"},"days":{"type":"number","description":"Number of days in window"},"events":{"type":"array","description":"Chronological list of events with date, type, name, and details"},"count":{"type":"number","description":"Total number of events found"}}},"returns":"Combined chronological timeline of equinoxes, solstices, meteor shower peaks, and asteroid close approaches"}],"icon":"/icons/night-sky.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 5 skills: whats_visible, moon_phase, sun_and_moon_times, eclipse_forecast, celestial_events"]},{"version":"0.02","date":"2026-03-22","changes":["eclipse_forecast now includes lunar eclipses alongside solar eclipses","celestial_events now includes major meteor shower peaks (Quadrantids, Lyrids, Eta Aquariids, Perseids, Orionids, Leonids, Geminids, Ursids)"]},{"version":"0.03","date":"2026-04-23","changes":["moon_phase and sun_and_moon_times are now faster and more reliable"]},{"version":"0.04","date":"2026-04-24","changes":["celestial_events returns asteroid close approaches and meteor showers even when equinox/solstice data is temporarily unavailable","eclipse_forecast returns lunar eclipses even when solar eclipse data is temporarily unavailable","whats_visible gives a clearer message when upstream data is temporarily unavailable"]}],"premadePrompt":"What planets and stars are visible tonight from [city or coordinates]? Also tell me the moon phase and sunrise/sunset times."},{"name":"color-tools","displayName":"Color Tools","subtitle":"Palettes, contrast, and color info","about":"**Color Tools** handles every color task a designer or developer runs into — format conversions, palette generation, accessibility checking, and creative naming. Pass a hex code and get back HSL, RGB, CMYK, and a creative name drawn from a database of nearly 32,000 curated color names.\n\nIt combines deterministic color theory (monochrome, analogic, complement, triad, quad palettes) with AI-generated palettes that can lock specific colors in place. The contrast checker runs WCAG AA and AAA compliance tests instantly, so you can verify accessibility without leaving your workflow.\n\n### What you can do\n- **color_info** — convert any color between hex, RGB, HSL, HSV, and CMYK; get the closest named color and a creative name\n- **generate_palette** — build a color scheme from a hex using established color theory modes\n- **ai_palette** — generate a palette using machine learning, with the ability to lock specific colors\n- **check_contrast** — test any foreground/background pair against WCAG AA and AAA standards\n- **name_colors** — get creative names for up to 10 hex colors at once from a 31,887-name database\n\n### Who it's for\nDesigners building brand palettes, developers implementing design systems, UX teams running accessibility audits, and anyone who needs to communicate colors precisely across tools and formats.\n\n### How to use it\n1. Start with **color_info** to convert a color and find its name\n2. Use **generate_palette** or **ai_palette** to build a full color scheme from your brand color\n3. Run **check_contrast** on any text/background pair to verify WCAG compliance before shipping\n4. Use **name_colors** when you need human-readable names for a set of hex values","version":"0.01","categories":["data"],"currency":"USD","skills":[{"name":"color_info","displayName":"Color Info","description":"Get comprehensive info about any color — name, hex, RGB, HSL, HSV, CMYK, closest named color, creative name, and contrast recommendation. Accepts hex, RGB, and HSL input formats.","inputSchema":{"type":"object","properties":{"color":{"type":"string","description":"Color to look up. Accepts hex \"#FF5733\", plain hex \"FF5733\", rgb \"rgb(255,87,51)\", or hsl \"hsl(11,100%,60%)\""}},"required":["color"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up a hex color","input":{"color":"#FF5733"}},{"description":"Look up an RGB color","input":{"color":"rgb(100,149,237)"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"hex":{"type":"string","description":"Hex color value with # prefix"},"hex_clean":{"type":"string","description":"Hex color value without # prefix"},"rgb":{"type":"object","description":"RGB values (r, g, b) and formatted string"},"hsl":{"type":"object","description":"HSL values (h, s, l) and formatted string"},"hsv":{"type":"object","description":"HSV values (h, s, v) and formatted string"},"cmyk":{"type":"object","description":"CMYK values (c, m, y, k) and formatted string"},"name":{"type":"string","description":"Closest named color"},"exact_name_match":{"type":"boolean","description":"Whether the color exactly matches a named color"},"creative_name":{"type":"string","description":"Creative color name from Color.pizza (31,887 names)"},"contrast_color":{"type":"string","description":"Recommended contrast color (black or white)"}}},"returns":"All color format conversions (hex, RGB, HSL, HSV, CMYK), named color, creative name, and contrast recommendation"},{"name":"generate_palette","displayName":"Generate Palette","description":"Generate a color scheme from a starting color using classic color theory. Supports monochrome, analogic, complement, analogic-complement, triad, and quad modes with 2-10 colors.","inputSchema":{"type":"object","properties":{"color":{"type":"string","description":"Starting hex color (e.g. \"#FF5733\" or \"FF5733\")"},"mode":{"type":"string","enum":["monochrome","analogic","complement","analogic-complement","triad","quad"],"default":"analogic","description":"Color scheme mode (default: analogic)"},"count":{"type":"number","default":5,"description":"Number of colors to generate, 2-10 (default: 5)"}},"required":["color"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Generate an analogic palette from coral","input":{"color":"#FF6B6B"}},{"description":"Generate a triad palette with 6 colors","input":{"color":"#3498DB","mode":"triad","count":6}}],"pricing":"free","outputSchema":{"type":"object","properties":{"seed_color":{"type":"string","description":"The starting color"},"mode":{"type":"string","description":"Color scheme mode used"},"count":{"type":"number","description":"Number of colors generated"},"colors":{"type":"array","description":"Array of colors with hex, rgb, hsl, and creative name"}}},"returns":"Color palette with hex, RGB, HSL values and creative names for each color"},{"name":"ai_palette","displayName":"AI Palette","description":"Generate an AI-powered 5-color palette using machine learning. Optionally lock specific colors and let the AI generate complementary colors for the remaining positions.","inputSchema":{"type":"object","properties":{"locked_colors":{"type":"array","items":{"type":["string","null"]},"description":"Array of up to 5 hex colors to lock. Use null for positions to auto-generate. Example: [\"#FF5733\", null, null, null, \"#2C3E50\"]"},"model":{"type":"string","enum":["default","ui","water_color","city_photography","lego_movie","ocean_photography"],"default":"default","description":"AI model style (default: \"default\")"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Generate a random AI palette","input":{}},{"description":"Generate with locked colors","input":{"locked_colors":["#FF5733",null,null,null,"#2C3E50"],"model":"ui"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"model":{"type":"string","description":"AI model used"},"colors":{"type":"array","description":"Array of 5 colors with hex, rgb, name, and locked status"}}},"returns":"5-color AI-generated palette with hex, RGB, creative names, and locked status for each color"},{"name":"check_contrast","displayName":"Check Contrast","description":"Check WCAG 2.1 accessibility contrast ratio between a foreground and background color. Returns AA and AAA compliance for both normal and large text with improvement suggestions.","inputSchema":{"type":"object","properties":{"foreground":{"type":"string","description":"Foreground (text) hex color (e.g. \"#333333\" or \"333333\")"},"background":{"type":"string","description":"Background hex color (e.g. \"#FFFFFF\" or \"FFFFFF\")"}},"required":["foreground","background"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Check black text on white background","input":{"foreground":"#000000","background":"#FFFFFF"}},{"description":"Check a problematic low-contrast pair","input":{"foreground":"#777777","background":"#AAAAAA"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"foreground":{"type":"object","description":"Foreground color details (hex, rgb, luminance)"},"background":{"type":"object","description":"Background color details (hex, rgb, luminance)"},"contrast_ratio":{"type":"number","description":"WCAG contrast ratio (e.g. 4.5)"},"contrast_ratio_display":{"type":"string","description":"Formatted ratio (e.g. \"4.5:1\")"},"wcag":{"type":"object","description":"WCAG compliance results: aa.normal_text, aa.large_text, aaa.normal_text, aaa.large_text"},"overall_pass":{"type":"boolean","description":"Whether the contrast passes WCAG AA for normal text"},"suggestions":{"type":"array","items":{"type":"string"},"description":"Improvement suggestions"}}},"returns":"WCAG contrast ratio, AA and AAA compliance for normal and large text, and improvement suggestions"},{"name":"name_colors","displayName":"Name Colors","description":"Get creative names for up to 10 colors from a database of 31,887 named colors. Returns each color with its closest creative name, plus a generated palette title for the group.","inputSchema":{"type":"object","properties":{"colors":{"type":"array","items":{"type":"string"},"description":"Array of 1-10 hex color strings (e.g. [\"#FF5733\", \"#3498DB\", \"#2ECC71\"])"}},"required":["colors"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Name a set of brand colors","input":{"colors":["#FF5733","#3498DB","#2ECC71"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"palette_title":{"type":"string","description":"Generated palette title for the color group"},"colors":{"type":"array","description":"Array of colors with hex, name, rgb, distance from exact match, and luminance"},"count":{"type":"number","description":"Number of colors named"}}},"returns":"Creative color names from 31,887-name database, plus a generated palette title"}],"icon":"/icons/color-tools.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 5 skills: color_info, generate_palette, ai_palette, check_contrast, name_colors"]}],"premadePrompt":"Generate a color palette based on [hex color or color description] and check whether my text color [foreground hex] on background [background hex] passes WCAG accessibility standards."},{"name":"chemistry-lookup","displayName":"Chemistry Lookup","subtitle":"Compounds, elements, and safety","about":"**Chemistry Lookup** gives you instant access to chemical compound data, periodic table elements, and GHS safety information. Search by name, CAS number, formula, or partial match — and get back everything from molecular structure to hazard codes in one place.\n\nIt draws on PubChem, the world's largest open chemistry database, covering millions of compounds with verified data. Whether you're checking the safety profile of a substance, comparing elements for a materials choice, or finding structurally similar compounds for a synthesis route, everything is one lookup away.\n\n### What you can do\n- **compound_lookup** — full molecular data for any compound: formula, weight, IUPAC name, SMILES, InChI key, and physical properties\n- **safety_data** — GHS hazard pictograms, signal word, H-codes and P-codes for any substance\n- **element_info** — detailed data for any periodic table element by name, symbol, or atomic number\n- **search_compounds** — partial-name search when you don't know the exact compound name\n- **similar_compounds** — find structurally related compounds by name or SMILES string\n- **compare_elements** — place two or more elements side by side on key properties\n\n### Who it's for\nChemists, researchers, lab technicians, students, and safety professionals who need reliable compound and element data without hunting through multiple databases. Also useful for anyone writing safety documentation or handling hazardous materials.\n\n### How to use it\n1. Use **compound_lookup** with a name like \"aspirin\", a CAS number like \"50-78-2\", or a formula like \"C9H8O4\"\n2. Follow with **safety_data** to get the GHS hazard classification for the same compound\n3. Use **similar_compounds** to explore structurally related substances\n4. For element questions, use **element_info** with the element name, symbol, or atomic number","version":"0.01","categories":["data"],"currency":"USD","skills":[{"name":"compound_lookup","displayName":"Compound Lookup","description":"Look up a chemical compound by name, CAS number, or formula. Returns molecular formula, weight, IUPAC name, SMILES notation, InChI key, and common synonyms from PubChem.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Compound name (e.g. \"aspirin\"), CAS number (e.g. \"50-78-2\"), or molecular formula (e.g. \"C9H8O4\")"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Look up aspirin","input":{"query":"aspirin"}},{"description":"Look up by CAS number","input":{"query":"50-78-2"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"cid":{"type":"number","description":"PubChem Compound ID"},"molecular_formula":{"type":"string","description":"Molecular formula"},"molecular_weight":{"type":"number","description":"Molecular weight in g/mol"},"iupac_name":{"type":"string","description":"IUPAC systematic name"},"canonical_smiles":{"type":"string","description":"Canonical SMILES notation"},"inchi":{"type":"string","description":"InChI identifier"},"inchi_key":{"type":"string","description":"InChI key"},"xlogp":{"type":"number","description":"XLogP3 partition coefficient"},"exact_mass":{"type":"number","description":"Exact mass"},"tpsa":{"type":"number","description":"Topological polar surface area"},"complexity":{"type":"number","description":"Molecular complexity score"},"h_bond_donor_count":{"type":"number","description":"Hydrogen bond donor count"},"h_bond_acceptor_count":{"type":"number","description":"Hydrogen bond acceptor count"},"rotatable_bond_count":{"type":"number","description":"Rotatable bond count"},"heavy_atom_count":{"type":"number","description":"Heavy atom count"},"synonyms":{"type":"array","items":{"type":"string"},"description":"Common names and synonyms (up to 20)"}}},"returns":"Compound properties including molecular formula, weight, IUPAC name, SMILES, InChI key, and common synonyms"},{"name":"safety_data","displayName":"Safety Data","description":"Get GHS hazard classification and safety data for a chemical compound. Returns pictogram codes, signal word, hazard statements (H-codes), and precautionary statements (P-codes).","inputSchema":{"type":"object","properties":{"compound":{"type":"string","description":"Compound name (e.g. \"acetone\") or CAS number (e.g. \"67-64-1\")"}},"required":["compound"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get safety data for acetone","input":{"compound":"acetone"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"cid":{"type":"number","description":"PubChem Compound ID"},"compound":{"type":"string","description":"Query compound name"},"ghs_available":{"type":"boolean","description":"Whether GHS data is available"},"pictograms":{"type":"array","items":{"type":"string"},"description":"GHS pictogram codes"},"signal_word":{"type":"string","description":"Signal word (Danger or Warning)"},"hazard_statements":{"type":"array","items":{"type":"string"},"description":"GHS hazard statements (H-codes)"},"precautionary_statements":{"type":"array","items":{"type":"string"},"description":"Precautionary statements (P-codes)"}}},"returns":"GHS classification including pictograms, signal word, hazard statements (H-codes), and precautionary statements (P-codes)"},{"name":"element_info","displayName":"Element Info","description":"Look up a periodic table element by name, symbol, or atomic number. Returns atomic mass, category, phase, density, melting/boiling point, electron configuration, and discovery info.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Element name (e.g. \"Iron\"), symbol (e.g. \"Fe\"), or atomic number (e.g. \"26\")"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Look up iron","input":{"query":"Fe"}},{"description":"Look up by atomic number","input":{"query":"26"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Element name"},"symbol":{"type":"string","description":"Element symbol"},"atomic_number":{"type":"number","description":"Atomic number"},"atomic_mass":{"type":"number","description":"Atomic mass in u"},"category":{"type":"string","description":"Element category (e.g. transition metal, noble gas)"},"phase":{"type":"string","description":"Phase at room temperature (Solid, Liquid, Gas)"},"density":{"type":"number","description":"Density in g/L or g/cm3"},"melting_point_k":{"type":"number","description":"Melting point in Kelvin"},"boiling_point_k":{"type":"number","description":"Boiling point in Kelvin"},"electron_configuration":{"type":"string","description":"Electron configuration"},"electronegativity_pauling":{"type":"number","description":"Electronegativity (Pauling scale)"},"period":{"type":"number","description":"Period in periodic table"},"group":{"type":"number","description":"Group in periodic table"},"block":{"type":"string","description":"Block (s, p, d, f)"},"discovered_by":{"type":"string","description":"Discovered by"},"summary":{"type":"string","description":"Brief summary"}}},"returns":"Element data including atomic mass, category, phase, density, melting/boiling point, electron configuration, and discovery info"},{"name":"search_compounds","displayName":"Search Compounds","description":"Search for chemical compounds matching a partial name. Uses PubChem autocomplete to find compounds when the exact name is unknown. Returns a list of matching compound names.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Partial compound name to search for (e.g. \"ibupr\", \"meth\", \"chloro\")"},"limit":{"type":"number","description":"Maximum number of results (1-25, default 10)","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for compounds starting with \"ibupr\"","input":{"query":"ibupr"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"compounds":{"type":"array","items":{"type":"string"},"description":"Matching compound names"},"count":{"type":"number","description":"Number of results returned"},"total":{"type":"number","description":"Total matches available"}}},"returns":"List of compound names matching the search query"},{"name":"similar_compounds","displayName":"Similar Compounds","description":"Find compounds structurally similar to a given compound using 2D fingerprint similarity from PubChem. Accepts a compound name or SMILES string and returns similar compounds with their properties.","inputSchema":{"type":"object","properties":{"compound":{"type":"string","description":"Compound name (e.g. \"aspirin\") or SMILES string (e.g. \"CC(=O)OC1=CC=CC=C1C(O)=O\")"},"threshold":{"type":"number","description":"Similarity threshold percentage (80-99, default 90). Higher = more similar.","default":90},"limit":{"type":"number","description":"Maximum number of results (1-25, default 5)","default":5}},"required":["compound"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find compounds similar to aspirin","input":{"compound":"aspirin"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Query compound"},"smiles":{"type":"string","description":"SMILES used for similarity search"},"threshold":{"type":"number","description":"Similarity threshold used"},"similar_compounds":{"type":"array","description":"Similar compounds with CID, IUPAC name, formula, weight, and SMILES"},"count":{"type":"number","description":"Number of similar compounds found"}}},"returns":"Structurally similar compounds with IUPAC names, formulas, weights, and SMILES notation"},{"name":"compare_elements","displayName":"Compare Elements","description":"Side-by-side comparison of two periodic table elements. Compare atomic mass, density, melting/boiling points, electronegativity, electron configuration, and more.","inputSchema":{"type":"object","properties":{"element_a":{"type":"string","description":"First element — name (e.g. \"Iron\"), symbol (e.g. \"Fe\"), or atomic number (e.g. \"26\")"},"element_b":{"type":"string","description":"Second element — name (e.g. \"Copper\"), symbol (e.g. \"Cu\"), or atomic number (e.g. \"29\")"}},"required":["element_a","element_b"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Compare Iron and Copper","input":{"element_a":"Fe","element_b":"Cu"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"comparison":{"type":"object","description":"Side-by-side data for element_a and element_b","properties":{"element_a":{"type":"object","description":"Data for first element"},"element_b":{"type":"object","description":"Data for second element"}}}}},"returns":"Side-by-side comparison of two elements including atomic mass, density, melting/boiling points, electronegativity, and electron configuration"}],"icon":"/icons/chemistry-lookup.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 6 skills: compound_lookup, safety_data, element_info, search_compounds, similar_compounds, compare_elements"]}],"premadePrompt":"Look up [compound name or CAS number] — I need the molecular formula, weight, SMILES notation, and GHS safety data including hazard statements."},{"name":"train-tracker","displayName":"Train Tracker","subtitle":"Live rail data across 15 networks","about":"**Train Tracker** provides real-time rail data across 15 networks in 30+ countries. Search stations, check live departures with delay information, plan journeys with connections, track trains by GPS, and monitor disruptions — from Deutsche Bahn to Amtrak to Seoul Metro.\n\nIt covers Germany, Austria, Switzerland, the UK (both National Rail and TfL), the USA (Amtrak and Boston MBTA), Belgium, Norway, Denmark, Finland, Italy, pan-European cross-border routing, Canada (VIA Rail), and Seoul. Use the EU network for any cross-border European journey — it routes across France, Netherlands, Spain, and 25+ more countries in one call.\n\n### What you can do\n- **station_search** — find train stations by name across all 15 supported networks\n- **live_departures** — real-time departure boards with delays, platforms, and disruption notes\n- **journey_plan** — multi-leg journey planning with connection options and departure times\n- **track_train** — GPS position, speed, and per-station schedule for Amtrak, VIA Rail Canada, and Finland\n- **line_status** — service status for London Tube, Overground, Elizabeth line, DLR, and National Rail\n\n### Who it's for\nCommuters, travellers, and anyone building travel or transit apps. Covers both local commuter networks and long-distance intercity routes across Europe and North America.\n\n### How to use it\n1. Use **station_search** with a station name and network code (e.g. \"de\" for Germany, \"gb\" for UK National Rail) to find the station ID\n2. Call **live_departures** with the station name and network to see what's leaving in the next hour\n3. For a complete journey, use **journey_plan** with origin and destination — use network \"eu\" for cross-border European trips\n4. Track a specific train by number with **track_train** — supports Amtrak (us-amtrak), VIA Rail (ca), and Finland (fi)\n\n### Getting started\nNo setup needed for most networks. Connect your TfL account for higher rate limits on London queries.","version":"0.04","categories":["data"],"currency":"USD","skills":[{"name":"station_search","displayName":"Station Search","description":"Find train stations by name across 12 networks in 10 countries: Germany, Austria, Switzerland, UK (London TfL + National Rail), USA (Amtrak + Boston MBTA), Belgium, Norway, Denmark, Finland, and Italy. Returns station IDs, names, coordinates, and available transport types.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Station name or search term (e.g. \"Berlin\", \"Paddington\", \"Oslo S\", \"Bruxelles\")"},"network":{"type":"string","enum":["de","at","ch","gb-london","gb","us-amtrak","us-boston","be","no","dk","fi","it","eu","ca","kr-seoul"],"description":"Rail network ID: de, at, ch, gb-london, gb, us-amtrak, us-boston, be, no, dk, fi, it, eu, ca, kr-seoul"}},"required":["query","network"]},"annotations":{},"examples":[{"description":"Berlin stations","input":{"query":"Berlin","network":"de"}},{"description":"UK National Rail","input":{"query":"Manchester","network":"gb"}},{"description":"Brussels stations","input":{"query":"Bruxelles","network":"be"}},{"description":"Oslo stations","input":{"query":"Oslo","network":"no"}},{"description":"Helsinki stations","input":{"query":"Helsinki","network":"fi"}},{"description":"Rome stations","input":{"query":"Roma","network":"it"}}],"pricing":"free","returns":"List of matching stations with IDs, names, coordinates, and available skills"},{"name":"live_departures","displayName":"Live Departures","description":"Real-time departure boards for 11 networks (DE, AT, CH, TfL, GB, MBTA, BE, NO, DK, FI, IT). Shows next trains with destination, line, times, delays, platform, and remarks. Accepts station names or IDs. Not available for Amtrak — use track_train.","inputSchema":{"type":"object","properties":{"station":{"type":"string","description":"Station name or ID (e.g. \"Berlin Hbf\", \"PAD\", \"Bruxelles-Central\", \"Oslo S\")"},"network":{"type":"string","enum":["de","at","ch","gb-london","gb","us-amtrak","us-boston","be","no","dk","fi","it","eu","ca","kr-seoul"],"description":"Rail network ID: de, at, ch, gb-london, gb, us-amtrak, us-boston, be, no, dk, fi, it, eu, ca, kr-seoul"},"duration_minutes":{"type":"number","minimum":1,"maximum":360,"default":60,"description":"Time window in minutes (HAFAS networks only)"}},"required":["station","network"]},"annotations":{},"examples":[{"description":"Berlin Hbf departures","input":{"station":"Berlin Hauptbahnhof","network":"de"}},{"description":"London Paddington (National Rail)","input":{"station":"PAD","network":"gb"}},{"description":"Brussels Central","input":{"station":"Bruxelles-Central","network":"be"}},{"description":"Oslo S departures","input":{"station":"Oslo S","network":"no"}},{"description":"Copenhagen departures","input":{"station":"København H","network":"dk"}},{"description":"Helsinki departures","input":{"station":"Helsinki","network":"fi"}},{"description":"Roma Termini","input":{"station":"Roma","network":"it"}},{"description":"Boston South Station","input":{"station":"South Station","network":"us-boston"}}],"pricing":"free","returns":"Departures with direction, line, product, times, delay_minutes, platform, remarks"},{"name":"journey_plan","displayName":"Journey Planner","description":"Plan train journeys in 7 networks: Germany, Austria, Switzerland, London TfL, Belgium, Norway, and Denmark. Returns multiple journey options with departure/arrival times, duration, changes, and leg-by-leg details. Belgium, Norway, and Denmark accept station names directly.","inputSchema":{"type":"object","properties":{"origin":{"type":"string","description":"Departure station name or ID"},"destination":{"type":"string","description":"Arrival station name or ID"},"network":{"type":"string","enum":["de","at","ch","gb-london","gb","us-amtrak","us-boston","be","no","dk","fi","it","eu","ca","kr-seoul"],"description":"Rail network ID: de, at, ch, gb-london, gb, us-amtrak, us-boston, be, no, dk, fi, it, eu, ca, kr-seoul"},"departure_time":{"type":"string","description":"ISO 8601 departure time (defaults to now)"}},"required":["origin","destination","network"]},"annotations":{},"examples":[{"description":"Munich to Berlin","input":{"origin":"München","destination":"Berlin","network":"de"}},{"description":"Brussels to Bruges","input":{"origin":"Bruxelles-Central","destination":"Brugge","network":"be"}},{"description":"Oslo to Bergen","input":{"origin":"Oslo S","destination":"Bergen","network":"no"}},{"description":"Copenhagen to Aarhus","input":{"origin":"København H","destination":"Aarhus","network":"dk"}},{"description":"Zurich to Geneva","input":{"origin":"Zurich","destination":"Geneva","network":"ch"}}],"pricing":"free","returns":"Journey options with departure/arrival, duration, changes, and legs with line/platform/delay"},{"name":"track_train","displayName":"Track Train","description":"Track active trains in real-time. USA Amtrak: GPS position, speed, heading, per-station schedule. Canada VIA Rail: GPS position, speed, departed/arrived stations. Finland: scheduled/actual times, delays, cancellation status. Pass network=\"ca\" for Canada, network=\"fi\" for Finland, defaults to Amtrak.","inputSchema":{"type":"object","properties":{"train_number":{"type":"string","description":"Train number (e.g. \"19\" for Amtrak, \"1\" for VIA Rail Canadian, \"1\" for Finnish IC1)"},"network":{"type":"string","enum":["us-amtrak","fi","ca"],"default":"us-amtrak","description":"us-amtrak, ca (VIA Rail), or fi (Finland)"}},"required":["train_number"]},"annotations":{},"examples":[{"description":"Track Amtrak Crescent","input":{"train_number":"19"}},{"description":"Track VIA Rail Canadian","input":{"train_number":"1","network":"ca"}},{"description":"Track Finnish IC train","input":{"train_number":"1","network":"fi"}}],"pricing":"free","returns":"Train position, status, route, and per-station schedule with delays"},{"name":"line_status","displayName":"Line Status (London)","description":"Service status for London transport lines: Tube, Overground, Elizabeth line, DLR, National Rail, Trams. Shows good service, delays, part closures, and disruption reasons.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["tube","overground","elizabeth-line","dlr","national-rail","tram"],"default":"tube","description":"Transport mode (default: tube)"},"line":{"type":"string","description":"Specific line ID (e.g. \"piccadilly\", \"northern\"). Omit for all lines."}}},"annotations":{},"examples":[{"description":"All Tube lines","input":{"mode":"tube"}},{"description":"Northern line","input":{"line":"northern"}}],"pricing":"free","returns":"Per-line status with severity, disruption reasons, and summary"}],"icon":"/icons/train-tracker.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 5 networks: Deutsche Bahn, ÖBB, SBB, TfL, Amtrak"]},{"version":"0.02","date":"2026-03-22","changes":["Added 7 new networks: UK National Rail (Huxley2), MBTA Boston, Belgium (iRail), Norway (Entur), Denmark (Rejseplanen), Finland (Digitraffic), Italy (ViaggiaTreno)","Journey planning now available for Belgium, Norway, and Denmark","Train tracking now available for Finland via Digitraffic","Total: 12 networks across 10 countries"]},{"version":"0.03","date":"2026-03-23","changes":["Added MOTIS (pan-European routing across 30+ countries — France, Netherlands, Spain, Poland, Czech Republic, Hungary, Ireland, Sweden, Portugal, and more)","Added VIA Rail Canada (GPS tracking for all Canadian trains)","Added Seoul Metro South Korea (real-time subway arrivals)","Total: 15 networks covering 30+ countries"]},{"version":"0.04","date":"2026-04-04","changes":["Journey planning now auto-routes through MOTIS for Italy, Finland, and UK when the local network only supports departures or tracking"]}],"premadePrompt":"What trains are departing from [station] in the next hour? I want to get from [origin] to [destination] — what are my options?","requirements":[{"name":"tfl","type":"secret","displayName":"TfL API Key","description":"Transport for London API key for higher rate limits (500/min vs 50/min). Free at api-portal.tfl.gov.uk","envFallback":"TFL_API_KEY"}],"credentials":[{"name":"tfl","type":"secret","displayName":"TfL API Key","description":"Transport for London API key for higher rate limits (500/min vs 50/min). Free at api-portal.tfl.gov.uk","envFallback":"TFL_API_KEY"}]},{"name":"regulatory-actions","displayName":"Regulatory Actions","subtitle":"SEC, CFPB, FDIC & Federal Register","about":"**Regulatory Actions** searches enforcement actions and regulatory filings from US financial regulators. Query SEC litigation releases, CFPB consumer finance enforcement, FDIC bank failures, and Federal Register rules from a single tool — all pulling from official government sources.\n\nFinancial compliance research used to mean navigating separate agency websites and hoping their search worked. This tool aggregates the key US regulatory databases into one place so you can run broad monitoring, investigate a specific company's regulatory history, or track new rules being proposed in your industry.\n\n### What you can do\n- **sec_enforcement** — search SEC litigation releases and accounting enforcement actions by keyword and date range\n- **cfpb_enforcement** — browse CFPB consumer finance enforcement actions with respondent and product filters\n- **fdic_failures** — look up FDIC bank failures by year and state with acquiring institution details\n- **federal_register** — search rules, proposed rules, and notices from any federal agency\n\n### Who it's for\nCompliance officers monitoring regulatory activity in financial services, lawyers researching enforcement history for due diligence, analysts tracking banking sector stability, journalists and researchers investigating regulatory actions against companies, and risk teams staying ahead of proposed rule changes.\n\n### How to use it\n1. To check if a company has an enforcement history, call **sec_enforcement** and **cfpb_enforcement** both with the company name as the query.\n2. To monitor new banking regulation, call **federal_register** with a keyword like \"mortgage\" or \"cryptocurrency\" and filter by type \"proposed_rule\".\n3. To research bank failures in a region, call **fdic_failures** with a year and state filter.\n\n### Getting started\nAll skills default to recent results with no query required — call any of them without parameters to see the latest activity in that category.","version":"0.01","categories":["finance","security"],"currency":"USD","skills":[{"name":"sec_enforcement","displayName":"SEC Enforcement","description":"Search SEC enforcement actions including litigation releases and accounting/auditing enforcement releases via EDGAR full-text search. Filter by keyword and date range.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword search (e.g. company name, person, topic). Defaults to broad enforcement search if omitted."},"days":{"type":"number","description":"Number of days to look back (default: 90)"}},"required":[]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Search recent SEC enforcement actions","input":{}},{"description":"Search SEC actions related to fraud","input":{"query":"fraud","days":180}},{"description":"Search SEC actions for a specific company","input":{"query":"Goldman Sachs"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used (null if none)"},"date_range":{"type":"object","description":"Start/end dates and number of days searched"},"actions":{"type":"array","description":"Litigation releases with release number, date, respondent name, and URL to full release"},"count":{"type":"number","description":"Number of actions returned"},"source":{"type":"string","description":"Data source"}}},"returns":"SEC litigation releases with release number, date, respondent names, and links to full release details"},{"name":"cfpb_enforcement","displayName":"CFPB Enforcement","description":"Browse enforcement actions from the Consumer Financial Protection Bureau. Search by keyword to find actions against specific companies or involving specific financial products.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword search to filter actions (e.g. company name, product type like \"mortgage\" or \"credit card\")"},"limit":{"type":"number","description":"Maximum number of results to return (default: 20)"}},"required":[]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get recent CFPB enforcement actions","input":{}},{"description":"Search CFPB actions involving mortgages","input":{"query":"mortgage"}},{"description":"Search CFPB actions against a specific company","input":{"query":"Wells Fargo","limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used (null if none)"},"actions":{"type":"array","description":"Enforcement actions with name, filing date, status, respondents, products, and relief types"},"count":{"type":"number","description":"Number of actions returned"},"source":{"type":"string","description":"Data source"}}},"returns":"CFPB enforcement actions with case name, filing/settlement dates, respondents, financial products involved, and types of relief"},{"name":"fdic_failures","displayName":"FDIC Bank Failures","description":"Look up FDIC bank failures including bank name, location, acquiring institution, and closing date. Filter by year and state to analyze banking sector stability.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Filter by closing year (e.g. 2023)"},"state":{"type":"string","description":"Filter by US state abbreviation (e.g. \"CA\", \"NY\", \"TX\")"},"limit":{"type":"number","description":"Maximum number of results to return (default: 50)"}},"required":[]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all recent FDIC bank failures","input":{}},{"description":"Get bank failures in 2023","input":{"year":2023}},{"description":"Get bank failures in California","input":{"state":"CA","limit":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"filters":{"type":"object","description":"Applied filters (year, state)"},"failures":{"type":"array","description":"Bank failures with bank name, city, state, cert number, acquiring institution, closing date, and fund"},"count":{"type":"number","description":"Number of failures returned"},"source":{"type":"string","description":"Data source"}}},"returns":"FDIC bank failures with bank name, location, certificate number, acquiring institution, closing date, and insurance fund"},{"name":"federal_register","displayName":"Federal Register","description":"Search the Federal Register for rules, proposed rules, and notices from federal agencies. Filter by keyword, document type, and agency to track regulatory activity.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword search (e.g. \"cryptocurrency\", \"emissions\", \"banking\")"},"type":{"type":"string","enum":["rule","proposed_rule","notice","presidential_document","all"],"description":"Document type filter (default: \"all\")"},"agency":{"type":"string","description":"Filter by agency slug (e.g. \"securities-and-exchange-commission\", \"consumer-financial-protection-bureau\")"},"limit":{"type":"number","description":"Maximum number of results to return (default: 20, max: 20)"}},"required":[]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get the latest Federal Register documents","input":{}},{"description":"Search for final rules about cryptocurrency","input":{"query":"cryptocurrency","type":"rule"}},{"description":"Get proposed rules from the SEC","input":{"type":"proposed_rule","agency":"securities-and-exchange-commission"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used (null if none)"},"type_filter":{"type":"string","description":"Document type filter applied"},"agency_filter":{"type":"string","description":"Agency filter applied (null if none)"},"documents":{"type":"array","description":"Federal Register documents with title, abstract, publication date, agencies, document number, URLs, CFR references, and significance"},"count":{"type":"number","description":"Number of documents returned"},"total_results":{"type":"number","description":"Total documents matching the query"},"source":{"type":"string","description":"Data source"}}},"returns":"Federal Register documents with title, abstract, publication date, agency names, type, CFR references, docket IDs, and links to full text"}],"icon":"/icons/regulatory-actions.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 4 skills: sec_enforcement, cfpb_enforcement, fdic_failures, federal_register"]}],"premadePrompt":"Has [company name] been the subject of any SEC or CFPB enforcement actions? Also show me any recent Federal Register rules related to [topic, e.g. cryptocurrency / mortgage lending]."},{"name":"economic-calendar","displayName":"Economic Calendar","subtitle":"Earnings, IPOs, FOMC & events","about":"**Economic Calendar** is a complete financial scheduling tool covering every major market-moving event in one place. From central bank rate decisions to corporate earnings to monthly jobs data — it has the dates, times, and context you need to plan around.\n\nIt covers the full calendar surface: exchange holidays so you know when markets are closed, options expiry dates for derivatives planning, earnings schedules with EPS forecasts, the IPO pipeline, FOMC and ECB and BOE meeting dates, and the key data release schedule for NFP, CPI, GDP, and more. Everything defaults to the current year so you can get what you need without specifying dates.\n\n### What you can do\n- **earnings_calendar** — companies reporting on a given date with EPS forecasts and pre/after-market timing\n- **ipo_calendar** — upcoming, priced, filed, and withdrawn IPOs for any month\n- **economic_events** — this week's global macro events with impact ratings and currency filters\n- **market_holidays** — exchange open/close dates for NYSE, CME, LSE, and TSE\n- **options_expiry** — monthly, weekly, and quarterly options expiration dates\n- **fomc_meetings**, **ecb_meetings**, **boe_meetings** — central bank meeting schedules with projection/report flags\n- **data_releases** — scheduled release dates for NFP, CPI, PPI, GDP, PCE, and ISM\n\n### Who it's for\nTraders, portfolio managers, analysts, and anyone who needs to plan around market events. Useful for both daily trading decisions and longer-term financial research.\n\n### How to use it\n1. Call **economic_events** to see what's happening this week with high-impact flags.\n2. Use **earnings_calendar** to check which companies are reporting on a specific date.\n3. Cross-reference with **market_holidays** to confirm exchanges are open on your target date.\n\n### Getting started\nCall **economic_events** without any filters to get this week's full macro calendar.","version":"0.03","categories":["finance"],"currency":"USD","skills":[{"name":"market_holidays","displayName":"Market Holidays","description":"Returns stock exchange holidays for a given year. Covers NYSE, CME, LSE (London), and TSE (Tokyo). US holidays include major federal holidays. LSE follows UK bank holidays. TSE follows Japanese national holidays. Handles weekend observance rules.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year to get holidays for (e.g. 2026). Defaults to current year."},"exchange":{"type":"string","enum":["nyse","cme","lse","tse","all"],"description":"Exchange to get holidays for. \"nyse\" (default), \"cme\", \"lse\" (London), \"tse\" (Tokyo), or \"all\"."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"examples":[{"description":"Get NYSE holidays for 2026","input":{"year":2026}},{"description":"Get all exchange holidays for current year","input":{"exchange":"all"}},{"description":"Get London Stock Exchange holidays","input":{"exchange":"lse"}},{"description":"Get Tokyo Stock Exchange holidays","input":{"exchange":"tse"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number"},"exchange":{"type":"string"},"holiday_count":{"type":"number"},"holidays":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"holiday_name":{"type":"string"},"day_of_week":{"type":"string"},"exchange":{"type":"string"},"observed":{"type":"boolean"}}}}}},"returns":"Array of holidays with date, name, day of week, exchange, and whether the date is an observed holiday (shifted from weekend)."},{"name":"options_expiry","displayName":"Options Expiry","description":"Calculates options expiration dates for U.S. equity options. Supports monthly (3rd Friday), weekly (every Friday), and quarterly (3rd Friday of Mar/Jun/Sep/Dec) expiration types. Filter by month or get the full year.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year to calculate expirations for. Defaults to current year."},"month":{"type":"number","description":"Month (1-12) to filter results. Omit for all months."},"type":{"type":"string","enum":["monthly","weekly","quarterly","all"],"description":"Expiration type: \"monthly\" (default), \"weekly\", \"quarterly\", or \"all\"."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"examples":[{"description":"Get monthly options expiry dates for 2026","input":{"year":2026}},{"description":"Get all expiry types for March 2026","input":{"year":2026,"month":3,"type":"all"}},{"description":"Get quarterly expiry dates","input":{"type":"quarterly"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number"},"type":{"type":"string"},"month":{"type":["number","string"]},"expiry_count":{"type":"number"},"expirations":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"type":{"type":"string"},"day_of_week":{"type":"string"},"month":{"type":"number"},"is_quarterly":{"type":"boolean"}}}}}},"returns":"Array of expiration dates with type (monthly/weekly/quarterly), day of week, and notes on settlement rules."},{"name":"fomc_meetings","displayName":"FOMC Meetings","description":"Returns the Federal Reserve FOMC meeting schedule for a given year. Includes confirmed dates for 2024-2026 and estimated dates for other years. Shows which meetings include the Summary of Economic Projections (SEP/dot plot) and statement release timing.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year to get FOMC schedule for. Defaults to current year."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"examples":[{"description":"Get 2026 FOMC meeting schedule","input":{"year":2026}},{"description":"Get current year FOMC schedule","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number"},"meeting_count":{"type":"number"},"data_source":{"type":"string"},"meetings":{"type":"array","items":{"type":"object","properties":{"start_date":{"type":"string"},"end_date":{"type":"string"},"statement_release_date":{"type":"string"},"is_summary_of_projections":{"type":"boolean"},"estimated":{"type":"boolean"}}}}}},"returns":"Array of FOMC meetings with start/end dates, statement release date, whether SEP/dot plot is included, and whether dates are confirmed or estimated."},{"name":"data_releases","displayName":"Data Releases","description":"Generates the schedule for major U.S. economic data releases including NFP (employment), CPI/PPI/PCE (inflation), GDP, ISM Manufacturing and Services, Retail Sales, Housing Starts, and Initial Claims. Filter by month and category.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year for the release schedule. Defaults to current year."},"month":{"type":"number","description":"Month (1-12) to filter results. Omit for all months."},"category":{"type":"string","enum":["employment","inflation","gdp","housing","manufacturing","consumer","all"],"description":"Filter by category: \"employment\", \"inflation\", \"gdp\", \"housing\", \"manufacturing\", \"consumer\", or \"all\" (default)."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"examples":[{"description":"Get all economic releases for March 2026","input":{"year":2026,"month":3}},{"description":"Get inflation data release dates","input":{"category":"inflation"}},{"description":"Get employment releases for current month","input":{"category":"employment"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number"},"month":{"type":["number","string"]},"category":{"type":"string"},"release_count":{"type":"number"},"releases":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"day_of_week":{"type":"string"},"indicator":{"type":"string"},"category":{"type":"string"},"description":{"type":"string"},"frequency":{"type":"string"}}}}}},"returns":"Array of economic data releases with date, indicator name, category, description, and release frequency pattern."},{"name":"ecb_meetings","displayName":"ECB Meetings","description":"Returns the ECB Governing Council monetary policy meeting schedule for a given year. Includes confirmed dates for 2025-2026 and estimated dates for other years. All meetings include a press conference. Rate decisions announced at 14:15 CET.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year to get ECB schedule for. Defaults to current year."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"examples":[{"description":"Get 2026 ECB meeting schedule","input":{"year":2026}},{"description":"Get current year ECB schedule","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number"},"meeting_count":{"type":"number"},"data_source":{"type":"string"},"meetings":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"type":{"type":"string"},"is_press_conference":{"type":"boolean"},"estimated":{"type":"boolean"}}}}}},"returns":"Array of ECB Governing Council monetary policy meetings with dates, press conference timing, and whether dates are confirmed or estimated."},{"name":"boe_meetings","displayName":"BOE MPC Meetings","description":"Returns the Bank of England Monetary Policy Committee (MPC) meeting schedule for a given year. Includes confirmed dates for 2025-2026 and estimated dates for other years. Shows which meetings coincide with the Monetary Policy Report (Feb, May, Aug, Nov). Rate decisions announced at 12:00 GMT.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Year to get BOE MPC schedule for. Defaults to current year."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"examples":[{"description":"Get 2026 BOE MPC meeting schedule","input":{"year":2026}},{"description":"Get current year BOE schedule","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number"},"meeting_count":{"type":"number"},"data_source":{"type":"string"},"meetings":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"type":{"type":"string"},"is_press_conference":{"type":"boolean"},"is_monetary_policy_report":{"type":"boolean"},"estimated":{"type":"boolean"}}}}}},"returns":"Array of Bank of England MPC meetings with dates, Monetary Policy Report flag, and whether dates are confirmed or estimated."},{"name":"earnings_calendar","displayName":"Earnings Calendar","description":"Corporate earnings reporting schedule from Nasdaq. Shows which companies report on a given date with EPS forecasts, market cap, number of analyst estimates, and reporting time (pre-market or after-hours). Supports multi-day views up to 7 days.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format. Defaults to today."},"days":{"type":"number","description":"Number of days to fetch (1-7). Defaults to 1."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get today's earnings calendar","input":{}},{"description":"Get earnings for a specific date","input":{"date":"2026-03-24"}},{"description":"Get earnings for the next 5 days","input":{"days":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"date":{"type":"string"},"date_range":{"type":"string"},"count":{"type":"number"},"earnings":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"name":{"type":"string"},"market_cap":{"type":"string"},"fiscal_quarter":{"type":"string"},"eps_forecast":{"type":["number","null"]},"num_estimates":{"type":"number"},"reporting_time":{"type":"string"},"last_year_eps":{"type":["number","null"]},"last_year_date":{"type":"string"}}}},"source":{"type":"string"}}},"returns":"Array of earnings reports with symbol, company name, market cap, EPS forecast, number of estimates, reporting time, and prior year comparison."},{"name":"ipo_calendar","displayName":"IPO Calendar","description":"IPO pipeline from Nasdaq covering upcoming, priced, filed, and withdrawn initial public offerings. View the full IPO calendar for any month with share prices, exchange listings, and deal values.","inputSchema":{"type":"object","properties":{"month":{"type":"string","description":"Month in YYYY-MM format. Defaults to current month."},"section":{"type":"string","enum":["upcoming","priced","filed","withdrawn","all"],"description":"IPO section to view: \"upcoming\" (default), \"priced\", \"filed\", \"withdrawn\", or \"all\"."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get upcoming IPOs this month","input":{}},{"description":"Get all IPO activity for a specific month","input":{"month":"2026-04","section":"all"}},{"description":"Get recently priced IPOs","input":{"section":"priced"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"month":{"type":"string"},"section":{"type":"string"},"count":{"type":"number"},"ipos":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"company":{"type":"string"},"exchange":{"type":"string"},"share_price":{"type":"string"},"shares_offered":{"type":"string"},"dollar_value":{"type":"string"},"date":{"type":"string"},"status":{"type":"string"},"section":{"type":"string"}}}},"by_section":{"type":"object"},"source":{"type":"string"}}},"returns":"Array of IPOs with ticker, company, exchange, share price range, shares offered, dollar value, date, and deal status."},{"name":"economic_events","displayName":"Economic Events","description":"Global economic event calendar for the current week from ForexFactory. Covers major market-moving events like Non-Farm Payrolls, CPI, rate decisions, GDP, and more across all major economies (US, Euro Area, UK, Japan, Australia, Canada, etc.). Filter by impact level or country.","inputSchema":{"type":"object","properties":{"impact":{"type":"string","enum":["high","medium","low","all"],"description":"Filter by impact level: \"high\" (market-movers only), \"medium\", \"low\", or \"all\" (default)."},"country":{"type":"string","description":"Filter by currency code: USD, EUR, GBP, JPY, AUD, NZD, CAD, CHF, CNY."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get all economic events this week","input":{}},{"description":"Get only high-impact events","input":{"impact":"high"}},{"description":"Get US economic events","input":{"country":"USD"}},{"description":"Get high-impact Euro Area events","input":{"impact":"high","country":"EUR"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"week":{"type":"string"},"count":{"type":"number"},"events":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"},"date":{"type":"string"},"day_of_week":{"type":"string"},"time":{"type":"string"},"impact":{"type":"string"},"forecast":{"type":"string"},"previous":{"type":"string"}}}},"by_impact":{"type":"object","properties":{"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"}}},"source":{"type":"string"}}},"returns":"Array of economic events with title, country, currency, date, time, impact level, forecast, and previous values. Includes impact breakdown summary."}],"icon":"/icons/economic-calendar.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with market holidays, options expiry, FOMC meetings, and data releases"]},{"version":"0.02","date":"2026-03-22","changes":["Added ecb_meetings skill — ECB Governing Council monetary policy meeting schedule (confirmed 2025-2026, estimated for other years)","Added boe_meetings skill — Bank of England MPC meeting schedule with Monetary Policy Report dates","Added LSE (London Stock Exchange) and TSE (Tokyo Stock Exchange) holidays to market_holidays"]},{"version":"0.03","date":"2026-03-23","changes":["Added earnings_calendar skill — corporate earnings reporting schedule from Nasdaq with EPS forecasts, multi-day support","Added ipo_calendar skill — IPO pipeline (upcoming, priced, filed, withdrawn) from Nasdaq","Added economic_events skill — global economic event calendar from ForexFactory with impact/country filters"]}],"premadePrompt":"What are the high-impact economic events happening this week? Also show me the upcoming earnings calendar and any FOMC meetings scheduled for this year."},{"name":"tax-reference","displayName":"Tax Reference","subtitle":"US tax brackets, rates & limits","about":"**Tax Reference** is a fast lookup tool for US federal tax data — income brackets, capital gains rates, retirement contribution limits, estate and gift tax thresholds, and depreciation schedules. All data comes from IRS publications and covers 2024–2026 including TCJA sunset notes.\n\nIt's built for quick, accurate answers to the questions that come up most in tax planning: what are the 2025 brackets for a married couple? How much can I put in my Roth IRA this year? What's the LTCG rate on a $200k gain? How do I depreciate this equipment? Pass your income to get a full marginal tax breakdown on the spot.\n\n### What you can do\n- **tax_brackets** — income tax brackets and standard deductions for 2024–2026; pass income for a marginal tax calculation\n- **capital_gains** — long-term and short-term rates, NIIT thresholds, collectibles, Section 1250 unrecaptured gain rate\n- **retirement_limits** — contribution limits for 401k, IRA, HSA, SEP, SIMPLE, and 457(b) with catch-up amounts and phase-outs\n- **estate_gift_tax** — estate exemptions, annual gift exclusions, GSTT, TCJA sunset impact, and portability rules\n- **depreciation** — MACRS, straight-line, or Section 179 schedules with year-by-year breakdown and bonus depreciation phase-down\n\n### Who it's for\nFinancial planners, accountants, tax professionals, and individual filers who need quick and accurate US federal tax reference data. Useful for any AI assistant that handles financial planning questions.\n\n### How to use it\n1. Use **tax_brackets** with a year and filing status to get the rate table — pass an income amount to get your estimated tax with marginal breakdown\n2. Use **capital_gains** to find the rate that applies to your gain — check NIIT if you're above the income threshold\n3. Use **retirement_limits** to confirm contribution limits and phase-out ranges before advising on retirement planning\n4. Use **depreciation** with an asset cost and class to generate a full year-by-year schedule\n\n### Getting started\nNo setup needed — all five skills work immediately with no credentials or configuration required.","version":"0.01","categories":["finance"],"currency":"USD","skills":[{"name":"tax_brackets","displayName":"Tax Brackets","description":"Federal income tax brackets and standard deductions for 2024, 2025, and 2026 (TCJA sunset). Supports all filing statuses. Optionally calculates tax owed with a marginal breakdown when income is provided.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year: 2024, 2025, or 2026 (default: 2025)"},"filing_status":{"type":"string","enum":["single","married_filing_jointly","married_filing_separately","head_of_household"],"description":"Filing status (default: single)"},"income":{"type":"number","description":"Optional gross income — if provided, calculates estimated federal income tax with marginal breakdown"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Get 2025 tax brackets for single filer","input":{}},{"description":"Get married filing jointly brackets","input":{"filing_status":"married_filing_jointly"}},{"description":"Calculate tax on $150,000 income","input":{"income":150000,"filing_status":"single"}},{"description":"Compare 2024 brackets","input":{"year":2024}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year"},"filing_status":{"type":"string","description":"Filing status used"},"brackets":{"type":"array","description":"Tax brackets with rate, income_over, and but_not_over"},"standard_deduction":{"type":"number","description":"Standard deduction amount"},"tax_estimate":{"type":"object","description":"Tax calculation breakdown (only if income was provided)"},"source":{"type":"string","description":"IRS source document"}}},"returns":"Tax brackets with rates and thresholds, standard deduction, and optional tax estimate with marginal breakdown"},{"name":"capital_gains","displayName":"Capital Gains","description":"Long-term and short-term capital gains tax rates, Net Investment Income Tax (NIIT) thresholds, collectibles rate (28%), Section 1250 unrecaptured gain rate (25%), and qualified small business stock exclusion.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year: 2024 or 2025 (default: 2025)"},"filing_status":{"type":"string","enum":["single","married_filing_jointly","married_filing_separately","head_of_household"],"description":"Filing status (default: single)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Get 2025 capital gains rates for single filer","input":{}},{"description":"Get capital gains rates for married filing jointly","input":{"filing_status":"married_filing_jointly"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year"},"filing_status":{"type":"string","description":"Filing status"},"long_term_capital_gains":{"type":"object","description":"Long-term rates (0%, 15%, 20%) with income thresholds"},"short_term_capital_gains":{"type":"object","description":"Short-term rates (taxed as ordinary income)"},"net_investment_income_tax":{"type":"object","description":"NIIT 3.8% surtax details and thresholds"},"special_rates":{"type":"object","description":"Collectibles (28%), Section 1250 (25%), QSBS exclusion"},"source":{"type":"string","description":"IRS source document"}}},"returns":"Capital gains rates, NIIT thresholds, collectibles rate, Section 1250 rate, and qualified dividends treatment"},{"name":"retirement_limits","displayName":"Retirement Limits","description":"Contribution limits for 401(k), 403(b), Traditional IRA, Roth IRA, HSA, SEP IRA, SIMPLE IRA, and 457(b) plans. Includes catch-up contributions, SECURE 2.0 enhanced catch-up for ages 60-63, Roth IRA income phase-outs, and Traditional IRA deduction phase-outs.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year: 2024 or 2025 (default: 2025)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Get 2025 retirement contribution limits","input":{}},{"description":"Get 2024 retirement limits","input":{"year":2024}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year"},"contribution_limits":{"type":"array","description":"Limits for each account type with base, catch-up, and total"},"roth_ira_income_phaseout":{"type":"object","description":"MAGI ranges where Roth IRA contributions phase out"},"traditional_ira_deduction_phaseout":{"type":"object","description":"MAGI ranges where Traditional IRA deduction phases out"},"additional_thresholds":{"type":"object","description":"Section 415 limits, HCE threshold, Social Security wage base"},"source":{"type":"string","description":"IRS source document"}}},"returns":"Retirement account contribution limits, catch-up amounts, income phase-out ranges, and key thresholds"},{"name":"estate_gift_tax","displayName":"Estate & Gift Tax","description":"Federal estate tax exemptions, annual gift tax exclusions, generation-skipping transfer tax, estate tax rate schedule, and TCJA sunset planning notes. Includes portability rules and anti-clawback confirmation for pre-sunset gifts.","inputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year: 2024, 2025, or 2026 (default: 2025)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Get 2025 estate and gift tax thresholds","input":{}},{"description":"Check 2026 TCJA sunset impact","input":{"year":2026}}],"pricing":"free","outputSchema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year"},"estate_tax":{"type":"object","description":"Exemption amounts, rate schedule, and portability rules"},"gift_tax":{"type":"object","description":"Annual exclusion, lifetime exemption, unlimited marital deduction"},"generation_skipping_transfer_tax":{"type":"object","description":"GSTT exemption and rate"},"tcja_sunset_warning":{"type":"object","description":"TCJA sunset impact on exemption amounts"},"source":{"type":"string","description":"IRS source document"}}},"returns":"Estate tax exemptions, gift tax exclusions, GSTT, rate schedule, and TCJA sunset planning guidance"},{"name":"depreciation","displayName":"Depreciation","description":"Generate MACRS, straight-line, or Section 179 depreciation schedules. Supports 3, 5, 7, 10, 15, 20, 27.5, and 39-year asset classes. Returns year-by-year depreciation, cumulative totals, and remaining book value. Includes bonus depreciation phase-down schedule.","inputSchema":{"type":"object","properties":{"asset_cost":{"type":"number","description":"Original cost or basis of the asset in dollars"},"asset_class":{"type":"string","enum":["3_year","5_year","7_year","10_year","15_year","20_year","27.5_year","39_year"],"description":"MACRS asset class / recovery period (default: 7_year)"},"method":{"type":"string","enum":["macrs","straight_line","section_179"],"description":"Depreciation method (default: macrs)"}},"required":["asset_cost"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Depreciate $50,000 of office furniture (7-year MACRS)","input":{"asset_cost":50000}},{"description":"Depreciate a $35,000 vehicle (5-year)","input":{"asset_cost":35000,"asset_class":"5_year"}},{"description":"Section 179 on $100,000 of equipment","input":{"asset_cost":100000,"method":"section_179"}},{"description":"Straight-line on a rental property","input":{"asset_cost":300000,"asset_class":"27.5_year","method":"straight_line"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"method":{"type":"string","description":"Depreciation method used"},"asset_cost":{"type":"number","description":"Original asset cost"},"asset_class":{"type":"string","description":"MACRS asset class"},"asset_description":{"type":"string","description":"Types of property in this class"},"schedule":{"type":"array","description":"Year-by-year depreciation with rate, amount, cumulative, and book value"},"bonus_depreciation_2025":{"type":"object","description":"Bonus depreciation details and phase-down schedule"},"section_179_alternative":{"type":"object","description":"Section 179 limits if applicable"},"source":{"type":"string","description":"IRS source document"}}},"returns":"Year-by-year depreciation schedule with amounts, cumulative totals, book values, plus bonus depreciation and Section 179 details"}],"icon":"/icons/tax-reference.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 5 skills: tax_brackets, capital_gains, retirement_limits, estate_gift_tax, depreciation"]}],"premadePrompt":"What are the 2025 federal income tax brackets for a [single/married filing jointly] filer? If my income is $[amount], how much tax do I owe?"},{"name":"financial-calculator","displayName":"Financial Calculator","subtitle":"DCF, bonds, options & portfolios","about":"**Financial Calculator** handles the quantitative side of finance — valuation models, bond math, options pricing, loan schedules, and portfolio analytics — with precision. No spreadsheet setup, no formula errors, just clean results with full workings.\n\nIt covers the core financial calculation toolkit: DCF valuation with Gordon Growth or exit multiple terminal values, WACC with CAPM support, Black-Scholes option pricing with all Greeks, bond pricing and yield-to-maturity solving, loan amortization with extra payment scenarios, present and future value solving, and portfolio risk metrics including Sharpe ratio, Sortino ratio, and maximum drawdown.\n\n### What you can do\n- **dcf_valuation** — discounted cash flow model with terminal value and per-year present value breakdown\n- **wacc_calculator** — weighted average cost of capital from capital structure with optional CAPM for equity cost\n- **bond_pricing** — price a bond from yield or solve for yield from market price, with duration and convexity\n- **option_pricing** — Black-Scholes pricing for calls and puts with full Greeks (delta, gamma, theta, vega, rho)\n- **loan_amortization** — payment schedules with monthly/biweekly/weekly frequency and extra payment modelling\n- **time_value** — solve for any unknown in PV/FV/payment/rate/periods equations\n- **portfolio_metrics** — Sharpe, Sortino, max drawdown, alpha, and beta from periodic return series\n\n### Who it's for\nFinance students, analysts, advisors, and investors who need reliable quantitative outputs without building their own models in Excel.\n\n### How to use it\n1. For company valuation, call **dcf_valuation** with your projected cash flows and a discount rate.\n2. For mortgage or loan analysis, call **loan_amortization** with the principal, rate, and term — add extra_payment to see how much you save.\n3. For portfolio analysis, call **portfolio_metrics** with a list of periodic returns.\n\n### Getting started\nCall any skill directly with your inputs — all calculations run immediately with no setup required.","version":"0.01","categories":["finance"],"currency":"USD","skills":[{"name":"dcf_valuation","displayName":"DCF Valuation","description":"Run a discounted cash flow valuation model. Projects future cash flows to present value and calculates terminal value using Gordon Growth (perpetuity) or exit multiple method.","inputSchema":{"type":"object","properties":{"cash_flows":{"type":"array","items":{"type":"number"},"description":"Projected future cash flows, one per year (e.g. [100, 110, 121, 133, 146])"},"discount_rate":{"type":"number","description":"WACC or required rate of return as a decimal (e.g. 0.10 for 10%)"},"terminal_growth_rate":{"type":"number","description":"Perpetuity growth rate for terminal value (default: 0.025 = 2.5%). Must be less than discount_rate."},"terminal_method":{"type":"string","enum":["perpetuity","exit_multiple"],"description":"Terminal value method: \"perpetuity\" (Gordon Growth, default) or \"exit_multiple\" (10x final cash flow)"}},"required":["cash_flows","discount_rate"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Value a company with 5 years of projected cash flows at 10% discount rate","input":{"cash_flows":[100,110,121,133,146],"discount_rate":0.1}},{"description":"DCF with exit multiple terminal value","input":{"cash_flows":[50,60,72,86],"discount_rate":0.12,"terminal_method":"exit_multiple"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"enterprise_value":{"type":"number","description":"Total enterprise value (PV of cash flows + PV of terminal value)"},"pv_of_cash_flows":{"type":"number","description":"Present value of projected cash flows"},"pv_of_terminal_value":{"type":"number","description":"Present value of terminal value"},"terminal_value_undiscounted":{"type":"number","description":"Terminal value before discounting"},"value_breakdown":{"type":"object","description":"Percentage split between cash flow and terminal value portions"},"yearly_analysis":{"type":"array","description":"Per-year cash flow, discount factor, and present value"}}},"returns":"Enterprise value with per-year present values, terminal value breakdown, and implied value composition"},{"name":"wacc_calculator","displayName":"WACC Calculator","description":"Calculate the weighted average cost of capital from equity value, debt value, cost of equity, cost of debt, and tax rate. Optionally compute cost of equity via the Capital Asset Pricing Model (CAPM).","inputSchema":{"type":"object","properties":{"equity_value":{"type":"number","description":"Market value of equity (market cap)"},"debt_value":{"type":"number","description":"Market value of debt"},"cost_of_equity":{"type":"number","description":"Required return on equity as a decimal (e.g. 0.10 for 10%). Omit if providing CAPM inputs."},"cost_of_debt":{"type":"number","description":"Pre-tax cost of debt as a decimal (e.g. 0.05 for 5%)"},"tax_rate":{"type":"number","description":"Corporate tax rate as a decimal (e.g. 0.21 for 21%)"},"beta":{"type":"number","description":"Equity beta for CAPM calculation (e.g. 1.2)"},"risk_free_rate":{"type":"number","description":"Risk-free rate for CAPM (e.g. 0.04 for 4%)"},"market_premium":{"type":"number","description":"Equity risk premium (Rm - Rf) for CAPM (e.g. 0.06 for 6%)"}},"required":["equity_value","debt_value","cost_of_debt","tax_rate"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Calculate WACC with known cost of equity","input":{"equity_value":800,"debt_value":200,"cost_of_equity":0.1,"cost_of_debt":0.05,"tax_rate":0.21}},{"description":"Calculate WACC with CAPM for cost of equity","input":{"equity_value":600,"debt_value":400,"cost_of_debt":0.06,"tax_rate":0.25,"beta":1.2,"risk_free_rate":0.04,"market_premium":0.06}}],"pricing":"free","outputSchema":{"type":"object","properties":{"wacc":{"type":"number","description":"Weighted average cost of capital as a decimal"},"wacc_pct":{"type":"number","description":"WACC as a percentage"},"capital_structure":{"type":"object","description":"Equity and debt weights"},"cost_components":{"type":"object","description":"Pre-tax and after-tax cost of debt, cost of equity"},"capm":{"type":"object","description":"CAPM breakdown (if beta, risk_free_rate, market_premium provided)"}}},"returns":"WACC with capital structure weights, cost components, tax shield, and optional CAPM breakdown"},{"name":"bond_pricing","displayName":"Bond Pricing","description":"Value a bond and compute yield analytics. Provide market_rate to calculate the bond price, or market_price to solve for yield to maturity (YTM). Returns price, YTM, current yield, Macaulay duration, modified duration, and convexity.","inputSchema":{"type":"object","properties":{"face_value":{"type":"number","description":"Par/face value of the bond (e.g. 1000)"},"coupon_rate":{"type":"number","description":"Annual coupon rate as a decimal (e.g. 0.05 for 5%)"},"years_to_maturity":{"type":"number","description":"Years until the bond matures"},"market_rate":{"type":"number","description":"Required market yield/discount rate as a decimal. Provide this to calculate bond price."},"market_price":{"type":"number","description":"Current market price of the bond. Provide this instead of market_rate to solve for YTM."},"frequency":{"type":"number","enum":[1,2,4,12],"description":"Coupon payments per year: 1 (annual), 2 (semi-annual, default), 4 (quarterly), 12 (monthly)"}},"required":["face_value","coupon_rate","years_to_maturity"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Price a 5% semi-annual bond at 6% market rate","input":{"face_value":1000,"coupon_rate":0.05,"years_to_maturity":10,"market_rate":0.06}},{"description":"Calculate YTM for a bond trading at 950","input":{"face_value":1000,"coupon_rate":0.05,"years_to_maturity":10,"market_price":950}}],"pricing":"free","outputSchema":{"type":"object","properties":{"bond_price":{"type":"number","description":"Calculated or given bond price"},"yield_to_maturity":{"type":"number","description":"YTM as a decimal"},"current_yield":{"type":"number","description":"Current yield (annual coupon / price)"},"macaulay_duration":{"type":"number","description":"Macaulay duration in years"},"modified_duration":{"type":"number","description":"Modified duration"},"convexity":{"type":"number","description":"Bond convexity"},"total_coupon_payments":{"type":"number","description":"Total coupon payments over the life of the bond"}}},"returns":"Bond price, YTM, current yield, Macaulay duration, modified duration, convexity, premium/discount status, and total cash flows"},{"name":"option_pricing","displayName":"Option Pricing","description":"Value European options using the Black-Scholes model with optional continuous dividend yield (Merton extension). Returns option price, all five Greeks (delta, gamma, theta, vega, rho), put-call parity, and moneyness.","inputSchema":{"type":"object","properties":{"spot_price":{"type":"number","description":"Current price of the underlying asset"},"strike_price":{"type":"number","description":"Option strike price"},"time_to_expiry":{"type":"number","description":"Time to expiration in years (e.g. 0.5 for 6 months, 0.25 for 3 months)"},"risk_free_rate":{"type":"number","description":"Risk-free interest rate as a decimal (e.g. 0.05 for 5%)"},"volatility":{"type":"number","description":"Annualized volatility as a decimal (e.g. 0.25 for 25%)"},"option_type":{"type":"string","enum":["call","put"],"description":"Option type: \"call\" (default) or \"put\""},"dividend_yield":{"type":"number","description":"Continuous dividend yield as a decimal (e.g. 0.02 for 2%). Default: 0."}},"required":["spot_price","strike_price","time_to_expiry","risk_free_rate","volatility"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Price a call option on a $100 stock","input":{"spot_price":100,"strike_price":105,"time_to_expiry":0.5,"risk_free_rate":0.05,"volatility":0.25}},{"description":"Price a put option with dividend yield","input":{"spot_price":50,"strike_price":48,"time_to_expiry":0.25,"risk_free_rate":0.04,"volatility":0.3,"option_type":"put","dividend_yield":0.02}}],"pricing":"free","outputSchema":{"type":"object","properties":{"price":{"type":"number","description":"Option price (premium)"},"moneyness":{"type":"string","description":"In-the-money, at-the-money, or out-of-the-money"},"greeks":{"type":"object","description":"Delta, gamma, theta (per day), vega (per 1% vol), rho (per 1% rate)"},"put_call_parity":{"type":"object","description":"Both call and put prices with parity verification"},"model_inputs":{"type":"object","description":"d1, d2, N(d1), N(d2) intermediate values"}}},"returns":"Option price, all five Greeks, intrinsic/time value decomposition, put-call parity prices, and Black-Scholes model intermediates"},{"name":"loan_amortization","displayName":"Loan Amortization","description":"Generate a loan payment schedule with principal/interest breakdown. Supports monthly, biweekly, and weekly payment frequencies. Optionally model extra payments to see accelerated payoff savings.","inputSchema":{"type":"object","properties":{"principal":{"type":"number","description":"Loan amount (e.g. 300000)"},"annual_rate":{"type":"number","description":"Annual interest rate as a decimal (e.g. 0.065 for 6.5%)"},"years":{"type":"number","description":"Loan term in years (e.g. 30)"},"frequency":{"type":"string","enum":["monthly","biweekly","weekly"],"description":"Payment frequency: \"monthly\" (default), \"biweekly\", or \"weekly\""},"extra_payment":{"type":"number","description":"Additional payment per period above the standard payment (e.g. 200)"}},"required":["principal","annual_rate","years"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Monthly amortization for a $300K mortgage at 6.5%","input":{"principal":300000,"annual_rate":0.065,"years":30}},{"description":"Biweekly payments with $200 extra per period","input":{"principal":250000,"annual_rate":0.055,"years":25,"frequency":"biweekly","extra_payment":200}}],"pricing":"free","outputSchema":{"type":"object","properties":{"summary":{"type":"object","description":"Loan terms, periodic payment, total interest, and total cost"},"schedule":{"type":"array","description":"Payment schedule with period, payment, principal/interest portions, and remaining balance"},"accelerated_payoff":{"type":"object","description":"Savings from extra payments: interest saved, time saved, payoff comparison"}}},"returns":"Payment schedule with per-period principal/interest breakdown, loan summary, and optional accelerated payoff comparison"},{"name":"time_value","displayName":"Time Value of Money","description":"Solve any time value of money problem. Calculate future value, present value, payment, interest rate, or number of periods for lump sums and annuities. Supports ordinary annuities and annuities due.","inputSchema":{"type":"object","properties":{"calculation":{"type":"string","enum":["future_value","present_value","payment","rate","periods"],"description":"Which variable to solve for"},"present_value":{"type":"number","description":"Present value (lump sum or loan amount)"},"future_value":{"type":"number","description":"Future value (target amount)"},"rate":{"type":"number","description":"Interest rate per period as a decimal (e.g. 0.005 for 0.5% monthly)"},"periods":{"type":"number","description":"Number of compounding periods"},"payment":{"type":"number","description":"Periodic payment amount (for annuities)"},"payment_timing":{"type":"string","enum":["end","beginning"],"description":"When payments occur: \"end\" (ordinary annuity, default) or \"beginning\" (annuity due)"}},"required":["calculation"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"How much will $10,000 grow to in 20 years at 7% annually?","input":{"calculation":"future_value","present_value":10000,"rate":0.07,"periods":20}},{"description":"What monthly payment to save $100K in 10 years at 6% annual (0.5% monthly)?","input":{"calculation":"payment","future_value":100000,"rate":0.005,"periods":120}},{"description":"Present value of $500/month for 30 years at 5% annual (0.4167% monthly)","input":{"calculation":"present_value","payment":500,"rate":0.004167,"periods":360}}],"pricing":"free","outputSchema":{"type":"object","properties":{"calculation":{"type":"string","description":"Variable that was solved"},"future_value":{"type":"number","description":"Future value result or input"},"present_value":{"type":"number","description":"Present value result or input"},"payment":{"type":"number","description":"Payment result or input"},"rate":{"type":"number","description":"Rate result or input"},"periods":{"type":"number","description":"Periods result or input"}}},"returns":"The solved variable with full calculation breakdown, total payments, and interest earned/paid"},{"name":"portfolio_metrics","displayName":"Portfolio Metrics","description":"Analyze portfolio risk and return from an array of periodic returns. Calculates annualized return, volatility, Sharpe ratio, Sortino ratio, max drawdown, Calmar ratio, skewness, and kurtosis. With benchmark returns, also computes beta, alpha, tracking error, information ratio, and R-squared.","inputSchema":{"type":"object","properties":{"returns":{"type":"array","items":{"type":"number"},"description":"Array of periodic returns as decimals (e.g. monthly: [0.02, -0.01, 0.03, ...])"},"benchmark_returns":{"type":"array","items":{"type":"number"},"description":"Benchmark returns for the same periods, same length as returns (for beta, alpha, tracking error)"},"risk_free_rate":{"type":"number","description":"Annualized risk-free rate as a decimal (default: 0.04 = 4%). Auto-converted to periodic."}},"required":["returns"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Analyze 12 months of portfolio returns","input":{"returns":[0.02,-0.01,0.03,0.01,-0.02,0.04,0.01,-0.03,0.02,0.03,-0.01,0.02]}},{"description":"Compare portfolio against benchmark","input":{"returns":[0.02,-0.01,0.03,0.01,-0.02,0.04],"benchmark_returns":[0.01,-0.005,0.02,0.015,-0.01,0.03],"risk_free_rate":0.05}}],"pricing":"free","outputSchema":{"type":"object","properties":{"metrics":{"type":"object","description":"Core metrics: annualized return, volatility, Sharpe, Sortino, max drawdown, Calmar, skewness, kurtosis"},"period_statistics":{"type":"object","description":"Win rate, best/worst period, mean return, total periods"},"benchmark_comparison":{"type":"object","description":"Beta, alpha, tracking error, information ratio, R-squared (if benchmark provided)"}}},"returns":"Comprehensive risk/return analytics with Sharpe, Sortino, drawdown, skewness, kurtosis, and optional benchmark comparison metrics"}],"icon":"/icons/financial-calculator.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with 7 skills: dcf_valuation, wacc_calculator, bond_pricing, option_pricing, loan_amortization, time_value, portfolio_metrics"]}],"premadePrompt":"I have a $400,000 mortgage at 6.5% over 30 years — what are my monthly payments and how much interest will I pay in total? Also show me how much I could save by paying an extra $300 per month."},{"name":"excel-tools","displayName":"Excel Tools","subtitle":"Create, read & modify Excel","about":"**Excel Tools** creates, reads, and modifies Excel workbooks without needing Excel installed. Build complete spreadsheets with formulas, formatting, pivot tables, and data validations from scratch, or apply targeted edits to files you already have.\n\nIt handles the full Excel feature set: multiple sheets, conditional formatting with color scales and rules, dropdown validations, named ranges, table objects, freeze panes, merged cells, hyperlinks, comments, print setup, and sheet protection. The read skill parses any .xlsx into structured JSON including formulas, formatting, and comments. The modify skill applies a sequence of 30+ operations to an existing file.\n\n### What you can do\n- **create_spreadsheet** — build a complete workbook from scratch with data, formulas, formatting, validations, and pivot tables\n- **read_spreadsheet** — parse any .xlsx file into structured JSON with optional formula, comment, and formatting extraction\n- **modify_spreadsheet** — apply a batch of operations to an existing spreadsheet URL\n\n### Who it's for\nAnalysts, operations teams, developers, and anyone who needs to generate Excel reports programmatically or clean up existing spreadsheets without manual work.\n\n### How to use it\n1. To build from scratch, call **create_spreadsheet** with a sheets array defining your data, headers, and formulas.\n2. To understand an existing file, call **read_spreadsheet** with the file URL and set include_formulas or include_formatting as needed.\n3. To modify an existing file, call **modify_spreadsheet** with the file URL and an operations array — operations are applied in order.\n\n### Getting started\nCall **create_spreadsheet** with a sheets array to generate your first workbook. The result is a downloadable .xlsx file.","version":"0.02","categories":["productivity","data"],"currency":"USD","skills":[{"name":"create_spreadsheet","displayName":"Create Spreadsheet","description":"Build a complete Excel workbook in one call — multiple sheets, headers, formulas, rich formatting, merged cells, data validations, conditional formatting, hyperlinks, comments, named ranges, tables, pivot tables, sheet protection, freeze panes, and print setup. Returns a .xlsx file.","inputSchema":{"type":"object","properties":{"sheets":{"type":"array","description":"Array of sheet definitions with data and settings.","items":{"type":"object","properties":{"name":{"type":"string","description":"Sheet tab name (defaults to Sheet1, Sheet2, ...)"},"headers":{"type":"array","items":{"type":"string"},"description":"Column header labels — auto-bolded and frozen"},"rows":{"type":"array","items":{"type":"array"},"description":"Data rows as 2D array"},"column_widths":{"type":"object","description":"Column widths as {\"A\": 20, \"B\": 15}. Omit for auto-fit."},"row_heights":{"type":"object","description":"Row heights as {1: 30, 2: 20}"},"freeze_row":{"type":"number","description":"Freeze pane row (default: 1 when headers present)"},"freeze_column":{"type":"number","description":"Freeze pane column"},"auto_filter":{"type":"string","description":"Auto-filter range like \"A1:E1\""},"tab_color":{"type":"string","description":"Tab color as hex (e.g. \"FF0000\")"},"protection":{"type":"object","description":"{\"password\": \"secret\"} to protect the sheet"},"print_setup":{"type":"object","description":"{\"orientation\": \"landscape\", \"fit_to_page\": true, \"print_area\": \"A1:F20\"}"}},"required":["rows"]}},"formulas":{"type":"array","description":"Formulas to apply. Each: {sheet?, cell, formula}.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"cell":{"type":"string","description":"Cell ref like \"D2\""},"formula":{"type":"string","description":"Excel formula like \"SUM(A2:C2)\""}},"required":["cell","formula"]}},"formatting":{"type":"array","description":"Formatting rules. Each object needs a range and optional style properties (bold, italic, font_size, colors, alignment, etc.).","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"range":{"type":"string","description":"Range like \"A1:D10\""},"bold":{"type":"boolean","description":"Bold"},"italic":{"type":"boolean","description":"Italic"},"underline":{"type":"boolean","description":"Underline"},"strikethrough":{"type":"boolean","description":"Strikethrough"},"font_size":{"type":"number","description":"Font size"},"font_color":{"type":"string","description":"Font color hex"},"font_name":{"type":"string","description":"Font name (e.g. \"Arial\")"},"bg_color":{"type":"string","description":"Background color hex"},"number_format":{"type":"string","description":"Number format (e.g. \"$#,##0.00\", \"0.00%\")"},"horizontal_alignment":{"type":"string","description":"left, center, right, justify"},"vertical_alignment":{"type":"string","description":"top, middle, bottom"},"wrap_text":{"type":"boolean","description":"Wrap text"},"text_rotation":{"type":"number","description":"Text rotation (0-90, -1 to -90)"},"border":{"type":"string","description":"All borders: thin, medium, thick, double"},"border_color":{"type":"string","description":"Border color hex"}},"required":["range"]}},"merges":{"type":"array","description":"Cell ranges to merge.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"range":{"type":"string","description":"Range like \"A1:D1\""}},"required":["range"]}},"data_validations":{"type":"array","description":"Data validation rules. Types: list (dropdowns), whole/decimal (number ranges), date, textLength, custom (formula-based).","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"range":{"type":"string","description":"Range to validate"},"type":{"type":"string","description":"list, whole, decimal, date, textLength, custom"},"operator":{"type":"string","description":"between, notBetween, equal, notEqual, greaterThan, lessThan, greaterThanOrEqual, lessThanOrEqual"},"values":{"type":"array","items":{"type":"string"},"description":"For type \"list\": dropdown options"},"formula1":{"type":"string","description":"Min value or formula"},"formula2":{"type":"string","description":"Max value (for \"between\")"},"allow_blank":{"type":"boolean","description":"Allow blank cells (default: true)"},"error_title":{"type":"string","description":"Error popup title"},"error_message":{"type":"string","description":"Error popup message"},"prompt_title":{"type":"string","description":"Input prompt title"},"prompt_message":{"type":"string","description":"Input prompt message"}},"required":["range","type"]}},"conditional_formats":{"type":"array","description":"Conditional formatting rules. rule_type: cellIs, containsText, colorScale, dataBar, iconSet, top10, aboveAverage, expression.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"range":{"type":"string","description":"Range to format"},"rule_type":{"type":"string","description":"cellIs, containsText, colorScale, dataBar, iconSet, top10, aboveAverage, expression"},"operator":{"type":"string","description":"For cellIs: greaterThan, lessThan, equal, between, etc."},"value":{"type":"number","description":"Comparison value for cellIs"},"text":{"type":"string","description":"For containsText"},"formula":{"type":"string","description":"For expression type"},"style_font_color":{"type":"string","description":"Highlight font color"},"style_bg_color":{"type":"string","description":"Highlight background color"},"style_bold":{"type":"boolean","description":"Bold on match"},"color_min":{"type":"string","description":"colorScale min color"},"color_mid":{"type":"string","description":"colorScale mid color"},"color_max":{"type":"string","description":"colorScale max color"},"bar_color":{"type":"string","description":"dataBar color"},"rank":{"type":"number","description":"top10 rank"},"bottom":{"type":"boolean","description":"bottom instead of top"}},"required":["range","rule_type"]}},"hyperlinks":{"type":"array","description":"Hyperlinks to add.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"cell":{"type":"string","description":"Cell ref"},"url":{"type":"string","description":"URL"},"text":{"type":"string","description":"Display text"},"tooltip":{"type":"string","description":"Hover tooltip"}},"required":["cell","url"]}},"comments":{"type":"array","description":"Cell comments/notes.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"cell":{"type":"string","description":"Cell ref"},"text":{"type":"string","description":"Comment text"},"author":{"type":"string","description":"Author name"}},"required":["cell","text"]}},"named_ranges":{"type":"array","description":"Named ranges (defined names).","items":{"type":"object","properties":{"name":{"type":"string","description":"Range name"},"range":{"type":"string","description":"Cell range like \"$A$1:$D$10\""},"sheet":{"type":"string","description":"Sheet scope"}},"required":["name","range"]}},"tables":{"type":"array","description":"Excel tables to create from existing data ranges.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Target sheet"},"range":{"type":"string","description":"Data range like \"A1:D10\""},"name":{"type":"string","description":"Table name"},"style":{"type":"string","description":"Style like \"TableStyleMedium9\""},"totals_row":{"type":"boolean","description":"Add totals row"}},"required":["range"]}},"pivot_tables":{"type":"array","description":"Pivot tables to compute from data. Creates a new sheet with aggregated results.","items":{"type":"object","properties":{"sheet":{"type":"string","description":"Source data sheet"},"data_range":{"type":"string","description":"Source range like \"A1:E100\""},"target_sheet":{"type":"string","description":"New sheet name for pivot output"},"rows":{"type":"array","items":{"type":"string"},"description":"Row grouping fields"},"values":{"type":"array","items":{"type":"string"},"description":"Value fields to aggregate"},"columns":{"type":"array","items":{"type":"string"},"description":"Column grouping fields"},"agg_func":{"type":"string","description":"sum, average, count, min, max"}},"required":["data_range","target_sheet","rows","values"]}},"filename":{"type":"string","description":"Output filename (default: spreadsheet.xlsx)"}},"required":["sheets"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Sales report with formatting and formulas","input":{"sheets":[{"name":"Sales","headers":["Product","Q1","Q2","Q3","Q4"],"rows":[["Widget A",1500,2300,1800,2100],["Widget B",900,1100,1300,1500]]}],"formulas":[{"cell":"F1","formula":"\"Total\""},{"cell":"F2","formula":"SUM(B2:E2)"},{"cell":"F3","formula":"SUM(B3:E3)"}],"formatting":[{"range":"B2:F3","number_format":"$#,##0"}],"filename":"sales-report.xlsx"}},{"description":"Budget with dropdowns, conditional formatting, and pivot table","input":{"sheets":[{"name":"Expenses","headers":["Department","Category","Amount","Status"],"rows":[["Engineering","Software",15000,"Approved"],["Marketing","Ads",8000,"Pending"],["Engineering","Hardware",22000,"Approved"],["Marketing","Events",5000,"Rejected"]]}],"data_validations":[{"range":"D2:D100","type":"list","values":["Approved","Pending","Rejected"],"error_title":"Invalid","error_message":"Pick from the list"}],"conditional_formats":[{"range":"C2:C100","rule_type":"cellIs","operator":"greaterThan","value":10000,"style_bg_color":"FFCCCC","style_bold":true}],"pivot_tables":[{"data_range":"A1:D5","target_sheet":"Summary","rows":["Department"],"values":["Amount"],"agg_func":"sum"}],"filename":"budget.xlsx"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"spreadsheet_path":{"type":"string","description":"Path to the .xlsx file"},"filename":{"type":"string","description":"Output filename"},"sheets":{"type":"array","description":"Summary of each sheet"},"file_size_bytes":{"type":"number","description":"File size in bytes"}}},"returns":"A downloadable .xlsx file with all sheets, data, formatting, validations, and formulas applied"},{"name":"read_spreadsheet","displayName":"Read Spreadsheet","description":"Download an Excel file from a URL and extract all data as structured JSON — sheet names, headers, cell values, merged cells, tables, and print settings. Optionally includes formulas, comments, hyperlinks, data validations, and per-cell formatting. Use this to inspect a file before modifying it.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the .xlsx file to read. The tool server CAN fetch any public URL — always pass it."},"sheet_name":{"type":"string","description":"Read only this sheet (omit to read all)"},"start_cell":{"type":"string","description":"Start reading from this cell (default: A1)"},"end_cell":{"type":"string","description":"Stop reading at this cell (omit to read all data)"},"include_formulas":{"type":"boolean","description":"Return raw formula strings per cell (default: false)"},"include_comments":{"type":"boolean","description":"Return cell comments/notes (default: false)"},"include_hyperlinks":{"type":"boolean","description":"Return hyperlink URLs per cell (default: false)"},"include_data_validations":{"type":"boolean","description":"Return data validation rules per cell (default: false)"},"include_formatting":{"type":"boolean","description":"Return font, color, border, number format per cell (default: false)"},"include_metadata":{"type":"boolean","description":"Return merged cells, freeze panes, tables, print setup, defined names (default: false)"}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Read all data from a spreadsheet","input":{"url":"https://example.com/report.xlsx"}},{"description":"Deep inspection with all metadata","input":{"url":"https://example.com/data.xlsx","include_formulas":true,"include_comments":true,"include_data_validations":true,"include_formatting":true,"include_metadata":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"filename":{"type":"string","description":"Original filename"},"file_size_bytes":{"type":"number","description":"File size in bytes"},"sheets":{"type":"array","description":"List of sheet names"},"sheet_count":{"type":"number","description":"Number of sheets"},"data":{"type":"object","description":"Per-sheet data with rows, headers, and optional metadata"},"defined_names":{"type":"object","description":"Named ranges (if include_metadata)"}}},"returns":"Structured JSON with all sheet data, cell values, and optional deep metadata (formulas, comments, hyperlinks, validations, formatting)"},{"name":"modify_spreadsheet","displayName":"Modify Spreadsheet","description":"Apply 30+ batch operations to an existing Excel file: write data, formulas, formatting, merges, sheets, rows/cols, tables, pivots, validations, conditional formats, hyperlinks, comments, protection, and print setup. Returns the modified .xlsx file.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the .xlsx file to modify. The tool server CAN fetch any public URL — always pass it."},"operations":{"type":"array","description":"Operations to apply in order. Each has an \"action\" field plus action-specific params. Optional \"sheet\" targets a specific sheet.","items":{"type":"object","properties":{"action":{"type":"string","description":"Operation name"},"sheet":{"type":"string","description":"Target sheet (defaults to first)"}},"required":["action"]}},"filename":{"type":"string","description":"Output filename (default: modified.xlsx)"}},"required":["url","operations"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Add formulas, conditional formatting, and a pivot table","input":{"url":"https://example.com/data.xlsx","operations":[{"action":"add_formula","cell":"E2","formula":"SUM(B2:D2)"},{"action":"add_conditional_format","range":"E2:E100","rule_type":"colorScale","color_min":"F8696B","color_max":"63BE7B"},{"action":"create_pivot_table","data_range":"A1:E50","target_sheet":"Summary","rows":["Category"],"values":["Amount"],"agg_func":"sum"}]}},{"description":"Add dropdowns, comments, hyperlinks, and protect the sheet","input":{"url":"https://example.com/report.xlsx","operations":[{"action":"add_data_validation","range":"C2:C100","type":"list","values":["Low","Medium","High","Critical"]},{"action":"add_comment","cell":"A1","text":"Updated by automation on 2026-03-22"},{"action":"add_hyperlink","cell":"F2","url":"https://example.com/details","text":"View Details"},{"action":"protect_sheet","password":"secret123"}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"spreadsheet_path":{"type":"string","description":"Path to the modified .xlsx file"},"filename":{"type":"string","description":"Output filename"},"operations_applied":{"type":"array","description":"Summary of each applied operation"},"sheets":{"type":"array","description":"Final list of sheet names"},"file_size_bytes":{"type":"number","description":"File size in bytes"}}},"returns":"The modified .xlsx file with a summary of all operations applied"}],"workflow":["create_spreadsheet","read_spreadsheet → modify_spreadsheet"],"icon":"/icons/excel-tools.webp","changelog":[{"version":"0.01","date":"2026-03-22","changes":["Initial release with create, read, and modify skills"]},{"version":"0.02","date":"2026-03-22","changes":["Added data validations, conditional formatting, hyperlinks, comments, named ranges, tables, pivot tables","Added copy_range, delete_range, clear_range, find_replace, sort_data operations","Added sheet protection, print setup, tab colors, row heights","Read now extracts formulas, comments, hyperlinks, data validations, formatting per cell","Changed pricing to paid"]}],"premadePrompt":"Create an Excel spreadsheet tracking [topic, e.g. monthly budget / sales pipeline / project tasks] with headers, totals formulas, and conditional formatting to highlight important values."},{"name":"docx-tools","displayName":"Word Documents","subtitle":"Create, read & modify Word docs","about":"**Word Documents** lets you create, read, and modify Word files without ever opening Microsoft Word. Describe what you want — headings, tables, bullet lists, images, tracked changes — and get a ready-to-download .docx file in seconds.\n\nIt handles the full document format: multiple sections, headers and footers, footnotes, hyperlinks, table of contents, comments, and complex table layouts with merged cells. You can also read any existing Word file into structured data, then apply targeted edits without touching the rest of the document.\n\n### What you can do\n- **create_document** — build a Word file from scratch with rich formatting, tables, and images\n- **read_document** — extract text, comments, tracked changes, and structure from any .docx\n- **modify_document** — apply a batch of edits to an existing document URL\n\n### Who it's for\nWriters, operations teams, and developers who need to generate contracts, reports, proposals, or templates programmatically. Useful anywhere a polished Word file is the expected deliverable.\n\n### How to use it\n1. Use **create_document** and pass a content array describing each block — paragraphs, headings, tables, or page breaks. For multi-section layouts, use the sections array instead.\n2. To edit an existing file, first call **read_document** with the file URL to understand its structure.\n3. Then call **modify_document** with an operations array to apply your changes precisely.\n\n### Getting started\nPass your content structure to **create_document** and download the result. No accounts or installs needed.","version":"0.01","categories":["productivity","data"],"currency":"USD","skills":[{"name":"create_document","displayName":"Create Document","description":"Build a Word document from structured data: paragraphs with formatting, headings, lists, tables with merges, images, headers/footers, TOC, tracked changes, comments, styles, multi-section layouts, hyperlinks, and footnotes. Returns a downloadable .docx file.","inputSchema":{"type":"object","properties":{"content":{"type":"array","description":"Array of content blocks for a single-section document. Each block has a \"type\" field. Use this OR \"sections\", not both.","items":{"type":"object","properties":{"type":{"type":"string","description":"Block type: paragraph, table, page_break, table_of_contents, tracked_change, image"},"paragraph":{"type":"object","description":"Paragraph definition (when type is \"paragraph\")","properties":{"text":{"type":"string","description":"Plain text content. For multiple styled runs, use \"runs\" instead."},"runs":{"type":"array","description":"Array of inline text runs with individual formatting","items":{"type":"object","properties":{"text":{"type":"string","description":"Run text"},"bold":{"type":"boolean","description":"Bold"},"italic":{"type":"boolean","description":"Italic"},"underline":{"type":"boolean","description":"Underline"},"strikethrough":{"type":"boolean","description":"Strikethrough"},"font":{"type":"string","description":"Font name (e.g. \"Arial\", \"Times New Roman\")"},"size":{"type":"number","description":"Font size in points (e.g. 12)"},"color":{"type":"string","description":"Font color as hex (e.g. \"FF0000\")"},"highlight":{"type":"string","description":"Highlight color (e.g. \"yellow\", \"cyan\")"},"superscript":{"type":"boolean","description":"Superscript"},"subscript":{"type":"boolean","description":"Subscript"}},"required":["text"]}},"heading":{"type":"string","description":"Heading level: h1, h2, h3, h4, h5, h6, title"},"alignment":{"type":"string","description":"Paragraph alignment: left, center, right, justified"},"bold":{"type":"boolean","description":"Bold (applies to text, not runs)"},"italic":{"type":"boolean","description":"Italic (applies to text, not runs)"},"underline":{"type":"boolean","description":"Underline"},"strikethrough":{"type":"boolean","description":"Strikethrough"},"font":{"type":"string","description":"Font name"},"size":{"type":"number","description":"Font size in points"},"color":{"type":"string","description":"Font color hex"},"highlight":{"type":"string","description":"Highlight color name"},"spacing_before":{"type":"number","description":"Spacing before paragraph (twips)"},"spacing_after":{"type":"number","description":"Spacing after paragraph (twips)"},"line_spacing":{"type":"number","description":"Line spacing (240 = single, 480 = double)"},"indent_left":{"type":"number","description":"Left indent (twips)"},"indent_right":{"type":"number","description":"Right indent (twips)"},"indent_first_line":{"type":"number","description":"First line indent (twips)"},"style":{"type":"string","description":"Named paragraph style to apply"},"bullet":{"type":"boolean","description":"Make this a bullet list item"},"bullet_level":{"type":"number","description":"Bullet indent level (0-8, default 0)"},"numbered":{"type":"boolean","description":"Make this a numbered list item"},"numbered_level":{"type":"number","description":"Numbered list indent level (0-8, default 0)"},"hyperlinks":{"type":"array","description":"Hyperlinks within the paragraph","items":{"type":"object","properties":{"text":{"type":"string","description":"Display text"},"url":{"type":"string","description":"External URL"},"bookmark":{"type":"string","description":"Internal bookmark name"}},"required":["text"]}},"images":{"type":"array","description":"Inline images within the paragraph","items":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"width_inches":{"type":"number","description":"Width in inches (overrides width)"},"height_inches":{"type":"number","description":"Height in inches (overrides height)"},"alt_text":{"type":"string","description":"Alt text for accessibility"}},"required":["url"]}},"page_break_before":{"type":"boolean","description":"Insert page break before this paragraph"},"bookmark":{"type":"string","description":"Create a bookmark anchor at this paragraph"},"footnote_ref":{"type":"object","description":"Reference a footnote by ID: {\"id\": 1}"},"endnote_ref":{"type":"object","description":"Reference an endnote by ID: {\"id\": 1}"}}},"table":{"type":"object","description":"Table definition (when type is \"table\")","properties":{"rows":{"type":"array","description":"Array of row definitions","items":{"type":"object","properties":{"cells":{"type":"array","description":"Array of cell definitions","items":{"type":"object","properties":{"text":{"type":"string","description":"Cell text content"},"paragraphs":{"type":"array","description":"Rich content: array of paragraph definitions"},"bold":{"type":"boolean","description":"Bold text"},"font":{"type":"string","description":"Font name"},"size":{"type":"number","description":"Font size in points"},"color":{"type":"string","description":"Text color hex"},"shading":{"type":"string","description":"Cell background color hex"},"borders":{"type":"boolean","description":"Show cell borders (default: true)"},"border_color":{"type":"string","description":"Border color hex"},"border_size":{"type":"number","description":"Border width"},"width":{"type":"number","description":"Cell width value"},"width_type":{"type":"string","description":"Width unit: dxa, pct, auto"},"colspan":{"type":"number","description":"Number of columns to span"},"rowspan":{"type":"number","description":"Number of rows to span"},"vertical_align":{"type":"string","description":"Vertical alignment: top, center, bottom"},"alignment":{"type":"string","description":"Text alignment: left, center, right"}}}},"is_header":{"type":"boolean","description":"Mark as header row (repeats on page break)"},"height":{"type":"number","description":"Row height in twips"}},"required":["cells"]}},"width":{"type":"number","description":"Table width value"},"width_type":{"type":"string","description":"Width unit: dxa, pct, auto"},"alignment":{"type":"string","description":"Table alignment: left, center, right"},"borders":{"type":"boolean","description":"Show table borders (default: true)"},"border_color":{"type":"string","description":"Border color hex"}},"required":["rows"]},"tracked_change":{"type":"object","description":"Tracked change definition (when type is \"tracked_change\")","properties":{"type":{"type":"string","description":"Change type: insertion or deletion"},"text":{"type":"string","description":"Changed text"},"author":{"type":"string","description":"Author name"},"date":{"type":"string","description":"ISO date string"},"bold":{"type":"boolean","description":"Bold"},"italic":{"type":"boolean","description":"Italic"},"font":{"type":"string","description":"Font name"},"size":{"type":"number","description":"Font size in points"}},"required":["type","text","author"]},"image":{"type":"object","description":"Standalone image block (when type is \"image\")","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"width_inches":{"type":"number","description":"Width in inches"},"height_inches":{"type":"number","description":"Height in inches"},"alt_text":{"type":"string","description":"Alt text"}},"required":["url"]},"toc_heading":{"type":"string","description":"Table of contents title (default: \"Table of Contents\")"}},"required":["type"]}},"sections":{"type":"array","description":"Multi-section document with different page layouts per section. Use this OR \"content\", not both.","items":{"type":"object","properties":{"content":{"type":"array","description":"Content blocks for this section (same format as top-level content)"},"page_size":{"type":"object","description":"{\"width\": 12240, \"height\": 15840} in DXA"},"orientation":{"type":"string","description":"portrait or landscape"},"margins":{"type":"object","description":"{\"top\": 1440, \"bottom\": 1440, \"left\": 1440, \"right\": 1440} in DXA"},"headers":{"type":"object","description":"{\"default\": {\"text\": \"...\", \"include_page_number\": true}}"},"footers":{"type":"object","description":"{\"default\": {\"text\": \"...\", \"include_page_number\": true}}"},"section_type":{"type":"string","description":"Section break type: nextPage, continuous, evenPage, oddPage"}},"required":["content"]}},"page_setup":{"type":"object","description":"Global page setup (applies when using \"content\", overridden per-section when using \"sections\")","properties":{"size":{"type":"string","description":"Preset: letter, a4, legal, a3, a5"},"width":{"type":"number","description":"Custom page width in DXA (1 inch = 1440)"},"height":{"type":"number","description":"Custom page height in DXA"},"orientation":{"type":"string","description":"portrait or landscape"},"margins":{"type":"object","description":"{\"top\": 1440, \"bottom\": 1440, \"left\": 1440, \"right\": 1440} in DXA"}}},"header":{"type":"object","description":"Document header (for single-section documents)","properties":{"text":{"type":"string","description":"Header text"},"alignment":{"type":"string","description":"left, center, right"},"include_page_number":{"type":"boolean","description":"Include page number"},"font":{"type":"string","description":"Font name"},"size":{"type":"number","description":"Font size in points"}}},"footer":{"type":"object","description":"Document footer (for single-section documents)","properties":{"text":{"type":"string","description":"Footer text"},"alignment":{"type":"string","description":"left, center, right"},"include_page_number":{"type":"boolean","description":"Include page X of Y"},"font":{"type":"string","description":"Font name"},"size":{"type":"number","description":"Font size in points"}}},"comments":{"type":"array","description":"Comments to add to the document","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique comment ID"},"text":{"type":"string","description":"Comment text"},"author":{"type":"string","description":"Author name"},"date":{"type":"string","description":"ISO date string"}},"required":["id","text","author"]}},"footnotes":{"type":"array","description":"Footnote definitions. Reference in paragraphs via footnote_ref: {\"id\": N}","items":{"type":"object","properties":{"id":{"type":"number","description":"Footnote ID (must match footnote_ref.id)"},"text":{"type":"string","description":"Footnote text"}},"required":["id","text"]}},"endnotes":{"type":"array","description":"Endnote definitions. Reference in paragraphs via endnote_ref: {\"id\": N}","items":{"type":"object","properties":{"id":{"type":"number","description":"Endnote ID (must match endnote_ref.id)"},"text":{"type":"string","description":"Endnote text"}},"required":["id","text"]}},"styles":{"type":"array","description":"Custom style definitions","items":{"type":"object","properties":{"id":{"type":"string","description":"Style ID (referenced by paragraphs)"},"name":{"type":"string","description":"Human-readable style name"},"type":{"type":"string","description":"paragraph or character"},"based_on":{"type":"string","description":"Base style ID"},"font":{"type":"string","description":"Font name"},"size":{"type":"number","description":"Font size in points"},"bold":{"type":"boolean","description":"Bold"},"italic":{"type":"boolean","description":"Italic"},"color":{"type":"string","description":"Font color hex"},"alignment":{"type":"string","description":"Paragraph alignment"},"spacing_before":{"type":"number","description":"Spacing before (twips)"},"spacing_after":{"type":"number","description":"Spacing after (twips)"}},"required":["id","name","type"]}},"filename":{"type":"string","description":"Output filename (default: document.docx)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Professional report with headings, formatted text, and a table","input":{"content":[{"type":"paragraph","paragraph":{"text":"Quarterly Report","heading":"h1","alignment":"center"}},{"type":"paragraph","paragraph":{"text":"Q1 2026 Performance Summary","heading":"h2"}},{"type":"paragraph","paragraph":{"runs":[{"text":"Revenue grew by ","size":12},{"text":"15%","bold":true,"color":"00AA00","size":12},{"text":" compared to the previous quarter.","size":12}]}},{"type":"table","table":{"rows":[{"cells":[{"text":"Metric","bold":true,"shading":"4472C4","color":"FFFFFF"},{"text":"Q4 2025","bold":true,"shading":"4472C4","color":"FFFFFF"},{"text":"Q1 2026","bold":true,"shading":"4472C4","color":"FFFFFF"}],"is_header":true},{"cells":[{"text":"Revenue"},{"text":"$1.2M"},{"text":"$1.38M"}]},{"cells":[{"text":"Users"},{"text":"45,000"},{"text":"52,300"}]}]}}],"header":{"text":"CONFIDENTIAL","alignment":"right","size":8},"footer":{"text":"Acme Corp","include_page_number":true},"filename":"quarterly-report.docx"}},{"description":"Document with bullet lists, numbered lists, and hyperlinks","input":{"content":[{"type":"paragraph","paragraph":{"text":"Project Plan","heading":"h1"}},{"type":"paragraph","paragraph":{"text":"Key Objectives","heading":"h2"}},{"type":"paragraph","paragraph":{"text":"Increase test coverage to 90%","bullet":true}},{"type":"paragraph","paragraph":{"text":"Reduce API latency by 50%","bullet":true}},{"type":"paragraph","paragraph":{"text":"Launch mobile app","bullet":true}},{"type":"paragraph","paragraph":{"text":"Timeline","heading":"h2"}},{"type":"paragraph","paragraph":{"text":"Phase 1: Research and planning","numbered":true}},{"type":"paragraph","paragraph":{"text":"Phase 2: Implementation","numbered":true}},{"type":"paragraph","paragraph":{"text":"Phase 3: Testing and launch","numbered":true}},{"type":"paragraph","paragraph":{"text":"For details, see: ","hyperlinks":[{"text":"Project Wiki","url":"https://wiki.example.com/project"}]}}],"page_setup":{"size":"a4","orientation":"portrait"},"filename":"project-plan.docx"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"document_path":{"type":"string","description":"Path to the .docx file"},"filename":{"type":"string","description":"Output filename"},"sections":{"type":"number","description":"Number of sections"},"paragraphs":{"type":"number","description":"Number of paragraphs"},"tables":{"type":"number","description":"Number of tables"},"images":{"type":"number","description":"Number of images"},"file_size_bytes":{"type":"number","description":"File size in bytes"}}},"returns":"A downloadable .docx file with all content, formatting, tables, images, and metadata applied"},{"name":"read_document","displayName":"Read Document","description":"Extract all content from a Word document as structured JSON — paragraphs, tables, raw text, word counts. Optionally extracts comments, tracked changes, properties, styles, headers, images, hyperlinks, and footnotes. Use to inspect a file before modifying.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the .docx file to read. The tool server CAN fetch any public URL — always pass it."},"include_raw_text":{"type":"boolean","description":"Include full plain text extraction (default: true)"},"include_comments":{"type":"boolean","description":"Extract comments with author, date, text (default: false)"},"include_tracked_changes":{"type":"boolean","description":"Extract tracked insertions and deletions (default: false)"},"include_properties":{"type":"boolean","description":"Extract document properties: title, author, dates, page count (default: false)"},"include_styles":{"type":"boolean","description":"List all styles used in the document (default: false)"},"include_headers":{"type":"boolean","description":"Extract header and footer text (default: false)"},"include_images":{"type":"boolean","description":"List embedded images with size and base64 (default: false)"},"include_hyperlinks":{"type":"boolean","description":"Extract hyperlinks and bookmarks (default: false)"},"include_footnotes":{"type":"boolean","description":"Extract footnotes and endnotes (default: false)"}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Read all content from a Word document","input":{"url":"https://example.com/report.docx"}},{"description":"Deep inspection with all metadata","input":{"url":"https://example.com/contract.docx","include_comments":true,"include_tracked_changes":true,"include_properties":true,"include_styles":true,"include_headers":true,"include_images":true,"include_hyperlinks":true,"include_footnotes":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"filename":{"type":"string","description":"Original filename"},"file_size_bytes":{"type":"number","description":"File size in bytes"},"paragraph_count":{"type":"number","description":"Number of paragraphs"},"table_count":{"type":"number","description":"Number of tables"},"word_count":{"type":"number","description":"Total word count"},"character_count":{"type":"number","description":"Total character count"},"paragraphs":{"type":"array","description":"Structured paragraph data with text, styles, headings"},"tables":{"type":"array","description":"Table data with rows and cells"},"raw_text":{"type":"string","description":"Full plain text (if include_raw_text)"}}},"returns":"Structured JSON with all document content, paragraphs, tables, and optional deep metadata (comments, tracked changes, properties, styles, images, hyperlinks)"},{"name":"modify_document","displayName":"Modify Document","description":"Apply batch operations to an existing Word document: insert/delete/replace paragraphs, insert tables and images, add comments and tracked changes, accept/reject changes, update properties, add headers/footers, page breaks, and styles. Returns the modified .docx file.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the .docx file to modify. The tool server CAN fetch any public URL — always pass it."},"operations":{"type":"array","description":"Operations to apply in order. Each has an \"action\" field plus action-specific params.","items":{"type":"object","properties":{"action":{"type":"string","description":"Operation type (e.g. insert_paragraph, replace_text, delete_paragraph, insert_table, insert_image, apply_style, etc.)"}},"required":["action"]}},"filename":{"type":"string","description":"Output filename (default: modified.docx)"}},"required":["url","operations"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Add paragraphs, replace text, and insert a table","input":{"url":"https://example.com/template.docx","operations":[{"action":"insert_paragraph","text":"Executive Summary","style":"Heading1","position":"beginning"},{"action":"replace_text","find":"[COMPANY_NAME]","replace":"Acme Corporation"},{"action":"insert_table","rows":[["Name","Role","Start Date"],["Jane Smith","CTO","2026-01-15"],["John Doe","VP Engineering","2026-02-01"]],"header_row":true,"position":"end"}]}},{"description":"Add comments, tracked changes, and update properties","input":{"url":"https://example.com/contract.docx","operations":[{"action":"add_comment","text":"Please review this clause","author":"Legal Team","anchor_text":"termination"},{"action":"add_tracked_change","type":"insertion","text":"Subject to board approval. ","author":"CFO","position":"end"},{"action":"update_properties","title":"Service Agreement v2","author":"Legal Department"},{"action":"add_footer","text":"DRAFT - Not for distribution","alignment":"center","include_page_number":true}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"document_path":{"type":"string","description":"Path to the modified .docx file"},"filename":{"type":"string","description":"Output filename"},"operations_applied":{"type":"array","description":"Summary of each applied operation"},"file_size_bytes":{"type":"number","description":"File size in bytes"}}},"returns":"The modified .docx file with a summary of all operations applied"}],"workflow":["create_document","read_document → modify_document"],"icon":"/icons/docx-tools.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with create, read, and modify skills"]}],"premadePrompt":"Create a Word document for [topic or purpose] with headings, bullet points, and a table. Make it ready to download."},{"name":"pptx-tools","displayName":"PowerPoint Presentations","subtitle":"Create, read & modify slide decks","about":"**PowerPoint Presentations** lets you create, read, and modify .pptx files entirely through AI — no PowerPoint installation needed. Build complete slide decks from scratch, extract all content from existing files, or batch-edit templates in seconds.\n\nWhether you're building a pitch deck, a quarterly report, or a training deck, this tool handles every element: text with rich formatting, charts, tables, images, shapes, slide masters, speaker notes, and transitions. You describe what you want and get back a downloadable file.\n\n### What you can do\n- **create_presentation** — build a full deck from structured slide data, with text, charts, tables, images, shapes, backgrounds, and transitions\n- **read_presentation** — extract every slide's content into structured JSON, including speaker notes, theme colors, and media references\n- **modify_presentation** — apply batch edits to an existing file: replace text, reorder slides, insert images, update backgrounds, and more\n\n### Who it's for\nProfessionals who generate decks programmatically — sales teams templating proposals, analysts publishing reports, developers building document automation, and anyone who wants to produce polished presentations without touching PowerPoint manually.\n\n### How to use it\n1. To build a new deck, call **create_presentation** with an array of slide definitions. Each slide can contain any mix of text boxes, charts, tables, images, and shapes positioned in inches.\n2. To inspect an existing file, call **read_presentation** with the file's URL. It returns all content as structured JSON you can work with.\n3. To update a file you already have, call **modify_presentation** with the URL and a list of operations like replace_text, add_slide, or insert_image.\n\n### Getting started\nPass a slides array to **create_presentation** with at least one slide and one element to see a downloadable deck returned immediately.","version":"0.01","categories":["productivity","data"],"currency":"USD","skills":[{"name":"create_presentation","displayName":"Create Presentation","description":"Build a PowerPoint deck from structured data — slides with text, shapes, images, charts, tables, backgrounds, slide masters, speaker notes, transitions, and slide numbers. Returns a downloadable .pptx file.","inputSchema":{"type":"object","properties":{"slides":{"type":"array","description":"Array of slide definitions. Each slide has elements (text, shape, image, chart, table) positioned on the canvas.","items":{"type":"object","properties":{"elements":{"type":"array","description":"Array of elements to place on this slide. Each element has a \"type\" field (text, shape, image, chart, table) plus type-specific properties.","items":{"type":"object","properties":{"type":{"type":"string","description":"Element type: \"text\", \"shape\", \"image\", \"chart\", or \"table\""},"text":{"description":"String for simple text, or array of rich text parts: {text, bold?, italic?, underline?, color?, font_face?, font_size?, hyperlink?, bullet?, align?}"},"x":{"type":"number","description":"Horizontal position in inches (default: 0.5)"},"y":{"type":"number","description":"Vertical position in inches (default: 0.5)"},"w":{"type":"number","description":"Width in inches (default: 90% of slide)"},"h":{"type":"number","description":"Height in inches"},"color":{"type":"string","description":"Text color hex (e.g. \"FF0000\"). No # prefix."},"font_face":{"type":"string","description":"Font name (e.g. \"Arial\", \"Calibri\")"},"font_size":{"type":"number","description":"Font size in points"},"bold":{"type":"boolean","description":"Bold text"},"italic":{"type":"boolean","description":"Italic text"},"underline":{"type":"boolean","description":"Underline text"},"align":{"type":"string","description":"Horizontal alignment: left, center, right, justify"},"valign":{"type":"string","description":"Vertical alignment: top, middle, bottom"},"line_spacing":{"type":"number","description":"Line spacing multiplier (e.g. 1.5 for 150%)"},"character_spacing":{"type":"number","description":"Character spacing in points"},"wrap":{"type":"boolean","description":"Wrap text (default: true)"},"rotation":{"type":"number","description":"Rotation in degrees"},"hyperlink":{"type":"string","description":"URL to link this text to"},"bullet":{"description":"true for standard bullets, or {type: \"number\", number_type?, start_at?, indent_level?, character_code?} for custom"},"highlight":{"type":"string","description":"Text highlight color hex"},"fill_color":{"type":"string","description":"Text box background fill color hex"},"margin":{"description":"Text box margin in points. Number or [top, right, bottom, left]"},"shadow":{"type":"object","description":"{type?: \"outer\"|\"inner\", color?: hex, blur?: number, offset?: number, angle?: number, opacity?: 0-1}"},"shape":{"type":"string","description":"Use a shape as the text container (e.g. \"roundRect\", \"rectangle\")"},"fill_transparency":{"type":"number","description":"Fill transparency 0-100 for shapes"},"line_color":{"type":"string","description":"Shape outline/stroke color hex"},"line_width":{"type":"number","description":"Shape outline width in points"},"line_dash":{"type":"string","description":"Line dash style: solid, dash, dashDot, lgDash, sysDash, sysDot"},"text_color":{"type":"string","description":"Color for text inside a shape"},"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"sizing":{"type":"object","description":"Image sizing: {type: \"contain\"|\"cover\", w: number, h: number}"},"transparency":{"type":"number","description":"Image transparency 0-100"},"alt_text":{"type":"string","description":"Image alt text for accessibility"},"rounded_corners":{"type":"boolean","description":"Round image corners"},"chart_type":{"type":"string","description":"Chart type: bar, line, pie, doughnut, scatter, bubble, radar, area"},"data":{"type":"array","description":"Chart data series array. Each: {name: string, labels?: string[], values: number[]}","items":{"type":"object","properties":{"name":{"type":"string","description":"Series name"},"labels":{"type":"array","items":{"type":"string"},"description":"Category labels"},"values":{"type":"array","items":{"type":"number"},"description":"Data values"}},"required":["name","values"]}},"title":{"type":"string","description":"Chart title"},"show_legend":{"type":"boolean","description":"Show chart legend (default: true)"},"legend_position":{"type":"string","description":"Legend position: b, t, l, r, tr"},"show_data_labels":{"type":"boolean","description":"Show data labels on chart"},"data_label_position":{"type":"string","description":"Data label position: outEnd, inEnd, ctr, bestFit"},"colors":{"type":"array","items":{"type":"string"},"description":"Chart series colors as hex array"},"show_value":{"type":"boolean","description":"Show values on data labels"},"show_percent":{"type":"boolean","description":"Show percentages (pie/doughnut)"},"show_category":{"type":"boolean","description":"Show category names on labels"},"axis_title_x":{"type":"string","description":"X-axis title"},"axis_title_y":{"type":"string","description":"Y-axis title"},"show_grid_lines":{"type":"boolean","description":"Show grid lines (default: true)"},"bar_direction":{"type":"string","description":"Bar chart direction: bar (horizontal), col (vertical)"},"bar_grouping":{"type":"string","description":"Bar grouping: clustered, stacked, percentStacked"},"line_smooth":{"type":"boolean","description":"Smooth lines in line chart"},"rows":{"type":"array","description":"Table rows. Each row: {cells: [{text, fill_color?, font_color?, font_size?, bold?, align?, colspan?, rowspan?}]}","items":{"type":"object","properties":{"cells":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","description":"Cell text content"},"fill_color":{"type":"string","description":"Cell background color hex"},"font_color":{"type":"string","description":"Cell font color hex"},"font_size":{"type":"number","description":"Cell font size"},"font_face":{"type":"string","description":"Cell font name"},"bold":{"type":"boolean","description":"Bold cell text"},"italic":{"type":"boolean","description":"Italic cell text"},"align":{"type":"string","description":"Cell horizontal alignment"},"valign":{"type":"string","description":"Cell vertical alignment"},"colspan":{"type":"number","description":"Column span for merged cells"},"rowspan":{"type":"number","description":"Row span for merged cells"},"border_color":{"type":"string","description":"Cell border color hex"},"border_width":{"type":"number","description":"Cell border width in points"}},"required":["text"]}}},"required":["cells"]}},"column_widths":{"type":"array","items":{"type":"number"},"description":"Table column widths in inches"},"border_color":{"type":"string","description":"Default table border color hex"},"border_width":{"type":"number","description":"Default table border width in points"},"auto_page":{"type":"boolean","description":"Auto-paginate long tables across slides"},"first_row_header":{"type":"boolean","description":"Style first row as header (bold, fill)"},"header_fill_color":{"type":"string","description":"Header row background color hex"},"header_font_color":{"type":"string","description":"Header row font color hex"},"row_alt_fill_color":{"type":"string","description":"Alternating row background color hex"}},"required":["type"]}},"background":{"type":"object","description":"Slide background. Either {color: \"hex\"} for solid color or {image_url: \"url\"} for image background.","properties":{"color":{"type":"string","description":"Solid background color hex (e.g. \"003366\")"},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}}},"speaker_notes":{"type":"string","description":"Speaker notes text for this slide"},"transition":{"type":"object","description":"Slide transition effect.","properties":{"type":{"type":"string","description":"Transition type: fade, push, wipe, split, cover, cut, dissolve, blinds, checker, comb, random, strips, wheel, zoom, newsflash"},"speed":{"type":"string","description":"Transition speed: slow, med, fast"}}},"slide_number":{"description":"true to show default slide numbers, or {x?, y?, font_size?, color?} for custom placement"},"master_name":{"type":"string","description":"Name of a defined slide master to use as template"}}}},"slide_masters":{"type":"array","description":"Reusable slide masters. Each: {name, background?, placeholders?: [{name, type, x, y, w, h}], slide_number?, objects?}","items":{"type":"object","properties":{"name":{"type":"string","description":"Master name (referenced by slides via master_name)"},"background":{"type":"object","description":"{color?: hex} or {image_url?: url}"},"placeholders":{"type":"array","description":"Placeholder definitions on the master","items":{"type":"object","properties":{"name":{"type":"string","description":"Placeholder name"},"type":{"type":"string","description":"Placeholder type: title, body"},"x":{"type":"number","description":"X position (inches)"},"y":{"type":"number","description":"Y position (inches)"},"w":{"type":"number","description":"Width (inches)"},"h":{"type":"number","description":"Height (inches)"},"font_size":{"type":"number","description":"Default font size"},"color":{"type":"string","description":"Default text color hex"},"bold":{"type":"boolean","description":"Default bold"},"align":{"type":"string","description":"Default alignment"}},"required":["name","type","x","y","w","h"]}},"slide_number":{"description":"true or {x?, y?, font_size?, color?}"}},"required":["name"]}},"slide_size":{"type":"string","description":"Slide size preset: \"standard\" (10x7.5), \"widescreen\" (13.33x7.5), \"4x3\", \"16x9\", \"16x10\". Default: widescreen."},"custom_width":{"type":"number","description":"Custom slide width in inches (requires custom_height)"},"custom_height":{"type":"number","description":"Custom slide height in inches (requires custom_width)"},"title":{"type":"string","description":"Presentation title (document metadata)"},"author":{"type":"string","description":"Author name (document metadata)"},"subject":{"type":"string","description":"Subject (document metadata)"},"company":{"type":"string","description":"Company name (document metadata)"},"filename":{"type":"string","description":"Output filename (default: presentation.pptx)"}},"required":["slides"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Sales report presentation with chart and table","input":{"slides":[{"elements":[{"type":"text","text":"Q4 Sales Report","x":0.5,"y":0.5,"w":12,"h":1.2,"font_size":36,"bold":true,"color":"003366","align":"center"},{"type":"chart","chart_type":"bar","x":0.5,"y":2,"w":6,"h":4,"data":[{"name":"Revenue","labels":["Oct","Nov","Dec"],"values":[45000,52000,61000]}],"title":"Monthly Revenue","colors":["4472C4"],"show_data_labels":true},{"type":"table","x":7,"y":2,"w":5.5,"first_row_header":true,"header_fill_color":"003366","header_font_color":"FFFFFF","rows":[{"cells":[{"text":"Region"},{"text":"Revenue"},{"text":"Growth"}]},{"cells":[{"text":"North"},{"text":"$245K"},{"text":"+12%","font_color":"00AA00"}]},{"cells":[{"text":"South"},{"text":"$198K"},{"text":"+8%","font_color":"00AA00"}]}]}],"speaker_notes":"Q4 showed strong growth across all regions","background":{"color":"F5F5F5"}}],"title":"Q4 Sales Report","author":"Sales Team","filename":"q4-sales.pptx"}},{"description":"Multi-slide deck with bullet points, shapes, and images","input":{"slides":[{"elements":[{"type":"text","text":"Project Overview","x":0.5,"y":2.5,"w":12,"h":2,"font_size":44,"bold":true,"color":"FFFFFF","align":"center"}],"background":{"color":"1A237E"},"transition":{"type":"fade","speed":"fast"}},{"elements":[{"type":"text","text":"Key Objectives","x":0.5,"y":0.3,"w":12,"h":0.8,"font_size":28,"bold":true,"color":"1A237E"},{"type":"text","x":0.5,"y":1.3,"w":12,"h":4,"font_size":18,"text":[{"text":"Increase market share by 15%","bullet":true},{"text":"Launch 3 new product lines","bullet":true},{"text":"Reduce operational costs by 10%","bullet":true},{"text":"Expand into 2 new regions","bullet":true}]},{"type":"shape","shape":"roundRect","x":9,"y":5.5,"w":3.5,"h":1,"fill_color":"1A237E","text":"Next Steps","text_color":"FFFFFF","font_size":16,"bold":true,"align":"center","valign":"middle"}],"slide_number":true}],"slide_size":"widescreen","filename":"project-overview.pptx"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"presentation_path":{"type":"string","description":"Path to the .pptx file"},"filename":{"type":"string","description":"Output filename"},"slide_count":{"type":"number","description":"Number of slides created"},"slide_masters_defined":{"type":"number","description":"Number of slide masters defined"},"file_size_bytes":{"type":"number","description":"File size in bytes"}}},"returns":"A downloadable .pptx file with all slides, elements, formatting, charts, tables, and transitions applied"},{"name":"read_presentation","displayName":"Read Presentation","description":"Read a .pptx from URL and extract all content as structured JSON — slides, text, shapes, images, charts, tables, notes, layouts, masters, and theme colors.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the .pptx file to read. The tool server CAN fetch any public URL — always pass it."},"slide_range":{"type":"string","description":"Read only these slides (e.g. \"1-3\" or \"5\"). Omit to read all."},"include_notes":{"type":"boolean","description":"Extract speaker notes per slide (default: true)"},"include_layouts":{"type":"boolean","description":"List slide layout names (default: false)"},"include_masters":{"type":"boolean","description":"List slide masters and their layouts (default: false)"},"include_properties":{"type":"boolean","description":"Extract document properties like title, author, dates (default: true)"},"include_theme_colors":{"type":"boolean","description":"Extract theme color palette (default: false)"},"include_media":{"type":"boolean","description":"List media file references per slide (default: false)"}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Read all slides from a presentation","input":{"url":"https://example.com/deck.pptx"}},{"description":"Deep inspection with all metadata","input":{"url":"https://example.com/report.pptx","include_notes":true,"include_layouts":true,"include_masters":true,"include_theme_colors":true,"include_media":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"filename":{"type":"string","description":"Original filename"},"file_size_bytes":{"type":"number","description":"File size in bytes"},"slide_count":{"type":"number","description":"Total number of slides"},"dimensions":{"type":"object","description":"{width_inches, height_inches}"},"slides":{"type":"array","description":"Per-slide data with text, shapes, images, charts, tables, notes"},"properties":{"type":"object","description":"Document properties (title, author, dates)"},"layouts":{"type":"array","description":"Slide layout names"},"masters":{"type":"array","description":"Slide masters with associated layouts"},"theme_colors":{"type":"object","description":"Theme color palette (dk1, dk2, lt1, lt2, accent1-6, hlink, folHlink)"}}},"returns":"Structured JSON with all slide content, text, shapes, images, charts, tables, notes, properties, and optional deep metadata"},{"name":"modify_presentation","displayName":"Modify Presentation","description":"Apply batch operations to an existing .pptx: replace_text, update_speaker_notes, add/delete/reorder/duplicate slides, insert_image, add_text_box, delete_slide_element, update_slide_background, apply_transition, update_properties. Returns modified file.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the .pptx file to modify. The tool server CAN fetch any public URL — always pass it."},"operations":{"type":"array","description":"Operations to apply in order. Each has an \"action\" field plus action-specific params.","items":{"type":"object","properties":{"action":{"type":"string","description":"Operation name (e.g. replace_text, add_slide, delete_slide, insert_image, update_properties, duplicate_slide, apply_transition)"},"slide":{"type":"number","description":"Target slide number (1-based)"}},"required":["action"]}},"filename":{"type":"string","description":"Output filename (default: modified.pptx)"}},"required":["url","operations"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Replace text and add speaker notes to a presentation","input":{"url":"https://example.com/template.pptx","operations":[{"action":"replace_text","find":"{{company}}","replace":"Acme Corp"},{"action":"replace_text","find":"{{date}}","replace":"2026-03-23"},{"action":"update_speaker_notes","slide":1,"notes":"Welcome the audience and introduce the topic"},{"action":"apply_transition","slide":1,"transition_type":"fade","speed":"fast"}]}},{"description":"Add slides, images, text boxes and reorder","input":{"url":"https://example.com/deck.pptx","operations":[{"action":"duplicate_slide","source":1},{"action":"add_text_box","slide":2,"text":"New Section","x":1,"y":3,"w":8,"h":1.5,"font_size":32,"bold":true,"font_color":"003366"},{"action":"insert_image","slide":2,"url":"https://example.com/chart.png","x":2,"y":2,"w":6,"h":4},{"action":"update_slide_background","slide":2,"color":"F0F4F8"},{"action":"update_properties","title":"Updated Deck","author":"Team Lead"}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"presentation_path":{"type":"string","description":"Path to the modified .pptx file"},"filename":{"type":"string","description":"Output filename"},"operations_applied":{"type":"array","description":"Summary of each applied operation"},"slide_count":{"type":"number","description":"Final slide count"},"file_size_bytes":{"type":"number","description":"File size in bytes"}}},"returns":"The modified .pptx file with a summary of all operations applied"}],"workflow":["create_presentation","read_presentation → modify_presentation"],"icon":"/icons/pptx-tools.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with create, read, and modify skills"]}],"premadePrompt":"Create a PowerPoint presentation about [topic] with [number] slides. Include a title slide, key points with bullet lists, and a summary slide."},{"name":"stealth-scraper","displayName":"Stealth Scraper","subtitle":"Scrape bot-protected websites","about":"**Stealth Scraper** extracts data from bot-protected websites that block standard scraping tools. When you're getting 403 errors, CAPTCHA walls, or blocks from Cloudflare, Akamai, DataDome, or PerimeterX — this tool gets through using residential proxies and geo-targeted IPs.\n\nIt's the fallback for when normal web scraping fails. Use it on single pages or crawl entire protected sites. If a site loads fine in your browser but blocks automated requests, this is the tool for the job.\n\n### What you can do\n- Scrape a single bot-protected page using residential proxies and extended rendering wait times\n- Crawl an entire bot-protected site recursively\n- Target geo-specific content using country-level proxy selection\n- Match locale with language headers for localized content\n- Control rendering wait time for heavy single-page applications\n- Return content as markdown, HTML, or raw HTML\n\n### Who it's for\nDevelopers and researchers who need data from sites that actively block scrapers. Data teams collecting pricing, product, or content data from protected sources. Anyone whose standard scraping workflow is hitting bot detection walls.\n\n### How to use it\n1. Try the regular Web Scraper tool first — use Stealth Scraper only when you get 403, 429, or CAPTCHA responses\n2. Use **stealth_scrape** for a single page — it automatically applies residential proxies and a 3-second render wait\n3. Set **country** to match the target site's region (e.g. \"gb\" for UK sites) for better proxy matching\n4. Increase **waitFor** for heavy SPAs that need extra time to render their content\n5. For long React/SPA pages or competitor research, set **fullContent** to true or increase **maxPreviewChars** so the model-facing response includes more than the compact preview\n6. Use **stealth_crawl** for recursive crawling of a protected site — note it's slower and async (~120s)\n\n### Getting started\nNo setup required — the tool uses a shared proxy pool by default, or connect your own account for dedicated proxies.","version":"0.02","categories":["data","development"],"currency":"USD","skills":[{"name":"stealth_scrape","displayName":"Stealth Scrape Page","description":"Scrape a single bot-protected web page using enhanced residential proxies, geo-targeted IPs, and extended rendering wait times. Bypasses Cloudflare, Akamai, DataDome, and similar anti-bot systems.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape"},"formats":{"type":"array","items":{"type":"string"},"description":"Output formats to return (e.g. \"markdown\", \"html\", \"rawHtml\", \"links\", \"screenshot\")"},"onlyMainContent":{"type":"boolean","description":"Extract only the main content, removing navbars, footers, and sidebars"},"includeTags":{"type":"array","items":{"type":"string"},"description":"CSS tags to include in extraction (e.g. [\"article\", \"main\"])"},"excludeTags":{"type":"array","items":{"type":"string"},"description":"CSS tags to exclude from extraction (e.g. [\"nav\", \"footer\"])"},"mobile":{"type":"boolean","description":"Use a mobile user agent and viewport for rendering"},"waitFor":{"type":"number","description":"Milliseconds to wait after page load before capturing content (default 3000)"},"timeout":{"type":"number","description":"Maximum time in milliseconds to wait for the page to load (default 60000)"},"country":{"type":"string","description":"ISO country code for geo-targeted proxy (e.g. \"us\", \"gb\", \"de\", \"jp\"). Default: \"us\""},"languages":{"type":"array","items":{"type":"string"},"description":"Browser language headers (e.g. [\"en-US\", \"en\"])"},"fullContent":{"type":"boolean","description":"Include the complete extracted markdown/text in the formatted response as full_content, useful for long React/SPA pages and competitor research"},"full_content":{"type":"boolean","description":"Alias for fullContent"},"maxPreviewChars":{"type":"number","description":"Maximum characters to include in the formatted preview (default 220, max 20000)"},"max_preview_chars":{"type":"number","description":"Alias for maxPreviewChars"}},"required":["url"]},"annotations":{},"examples":[{"description":"Scrape a Cloudflare-protected page","input":{"url":"https://example.com/protected-page"}},{"description":"Scrape a UK site with geo-targeted proxy","input":{"url":"https://example.co.uk/products","country":"gb","languages":["en-GB"],"onlyMainContent":true}},{"description":"Scrape a protected React/SPA competitor page with full content visible","input":{"url":"https://example.com/competitor","fullContent":true,"waitFor":5000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the scrape was successful"},"data":{"type":"object","description":"Scraped page data including content in requested formats, metadata, and links"}}},"returns":"Scraped page content from bot-protected sites in the requested formats with metadata"},{"name":"stealth_crawl","displayName":"Stealth Crawl Site","description":"Recursively crawl a bot-protected website using enhanced proxies on every page. Bypasses anti-bot systems across the entire crawl, with geo-targeted IPs and extended rendering.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Starting URL for the crawl"},"limit":{"type":"number","description":"Maximum number of pages to crawl (default 50)"},"maxDepth":{"type":"number","description":"Maximum link-following depth from the starting URL"},"includePaths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to include (e.g. [\"/blog/*\", \"/docs/*\"])"},"excludePaths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to exclude (e.g. [\"/admin/*\", \"/api/*\"])"},"allowSubdomains":{"type":"boolean","description":"Whether to follow links to subdomains of the starting URL"},"allowExternalLinks":{"type":"boolean","description":"Whether to follow links to external domains"},"country":{"type":"string","description":"ISO country code for geo-targeted proxy (e.g. \"us\", \"gb\", \"de\", \"jp\"). Default: \"us\""},"languages":{"type":"array","items":{"type":"string"},"description":"Browser language headers (e.g. [\"en-US\", \"en\"])"}},"required":["url"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Crawl a protected blog section","input":{"url":"https://example.com/blog","limit":20}},{"description":"Crawl a Japanese e-commerce site with local proxy","input":{"url":"https://example.jp/products","limit":30,"country":"jp","languages":["ja"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Crawl job status (completed/failed)"},"total":{"type":"number","description":"Total number of pages crawled"},"data":{"type":"array","description":"Array of scraped page results with content and metadata"}}},"returns":"Array of scraped pages from bot-protected sites with content, metadata, and crawl status"}],"icon":"/icons/stealth-scraper.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with stealth_scrape and stealth_crawl skills"]},{"version":"0.02","date":"2026-05-13","changes":["Added fullContent and maxPreviewChars controls for long React/SPA pages and competitor research"]}],"premadePrompt":"Scrape the content from [URL] — it's behind bot protection so normal scraping isn't working. Extract the main content as clean text.","requirements":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}],"credentials":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}]},{"name":"fuel-prices","displayName":"Fuel Prices","subtitle":"Real-time fuel and petrol prices","about":"**Fuel Prices** gives you real-time and historical fuel price data across Australia, UK, Germany, France, Spain, Italy, Austria, and the US and EU at national level. Find the cheapest station near you, compare across borders, or track how prices have moved over time.\n\nFor drivers, fleet managers, and analysts, this is the quickest way to answer questions like \"where's the cheapest diesel within 10km?\" or \"how does US gas compare to European prices?\" — all in one tool without stitching together multiple government data sources.\n\n### What you can do\n- **find_stations** — locate nearby fuel stations with live prices using coordinates, filtered by fuel type and radius\n- **cheapest_fuel** — rank stations near you from cheapest to most expensive with savings summary\n- **station_details** — get full details for a specific station including all fuel types and opening hours\n- **regional_prices** — US state averages or EU country averages for macro price comparisons\n- **price_trends** — weekly US price history with trend direction and year-over-year change\n- **compare_countries** — compare petrol or diesel prices across multiple countries normalized to USD per litre\n\n### Who it's for\nDrivers wanting the cheapest fill-up nearby, logistics and fleet operators tracking fuel costs across regions, and researchers or journalists analysing energy price trends across countries.\n\n### How to use it\n1. Use **find_stations** or **cheapest_fuel** with latitude and longitude to get live local prices\n2. Pass a country code if your coordinates are near a border to ensure the right data source is used\n3. Use **regional_prices** for US state or EU country averages when you don't need station-level detail\n4. Use **compare_countries** to benchmark prices internationally\n\n### Getting started\nNo setup needed for most countries — station-level data for Australia, UK, Germany, France, Spain, Italy, and Austria works immediately. UK requires connecting your account credentials from the GOV.UK Fuel Finder developer portal.","version":"0.05","categories":["data","finance"],"currency":"USD","skills":[{"name":"find_stations","displayName":"Find Stations","description":"Find fuel stations near a location with current prices. Station-level data for all of Australia, UK, Germany, France, Spain, Italy, and Austria.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the search center"},"longitude":{"type":"number","description":"Longitude of the search center"},"radius_km":{"type":"number","description":"Search radius in kilometres (default: 5, max: 25)","default":5},"fuel_type":{"type":"string","description":"Filter by fuel type: petrol, diesel, premium, e10, e85, lpg (default: all)","enum":["petrol","diesel","premium","e10","e85","lpg"]},"country":{"type":"string","description":"Country hint if coordinates are ambiguous (australia, uk, germany, france, spain, italy, austria)"},"limit":{"type":"number","description":"Maximum stations to return (default: 20)","default":20}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find stations near central London","input":{"latitude":51.5074,"longitude":-0.1278}},{"description":"Find diesel stations near Berlin","input":{"latitude":52.52,"longitude":13.405,"fuel_type":"diesel"}},{"description":"Find stations near Paris within 10km","input":{"latitude":48.8566,"longitude":2.3522,"radius_km":10}},{"description":"Find stations near Sydney","input":{"latitude":-33.8688,"longitude":151.2093}},{"description":"Find stations near Perth","input":{"latitude":-31.9505,"longitude":115.8605}},{"description":"Find stations near Melbourne","input":{"latitude":-37.8136,"longitude":144.9631}},{"description":"Find stations near Brisbane","input":{"latitude":-27.4698,"longitude":153.0251}},{"description":"Find diesel stations near Madrid","input":{"latitude":40.4168,"longitude":-3.7038,"fuel_type":"diesel"}},{"description":"Find stations near Rome","input":{"latitude":41.9028,"longitude":12.4964}},{"description":"Find stations near Vienna","input":{"latitude":48.2082,"longitude":16.3738}}],"pricing":"free","returns":"List of nearby fuel stations with current prices, address, brand, and distance from search point"},{"name":"cheapest_fuel","displayName":"Cheapest Fuel","description":"Find the cheapest fuel stations nearby, sorted by price. Shows savings compared to the most expensive option. Works in all of Australia, UK, Germany, France, Spain, Italy, Austria.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the search center"},"longitude":{"type":"number","description":"Longitude of the search center"},"fuel_type":{"type":"string","description":"Fuel type to compare: petrol, diesel, premium, e10, e85, lpg (default: petrol)","enum":["petrol","diesel","premium","e10","e85","lpg"],"default":"petrol"},"radius_km":{"type":"number","description":"Search radius in kilometres (default: 10)","default":10},"count":{"type":"number","description":"Number of cheapest stations to return (default: 5)","default":5},"country":{"type":"string","description":"Country hint (australia, uk, germany, france, spain, italy, austria)"}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Cheapest petrol near Manchester","input":{"latitude":53.4808,"longitude":-2.2426,"fuel_type":"petrol"}},{"description":"Cheapest diesel near Munich","input":{"latitude":48.1351,"longitude":11.582,"fuel_type":"diesel","radius_km":15}}],"pricing":"free","returns":"Ranked list of cheapest stations with prices, savings summary, and distance"},{"name":"station_details","displayName":"Station Details","description":"Get full details for a specific fuel station including all fuel prices, opening hours, and amenities. Supports station lookup by ID (Germany) or by coordinates (all countries).","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"Station ID from a previous find_stations or cheapest_fuel result"},"country":{"type":"string","description":"Country of the station: uk, germany/de, france/fr","enum":["uk","de","germany","france","fr"]},"latitude":{"type":"number","description":"Latitude (used for UK lookups or nearest station search)"},"longitude":{"type":"number","description":"Longitude (used for UK lookups or nearest station search)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get German station details by ID","input":{"station_id":"6b2bd0b8-22db-424e-8547-c2abcfe06a6c","country":"de"}},{"description":"Find nearest station details","input":{"latitude":51.5074,"longitude":-0.1278,"country":"uk"}}],"pricing":"free","returns":"Full station details including all fuel prices, opening hours, brand, and amenities"},{"name":"regional_prices","displayName":"Regional Prices","description":"Get average fuel prices for a country, US state, or EU region. Covers US state-level data and EU country-level averages.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country: us/usa, eu/europe, or a specific EU country name (germany, france, italy, etc.)","default":"us"},"region":{"type":"string","description":"US state name or abbreviation (california, ny, tx, etc.). Only applies to US."},"fuel_type":{"type":"string","description":"Fuel type: regular/petrol, premium, midgrade, diesel (default: regular)","enum":["regular","petrol","premium","midgrade","diesel"]}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US national gasoline prices","input":{"country":"us"}},{"description":"California diesel prices","input":{"country":"us","region":"california","fuel_type":"diesel"}},{"description":"All EU country prices","input":{"country":"eu"}},{"description":"Germany fuel prices","input":{"country":"germany"}}],"pricing":"free","returns":"Regional fuel price averages with cheapest/most expensive regions and historical comparison"},{"name":"price_trends","displayName":"Price Trends","description":"Track fuel price trends over time. Shows weekly price history with trend analysis, highs, lows, and percent change. Currently US only.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country (currently only \"us\" supported)","default":"us"},"region":{"type":"string","description":"US state or region (e.g. california, new_york). Omit for national average."},"fuel_type":{"type":"string","description":"Fuel type: regular/petrol, premium, diesel (default: regular)","enum":["regular","petrol","premium","diesel"]},"weeks":{"type":"number","description":"Number of weeks of history (default: 12, max: 52)","default":12}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US national gas price trend (12 weeks)","input":{"country":"us"}},{"description":"California diesel trend over 6 months","input":{"country":"us","region":"california","fuel_type":"diesel","weeks":26}}],"pricing":"free","returns":"Weekly price history with trend direction, percent change, highs, lows, and average"},{"name":"compare_countries","displayName":"Compare Countries","description":"Compare fuel prices across multiple countries. Prices are normalized to USD per litre for fair comparison. Supports US and all EU/EEA countries.","inputSchema":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"},"description":"List of countries to compare (e.g. [\"us\", \"uk\", \"germany\", \"france\", \"italy\", \"spain\"])"},"fuel_type":{"type":"string","description":"Fuel type to compare: petrol, diesel (default: diesel)","enum":["petrol","diesel"],"default":"diesel"}},"required":["countries"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Compare diesel prices across major economies","input":{"countries":["us","uk","germany","france","italy","spain"],"fuel_type":"diesel"}},{"description":"Compare petrol prices in Western Europe","input":{"countries":["uk","france","germany","netherlands","belgium"],"fuel_type":"petrol"}}],"pricing":"free","returns":"Ranked comparison of fuel prices across countries with cheapest/most expensive and price difference"}],"workflow":["find_stations","cheapest_fuel","regional_prices","find_stations → cheapest_fuel","regional_prices → price_trends","compare_countries"],"icon":"/icons/fuel-prices.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with 6 skills","UK station-level prices via GOV.UK Fuel Finder API","Germany station-level prices via Tankerkoenig","France station-level prices via Prix Carburants","US regional prices via EIA","EU country-level prices via Oil Bulletin","Cross-country price comparison"]},{"version":"0.02","date":"2026-03-27","changes":["Australia: NSW FuelCheck v2 (NSW + ACT + TAS, 2500+ stations, real-time availability)","Australia: WA FuelWatch RSS (all WA stations, daily next-day pricing)","Spain: Ministerio REST API (all Spanish stations, daily prices)","Italy: MIMIT open data (20,000+ stations, daily prices)","Austria: E-Control Spritpreisrechner (real-time, Price Transparency Act)","UK: Retailer JSON feeds fallback (Asda, BP, Tesco, Shell + 8 more, no auth)","Auto-detection of Australian states for API routing (NSW/ACT/TAS → FuelCheck, WA → FuelWatch)","Fuel availability tracking for NSW (out-of-stock $999.90 convention)"]},{"version":"0.03","date":"2026-03-27","changes":["Australia: PetrolSpy integration for full AU coverage (VIC, QLD, SA, NT)","PetrolSpy used as fallback for NSW/WA when primary APIs unavailable","All 8 Australian states/territories now have station-level data"]},{"version":"0.04","date":"2026-04-07","changes":["Victoria: added official government fuel price data (1,500+ registered stations, updated daily)"]},{"version":"0.05","date":"2026-04-03","changes":["Improved reliability and error handling across all data sources","UK: improved coverage resilience","UK: fixed petrol filtering","UK: fixed Ascona station data","UK: added Moto motorway service areas (47 stations)","UK: removed Tesco and Morrisons (no longer providing valid UK data)","UK: fixed Shell data retrieval","UK: expanded official data source coverage"]}],"premadePrompt":"Where is the cheapest petrol near [your location or postcode]? Show me the nearest stations sorted by price.","requirements":[{"name":"uk_fuel_finder_client_id","type":"credential","displayName":"UK Fuel Finder Client ID","description":"OAuth client ID for GOV.UK Fuel Finder API — register at developer.fuel-finder.service.gov.uk","envFallback":"UK_FUEL_FINDER_CLIENT_ID","acquireUrl":"https://www.developer.fuel-finder.service.gov.uk","setupGuide":"An OAuth client ID from the GOV.UK Fuel Finder developer portal.\n\n1. Go to https://www.developer.fuel-finder.service.gov.uk\n2. Sign in with GOV.UK One Login (create one if you don't have it)\n3. Register a new application on the developer portal\n4. Your client_id will be generated — save it as this credential\n5. Also save the client_secret as \"uk_fuel_finder_client_secret\"\n\nAPI docs: https://www.developer.fuel-finder.service.gov.uk/apicontent"},{"name":"uk_fuel_finder_client_secret","type":"secret","displayName":"UK Fuel Finder Client Secret","description":"OAuth client secret for GOV.UK Fuel Finder API — used with client_credentials grant","envFallback":"UK_FUEL_FINDER_CLIENT_SECRET","setupGuide":"The OAuth client secret paired with your UK Fuel Finder client ID.\n\nThis is generated alongside your client_id when you register an application\nat https://www.developer.fuel-finder.service.gov.uk\n\nSee the uk_fuel_finder_client_id guide for full registration steps."},{"name":"tankerkoenig_api_key","type":"secret","displayName":"Tankerkoenig API Key","description":"API key for German fuel prices — free registration at creativecommons.tankerkoenig.de","envFallback":"TANKERKOENIG_API_KEY"},{"name":"eia_api_key","type":"secret","displayName":"EIA API Key","description":"US Energy Information Administration API key — free at eia.gov/opendata/register.php","envFallback":"EIA_API_KEY"},{"name":"vic_fair_fuel_api_key","type":"secret","displayName":"Victoria Fair Fuel API Key","description":"Consumer ID for Victoria's Fair Fuel Open Data API — covers all 1,500+ registered stations in Victoria","envFallback":"VIC_FAIR_FUEL_API_KEY","acquireUrl":"https://service.vic.gov.au/find-services/transport-and-driving/servo-saver/help-centre/servo-saver-public-api/apply-for-servo-saver-public-api","setupGuide":"A Consumer ID from Service Victoria's Fair Fuel Open Data program.\n\n1. Go to https://service.vic.gov.au/find-services/transport-and-driving/servo-saver/help-centre/servo-saver-public-api/apply-for-servo-saver-public-api\n2. Complete the free application form and accept the Terms and Acceptable Use Policy\n3. Your Consumer ID (API key) will be emailed to you once approved\n4. Save it as this credential\n\nData has a 24-hour delay. Rate limit: 10 requests per 60 seconds."},{"name":"nsw_fuel_api_key","type":"credential","displayName":"NSW FuelCheck API Key","description":"Consumer key for NSW FuelCheck API (covers NSW+ACT+TAS) — free signup at api.nsw.gov.au","envFallback":"NSW_FUEL_API_KEY","acquireUrl":"https://api.nsw.gov.au/Product/Index/22","setupGuide":"A consumer key from the NSW Government API portal for fuel price data.\n\n1. Go to https://api.nsw.gov.au/Account/Register and create a free account\n2. Check your email for a confirmation link (may take up to 24 hours)\n3. Sign in and go to https://api.nsw.gov.au/Product/Index/22 (Fuel API)\n4. Subscribe to the Fuel API\n5. Click \"Create APP\" — it will be in \"Pending\" state until approved\n6. Once approved (email notification), your API Key and Secret appear in your account\n7. Save the API Key (consumer key) as this credential\n8. Also save the API Secret as \"nsw_fuel_api_secret\""},{"name":"nsw_fuel_api_secret","type":"secret","displayName":"NSW FuelCheck API Secret","description":"Consumer secret for NSW FuelCheck API — used with OAuth client_credentials grant","envFallback":"NSW_FUEL_API_SECRET","setupGuide":"The consumer secret paired with your NSW FuelCheck API key.\n\nThis is generated alongside your API key when your application is approved\nat https://api.nsw.gov.au\n\nSee the nsw_fuel_api_key guide for full registration steps."}],"credentials":[{"name":"uk_fuel_finder_client_id","type":"credential","displayName":"UK Fuel Finder Client ID","description":"OAuth client ID for GOV.UK Fuel Finder API — register at developer.fuel-finder.service.gov.uk","envFallback":"UK_FUEL_FINDER_CLIENT_ID","acquireUrl":"https://www.developer.fuel-finder.service.gov.uk","setupGuide":"An OAuth client ID from the GOV.UK Fuel Finder developer portal.\n\n1. Go to https://www.developer.fuel-finder.service.gov.uk\n2. Sign in with GOV.UK One Login (create one if you don't have it)\n3. Register a new application on the developer portal\n4. Your client_id will be generated — save it as this credential\n5. Also save the client_secret as \"uk_fuel_finder_client_secret\"\n\nAPI docs: https://www.developer.fuel-finder.service.gov.uk/apicontent"},{"name":"uk_fuel_finder_client_secret","type":"secret","displayName":"UK Fuel Finder Client Secret","description":"OAuth client secret for GOV.UK Fuel Finder API — used with client_credentials grant","envFallback":"UK_FUEL_FINDER_CLIENT_SECRET","setupGuide":"The OAuth client secret paired with your UK Fuel Finder client ID.\n\nThis is generated alongside your client_id when you register an application\nat https://www.developer.fuel-finder.service.gov.uk\n\nSee the uk_fuel_finder_client_id guide for full registration steps."},{"name":"tankerkoenig_api_key","type":"secret","displayName":"Tankerkoenig API Key","description":"API key for German fuel prices — free registration at creativecommons.tankerkoenig.de","envFallback":"TANKERKOENIG_API_KEY"},{"name":"eia_api_key","type":"secret","displayName":"EIA API Key","description":"US Energy Information Administration API key — free at eia.gov/opendata/register.php","envFallback":"EIA_API_KEY"},{"name":"vic_fair_fuel_api_key","type":"secret","displayName":"Victoria Fair Fuel API Key","description":"Consumer ID for Victoria's Fair Fuel Open Data API — covers all 1,500+ registered stations in Victoria","envFallback":"VIC_FAIR_FUEL_API_KEY","acquireUrl":"https://service.vic.gov.au/find-services/transport-and-driving/servo-saver/help-centre/servo-saver-public-api/apply-for-servo-saver-public-api","setupGuide":"A Consumer ID from Service Victoria's Fair Fuel Open Data program.\n\n1. Go to https://service.vic.gov.au/find-services/transport-and-driving/servo-saver/help-centre/servo-saver-public-api/apply-for-servo-saver-public-api\n2. Complete the free application form and accept the Terms and Acceptable Use Policy\n3. Your Consumer ID (API key) will be emailed to you once approved\n4. Save it as this credential\n\nData has a 24-hour delay. Rate limit: 10 requests per 60 seconds."},{"name":"nsw_fuel_api_key","type":"credential","displayName":"NSW FuelCheck API Key","description":"Consumer key for NSW FuelCheck API (covers NSW+ACT+TAS) — free signup at api.nsw.gov.au","envFallback":"NSW_FUEL_API_KEY","acquireUrl":"https://api.nsw.gov.au/Product/Index/22","setupGuide":"A consumer key from the NSW Government API portal for fuel price data.\n\n1. Go to https://api.nsw.gov.au/Account/Register and create a free account\n2. Check your email for a confirmation link (may take up to 24 hours)\n3. Sign in and go to https://api.nsw.gov.au/Product/Index/22 (Fuel API)\n4. Subscribe to the Fuel API\n5. Click \"Create APP\" — it will be in \"Pending\" state until approved\n6. Once approved (email notification), your API Key and Secret appear in your account\n7. Save the API Key (consumer key) as this credential\n8. Also save the API Secret as \"nsw_fuel_api_secret\""},{"name":"nsw_fuel_api_secret","type":"secret","displayName":"NSW FuelCheck API Secret","description":"Consumer secret for NSW FuelCheck API — used with OAuth client_credentials grant","envFallback":"NSW_FUEL_API_SECRET","setupGuide":"The consumer secret paired with your NSW FuelCheck API key.\n\nThis is generated alongside your API key when your application is approved\nat https://api.nsw.gov.au\n\nSee the nsw_fuel_api_key guide for full registration steps."}]},{"name":"people-search","displayName":"People Search","subtitle":"Find anyone across 500+ sites","about":"**People Search** finds anyone online from an email address, username, full name, or phone number. It searches across 500+ platforms and data sources simultaneously — social networks, developer communities, forums, business registries, court records, and more. Whether you have a single identifier or a handful of them, it builds the most complete picture available from public sources.\n\nThe deep search skill is the flagship: it cross-references all your identifiers, generates username variations, runs parallel OSINT queries across professional networks and documents, and assembles a unified profile. Individual skills let you narrow the search — check if an email has been in a data breach, reverse-search a photo, find business directorships, or search court records. All searches are read-only and limited to publicly available information.\n\n### What you can do\n- Run a comprehensive multi-phase search from any combination of name, email, username, or phone\n- Search a username across 500+ websites and social platforms\n- Run targeted OSINT queries across LinkedIn, resumes, news, court records, and forums\n- Reverse image search to find where a photo appears online\n- Check email or username exposure in known data breaches\n- Search business records across UK Companies House, SEC EDGAR, and 170+ jurisdictions\n- Search US court records via the CourtListener RECAP archive\n- Find social media profiles across 10 major platforms by real name\n\n### Who it's for\nInvestigators, journalists, HR professionals, security researchers, fraud analysts, and anyone who needs to verify someone's online identity or build a public profile from available information.\n\n### How to use it\n1. Use **deep_search** with any identifiers you have — name, email, username, or phone\n2. Use **osint_search** for people with minimal online presence — runs parallel targeted web queries\n3. Use **search_by_username** to find all accounts registered under a specific handle\n4. Use **check_breaches** for a fast check on whether an email or username has been exposed\n\n### Getting started\nNo setup required — all skills run without any API key.","version":"0.06","categories":["search","data"],"currency":"USD","skills":[{"name":"deep_search","displayName":"Deep Search","description":"Multi-phase search taking any combination of identifiers. Cross-references all sources, scans 500+ sites, generates username variations, and enriches with web results. Best for hard-to-find people or building a complete profile from minimal starting info.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name (e.g. \"Jane Smith\"). Used to search GitHub, generate username variations, and web search."},"email":{"type":"string","description":"Email address. Used for Gravatar, GitHub, DNS MX, breach checks, and cross-referencing."},"username":{"type":"string","description":"Username to scan across 500+ sites and enrich with GitHub/Reddit profiles."},"phone":{"type":"string","description":"Phone number in any format. Parsed for country detection and E.164 formatting."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Search with name and email","input":{"name":"John Smith","email":"john@example.com"}},{"description":"Search with just a username","input":{"username":"johndoe"}},{"description":"Search with everything available","input":{"name":"Jane Doe","email":"jane@example.com","username":"janedoe"}}],"pricing":"paid","returns":"Comprehensive profile with social profiles across 500+ sites, platform enrichment, breach exposure, username variations, cross-referenced identifiers, and web mentions"},{"name":"search_by_email","displayName":"Search by Email","description":"Search for a person by email address. Checks profile databases, developer platforms, email validity, and breach databases. Enriches with web search results when available.","inputSchema":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search for"}},"required":["email"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search by email address","input":{"email":"user@example.com"}}],"pricing":"paid","returns":"Unified profile with avatar, social links, developer matches, email validation, breach exposure, and web mentions"},{"name":"search_by_username","displayName":"Search by Username","description":"Search a username across 500+ websites and social platforms. Returns matching profiles categorized by type (social, coding, gaming, forums). Enriches with full profile data from developer and social platforms.","inputSchema":{"type":"object","properties":{"username":{"type":"string","description":"Username to search for (letters, numbers, dots, hyphens, underscores)"},"depth":{"type":"string","description":"Search depth: \"quick\" checks ~60 top sites, \"standard\" checks all 500+ sites","enum":["quick","standard"],"default":"standard"}},"required":["username"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":25,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Comprehensive username search","input":{"username":"johndoe"}},{"description":"Quick search on top sites","input":{"username":"johndoe","depth":"quick"}}],"pricing":"paid","returns":"List of found profiles grouped by category, with enriched data from developer and social platforms"},{"name":"search_by_name","displayName":"Search by Name","description":"Search for a person by name with optional location and company filters. Searches developer profiles and enriches with web search results including professional network matches.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name or partial name to search for"},"location":{"type":"string","description":"City, state, or country to narrow results (e.g. \"San Francisco\", \"UK\")"},"company":{"type":"string","description":"Company name to narrow results (e.g. \"Google\", \"Microsoft\")"}},"required":["name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search by full name","input":{"name":"John Smith"}},{"description":"Search with location and company","input":{"name":"Jane Doe","location":"San Francisco","company":"Google"}}],"pricing":"paid","returns":"Developer profiles, web search results, and professional network matches for the given name"},{"name":"search_by_phone","displayName":"Search by Phone","description":"Reverse-lookup a phone number across reverse-lookup directories (Whitepages, Spokeo, BeenVerified, NumLookup, etc.), business listings (Yelp, Yellow Pages, BBB, Google Maps, LinkedIn), and general web mentions. UK numbers also hit Companies House. Detects country and formats in E.164. 60+ countries.","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number in any format (e.g. \"+1-555-123-4567\", \"07700900123\", \"+44 20 7946 0958\")"}},"required":["phone"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US phone number","input":{"phone":"+1-555-123-4567"}},{"description":"UK phone number","input":{"phone":"+44 20 7946 0958"}}],"pricing":"paid","returns":"Parsed phone details (country, E.164 format, digit count), web mentions, reverse-lookup directory hits, business listings, and UK Companies House matches when applicable"},{"name":"check_breaches","displayName":"Check Breaches","description":"Check if an email address or username has been exposed in known data breaches. Returns breach sources, dates, and types of exposed data fields.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Email address or username to check for breaches"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check email for breaches","input":{"query":"user@example.com"}},{"description":"Check username for breaches","input":{"query":"johndoe"}}],"pricing":"paid","returns":"Breach status with source names, dates, and exposed field types"},{"name":"osint_search","displayName":"OSINT Search","description":"Investigative search running targeted queries in parallel across professional networks, resumes, social media, business records, news, forums, academic papers, and public documents. Best for people with minimal online presence.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person to investigate (e.g. \"Jane Smith\")"},"email":{"type":"string","description":"Email address to trace across the web"},"username":{"type":"string","description":"Username to find real identity and other accounts"},"phone":{"type":"string","description":"Phone number to find where it appears publicly"},"company":{"type":"string","description":"Company name to narrow results (e.g. \"Acme Corp\", \"Google\")"},"location":{"type":"string","description":"City, state, or country to narrow results (e.g. \"London\", \"New York\")"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Investigate by name and company","input":{"name":"Jane Smith","company":"Acme Corp","location":"London"}},{"description":"Find real identity behind a username","input":{"username":"janesmith_dev"}},{"description":"Trace where an email appears publicly","input":{"email":"jane@example.com","name":"Jane Smith"}}],"pricing":"paid","returns":"Categorized findings from targeted web searches: LinkedIn profiles, social accounts, resumes/documents with contact details, news mentions, business records, and forum posts"},{"name":"search_by_photo","displayName":"Reverse Image Search","description":"Find where a photo appears online. Searches the image URL across the web and provides direct links to Google Lens, TinEye, Yandex, and Bing. Use for identity verification or finding the source of a photo.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Image as a ToolRouter file ID or hosted HTTP(S) URL for reverse search"}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Reverse search a profile photo","input":{"image_url":"https://example.com/profile.jpg"}}],"pricing":"paid","returns":"Reverse search engine URLs (Google Lens, TinEye, Yandex, Bing), web pages containing the image, and visual matches"},{"name":"search_business_records","displayName":"Business Records Search","description":"Search corporate registrations for directorships, officer appointments, SEC filings, and business associations. Covers UK Companies House, US SEC EDGAR, and OpenCorporates (170+ jurisdictions).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person to search for in business records"},"country":{"type":"string","description":"Country to focus search: \"uk\", \"us\", or \"all\" (default: all)","enum":["uk","us","all"],"default":"all"},"company":{"type":"string","description":"Company name to narrow results (e.g. \"Acme Corp\")"}},"required":["name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search business records globally","input":{"name":"Elon Musk"}},{"description":"Search UK company records","input":{"name":"Jane Smith","country":"uk"}}],"pricing":"paid","returns":"SEC EDGAR filings, UK Companies House directorships, OpenCorporates records, and business web mentions"},{"name":"search_court_records","displayName":"Court Records Search","description":"Search court cases, legal filings, and criminal records. Queries CourtListener RECAP archive (US federal and state courts) plus web search for broader court records and legal proceedings.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person to search in court records"},"jurisdiction":{"type":"string","description":"State or jurisdiction to narrow results (e.g. \"California\", \"New York\", \"Federal\")"}},"required":["name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search all court records","input":{"name":"John Smith"}},{"description":"Search in specific jurisdiction","input":{"name":"Jane Doe","jurisdiction":"California"}}],"pricing":"paid","returns":"CourtListener case records, court filing web results, and criminal record web results"},{"name":"search_social_media","displayName":"Social Media Deep Dive","description":"Search 10 major platforms by real name to find profiles, posts, and mentions on LinkedIn, Twitter/X, Instagram, Facebook, TikTok, YouTube, Reddit, GitHub, Medium/Substack, and Pinterest/Tumblr. Finds accounts even when usernames differ from the real name.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full name to search across social platforms"},"username":{"type":"string","description":"Known username to include in searches"},"location":{"type":"string","description":"City or country to narrow results (e.g. \"London\", \"USA\")"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find social profiles by name","input":{"name":"Jane Smith","location":"London"}},{"description":"Find profiles by name and username","input":{"name":"John Smith","username":"johnsmith"}}],"pricing":"paid","returns":"Profiles found on each platform with URLs, grouped by platform, plus a unified list of all discovered profile URLs"}],"workflow":["deep_search","osint_search","search_by_email → search_by_username"],"icon":"/icons/people-search.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release"]},{"version":"0.02","date":"2026-03-23","changes":["Added deep_search skill: multi-phase cross-referencing with username variation generation","Added username variation generator for finding alternate accounts from a name"]},{"version":"0.03","date":"2026-03-23","changes":["Added skip_trace skill: deep person lookup via skip tracing databases (phones, addresses, relatives, employment)","Added email permutation generation in deep_search (tries first.last@gmail, etc.)","Added Wayback Machine archived profile lookup in deep_search","Added domain ownership check via WHOIS composition in deep_search","deep_search now runs 8 phases instead of 5"]},{"version":"0.04","date":"2026-03-23","changes":["Replaced broken skip_trace with osint_search: targeted Google dork queries for hard-to-find people","osint_search runs 8-15 specialized queries in parallel: LinkedIn, resumes, social media, business records, news, forums, academic papers, documents","Extracts LinkedIn URLs, social profiles, and PDF/document links from results"]},{"version":"0.05","date":"2026-03-23","changes":["Added search_by_photo: reverse image search with Google Lens, TinEye, Yandex, Bing URLs","Added search_business_records: SEC EDGAR filings + UK Companies House + OpenCorporates (170+ jurisdictions)","Added search_court_records: CourtListener RECAP archive (US courts) + criminal record web search","Added search_social_media: targeted search across 10 major platforms by real name","All skills now pricing: paid at $0.005 per call"]},{"version":"0.06","date":"2026-05-08","changes":["search_by_phone now also queries reverse-lookup directories (TruePeopleSearch, Whitepages, Spokeo, BeenVerified, NumLookup, ThatsThem, Nuwber) and business listings (Yelp, Yellow Pages, BBB, Google Maps, Foursquare, LinkedIn) — replaces an essentially empty result for unknown phone numbers","UK numbers also cross-referenced against Companies House for registered business phones"]}],"premadePrompt":"Find everything you can about [full name] — social profiles, professional accounts, and any public online presence. Their email is [email address] and they may use the username [username]."},{"name":"real-estate","displayName":"Real Estate Data","subtitle":"Listings, valuations & market data","about":"**Real Estate Data** gives you property listings, valuations, sold prices, market trends, rental yields, area research, and sale history across the US, UK, Australia, and UAE — all from a single tool. Just pass an address, postcode, or zip code and it detects the market automatically.\n\nWhether you're a buyer researching a neighborhood, an investor analysing rental yields, or an agent preparing a market report, this tool pulls live data from multiple real estate databases and delivers it in a structured format you can act on immediately.\n\n### What you can do\n- **search_listings** — find properties for sale or rent in any area, with price, bedroom, and type filters\n- **property_valuation** — get an estimated value for a specific address with comparable recent sales\n- **sold_history** — see what properties in an area actually sold for, with summary statistics\n- **market_trends** — track price changes, inventory levels, and days on market over time\n- **rental_analysis** — get rental estimates, gross yield percentages, and comparable rentals\n- **area_research** — crime stats, school ratings, transport links, demographics, and planning applications\n- **property_history** — full sale transaction history for a specific property address\n\n### Who it's for\nProperty buyers doing pre-purchase research, investors evaluating rental yields and capital growth, estate agents building market reports, and anyone who needs structured property data without logging into multiple portals.\n\n### How to use it\n1. To research a specific property, start with **property_valuation** for the estimated value and comps, then run **property_history** for the full transaction record.\n2. To research an area, use **sold_history** and **market_trends** together for price context, then **area_research** for lifestyle factors.\n3. To find properties, use **search_listings** with location, listing type, and filters.\n\n### Getting started\nAlways include the postcode, zip code, or state in your location string — this is how the tool detects which market to query.","version":"0.02","categories":["data","finance"],"currency":"USD","skills":[{"name":"search_listings","displayName":"Search Listings","description":"Find properties currently for sale or rent across the US, Australia, and UAE. Filter by price, bedrooms, property type, and radius. The tool server CAN fetch listings from any supported market — always pass the full location with country or state.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"Address, city, postcode, or ZIP code to search. Include country or state for accurate market detection."},"listing_type":{"type":"string","description":"Type of listing","enum":["sale","rent"],"default":"sale"},"price_min":{"type":"number","description":"Minimum price in local currency"},"price_max":{"type":"number","description":"Maximum price in local currency"},"bedrooms_min":{"type":"number","description":"Minimum number of bedrooms"},"property_type":{"type":"string","description":"Property type filter","enum":["house","apartment","condo","townhouse","land"]},"radius_miles":{"type":"number","description":"Search radius in miles (default 5)","default":5},"limit":{"type":"number","description":"Max results to return (default 10, max 25)","default":10},"context":{"type":"string","description":"Free-text notes about the client or search context"}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US house search","input":{"location":"Austin, TX 78701","bedrooms_min":3,"price_max":500000}},{"description":"UAE rental search","input":{"location":"Dubai Marina, UAE","listing_type":"rent","property_type":"apartment"}},{"description":"Australian property search","input":{"location":"Sydney NSW 2000","price_min":800000}}],"pricing":"paid","returns":"Array of property listings with address, price, bedrooms, bathrooms, property type, area, listing URL, days on market, and key features. Includes market_note on coverage."},{"name":"property_valuation","displayName":"Property Valuation","description":"Get estimated value of a specific property plus comparable recent sales nearby. Covers the US, UK, and Australia. Returns a price range estimate, comparables with prices and dates, and value per sqft.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Full street address with postcode or ZIP code"},"context":{"type":"string","description":"Additional property details — bedrooms, condition, renovations etc."}},"required":["address"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US property valuation","input":{"address":"42 Oak Street, Austin, TX 78701"}},{"description":"UK property valuation","input":{"address":"15 Elm Road, Manchester, M20 6RT"}},{"description":"With context","input":{"address":"42 Oak Street, Austin, TX 78701","context":"Recently renovated, 3-bed detached"}}],"pricing":"paid","returns":"Estimated value (low/mid/high range), 3-5 comparable sales with prices and dates, value per sqft/sqm, confidence level, and data source."},{"name":"sold_history","displayName":"Sold History","description":"Recent sold prices in an area — what properties actually went for. Covers the US, UK, Australia, and UAE. Returns individual transactions with prices, dates, and property details plus summary statistics.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"Postcode, ZIP code, suburb, or area name"},"months":{"type":"number","description":"Lookback period in months (default 12, max 60)","default":12},"property_type":{"type":"string","description":"Filter by property type","enum":["house","apartment","condo","townhouse"]},"limit":{"type":"number","description":"Max results (default 20, max 50)","default":20},"context":{"type":"string","description":"Context about what the agent is looking for"}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"London sold prices","input":{"location":"SW1A 1AA","months":24}},{"description":"NYC apartments","input":{"location":"Brooklyn, NY 11201","property_type":"apartment","limit":10}},{"description":"Dubai transactions","input":{"location":"Dubai Marina, UAE"}}],"pricing":"paid","returns":"Array of sold properties with address, price, date, type, bedrooms, area. Plus summary stats: median, average, range, total transactions."},{"name":"market_trends","displayName":"Market Trends","description":"Price trends, supply/demand indicators, and market conditions for an area over time. Returns median and average prices, price changes over the selected period, inventory levels, and days on market.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City, postcode, ZIP code, or area name"},"period":{"type":"string","description":"Lookback period","enum":["3m","6m","12m","3y","5y"],"default":"12m"},"property_type":{"type":"string","description":"Filter by property type","enum":["house","apartment","condo","townhouse"]},"context":{"type":"string","description":"Context about the analysis"}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"3-year Manchester trends","input":{"location":"Manchester, UK","period":"3y"}},{"description":"Recent Austin market","input":{"location":"Austin, TX 78701","period":"6m"}},{"description":"Dubai apartments","input":{"location":"Dubai, UAE","property_type":"apartment"}}],"pricing":"paid","returns":"Current median/avg price, price change over period, inventory levels, days on market, supply vs demand, price per sqft/sqm trend, and market summary."},{"name":"rental_analysis","displayName":"Rental Analysis","description":"Rental estimates, yields, and rental market data for a property or area. Returns estimated monthly rent, gross yield percentage, rental demand indicators, and comparable rental listings nearby.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"Address, postcode, ZIP code, or area name"},"property_type":{"type":"string","description":"Property type","enum":["house","apartment","condo","townhouse"]},"bedrooms":{"type":"number","description":"Number of bedrooms"},"context":{"type":"string","description":"Investment context — buy-to-let, short-term rental, etc."}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"NYC rental analysis","input":{"location":"Brooklyn, NY 11201","property_type":"apartment","bedrooms":2}},{"description":"London rental yield","input":{"location":"Shoreditch, London E1 6AN","bedrooms":1}},{"description":"Dubai rental","input":{"location":"Dubai Marina, UAE","context":"Short-term rental potential"}}],"pricing":"paid","returns":"Estimated monthly rent (low/mid/high), gross yield %, rental demand indicator, avg days to let, rental price trend, and comparable rentals."},{"name":"area_research","displayName":"Area Research","description":"What is it like to live here? Returns crime statistics, nearby schools, transport stations, shops, parks, demographics, household income, and planning applications for any location.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City, suburb, postcode, or area name"},"context":{"type":"string","description":"What matters — schools, transport, safety, etc."}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"UK area research","input":{"location":"Shoreditch, London E1 6AN","context":"Young family, need good primary schools"}},{"description":"US area","input":{"location":"Austin, TX 78701"}},{"description":"UAE area","input":{"location":"Dubai Marina, UAE"}}],"pricing":"paid","returns":"Population, demographics, household income, schools with ratings, crime data, transport links, planning applications, and amenities."},{"name":"property_history","displayName":"Property History","description":"Look up the full sale history for a specific property address. Returns every recorded sale with price, date, property type, and tenure. Shows price changes over time across multiple transactions.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Full property address — e.g. \"12 Brushfield Street, London E1 6AT\". Include house number and street for best results."},"limit":{"type":"number","description":"Max results (default 10, max 30)","default":10}},"required":["address"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"UK property history (free)","input":{"address":"12 Brushfield Street, London E1 6AT"}},{"description":"UK with postcode only","input":{"address":"42 School Lane, Manchester M20 6RT"}},{"description":"US property history","input":{"address":"42 Oak Street, Austin, TX 78701"}}],"pricing":"free","returns":"Full sale history: every recorded transaction with price, date, property type, and tenure. Plus summary with price changes over time."}],"workflow":["search_listings","property_valuation","sold_history → market_trends","rental_analysis","search_listings → property_valuation → area_research"],"icon":"/icons/real-estate.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release — US, UK, Australia, UAE markets","Added property_history skill — free UK address lookup via Land Registry"]},{"version":"0.02","date":"2026-04-04","changes":["UK sold history now accepts postcode districts (e.g. \"OX28\", \"SW1A\") in addition to full postcodes — returns recent sales across the whole district"]}],"premadePrompt":"What is [property address] worth today? Show me recent sold prices nearby, rental yield estimates, and what the area is like to live in.","requirements":[{"name":"rentcast","type":"secret","displayName":"RentCast API Key","description":"API key for RentCast US property data (valuations, comps, rentals, market stats)","acquireUrl":"https://rentcast.io/api","envFallback":"RENTCAST_API_KEY"},{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"},{"name":"propertydata","type":"secret","displayName":"PropertyData API Key","description":"API key for PropertyData.co.uk — UK valuations, sold prices, rents, yields, demographics","acquireUrl":"https://propertydata.co.uk/api","envFallback":"PROPERTYDATA_API_KEY"},{"name":"domain_au","type":"secret","displayName":"Domain.com.au Client ID","description":"OAuth client ID for Domain.com.au — Australian listings and sale results (also set DOMAIN_AU_CLIENT_SECRET)","acquireUrl":"https://developer.domain.com.au","envFallback":"DOMAIN_AU_CLIENT_ID"}],"credentials":[{"name":"rentcast","type":"secret","displayName":"RentCast API Key","description":"API key for RentCast US property data (valuations, comps, rentals, market stats)","acquireUrl":"https://rentcast.io/api","envFallback":"RENTCAST_API_KEY"},{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"},{"name":"propertydata","type":"secret","displayName":"PropertyData API Key","description":"API key for PropertyData.co.uk — UK valuations, sold prices, rents, yields, demographics","acquireUrl":"https://propertydata.co.uk/api","envFallback":"PROPERTYDATA_API_KEY"},{"name":"domain_au","type":"secret","displayName":"Domain.com.au Client ID","description":"OAuth client ID for Domain.com.au — Australian listings and sale results (also set DOMAIN_AU_CLIENT_SECRET)","acquireUrl":"https://developer.domain.com.au","envFallback":"DOMAIN_AU_CLIENT_ID"}]},{"name":"background-removal","displayName":"Remove Image Background","subtitle":"Cut out subjects from any photo","about":"**Remove Image Background** cuts the subject out of any photo and returns a clean transparent PNG. It handles complex edges — hair, fur, transparent objects, glasses — with high accuracy, and includes a pro-grade model trained specifically on e-commerce product imagery.\n\nBackground removal is a routine part of product photography, content design, and catalog production. This tool removes the manual selection work in Photoshop, letting you process a single image or a batch of up to 20 in one call. The result is a transparent cutout ready for compositing, mockups, or white-background product listings.\n\n### What you can do\n- Remove the background from a single image and get a transparent PNG or WebP\n- Batch process up to 20 images in one call\n- Choose the right model for the job: light (fast), heavy (fine edges), portrait (people), or photoroom (pro e-commerce)\n- Apply a solid background color directly on the cutout for instant product-on-white output\n- Control output resolution and format\n\n### Who it's for\nE-commerce sellers preparing product images for listings. Designers compositing subjects into new backgrounds. Photographers doing batch headshot processing. Anyone who needs clean cutouts without manual masking.\n\n### How to use it\n1. Use **remove_background** with an image URL — the light model is fast and works well for most images\n2. Switch to the heavy model for images with fine edges like hair, fur, or transparent objects\n3. Use the photoroom model for e-commerce product shots — it's trained on commercial product imagery and supports bg_color for instant white backgrounds\n4. Use **batch_remove** with an array of up to 20 image URLs to process a catalog efficiently\n\n### Getting started\n**remove_background** works immediately with any public image URL — no setup needed.","version":"0.03","categories":["media"],"currency":"USD","skills":[{"name":"remove_background","displayName":"Remove Background","description":"Remove the background from a single image and return a clean transparent cutout. Works on product photos, portraits, animals, and complex scenes with fine edges.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"model":{"type":"string","description":"\"light\" fast; \"heavy\" best for fine edges; \"portrait\" for people; \"photoroom\" pro e-commerce cutout with optional bg_color.","enum":["light","heavy","portrait","photoroom"],"default":"light"},"output_format":{"type":"string","description":"Output image format. PNG supports transparency and is recommended. \"jpg\" only for photoroom with a solid bg_color.","enum":["png","webp","jpg"],"default":"png"},"resolution":{"type":"string","description":"Processing resolution (light/heavy/portrait only). Higher values improve edge accuracy but are slower.","enum":["1024x1024","2048x2048"],"default":"1024x1024"},"bg_color":{"type":"string","description":"photoroom only — hex colour (e.g. \"#FFFFFF\") to flatten the cutout onto instead of transparent."},"size":{"type":"string","description":"photoroom only — output resolution tier. \"preview\" is low-res; \"full\" is original.","enum":["preview","medium","hd","full"]},"crop":{"type":"boolean","description":"photoroom only — crop the image tight to the foreground subject."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Cut out a product from its background for a listing","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}},{"description":"Remove the background from a detailed photo with fine edges","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","model":"heavy","resolution":"2048x2048"}},{"description":"Pro-grade e-commerce cutout with a white backdrop using Photoroom","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","model":"photoroom","bg_color":"#FFFFFF","output_format":"jpg"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"URL of the processed image with background removed"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"uncertainty_score":{"type":"number","description":"photoroom only — confidence in the cutout (0–1, lower is more confident)"},"foreground_bbox":{"type":"object","description":"photoroom only — subject bounding box normalised 0–1 {top,left,width,height}"}}},"returns":"Transparent cutout image ready for compositing or direct use"},{"name":"batch_remove","displayName":"Batch Remove Backgrounds","description":"Remove backgrounds from multiple images in one call (up to 20). Ideal for processing product catalogs or photo sets. Returns per-image results with transparent cutouts.","inputSchema":{"type":"object","properties":{"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file IDs or hosted HTTP(S) URLs."},"model":{"type":"string","description":"\"light\" fast; \"heavy\" best edges; \"portrait\" for people; \"photoroom\" pro e-commerce cutout.","enum":["light","heavy","portrait","photoroom"],"default":"light"},"output_format":{"type":"string","description":"Output image format for all images.","enum":["png","webp","jpg"],"default":"png"}},"required":["image_urls"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Process a set of product images for an online store","input":{"image_urls":["https://toolrouter.com/demo-product-photo.webp","https://toolrouter.com/demo-product-photo.webp"]}},{"description":"Batch remove backgrounds from portrait photos with high quality","input":{"image_urls":["https://toolrouter.com/demo-ugc-skincare.webp","https://toolrouter.com/demo-ugc-skincare.webp","https://toolrouter.com/demo-ugc-skincare.webp"],"model":"portrait"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Array of processed images with per-image status"},"total":{"type":"number","description":"Total images submitted"},"succeeded":{"type":"number","description":"Number of images successfully processed"},"failed":{"type":"number","description":"Number of images that failed"}}},"returns":"Transparent cutout images with per-image success or failure status"}],"workflow":["remove_background","batch_remove"],"icon":"/icons/background-removal.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with single and batch background removal"]},{"version":"0.02","date":"2026-03-24","changes":["Added Prodia as an alternative provider for background mask generation"]},{"version":"0.03","date":"2026-04-22","changes":["Added Photoroom model — pro-grade cutouts trained on e-commerce imagery with a solid-colour background option"]}],"premadePrompt":"Remove the background from this image and give me a clean transparent cutout: [image URL].","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"image-upscale","displayName":"Image Upscale","subtitle":"AI image upscaling up to 10x","about":"**Image Upscale** increases image resolution up to 10x using AI models that add genuine detail, not just interpolation. Choose the right model for your use case — fast general-purpose upscaling, seamless tiling for textures, professional-grade with face enhancement and text refinement, or noise and compression cleanup.\n\nWhether you need a small product thumbnail blown up for print, a noisy photo cleaned up and sharpened, or a game texture tiled at 4x resolution, there's a model designed for that specific task. Batch mode processes up to 10 images in parallel.\n\n### What you can do\n- **upscale_image** — upscale a single image up to 10x with model selection and quality controls\n- **batch_upscale** — process up to 10 images in parallel, with per-image model overrides\n- **list_models** — browse all available models with pricing, maximum scale factors, and variants\n- Choose a target resolution (720p to 4K) instead of a scale factor when you have a specific output size in mind\n\n### Who it's for\nPhotographers and retouchers restoring old or low-resolution images, game developers upscaling texture assets, e-commerce teams enlarging product photos for high-DPI displays, and anyone who needs a small image at a larger size without visible degradation.\n\n### How to use it\n1. Use **upscale_image** with your image URL — the default model handles most general photos well at 2x\n2. Set target_resolution if you need a specific output size like 4K instead of a scale multiple\n3. Use the topaz model for professional work with face enhancement, text sharpening, or CGI upscaling\n4. Use **batch_upscale** to process multiple images in one call, mixing models per image if needed\n\n### Getting started\nWorks immediately with no setup — pass any public image URL to upscale it.","version":"0.02","categories":["media"],"currency":"USD","skills":[{"name":"upscale_image","displayName":"Upscale Image","description":"Upscale a single image up to 10x resolution. Choose a model (SeedVR2 default, Topaz for pro, Seamless for tiles). Set a target resolution (720p-4K) or a scale factor.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"model":{"type":"string","enum":["seedvr2","seedvr2-seamless","topaz","chrono-edit","prodia-upscale"],"description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"upscale_factor":{"type":"number","description":"Scale factor (1-10 for SeedVR2, 1-4 for Topaz). Default 2x. Ignored if target_resolution is set."},"target_resolution":{"type":"string","enum":["720p","1080p","1440p","2160p"],"description":"Target resolution instead of scale factor. SeedVR2 models only."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format. Defaults to png."},"noise_scale":{"type":"number","description":"Noise control (0-1). SeedVR2 models only."},"seed":{"type":"number","description":"Random seed for reproducible results."},"topaz_variant":{"type":"string","enum":["Standard V2","Low Resolution V2","CGI","High Fidelity V2","Text Refine","Recovery","Recovery V2","Redefine","Standard MAX","Wonder"],"description":"Topaz model variant. Only applies when model=topaz. Default: Standard V2."},"face_enhancement":{"type":"boolean","description":"Enable face processing. Topaz only. Default: true."},"face_enhancement_strength":{"type":"number","description":"Face enhancement intensity (0-1). Topaz only. Default: 0.8."},"sharpen":{"type":"number","description":"Sharpening intensity (0-1). Topaz only."},"denoise":{"type":"number","description":"Denoising intensity (0-1). Topaz only."},"fix_compression":{"type":"number","description":"JPEG compression artifact removal (0-1). Topaz only."},"face_enhancement_creativity":{"type":"number","description":"Face enhancement creativity (0-1). Topaz only."},"detail":{"type":"number","description":"Detail recovery (0-1). Topaz Recovery V2 only."},"strength":{"type":"number","description":"Enhancement strength (0.01-1). Topaz Text Refine only."},"creativity":{"type":"integer","description":"Generative detail level (1-6). Topaz Redefine only."},"texture":{"type":"integer","description":"Texture detail level (1-5). Topaz Redefine only."},"prompt":{"type":"string","description":"Guidance text (max 1024 chars). Topaz Redefine only."},"autoprompt":{"type":"boolean","description":"Auto-generate guidance prompt. Topaz Redefine only."},"subject_detection":{"type":"string","enum":["All","Foreground","Background"],"description":"Focus area for enhancement. Topaz only."}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Upscale an image 2x","input":{"image_url":"https://placehold.co/400x300.png"}},{"description":"Upscale to 4K resolution","input":{"image_url":"https://placehold.co/400x300.png","target_resolution":"2160p"}},{"description":"Pro upscale with Topaz","input":{"image_url":"https://placehold.co/400x300.png","model":"topaz","topaz_variant":"High Fidelity V2"}},{"description":"Upscale a tileable texture","input":{"image_url":"https://placehold.co/400x300.png","model":"seedvr2-seamless","upscale_factor":4}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image":{"type":"object","description":"Upscaled image with URL and dimensions","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}},"source_image":{"type":"string","description":"Original source image URL"},"model":{"type":"string","description":"Model key used"},"upscale_factor":{"type":"number","description":"Scale factor used (null if target_resolution was set)"},"target_resolution":{"type":"string","description":"Target resolution used (null if upscale_factor was set)"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Upscaled image URL, downloadable asset, model used, dimensions, and cost"},{"name":"batch_upscale","displayName":"Batch Upscale","description":"Upscale multiple images in parallel (up to 10). Apply the same settings to all or override per-image. Each image can use a different model and upscale factor.","inputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Array of images to upscale (max 10). Each item must have image_url, optionally model, upscale_factor, target_resolution.","items":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"model":{"type":"string","description":"Override model for this image."},"upscale_factor":{"type":"number","description":"Override upscale factor for this image."},"target_resolution":{"type":"string","enum":["720p","1080p","1440p","2160p"],"description":"Override target resolution."}},"required":["image_url"]}},"default_model":{"type":"string","enum":["seedvr2","seedvr2-seamless","topaz","chrono-edit","prodia-upscale"],"description":"Default model for all images unless overridden per-image. Call list_models for options. Default: seedvr2."},"default_upscale_factor":{"type":"number","description":"Default scale factor for all images unless overridden. Default: 2."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format. Defaults to png."}},"required":["images"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Batch upscale 3 images","input":{"images":[{"image_url":"https://placehold.co/400x300.png"},{"image_url":"https://placehold.co/800x600.png"},{"image_url":"https://placehold.co/320x240.png"}]}},{"description":"Batch with mixed models","input":{"images":[{"image_url":"https://placehold.co/400x300.png","model":"topaz"},{"image_url":"https://placehold.co/800x600.png"}],"default_upscale_factor":4}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Per-image results","items":{"type":"object","properties":{"index":{"type":"number","description":"Image index in input array"},"status":{"type":"string","enum":["success","error"],"description":"Result status"},"image":{"type":"object","description":"Upscaled image (null on error)"},"source_image":{"type":"string","description":"Original source URL"},"model":{"type":"string","description":"Model used"},"error":{"type":"string","description":"Error message (null on success)"}}}},"summary":{"type":"object","properties":{"total":{"type":"number","description":"Total images processed"},"succeeded":{"type":"number","description":"Successful upscales"},"failed":{"type":"number","description":"Failed upscales"}}}}},"contentType":"image","returns":"Array of upscaled image URLs with assets, per-image status, and summary with total cost"},{"name":"list_models","displayName":"List Models","description":"List all available image upscale models with key, pricing, max upscale factor, description, and variants.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"List all upscale models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available upscale models","items":{"type":"object","properties":{"key":{"type":"string","description":"Model key for use in upscale_image/batch_upscale"},"display_name":{"type":"string","description":"Human-readable name"},"endpoint_id":{"type":"string","description":"Provider endpoint identifier"},"max_upscale_factor":{"type":"number","description":"Maximum upscale factor (null if fixed output)"},"pricing":{"type":"object","description":"Cost per unit"},"description":{"type":"string","description":"Model description"},"variants":{"type":"array","description":"Available variants (Topaz only, null for others)"},"is_default":{"type":"boolean","description":"Whether this is the default model"}}}},"total":{"type":"number","description":"Total number of models"}}},"returns":"All available upscale models with key, name, pricing, max factor, description, and variants"}],"workflow":["upscale_image","batch_upscale","list_models → upscale_image"],"icon":"/icons/image-upscale.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release: 4 upscale models (13 variants), single + batch, model choice"]},{"version":"0.02","date":"2026-03-24","changes":["Added Prodia as an alternative upscale provider (model key: \"prodia-upscale\", 2x, ~$0.001)"]}],"premadePrompt":"Upscale this image to [2x / 4K / target resolution]: [image URL]. I want a higher-resolution version suitable for [print / display / web].","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"video-upscale","displayName":"Video Upscale","subtitle":"AI video upscaling up to 10x","about":"**Video Upscale** uses AI to increase the resolution of any video — up to 4K or 10x the original size — while recovering fine detail, sharpening faces, and removing noise. It supports five different AI models tuned for different content types and quality budgets.\n\nStandard upscaling tools simply stretch pixels and get blurry. AI upscaling reconstructs detail that wasn't in the original, making old footage look crisp, AI-generated clips look cinematic, and compressed social videos look broadcast-quality.\n\n### What you can do\n- **upscale_video** — increase resolution using your choice of AI model, up to 10x factor or a specific target resolution like 1080p, 2K, or 4K\n- **list_models** — browse available models with descriptions to choose the right one for your content\n\n### Who it's for\nFilmmakers restoring old or low-res footage, content creators polishing AI-generated video clips, social media editors bringing compressed downloads back to full quality, and archivists upgrading historical video for modern display.\n\n### How to use it\n1. Use **list_models** to see the available options and pick one suited to your content\n2. Run **upscale_video** with the video URL and your chosen model\n3. Set **target_resolution** (1080p, 2K, 4K) or an **upscale_factor** (2x, 4x, etc.)\n4. For AI-generated footage, use the aigc enhancement preset; for old film, use the old_film preset; for faces, choose the seedvr2 model\n\n### Getting started\nHave a publicly accessible video URL ready. For general content, the default model works well. For premium results on faces and detailed textures, choose seedvr2. For the fastest turnaround, try flashvsr.","version":"0.01","categories":["media"],"currency":"USD","skills":[{"name":"upscale_video","displayName":"Upscale Video","description":"Upscale a video up to 10x resolution or to a target resolution (1080p, 2K, 4K). Choose a model optimized for the content type — general footage, faces, AI-generated, or old film.","inputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"model":{"type":"string","enum":["bytedance","seedvr2","flashvsr","topaz","realesrgan"],"description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"upscale_factor":{"type":"number","description":"Scale factor (1-10 for SeedVR2/Bytedance, 1-4 for Topaz/FlashVSR, 1-8 for RealESRGAN). Default 2x. Ignored if target_resolution is set."},"target_resolution":{"type":"string","enum":["720p","1080p","1440p","2160p","2k","4k"],"description":"Target output resolution. Not all models support all resolutions."},"enhancement_preset":{"type":"string","enum":["general","ugc","short_series","aigc","old_film"],"description":"Content-aware enhancement preset. Bytedance only. Default: general."},"enhancement_tier":{"type":"string","enum":["fast","standard","pro"],"description":"Enhancement quality tier. Bytedance only. Pro is 10x cost. Default: standard."},"fidelity":{"type":"string","enum":["high","medium"],"description":"Fidelity level. Bytedance only. Default: high."},"noise_scale":{"type":"number","description":"Noise control (0-1). SeedVR2 only."},"output_format":{"type":"string","enum":["X264 (.mp4)","VP9","PRORES4444","GIF"],"description":"Output video format. SeedVR2 and FlashVSR only. Default: X264 (.mp4)."},"output_quality":{"type":"string","enum":["low","medium","high","maximum"],"description":"Output encoding quality. SeedVR2 and FlashVSR only. Default: high."},"acceleration":{"type":"string","enum":["regular","high","full"],"description":"Processing speed vs quality tradeoff. FlashVSR only. Default: regular."},"quality":{"type":"number","description":"Tile blending quality (0-100). FlashVSR only. Default: 70."},"color_fix":{"type":"boolean","description":"Enable color correction. FlashVSR only. Default: true."},"preserve_audio":{"type":"boolean","description":"Preserve original audio track. FlashVSR only. Default: false."},"topaz_variant":{"type":"string","enum":["Proteus","Artemis HQ","Artemis MQ","Artemis LQ","Nyx","Nyx Fast","Nyx XL","Nyx HF","Gaia HQ","Gaia CG"],"description":"Topaz AI model variant. Topaz only. Default: Proteus."},"target_fps":{"type":"number","description":"Target frame rate (16-60). Enables frame interpolation. Bytedance and Topaz only."},"compression":{"type":"number","description":"Compression artifact removal (0-1). Topaz only."},"noise":{"type":"number","description":"Noise reduction (0-1). Topaz only."},"halo":{"type":"number","description":"Halo reduction (0-1). Topaz only."},"grain":{"type":"number","description":"Film grain amount (0-1). Topaz only."},"recover_detail":{"type":"number","description":"Detail recovery (0-1). Topaz only."},"h264_output":{"type":"boolean","description":"Output H264 codec instead of H265. Topaz only. Default: false."},"seed":{"type":"number","description":"Random seed for reproducible results. SeedVR2 and FlashVSR only."}},"required":["video_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Upscale a video to 1080p","input":{"video_url":"https://example.com/video.mp4"}},{"description":"Upscale to 4K with Bytedance","input":{"video_url":"https://example.com/video.mp4","target_resolution":"4k"}},{"description":"Premium upscale with SeedVR2","input":{"video_url":"https://example.com/video.mp4","model":"seedvr2","target_resolution":"2160p"}},{"description":"Topaz with noise reduction","input":{"video_url":"https://example.com/video.mp4","model":"topaz","noise":0.5,"recover_detail":0.7}},{"description":"Upscale old film footage","input":{"video_url":"https://example.com/video.mp4","enhancement_preset":"old_film"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video":{"type":"object","description":"Upscaled video with URL and metadata","properties":{"url":{"type":"string","description":"Video URL"},"content_type":{"type":"string","description":"MIME type"},"file_name":{"type":"string","description":"File name"},"file_size":{"type":"number","description":"File size in bytes"}}},"source_video":{"type":"string","description":"Original source video URL"},"model":{"type":"string","description":"Model key used"},"upscale_factor":{"type":"number","description":"Scale factor used (null if target_resolution was set)"},"target_resolution":{"type":"string","description":"Target resolution used (null if upscale_factor was set)"},"request_id":{"type":"string","description":"Request ID for tracking"}}},"returns":"Upscaled video URL, downloadable asset, model used, and cost"},{"name":"list_models","displayName":"List Models","description":"List all available video upscale models with key, pricing, max upscale factor, description, and variants.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"List all video upscale models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available video upscale models","items":{"type":"object","properties":{"key":{"type":"string","description":"Model key for use in upscale_video"},"display_name":{"type":"string","description":"Human-readable name"},"endpoint_id":{"type":"string","description":"Provider endpoint identifier"},"max_upscale_factor":{"type":"number","description":"Maximum upscale factor"},"pricing":{"type":"object","description":"Cost per unit"},"description":{"type":"string","description":"Model description"},"variants":{"type":"array","description":"Available variants (Topaz only, null for others)"},"target_resolutions":{"type":"array","description":"Supported target resolutions (null if not applicable)"},"is_default":{"type":"boolean","description":"Whether this is the default model"}}}},"total":{"type":"number","description":"Total number of models"}}},"returns":"All available video upscale models with key, name, pricing, max factor, description, and variants"}],"workflow":["upscale_video","list_models → upscale_video"],"icon":"/icons/video-upscale.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release: 5 upscale models (15+ variants), target resolution and factor modes"]}],"premadePrompt":"Upscale this video to 4K: [video URL]. It's [describe content, e.g. an old home video / AI-generated footage / a talking-head recording] and I want the best quality result.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"ev-chargers","displayName":"EV Chargers","subtitle":"EV charging stations worldwide","about":"**EV Chargers** finds electric vehicle charging stations anywhere in the world — over 500,000 locations across 100+ countries. Search near any address, plan stops along a driving route, or compare charging infrastructure between countries and networks.\n\nEvery result includes connector types, power output, pricing, network operator, and access type. Filter by the connectors your car uses (CCS, CHAdeMO, Tesla/NACS, Type 2), by charging speed, or by minimum power output. For US locations, it draws on richer government data for more complete coverage.\n\n### What you can do\n- **find_chargers** — find charging stations near a location with filters for connector type, speed, network, and power\n- **charger_details** — get full details on a specific station including all connectors, pricing, and access hours\n- **route_chargers** — find charging stations along a driving route between two points\n- **network_stats** — compare charging networks within a country by station count and coverage\n- **country_stats** — national EV infrastructure summary for any country\n\n### Who it's for\nEV drivers planning road trips, fleet managers assessing charging coverage, researchers comparing infrastructure between regions, and developers building EV-related apps.\n\n### How to use it\n1. Call **find_chargers** with latitude and longitude and a search radius. Add your connector type to filter for compatible stations.\n2. Drill into any result with **charger_details** using the station ID for full specs.\n3. For road trips, use **route_chargers** with origin and destination coordinates.\n\n### Getting started\nCall **find_chargers** with your current coordinates and connector type to find nearby compatible stations.","version":"0.01","categories":["data"],"currency":"USD","skills":[{"name":"find_chargers","displayName":"Find Chargers","description":"Find EV charging stations near a location. Returns stations with connector types, power levels, network, address, distance, and availability status. Supports filtering by connector, speed, network, and access type.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the search center"},"longitude":{"type":"number","description":"Longitude of the search center"},"radius_km":{"type":"number","description":"Search radius in kilometres (default: 10, max: 100)","default":10},"connector_type":{"type":"string","description":"Filter by connector type","enum":["ccs","chademo","tesla","type1","type2","j1772","nacs","any"]},"charging_level":{"type":"string","description":"Filter by charging speed: level1 (slow AC), level2 (standard AC), dc_fast (rapid DC), any","enum":["level1","level2","dc_fast","any"]},"network":{"type":"string","description":"Filter by charging network name (e.g. Tesla, ChargePoint, EVgo, Blink, Pod Point, BP Pulse)"},"access_type":{"type":"string","description":"Filter by access: public, private, any (default: public)","enum":["public","private","any"],"default":"public"},"min_power_kw":{"type":"number","description":"Minimum charger power output in kW (e.g. 50 for fast chargers, 150 for ultra-rapid)"},"limit":{"type":"number","description":"Maximum stations to return (default: 20, max: 100)","default":20}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find chargers near central London","input":{"latitude":51.5074,"longitude":-0.1278}},{"description":"Find DC fast chargers near San Francisco","input":{"latitude":37.7749,"longitude":-122.4194,"charging_level":"dc_fast"}},{"description":"Find Tesla chargers near Berlin","input":{"latitude":52.52,"longitude":13.405,"network":"Tesla"}},{"description":"Find CCS chargers with 150kW+ near Paris","input":{"latitude":48.8566,"longitude":2.3522,"connector_type":"ccs","min_power_kw":150}}],"pricing":"free","returns":"List of nearby EV charging stations with connector types, power levels, network, distance, and status"},{"name":"charger_details","displayName":"Charger Details","description":"Get full details for a specific charging station by ID. Returns all connections with power and connector info, operator details, usage cost, and availability status.","inputSchema":{"type":"object","properties":{"station_id":{"type":"string","description":"Station ID from a find_chargers or route_chargers result. Prefix with source — e.g. \"ocm:12345\" or \"nrel:67890\""}},"required":["station_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get details for an OCM station","input":{"station_id":"ocm:123456"}},{"description":"Get details for a US NREL station","input":{"station_id":"nrel:67890"}}],"pricing":"free","returns":"Full station details including all connectors, power levels, operator, address, pricing, and status"},{"name":"route_chargers","displayName":"Route Chargers","description":"Find EV charging stations along a driving route between two points. Ideal for road trip planning. Returns chargers near the route sorted by distance from start. US routes use the NREL route API; international routes sample waypoints along the path.","inputSchema":{"type":"object","properties":{"start_latitude":{"type":"number","description":"Starting point latitude"},"start_longitude":{"type":"number","description":"Starting point longitude"},"end_latitude":{"type":"number","description":"Destination latitude"},"end_longitude":{"type":"number","description":"Destination longitude"},"route_distance_km":{"type":"number","description":"Maximum distance from route in km to search for stations (default: 5, max: 25)","default":5},"connector_type":{"type":"string","description":"Filter by connector type","enum":["ccs","chademo","tesla","type1","type2","j1772","nacs","any"]},"charging_level":{"type":"string","description":"Filter by charging speed: level2, dc_fast, any","enum":["level2","dc_fast","any"]},"limit":{"type":"number","description":"Maximum stations to return (default: 20, max: 50)","default":20}},"required":["start_latitude","start_longitude","end_latitude","end_longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find chargers on a road trip from LA to San Francisco","input":{"start_latitude":34.0522,"start_longitude":-118.2437,"end_latitude":37.7749,"end_longitude":-122.4194}},{"description":"Find DC fast chargers from London to Edinburgh","input":{"start_latitude":51.5074,"start_longitude":-0.1278,"end_latitude":55.9533,"end_longitude":-3.1883,"charging_level":"dc_fast"}}],"pricing":"free","returns":"EV chargers along the driving route with distance from route, connector types, and power levels"},{"name":"network_stats","displayName":"Network Stats","description":"Get statistics about EV charging networks in a country or region. Shows station counts per network, connector type breakdown, and fast vs slow charger ratios.","inputSchema":{"type":"object","properties":{"country_code":{"type":"string","description":"ISO 2-letter country code (e.g. US, GB, DE, FR, NL, NO). Use \"US\" for NREL data."},"network":{"type":"string","description":"Filter to a specific network name for detailed breakdown (e.g. \"Tesla\", \"ChargePoint\")"}},"required":["country_code"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"EV network stats for the US","input":{"country_code":"US"}},{"description":"EV network stats for the UK","input":{"country_code":"GB"}},{"description":"Tesla network stats in Germany","input":{"country_code":"DE","network":"Tesla"}}],"pricing":"free","returns":"Network breakdown with station counts, connector types, and charging speed distribution for the country"},{"name":"country_stats","displayName":"Country Stats","description":"Get a high-level summary of EV charging infrastructure in a country. Total stations, connector type distribution, fast vs slow ratio, top networks, and growth indicators.","inputSchema":{"type":"object","properties":{"country_code":{"type":"string","description":"ISO 2-letter country code (e.g. US, GB, DE, FR, NL, NO, CN, JP, AU)"}},"required":["country_code"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"EV infrastructure in the United States","input":{"country_code":"US"}},{"description":"EV infrastructure in Norway","input":{"country_code":"NO"}},{"description":"EV infrastructure in the UK","input":{"country_code":"GB"}}],"pricing":"free","returns":"National EV infrastructure summary with total stations, connectors, top networks, and speed distribution"}],"workflow":["find_chargers","find_chargers → charger_details","route_chargers","network_stats","country_stats"],"icon":"/icons/ev-chargers.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with 5 skills: find_chargers, charger_details, route_chargers, network_stats, country_stats"]}],"premadePrompt":"Find EV charging stations near [city or address], especially fast chargers. I drive a [car model] — filter for compatible connectors if possible.","requirements":[{"name":"nrel_api_key","type":"secret","displayName":"NREL API Key","description":"API key for US Department of Energy Alternative Fuel Stations data — free at developer.nrel.gov","acquireUrl":"https://developer.nrel.gov/signup/","envFallback":"NREL_API_KEY"},{"name":"ocm_api_key","type":"secret","displayName":"Open Charge Map API Key","description":"API key for Open Charge Map global charging data — free at openchargemap.org/site/develop","acquireUrl":"https://openchargemap.org/site/develop","envFallback":"OCM_API_KEY"}],"credentials":[{"name":"nrel_api_key","type":"secret","displayName":"NREL API Key","description":"API key for US Department of Energy Alternative Fuel Stations data — free at developer.nrel.gov","acquireUrl":"https://developer.nrel.gov/signup/","envFallback":"NREL_API_KEY"},{"name":"ocm_api_key","type":"secret","displayName":"Open Charge Map API Key","description":"API key for Open Charge Map global charging data — free at openchargemap.org/site/develop","acquireUrl":"https://openchargemap.org/site/develop","envFallback":"OCM_API_KEY"}]},{"name":"crime-stats","displayName":"Crime Stats","subtitle":"Crime data for 35+ countries","about":"**Crime Stats** provides crime data for the UK, US, and 35+ European countries — from street-level incidents near any UK address to national statistics and cross-border comparisons. All from official government sources.\n\nWhether you're assessing neighborhood safety before moving house, researching crime trends for a report, or comparing how countries rank on violent crime, this tool pulls the data from the right source for your question. UK street-level data is updated monthly and covers individual crime reports with outcomes. US and European data covers all 50 states and 35+ countries with FBI and Eurostat statistics.\n\n### What you can do\n- **search_crimes** — street-level crime reports near any location in England, Wales, or Northern Ireland\n- **crime_stats** — national crime statistics for any US state or 35+ European country\n- **compare_countries** — side-by-side safety comparison between any two countries\n- **stop_and_search** — UK police stop and search records with demographic breakdowns\n\n### Who it's for\nHomebuyers, renters, journalists, researchers, policy analysts, and anyone who needs factual crime data rather than anecdotal impressions. Also useful for relocation decisions, insurance research, and academic work.\n\n### How to use it\n1. For UK street-level data, use **search_crimes** with coordinates (use the address-geocoding tool to convert an address to lat/lon)\n2. For national statistics, use **crime_stats** with a country name or US state\n3. To compare safety between two countries, use **compare_countries**\n4. For UK policing data with demographic detail, use **stop_and_search**","version":"0.01","categories":["data"],"currency":"USD","skills":[{"name":"search_crimes","displayName":"Search Crimes","description":"Search for crimes near a specific location at street level. Returns individual crime reports with category, location, date, and outcome. Currently covers England, Wales & Northern Ireland.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the search location"},"longitude":{"type":"number","description":"Longitude of the search location"},"date":{"type":"string","description":"Month to search in YYYY-MM format (default: latest available)"},"category":{"type":"string","description":"Filter by crime category","enum":["all-crime","anti-social-behaviour","bicycle-theft","burglary","criminal-damage-arson","drugs","other-theft","possession-of-weapons","public-order","robbery","shoplifting","theft-from-the-person","vehicle-crime","violent-crime"]},"limit":{"type":"number","description":"Maximum crime records to return (default: 50, max: 200)","default":50}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Crimes near central London","input":{"latitude":51.5074,"longitude":-0.1278}},{"description":"Burglaries near Manchester in January 2025","input":{"latitude":53.4808,"longitude":-2.2426,"category":"burglary","date":"2025-01"}},{"description":"Vehicle crime near Birmingham","input":{"latitude":52.4862,"longitude":-1.8904,"category":"vehicle-crime"}}],"pricing":"free","returns":"Street-level crime reports with category, location, date, outcome, and aggregate breakdown by crime type"},{"name":"crime_stats","displayName":"Crime Stats","description":"Get national or regional crime statistics. US data from the FBI covers violent crime, homicide, robbery, assault, property crime, burglary, larceny, and vehicle theft — filterable by state. European data from Eurostat covers 35 countries with ICCS crime categories.","inputSchema":{"type":"object","properties":{"country_code":{"type":"string","description":"ISO 2-letter country code: US for FBI data, or any European country (DE, FR, IT, ES, GB, NL, SE, NO, etc.)"},"region":{"type":"string","description":"US state abbreviation (e.g. CA, NY, TX). Only applies to US."},"year":{"type":"string","description":"Specific year to query (e.g. \"2022\"). Default: most recent 5 years."}},"required":["country_code"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US national crime statistics","input":{"country_code":"US"}},{"description":"Crime in California","input":{"country_code":"US","region":"CA"}},{"description":"Crime statistics for Germany","input":{"country_code":"DE"}},{"description":"Crime in France for 2022","input":{"country_code":"FR","year":"2022"}}],"pricing":"free","returns":"Crime statistics with counts and rates per 100,000 population, broken down by crime type and year"},{"name":"compare_countries","displayName":"Compare Countries","description":"Compare crime rates side-by-side across multiple countries. Combines FBI data (US) with Eurostat data (35 European countries) for cross-border comparison. Supports homicide rates, robbery, burglary, and violent crime.","inputSchema":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"},"description":"List of ISO country codes to compare (e.g. [\"US\", \"DE\", \"FR\", \"GB\", \"SE\"]). 2-15 countries."},"crime_type":{"type":"string","description":"Type of crime to compare: homicide, robbery, burglary, violent (default: homicide)","enum":["homicide","robbery","burglary","violent"],"default":"homicide"},"year":{"type":"string","description":"Specific year to compare (default: most recent available)"}},"required":["countries"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Compare homicide rates across major countries","input":{"countries":["US","DE","FR","GB","SE","NO"],"crime_type":"homicide"}},{"description":"Compare robbery in Western Europe","input":{"countries":["GB","FR","DE","ES","IT","NL"],"crime_type":"robbery"}}],"pricing":"free","returns":"Ranked comparison of crime rates across countries with highest and lowest indicators"},{"name":"stop_and_search","displayName":"Stop and Search","description":"Get police stop and search records near a location in England and Wales. Includes reason for stop, outcome, and demographic breakdowns by ethnicity, gender, and age.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the search location"},"longitude":{"type":"number","description":"Longitude of the search location"},"date":{"type":"string","description":"Month in YYYY-MM format (default: latest available)"},"limit":{"type":"number","description":"Maximum records to return (default: 50, max: 200)","default":50}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Stop and search near Brixton","input":{"latitude":51.4613,"longitude":-0.1156}},{"description":"Stop and search in central Manchester","input":{"latitude":53.4808,"longitude":-2.2426}}],"pricing":"free","returns":"Stop and search records with demographic breakdowns by outcome, reason, ethnicity, gender, and age"}],"workflow":["search_crimes","crime_stats","compare_countries","stop_and_search"],"icon":"/icons/crime-stats.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with 4 skills: search_crimes, crime_stats, compare_countries, stop_and_search"]}],"premadePrompt":"What are the crime rates in [city or country]? How does it compare to [another country] for violent crime and burglary?","requirements":[{"name":"nrel_api_key","type":"secret","displayName":"NREL API Key","description":"API key for US Department of Energy Alternative Fuel Stations data — free at developer.nrel.gov","acquireUrl":"https://developer.nrel.gov/signup/","envFallback":"NREL_API_KEY"}],"credentials":[{"name":"nrel_api_key","type":"secret","displayName":"NREL API Key","description":"API key for US Department of Energy Alternative Fuel Stations data — free at developer.nrel.gov","acquireUrl":"https://developer.nrel.gov/signup/","envFallback":"NREL_API_KEY"}]},{"name":"company-lookup","displayName":"Company Lookup","subtitle":"Company data for UK, US & EU","about":"**Company Lookup** gives you full corporate intelligence on any UK, US, or EU company — directors, ownership, filings, charges, insolvency status, financials, and VAT validation — all from official registries in one place.\n\nPulling this information manually means visiting Companies House, SEC EDGAR, GLEIF, and several EU portals separately. This tool aggregates them all. It covers 5 million UK companies, all US public companies via SEC EDGAR, and 2.7 million global entities through the GLEIF LEI network. Financials are extracted from structured iXBRL accounts for UK companies and XBRL filings for US companies.\n\n### What you can do\n- **search_companies** — find companies by name across UK, US, and international registries\n- **company_profile** — full company details including directors, registered address, and status\n- **filing_history** — list of all statutory filings for a UK or US company\n- **beneficial_owners** — persons with significant control (UK PSC) or insider ownership (US)\n- **charges** — UK mortgage and charge registrations against a company\n- **insolvency** — UK liquidation, administration, and insolvency records\n- **corporate_structure** — parent/subsidiary mapping via the global LEI network\n- **financial_data** — structured balance sheet and P&L from iXBRL or XBRL filings\n- **validate_vat** — verify EU VAT numbers across all 27 member states\n\n### Who it's for\nFinance teams, legal professionals, procurement officers, and anyone doing due diligence before signing a contract, extending credit, or making an investment. Also useful for journalists and researchers tracking corporate structures.\n\n### How to use it\n1. Start with **search_companies** to find the company and get its registration number or CIK\n2. Use **company_profile** for a full overview including directors\n3. Add **beneficial_owners** and **charges** for deeper due diligence\n4. Use **financial_data** for structured accounts — works for both UK and US companies\n5. Connect your Companies House account for fuller UK data access","version":"0.04","categories":["data","finance"],"currency":"USD","skills":[{"name":"search_companies","displayName":"Search Companies","description":"Search companies by name across UK + US. UK supports filters: SIC codes, location, postal code, status, incorporation-date range — applied server-side via Companies House Advanced Search. Returns name, number, status, type, address, and SIC codes.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Company name or search term (e.g. \"Apple\", \"Revolut\", \"Tesla\")"},"country":{"type":"string","description":"Filter by country: UK, US, or omit to search both","enum":["UK","US"]},"sic_codes":{"description":"UK only. SIC code(s) to filter by — accepts a single string (\"62012\"), comma-separated string (\"62012,62020\"), or array. Triggers UK Advanced Search.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"location":{"type":"string","description":"UK only. Locality / town to filter by (e.g. \"Edinburgh\", \"Manchester\"). Triggers UK Advanced Search."},"postal_code":{"type":"string","description":"UK only. Postal code prefix or full code (e.g. \"SW1\" or \"SW1A 1AA\"). Triggers UK Advanced Search."},"status":{"type":"string","description":"UK only. Company status: \"active\", \"dissolved\", \"liquidation\", \"receivership\", \"administration\", etc. Triggers UK Advanced Search."},"incorporated_from":{"type":"string","description":"UK only. Earliest incorporation date (YYYY-MM-DD). Triggers UK Advanced Search."},"incorporated_to":{"type":"string","description":"UK only. Latest incorporation date (YYYY-MM-DD). Triggers UK Advanced Search."},"limit":{"type":"number","description":"Maximum results to return (default: 10, max: 20)","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for Apple companies","input":{"query":"Apple"}},{"description":"Find UK companies named Revolut","input":{"query":"Revolut","country":"UK"}},{"description":"Search US public companies named Tesla","input":{"query":"Tesla","country":"US"}},{"description":"Active UK software companies in Edinburgh (SIC 62012 = Business and domestic software development)","input":{"query":"tech","country":"UK","sic_codes":"62012","location":"Edinburgh","status":"active"}},{"description":"UK fintechs incorporated since 2024","input":{"query":"fintech","country":"UK","sic_codes":["64191","66190"],"incorporated_from":"2024-01-01"}}],"pricing":"free","returns":"Matching companies with registration numbers, name, status, type, incorporation date, registered address, and SIC codes when available (always populated when UK filters are used)"},{"name":"company_profile","displayName":"Company Profile","description":"Get full details for a specific company by its registration number. Returns company status, type, registered address, SIC codes, incorporation date, and for UK companies the current directors and officers.","inputSchema":{"type":"object","properties":{"company_id":{"type":"string","description":"UK company number (e.g. \"09525857\") or US SEC CIK number (e.g. \"0000320193\") from search_companies results"}},"required":["company_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get Revolut Ltd profile (UK)","input":{"company_id":"08804411"}},{"description":"Get Apple Inc profile (US)","input":{"company_id":"0000320193"}}],"pricing":"free","returns":"Full company profile with status, address, directors/officers, SIC codes, and incorporation details"},{"name":"filing_history","displayName":"Filing History","description":"View recent regulatory filings for a company. UK filings include annual accounts, confirmation statements, and changes of directors. US filings include 10-K annual reports, 10-Q quarterlies, and 8-K current reports.","inputSchema":{"type":"object","properties":{"company_id":{"type":"string","description":"UK company number or US SEC CIK number from search_companies results"},"form_type":{"type":"string","description":"US SEC form type filter (e.g. \"10-K\", \"10-Q\", \"8-K\"). Only applies to US companies."},"source":{"type":"string","description":"Force data source: uk or us. Auto-detected from company_id format if omitted.","enum":["uk","us"]},"limit":{"type":"number","description":"Maximum filings to return (default: 20, max: 50)","default":20}},"required":["company_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Recent UK filings for Revolut","input":{"company_id":"08804411"}},{"description":"Apple 10-K annual reports","input":{"company_id":"0000320193","form_type":"10-K"}},{"description":"Recent SEC filings for Tesla","input":{"company_id":"0001318605","source":"us"}}],"pricing":"free","returns":"Recent company filings with dates, types, and descriptions"},{"name":"beneficial_owners","displayName":"Beneficial Owners","description":"Find who really owns or controls a company. UK returns Persons with Significant Control (PSC) — individuals or entities with 25%+ shares or voting rights. US returns insider and beneficial ownership filings (Forms 3, 4, 5, SC 13D/G) showing institutional and insider holdings.","inputSchema":{"type":"object","properties":{"company_id":{"type":"string","description":"UK company number or US SEC CIK number from search_companies results"},"source":{"type":"string","description":"Force data source: uk or us. Auto-detected from company_id format if omitted.","enum":["uk","us"]},"limit":{"type":"number","description":"Maximum results to return for US filings (default: 20, max: 50)","default":20}},"required":["company_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Who controls Revolut Ltd (UK)","input":{"company_id":"08804411"}},{"description":"Apple insider ownership filings (US)","input":{"company_id":"0000320193"}}],"pricing":"free","returns":"UK: PSC records with ownership type, control nature, and dates. US: Insider/ownership filing history."},{"name":"corporate_structure","displayName":"Corporate Structure","description":"Map a company's corporate hierarchy — parent companies, ultimate parent, and subsidiaries worldwide. Uses the Global Legal Entity Identifier (LEI) system covering 2.7 million entities across all jurisdictions. Returns entity details, ownership chains, and cross-reference identifiers (BIC, ISIN).","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Company name to search for in the global LEI database (e.g. \"Apple\", \"HSBC\", \"Toyota\")"},"lei":{"type":"string","description":"LEI code if known (20-character alphanumeric, e.g. \"HWUPKR0MPOU8FGXBT394\")"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Map Apple corporate structure","input":{"query":"Apple Inc"}},{"description":"Look up by LEI code","input":{"lei":"HWUPKR0MPOU8FGXBT394"}},{"description":"Find HSBC group structure","input":{"query":"HSBC Holdings"}}],"pricing":"free","returns":"Corporate hierarchy with parent company, ultimate parent, subsidiaries, LEI codes, and jurisdiction details"},{"name":"financial_data","displayName":"Financial Data","description":"Pull structured financial data for UK and US companies. UK: balance sheet, P&L, equity, and employee data parsed from iXBRL annual accounts. US: revenue, net income, EPS, total assets, liabilities, equity, cash, debt, R&D from XBRL filings. Auto-detects country from company ID format.","inputSchema":{"type":"object","properties":{"company_id":{"type":"string","description":"UK company number (e.g. \"08804411\") or US SEC CIK number (e.g. \"0000320193\") from search_companies results"},"source":{"type":"string","description":"Force data source: uk or us. Auto-detected from company_id format if omitted.","enum":["uk","us"]}},"required":["company_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Revolut UK financials","input":{"company_id":"08804411"}},{"description":"Apple US financials","input":{"company_id":"0000320193"}},{"description":"Force UK source","input":{"company_id":"08804411","source":"uk"}}],"pricing":"paid","returns":"Structured financial metrics grouped by section (balance sheet, P&L, equity) with formatted values and reporting period"},{"name":"charges","displayName":"Charges & Mortgages","description":"View charges, mortgages, and debentures registered against a UK company. Shows outstanding and satisfied charges, who the lender is, and what assets are secured. Useful for assessing financial obligations and credit risk.","inputSchema":{"type":"object","properties":{"company_id":{"type":"string","description":"UK company number from search_companies results (e.g. \"08804411\")"}},"required":["company_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check charges on Revolut Ltd","input":{"company_id":"08804411"}}],"pricing":"free","returns":"List of charges with status (outstanding/satisfied), lender, creation date, and secured assets"},{"name":"insolvency","displayName":"Insolvency Status","description":"Check if a UK company is in insolvency proceedings — administration, liquidation, voluntary arrangement, or receivership. Returns case details, dates, and appointed insolvency practitioners.","inputSchema":{"type":"object","properties":{"company_id":{"type":"string","description":"UK company number from search_companies results (e.g. \"08804411\")"}},"required":["company_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check insolvency status of a company","input":{"company_id":"08804411"}}],"pricing":"free","returns":"Insolvency status, case details with dates, and practitioner information"},{"name":"officer_appointments","displayName":"Officer Appointments","description":"See all companies a specific officer is or was a director of. Useful for tracing an individual across multiple UK companies — find all active and resigned appointments. Requires an officer_id from company_profile results.","inputSchema":{"type":"object","properties":{"officer_id":{"type":"string","description":"Officer ID from Companies House — found in the company_profile response officer links (e.g. the URL path segment after /officers/)"}},"required":["officer_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find all companies for an officer","input":{"officer_id":"abc123xyz"}}],"pricing":"free","returns":"All company appointments for this officer, split into active and resigned"},{"name":"disqualified_officers","displayName":"Disqualified Officers","description":"Check if a person has been disqualified from acting as a company director in the UK. Returns disqualification details including reason, duration, and associated companies. Important for due diligence and compliance.","inputSchema":{"type":"object","properties":{"officer_id":{"type":"string","description":"Officer ID from Companies House — found in the company_profile response"}},"required":["officer_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check if an officer is disqualified","input":{"officer_id":"abc123xyz"}}],"pricing":"free","returns":"Disqualification status and details, or confirmation that no disqualification exists"},{"name":"validate_vat","displayName":"Validate EU VAT Number","description":"Validate a European VAT number and retrieve the registered company name and address. Covers all 27 EU member states plus Northern Ireland (XI prefix). Useful for KYC, compliance, and verifying EU trading partners.","inputSchema":{"type":"object","properties":{"vat_number":{"type":"string","description":"EU VAT number with country code prefix (e.g. \"IE6388047V\", \"DE123456789\", \"FR12345678901\")"}},"required":["vat_number"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Validate an Irish VAT number","input":{"vat_number":"IE6388047V"}},{"description":"Check a German VAT number","input":{"vat_number":"DE123456789"}},{"description":"Verify a French company","input":{"vat_number":"FR82542065479"}}],"pricing":"free","returns":"Validation result with company name, address, and validity status"}],"workflow":["search_companies → company_profile","search_companies → filing_history","search_companies → beneficial_owners","search_companies → charges","search_companies → insolvency","search_companies → corporate_structure","search_companies → financial_data","company_profile → officer_appointments","company_profile → disqualified_officers","validate_vat"],"icon":"/icons/company-lookup.webp","changelog":[{"version":"0.01","date":"2026-03-23","changes":["Initial release with 3 skills: search_companies, company_profile, filing_history"]},{"version":"0.02","date":"2026-03-24","changes":["Added beneficial_owners, charges, insolvency, officer_appointments, disqualified_officers (Companies House)","Added corporate_structure (GLEIF — global parent/subsidiary mapping)","Added financial_data (SEC EDGAR XBRL — structured financials for US public companies)","Added validate_vat (EU VIES — VAT number validation across 27 EU countries)"]},{"version":"0.03","date":"2026-03-30","changes":["financial_data now supports UK companies — downloads and parses iXBRL annual accounts from Companies House for structured balance sheet, P&L, and equity data","PDF fallback: when iXBRL is not available, extracts text from PDF accounts and uses AI to return structured financial data"]},{"version":"0.04","date":"2026-05-08","changes":["search_companies card titles now show the actual company name instead of \"Unknown\" — previously the card layer read a `title` field while the parsed search result returned `company_name`","search_companies now accepts UK Advanced Search filters: sic_codes, location, postal_code, status, incorporated_from, incorporated_to. Filters are applied server-side via /advanced-search/companies, and SIC codes come back populated on the result rows when these filters are used","When SIC codes are present, the card detail line shows them directly so prospecting workflows do not need a follow-up profile fetch to disambiguate matches"]}],"premadePrompt":"Look up [company name] and give me a full profile — directors, beneficial owners, filing history, and latest financials. I'm doing due diligence before entering a contract with them.","requirements":[{"name":"companies_house_api_key","type":"secret","displayName":"Companies House API Key","description":"UK Companies House API key for searching and viewing company data — register free at developer.company-information.service.gov.uk","acquireUrl":"https://developer.company-information.service.gov.uk/","envFallback":"COMPANIES_HOUSE_API_KEY"}],"credentials":[{"name":"companies_house_api_key","type":"secret","displayName":"Companies House API Key","description":"UK Companies House API key for searching and viewing company data — register free at developer.company-information.service.gov.uk","acquireUrl":"https://developer.company-information.service.gov.uk/","envFallback":"COMPANIES_HOUSE_API_KEY"}]},{"name":"compliance-screening","displayName":"Compliance Screening","subtitle":"AML, sanctions, PEP & due diligence investigations","about":"**Compliance Screening** runs KYC, KYB, AML, and due diligence checks against 25+ official data sources in a single call. Sanctions lists, PEP databases, wanted lists, adverse media, offshore leaks, court records, and regulatory actions — all covered.\n\nCompliance checks normally mean logging into multiple portals, running manual searches, and reconciling conflicting results. This tool replaces that workflow with a unified investigation engine. It covers OFAC, UN, EU, and national sanctions lists, global PEP databases, FINRA BrokerCheck, FCA register, OpenCorporates in 200+ jurisdictions, and more. The full investigation mode returns a structured verdict with a complete audit trail.\n\n### What you can do\n- **screen_entity** — quick parallel risk check: sanctions, PEP, wanted lists, and adverse media in one call\n- **screen_sanctions** — targeted sanctions list check across OFAC, UN, EU, and national lists\n- **screen_pep** — politically exposed person database check\n- **screen_wanted** — Interpol and national law enforcement wanted lists\n- **screen_adverse_media** — news and media search for negative coverage\n- **lookup_corporate_registry** — company registration check across 200+ jurisdictions\n- **trace_ownership** — beneficial ownership and corporate structure tracing\n- **check_regulatory_actions** — FINRA, FCA, and SEC enforcement actions\n- **due_diligence** — comprehensive corporate investigation with ownership tracing\n- **investigate** — deepest mode: all sources, AI synthesis, and a structured verdict with audit trail\n- **analyze_document** — extract and analyze data from PDFs, images, and scanned documents\n\n### Who it's for\nCompliance officers, legal teams, financial institutions, and anyone running KYC or KYB checks before onboarding a customer, partner, or counterparty.\n\n### How to use it\n1. For a quick check, use **screen_entity** with the person or company name and country\n2. For corporate due diligence, use **due_diligence** to get ownership tracing and regulatory history\n3. For the most thorough investigation with a clear verdict, use **investigate**\n4. Use **analyze_document** to extract data from passports, certificates, or corporate filings","version":"0.04","categories":["data","finance","security"],"currency":"USD","skills":[{"name":"screen_sanctions","displayName":"Screen Sanctions","description":"Check a person or company against global sanctions lists including OFAC SDN, EU Consolidated, UN Security Council, and 200+ additional programs via OpenSanctions.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"entity_type":{"type":"string","description":"Whether the entity is a person or company — affects which databases are prioritized","enum":["person","company"],"default":"person"},"country":{"type":"string","description":"Two-letter ISO country code to narrow results (e.g. \"US\", \"GB\", \"RU\", \"CN\")"},"dataset":{"type":"string","description":"Which sanctions dataset to search — \"sanctions\" for sanctions only, \"default\" for all","enum":["sanctions","default"],"default":"sanctions"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Screen a Russian entity against sanctions lists","input":{"entity_name":"Gazprom","entity_type":"company","country":"RU"}},{"description":"Check if a person is sanctioned","input":{"entity_name":"Viktor Bout","entity_type":"person"}}],"pricing":"paid","returns":"Sanctions matches with confidence scores, dataset sources, and entity properties"},{"name":"screen_pep","displayName":"Screen PEP","description":"Check if a person is a Politically Exposed Person across 259 countries and 175,000+ government positions. Covers current and former heads of state, ministers, parliamentarians, and judges.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"country":{"type":"string","description":"Two-letter ISO country code to narrow results (e.g. \"US\", \"GB\", \"RU\", \"CN\")"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Check if someone is a politically exposed person","input":{"entity_name":"Boris Johnson","country":"GB"}},{"description":"PEP screening for a foreign national","input":{"entity_name":"Narendra Modi"}}],"pricing":"paid","returns":"PEP matches with positions held, countries, and confidence scores"},{"name":"screen_wanted","displayName":"Screen Wanted Lists","description":"Search FBI Most Wanted and Interpol Red Notices for a person. Returns matching wanted records with descriptions, charges, and nationalities.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"nationality":{"type":"string","description":"Two-letter country code to filter Interpol results (e.g. \"US\", \"RU\")"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Search FBI and Interpol wanted lists","input":{"entity_name":"John Doe"}},{"description":"Check Interpol notices for a specific nationality","input":{"entity_name":"Ahmed Hassan","nationality":"EG"}}],"pricing":"paid","returns":"FBI Most Wanted and Interpol Red Notice matches with details and source links"},{"name":"screen_adverse_media","displayName":"Screen Adverse Media","description":"Search global news in 100+ languages for negative coverage about a person or company. Uses tone analysis to surface the most concerning articles first.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"timespan":{"type":"string","description":"How far back to search (e.g. \"3months\", \"1year\", \"2years\")","default":"3months"},"language":{"type":"string","description":"Filter articles by language (e.g. \"english\", \"french\", \"german\")","default":"english"},"max_results":{"type":"number","description":"Maximum articles to return (default: 25, max: 50)","default":25}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Find negative news about a company","input":{"entity_name":"Wells Fargo","timespan":"1year"}},{"description":"Check adverse media for a person","input":{"entity_name":"Elizabeth Holmes","timespan":"2years","max_results":30}}],"pricing":"paid","returns":"Negative news articles with tone analysis, source domains, and media sentiment summary"},{"name":"lookup_corporate_registry","displayName":"Corporate Registry Lookup","description":"Look up a company in UK Companies House and US SEC EDGAR. Returns registration details, directors, officers, and beneficial ownership (Persons with Significant Control).","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"country":{"type":"string","description":"Filter by country: \"UK\" for Companies House, \"US\" for SEC EDGAR","enum":["UK","US"]},"company_id":{"type":"string","description":"Company registration number (UK) or CIK (US) if known"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Look up a UK company in Companies House","input":{"entity_name":"Revolut Ltd","country":"UK"}},{"description":"Look up a US public company","input":{"entity_name":"Tesla Inc","country":"US"}}],"pricing":"paid","returns":"Company profile, directors, beneficial owners, and registration status"},{"name":"trace_ownership","displayName":"Trace Ownership","description":"Trace corporate ownership through ICIJ Offshore Leaks (Panama Papers, Paradise Papers, Pandora Papers) and the Open Ownership Register to find beneficial owners and shell company indicators.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"company_id":{"type":"string","description":"Company registration number if known"},"country":{"type":"string","description":"Two-letter ISO country code to narrow results (e.g. \"US\", \"GB\", \"RU\", \"CN\")"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Check if a company appears in offshore leak databases","input":{"entity_name":"Mossack Fonseca"}},{"description":"Trace beneficial ownership of a UK company","input":{"entity_name":"HSBC Holdings","country":"GB"}}],"pricing":"paid","returns":"Offshore leak mentions, beneficial ownership records, and ownership chain summary"},{"name":"check_regulatory_actions","displayName":"Check Regulatory Actions","description":"Search US regulatory enforcement databases: SEC enforcement releases, CFPB consumer complaints, and FDIC bank records including failure history.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"source":{"type":"string","description":"Which regulatory source to check — \"all\" searches everything","enum":["all","sec","cfpb","fdic"],"default":"all"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Check all regulatory actions for a bank","input":{"entity_name":"Wells Fargo"}},{"description":"Search SEC enforcement actions only","input":{"entity_name":"Theranos","source":"sec"}}],"pricing":"paid","returns":"SEC enforcement actions, CFPB complaints, and FDIC institution data with failure status"},{"name":"search_litigation","displayName":"Search Litigation","description":"Search US federal court records via CourtListener and RECAP for dockets, opinions, and legal proceedings involving a person or company.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Find court cases involving a company","input":{"entity_name":"Facebook"}},{"description":"Search litigation history for a person","input":{"entity_name":"Martin Shkreli"}}],"pricing":"paid","returns":"Federal court dockets and judicial opinions matching the entity"},{"name":"check_debarments","displayName":"Check Debarments","description":"Check if a person or company has been debarred from government contracts by the World Bank or other international organizations.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Check if a company is debarred from World Bank contracts","input":{"entity_name":"SNC-Lavalin"}},{"description":"Check debarment status for a firm","input":{"entity_name":"Siemens AG"}}],"pricing":"paid","returns":"Debarment records from World Bank and OpenSanctions debarment datasets"},{"name":"screen_entity","displayName":"Screen Entity","description":"Quick multi-source risk screen: runs sanctions, PEP, FBI/Interpol wanted lists, and adverse media checks in parallel. Returns a combined risk level (CLEAR, LOW, MEDIUM, HIGH) with matches from each source.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"entity_type":{"type":"string","description":"Whether the entity is a person or company — affects which databases are prioritized","enum":["person","company"],"default":"person"},"country":{"type":"string","description":"Two-letter ISO country code to narrow results (e.g. \"US\", \"GB\", \"RU\", \"CN\")"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Quick risk screen on a person","input":{"entity_name":"Vladimir Putin","entity_type":"person","country":"RU"}},{"description":"Screen a company for compliance risk","input":{"entity_name":"Huawei Technologies","entity_type":"company","country":"CN"}}],"pricing":"paid","returns":"Combined risk level with sanctions, PEP, wanted, and adverse media results plus source availability tracking"},{"name":"due_diligence","displayName":"Due Diligence","description":"Comprehensive corporate due diligence: runs all screening checks plus corporate registry lookup, offshore ownership tracing, regulatory enforcement search, and litigation records. Produces a structured risk report.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"entity_type":{"type":"string","description":"Whether the entity is a person or company — affects which databases are prioritized","enum":["person","company"],"default":"person"},"country":{"type":"string","description":"Two-letter ISO country code to narrow results (e.g. \"US\", \"GB\", \"RU\", \"CN\")"},"company_id":{"type":"string","description":"Company registration number (UK) or CIK (US) if known — improves accuracy"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Run full due diligence on a UK company","input":{"entity_name":"Barclays PLC","entity_type":"company","country":"GB"}},{"description":"Investigate a potential business partner","input":{"entity_name":"Wirecard AG","entity_type":"company","country":"DE"}}],"pricing":"paid","returns":"Full due diligence report with risk level, findings across 13+ sources, ownership analysis, and regulatory history"},{"name":"investigate","displayName":"Investigate","description":"The most comprehensive investigation: runs every available data source and produces a structured compliance report with verdict (CLEAR to ESCALATE), individual findings rated by severity, and a complete audit trail of sources checked.","inputSchema":{"type":"object","properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"entity_type":{"type":"string","description":"Whether the entity is a person or company — affects which databases are prioritized","enum":["person","company"],"default":"person"},"country":{"type":"string","description":"Two-letter ISO country code to narrow results (e.g. \"US\", \"GB\", \"RU\", \"CN\")"},"company_id":{"type":"string","description":"Company registration number or CIK if known — improves corporate match accuracy"},"depth":{"type":"string","description":"Investigation depth — \"full\" checks all sources, \"quick\" checks core screening only","enum":["full","quick"],"default":"full"}},"required":["entity_name"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Full compliance investigation on a sanctioned entity","input":{"entity_name":"Gazprom","entity_type":"company","country":"RU","depth":"full"}},{"description":"Investigate a person for onboarding due diligence","input":{"entity_name":"Jack Ma","entity_type":"person","country":"CN"}}],"pricing":"paid","returns":"Complete investigation report with verdict, severity-rated findings, AI narrative, OSINT results, OpenCorporates data, and full audit trail across 20 sources"},{"name":"synthesize_narrative","displayName":"Synthesize Compliance Narrative","description":"Generate a written compliance analyst report from investigation findings. Produces executive summary, risk narrative, key findings list, red flags, and recommended action.","inputSchema":{"type":"object","required":["entity_name"],"properties":{"entity_name":{"type":"string","description":"Full legal name of the person or company to screen (e.g. \"Gazprom\", \"Viktor Bout\", \"HSBC Holdings\")"},"entity_type":{"type":"string","description":"Whether the entity is a person or company — affects which databases are prioritized","enum":["person","company"],"default":"person"},"findings":{"type":"array","description":"Array of findings from investigate or due_diligence output"},"verdict":{"type":"string","description":"Verdict from investigation (e.g. \"ESCALATE\", \"HIGH_RISK\")"},"summary":{"type":"string","description":"Summary string from investigation output"},"sources_available":{"type":"number","description":"Number of sources that were successfully queried"}}},"annotations":{"readOnlyHint":true},"examples":[{"description":"Synthesize a narrative from investigate output","input":{"entity_name":"Theranos","entity_type":"company","verdict":"LOW_RISK","summary":"LOW_RISK: 1 finding across 9 sources","findings":[]}}],"pricing":"paid","returns":"Written compliance narrative with executive_summary, risk_narrative, key_findings, red_flags, recommended_action, and confidence level"},{"name":"analyze_document","displayName":"Analyze Document","description":"Extract compliance intelligence from PDFs, images, and scanned documents. Identifies entity names, addresses, ownership structures, beneficial owners, red flags, and compliance signals. Handles multi-language documents including Mandarin, Arabic, and Cyrillic scripts.","inputSchema":{"type":"object","required":["document_url"],"properties":{"document_url":{"type":"string","description":"Document as ToolRouter file ID or hosted HTTP(S) URL."},"entity_name":{"type":"string","description":"Name of the entity under investigation — helps focus extraction on relevant mentions"},"document_type":{"type":"string","description":"Hint about document type to improve extraction accuracy","enum":["company_registration","passport","bank_statement","annual_report","corporate_structure","contract","invoice","unknown"]}}},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Extract compliance data from a company registration document","input":{"document_url":"https://example.com/company-reg.pdf","entity_name":"Acme Corp","document_type":"company_registration"}},{"description":"Analyze a scanned bank statement for red flags","input":{"document_url":"https://example.com/statement.jpg","document_type":"bank_statement"}}],"pricing":"paid","returns":"Structured extraction: document_type, entities_mentioned, ownership_structure, addresses, red_flags, compliance_signals, financial_data, and risk_signal (HIGH/MEDIUM/LOW)"}],"workflow":["screen_entity","screen_sanctions → screen_pep → screen_wanted → screen_adverse_media","lookup_corporate_registry → trace_ownership → check_regulatory_actions","due_diligence","investigate"],"icon":"/icons/compliance-screening.webp","changelog":[{"version":"0.01","date":"2026-03-31","changes":["Initial release with 12 skills covering sanctions, PEP, wanted lists, adverse media, corporate registry, ownership tracing, regulatory actions, litigation, debarments, entity screening, due diligence, and full investigation"]},{"version":"0.02","date":"2026-03-31","changes":["Added GLEIF LEI lookup (2.3M+ global entities), FINRA BrokerCheck (US broker-dealer/investment adviser disclosures), and FCA Financial Services Register (UK regulatory authorisation) — now 17 data sources across investigate and due_diligence skills"]},{"version":"0.03","date":"2026-03-31","changes":["Added OSINT web search (Exa), OpenCorporates international registries (200+ jurisdictions, offshore/shell detection), AI narrative synthesis (Claude), Wikidata entity intelligence (criminal convictions, PEP roles, aliases), and synthesize_narrative skill — now 21 data sources, full Variance-equivalent investigation workflow"]},{"version":"0.04","date":"2026-03-31","changes":["Added analyze_document skill (AI-powered PDF/image/scanned document extraction via Claude vision + Mistral OCR), BIS Entity List (US export controls), FEC campaign finance (political donations), CFTC enforcement actions — now 25 data sources, surpassing Variance on structured data coverage"]}],"premadePrompt":"Run a compliance check on [person or company name] from [country]. I need to know if they appear on any sanctions lists, are a politically exposed person, or have adverse media coverage.","requirements":[{"name":"opensanctions","type":"secret","displayName":"OpenSanctions API Key","description":"API key for OpenSanctions — enables sanctions, PEP, and debarment screening against 269 datasets. Some skills work without this key using alternative free sources.","acquireUrl":"https://www.opensanctions.org/api/","envFallback":"OPENSANCTIONS_API_KEY"},{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"ita_trade","type":"secret","displayName":"ITA Trade API Key","description":"Optional — enables BIS Entity List and US export control screening via the ITA Consolidated Screening List. Register at developer.trade.gov. Note: BIS coverage is also included in OpenSanctions default dataset.","acquireUrl":"https://developer.trade.gov/","envFallback":"ITA_TRADE_API_KEY"},{"name":"fec","type":"secret","displayName":"FEC API Key","description":"Optional — enables US Federal Election Commission screening for political donations and candidate status. Free key from api.data.gov.","acquireUrl":"https://api.data.gov/signup/","envFallback":"FEC_API_KEY"}],"credentials":[{"name":"opensanctions","type":"secret","displayName":"OpenSanctions API Key","description":"API key for OpenSanctions — enables sanctions, PEP, and debarment screening against 269 datasets. Some skills work without this key using alternative free sources.","acquireUrl":"https://www.opensanctions.org/api/","envFallback":"OPENSANCTIONS_API_KEY"},{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"ita_trade","type":"secret","displayName":"ITA Trade API Key","description":"Optional — enables BIS Entity List and US export control screening via the ITA Consolidated Screening List. Register at developer.trade.gov. Note: BIS coverage is also included in OpenSanctions default dataset.","acquireUrl":"https://developer.trade.gov/","envFallback":"ITA_TRADE_API_KEY"},{"name":"fec","type":"secret","displayName":"FEC API Key","description":"Optional — enables US Federal Election Commission screening for political donations and candidate status. Free key from api.data.gov.","acquireUrl":"https://api.data.gov/signup/","envFallback":"FEC_API_KEY"}]},{"name":"clinical-trials","displayName":"Clinical Trials","subtitle":"Clinical trials & drug safety data","about":"**Clinical Trials** connects you directly to ClinicalTrials.gov and the Health Canada Drug Product Database so you can search active, recruiting, and completed studies without navigating complex government portals.\n\nFinding the right trial is normally slow — you need to filter by condition, phase, status, and location across thousands of records. This tool does that in a single query and returns structured results with NCT IDs you can drill into for full protocols, eligibility criteria, and site contact information.\n\n### What you can do\n- **search_trials** — search by condition, drug name, or keyword; filter by recruitment status and trial phase\n- **trial_details** — fetch the full protocol for a specific trial using its NCT ID, including eligibility, sites, and contacts\n- **drug_products** — search the Health Canada Drug Product Database for approved drugs and their product information\n\n### Who it's for\nPatients and caregivers looking for treatment options, medical researchers tracking the competitive landscape, pharmaceutical professionals monitoring pipeline activity, and journalists covering clinical research. Always verify eligibility directly with the trial site.\n\n### How to use it\n1. Start with **search_trials** — pass a condition like \"type 2 diabetes\" or a drug name; filter by status: RECRUITING to find studies you can join now\n2. Filter by phase (PHASE3, PHASE4) to narrow to late-stage trials\n3. Use **trial_details** with the NCT ID from search results to get the full eligibility criteria and site locations\n4. For approved drug information in Canada, use **drug_products** with a drug name or DIN number","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"search_trials","displayName":"Search Clinical Trials","description":"Search ClinicalTrials.gov for clinical trials by condition, drug, intervention, or keyword. Filter by recruitment status and trial phase. Returns trial summaries with NCT IDs for detailed lookup.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"General search term — matches against trial title, conditions, interventions, and other fields"},"condition":{"type":"string","description":"Medical condition or disease to search for (e.g. \"breast cancer\", \"type 2 diabetes\", \"alzheimer\")"},"intervention":{"type":"string","description":"Drug, device, or intervention name to search for (e.g. \"metformin\", \"pembrolizumab\")"},"status":{"type":"string","description":"Recruitment status filter: RECRUITING, NOT_YET_RECRUITING, ACTIVE_NOT_RECRUITING, COMPLETED, TERMINATED, WITHDRAWN, SUSPENDED"},"phase":{"type":"string","description":"Filter by trial phase: EARLY_PHASE1, PHASE1, PHASE2, PHASE3, PHASE4, NA"},"page_size":{"type":"number","description":"Number of results to return (1-50, default: 10)"},"page_token":{"type":"string","description":"Pagination token from a previous search result to get the next page"}},"required":[]},"annotations":{"openWorldHint":true},"examples":[{"description":"Find recruiting cancer trials","input":{"condition":"breast cancer","status":"RECRUITING"}},{"description":"Search for trials involving a specific drug","input":{"intervention":"pembrolizumab","phase":"PHASE3"}},{"description":"General keyword search","input":{"query":"mRNA vaccine COVID","page_size":20}}],"pricing":"free","returns":"Clinical trials with NCT ID, title, status, phase, conditions, interventions, sponsor, enrollment, dates, and URL"},{"name":"trial_details","displayName":"Get Trial Details","description":"Get comprehensive details for a specific clinical trial by its NCT ID from ClinicalTrials.gov. Returns the full protocol including study summary, eligibility criteria, age/sex requirements, and trial site locations.","inputSchema":{"type":"object","properties":{"nct_id":{"type":"string","description":"ClinicalTrials.gov NCT identifier (e.g. \"NCT04564846\")"}},"required":["nct_id"]},"annotations":{"openWorldHint":true},"examples":[{"description":"Get details for a specific trial","input":{"nct_id":"NCT04564846"}},{"description":"Look up a COVID vaccine trial","input":{"nct_id":"NCT04368728"}}],"pricing":"free","returns":"Full protocol: title, status, phase, conditions, interventions, sponsor, enrollment, eligibility criteria, site locations, and URL"},{"name":"drug_products","displayName":"Health Canada Drug Products","description":"Search the Health Canada Drug Product Database for approved drug products. Returns brand name, manufacturer, active ingredients, approval status, and route of administration. Search by drug name or Drug Identification Number (DIN).","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Drug name or brand name to search for (e.g. \"acetaminophen\", \"Tylenol\")"},"din":{"type":"string","description":"Drug Identification Number (DIN) for exact lookup (e.g. \"02242963\")"}},"required":[]},"annotations":{"openWorldHint":true},"examples":[{"description":"Search for a drug by name","input":{"query":"acetaminophen"}},{"description":"Look up a drug by DIN","input":{"din":"02242963"}}],"pricing":"free","returns":"Drug products with brand name, DIN, class, manufacturer, approval status, active ingredients with strengths, and routes of administration"}],"icon":"/icons/clinical-trials.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with search_trials, trial_details, adverse_events, and drug_recalls","ClinicalTrials.gov v2 API for trial search and details","FDA openFDA APIs for adverse events (FAERS) and drug enforcement/recalls"]},{"version":"0.02","date":"2026-03-24","changes":["Removed adverse_events skill (use drug-info tool instead)","Removed drug_recalls skill (use product-recalls tool instead)","Added drug_products skill for Health Canada Drug Product Database"]}],"premadePrompt":"Find currently recruiting clinical trials for [condition, e.g. type 2 diabetes] in Phase 3. I want to see the eligibility criteria and trial locations."},{"name":"air-quality","displayName":"Air Quality","subtitle":"AQI, pollen & health guidance","about":"**Air Quality** provides real-time air quality data, pollen forecasts, and health recommendations for any location worldwide. You get US and European AQI scores, individual pollutant levels, UV index, and a breakdown of six pollen types — all from a single query.\n\nIt's useful for anyone making location-based decisions around outdoor activity, travel, or health management. People with asthma, COPD, or allergies get personalized risk scores that combine air quality, UV, and pollen into a single recommendation. The multi-day forecast covers up to seven days so you can plan ahead rather than just checking the current moment.\n\n### What you can do\n- Get real-time AQI (US and European), pollutant concentrations, UV index, and pollen counts for any city or coordinates\n- Forecast air quality up to 7 days ahead with daily min/max/avg breakdowns\n- Get pollen forecasts with type-by-type breakdowns for allergy sufferers\n- Generate personalized health recommendations for sensitive groups (asthma, COPD, allergies)\n- Find nearby air quality monitoring stations\n\n### Who it's for\nPeople with respiratory conditions or allergies planning their day. Parents checking conditions before outdoor activities. Travel planners comparing air quality across cities. Developers building location-aware health or weather applications.\n\n### How to use it\n1. Call **current_air_quality** with a city name or lat/lon coordinates for an immediate snapshot\n2. Use **air_quality_forecast** to plan ahead — it returns daily min/max/avg for all key pollutants\n3. Use **pollen_forecast** if allergies are the main concern — it breaks down counts by pollen type\n4. Call **health_recommendations** for personalized guidance based on a person's specific conditions\n\n### Getting started\n**current_air_quality** runs immediately with no setup — just pass a city name like \"London\" or coordinates.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"current_air_quality","displayName":"Current Air Quality","description":"Real-time air quality for any location. Returns US and European AQI, pollutant concentrations (PM2.5, PM10, ozone, NO2, SO2, CO), UV index, pollen counts for 6 species, and health advisories.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"London\" or \"51.5,-0.12\")"},"latitude":{"type":"number","description":"Latitude coordinate (use instead of location for precise coordinates)"},"longitude":{"type":"number","description":"Longitude coordinate (use instead of location for precise coordinates)"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Air quality in London","input":{"location":"London"}},{"description":"Air quality at specific coordinates","input":{"latitude":40.7128,"longitude":-74.006}},{"description":"Air quality in Beijing","input":{"location":"Beijing"}}],"pricing":"free","returns":"Current AQI (US + European), pollutant concentrations, UV index, pollen counts with categories, and health advisories"},{"name":"air_quality_forecast","displayName":"Air Quality Forecast","description":"Multi-day air quality forecast with daily min/max/avg for AQI, PM2.5, PM10, ozone, and NO2. Identifies dominant pollutant per day. Up to 7 days ahead for any global location.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"Tokyo\" or \"35.68,139.69\")"},"latitude":{"type":"number","description":"Latitude coordinate (use instead of location for precise coordinates)"},"longitude":{"type":"number","description":"Longitude coordinate (use instead of location for precise coordinates)"},"days":{"type":"number","description":"Number of forecast days (1-7, default: 3)","default":3,"minimum":1,"maximum":7}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"3-day air quality forecast for Delhi","input":{"location":"Delhi"}},{"description":"7-day forecast for Los Angeles","input":{"location":"Los Angeles","days":7}}],"pricing":"free","returns":"Daily air quality forecast with AQI ranges, pollutant summaries, dominant pollutant, and UV peak values"},{"name":"pollen_forecast","displayName":"Pollen Forecast","description":"Pollen forecast for allergy sufferers covering 6 types: alder, birch, grass, mugwort, olive, ragweed. Daily concentrations with severity, active types, seasonal context, and allergy advice. Up to 7 days ahead.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"Paris\" or \"48.85,2.35\")"},"latitude":{"type":"number","description":"Latitude coordinate (use instead of location for precise coordinates)"},"longitude":{"type":"number","description":"Longitude coordinate (use instead of location for precise coordinates)"},"days":{"type":"number","description":"Number of forecast days (1-7, default: 5)","default":5,"minimum":1,"maximum":7}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Pollen forecast for London","input":{"location":"London"}},{"description":"7-day pollen forecast for Munich","input":{"location":"Munich","days":7}}],"pricing":"free","returns":"Daily pollen forecast per species with severity, active types, seasonal info, and allergy advice"},{"name":"health_recommendations","displayName":"Health Recommendations","description":"Health recommendations combining AQI, UV, and pollen into a risk score (0-10) with guidance for exercise, walking, and ventilation. Optionally specify sensitive groups (asthma, COPD, allergies, children, elderly) for targeted advice.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"Sydney\" or \"-33.87,151.21\")"},"latitude":{"type":"number","description":"Latitude coordinate (use instead of location for precise coordinates)"},"longitude":{"type":"number","description":"Longitude coordinate (use instead of location for precise coordinates)"},"sensitive_groups":{"type":"array","items":{"type":"string","enum":["asthma","copd","heart_disease","allergies","children","elderly","pregnant","outdoor_workers"]},"description":"Health conditions or groups to get targeted advice for (e.g. [\"asthma\", \"allergies\"])"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Health recommendations for Delhi","input":{"location":"Delhi"}},{"description":"Advice for asthma sufferer in London","input":{"location":"London","sensitive_groups":["asthma","allergies"]}}],"pricing":"free","returns":"Risk score, warnings, recommendations, activity guidance, and optional group-specific health advice"},{"name":"monitoring_stations","displayName":"Monitoring Stations","description":"Find nearby air quality monitoring stations for a location. Returns station name, operator, measured parameters, distance, and measurement dates. Uses the OpenAQ global network with data from government agencies and research institutions worldwide.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"City name or lat,lon coordinates (e.g. \"Berlin\" or \"52.52,13.41\")"},"latitude":{"type":"number","description":"Latitude coordinate (use instead of location for precise coordinates)"},"longitude":{"type":"number","description":"Longitude coordinate (use instead of location for precise coordinates)"},"radius_km":{"type":"number","description":"Search radius in kilometres (default: 25, max: 100)","default":25},"limit":{"type":"number","description":"Maximum stations to return (default: 10, max: 50)","default":10}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Monitoring stations near London","input":{"location":"London"}},{"description":"Stations within 50km of Berlin","input":{"location":"Berlin","radius_km":50}}],"pricing":"free","returns":"List of nearby air quality monitoring stations with parameters, distance, operator, and measurement history"}],"workflow":["current_air_quality","air_quality_forecast","pollen_forecast","health_recommendations","monitoring_stations"],"icon":"/icons/air-quality.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with 5 skills: current_air_quality, air_quality_forecast, pollen_forecast, health_recommendations, monitoring_stations"]},{"version":"0.02","date":"2026-04-05","changes":["Location lookup now handles \"City, Country\" and \"City, UK\" formats"]}],"premadePrompt":"What is the air quality like in [city] right now? Include the AQI, main pollutants, pollen levels, and any health advice for someone with [asthma / allergies / no conditions].","requirements":[{"name":"openaq_api_key","type":"secret","displayName":"OpenAQ API Key","description":"API key for OpenAQ monitoring station data — register at explore.openaq.org","acquireUrl":"https://explore.openaq.org/","envFallback":"OPENAQ_API_KEY"}],"credentials":[{"name":"openaq_api_key","type":"secret","displayName":"OpenAQ API Key","description":"API key for OpenAQ monitoring station data — register at explore.openaq.org","acquireUrl":"https://explore.openaq.org/","envFallback":"OPENAQ_API_KEY"}]},{"name":"case-law","displayName":"Legal Research","subtitle":"Case law, statutes, regulations & legislation worldwide","about":"**Legal Research** covers case law, statutes, regulations, and legislation across 15+ jurisdictions — US, UK, India, Germany, Canada, Netherlands, EU, Japan, and more. It's a single tool for searching court decisions, federal regulations, Congressional bills, state legislation, dockets, and judge records.\n\nLegal research normally means navigating multiple separate databases depending on the jurisdiction and document type. This tool normalizes access across them: search cases, drill into full text, trace citations, find the current version of a regulation, or check what bills a state legislature has passed — all without switching platforms.\n\n### What you can do\n- Search case law across US, UK, India, Germany, Canada, and Netherlands courts\n- Get full case details, text, and citation networks\n- Search legislation across UK, US, EU, Germany, Japan, Canada, Poland, and Sweden\n- Search federal regulations (CFR), Regulations.gov, FDA, EPA, and vehicle safety databases\n- Search Congressional bills, the US Code, and all 50 state legislatures\n- Look up court dockets and judge profiles\n\n### Who it's for\nLawyers and paralegals doing case and statutory research. Compliance teams monitoring regulatory changes. Policy researchers and journalists tracking legislation. Law students building research skills across multiple jurisdictions.\n\n### How to use it\n1. Use **search_cases** with a country code (US/UK/IN/DE/CA/NL) and keywords to find relevant cases\n2. Call **case_details** with a case ID for the full text and metadata\n3. Use **citation_analysis** to map how a case has been cited\n4. Use **search_legislation** with a country code for statutory research, then **legislation_details** for the full text\n5. Use the regulatory skills (**search_cfr**, **search_fda**, **search_epa**) for US administrative law\n\n### Getting started\n**search_cases** and **search_legislation** work immediately with no credentials for most jurisdictions. Connect optional API keys for higher rate limits and access to dockets, state bills, and judge records.","version":"0.05","categories":["data"],"currency":"USD","skills":[{"name":"search_cases","displayName":"Search Case Law","description":"Search court opinions across jurisdictions. US, UK, India, Germany, Canada, Netherlands. Set country param to route (default: US). Returns case names, courts, dates, citations, excerpts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — case name, legal topic, party name, or citation"},"country":{"type":"string","description":"Jurisdiction: \"US\" (default), \"UK\", \"IN\" (India), \"DE\" (Germany), \"CA\" (Canada), \"NL\" (Netherlands)."},"court":{"type":"string","description":"Court filter — India: \"supreme\"/\"high\"/\"tribunal\". Canada: CanLII database ID (e.g. \"csc-scc\"). Germany: court slug."},"limit":{"type":"number","description":"Maximum results to return (default: 20, max: 50)"},"date_after":{"type":"string","description":"Only cases filed after this date (YYYY-MM-DD)"},"date_before":{"type":"string","description":"Only cases filed before this date (YYYY-MM-DD)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search US privacy case law","input":{"query":"data privacy"}},{"description":"UK court judgments","input":{"query":"privacy injunction","country":"UK"}},{"description":"Indian Supreme Court cases","input":{"query":"right to privacy Article 21","country":"IN","court":"supreme"}},{"description":"Dutch court decisions","input":{"query":"privacy","country":"NL"}},{"description":"Canadian case law","input":{"query":"charter rights","country":"CA"}}],"pricing":"free","returns":"Case names, courts, dates, citations, excerpts, and URLs"},{"name":"case_details","displayName":"Case Details","description":"Get full details for a specific court case by its CourtListener cluster ID or citation string. Returns the full case name, court, filing date, all citations, opinion text excerpt, and citation count.","inputSchema":{"type":"object","properties":{"case_id":{"type":"string","description":"CourtListener cluster ID from search_cases results (e.g. \"2245941\")"},"citation":{"type":"string","description":"Case citation to search for (e.g. \"410 U.S. 113\", \"175 Cal. App. 4th 545\")"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get case by cluster ID","input":{"case_id":"2245941"}},{"description":"Look up by citation","input":{"citation":"410 U.S. 113"}}],"pricing":"free","returns":"Full case name, court, date, all citations, opinion excerpt, and citation count"},{"name":"citation_analysis","displayName":"Citation Analysis","description":"Analyze citation networks for a court case — find what it cites and what cites it. Supports US (CourtListener) and Canadian (CanLII) cases. For US, provide case_id or citation. For Canada, provide case_id, database_id, and country=CA.","inputSchema":{"type":"object","properties":{"case_id":{"type":"string","description":"Case ID — CourtListener cluster ID (US) or CanLII caseId (Canada)"},"citation":{"type":"string","description":"Case citation to look up (US only, e.g. \"410 U.S. 113\")"},"country":{"type":"string","description":"Jurisdiction: \"US\" (default) or \"CA\" (Canada)"},"database_id":{"type":"string","description":"CanLII database ID (required for Canada, e.g. \"csc-scc\")"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find what cites a US case","input":{"case_id":"2245941"}},{"description":"Citation network by citation string","input":{"citation":"410 U.S. 113"}},{"description":"Canadian citation analysis","input":{"case_id":"abc123","database_id":"csc-scc","country":"CA"}}],"pricing":"free","returns":"Citation counts, list of citing cases, and list of cited cases with metadata"},{"name":"search_legislation","displayName":"Search Legislation","description":"Search statutes and legislation across jurisdictions. UK, US, EU (default: all three), Germany, Japan, Canada, Poland, Sweden. Set country param to filter.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — legislation title, legal topic, or keywords"},"country":{"type":"string","description":"Jurisdiction: \"UK\", \"US\", \"EU\", \"DE\", \"JP\", \"CA\", \"PL\" (Poland), \"SE\" (Sweden). Omit for UK+US+EU."},"year":{"type":"string","description":"Filter by year (UK only, e.g. \"2018\")"},"category":{"type":"number","description":"Japan only: law category 1 (Constitution), 2 (Acts), 3 (Cabinet Orders), 4 (Imperial Orders)"},"limit":{"type":"number","description":"Maximum results per jurisdiction (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search data protection laws across UK/US/EU","input":{"query":"data protection"}},{"description":"German employment law","input":{"query":"Arbeitsrecht","country":"DE"}},{"description":"Japanese Acts","input":{"query":"law","country":"JP","category":2}},{"description":"Canadian legislation","input":{"query":"privacy","country":"CA"}}],"pricing":"free","returns":"Legislation titles, types, dates, summaries, and URLs grouped by jurisdiction"},{"name":"legislation_details","displayName":"Legislation Details","description":"Get full details for a specific piece of legislation by its identifier. UK: \"ukpga/2018/12\". US: Federal Register doc number \"2025-23783\". EU: CELEX number \"32016R0679\".","inputSchema":{"type":"object","properties":{"identifier":{"type":"string","description":"Legislation identifier — UK: \"ukpga/2018/12\", US: \"2025-23783\", EU: \"32016R0679\" (CELEX)"},"source":{"type":"string","description":"Force source: \"uk\", \"us\", or \"eu\". Auto-detected from identifier format if omitted.","enum":["uk","us","eu"]}},"required":["identifier"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"UK Data Protection Act 2018","input":{"identifier":"ukpga/2018/12"}},{"description":"US Federal Register document","input":{"identifier":"2025-23783"}},{"description":"EU GDPR","input":{"identifier":"32016R0679","source":"eu"}}],"pricing":"free","returns":"Full legislation title, description, sections/contents, dates, and links to full text"},{"name":"search_cfr","displayName":"Search Regulations (CFR)","description":"Search the Code of Federal Regulations — all 50 CFR titles covering every US federal regulation. Updated daily. Returns CFR references, section headings, and regulation text excerpts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — regulation topic, CFR section, or keywords (e.g. \"HIPAA privacy\", \"food labeling\")"},"title":{"type":"number","description":"Filter by CFR title number (1-50). E.g. 21=Food & Drugs, 26=IRS, 40=Environment"},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Environmental regulations","input":{"query":"air quality standards"}},{"description":"FDA food labeling","input":{"query":"food labeling requirements","title":21}}],"pricing":"free","returns":"CFR references (e.g. \"40 CFR § 50.1\"), headings, excerpts, and eCFR URLs"},{"name":"search_regulations","displayName":"Search Rulemaking","description":"Search federal rulemaking documents, proposed rules, and public comments on Regulations.gov. Covers all federal agencies (EPA, FDA, DOL, etc.). Find rules, notices, and comment periods.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — rule topic, agency, or keywords (e.g. \"emissions standards\", \"drug labeling\")"},"document_type":{"type":"string","description":"Filter: \"Rule\", \"Proposed Rule\", \"Notice\", or \"Other\""},"agency":{"type":"string","description":"Agency ID filter (e.g. \"EPA\", \"FDA\", \"DOL\", \"SEC\")"},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"EPA emission rules","input":{"query":"emission standards","agency":"EPA"}},{"description":"FDA proposed rules","input":{"query":"drug labeling","document_type":"Proposed Rule"}}],"pricing":"free","returns":"Document IDs, titles, agencies, types, posted dates, docket IDs, comment status, and Regulations.gov URLs"},{"name":"search_statutes","displayName":"Search Statutes (US Code)","description":"Search the United States Code — all codified federal statutory law. Also searches public laws and Statutes at Large via GovInfo. Returns statute titles, citations, and links to full text.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — statute title, topic, or US Code citation (e.g. \"42 USC 1983\", \"civil rights\")"},"collection":{"type":"string","description":"Collection: \"USCODE\" (default), \"PLAW\" (public laws), \"STATUTE\" (Statutes at Large)","enum":["USCODE","PLAW","STATUTE"]},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search civil rights statutes","input":{"query":"civil rights"}},{"description":"Public laws about education","input":{"query":"education","collection":"PLAW"}}],"pricing":"free","returns":"Statute titles, package IDs, download links, and GovInfo URLs"},{"name":"search_congress","displayName":"Search Congressional Bills","description":"Search US Congressional bills, resolutions, and enacted laws. Browse current and historical sessions, filter by bill type.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — bill topic or keywords. Include \"law\" or \"enacted\" to search enacted laws."},"congress":{"type":"number","description":"Congress session number (e.g. 119 for current). Defaults to current."},"bill_type":{"type":"string","description":"Filter: \"hr\" (House bill), \"s\" (Senate bill), \"hjres\", \"sjres\""},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"AI-related bills","input":{"query":"artificial intelligence"}},{"description":"Recent enacted laws","input":{"query":"enacted law"}}],"pricing":"free","returns":"Bill numbers, titles, sponsors, latest actions, and congress.gov URLs"},{"name":"search_state_bills","displayName":"Search State Bills","description":"Search legislative bills across all 50 US states, DC, and Puerto Rico. Find state-level bills, resolutions, and legislative activity.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — bill topic or keywords (e.g. \"cannabis legalization\", \"rent control\")"},"state":{"type":"string","description":"Two-letter state code (e.g. \"ca\", \"ny\"). Omit to search all states."},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Cannabis legislation across states","input":{"query":"cannabis legalization"}},{"description":"California housing bills","input":{"query":"affordable housing","state":"ca"}}],"pricing":"free","returns":"Bill identifiers, titles, states, chambers, sessions, and Open States URLs"},{"name":"search_dockets","displayName":"Search Dockets","description":"Search PACER/RECAP federal court dockets and filings. Access millions of federal district, appellate, and bankruptcy court filings from the RECAP archive.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — case name, party, docket number, or topic"},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"},"date_after":{"type":"string","description":"Only dockets filed after this date (YYYY-MM-DD)"},"date_before":{"type":"string","description":"Only dockets filed before this date (YYYY-MM-DD)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for Apple patent dockets","input":{"query":"Apple Inc patent infringement"}},{"description":"Recent bankruptcy filings","input":{"query":"chapter 11 bankruptcy","date_after":"2024-01-01"}}],"pricing":"free","returns":"Case names, courts, docket numbers, filing dates, and CourtListener URLs"},{"name":"search_judges","displayName":"Search Judges","description":"Search judicial profiles — US federal and state judges with appointment details, courts, political affiliations, and biographical information.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — judge name, court, or topic (e.g. \"Roberts\", \"Ninth Circuit\")"},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for a specific judge","input":{"query":"Sotomayor"}},{"description":"Ninth Circuit judges","input":{"query":"Ninth Circuit"}}],"pricing":"free","returns":"Judge names, courts, appointment details, political affiliations, and profile URLs"},{"name":"search_fda","displayName":"Search FDA Data","description":"Search FDA drug labels, adverse events, and device recalls via openFDA. Covers prescription drugs, OTC medications, medical device safety data.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — drug name, ingredient, condition, or device type"},"data_type":{"type":"string","description":"Data type: \"labels\" (drug labeling, default), \"events\" (adverse events), \"recalls\" (device recalls)"},"limit":{"type":"number","description":"Maximum results (default: 20, max: 100)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search aspirin drug labels","input":{"query":"aspirin"}},{"description":"Adverse events for a drug","input":{"query":"metformin","data_type":"events"}},{"description":"Medical device recalls","input":{"query":"pacemaker","data_type":"recalls"}}],"pricing":"free","returns":"Drug label details, adverse event reports, or device recall information from FDA databases"},{"name":"search_epa","displayName":"Search EPA Enforcement","description":"Search EPA enforcement and compliance data for regulated facilities. Covers Clean Air Act, Clean Water Act, and RCRA violations, inspections, and penalties.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms — facility name, company, or pollutant"},"state":{"type":"string","description":"Two-letter state code to filter (e.g. \"NY\", \"CA\")"},"program":{"type":"string","description":"Environmental program: \"CAA\" (Clean Air), \"CWA\" (Clean Water), \"RCRA\" (Hazardous Waste)"},"limit":{"type":"number","description":"Maximum results (default: 20, max: 50)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for Exxon facilities","input":{"query":"Exxon"}},{"description":"Clean Air Act violations in California","input":{"query":"refinery","state":"CA","program":"CAA"}}],"pricing":"free","returns":"Facility names, addresses, compliance status, violations, penalties, and inspection history"},{"name":"search_vehicle_safety","displayName":"Search Vehicle Safety","description":"Search NHTSA vehicle safety recalls by make, model, year, or keyword. Covers all manufacturer safety recalls with defect descriptions and remedies.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search for recalls (e.g. \"airbag\", \"brake failure\")"},"make":{"type":"string","description":"Vehicle manufacturer (e.g. \"toyota\", \"ford\")"},"model":{"type":"string","description":"Vehicle model (e.g. \"camry\", \"f150\")"},"year":{"type":"string","description":"Model year (e.g. \"2024\")"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Toyota Camry 2024 recalls","input":{"make":"toyota","model":"camry","year":"2024"}},{"description":"Search airbag recalls","input":{"query":"airbag inflator"}}],"pricing":"free","returns":"Recall campaign numbers, components, defect summaries, consequences, and remedies"}],"workflow":["search_cases → case_details → citation_analysis","search_legislation → legislation_details","search_cfr","search_regulations","search_fda","search_epa","search_vehicle_safety","search_congress","search_statutes","search_state_bills","search_dockets","search_judges"],"icon":"/icons/case-law.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release: US case law, UK/US/EU legislation, Japan laws"]},{"version":"0.02","date":"2026-03-25","time":"09:15","changes":["Massive expansion: added CFR, Congress, US Code, state legislation, Indian cases, German law"]},{"version":"0.03","date":"2026-03-25","time":"14:30","changes":["Restructured: skills are now generic with country routing (search_cases country=IN instead of search_india_cases)","Added search_cases support for US, India, Germany, Canada (CanLII)","Added search_legislation support for UK, US, EU, Germany, Japan, Canada","Added search_dockets for PACER/RECAP federal court filings","Added search_judges for judicial profiles and appointments","Added citation_analysis for citation network analysis (US + Canada)","Added search_regulations for federal rulemaking documents (Regulations.gov)","Added CourtListener authenticated access (5000 req/hr, dockets, judges, citations)","Added CanLII integration for Canadian case law and legislation","Now covers 10+ jurisdictions with 11 skills"]},{"version":"0.04","date":"2026-03-25","changes":["Added UK case law (The National Archives Find Case Law) and Netherlands (Rechtspraak) to search_cases","Added Poland (Sejm ELI) and Sweden (Riksdagen) to search_legislation","Added search_fda: drug labels, adverse events, device recalls via openFDA","Added search_epa: environmental enforcement and compliance data via EPA ECHO","Added search_vehicle_safety: NHTSA vehicle safety recalls","Now covers 15+ jurisdictions with 15 skills"]},{"version":"0.05","date":"2026-04-06","changes":["search_epa: clearer error when search is too broad — now suggests adding a state filter","search_vehicle_safety: fixed vehicle lookup when make, model, and year are all provided; partial inputs (e.g. make only) now use text search automatically"]}],"premadePrompt":"Find court cases related to [legal topic] in [country, e.g. US / UK / India]. I'd also like to see the relevant legislation and any recent regulatory changes on this issue.","requirements":[{"name":"courtlistener","type":"secret","displayName":"CourtListener API Token","description":"API token for CourtListener — enables 5000 req/hr and access to dockets, judges, citations","envFallback":"COURTLISTENER_API_TOKEN"},{"name":"canlii","type":"secret","displayName":"CanLII API Key","description":"API key for CanLII (Canadian case law and legislation)","envFallback":"CANLII_API_KEY"},{"name":"congress_gov","type":"secret","displayName":"Congress.gov API Key","description":"API key for Congress.gov — get a free key at api.data.gov","envFallback":"CONGRESS_GOV_API_KEY"},{"name":"govinfo","type":"secret","displayName":"GovInfo API Key","description":"API key for GovInfo (US Code, public laws) — get a free key at api.data.gov","envFallback":"GOVINFO_API_KEY"},{"name":"openstates","type":"secret","displayName":"Open States API Key","description":"API key for Open States (state legislation)","envFallback":"OPENSTATES_API_KEY"},{"name":"indiankanoon","type":"secret","displayName":"IndianKanoon API Token","description":"API token for IndianKanoon (Indian case law)","envFallback":"INDIANKANOON_API_TOKEN"},{"name":"regulations_gov","type":"secret","displayName":"Regulations.gov API Key","description":"API key for Regulations.gov (federal rulemaking documents)","envFallback":"REGULATIONS_GOV_API_KEY"}],"credentials":[{"name":"courtlistener","type":"secret","displayName":"CourtListener API Token","description":"API token for CourtListener — enables 5000 req/hr and access to dockets, judges, citations","envFallback":"COURTLISTENER_API_TOKEN"},{"name":"canlii","type":"secret","displayName":"CanLII API Key","description":"API key for CanLII (Canadian case law and legislation)","envFallback":"CANLII_API_KEY"},{"name":"congress_gov","type":"secret","displayName":"Congress.gov API Key","description":"API key for Congress.gov — get a free key at api.data.gov","envFallback":"CONGRESS_GOV_API_KEY"},{"name":"govinfo","type":"secret","displayName":"GovInfo API Key","description":"API key for GovInfo (US Code, public laws) — get a free key at api.data.gov","envFallback":"GOVINFO_API_KEY"},{"name":"openstates","type":"secret","displayName":"Open States API Key","description":"API key for Open States (state legislation)","envFallback":"OPENSTATES_API_KEY"},{"name":"indiankanoon","type":"secret","displayName":"IndianKanoon API Token","description":"API token for IndianKanoon (Indian case law)","envFallback":"INDIANKANOON_API_TOKEN"},{"name":"regulations_gov","type":"secret","displayName":"Regulations.gov API Key","description":"API key for Regulations.gov (federal rulemaking documents)","envFallback":"REGULATIONS_GOV_API_KEY"}]},{"name":"submit-sitemap","displayName":"Submit Sitemap","subtitle":"Submit sitemaps to search engines","about":"**Submit Sitemap** gets your pages indexed faster by submitting your sitemap and individual URLs to Google Search Console, IndexNow (Bing, Yandex, Naver, Seznam), and Brave Search in one workflow. New content that isn't submitted can sit unindexed for days — this tool fixes that.\n\nIt handles the full submission lifecycle: fetch and parse your sitemap.xml (including sitemap indexes and Next.js dynamic sitemaps), submit to all engines at once, push specific new or updated pages for immediate indexing, check which pages are actually indexed right now, and submit to Brave via browser automation since Brave has no API. All four major search networks are covered in a single workflow.\n\n### What you can do\n- **submit_sitemap** — parse your sitemap.xml and submit all URLs to Google and IndexNow in one call\n- **submit_urls** — request immediate indexing for specific new or updated pages\n- **check_indexing** — verify which pages are indexed in Google (handles 50+ URLs concurrently in seconds)\n- **submit_brave** — push URLs to Brave Search via browser automation, no credentials needed\n\n### Who it's for\nSEO professionals, developers, and site owners who publish new content regularly and want it indexed quickly. Especially useful after a site launch, a content migration, or publishing a batch of new pages.\n\n### How to use it\n1. Use **submit_sitemap** with your sitemap URL to submit everything to Google and IndexNow at once — pass your Google Search Console site URL and IndexNow key\n2. When you publish individual new pages, use **submit_urls** to request immediate indexing\n3. Use **check_indexing** to audit which pages are actually indexed — run it before and after submission to verify\n4. Use **submit_brave** with a list of your key URLs to cover Brave Search\n\n### Getting started\nConnect your Google Search Console account (service account JSON key) to enable Google submission. For IndexNow, generate a key and host it at your domain — the tool auto-detects your host from the sitemap URL.","version":"0.03","categories":["marketing","search"],"currency":"USD","skills":[{"name":"submit_sitemap","displayName":"Submit Sitemap","description":"Fetches your /sitemap.xml, parses all URLs (handles sitemap indexes and Next.js dynamic sitemaps), and submits to Google Search Console + IndexNow (Bing, Yandex, Naver, Seznam). For Brave, use submit_brave separately.","inputSchema":{"type":"object","properties":{"sitemap_url":{"type":"string","description":"Full URL of the sitemap XML (e.g. https://example.com/sitemap.xml). The tool server CAN fetch any public URL — always pass it."},"google_site_url":{"type":"string","description":"Google Search Console site URL (e.g. \"sc-domain:example.com\" or \"https://example.com/\"). Required for Google submission."},"indexnow_key":{"type":"string","description":"IndexNow verification key. Generate one (e.g. openssl rand -hex 16) and host it at https://{domain}/{key}.txt."},"indexnow_host":{"type":"string","description":"Domain for IndexNow submission. Auto-derived from sitemap URL if not provided."},"engines":{"type":"array","description":"Which engines to submit to. Defaults to all: [\"google\", \"indexnow\"].","items":{"type":"string"}}},"required":["sitemap_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Submit sitemap to all engines","input":{"sitemap_url":"https://example.com/sitemap.xml","google_site_url":"sc-domain:example.com","indexnow_key":"abc123def456"}},{"description":"Submit only to IndexNow","input":{"sitemap_url":"https://example.com/sitemap.xml","indexnow_key":"abc123def456","engines":["indexnow"]}}],"pricing":"paid","returns":"Per-engine submission results with success/skip/error status and URL counts"},{"name":"submit_urls","displayName":"Submit URLs","description":"Submit individual URLs for indexing via Google Indexing API (URL_UPDATED notification, 200/day quota) and IndexNow (batch up to 10K URLs per request to Bing, Yandex, Naver, Seznam). Use for new or recently updated pages that need immediate indexing.","inputSchema":{"type":"object","properties":{"urls":{"type":"array","description":"Array of page URLs to submit for indexing","items":{"type":"string"}},"google_site_url":{"type":"string","description":"Google Search Console site URL. Required for Google Indexing API."},"indexnow_key":{"type":"string","description":"IndexNow verification key. Must be hosted at https://{domain}/{key}.txt."},"indexnow_host":{"type":"string","description":"Domain for IndexNow submission. Auto-derived from first URL if not provided."},"engines":{"type":"array","description":"Which engines to submit to. Defaults to [\"google\", \"indexnow\"].","items":{"type":"string"}}},"required":["urls"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Submit specific URLs to all engines","input":{"urls":["https://example.com/new-page","https://example.com/updated-page"],"google_site_url":"sc-domain:example.com","indexnow_key":"abc123def456"}},{"description":"Submit URLs to IndexNow only","input":{"urls":["https://example.com/page1","https://example.com/page2"],"indexnow_key":"abc123def456","engines":["indexnow"]}}],"pricing":"paid","returns":"Per-URL submission results for each engine with success/error status"},{"name":"check_indexing","displayName":"Check Indexing Status","description":"Check URL indexing status via Google URL Inspection API (2000/day quota). Runs 5 concurrent requests — handles 50+ URLs in seconds without timeout risk. Returns verdict (PASS/FAIL), coverage state, last crawl time, and crawl details for each URL.","inputSchema":{"type":"object","properties":{"urls":{"type":"array","description":"Array of URLs to check indexing status for","items":{"type":"string"}},"google_site_url":{"type":"string","description":"Google Search Console site URL (e.g. \"sc-domain:example.com\" or \"https://example.com/\")"}},"required":["urls","google_site_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Check indexing status for pages","input":{"urls":["https://example.com/page1","https://example.com/page2"],"google_site_url":"sc-domain:example.com"}},{"description":"Bulk check 100+ URLs","input":{"urls":["https://example.com/page1","https://example.com/page2","... up to 2000"],"google_site_url":"sc-domain:example.com"}}],"pricing":"paid","returns":"Per-URL indexing status with verdict, coverage state, last crawl time, and crawl details"},{"name":"submit_brave","displayName":"Submit to Brave Search","description":"Submit URLs to Brave Search via browser automation. Brave has no API — this skill opens a real browser, navigates to the Brave Search submit form, enters each URL, and clicks submit. No credentials needed. Runs on Steel Browser in production.","inputSchema":{"type":"object","properties":{"urls":{"type":"array","description":"Array of URLs to submit to Brave Search","items":{"type":"string"}}},"required":["urls"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Submit URLs to Brave Search","input":{"urls":["https://example.com/","https://example.com/about"]}}],"pricing":"paid","returns":"Per-URL submission results with success/error status"}],"workflow":["submit_sitemap","submit_urls → submit_brave","submit_sitemap → check_indexing"],"icon":"/icons/submit-sitemap.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release — submit_sitemap, submit_urls, check_indexing, submit_brave","IndexNow fans out to Bing, Yandex, Naver, Seznam individually","Brave submission via browser automation (Steel Browser in production)","Auto-detects Next.js dynamic sitemaps (/sitemap/0.xml, /sitemap/1.xml, ...)"]},{"version":"0.02","date":"2026-04-17","changes":["check_indexing: 5× faster — runs 5 concurrent requests instead of sequential, 50 URLs now takes ~2s instead of ~25s","check_indexing: supports bulk batches of 50–2000 URLs without timeout risk"]},{"version":"0.03","date":"2026-05-08","changes":["IndexNow key now auto-detected when not passed in: checks saved indexnow_key credential, then probes robots.txt for a `IndexNow:` directive (Bing extension), then /.well-known/indexnow.txt. Submissions verify the key is actually published before declaring discovery successful — no more silent skips when a live key file already exists.","Added indexnow_key and indexnow_host as saveable credentials so the configuration only happens once per team"]}],"premadePrompt":"Submit my sitemap at [sitemap URL] to Google and Bing so my new pages get indexed faster.","requirements":[{"name":"google_search_console","type":"secret","displayName":"Google Search Console Credentials","description":"Google credentials JSON for Search Console + Indexing API access. Either a service account key (go to console.cloud.google.com → IAM → Service Accounts → create key → download JSON) or an OAuth2 token JSON with refresh_token, client_id, client_secret.","acquireUrl":"https://console.cloud.google.com/iam-admin/serviceaccounts","envFallback":"GOOGLE_SEARCH_CONSOLE_TOKEN","setupGuide":"A Google Cloud service account JSON key with Search Console and Indexing API access.\n\nStep 1 — Create a Google Cloud project (or use existing):\n1. Go to https://console.cloud.google.com/\n2. Create or select a project\n\nStep 2 — Enable APIs:\n1. Go to https://console.cloud.google.com/apis/library\n2. Search for and enable \"Google Search Console API\"\n3. Also search for and enable \"Web Search Indexing API\"\n\nStep 3 — Create a service account:\n1. Go to https://console.cloud.google.com/iam-admin/serviceaccounts\n2. Click \"+ Create Service Account\", name it, and click through (skip role assignment)\n3. Note the service account email address\n\nStep 4 — Download the JSON key:\n1. Click the three-dot menu on your service account\n2. Click \"Manage keys\" > \"Add Key\" > \"Create new key\" > \"JSON\" > \"Create\"\n\nStep 5 — Add as owner in Search Console:\n1. Go to https://search.google.com/search-console\n2. Select your property, go to Settings > Users and permissions\n3. Click \"Add user\", paste the service account email, set role to \"Owner\"\n\nPaste the ENTIRE contents of the downloaded JSON file as the credential value."},{"name":"indexnow_key","type":"secret","displayName":"IndexNow Key","description":"Optional. Save your IndexNow key once and the tool will auto-detect your host from sitemap / URL inputs. If unset, the tool also probes robots.txt and /.well-known/indexnow.txt to discover a published key.","envFallback":"INDEXNOW_KEY"},{"name":"indexnow_host","type":"credential","displayName":"IndexNow Host","description":"Optional. Override the host used for the IndexNow key file (defaults to the host parsed from the submitted sitemap or URL)."}],"credentials":[{"name":"google_search_console","type":"secret","displayName":"Google Search Console Credentials","description":"Google credentials JSON for Search Console + Indexing API access. Either a service account key (go to console.cloud.google.com → IAM → Service Accounts → create key → download JSON) or an OAuth2 token JSON with refresh_token, client_id, client_secret.","acquireUrl":"https://console.cloud.google.com/iam-admin/serviceaccounts","envFallback":"GOOGLE_SEARCH_CONSOLE_TOKEN","setupGuide":"A Google Cloud service account JSON key with Search Console and Indexing API access.\n\nStep 1 — Create a Google Cloud project (or use existing):\n1. Go to https://console.cloud.google.com/\n2. Create or select a project\n\nStep 2 — Enable APIs:\n1. Go to https://console.cloud.google.com/apis/library\n2. Search for and enable \"Google Search Console API\"\n3. Also search for and enable \"Web Search Indexing API\"\n\nStep 3 — Create a service account:\n1. Go to https://console.cloud.google.com/iam-admin/serviceaccounts\n2. Click \"+ Create Service Account\", name it, and click through (skip role assignment)\n3. Note the service account email address\n\nStep 4 — Download the JSON key:\n1. Click the three-dot menu on your service account\n2. Click \"Manage keys\" > \"Add Key\" > \"Create new key\" > \"JSON\" > \"Create\"\n\nStep 5 — Add as owner in Search Console:\n1. Go to https://search.google.com/search-console\n2. Select your property, go to Settings > Users and permissions\n3. Click \"Add user\", paste the service account email, set role to \"Owner\"\n\nPaste the ENTIRE contents of the downloaded JSON file as the credential value."},{"name":"indexnow_key","type":"secret","displayName":"IndexNow Key","description":"Optional. Save your IndexNow key once and the tool will auto-detect your host from sitemap / URL inputs. If unset, the tool also probes robots.txt and /.well-known/indexnow.txt to discover a published key.","envFallback":"INDEXNOW_KEY"},{"name":"indexnow_host","type":"credential","displayName":"IndexNow Host","description":"Optional. Override the host used for the IndexNow key file (defaults to the host parsed from the submitted sitemap or URL)."}]},{"name":"news","displayName":"News","subtitle":"Search and track news worldwide","about":"**News** searches and tracks news from around the world — by keyword, topic, location, or specific publisher. It covers 50+ regional editions in local languages, supports time filters from the last hour to the last month, and returns direct article links with source attribution.\n\nAI models can't access live news, and web search returns mixed results. This tool gives you structured news data on demand: search for coverage on any topic, track what's trending right now, monitor news about a specific city, or follow a particular outlet — all with consistent formatting and real publication dates.\n\n### What you can do\n- **search_news** — find articles by keyword, phrase, location, or publisher with advanced operators and time filters\n- **trending_news** — get current top headlines by topic (world, business, technology, health, sports, etc.) and region\n- **location_news** — get news specifically about a city, state, or country\n- **publisher_news** — pull recent articles from a specific news outlet by name or domain\n\n### Who it's for\nResearchers tracking a topic or company across media. Analysts monitoring industry news across regions. Anyone who needs current coverage on a specific story, location, or publisher as part of a workflow.\n\n### How to use it\n1. Use **search_news** for targeted keyword queries — add the when parameter (1h, 1d, 7d, 30d) to scope by recency\n2. Use **trending_news** to see what's breaking right now across topics and regions\n3. Use **location_news** for geography-specific coverage — useful for local business research or travel planning\n4. Use **publisher_news** to follow a specific outlet like Reuters, BBC, or TechCrunch\n\n### Getting started\nStart with **search_news** and a topic. Set region to match your target audience (us, uk, de, jp, etc.) and use when to filter by recency. Combine with publisher_news to verify coverage in specific outlets.","version":"0.03","categories":["search","data"],"currency":"USD","skills":[{"name":"search_news","displayName":"Search News","description":"Find news articles matching a keyword or phrase with optional filters for time range, location, and publisher. The most flexible way to find specific coverage on any topic.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query — keywords, phrases, or advanced operators. Supports: \"exact phrase\", OR, AND, -exclude."},"exact_phrase":{"type":"string","description":"Find articles containing this exact phrase (wraps in quotes automatically)"},"exclude":{"type":"string","description":"Comma-separated terms to exclude from results (e.g. \"opinion,editorial,sponsored\")"},"site":{"type":"string","description":"Limit results to a specific publisher domain (e.g. \"reuters.com\", \"bbc.co.uk\")"},"location":{"type":"string","description":"Filter by geographic location (e.g. \"London\", \"California\", \"Japan\")"},"when":{"type":"string","description":"Time filter — 1h (last hour), 1d (last day), 7d (last week), 30d (last month)","enum":["1h","1d","7d","30d"]},"region":{"type":"string","description":"Regional edition code (default: us). 50+ regions: us, uk, au, ca, in, de, fr, es, it, br, jp, kr, mx, and more.","default":"us"},"count":{"type":"number","description":"Number of articles to return (default: 20, max: 100)","default":20}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Search for AI news","input":{"query":"artificial intelligence"}},{"description":"Search for climate news in the UK from the last week","input":{"query":"climate change","region":"uk","when":"7d","count":10}},{"description":"Search with exact phrase and exclusions","input":{"query":"electric vehicles","exact_phrase":"battery technology","exclude":"opinion,editorial"}},{"description":"Search a specific publisher for a topic","input":{"query":"interest rates","site":"reuters.com","when":"1d"}},{"description":"Search by location","input":{"query":"earthquake","location":"California","when":"7d"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The full search query with operators"},"region":{"type":"string","description":"Region code used"},"article_count":{"type":"number","description":"Number of articles returned"},"articles":{"type":"array","description":"Articles array: title, link, source, image, published, published_iso, and related articles"},"available_regions":{"type":"array","description":"Supported region codes"}}},"returns":"Structured array of news articles matching the query — each with title, direct link, source name, publication date (human + ISO 8601), and related articles with links"},{"name":"trending_news","displayName":"Trending News","description":"Get top headlines and trending stories right now, optionally filtered by topic and region.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"News topic to filter by. Omit for top stories across all topics.","enum":["world","nation","business","technology","entertainment","sports","science","health"]},"region":{"type":"string","description":"Regional edition code (default: us). 50+ regions: us, uk, au, ca, in, de, fr, es, it, br, jp, kr, mx, and more.","default":"us"},"count":{"type":"number","description":"Number of articles to return (default: 20, max: 100)","default":20}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Get top headlines","input":{}},{"description":"Get technology news","input":{"topic":"technology"}},{"description":"Get business news from Germany","input":{"topic":"business","region":"de","count":10}},{"description":"Get sports headlines from Japan","input":{"topic":"sports","region":"jp"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"Topic used (or \"top_stories\" if none)"},"region":{"type":"string","description":"Region code used"},"article_count":{"type":"number","description":"Number of articles returned"},"articles":{"type":"array","description":"Articles array: title, link, source, image, published, published_iso, and related articles"},"available_topics":{"type":"array","description":"Supported topic names"},"available_regions":{"type":"array","description":"Supported region codes"}}},"returns":"Trending news articles with title, source, image thumbnail, publication date, link, and related articles — sorted by prominence"},{"name":"location_news","displayName":"Location News","description":"Get news about a specific city, state, or country. Useful for local news monitoring, travel research, and regional event tracking.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"Geographic location — city name, state, region, or country (e.g. \"London\", \"California\", \"Brazil\", \"Tokyo\")"},"topic":{"type":"string","description":"Optional topic to narrow results within the location (e.g. \"technology\", \"crime\", \"weather\", \"elections\")"},"when":{"type":"string","description":"Time filter — 1h (last hour), 1d (last day), 7d (last week), 30d (last month)","enum":["1h","1d","7d","30d"]},"region":{"type":"string","description":"Regional edition code (default: us). 50+ regions: us, uk, au, ca, in, de, fr, es, it, br, jp, kr, mx, and more.","default":"us"},"count":{"type":"number","description":"Number of articles to return (default: 20, max: 100)","default":20}},"required":["location"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Get news about London","input":{"location":"London"}},{"description":"Get technology news from Silicon Valley","input":{"location":"Silicon Valley","topic":"technology"}},{"description":"Recent news about Tokyo in the last day","input":{"location":"Tokyo","when":"1d","region":"jp"}},{"description":"Crime news in Chicago this week","input":{"location":"Chicago","topic":"crime","when":"7d"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"location":{"type":"string","description":"The location searched"},"topic":{"type":"string","description":"Topic filter used (null if none)"},"query":{"type":"string","description":"The full query with operators"},"region":{"type":"string","description":"Region code used"},"article_count":{"type":"number","description":"Number of articles returned"},"articles":{"type":"array","description":"Articles array: title, link, source, image, published, published_iso, and related articles"},"available_regions":{"type":"array","description":"Supported region codes"}}},"returns":"News articles related to the specified location — each with title, source, image thumbnail, publication date, link, and related articles"},{"name":"publisher_news","displayName":"Publisher News","description":"Get recent articles from a specific news outlet by name or domain. Supports 40+ major publishers and any custom domain.","inputSchema":{"type":"object","properties":{"publisher":{"type":"string","description":"Publisher name (reuters, bbc, cnn, nytimes, bloomberg, wsj, etc.) or any domain (e.g. \"arstechnica.com\")"},"topic":{"type":"string","description":"Optional topic to filter articles from this publisher (e.g. \"AI\", \"climate\", \"earnings\")"},"when":{"type":"string","description":"Time filter — 1h (last hour), 1d (last day), 7d (last week), 30d (last month)","enum":["1h","1d","7d","30d"]},"region":{"type":"string","description":"Regional edition code (default: us). 50+ regions: us, uk, au, ca, in, de, fr, es, it, br, jp, kr, mx, and more.","default":"us"},"count":{"type":"number","description":"Number of articles to return (default: 20, max: 100)","default":20}},"required":["publisher"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Get latest Reuters articles","input":{"publisher":"reuters"}},{"description":"Get BBC technology coverage","input":{"publisher":"bbc","topic":"technology"}},{"description":"Get New York Times articles from the last week","input":{"publisher":"new york times","when":"7d","count":15}},{"description":"Get TechCrunch articles about AI","input":{"publisher":"techcrunch","topic":"artificial intelligence"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"publisher":{"type":"string","description":"Publisher name as provided"},"resolved_domain":{"type":"string","description":"Domain used in the query"},"topic":{"type":"string","description":"Topic filter used (null if none)"},"query":{"type":"string","description":"The full query with operators"},"region":{"type":"string","description":"Region code used"},"article_count":{"type":"number","description":"Number of articles returned"},"articles":{"type":"array","description":"Articles array: title, link, source, image, published, published_iso, and related articles"},"known_publishers":{"type":"array","description":"List of recognized publisher names"},"available_regions":{"type":"array","description":"Supported region codes"}}},"returns":"Articles from the specified publisher with title, source, image thumbnail, publication date, link, and related articles. Includes list of known publisher shortcuts."}],"workflow":["search_news","trending_news","trending_news → search_news","location_news → search_news","publisher_news"],"icon":"/icons/news.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with search_news, trending_news, location_news, and publisher_news skills"]},{"version":"0.02","date":"2026-03-24","changes":["Renamed from google-news to news"]},{"version":"0.03","date":"2026-03-24","changes":["Rewrite metadata to follow tool authoring guidelines"]}],"premadePrompt":"What are the latest news stories about [topic]? Show me recent coverage from the past week."},{"name":"fact-lookup","displayName":"Fact Lookup","subtitle":"Look up facts about anything","about":"**Fact Lookup** retrieves structured, verifiable facts about any person, place, company, or concept from a database of over 100 million entities. Ask about founding dates, population, headquarters, CEOs, coordinates, awards — and get authoritative answers with source references.\n\nIt goes beyond simple Q&A. The advanced query skill lets you run structured questions across the knowledge graph: list all Nobel Prize winners from a country, rank cities by population, find all subsidiaries of a company, or compare two entities on any shared property. Every answer traces back to a citable source.\n\n### What you can do\n- **search** — find entities by keyword and get their IDs, descriptions, and links\n- **get_entity** — retrieve up to 60 structured facts about any entity by name or ID\n- **sparql_query** — run advanced multi-entity queries for lists, rankings, and comparisons\n\n### Who it's for\nResearchers, journalists, writers, developers building knowledge-enriched applications, and anyone who needs fast, citable answers to factual questions.\n\n### How to use it\n1. Call **search** with a keyword to find the right entity and get its ID.\n2. Call **get_entity** with the entity name or ID to get the full fact sheet.\n3. For more complex questions — \"list the 10 most populous cities in Germany\" — use **sparql_query** directly.\n\n### Getting started\nCall **get_entity** with any well-known name — a city, company, or person — to see what structured data is available. No setup needed.","version":"0.02","categories":["data"],"currency":"USD","skills":[{"name":"search","displayName":"Search Entities","description":"Search Wikidata entities by keyword. Returns matching entities with IDs, labels, descriptions, and links to Wikipedia and Wikidata.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term — person, place, organization, concept, etc."},"language":{"type":"string","description":"Language code for labels and search (default \"en\")","default":"en"},"limit":{"type":"number","description":"Max results to return (1-20)","default":10,"minimum":1,"maximum":20}},"required":["query"]},"annotations":{},"examples":[{"description":"Search for Tesla","input":{"query":"Tesla"}},{"description":"Search for Tokyo in Japanese","input":{"query":"東京","language":"ja"}}],"pricing":"free","returns":"List of matching Wikidata entities with ID, label, description, and URLs"},{"name":"get_entity","displayName":"Get Entity Facts","description":"Get comprehensive structured facts about any entity. Accepts a name or Wikidata Q-ID. Returns up to 60 properties with values resolved to human-readable labels — population, founding date, coordinates, CEO, awards, and more.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name (e.g. \"Tokyo\", \"Albert Einstein\", \"Apple Inc\") or Wikidata Q-ID (e.g. \"Q1490\")"},"language":{"type":"string","description":"Language for labels (default \"en\")","default":"en"}},"required":["entity"]},"annotations":{},"examples":[{"description":"Get facts about Tokyo","input":{"entity":"Tokyo"}},{"description":"Get facts about Albert Einstein","input":{"entity":"Albert Einstein"}},{"description":"Get facts by Q-ID","input":{"entity":"Q312"}}],"pricing":"free","returns":"Structured entity data with label, description, aliases, Wikipedia URL, and key facts resolved to readable values"},{"name":"sparql_query","displayName":"SPARQL Query","description":"Run a SPARQL query against Wikidata for complex multi-entity questions. Supports filtering, sorting, aggregation, and relationship traversal across 100M+ entities.","inputSchema":{"type":"object","properties":{"sparql":{"type":"string","description":"SPARQL query string. Must include SERVICE wikibase:label for readable results. LIMIT is auto-added if missing (max 500)."}},"required":["sparql"]},"annotations":{},"examples":[{"description":"Top 10 most populous countries","input":{"sparql":"SELECT ?country ?countryLabel ?population WHERE { ?country wdt:P31 wd:Q6256 . ?country wdt:P1082 ?population . SERVICE wikibase:label { bd:serviceParam wikibase:language \"en\". } } ORDER BY DESC(?population) LIMIT 10"}},{"description":"Nobel Prize in Physics winners since 2020","input":{"sparql":"SELECT ?person ?personLabel ?year WHERE { ?person p:P166 ?award . ?award ps:P166 wd:Q38104 . ?award pq:P585 ?date . BIND(YEAR(?date) AS ?year) FILTER(?year >= 2020) SERVICE wikibase:label { bd:serviceParam wikibase:language \"en\". } } ORDER BY DESC(?year) LIMIT 20"}},{"description":"Universities in the United Kingdom","input":{"sparql":"SELECT ?uni ?uniLabel ?city ?cityLabel WHERE { ?uni wdt:P31 wd:Q3918 . ?uni wdt:P17 wd:Q145 . OPTIONAL { ?uni wdt:P131 ?city } SERVICE wikibase:label { bd:serviceParam wikibase:language \"en\". } } LIMIT 50"}}],"pricing":"free","returns":"SPARQL query results as an array of row objects with column names as keys"}],"icon":"/icons/fact-lookup.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with search, get_entity, and sparql_query skills"]},{"version":"0.02","date":"2026-03-24","changes":["Renamed from knowledge-graph to fact-lookup for discoverability"]}],"premadePrompt":"Look up key facts about [person, place, or company] — founding date, population, headquarters, leadership, and any notable awards or records."},{"name":"economic-data","displayName":"Economic Data","subtitle":"Census, FRED, and labor stats","about":"**Economic Data** gives you direct access to US government statistical databases — the kind of authoritative data that economists, journalists, and researchers rely on. Ask \"what's the median household income in zip code 90210?\" or \"show me how the federal funds rate has changed over 5 years\" and get precise, sourced answers.\n\nIt connects to four major data sources: the Census Bureau's ACS surveys for demographics at zip-code and county level, the Federal Reserve's FRED database with over 800,000 economic time series, the Bureau of Labor Statistics for employment and wage data, and Data.gov for hundreds of thousands of additional government datasets.\n\n### What you can do\n- **census_lookup** — ACS demographic data by state, county, zip code, metro area, or census tract (population, income, housing, education)\n- **fred_search** — search the FRED database by keyword to find economic time series\n- **fred_series** — fetch historical data for any FRED series (GDP, FEDFUNDS, UNRATE, MORTGAGE30US, and more)\n- **bls_series** — BLS employment data: unemployment rate, CPI, nonfarm payrolls, and wages\n- **dataset_search** — search 400,000+ Data.gov datasets by keyword\n\n### Who it's for\nEconomists, journalists, policy researchers, real estate analysts, and anyone building dashboards or reports that need reliable government statistics.\n\n### How to use it\n1. For geographic demographics, call **census_lookup** with variable codes and a geography type like \"zip\" or \"county\".\n2. For macro time series, call **fred_search** to find the right series ID, then **fred_series** to pull the data.\n3. For labor market data, call **bls_series** with the series ID (e.g. LNS14000000 for unemployment).\n\n### Getting started\nConnect your FRED API key for full access to historical economic data. The Census and BLS skills work without a key.","version":"0.01","categories":["finance","data"],"currency":"USD","skills":[{"name":"census_lookup","displayName":"Census Lookup","description":"Query US Census Bureau ACS 5-Year data. Get demographics, income, housing, education, and employment data for any state, county, zip code, metro area, or census tract.","inputSchema":{"type":"object","properties":{"variables":{"type":"string","description":"Comma-separated ACS variable codes (e.g. B01001_001E for population, B19013_001E for median income)"},"geo_type":{"type":"string","enum":["state","county","zip","place","metro","congressional_district","tract"],"description":"Geographic level to query"},"geo_code":{"type":"string","description":"FIPS code for the geography, or \"*\" for all entities at that level. States: 2-digit (06=CA). Counties: 3-digit within state. Zip: 5-digit.","default":"*"},"state":{"type":"string","description":"State FIPS code (required for county, place, congressional_district, tract queries)"},"year":{"type":"number","description":"ACS data year (2009-2022 available)","default":2022}},"required":["variables","geo_type"]},"annotations":{},"examples":[{"description":"Median income in Beverly Hills 90210","input":{"variables":"B19013_001E","geo_type":"zip","geo_code":"90210"}},{"description":"Population of all US states","input":{"variables":"B01001_001E","geo_type":"state","geo_code":"*"}},{"description":"Population and income for California counties","input":{"variables":"B01001_001E,B19013_001E","geo_type":"county","geo_code":"*","state":"06"}}],"pricing":"free","returns":"Census data rows with geographic names and requested variable values"},{"name":"fred_search","displayName":"Search FRED Series","description":"Search 800,000+ FRED economic data series by keyword. Find series IDs for GDP, interest rates, inflation, housing, employment, and more.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search keywords (e.g. \"mortgage rate\", \"unemployment\", \"GDP\", \"housing starts\")"},"limit":{"type":"number","description":"Max results (1-50)","default":10}},"required":["query"]},"annotations":{},"examples":[{"description":"Find mortgage rate series","input":{"query":"mortgage rate"}},{"description":"Find housing data","input":{"query":"housing starts"}}],"pricing":"free","returns":"List of matching FRED series with IDs, titles, units, frequency, and date ranges"},{"name":"fred_series","displayName":"Get FRED Series Data","description":"Get time series observations for a FRED economic data series. Returns date/value pairs for any of 800,000+ economic indicators.","inputSchema":{"type":"object","properties":{"series_id":{"type":"string","description":"FRED series ID (case-sensitive). Common: GDP, UNRATE, CPIAUCSL, FEDFUNDS, DGS10, SP500, MORTGAGE30US, MSPUS"},"start_year":{"type":"number","description":"Start year for observations (default: all available)"},"end_year":{"type":"number","description":"End year for observations (default: latest)"},"limit":{"type":"number","description":"Max observations to return, newest first (1-200)","default":60}},"required":["series_id"]},"annotations":{},"examples":[{"description":"Current federal funds rate","input":{"series_id":"FEDFUNDS","limit":12}},{"description":"S&P 500 for the last 5 years","input":{"series_id":"SP500","start_year":2021}},{"description":"US unemployment rate history","input":{"series_id":"UNRATE"}}],"pricing":"free","returns":"Series metadata (title, units, frequency) and time series observations sorted newest first"},{"name":"bls_series","displayName":"BLS Time Series","description":"Get Bureau of Labor Statistics time series data — unemployment, CPI, wages, employment, and more. Supports multiple series in one call.","inputSchema":{"type":"object","properties":{"series_ids":{"type":"string","description":"Comma-separated BLS series IDs. Common: LNS14000000 (unemployment), CUUR0000SA0 (CPI), CES0000000001 (nonfarm employment)"},"start_year":{"type":"number","description":"Start year (default: 3 years ago; max 20 with API key)"},"end_year":{"type":"number","description":"End year (default: current year)"}},"required":["series_ids"]},"annotations":{},"examples":[{"description":"US unemployment rate","input":{"series_ids":"LNS14000000"}},{"description":"CPI and unemployment together","input":{"series_ids":"CUUR0000SA0,LNS14000000","start_year":2023}}],"pricing":"free","returns":"BLS time series data with year, period, value, and optional calculations"},{"name":"dataset_search","displayName":"Search Government Datasets","description":"Search 400,000+ US government datasets on Data.gov. Returns metadata, descriptions, and download links for federal, state, and local datasets.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search keywords (e.g. \"climate change\", \"crime statistics\", \"education\")"},"limit":{"type":"number","description":"Max results (1-50)","default":10},"organization":{"type":"string","description":"Filter by publishing organization slug (e.g. \"census-gov\", \"noaa-gov\", \"nasa-gov\", \"epa-gov\")"},"format":{"type":"string","description":"Filter by resource format (e.g. \"CSV\", \"JSON\", \"API\", \"XML\")"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find climate datasets","input":{"query":"climate change"}},{"description":"Census CSV datasets about housing","input":{"query":"housing","organization":"census-gov","format":"CSV"}}],"pricing":"free","returns":"Government dataset metadata with titles, descriptions, tags, organizations, and resource download links"}],"icon":"/icons/economic-data.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with Census ACS, FRED search/series, BLS series, and Data.gov dataset search"]}],"premadePrompt":"What is the current federal funds rate and how has it changed over the last 2 years? Also look up the median household income for [zip code or city].","requirements":[{"name":"fred_api_key","type":"secret","displayName":"FRED API Key","description":"Federal Reserve Economic Data API key — free at fred.stlouisfed.org/docs/api/api_key.html","envFallback":"FRED_API_KEY"},{"name":"bls_api_key","type":"secret","displayName":"BLS API Key","description":"Bureau of Labor Statistics API key — free at bls.gov/developers. Optional, increases rate limits.","envFallback":"BLS_API_KEY"}],"credentials":[{"name":"fred_api_key","type":"secret","displayName":"FRED API Key","description":"Federal Reserve Economic Data API key — free at fred.stlouisfed.org/docs/api/api_key.html","envFallback":"FRED_API_KEY"},{"name":"bls_api_key","type":"secret","displayName":"BLS API Key","description":"Bureau of Labor Statistics API key — free at bls.gov/developers. Optional, increases rate limits.","envFallback":"BLS_API_KEY"}]},{"name":"vessel-tracker","displayName":"Vessel Tracker","subtitle":"Live ship positions and AIS data","about":"**Vessel Tracker** tracks any ship in real time using live AIS data broadcast from vessels worldwide. Whether you're monitoring a specific ship by its MMSI number or watching all traffic in a busy port, you get current positions, speeds, headings, and navigation status within seconds.\n\nThe tool taps into global automatic identification system data — the same signals ships transmit to each other to avoid collisions. It covers commercial vessels, tankers, cargo ships, ferries, tugs, and pleasure craft anywhere in the world.\n\n### What you can do\n- **search_vessels** — find vessels by MMSI or geographic bounding box, with live positions and speeds\n- **vessel_details** — get static ship specs like name, type, flag, dimensions, and call sign\n- **monitor_area** — full traffic report for a port or sea area showing all active vessels\n- **safety_alerts** — active collision warnings, weather broadcasts, and distress signals for an area\n- **navigation_aids** — buoys, beacons, and navigational markers, flagging any that appear off position\n- **visualize_area** — AI-generated bird's-eye map showing vessel positions in a geographic area\n\n### Who it's for\nMaritime logistics teams tracking shipments, port authorities monitoring traffic, security analysts watching specific vessels, and researchers studying shipping patterns. Also useful for anyone curious about what ships are passing through a particular stretch of water.\n\n### How to use it\n1. Use **search_vessels** with an MMSI number to track a specific ship, or pass a bounding box to see all vessels in an area\n2. Use **vessel_details** to get the ship's static profile — name, type, flag, and dimensions\n3. Use **monitor_area** for a comprehensive traffic report on a port or channel\n4. Use **safety_alerts** to check for active distress signals or hazard broadcasts\n5. Use **visualize_area** to generate a visual map of vessel positions\n\n### Getting started\nConnect your AISStream account to enable live data. Common bounding boxes: English Channel [49.5,-5.5]-[51.5,2.0], Singapore Strait [1.1,103.5]-[1.5,104.2], Port of Rotterdam [51.85,3.9]-[52.0,4.2].","version":"0.03","categories":["data"],"currency":"USD","skills":[{"name":"search_vessels","displayName":"Search Vessels","description":"Find vessels by MMSI or bounding box. Returns latest position, speed, course, heading, and navigation status. Collects live AIS position reports for ~15 seconds, deduplicated by vessel.","inputSchema":{"type":"object","properties":{"mmsi":{"type":"array","items":{"type":"string"},"description":"MMSI numbers to track (9-digit Maritime Mobile Service Identity). Maximum 50 vessels."},"lat_min":{"type":"number","description":"Southern boundary latitude (-90 to 90). Required if no MMSI provided."},"lon_min":{"type":"number","description":"Western boundary longitude (-180 to 180). Required if no MMSI provided."},"lat_max":{"type":"number","description":"Northern boundary latitude (-90 to 90). Required if no MMSI provided."},"lon_max":{"type":"number","description":"Eastern boundary longitude (-180 to 180). Required if no MMSI provided."},"duration":{"type":"number","description":"Collection duration in seconds (1-30, default 15). Longer durations find more vessels in busy areas.","default":15}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Track a specific vessel by MMSI","input":{"mmsi":["259000420"]}},{"description":"Find all vessels in the English Channel","input":{"lat_min":49.5,"lon_min":-5.5,"lat_max":51.5,"lon_max":2,"duration":20}},{"description":"Track multiple vessels simultaneously","input":{"mmsi":["368207620","367719770"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"vessels":{"type":"array","description":"Unique vessels with mmsi, name, latitude, longitude, speed_knots, course, heading, nav_status, timestamp"},"vessel_count":{"type":"number","description":"Number of unique vessels found"},"messages_received":{"type":"number","description":"Total AIS messages collected"},"collection_seconds":{"type":"number","description":"Duration of data collection"}}},"returns":"Real-time vessel positions with speed, course, heading, and navigation status"},{"name":"vessel_details","displayName":"Vessel Details","description":"Get vessel specs: name, call sign, IMO, ship type, dimensions, destination, ETA, draught. Listens for static broadcasts (~6 min intervals) so takes longer than position lookups. Also captures position data.","inputSchema":{"type":"object","properties":{"mmsi":{"type":"array","items":{"type":"string"},"description":"MMSI numbers to look up (9-digit Maritime Mobile Service Identity). Maximum 50 vessels."},"duration":{"type":"number","description":"Collection duration in seconds (10-120, default 45). Longer durations increase the chance of receiving static data.","default":45}},"required":["mmsi"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"io"}},"examples":[{"description":"Get details for a single vessel","input":{"mmsi":["259000420"]}},{"description":"Look up multiple vessels with extended listening","input":{"mmsi":["368207620","367719770"],"duration":90}}],"pricing":"free","outputSchema":{"type":"object","properties":{"vessels":{"type":"array","description":"Vessel profiles with name, call_sign, imo_number, ship_type, dimensions, destination, eta, draught, position"},"vessel_count":{"type":"number","description":"Number of vessels with data received"},"not_found":{"type":"array","description":"MMSIs with no data — vessel may be out of range or AIS off"},"messages_received":{"type":"number","description":"Total AIS messages collected"}}},"returns":"Vessel profiles with name, type, dimensions, destination, ETA, and current position"},{"name":"monitor_area","displayName":"Monitor Area","description":"Comprehensive traffic report for a geographic area. Collects all AIS message types and aggregates into a summary with vessel counts, moving vs stationary breakdown, vessel types, and safety alerts.","inputSchema":{"type":"object","properties":{"lat_min":{"type":"number","description":"Southern boundary latitude (-90 to 90)"},"lon_min":{"type":"number","description":"Western boundary longitude (-180 to 180)"},"lat_max":{"type":"number","description":"Northern boundary latitude (-90 to 90)"},"lon_max":{"type":"number","description":"Eastern boundary longitude (-180 to 180)"},"duration":{"type":"number","description":"Collection duration in seconds (10-180, default 60). Longer durations capture more vessels and patterns.","default":60}},"required":["lat_min","lon_min","lat_max","lon_max"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Monitor the English Channel","input":{"lat_min":49.5,"lon_min":-5.5,"lat_max":51.5,"lon_max":2}},{"description":"Monitor Singapore Strait for 2 minutes","input":{"lat_min":1.1,"lon_min":103.5,"lat_max":1.5,"lon_max":104.2,"duration":120}}],"pricing":"free","outputSchema":{"type":"object","properties":{"summary":{"type":"object","description":"Traffic stats: total_vessels, moving_vessels, stationary_vessels, total_messages, safety_alerts, message_types"},"bounding_box":{"type":"object","description":"Monitored area coordinates"},"vessels":{"type":"array","description":"All vessels with position, speed, course, type, destination, message_count, last_seen"},"safety_messages":{"type":"array","description":"Safety broadcast messages detected in the area"}}},"returns":"Area traffic report with vessel positions, movement statistics, and safety alerts"},{"name":"safety_alerts","displayName":"Safety Alerts","description":"Listen for safety broadcasts in a geographic area: collision warnings, weather advisories, distress signals, and navigational warnings. Captures broadcast and addressed messages. Useful for risk assessment.","inputSchema":{"type":"object","properties":{"lat_min":{"type":"number","description":"Southern boundary latitude (-90 to 90)"},"lon_min":{"type":"number","description":"Western boundary longitude (-180 to 180)"},"lat_max":{"type":"number","description":"Northern boundary latitude (-90 to 90)"},"lon_max":{"type":"number","description":"Eastern boundary longitude (-180 to 180)"},"duration":{"type":"number","description":"Collection duration in seconds (10-180, default 60). Safety messages are infrequent — longer durations catch more.","default":60}},"required":["lat_min","lon_min","lat_max","lon_max"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Check for safety alerts in the Strait of Hormuz","input":{"lat_min":25.5,"lon_min":55.5,"lat_max":27,"lon_max":57}},{"description":"Monitor safety broadcasts in the North Sea","input":{"lat_min":51,"lon_min":-2,"lat_max":56,"lon_max":8,"duration":120}}],"pricing":"free","outputSchema":{"type":"object","properties":{"alerts":{"type":"array","description":"Safety alerts with mmsi, vessel_name, type (broadcast/addressed), text, position, timestamp"},"alert_count":{"type":"number","description":"Number of safety alerts received"},"messages_received":{"type":"number","description":"Total AIS messages collected"},"bounding_box":{"type":"object","description":"Monitored area coordinates"}}},"returns":"Maritime safety messages with alert text, source vessel, position, and timestamp"},{"name":"navigation_aids","displayName":"Navigation Aids","description":"Find buoys, beacons, lighthouses, and other navigation aids (AtoN) in a geographic area. Returns type, position, dimensions, virtual/physical status. Flags off-position aids for safe navigation.","inputSchema":{"type":"object","properties":{"lat_min":{"type":"number","description":"Southern boundary latitude (-90 to 90)"},"lon_min":{"type":"number","description":"Western boundary longitude (-180 to 180)"},"lat_max":{"type":"number","description":"Northern boundary latitude (-90 to 90)"},"lon_max":{"type":"number","description":"Eastern boundary longitude (-180 to 180)"},"duration":{"type":"number","description":"Collection duration in seconds (10-120, default 30). AtoN stations broadcast at regular intervals.","default":30}},"required":["lat_min","lon_min","lat_max","lon_max"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Find navigation aids near Port of Rotterdam","input":{"lat_min":51.85,"lon_min":3.9,"lat_max":52,"lon_max":4.2}},{"description":"Scan for buoys in the Panama Canal approach","input":{"lat_min":8.8,"lon_min":-79.9,"lat_max":9.4,"lon_max":-79.5,"duration":60}}],"pricing":"free","outputSchema":{"type":"object","properties":{"navigation_aids":{"type":"array","description":"Navigation aids with mmsi, name, type, position, is_virtual, off_position, dimensions"},"aid_count":{"type":"number","description":"Number of unique navigation aids found"},"off_position_count":{"type":"number","description":"Number of aids flagged as off-position"},"off_position_aids":{"type":"array","description":"Aids that are off their charted position (safety concern)"},"bounding_box":{"type":"object","description":"Scanned area coordinates"}}},"returns":"Navigation aids inventory with type, position, virtual/physical status, and off-position alerts"},{"name":"visualize_area","displayName":"Visualize Area","description":"Generate a bird's-eye satellite or radar-style image of live vessel positions in a geographic area. Collects AIS data, categorizes by status, then produces an AI visualization with vessel markers.","inputSchema":{"type":"object","properties":{"lat_min":{"type":"number","description":"Southern boundary latitude (-90 to 90)"},"lon_min":{"type":"number","description":"Western boundary longitude (-180 to 180)"},"lat_max":{"type":"number","description":"Northern boundary latitude (-90 to 90)"},"lon_max":{"type":"number","description":"Eastern boundary longitude (-180 to 180)"},"duration":{"type":"number","description":"AIS collection duration in seconds (5-30, default 15). Longer durations find more vessels.","default":15},"style":{"type":"string","enum":["satellite","radar"],"description":"Visual style: \"satellite\" for photorealistic overhead view with city lights, \"radar\" for military CRT radar display aesthetic. Default satellite.","default":"satellite"}},"required":["lat_min","lon_min","lat_max","lon_max"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Satellite view of vessels in the Port of Rotterdam","input":{"lat_min":51.85,"lon_min":3.9,"lat_max":52,"lon_max":4.2}},{"description":"Radar-style view of the English Channel","input":{"lat_min":49.5,"lon_min":-5.5,"lat_max":51.5,"lon_max":2,"style":"radar"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"URL of the generated visualization image"},"image_page":{"type":"string","description":"Shareable page URL for the image"},"vessels":{"type":"array","description":"Vessels plotted with name, latitude, longitude, speed_knots, status"},"vessel_count":{"type":"number","description":"Number of vessels in the visualization"},"area":{"type":"string","description":"Human-readable area name"},"breakdown":{"type":"object","description":"Vessel count by status: moving, anchored, moored, other"}}},"returns":"AI-generated bird's-eye map image with vessel positions, plus structured vessel data"}],"workflow":["search_vessels","search_vessels → vessel_details","monitor_area","safety_alerts","navigation_aids","search_vessels → visualize_area","visualize_area"],"icon":"/icons/vessel-tracker.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with search_vessels, vessel_details, and monitor_area"]},{"version":"0.02","date":"2026-03-24","changes":["Added safety_alerts and navigation_aids skills, improved descriptions per building-tools guide"]},{"version":"0.03","date":"2026-03-24","changes":["Added visualize_area skill — generates AI bird's-eye satellite/radar images from live vessel positions via generate-image composition"]}],"premadePrompt":"Where is [vessel name or MMSI] right now, and how fast is it going? Also show me all the ships currently in [area, e.g. the English Channel or Port of Rotterdam].","requirements":[{"name":"aisstream","type":"secret","displayName":"AISStream API Key","description":"API key for AISStream.io — register at aisstream.io/authenticate with a GitHub account to get one","acquireUrl":"https://aisstream.io/authenticate","envFallback":"AISSTREAM_API_KEY"}],"credentials":[{"name":"aisstream","type":"secret","displayName":"AISStream API Key","description":"API key for AISStream.io — register at aisstream.io/authenticate with a GitHub account to get one","acquireUrl":"https://aisstream.io/authenticate","envFallback":"AISSTREAM_API_KEY"}]},{"name":"package-tracker","displayName":"Package Tracker","subtitle":"Track parcels across 345+ carriers","about":"**Package Tracker** monitors shipments across 345+ carriers worldwide including UPS, FedEx, DHL, USPS, Royal Mail, Australia Post, and hundreds more. Register a tracking number once and get the full delivery history, current status, estimated delivery date, and the ability to query the absolute latest carrier update in real time.\n\nThe tool auto-detects carriers from the tracking number format, so you rarely need to specify one manually. It covers international shipments, cross-border logistics, and domestic carriers in dozens of countries. You can track individual packages, filter and list all your tracked shipments by status, and remove packages you no longer need to monitor.\n\n### What you can do\n- Register any tracking number and get current status plus full event history\n- View estimated delivery dates alongside each checkpoint timestamp and location\n- Force a real-time query directly to the carrier for the most current status\n- List all tracked packages with optional filters by status or date range\n- Remove or permanently delete packages from your tracking list\n- Check your remaining tracking quota\n\n### Who it's for\nE-commerce businesses monitoring customer orders, operations teams managing logistics, and individuals waiting on important deliveries. Useful for anyone who needs to track multiple shipments across different carriers from a single interface.\n\n### How to use it\n1. Use **track_package** with any tracking number — auto-detection handles carrier identification\n2. Use **tracking_details** for a deeper breakdown of events from a previously registered number\n3. Use **list_packages** to see all tracked shipments and filter by status (InTransit, Delivered, etc.)\n4. Use **realtime_track** when you need the absolute latest status bypassing cached data\n5. Use **stop_tracking** to remove a package when it's no longer needed\n\n### Getting started\nConnect your tracking account to enable package monitoring across 345+ carriers.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"track_package","displayName":"Track Package","description":"Register a tracking number and immediately get its current delivery status, event history, and estimated delivery. Automatically detects the carrier from the tracking number format. This is the primary entry point for tracking any package.","inputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The package tracking number (e.g. 1Z999AA10123456784 for UPS, 9400111899223456789012 for USPS)"},"carrier":{"type":"number","description":"Optional numeric carrier code. Usually not needed — auto-detection handles most tracking numbers."}},"required":["tracking_number"]},"annotations":{"openWorldHint":true},"examples":[{"description":"Track a UPS package","input":{"tracking_number":"1Z999AA10123456784"}},{"description":"Track a USPS package","input":{"tracking_number":"9400111899223456789012"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The tracking number"},"status":{"type":"string","description":"Current delivery status (NotFound, InTransit, Delivered, etc.)"},"sub_status":{"type":"string","description":"Detailed sub-status"},"latest_event":{"type":"object","description":"Most recent tracking event with time, description, location"},"events":{"type":"array","description":"Full event history"}}},"returns":"Current delivery status with event history, shipping origin/destination, and estimated delivery date"},{"name":"tracking_details","displayName":"Tracking Details","description":"Get detailed tracking information for an already-registered tracking number. Returns the full event history with timestamps, locations, and carrier-level breakdowns. Use this for deeper inspection of a tracked package.","inputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The package tracking number to look up"},"carrier":{"type":"number","description":"Optional numeric carrier code"}},"required":["tracking_number"]},"annotations":{"openWorldHint":true},"examples":[{"description":"Get detailed tracking for a FedEx package","input":{"tracking_number":"794644790138"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The tracking number"},"status":{"type":"string","description":"Current delivery status"},"providers":{"type":"array","description":"Carrier-level event breakdowns with full histories"},"total_events":{"type":"number","description":"Total number of tracking events"}}},"returns":"Detailed tracking data with carrier-level event breakdown, shipping info, and time metrics"},{"name":"list_packages","displayName":"List Packages","description":"List all tracked packages with optional filters by status, date range, or tracking number search. Returns paginated results showing the latest event for each package.","inputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"Filter by tracking number (comma-separated for multiple)"},"package_status":{"type":"string","description":"Filter by package status (e.g. NotFound, InTransit, Delivered)"},"tracking_status":{"type":"string","description":"Filter by tracking status"},"register_date_from":{"type":"string","description":"Filter by registration date (from), format YYYY-MM-DD"},"register_date_to":{"type":"string","description":"Filter by registration date (to), format YYYY-MM-DD"},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}},"required":[]},"annotations":{"openWorldHint":true},"examples":[{"description":"List all tracked packages","input":{}},{"description":"List packages that are in transit","input":{"package_status":"InTransit"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"packages":{"type":"array","description":"List of tracked packages with latest event info"},"count":{"type":"number","description":"Number of packages on this page"},"total":{"type":"number","description":"Total number of tracked packages matching filters"},"has_more":{"type":"boolean","description":"Whether more pages are available"}}},"returns":"Paginated list of tracked packages with status and latest event for each"},{"name":"stop_tracking","displayName":"Stop Tracking","description":"Stop tracking a package or permanently delete it from monitoring. Stopped packages can be resumed once. Deleted packages are permanently removed.","inputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The tracking number to stop monitoring"},"carrier":{"type":"number","description":"Optional numeric carrier code"},"permanent":{"type":"boolean","description":"If true, permanently delete the tracking (cannot be undone). Default false (just stops tracking).","default":false}},"required":["tracking_number"]},"annotations":{"openWorldHint":true},"examples":[{"description":"Stop tracking a package","input":{"tracking_number":"1Z999AA10123456784"}},{"description":"Permanently delete a tracked package","input":{"tracking_number":"1Z999AA10123456784","permanent":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The tracking number"},"action":{"type":"string","description":"Action taken: stopped or deleted"},"message":{"type":"string","description":"Confirmation message"}}},"returns":"Confirmation that tracking was stopped or deleted"},{"name":"check_quota","displayName":"Check Quota","description":"Check remaining tracking quota including total capacity, usage, and daily limits. Useful for monitoring how many more packages can be registered for tracking.","inputSchema":{"type":"object","properties":{},"required":[]},"annotations":{"openWorldHint":true},"examples":[{"description":"How many tracking slots do I have left?","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"quota_total":{"type":"number","description":"Total tracking quota"},"quota_used":{"type":"number","description":"Quota used so far"},"quota_remaining":{"type":"number","description":"Remaining quota"},"today_used":{"type":"number","description":"Tracking numbers registered today"},"max_daily":{"type":"number","description":"Maximum registrations per day"},"usage_percent":{"type":"number","description":"Percentage of total quota used"}}},"returns":"Quota breakdown with total, used, remaining, daily usage, and percentage used"},{"name":"realtime_track","displayName":"Real-time Track","description":"Force a real-time query directly to the carrier for the absolute latest tracking status. Bypasses cached data for immediate updates. Use when you need the most current delivery status.","inputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The package tracking number to query in real-time"},"carrier":{"type":"number","description":"Optional numeric carrier code"}},"required":["tracking_number"]},"annotations":{"openWorldHint":true},"examples":[{"description":"Get the absolute latest status for a DHL package","input":{"tracking_number":"1234567890"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"tracking_number":{"type":"string","description":"The tracking number"},"query_type":{"type":"string","description":"Always \"realtime\""},"status":{"type":"string","description":"Current delivery status from real-time carrier query"},"events":{"type":"array","description":"Full event history from real-time query"}}},"returns":"Real-time tracking status directly from the carrier with full event history"}],"workflow":["track_package","tracking_details","list_packages","realtime_track","check_quota","stop_tracking"],"icon":"/icons/package-tracker.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with 6 skills: track_package, tracking_details, list_packages, stop_tracking, check_quota, realtime_track"]},{"version":"0.02","date":"2026-04-06","changes":["track_package: newly registered packages with no carrier scans yet now return a clear status instead of an error","tracking_details: unregistered tracking numbers now suggest using track_package instead of returning an error","stop_tracking: attempting to stop a number that is not being tracked now returns a clear message instead of an error","realtime_track: fixed crash when carrier returns an unexpected empty response"]}],"premadePrompt":"Track my package with tracking number [tracking number] and tell me where it is right now, the delivery history, and the estimated delivery date.","requirements":[{"name":"seventeen_track_api_key","type":"secret","displayName":"17TRACK API Key","description":"17TRACK package tracking API key for monitoring shipments across 345+ carriers worldwide","envFallback":"SEVENTEEN_TRACK_API_KEY"}],"credentials":[{"name":"seventeen_track_api_key","type":"secret","displayName":"17TRACK API Key","description":"17TRACK package tracking API key for monitoring shipments across 345+ carriers worldwide","envFallback":"SEVENTEEN_TRACK_API_KEY"}]},{"name":"f1","displayName":"F1 Data","subtitle":"Seasons, schedules, results & standings","about":"**F1 Data** covers the complete Formula 1 championship record — every season, every driver, every team, every circuit, every race result, and every standings table. Whether you're building a sports dashboard, writing editorial copy, or just settling an argument about last Sunday's race, this is your source.\n\nIt covers the full public championship surface: current-season live data alongside decades of history. You can look up a specific driver's career, check qualifying results for any grand prix, pull the constructors standings, or get the full race calendar for any year. Session-level results span practice, qualifying, sprint, and race sessions.\n\n### What you can do\n- **seasons** — list Formula 1 championship seasons and history\n- **drivers** — search drivers, view profiles, and get current or season-scoped lists\n- **teams** — look up constructor profiles and active team rosters\n- **circuits** — browse race circuits with location details and race history\n- **races** — get race calendars, next race, last race, or a specific round\n- **results** — session results for any race across FP1, FP2, FP3, qualifying, sprint, and race sessions\n- **standings** — drivers and constructors championship tables for any season\n\n### Who it's for\nSports journalists, app developers, fantasy F1 players, and F1 fans who want accurate data rather than relying on memory or manual lookups.\n\n### How to use it\n1. Call **standings** to get the current championship tables for drivers or constructors.\n2. Call **races** with a season year to see the full calendar or find the most recent race.\n3. Call **results** with the season and round number to pull the full race or qualifying results.\n\n### Getting started\nCall **standings** with type \"drivers\" to see the current championship standings — no setup required.","version":"0.01","categories":["data","productivity"],"currency":"USD","skills":[{"name":"seasons","displayName":"Seasons","description":"List Formula 1 championship seasons so you can browse the available historical range and season metadata.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}}},"annotations":{},"examples":[{"description":"List the five most recent Formula 1 seasons","input":{"limit":5}},{"description":"Page through older Formula 1 championships","input":{"limit":10,"offset":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"seasons":{"type":"array","description":"Championship seasons with IDs, names, years, and reference links."}}},"returns":"Season records with championship IDs, years, names, and reference URLs"},{"name":"drivers","displayName":"Drivers","description":"List, search, or inspect Formula 1 drivers across all-time, season-specific, or current-grid views.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","search","profile"],"description":"Choose to list drivers, search all-time drivers, or fetch one driver profile."},"scope":{"type":"string","enum":["all_time","season","current"],"default":"all_time","description":"Use all_time, a specific season, or the current season."},"season":{"type":"number","description":"Season year when you want a specific championship, for example 2025."},"driver_id":{"type":"string","description":"Driver ID like \"max_verstappen\" when action is profile."},"query":{"type":"string","description":"Search term when action is search, matching driver name or surname."},"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}},"required":["action"]},"annotations":{},"examples":[{"description":"List the current Formula 1 grid","input":{"action":"list","scope":"current"}},{"description":"Search all-time drivers for Verstappen","input":{"action":"search","query":"verstappen"}},{"description":"Get Lando Norris race-by-race results for 2025","input":{"action":"profile","scope":"season","season":2025,"driver_id":"norris"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"action":{"type":"string","description":"The driver action that was executed."},"scope":{"type":"string","description":"The scope used for the driver lookup."},"season":{"type":"number","description":"Season year attached to this response when available."},"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"query":{"type":"string","description":"Search query echoed back for search mode."},"driver_id":{"type":"string","description":"Driver ID echoed back for profile mode."},"drivers":{"type":"array","description":"Driver records returned by list or search mode."},"driver":{"type":"object","description":"Single driver profile returned by profile mode."},"team":{"type":"object","description":"Driver team data returned by season or current profile mode."},"results":{"type":"array","description":"Per-race driver results returned by season or current profile mode."}}},"returns":"Driver lists, search results, or one driver profile with team and season results"},{"name":"teams","displayName":"Teams","description":"List, search, or inspect Formula 1 teams, including season-specific rosters for current and historical championships.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","search","profile","drivers"],"description":"Choose to list teams, search teams, inspect one team, or fetch its drivers."},"scope":{"type":"string","enum":["all_time","season","current"],"default":"all_time","description":"Use all_time, a specific season, or the current season."},"season":{"type":"number","description":"Season year when you want a specific championship, for example 2025."},"team_id":{"type":"string","description":"Team ID like \"red_bull\" or \"ferrari\" for profile or drivers mode."},"query":{"type":"string","description":"Search term when action is search, matching the team name."},"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}},"required":["action"]},"annotations":{},"examples":[{"description":"List teams on the current Formula 1 grid","input":{"action":"list","scope":"current"}},{"description":"Search all-time teams for Red Bull","input":{"action":"search","query":"red bull"}},{"description":"Show the current Mercedes driver lineup","input":{"action":"drivers","scope":"current","team_id":"mercedes"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"action":{"type":"string","description":"The team action that was executed."},"scope":{"type":"string","description":"The scope used for the team lookup."},"season":{"type":"number","description":"Season year attached to this response when available."},"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"query":{"type":"string","description":"Search query echoed back for search mode."},"team_id":{"type":"string","description":"Team ID echoed back for profile or drivers mode."},"teams":{"type":"array","description":"Team records returned by list or search mode."},"team":{"type":"object","description":"Single team profile returned by profile or drivers mode."},"drivers":{"type":"array","description":"Drivers attached to a season or current team roster."}}},"returns":"Team lists, search results, profiles, or team rosters for the selected season"},{"name":"circuits","displayName":"Circuits","description":"List, search, or inspect Formula 1 circuits, including venue details, lap records, and location metadata.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","search","profile"],"description":"Choose to list circuits, search circuits, or fetch one circuit profile."},"circuit_id":{"type":"string","description":"Circuit ID like \"monza\" or \"suzuka\" when action is profile."},"query":{"type":"string","description":"Search term when action is search, matching circuit, country, or city."},"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}},"required":["action"]},"annotations":{},"examples":[{"description":"Search Formula 1 circuits for Suzuka","input":{"action":"search","query":"suzuka"}},{"description":"Get the Monza circuit profile","input":{"action":"profile","circuit_id":"monza"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"action":{"type":"string","description":"The circuit action that was executed."},"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"query":{"type":"string","description":"Search query echoed back for search mode."},"circuit_id":{"type":"string","description":"Circuit ID echoed back for profile mode."},"circuits":{"type":"array","description":"Circuit records returned by list or search mode."},"circuit":{"type":"object","description":"Single circuit profile returned by profile mode."}}},"returns":"Circuit lists, search matches, or one circuit profile with venue details"},{"name":"races","displayName":"Races","description":"Browse a season calendar, inspect a specific round, or fetch the current season’s last and next Formula 1 race.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["season","round","last","next"],"description":"Choose a season calendar, one round, the latest race, or the next race."},"season":{"type":"number","description":"Season year for season or round lookups. Omit to use the current season."},"round":{"type":"number","description":"Race round number when action is round."},"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}},"required":["action"]},"annotations":{},"examples":[{"description":"List the current Formula 1 season calendar","input":{"action":"season"}},{"description":"Get round 1 details from the 2025 season","input":{"action":"round","season":2025,"round":1}},{"description":"Show the next scheduled Formula 1 race","input":{"action":"next"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"action":{"type":"string","description":"The race action that was executed."},"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"season":{"type":"number","description":"Season year attached to this response when available."},"round":{"type":"number","description":"Round number attached to the response when available."},"requested_round":{"type":"number","description":"Requested round number echoed back for round mode."},"races":{"type":"array","description":"Race calendar entries returned by season mode."},"race":{"type":"object","description":"Single race record returned by round, last, or next mode."}}},"returns":"Season calendars or one race record with schedule, circuit, and winner data"},{"name":"results","displayName":"Results","description":"Fetch Formula 1 session results for practice, qualifying, race, sprint qualifying, or sprint race sessions.","inputSchema":{"type":"object","properties":{"lookup":{"type":"string","enum":["round","latest"],"description":"Use a specific round or the latest completed session in the current season."},"session":{"type":"string","enum":["fp1","fp2","fp3","qualy","race","sprint_qualy","sprint_race"],"description":"Session type to fetch results for."},"season":{"type":"number","description":"Season year for round lookups. Omit to use the current season."},"round":{"type":"number","description":"Race round number when lookup is round."},"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}},"required":["lookup","session"]},"annotations":{},"examples":[{"description":"Show the latest completed Formula 1 race results","input":{"lookup":"latest","session":"race"}},{"description":"Get sprint qualifying results for round 2 in 2026","input":{"lookup":"round","season":2026,"round":2,"session":"sprint_qualy"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"lookup":{"type":"string","description":"The result lookup mode that was executed."},"session":{"type":"string","description":"Session type that was requested."},"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"season":{"type":"number","description":"Season year attached to this response when available."},"round":{"type":"number","description":"Round number attached to the response when available."},"race":{"type":"object","description":"Race metadata for the requested session, including timing and circuit."},"entries":{"type":"array","description":"Session result entries for the requested session."}}},"returns":"Race metadata plus the requested session’s result entries"},{"name":"standings","displayName":"Standings","description":"Get drivers or constructors championship standings for the current Formula 1 season or any historical season.","inputSchema":{"type":"object","properties":{"championship":{"type":"string","enum":["drivers","constructors"],"description":"Choose the drivers or constructors championship table."},"season":{"type":"number","description":"Season year to inspect. Omit to use the current season."},"limit":{"type":"number","minimum":1,"maximum":100,"default":30,"description":"Maximum records to return when the endpoint supports pagination."},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset when the endpoint supports pagination."}},"required":["championship"]},"annotations":{},"examples":[{"description":"Get the current Formula 1 drivers championship table","input":{"championship":"drivers"}},{"description":"Get the 2025 Formula 1 constructors standings","input":{"championship":"constructors","season":2025}}],"pricing":"free","outputSchema":{"type":"object","properties":{"championship":{"type":"string","description":"Championship table type returned by the lookup."},"source_url":{"type":"string","description":"Upstream URL used for this response."},"total":{"type":"number","description":"Total records returned by the API."},"limit":{"type":"number","description":"Pagination limit echoed by the API when available."},"offset":{"type":"number","description":"Pagination offset echoed by the API when available."},"season":{"type":"number","description":"Season year attached to this response when available."},"standings":{"type":"array","description":"Driver or constructor standings sorted by championship position."}}},"returns":"Drivers or constructors standings sorted by position and points"}],"homepage":"https://toolrouter.com/tools/f1","icon":"/icons/f1.webp","changelog":[{"version":"0.01","date":"2026-03-24","changes":["Initial release with seven skills covering seasons, drivers, teams, circuits, races, results, and standings"]}],"premadePrompt":"Show me the current Formula 1 drivers championship standings and the results from the most recent race."},{"name":"makeup","displayName":"AI Makeup","subtitle":"Apply curated makeup looks to headshots","about":"**AI Makeup** applies curated beauty looks to headshot photos using AI — transforming a plain photo into a styled portrait with professional makeup in seconds. Eight distinct looks cover everything from dewy and minimal to bold and editorial, and the original face and expression are preserved throughout.\n\nGetting a professional makeup shot usually means booking a makeup artist and photographer. This tool lets you try any look on any photo instantly, making it useful for content creation, profile photos, beauty comparisons, or just seeing what a look would look like on you before committing to it.\n\n### What you can do\n- **apply_makeup** — apply one of eight curated makeup styles to any headshot photo\n\n### Available styles\n- gradient_blush — soft diffused blush with a flushed natural finish\n- glass_skin — dewy, luminous skin with minimal product\n- rosewood_burgundy — deep berry lips and smoky eye\n- peach_blossom — warm peachy tones across eyes and cheeks\n- 90s_supermodel — defined brows, nude lips, and sculpted contour\n- 90s_grunge — dark eyes, matte skin, and grunge-era edge\n- k_drama — the clean, bright K-beauty look from Korean television\n- glazed_donut — viral glazed skin with high-shine highlight\n\n### Who it's for\nContent creators who want styled photos without a full production shoot. Beauty enthusiasts exploring looks before trying them. Social media managers producing consistent visual content at scale. Anyone who wants to see what a makeup trend looks like on their own face.\n\n### How to use it\n1. Find a clear headshot — any public image URL or one you've uploaded works\n2. Call **apply_makeup** with the image URL and your chosen style key\n3. Add custom_instructions if you want to tweak the result (e.g. \"darker lip color\", \"more shimmer on the eyelids\")\n4. The result comes back as a permanent image URL you can share or download\n\n### Getting started\nUse **apply_makeup** with a well-lit headshot facing the camera — the clearer the original, the better the result. You can also use personas from your file library as the source image.","version":"0.03","categories":["media","ai"],"currency":"USD","skills":[{"name":"apply_makeup","displayName":"Apply Makeup","description":"Apply a curated makeup style to a headshot photo. Downloads the image from the provided URL, applies the selected makeup look using Gemini 2.5 Pro, and returns the transformed image.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"image_data":{"type":"string","description":"Base64-encoded image data. Use instead of image_url when you have the image inline."},"style":{"type":"string","enum":["gradient_blush","glass_skin","rosewood_burgundy","peach_blossom","90s_supermodel","90s_grunge","k_drama","glazed_donut"],"description":"Makeup style to apply. Options: gradient_blush, glass_skin, rosewood_burgundy, peach_blossom, 90s_supermodel, 90s_grunge, k_drama, glazed_donut."},"custom_instructions":{"type":"string","description":"Optional extra instructions to append (e.g. \"darker lip color\", \"more shimmer\")."}},"required":["style"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Apply glazed donut makeup to a headshot","input":{"image_url":"https://placehold.co/800x800.png","style":"glazed_donut"}},{"description":"Apply K-drama makeup with extra shimmer","input":{"image_url":"https://placehold.co/800x800.png","style":"k_drama","custom_instructions":"Add extra shimmer on the eyelids"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Transformed image(s) with URL and dimensions","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"style":{"type":"string","description":"Makeup style that was applied"},"source_image":{"type":"string","description":"Original source image URL"},"model":{"type":"string","description":"Model used for the transformation"},"seed":{"type":"number","description":"Seed used for generation"},"request_id":{"type":"string","description":"Request ID for debugging"}}},"contentType":"image","returns":"Transformed headshot with the selected makeup style applied, delivered via the asset system with permanent URL and shareable download page"}],"workflow":["apply_makeup"],"icon":"/icons/makeup.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release — 8 curated makeup styles via Gemini 2.5 Pro (Nano Banana Pro)"]},{"version":"0.02","date":"2026-03-25","changes":["Accept base64 image data via image_data param (alternative to image_url)"]},{"version":"0.03","date":"2026-04-14","changes":["Accept personas from your file library"]}],"premadePrompt":"Apply a [makeup style] look to this photo: [image URL].","usesPersonas":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"photo-restore","displayName":"Photo Restore","subtitle":"Restore old, damaged, and faded photographs with AI","about":"**Photo Restore** brings damaged, faded, and aged photographs back to life. It removes scratches, tears, creases, and stains. It sharpens blurry details and enhances facial features. It fixes faded, yellowed, or discoloured areas. And for black-and-white or sepia photos, it adds historically accurate full colour. You can process a single photo or up to 10 at once in batch mode.\n\nThe restoration skill handles everything in one pass — physical damage, colour fading, and facial detail — with three intensity levels to match the severity of the damage. The colorize skill is purpose-built for converting monochrome photos to colour, with an era hint parameter that guides period-accurate colour choices. Both skills accept multiple images for batch workflows.\n\n### What you can do\n- Remove physical damage from photos — scratches, tears, creases, and stains\n- Enhance and sharpen facial details in old portraits\n- Fix faded, yellowed, and discoloured images\n- Convert black-and-white or sepia photos to full colour\n- Choose light, standard, or heavy restoration intensity\n- Output at 1K, 2K, or 4K resolution\n- Process up to 10 images in a single batch call\n\n### Who it's for\nFamilies digitising old photo albums, archivists preserving historical collections, genealogists restoring ancestor portraits, photographers handling client restoration requests, and anyone who has inherited damaged photographs they want to preserve.\n\n### How to use it\n1. Use **restore_photo** with an image URL to fix physical damage, fading, and faces in one pass\n2. Set enhancement_level to light for minor fixes, standard for typical old photos, or heavy for severely damaged images\n3. Use **colorize_photo** specifically for converting black-and-white or sepia photos to colour\n4. Pass an era_hint like \"1940s\" or \"Victorian\" for historically accurate colour palette choices\n5. Pass an array of URLs instead of a single URL to process up to 10 images at once\n\n### Getting started\nNo setup required — pass any publicly accessible image URL to start restoring.","version":"0.01","categories":["media"],"currency":"USD","skills":[{"name":"restore_photo","displayName":"Restore Photo","description":"Restore old, damaged, or degraded photographs. Fixes scratches, tears, stains, fading, blur, and enhances facial details.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"enhancement_level":{"type":"string","enum":["light","standard","heavy"],"description":"How aggressively to restore. \"light\" for minor fixes, \"standard\" for typical old photos, \"heavy\" for severely damaged images. Default: standard."},"fix_scratches":{"type":"boolean","description":"Remove scratches, tears, creases, and physical damage. Default: true."},"enhance_faces":{"type":"boolean","description":"Enhance and sharpen facial details. Default: true."},"fix_colors":{"type":"boolean","description":"Correct faded, yellowed, or discolored areas. Default: true."},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Output resolution. Higher resolution costs more. Default: 1K."}},"required":[]},"annotations":{},"examples":[{"description":"Restore a single old photo","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg"}},{"description":"Heavy restoration on a damaged photo at 2K","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg","enhancement_level":"heavy","resolution":"2K"}}],"pricing":"paid","returns":"Restored photo(s) with original and restored URLs, dimensions, and restoration details"},{"name":"colorize_photo","displayName":"Colorize Photo","description":"Convert black-and-white or sepia photographs to full color. Uses AI to infer historically and contextually accurate colors.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["natural","vivid"],"description":"Color style. \"natural\" for realistic muted tones, \"vivid\" for richer saturated colors. Default: natural."},"era_hint":{"type":"string","description":"Optional hint about the era (e.g. \"1940s\", \"Victorian\", \"1960s\") to guide period-appropriate colors."},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Output resolution. Default: 1K."}},"required":[]},"annotations":{},"examples":[{"description":"Colorize a black and white photo","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg"}},{"description":"Colorize with era context for accurate colors","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg","era_hint":"1860s","style":"natural"}}],"pricing":"paid","returns":"Colorized photo(s) with full color applied and output details"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/photo-restore.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with restore_photo and colorize_photo skills"]}],"premadePrompt":"Restore this old photo for me: [image URL]. It has scratches and fading — please clean it up and enhance the faces. Also colorize it if it's black and white.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"portrait-photo","displayName":"Portrait Photo","subtitle":"AI portrait photos from your selfies","about":"**Portrait Photo** generates a polished portrait from one or more reference photos of yourself. Upload a selfie or a few casual photos and describe the look you want — professional headshot, LinkedIn photo, cinematic editorial, warm outdoor portrait — and the AI produces a clean, high-quality result that preserves your likeness.\n\nThe more reference images you provide, the more accurate the likeness. A single good selfie works well for a professional headshot. Multiple reference angles improve consistency for creative styles. The style parameter accepts any description — you're not limited to presets — so you can ask for studio lighting with a plain background, golden hour outdoors, dramatic shadow work, or any specific aesthetic direction.\n\n### What you can do\n- Generate professional headshots from selfies or casual reference photos\n- Create LinkedIn, CV, or speaker bio portraits from existing photos\n- Produce creative editorial portraits in any described aesthetic\n- Use multiple reference photos to improve likeness accuracy\n- Choose aspect ratio — 3:4 portrait, 1:1 square, 16:9 widescreen, and more\n- Apply style references for consistent visual direction across multiple shoots\n\n### Who it's for\nProfessionals who need a quality headshot without a photography booking, content creators updating their profile photos, job seekers who want a polished LinkedIn image, speakers who need a bio photo, and anyone who wants a better portrait than a phone selfie.\n\n### How to use it\n1. Use **generate_portrait** with at least one reference image URL\n2. Describe your desired look in the style parameter — be specific for best results\n3. Provide 2-3 reference photos from different angles to improve likeness accuracy\n4. Choose the aspect_ratio that fits your use case — 3:4 for headshots, 1:1 for profile photos\n\n### Getting started\nNo setup required — pass any publicly accessible photo URLs to get started.","version":"0.03","categories":["media","ai"],"currency":"USD","skills":[{"name":"generate_portrait","displayName":"Generate Portrait","description":"Generate a portrait photo from one or more reference images. Specify a style or let it default to a clean, professional look.","inputSchema":{"type":"object","properties":{"reference_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","description":"Desired portrait style (e.g. \"professional headshot\", \"LinkedIn photo\", \"cinematic editorial\", \"warm casual outdoor\")."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Aspect ratio for the output. Defaults to 3:4 (portrait orientation)."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters passed directly to the inference API."}},"required":["reference_images"]},"annotations":{},"examples":[{"description":"Professional headshot from a single selfie","input":{"reference_images":["https://toolrouter.com/demo-ugc-skincare.webp"],"style":"professional corporate headshot, clean background, studio lighting"}},{"description":"Creative portrait from multiple reference photos","input":{"reference_images":["https://toolrouter.com/demo-ugc-skincare.webp","https://toolrouter.com/demo-ugc-skincare.webp"],"style":"cinematic editorial portrait, dramatic lighting, shallow depth of field"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated portrait image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"reference_count":{"type":"number","description":"Number of reference images used"},"model":{"type":"string","description":"Model display name used"},"model_key":{"type":"string","description":"Model registry key or endpoint ID"},"seed":{"type":"number","description":"Seed used for generation"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Portrait image URL, downloadable asset, model used, reference count, seed, and request metadata"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/portrait-photo.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release"]},{"version":"0.02","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across portrait shoots"]},{"version":"0.03","date":"2026-04-14","changes":["Accept personas from your file library"]}],"premadePrompt":"Generate a professional headshot for me using [photo URL or uploaded selfie]. I want a [style, e.g. LinkedIn headshot / creative editorial / warm casual] look.","usesPersonas":true,"usesStyleReferences":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"virtual-tryon","displayName":"Virtual Try-On","subtitle":"See yourself in any outfit","about":"**Virtual Try-On** lets you see exactly how a piece of clothing looks on a specific person before buying or producing anything. Upload a photo of a person and a photo of the garment — top, bottom, dress, or full outfit — and get a realistic image of them wearing it.\n\nThis is the fastest way to visualize outfit combinations, test clothing on different body types, or generate on-model product shots without a photo shoot. It uses multiple AI models so you can choose between the highest quality output and faster, cheaper previews depending on what you need.\n\n### What you can do\n- **try_on** — generate a realistic image of a person wearing a specific garment, with choice of AI model for different quality levels\n- **list_models** — browse available try-on models with quality and speed comparisons\n\n### Who it's for\nFashion brands generating on-model product imagery without a photoshoot. E-commerce teams testing how clothes look across different body types. Shoppers who want to see an item on themselves before purchasing. Stylists building lookbooks and outfit combinations digitally.\n\n### How to use it\n1. Use **list_models** to see quality vs. speed tradeoffs for each model\n2. Run **try_on** with a person photo URL and a garment photo URL\n3. For the best results, use a full-body or upper-body photo for the person and a flat-lay or mannequin shot for the garment\n4. Use the category field to specify the garment type if auto-detection needs help\n\n### Getting started\nHave two image URLs ready: one showing the person (upper or full body, clothing area clearly visible) and one showing the garment (flat-lay or on-mannequin works best). The default model auto-detects garment type and gives the best quality results.","version":"0.02","categories":["media"],"currency":"USD","skills":[{"name":"try_on","displayName":"Try On","description":"Upload a person photo and a garment photo to generate the person wearing that clothing. Works with tops, bottoms, dresses, and full outfits.","inputSchema":{"type":"object","properties":{"person_image":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"garment_image":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"model":{"type":"string","enum":["fashn","quick","kolors","leffa","catvton"],"description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"category":{"type":"string","enum":["tops","bottoms","one-pieces","auto"],"description":"Garment category. FASHN only. Default: auto (auto-detect)."},"mode":{"type":"string","enum":["performance","balanced","quality"],"description":"Quality vs speed tradeoff. FASHN only. Default: balanced."},"garment_photo_type":{"type":"string","enum":["auto","model","flat-lay"],"description":"Type of garment photo. FASHN only. Default: auto."},"num_samples":{"type":"number","description":"Number of result variations (1-4). FASHN only. Default: 1."},"preserve_pose":{"type":"boolean","description":"Preserve the person original pose. Quick model only. Default: true."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4"],"description":"Output aspect ratio. Quick model only. Default: 3:4."},"garment_type":{"type":"string","enum":["upper_body","lower_body","dresses"],"description":"Garment type. Leffa only. Required for Leffa. Default: upper_body."},"cloth_type":{"type":"string","enum":["upper","lower","overall","inner","outer"],"description":"Clothing type. CAT-VTON only. Default: upper."},"num_inference_steps":{"type":"number","description":"Number of inference steps (1-50). Leffa and CAT-VTON only. Higher = better quality, slower."},"guidance_scale":{"type":"number","description":"Guidance scale (0-20). Leffa and CAT-VTON only. Higher = stronger garment adherence."},"seed":{"type":"number","description":"Random seed for reproducible results."},"output_format":{"type":"string","enum":["png","jpeg"],"description":"Output image format. FASHN and Leffa only. Default: png."}},"required":["person_image","garment_image"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Try on a shirt","input":{"person_image":"https://toolrouter.com/demo-ugc-skincare.webp","garment_image":"https://toolrouter.com/demo-product-photo.webp"}},{"description":"Try on a dress with FASHN quality mode","input":{"person_image":"https://toolrouter.com/demo-ugc-skincare.webp","garment_image":"https://toolrouter.com/demo-product-photo.webp","category":"one-pieces","mode":"quality"}},{"description":"Quick budget try-on","input":{"person_image":"https://toolrouter.com/demo-ugc-skincare.webp","garment_image":"https://toolrouter.com/demo-product-photo.webp","model":"quick"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image":{"type":"object","description":"Result image of person wearing the garment","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}},"person_image":{"type":"string","description":"Original person image URL"},"garment_image":{"type":"string","description":"Original garment image URL"},"model":{"type":"string","description":"Model used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Image of the person wearing the garment, downloadable asset, and shareable page link"},{"name":"list_models","displayName":"List Models","description":"List all available virtual try-on models with pricing, quality details, supported garment categories, and licensing info.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"List all try-on models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available try-on models","items":{"type":"object","properties":{"key":{"type":"string","description":"Model key"},"display_name":{"type":"string","description":"Human-readable name"},"endpoint_id":{"type":"string","description":"Provider endpoint identifier"},"cost_per_generation":{"type":"number","description":"Cost in USD per generation"},"description":{"type":"string","description":"Model description"},"commercial":{"type":"boolean","description":"Whether commercially licensed"},"garment_categories":{"type":"array","description":"Supported garment types"},"is_default":{"type":"boolean","description":"Whether this is the default"}}}},"total":{"type":"number","description":"Total number of models"}}},"returns":"All available virtual try-on models with pricing, quality, categories, and licensing"}],"workflow":["try_on","list_models → try_on"],"icon":"/icons/virtual-tryon.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release: 5 try-on models (FASHN, Quick, Kolors, Leffa, CAT-VTON)"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, outfits, and products from your file library"]}],"premadePrompt":"Show me what I would look like wearing this outfit. Here is my photo: [person photo URL], and here is the clothing: [garment photo URL].","usesPersonas":true,"usesProducts":true,"usesOutfits":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"face-swap","displayName":"Face Swap","subtitle":"Swap faces between photos or onto scenes","about":"**Face Swap** places a face from one photo onto another image or a newly generated scene. Provide a face source and a target — either an existing photo or a text description — and get a photorealistic result in seconds.\n\nIt works in two modes: swap onto an existing image (the body, pose, and background are preserved, only the face changes) or generate a brand-new scene around the face using a text prompt. You can combine both — pass a target image and a prompt to guide how the swap is applied. Useful for marketing mockups, creative content, and visualizing how someone looks in different contexts.\n\n### What you can do\n- **swap_face** — swap a face from a source photo onto a target image or a generated scene described by a prompt\n\n### Who it's for\nMarketing teams creating personalized content, content creators experimenting with visual styles, and developers building photo editing or virtual try-on features.\n\n### How to use it\n1. Get a URL for the source photo containing the face you want to use.\n2. Call **swap_face** with face_image and either target_image (to swap onto an existing photo) or prompt (to generate a new scene).\n3. Optionally specify aspect_ratio and output_format. Use list_models to see available model options.\n4. Display the result inline with the returned image URL.\n\n### Getting started\nCall **swap_face** with a face_image URL and a target_image URL to see the swap result immediately.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"swap_face","displayName":"Swap Face","description":"Swap a face onto a target image or generate a new scene with the given face. Provide a face source and a target image or prompt.","inputSchema":{"type":"object","properties":{"face_image":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"target_image":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Scene to generate with the face (e.g. \"astronaut on the moon\"). Used alone or as guidance with target_image."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Aspect ratio for the output. Only used when generating from prompt (no target_image)."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters passed directly to the inference API."}},"required":["face_image"]},"annotations":{},"examples":[{"description":"Swap face onto another photo","input":{"face_image":"https://toolrouter.com/demo-ugc-skincare.webp","target_image":"https://toolrouter.com/demo-ugc-skincare.webp"}},{"description":"Generate a scene with a specific face","input":{"face_image":"https://toolrouter.com/demo-ugc-skincare.webp","prompt":"astronaut floating in space with Earth in the background, photorealistic"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s) with the swapped face","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"face_source":{"type":"string","description":"URL of the face source image"},"target_source":{"type":"string","description":"URL of the target image or \"generated from prompt\""},"model":{"type":"string","description":"Model display name used"},"model_key":{"type":"string","description":"Model registry key or endpoint ID"},"seed":{"type":"number","description":"Seed used for generation"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Result image URL, downloadable asset, face source, target source, model used, seed, and request metadata"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/face-swap.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas from your file library"]}],"premadePrompt":"Swap my face from [photo URL] onto this target image [photo URL]. Keep the original body and background.","usesPersonas":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"hairstyle-changer","displayName":"Hairstyle Changer","subtitle":"Try any hairstyle on your photo","about":"**Hairstyle Changer** lets you try any hairstyle on a photo without touching a pair of scissors. Upload a portrait and describe the cut, color, and style you want — the AI edits only the hair while keeping your face, identity, and background exactly as they are.\n\nIt works with natural language descriptions, so you don't need to know technical hairdressing terms. Say \"short blonde pixie cut\", \"long dark wavy hair with balayage highlights\", or \"buzz cut with a fade\" — and see it in seconds.\n\n### What you can do\n- **change_hairstyle** — describe any hairstyle in natural language and see it applied to your photo\n- **copy_hairstyle** — copy the exact hair shape and color from a reference photo onto your face\n- Combine a shape reference and a separate color reference for precise style copying\n- Works with any portrait where the face and hair are clearly visible\n\n### Who it's for\nAnyone considering a hair change who wants to see it before committing. Hairdressers showing clients options before a consultation. Content creators experimenting with looks for characters or personas.\n\n### How to use it\n1. Use **change_hairstyle** with your photo URL and a description of the desired style — be specific about length, texture, and color for best results\n2. Use **copy_hairstyle** if you have a reference photo of the exact hairstyle you want to replicate\n3. Optionally pass a separate color_reference_url to copy shape from one photo and color from another\n\n### Getting started\nWorks immediately with no setup — pass a portrait photo URL and a hairstyle description to get started.","version":"0.02","categories":["media"],"currency":"USD","skills":[{"name":"change_hairstyle","displayName":"Change Hairstyle","description":"Upload a person photo and describe the desired hairstyle. The AI edits only the hair while preserving face, identity, and background.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Description of the desired hairstyle. Be specific — e.g. \"short blonde pixie cut\", \"long dark wavy hair with bangs\", \"buzz cut with fade\"."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format. Default: png."},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["image_url","prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Change to a short pixie cut","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","prompt":"short blonde pixie cut"}},{"description":"Try long wavy hair with highlights","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","prompt":"long wavy dark brown hair with caramel balayage highlights"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image":{"type":"object","description":"Result image with the new hairstyle","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}},"source_image":{"type":"string","description":"Original person image URL"},"prompt":{"type":"string","description":"Hairstyle description used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Image of the person with the new hairstyle, downloadable asset, and shareable page link"},{"name":"copy_hairstyle","displayName":"Copy Hairstyle","description":"Copy a hairstyle from a reference photo onto your face. Provide your face photo and a reference photo showing the desired hair shape (and optionally a separate color reference).","inputSchema":{"type":"object","properties":{"face_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"shape_reference_url":{"type":"string","description":"URL of a photo showing the desired hair shape/style to copy."},"color_reference_url":{"type":"string","description":"URL of a photo showing the desired hair color. If omitted, uses the shape reference color."}},"required":["face_image_url","shape_reference_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Copy hairstyle from a celebrity photo","input":{"face_image_url":"https://toolrouter.com/demo-ugc-skincare.webp","shape_reference_url":"https://toolrouter.com/demo-ugc-skincare.webp"}},{"description":"Copy shape from one photo, color from another","input":{"face_image_url":"https://toolrouter.com/demo-ugc-skincare.webp","shape_reference_url":"https://toolrouter.com/demo-ugc-skincare.webp","color_reference_url":"https://toolrouter.com/demo-ugc-skincare.webp"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"image":{"type":"object","description":"Result image with the copied hairstyle","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}},"face_image":{"type":"string","description":"Original face image URL"},"shape_reference":{"type":"string","description":"Hair shape reference URL"},"color_reference":{"type":"string","description":"Hair color reference URL"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Image with the copied hairstyle applied, downloadable asset, and shareable page link"},{"name":"list_models","displayName":"List Models","description":"List available hairstyle editing models with pricing and capabilities.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"List hairstyle models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models","items":{"type":"object","properties":{"key":{"type":"string","description":"Model key"},"display_name":{"type":"string","description":"Human-readable name"},"endpoint_id":{"type":"string","description":"Provider endpoint identifier"},"cost_per_generation":{"type":"number","description":"Cost in USD"},"description":{"type":"string","description":"Model description"}}}},"total":{"type":"number","description":"Total number of models"}}},"returns":"Available hairstyle editing models with pricing and descriptions"}],"workflow":["change_hairstyle","copy_hairstyle"],"icon":"/icons/hairstyle-changer.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release: natural language hairstyle editing with Nano Banana 2"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas from your file library"]}],"premadePrompt":"Try a [hairstyle description, e.g. short blonde pixie cut] on my photo: [image URL]. Show me what I would look like with that style.","usesPersonas":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"defense-spending","displayName":"Defense Spending","subtitle":"Military spending, arms trade, bases & contracts — 200+ countries","about":"**Defense Spending** covers military expenditure, arms trade, defense contracts, military bases, and conflict displacement for 200+ countries — all from official sources including World Bank, SIPRI, UN Comtrade, CIA Factbook, USAspending, and OpenStreetMap.\n\nMilitary and defense data is scattered across a dozen different government and international organization portals. This tool aggregates 12 sources into 14 skills covering the full picture: from national spending trends and arms import/export flows to individual US and UK contract awards, EU arms embargoes, and UNHCR displacement numbers by conflict.\n\n### What you can do\n- **military_spending** — annual defense expenditure for any country in USD and as % of GDP, back to 1960\n- **compare_countries** — side-by-side military spending comparison between any two countries\n- **military_profile** — armed forces size, equipment, and capability from CIA Factbook\n- **arms_trade** — arms import and export data from UN Comtrade\n- **arms_transfers** — SIPRI TIV trend data for major arms transfers\n- **budget_authority** — US defense budget authority by program and year\n- **budget_breakdown** — detailed breakdown of US defense spending by category\n- **defense_outlays** — actual US defense spending outlays from Treasury\n- **defense_contracts** — US and UK contract awards by vendor and category\n- **top_contractors** — leading defense contractors by award value\n- **spending_by_region** — regional breakdown of US defense contract spending\n- **sanctions** — EU arms embargo status for any country\n- **military_bases** — military installation locations from OpenStreetMap\n- **displacement** — UNHCR conflict-related displacement figures by country\n\n### Who it's for\nDefense analysts, policy researchers, journalists, academics, and investors in the defense sector. Also useful for anyone tracking geopolitical risk or government procurement in the defense space.\n\n### How to use it\n1. Start with **military_spending** for a country's spending history and GDP share\n2. Use **compare_countries** to benchmark against peers\n3. For US budget detail, chain **budget_authority** → **budget_breakdown** → **defense_outlays**\n4. Use **defense_contracts** to find specific award activity and **top_contractors** for industry concentration","version":"0.04","categories":["data","finance"],"currency":"USD","skills":[{"name":"military_spending","displayName":"Military Spending","description":"Get annual military spending for any country. Returns expenditure in current USD, as percentage of GDP, and armed forces personnel. Covers 200+ countries from 1960 to present via World Bank/SIPRI data.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE', 'CN', 'RU', 'UA', 'FR')"},"years":{"type":"number","default":10,"description":"Number of most recent years to return (default: 10)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US military spending over 10 years","input":{"country":"US"}},{"description":"UK defense budget last 5 years","input":{"country":"GB","years":5}},{"description":"China military spending over 20 years","input":{"country":"CN","years":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country name"},"country_code":{"type":"string","description":"ISO country code"},"spending_usd":{"type":"array","description":"Annual military expenditure in current USD"},"spending_pct_gdp":{"type":"array","description":"Military expenditure as % of GDP"},"armed_forces":{"type":"array","description":"Armed forces personnel totals"}}},"returns":"Annual military spending (USD + % GDP) and armed forces personnel over the requested time period"},{"name":"compare_countries","displayName":"Compare Countries","description":"Compare military spending across multiple countries side by side. Returns the most recent data for each country ranked by spending. Supports any combination of 200+ countries.","inputSchema":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"},"description":"Array of ISO 3166-1 alpha-2 codes (e.g. ['US', 'CN', 'RU', 'GB', 'FR']). 2-20 countries."},"metric":{"type":"string","description":"Which metric to compare","enum":["spending_usd","pct_gdp","armed_forces"],"default":"spending_usd"}},"required":["countries"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Top 5 military spenders","input":{"countries":["US","CN","RU","IN","SA"]}},{"description":"NATO spending as % GDP","input":{"countries":["US","GB","FR","DE","IT","CA","PL","NO","GR","TR"],"metric":"pct_gdp"}},{"description":"Compare armed forces size","input":{"countries":["US","CN","IN","RU","KP"],"metric":"armed_forces"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"metric":{"type":"string","description":"Metric compared"},"comparison":{"type":"array","description":"Countries ranked by the selected metric"}}},"returns":"Ranked comparison of military spending across selected countries"},{"name":"arms_trade","displayName":"Arms Trade","description":"Get international arms trade data — who exports or imports weapons to/from whom. Returns bilateral trade partners and monetary values by weapon subcategory. Covers 50+ countries via UN Comtrade HS code 93 (arms and ammunition).","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code of the reporting country (e.g. 'US', 'RU', 'FR', 'CN')"},"year":{"type":"number","default":2023,"description":"Year to query (default: 2023). Data availability varies by country."},"flow":{"type":"string","enum":["exports","imports"],"default":"exports","description":"Trade direction: 'exports' (what they sell) or 'imports' (what they buy)"},"detailed":{"type":"boolean","default":false,"description":"If true, breaks down by weapon subcategory (military weapons, ammunition, parts, etc.)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US arms exports","input":{"country":"US"}},{"description":"Russian arms exports in 2022","input":{"country":"RU","year":2022}},{"description":"India arms imports with detail","input":{"country":"IN","flow":"imports","detailed":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country name"},"total_value_usd":{"type":"number","description":"Total arms trade value in USD"},"top_partners":{"type":"array","description":"Top trading partners ranked by value"}}},"returns":"Arms trade value with top partners and optional subcategory breakdown"},{"name":"military_profile","displayName":"Military Profile","description":"Get a comprehensive military profile for any country — forces structure, personnel strengths, equipment inventories, service age requirements, overseas deployments, and strategic notes. Data from the CIA World Factbook (archived Feb 2026). Covers 80+ countries.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'US', 'CN', 'RU', 'GB', 'IN', 'IL', 'UA')"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US military profile","input":{"country":"US"}},{"description":"China military profile","input":{"country":"CN"}},{"description":"Ukraine military profile","input":{"country":"UA"}},{"description":"Israel military profile","input":{"country":"IL"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country name"},"forces":{"type":"string","description":"Military branches and security forces"},"personnel":{"type":"string","description":"Active duty and reserve personnel numbers"},"equipment":{"type":"string","description":"Inventories and recent acquisitions"},"deployments":{"type":"string","description":"Overseas military deployments"}}},"returns":"Comprehensive military profile with forces, personnel, equipment, deployments, and strategic notes"},{"name":"budget_breakdown","displayName":"Budget Breakdown","description":"Get DoD budget broken down by military branch (Army, Navy, Air Force, etc.) and/or by industry sector (Aircraft Manufacturing, Shipbuilding, R&D, etc.). US only, from USAspending.gov.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Currently US only","enum":["US"]},"breakdown":{"type":"string","enum":["branch","industry","both"],"default":"both","description":"What to break down by: 'branch' (Army/Navy/Air Force), 'industry' (NAICS sectors), or 'both'"},"fiscal_year":{"type":"number","description":"Fiscal year to query (e.g. 2024). Default: all available."},"limit":{"type":"number","default":15,"description":"Number of items per breakdown category (default: 15, max: 30)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Full US DoD budget breakdown","input":{"country":"US"}},{"description":"US military branch spending in FY2024","input":{"country":"US","breakdown":"branch","fiscal_year":2024}},{"description":"Top 10 defense industries","input":{"country":"US","breakdown":"industry","limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"by_branch":{"type":"array","description":"Spending by military branch (Army, Navy, Air Force, etc.)"},"by_industry":{"type":"array","description":"Spending by industry sector (NAICS classification)"}}},"returns":"DoD spending breakdown by military branch and/or industry sector with amounts and percentages"},{"name":"sanctions","displayName":"Sanctions","description":"Search current EU sanctions regimes including arms embargoes, asset freezes, and travel bans. Covers 55+ regimes targeting countries, entities, and individuals. Data from the official EU Sanctions Map.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term to filter sanctions (e.g. 'Russia', 'Iran', 'arms', 'Syria', 'terrorism')"},"regime_type":{"type":"string","enum":["arms_embargo","asset_freeze","travel_ban"],"description":"Filter by sanctions type. Omit for all types."}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"All EU sanctions","input":{}},{"description":"Sanctions targeting Russia","input":{"query":"Russia"}},{"description":"All arms embargoes","input":{"regime_type":"arms_embargo"}},{"description":"Iran-related sanctions","input":{"query":"Iran"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_regimes":{"type":"number","description":"Number of matching sanctions regimes"},"regimes":{"type":"array","description":"Sanctions details with legal acts and programme info"}}},"returns":"EU sanctions regimes with descriptions, legal acts, programme codes, and amendment history"},{"name":"defense_contracts","displayName":"Defense Contracts","description":"Search defense and military contracts. US: searches USAspending.gov for Department of Defense contracts with full award details. UK: searches Contracts Finder for Ministry of Defence procurement. Returns contract amounts, recipients, dates, and descriptions.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country to search contracts in: 'US' or 'GB'","enum":["US","GB"]},"keyword":{"type":"string","description":"Search keyword (e.g. 'F-35', 'cybersecurity', 'ammunition', 'shipbuilding')"},"contractor":{"type":"string","description":"Filter by contractor/recipient name (e.g. 'Lockheed Martin', 'BAE Systems'). US only."},"fiscal_year":{"type":"number","description":"Filter by fiscal year (e.g. 2024, 2025). US only."},"limit":{"type":"number","default":20,"description":"Maximum number of contracts to return (default: 20, max: 50)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US F-35 contracts","input":{"country":"US","keyword":"F-35"}},{"description":"UK MOD cybersecurity contracts","input":{"country":"GB","keyword":"cybersecurity"}},{"description":"Lockheed Martin contracts in FY2024","input":{"country":"US","contractor":"Lockheed Martin","fiscal_year":2024}},{"description":"US ammunition contracts","input":{"country":"US","keyword":"ammunition","limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country searched"},"total_results":{"type":"number","description":"Total matching contracts"},"contracts":{"type":"array","description":"Contract details with amounts, recipients, dates"}}},"returns":"Defense contract records with award amounts, contractor names, descriptions, and dates"},{"name":"top_contractors","displayName":"Top Contractors","description":"Get the top defense contractors by total award amount for a country. US: returns top recipients of Department of Defense spending from USAspending.gov with dollar amounts.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country to get top contractors for: 'US'","enum":["US"]},"fiscal_year":{"type":"number","description":"Fiscal year to query (e.g. 2024). Default: most recent."},"limit":{"type":"number","default":20,"description":"Number of top contractors to return (default: 20, max: 50)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Top US defense contractors","input":{"country":"US"}},{"description":"Top 10 US contractors in FY2024","input":{"country":"US","fiscal_year":2024,"limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country queried"},"fiscal_year":{"type":"string","description":"Fiscal year"},"contractors":{"type":"array","description":"Top contractors ranked by total award amount"}}},"returns":"Top defense contractors ranked by total award amount with dollar values"},{"name":"spending_by_region","displayName":"Spending by Region","description":"Get geographic breakdown of defense spending within a country. US: returns Department of Defense contract spending by state from USAspending.gov.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country to get regional breakdown for: 'US'","enum":["US"]},"fiscal_year":{"type":"number","description":"Fiscal year to query (e.g. 2024). Default: most recent."},"limit":{"type":"number","default":20,"description":"Number of top regions to return (default: 20, max: 55)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US defense spending by state","input":{"country":"US"}},{"description":"Top 10 states for defense spending in FY2024","input":{"country":"US","fiscal_year":2024,"limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country queried"},"fiscal_year":{"type":"string","description":"Fiscal year"},"regions":{"type":"array","description":"Regions ranked by defense spending amount"}}},"returns":"Regions ranked by defense spending amount with dollar values and percentages"},{"name":"budget_authority","displayName":"Budget Authority","description":"Get US DoD total budgetary resources, obligations, and outlays by fiscal year. This is the top-line budget — different from contract awards. Shows how much Congress authorized vs how much was obligated and spent.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Currently US only","enum":["US"]}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US DoD budget authority","input":{"country":"US"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"fiscal_years":{"type":"array","description":"Budget authority, obligations, outlays per fiscal year"}}},"returns":"DoD budgetary resources with total authority, obligations, and outlays by fiscal year"},{"name":"arms_transfers","displayName":"Arms Transfers","description":"Get SIPRI Trend Indicator Values for arms exports and imports. Measures the VOLUME of international arms transfers using SIPRI methodology (constant 1990 USD). Different from UN Comtrade customs data. Covers 200+ countries.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'US', 'RU', 'CN', 'FR')"},"years":{"type":"number","default":10,"description":"Number of most recent years to return (default: 10)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US arms transfers over 10 years","input":{"country":"US"}},{"description":"Russia arms exports/imports","input":{"country":"RU","years":15}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exports":{"type":"array","description":"Arms exports by year (SIPRI TIV)"},"imports":{"type":"array","description":"Arms imports by year (SIPRI TIV)"}}},"returns":"Arms exports and imports in SIPRI TIV with net transfer balance"},{"name":"displacement","displayName":"Conflict Displacement","description":"Get refugee, IDP, and asylum seeker data for countries affected by conflict. Shows the human impact of military operations — how many people are displaced, where they go, and return statistics. From UNHCR.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'UA', 'SY', 'AF', 'SD', 'MM')"},"year":{"type":"number","default":2023,"description":"Year to query (default: 2023)"},"direction":{"type":"string","enum":["origin","asylum"],"default":"origin","description":"'origin' = people fleeing FROM this country. 'asylum' = people fleeing TO this country."}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Ukrainian displacement","input":{"country":"UA"}},{"description":"Syrian refugees","input":{"country":"SY","year":2023}},{"description":"People seeking asylum in Germany","input":{"country":"DE","direction":"asylum"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"totals":{"type":"object","description":"Total refugees, IDPs, asylum seekers, stateless"},"breakdown":{"type":"array","description":"Displacement by origin/asylum country"}}},"returns":"Displacement totals and country breakdown with refugees, IDPs, asylum seekers"},{"name":"military_bases","displayName":"Military Bases","description":"Find military installations in any country — bases, airfields, naval bases, firing ranges, and barracks. Returns names, coordinates, and metadata from OpenStreetMap. Covers 40+ countries.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'US', 'GB', 'DE', 'JP', 'KR')"},"base_type":{"type":"string","enum":["all","base","airfield","naval_base","range","barracks"],"default":"all","description":"Type of installation to search for (default: all military installations)"},"limit":{"type":"number","default":50,"description":"Maximum installations to return (default: 50, max: 100)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"UK airfields","input":{"country":"GB","base_type":"airfield"}},{"description":"German military bases","input":{"country":"DE","base_type":"base","limit":20}},{"description":"Japanese military installations","input":{"country":"JP","limit":30}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Number of installations found"},"installations":{"type":"array","description":"Installation details with name, type, coordinates"}}},"returns":"Military installations with names, types, coordinates, and operator info"},{"name":"defense_outlays","displayName":"Defense Outlays","description":"Get actual monthly cash outlays for US National Defense from the Treasury Monthly Statement. This is the definitive record of money actually spent — different from USAspending obligations and World Bank annual estimates.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Currently US only","enum":["US"]},"years":{"type":"number","default":3,"description":"Number of fiscal years to return (default: 3)"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"US defense outlays last 3 years","input":{"country":"US"}},{"description":"US defense outlays last 5 years","input":{"country":"US","years":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"by_fiscal_year":{"type":"array","description":"Fiscal year totals with monthly breakdown and YoY change"}}},"returns":"Monthly defense outlays by fiscal year with FYTD totals and year-over-year changes"}],"workflow":["military_spending → military_profile → displacement","compare_countries → arms_transfers","arms_trade","budget_authority → budget_breakdown → defense_outlays","defense_contracts → top_contractors → spending_by_region","sanctions","military_bases"],"icon":"/icons/defense-spending.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with 5 skills: military_spending, compare_countries, defense_contracts, top_contractors, spending_by_region"]},{"version":"0.02","date":"2026-03-25","changes":["Added 4 new skills: arms_trade (UN Comtrade), budget_breakdown (USAspending), military_profile (CIA Factbook), sanctions (EU Sanctions Map). Extracted shared libs."]},{"version":"0.03","date":"2026-03-25","changes":["Added 5 more skills: budget_authority, arms_transfers (SIPRI TIV), displacement (UNHCR), military_bases (OpenStreetMap), defense_outlays (US Treasury). Now 14 skills from 12 data sources."]},{"version":"0.04","date":"2026-04-06","changes":["arms_transfers: fixed query parameters that caused World Bank API to reject the request","military_bases: falls back to a secondary map server when the primary times out"]}],"premadePrompt":"How much does [country] spend on its military each year, and how does it compare to [another country]? Show me the trend over the last 10 years."},{"name":"geopolitics","displayName":"Geopolitics","subtitle":"Global conflict, defense news & sentiment analysis","about":"**Geopolitics** monitors global events and media coverage using the GDELT database — one of the largest open event datasets in the world. Search real-time defense and political news in 100+ languages, track whether coverage of a topic is escalating or fading, and measure the emotional tone of global media around any issue.\n\nFor researchers, analysts, and journalists, this is the fastest way to get a data-backed read on how global media is treating a conflict, a political figure, or an international issue — without manual news monitoring.\n\n### What you can do\n- **search_events** — find news articles on any geopolitical topic with boolean query support, source country filtering, and time ranges up to one year\n- **trend_analysis** — measure whether media coverage of a topic is increasing, decreasing, or stable over time, with peak coverage dates\n- **sentiment_analysis** — track the emotional tone of global media on a topic from -10 (very negative) to +10 (very positive)\n- **get_context** — pull article text snippets for deeper context without reading full articles\n\n### Who it's for\nJournalists tracking conflict escalation, political risk analysts monitoring emerging situations, researchers studying media narratives, and anyone who needs a fast quantitative read on how the world is covering a topic.\n\n### How to use it\n1. Use **search_events** with a topic like \"Russia Ukraine\" or \"China Taiwan military\" to find recent articles\n2. Use **trend_analysis** to see if coverage is escalating or winding down over the past 6-12 months\n3. Use **sentiment_analysis** to measure whether media tone is worsening or improving\n4. Use **get_context** to pull actual text excerpts when you need specific quotes or details\n\n### Getting started\nAll skills work immediately with no setup — powered by the public GDELT dataset.","version":"0.01","categories":["data","analytics"],"currency":"USD","skills":[{"name":"search_events","displayName":"Search Events","description":"Search global news for geopolitical events. Monitors media in 100+ languages in real-time. Supports boolean queries, source country filtering, and time ranges. Powered by GDELT.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms (e.g. \"Russia Ukraine\", \"defense spending\", \"NATO expansion\"). Supports boolean: \"term1 OR term2\", sourcecountry:US, sourcelang:english"},"timespan":{"type":"string","default":"7days","description":"Time range: \"24hours\", \"7days\", \"1month\", \"3months\", \"6months\", \"1year\""},"source_country":{"type":"string","description":"Filter by source country FIPS code (e.g. \"US\", \"UK\", \"CH\" for China, \"RS\" for Russia)"},"max_results":{"type":"number","default":20,"description":"Maximum articles to return (default: 20, max: 250)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Russia-Ukraine conflict news","input":{"query":"Russia Ukraine military"}},{"description":"China Taiwan news from US sources","input":{"query":"China Taiwan","source_country":"US","timespan":"1month"}},{"description":"NATO defense spending","input":{"query":"NATO defense spending","timespan":"3months"}}],"pricing":"free","returns":"Articles with titles, URLs, sources, dates, languages, and source countries"},{"name":"trend_analysis","displayName":"Trend Analysis","description":"Track media coverage volume of a geopolitical topic over time. See if coverage is increasing, decreasing, or stable. Identifies peak coverage dates. Useful for monitoring escalation and de-escalation.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Topic to track (same query syntax as search_events)"},"timespan":{"type":"string","default":"6months","description":"Time range for the trend (e.g. \"3months\", \"6months\", \"1year\")"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Ukraine conflict coverage trend","input":{"query":"Ukraine war"}},{"description":"AI military applications trend","input":{"query":"artificial intelligence military","timespan":"1year"}}],"pricing":"free","returns":"Coverage volume timeline with trend direction (increasing/decreasing/stable) and peak date"},{"name":"sentiment_analysis","displayName":"Sentiment Analysis","description":"Analyze global media sentiment around a geopolitical topic over time. Returns tone score (-10 very negative to +10 very positive), sentiment label, trend direction, and extremes.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Topic to analyze sentiment for"},"timespan":{"type":"string","default":"3months","description":"Time range (e.g. \"1month\", \"3months\", \"6months\")"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Sentiment around China military","input":{"query":"China military"}},{"description":"NATO sentiment over 6 months","input":{"query":"NATO","timespan":"6months"}}],"pricing":"free","returns":"Sentiment timeline with average tone, direction (improving/worsening/stable), and extremes"},{"name":"get_context","displayName":"Get Context","description":"Get article snippets and context passages about a geopolitical topic. Returns actual text excerpts from articles — useful for getting detailed context without reading full articles.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Topic to get context for"},"max_results":{"type":"number","default":10,"description":"Maximum articles to return (default: 10, max: 75)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Context on Iran nuclear program","input":{"query":"Iran nuclear weapons"}},{"description":"Context on US defense budget","input":{"query":"US defense budget 2026","max_results":5}}],"pricing":"free","returns":"Articles with context text snippets, titles, URLs, sources, and dates"}],"workflow":["search_events","trend_analysis → sentiment_analysis","get_context"],"icon":"/icons/geopolitics.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with 4 skills: search_events, trend_analysis, sentiment_analysis, get_context. Powered by GDELT."]}],"premadePrompt":"What is the latest global news on [geopolitical topic, e.g. \"Russia Ukraine\" or \"China Taiwan\"]? Is media coverage increasing or decreasing, and what is the overall sentiment?"},{"name":"satellite-tracker","displayName":"Satellite Tracker","subtitle":"Track 15,000+ satellites in real-time","about":"**Satellite Tracker** gives you real-time orbital data and approximate positions for 15,000+ satellites. Track entire constellations — Starlink, GPS, military, weather, communications, and space stations — or look up any individual satellite by name or NORAD catalog number.\n\nAll the orbital data you'd normally need a specialist tool to access is here: position, altitude, velocity, inclination, orbital period, and drag coefficient. Browse satellite groups, search by name, and see what's been launched in the last 30 days.\n\n### What you can do\n- **list_groups** — see all 30+ satellite groups with descriptions and group IDs\n- **track_group** — get all satellites in a group with orbital data and approximate positions\n- **search_satellites** — find any satellite by name or partial name, with optional current position\n- **satellite_info** — full orbital parameters and current position for one satellite by NORAD ID\n- **recent_launches** — satellites launched in the last 30 days, sorted newest first\n\n### Who it's for\nSpace enthusiasts tracking satellites overhead, researchers studying constellation deployments, journalists covering space launches, developers building orbital awareness into applications, and anyone who wants to understand what's in orbit right now.\n\n### How to use it\n1. Start with **list_groups** to see what groups are available, or use **search_satellites** if you know the name of what you're looking for.\n2. Call **track_group** with a group ID like \"starlink\", \"military\", or \"gps-ops\" to see all satellites in that group with positions.\n3. Use **satellite_info** with a NORAD ID for detailed parameters on a single satellite — get the NORAD ID from search_satellites first.\n\n### Getting started\nCall **list_groups** to see all available groups, then **track_group** with a group ID to start exploring — no setup required.","version":"0.01","categories":["data","infrastructure"],"currency":"USD","skills":[{"name":"list_groups","displayName":"List Groups","description":"List all available satellite groups — military, GPS, Starlink, weather, space stations, communications, science, and more. Returns group IDs to use with track_group.","inputSchema":{"type":"object","properties":{},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"List all satellite groups","input":{}}],"pricing":"free","returns":"All available satellite groups with descriptions and group IDs"},{"name":"track_group","displayName":"Track Group","description":"Get all satellites in a group with orbital data and current approximate positions. Groups include military, gps-ops, starlink, weather, stations, geo, and 25+ more. Use list_groups to see all options.","inputSchema":{"type":"object","properties":{"group":{"type":"string","description":"Satellite group ID (e.g. 'military', 'gps-ops', 'stations', 'starlink', 'weather', 'geo', 'last-30-days')"},"show_position":{"type":"boolean","default":true,"description":"Include approximate current lat/lon/altitude for each satellite (default: true)"},"limit":{"type":"number","default":50,"description":"Maximum satellites to return (default: 50, max: 200)"}},"required":["group"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Track all military satellites","input":{"group":"military"}},{"description":"GPS constellation","input":{"group":"gps-ops"}},{"description":"Space stations (ISS, Tiangong)","input":{"group":"stations"}},{"description":"Weather satellites","input":{"group":"weather","limit":20}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_satellites":{"type":"number","description":"Total satellites in this group"},"satellites":{"type":"array","description":"Satellite data with orbital elements and positions"}}},"returns":"Satellites in the group with orbital data, orbit type classification, and approximate positions"},{"name":"search_satellites","displayName":"Search Satellites","description":"Search for satellites by name. Partial matches supported — searching \"STARLINK\" returns thousands, \"ISS\" returns the space station, \"GPS\" returns navigation satellites. Returns orbital data and NORAD IDs.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Satellite name or partial name (e.g. 'ISS', 'STARLINK', 'GPS', 'COSMOS', 'SENTINEL', 'ONEWEB')"},"show_position":{"type":"boolean","default":false,"description":"Include approximate current position for each result"},"limit":{"type":"number","default":20,"description":"Maximum results to return (default: 20, max: 100)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find the International Space Station","input":{"query":"ISS"}},{"description":"Search for Sentinel satellites","input":{"query":"SENTINEL"}},{"description":"Find Chinese satellites","input":{"query":"CZ","show_position":true,"limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_results":{"type":"number","description":"Total satellites matching the query"},"satellites":{"type":"array","description":"Matching satellites with orbital data"}}},"returns":"Matching satellites with names, NORAD IDs, orbit types, and optional positions"},{"name":"satellite_info","displayName":"Satellite Info","description":"Get detailed information about a specific satellite by NORAD catalog number. Returns full orbital parameters, current approximate position, orbit classification, drag coefficient, and data age. Use search_satellites to find the NORAD ID first.","inputSchema":{"type":"object","properties":{"norad_id":{"type":"number","description":"NORAD catalog number (e.g. 25544 for ISS, 39088 for SAPPHIRE). Find IDs via search_satellites."}},"required":["norad_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"ISS details","input":{"norad_id":25544}},{"description":"SAPPHIRE military satellite","input":{"norad_id":39088}}],"pricing":"free","outputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Satellite name"},"orbit":{"type":"object","description":"Full orbital parameters"},"current_position":{"type":"object","description":"Approximate lat/lon/altitude/velocity"}}},"returns":"Detailed satellite info with full orbital elements, position, velocity, and orbit classification"},{"name":"recent_launches","displayName":"Recent Launches","description":"Get satellites launched in the last 30 days. Shows the newest objects in orbit, sorted by launch date. Useful for tracking new deployments, Starlink batches, and military launches.","inputSchema":{"type":"object","properties":{"show_position":{"type":"boolean","default":false,"description":"Include approximate current position for each satellite"},"limit":{"type":"number","default":30,"description":"Maximum results to return (default: 30, max: 100)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Recent satellite launches","input":{}},{"description":"Last 10 launches with positions","input":{"show_position":true,"limit":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_launched":{"type":"number","description":"Total satellites launched in last 30 days"},"satellites":{"type":"array","description":"Recently launched satellites sorted by date"}}},"returns":"Recently launched satellites sorted newest first with orbital data"}],"workflow":["list_groups → track_group → satellite_info","search_satellites → satellite_info","recent_launches"],"icon":"/icons/satellite-tracker.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with 5 skills: track_group, search_satellites, satellite_info, recent_launches, list_groups"]}],"premadePrompt":"Where is the [satellite name] right now? Show me its current position, altitude, and orbital details."},{"name":"product-studio","displayName":"Product Studio","subtitle":"AI product photography and editing suite","about":"**Product Studio** is an all-in-one AI photo studio for turning any product photo into professional e-commerce and marketing imagery. Studio shots, lifestyle scenes, ghost mannequins, flat lays, background blur, recoloring, shadow effects, wrinkle removal — it covers the full product photography workflow in a single tool.\n\nYou don't need a photographer, a studio, or Photoshop. Take a phone photo of your product and the studio transforms it into the kind of imagery that stops a scroll. Works across fashion, beauty, homeware, electronics, and anything else you sell.\n\n### What you can do\n- **studio_shot** — clean white or colored background with professional lighting for e-commerce listings\n- **lifestyle_shot** — place the product in a real-world scene like a kitchen counter or office desk\n- **ghost_mannequin** — remove the model or mannequin from clothing while keeping the garment's 3D shape\n- **flat_lay** — overhead flat lay arrangement with styled props and surfaces\n- **remove_object** — clean up distracting elements, people, or stickers from the background\n- **beautify** — enhance lighting, sharpness, and color without changing the composition\n- **add_shadows** — add realistic drop or contact shadows for depth\n- **unwrinkle** — smooth out creases in clothing photos\n- **recolor** — generate color variants without reshooting\n- **blur_background** — add a depth-of-field bokeh effect\n- **resize_expand** — expand the image to a new aspect ratio with AI-generated background\n- **ai_edit** — freeform natural language edits for anything not covered above\n\n### Who it's for\nE-commerce sellers, fashion brands, DTC product companies, marketers building social creative, and any business that needs consistent, high-quality product imagery at scale.\n\n### How to use it\n1. Start with **studio_shot** to get a clean, professional base image on a white or colored background.\n2. Use **lifestyle_shot** with a scene description to create contextual marketing imagery.\n3. Chain **recolor** to generate color variants, or **resize_expand** to adapt images for different ad formats.\n\n### Getting started\nPass any product image URL to **studio_shot** — it works immediately with no setup required.","version":"0.04","categories":["media","ai","marketing"],"currency":"USD","skills":[{"name":"studio_shot","displayName":"Studio Shot","description":"Place a product on a clean background with professional studio lighting and shadows. The core e-commerce product photo.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"background":{"type":"string","description":"Background style (e.g. \"white\", \"light gray gradient\", \"soft pink\"). Defaults to white."},"lighting":{"type":"string","description":"Lighting style (e.g. \"soft studio\", \"dramatic\", \"warm golden\"). Defaults to soft studio."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Product on white background for Amazon listing","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}},{"description":"Product on gradient background with warm lighting","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","background":"soft beige to white gradient","lighting":"warm golden overhead"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Studio-quality product image URL, downloadable asset, model used, and metadata"},{"name":"lifestyle_shot","displayName":"Lifestyle Shot","description":"Place a product in a real-world scene — kitchen counter, office desk, outdoor setting. Creates contextual lifestyle photography.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"scene":{"type":"string","description":"Scene description (e.g. \"marble kitchen counter\", \"wooden desk in a sunny office\", \"picnic blanket outdoors\")."},"mood":{"type":"string","description":"Mood/atmosphere (e.g. \"cozy and warm\", \"bright and airy\", \"moody and dramatic\")."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url","scene"]},"annotations":{},"examples":[{"description":"Coffee mug on a kitchen counter","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","scene":"marble kitchen counter next to a coffee machine, morning light"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Lifestyle product image URL, downloadable asset, model used, and metadata"},{"name":"ghost_mannequin","displayName":"Ghost Mannequin","description":"Remove the mannequin or model from clothing photos to create a hollow-man effect. The garment appears to float with its 3D shape preserved.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Remove mannequin from a jacket photo","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Ghost mannequin image URL, downloadable asset, model used, and metadata"},{"name":"flat_lay","displayName":"Flat Lay","description":"Create a top-down flat lay arrangement of a product. Styled overhead photography for social media and catalogs.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"surface":{"type":"string","description":"Surface to arrange on (e.g. \"white marble\", \"wooden table\", \"linen fabric\"). Defaults to white."},"props":{"type":"string","description":"Complementary props to include (e.g. \"dried flowers and a notebook\", \"coffee beans and a spoon\")."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Skincare product flat lay on marble with flowers","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","surface":"white marble slab","props":"dried lavender sprigs and a small towel"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Flat lay image URL, downloadable asset, model used, and metadata"},{"name":"remove_object","displayName":"Remove Object","description":"Remove unwanted objects, people, or distractions from product photos. Describe what to remove and the area is filled naturally.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"remove":{"type":"string","description":"What to remove (e.g. \"the person in the background\", \"the price sticker\", \"the shadow on the left\")."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url","remove"]},"annotations":{},"examples":[{"description":"Remove a person from the background of a product shot","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","remove":"the people in the background"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Cleaned image URL, downloadable asset, model used, and metadata"},{"name":"beautify","displayName":"Beautify Product","description":"Enhance a product photo to studio-grade quality. Improves lighting, sharpness, colors, and overall appeal without changing the composition.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Enhance a phone photo of a product to look professional","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Enhanced image URL, downloadable asset, model used, and metadata"},{"name":"add_shadows","displayName":"Add Shadows","description":"Add realistic drop shadows or contact shadows beneath a product. Makes products on flat backgrounds look grounded and natural.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"shadow_type":{"type":"string","description":"Shadow style (e.g. \"soft drop shadow\", \"hard contact shadow\", \"diffused ambient shadow\"). Defaults to natural drop shadow."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Add a soft drop shadow to a product on white background","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Image with shadows URL, downloadable asset, model used, and metadata"},{"name":"unwrinkle","displayName":"Unwrinkle Clothing","description":"Remove wrinkles and creases from clothing photos. The fabric looks freshly pressed while keeping shape, color, and pattern intact.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Smooth out wrinkles on a shirt photo","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Unwrinkled clothing image URL, downloadable asset, model used, and metadata"},{"name":"recolor","displayName":"Recolor Product","description":"Change the color of a product or garment. Generate color variants without reshooting. Keeps shape, texture, and details identical.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"color":{"type":"string","description":"Target color (e.g. \"navy blue\", \"forest green\", \"matte black\", \"coral pink\")."},"target":{"type":"string","description":"What to recolor if ambiguous (e.g. \"the shoes\", \"the dress\", \"the bag strap\"). Defaults to the product."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url","color"]},"annotations":{},"examples":[{"description":"Generate a navy blue variant of a red dress","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","color":"navy blue"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Recolored image URL, downloadable asset, model used, and metadata"},{"name":"blur_background","displayName":"Blur Background","description":"Apply a depth-of-field blur to the background while keeping the product sharp. Creates a professional bokeh effect.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"intensity":{"type":"string","description":"Blur intensity (e.g. \"subtle\", \"moderate\", \"heavy\"). Defaults to moderate."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Add moderate background blur to a product photo","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Blurred background image URL, downloadable asset, model used, and metadata"},{"name":"resize_expand","displayName":"Resize and Expand","description":"Expand an image to a new aspect ratio by AI-generating the missing background. Outpainting that seamlessly extends the scene.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"target_ratio":{"type":"string","description":"Target aspect ratio (e.g. \"16:9\", \"1:1\", \"9:16\")."},"direction":{"type":"string","description":"Expand direction (e.g. \"wider\", \"taller\", \"all sides\"). Alternative to target_ratio."},"fill":{"type":"string","description":"What to fill the expanded area with. Defaults to continuing the existing background."},"instructions":{"type":"string","description":"Additional instructions to refine the result."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Expand a portrait product photo to landscape for a banner","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","target_ratio":"16:9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Expanded image URL, downloadable asset, model used, and metadata"},{"name":"ai_edit","displayName":"AI Edit","description":"Freeform AI editing — describe any edit in natural language and it gets applied. The catch-all for edits not covered by other skills.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"edit":{"type":"string","description":"Natural language edit instruction (e.g. \"add a ribbon bow\", \"make it look vintage\", \"add steam rising from the cup\")."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9","3:2","2:3"],"description":"Output aspect ratio."},"output_format":{"type":"string","enum":["jpeg","png","webp"],"description":"Output image format. Defaults to jpeg."},"seed":{"type":"number","description":"Random seed for reproducible results."},"extra_params":{"type":"object","description":"Additional model-specific parameters."}},"required":["image_url","edit"]},"annotations":{},"examples":[{"description":"Add a seasonal holiday touch to a product photo","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","edit":"Add pine branches and small red berries around the candle for a Christmas theme"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"source_image":{"type":"string","description":"Original image URL"},"model":{"type":"string","description":"Model used"},"model_key":{"type":"string","description":"Model key or endpoint ID"},"seed":{"type":"number","description":"Seed used"},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Edited image URL, downloadable asset, model used, and metadata"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["studio_shot","lifestyle_shot","ghost_mannequin","flat_lay","beautify","remove_object","add_shadows","unwrinkle","recolor","blur_background","resize_expand","ai_edit","list_models"],"icon":"/icons/product-studio.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release — 12 skills covering the full product photography workflow"]},{"version":"0.02","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across product shots"]},{"version":"0.03","date":"2026-04-14","changes":["Accept products and scenes from your file library"]},{"version":"0.04","date":"2026-04-20","changes":["Instagram post and carousel support — paste any Instagram URL and the product image is extracted automatically"]}],"premadePrompt":"Take this product photo [image URL] and create a professional studio shot on a clean white background. Also make a lifestyle version showing it in [scene, e.g. a kitchen / a desk / an outdoor setting].","usesScenes":true,"usesProducts":true,"usesStyleReferences":true,"styleReferenceSkills":["studio_shot","lifestyle_shot","flat_lay"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand photography standards for backgrounds, lighting, and angles\n  - Use established colour palettes and visual consistency\n  - Reference product details for accurate presentation\n  - Match existing product imagery style across the catalogue","produces":["product_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"product-spec-sheet","displayName":"Product Spec Sheet","subtitle":"Clean product spec sheets from catalogue images","about":"**Product Spec Sheet** generates a professional multi-angle product spec sheet from a single photo or a set of product images. Pass one image and get six photorealistic angle views composed into a clean grid. Pass multiple images and they're cleaned up and assembled into a polished spec sheet automatically.\n\nThis is ideal for e-commerce sellers, manufacturers, and product teams who need consistent, professional-looking reference sheets without a photo shoot. The tool removes backgrounds, text overlays, and watermarks from each image, then composes them into a 3x2 or 2x3 grid you can use in catalogues, pitch decks, or supplier documentation.\n\n### What you can do\n- **generate_spec_sheet** — create a multi-angle spec sheet from one photo (generates 6 angle views) or multiple photos (cleans and composes them into a grid)\n\n### Who it's for\nE-commerce businesses preparing product listings, manufacturers creating supplier documentation, marketing teams building product catalogues, and anyone who needs a clean visual reference sheet for a physical product.\n\n### How to use it\n1. Call **generate_spec_sheet** with at least one product image URL.\n2. For the single-image path, add product_name and product_description to improve accuracy of the generated angles.\n3. For multi-image input, pass additional_image_urls alongside the main image — the tool cleans each one and builds the grid.\n4. The response includes a spec_sheet_page link — always show this to the user.\n\n### Getting started\nPass a product photo URL to **generate_spec_sheet** with a product name for the best results. The tool runs asynchronously and takes around 30–60 seconds.","version":"0.02","categories":["media","ai","marketing"],"currency":"USD","skills":[{"name":"generate_spec_sheet","displayName":"Generate Spec Sheet","description":"Generate a product spec sheet. Multiple images → cleans each (removes bg/text/overlays) into a grid. Single image → generates 6 angle views. ⏱ ~30-60s async, poll with get_job_result.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Product photo as a ToolRouter file ID or hosted HTTP(S) URL."},"product_name":{"type":"string","description":"Product name — used to guide accurate generation."},"product_description":{"type":"string","description":"Product description — helps the model understand materials, features, and details to reproduce accurately."},"additional_image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"grid_layout":{"type":"string","enum":["3x2","2x3"],"description":"Grid arrangement for the composed sheet. Defaults to 3x2 (3 columns, 2 rows)."},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Generate a spec sheet from a product photo","input":{"image_url":"https://example.com/product.jpg"}},{"description":"Spec sheet with product name and description for accuracy","input":{"image_url":"https://example.com/headphones.jpg","product_name":"AirPods Max","product_description":"Over-ear noise cancelling headphones with aluminium cups and mesh headband","grid_layout":"3x2"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"spec_sheet_path":{"type":"string","description":"Local path to composed grid image (auto-uploaded to permanent storage)"},"views":{"type":"array","description":"Individual angle views","items":{"type":"object","properties":{"angle":{"type":"string","description":"Angle key (front, back, left, right, top, three_quarter)"},"label":{"type":"string","description":"Human-readable angle label"},"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"model":{"type":"string","description":"Model used for generation"},"product_name":{"type":"string","description":"Product name (echoed from input)"},"failed_angles":{"type":"array","description":"Angle keys that failed to generate (if any)"}}},"contentType":"image","returns":"Composed spec sheet image with 6 angle views, individual view URLs, and download page"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["generate_spec_sheet","list_models"],"icon":"/icons/product-spec-sheet.webp","changelog":[{"version":"0.01","date":"2026-04-01","changes":["Initial release: generates 6 angle views and composes into a grid spec sheet"]},{"version":"0.02","date":"2026-04-05","changes":["Spec sheets now use real product images when available — cleans each (removes backgrounds, text, overlays) instead of generating angles from scratch"]}],"premadePrompt":"Generate a multi-angle spec sheet for my product using this photo: [product image URL]. The product is called [product name].","brain":{"instructions":"When brain knowledge is available:\n  - Reference product details, features, and specifications\n  - Apply brand visual style to spec sheet presentation\n  - Maintain consistency with existing product documentation","produces":["product_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"video-edit","displayName":"AI Video Edit","subtitle":"Transform videos with AI — swap characters, restyle, transfer motion","about":"**AI Video Edit** transforms existing videos using AI — swap characters, change environments, apply art styles, or transfer motion from one video onto a person in a photo. It's the fastest way to put yourself or a brand character into any scene without re-shooting.\n\nUnlike traditional editing software, this tool works from natural language instructions. Describe the change you want — \"replace the main character with me\", \"make it look like a Studio Ghibli anime\", \"put this person in the dance video\" — and the AI handles the rest.\n\n### What you can do\n- **edit_video** — targeted modifications: swap characters or objects, change environments, reference elements with @Element1/@Image1 syntax\n- **restyle_video** — full style transfer: anime, oil painting, vintage film, watercolor, and other visual styles\n- **motion_control** — place a person's photo into a scene video, inheriting all the motion from the original footage\n- **check_video** — check the status of a running job and retrieve results when ready\n\n### Who it's for\nContent creators who want to appear in video scenes they didn't film, brands that need to put their character or spokesperson into existing footage, social media editors doing viral remixes, and filmmakers experimenting with style treatments before a full production.\n\n### How to use it\n1. For character swaps, use **edit_video** with a video URL, a person element image, and a prompt like \"swap the main character with @Element1\"\n2. For style transfer, use **restyle_video** with a video URL and a style description like \"Studio Ghibli anime\" or \"1970s film grain\"\n3. To place a person into a scene, use **motion_control** with their photo as the image and the scene as the video\n4. All skills are async — the tool returns a job ID, and you can retrieve the result once processing completes\n\n### Getting started\nHave a source video URL ready (MP4, MOV, or WebM, 3–10 seconds, up to 200 MB). For character swaps, also prepare a front-facing photo of the subject.","version":"0.01","categories":["media","ai"],"currency":"USD","skills":[{"name":"edit_video","displayName":"Edit Video","description":"Targeted AI edits on an existing video — swap characters, change environments, modify objects — while preserving original motion and camera angles. Reference elements with @Element1 and style images with @Image1 in the prompt. Powered by Kling O1. Input: 3-10s video. ⏱ Takes ~60-120s, runs async.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Natural language edit instruction. Use @Element1, @Element2 to reference elements and @Image1, @Image2 to reference style images."},"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"elements":{"type":"array","description":"Character/object elements to include. Reference in prompt as @Element1, @Element2, etc. Max 4 combined with image_urls.","items":{"type":"object","properties":{"frontal_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"reference_image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["frontal_image_url"]}},"keep_audio":{"type":"boolean","description":"Preserve original audio from the source video. Default: false (silent output)."},"estimated_duration":{"type":"number","description":"Estimated duration of the input video in seconds (for cost estimation). Default: 5."}},"required":["prompt","video_url"]},"annotations":{"openWorldHint":true,"idempotentHint":false,"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Swap a character in a video using a reference photo","input":{"prompt":"Replace the main character with @Element1, keeping the same movements and camera angles","video_url":"https://example.com/movie-clip.mp4","elements":[{"frontal_image_url":"https://example.com/my-photo.jpg"}]}},{"description":"Change the environment of a video","input":{"prompt":"Transform the background into a tropical beach at sunset while keeping the person unchanged","video_url":"https://example.com/outdoor-scene.mp4"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url_direct":{"type":"string","description":"Direct URL to the edited video (temporary)"},"content_type":{"type":"string","description":"MIME type (e.g. video/mp4)"},"file_name":{"type":"string","description":"Suggested file name"},"file_size":{"type":"number","description":"File size in bytes"},"request_id":{"type":"string","description":"Request ID"},"estimated_cost_usd":{"type":"number","description":"Estimated cost in USD"}}},"returns":"Edited video download URL, file metadata, request ID, and estimated cost"},{"name":"restyle_video","displayName":"Restyle Video","description":"Broad style transformation of a video — anime, painting, weather changes, time-of-day shifts — using the original as a motion/structure reference. Regenerates the video in a new style while preserving movement and composition. Powered by Kling O1. Input: 3-10s video. ⏱ Takes ~60-120s, runs async.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Style transformation instruction. Use @Image1, @Image2 for style reference images and @Element1, @Element2 for character elements."},"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"elements":{"type":"array","description":"Character/object elements to include. Reference in prompt as @Element1, @Element2, etc. Max 4 combined with image_urls.","items":{"type":"object","properties":{"frontal_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"reference_image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["frontal_image_url"]}},"keep_audio":{"type":"boolean","description":"Preserve original audio from the source video. Default: false (silent output)."},"aspect_ratio":{"type":"string","enum":["auto","16:9","9:16","1:1"],"description":"Output aspect ratio. Default: auto (matches input)."},"duration":{"type":"number","description":"Output video duration in seconds (3-10). Default: matches input."},"estimated_duration":{"type":"number","description":"Estimated duration of the input video in seconds (for cost estimation). Default: 5."}},"required":["prompt","video_url"]},"annotations":{"openWorldHint":true,"idempotentHint":false,"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Transform a video into anime style","input":{"prompt":"Transform this video into a Studio Ghibli-style anime animation with soft watercolor textures","video_url":"https://example.com/real-footage.mp4"}},{"description":"Apply a style reference image to a video","input":{"prompt":"Apply the artistic style of @Image1 to this video, keeping the original motion intact","video_url":"https://example.com/scene.mp4","image_urls":["https://example.com/reference-painting.jpg"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url_direct":{"type":"string","description":"Direct URL to the restyled video (temporary)"},"content_type":{"type":"string","description":"MIME type (e.g. video/mp4)"},"file_name":{"type":"string","description":"Suggested file name"},"file_size":{"type":"number","description":"File size in bytes"},"request_id":{"type":"string","description":"Request ID"},"estimated_cost_usd":{"type":"number","description":"Estimated cost in USD"}}},"returns":"Restyled video download URL, file metadata, request ID, and estimated cost"},{"name":"motion_control","displayName":"Motion Control","description":"Transfer motion from a reference video onto a character image — put yourself in a movie scene or make a photo dance. Provide character photo (image_url) + motion video (video_url). Kling V3 Pro. ⏱ ~60-120s, async.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"character_orientation":{"type":"string","enum":["image","video"],"description":"Output orientation. \"image\" = matches the reference image orientation (max 10s). \"video\" = matches the reference video orientation (max 30s)."},"prompt":{"type":"string","description":"Optional text description to guide the generation."},"keep_original_sound":{"type":"boolean","description":"Retain audio from the reference video. Default: true."},"elements":{"type":"array","description":"Optional element for facial consistency binding (max 1). Requires character_orientation=\"video\".","items":{"type":"object","properties":{"frontal_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["frontal_image_url"]}},"estimated_duration":{"type":"number","description":"Estimated duration of the input video in seconds (for cost estimation). Default: 5."}},"required":["image_url","video_url","character_orientation"]},"annotations":{"openWorldHint":true,"idempotentHint":false,"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Put yourself into a movie scene","input":{"image_url":"https://example.com/my-photo.jpg","video_url":"https://example.com/movie-scene.mp4","character_orientation":"video","prompt":"The character walks confidently through the scene"}},{"description":"Make a photo dance","input":{"image_url":"https://example.com/portrait.jpg","video_url":"https://example.com/dance-moves.mp4","character_orientation":"image"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url_direct":{"type":"string","description":"Direct URL to the generated video (temporary)"},"content_type":{"type":"string","description":"MIME type (e.g. video/mp4)"},"file_name":{"type":"string","description":"Suggested file name"},"file_size":{"type":"number","description":"File size in bytes"},"request_id":{"type":"string","description":"Request ID"},"estimated_cost_usd":{"type":"number","description":"Estimated cost in USD"}}},"returns":"Generated video download URL, file metadata, request ID, and estimated cost"},{"name":"check_video","displayName":"Check Video","description":"Check the status of a pending video edit/restyle/motion-control job and retrieve the result if complete. Use this when a previous call returned a pending status with a request_id.","inputSchema":{"type":"object","properties":{"request_id":{"type":"string","description":"The request ID returned by a previous edit_video, restyle_video, or motion_control call"},"model_id":{"type":"string","description":"The model ID from the pending response. Defaults to the edit endpoint if omitted."}},"required":["request_id"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Check on a pending video edit","input":{"request_id":"abc123-def456"}},{"description":"Check a motion control job with specific model ID","input":{"request_id":"xyz789-uvw012","model_id":"fal-ai/kling-video/v3/pro/motion-control"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Job status: completed, running, queued, or failed"},"video_url":{"type":"string","description":"Video URL (only when status is completed)"},"request_id":{"type":"string","description":"The request ID"},"message":{"type":"string","description":"Status message with instructions"}}},"returns":"Job status (completed/running/queued/failed) and video URL if complete"}],"workflow":["edit_video","restyle_video","motion_control","check_video"],"icon":"/icons/video-edit.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release — edit_video, restyle_video, motion_control, check_video"]}],"premadePrompt":"I have a video at [video URL]. Can you swap the main character with me using [my photo URL], keeping the same movements? I'd also like to restyle it to look like a Studio Ghibli anime.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"satellite-imagery","displayName":"Satellite Imagery","subtitle":"Satellite photos of any location on Earth","about":"**Satellite Imagery** fetches satellite and aerial photos of any location on Earth. Sub-meter resolution in cities and populated areas — clear enough to see individual buildings, vehicles, and roads. Also includes dated NASA imagery for before/after comparisons and full-Earth photos from deep space.\n\nWhether you're doing property research, tracking land use changes, monitoring a disaster zone, or just want to see any place on Earth from above, this tool gives you permanent image links you can embed, share, or analyze.\n\n### What you can do\n- **capture_location** — get a high-resolution satellite photo of any coordinates at sub-meter resolution in populated areas\n- **capture_dated** — get NASA satellite imagery for a specific date, useful for before/after comparisons and disaster monitoring\n- **earth_photo** — get a full-Earth photo taken from 1.5 million km away by NASA's DSCOVR satellite\n- **image_metadata** — check when satellite imagery was captured and at what resolution before pulling a photo\n\n### Who it's for\nResearchers and journalists monitoring geographic changes, property professionals reviewing sites from above, educators showing real-world geography, developers building location-aware applications, and anyone curious about what any place on Earth looks like from space.\n\n### How to use it\n1. Call **image_metadata** first to check how recent the imagery is at your target coordinates.\n2. Call **capture_location** with latitude and longitude to get a current high-resolution image. Adjust radius_km to control the area captured.\n3. For a specific historical date, call **capture_dated** with a date in YYYY-MM-DD format — best for large areas and disaster monitoring.\n4. For a full-Earth view, call **earth_photo** with an optional date or leave it blank for the latest available.\n\n### Getting started\nCall **capture_location** with any latitude and longitude — no setup required, and the response includes a permanent image URL and a shareable image page.","version":"0.03","categories":["data","media"],"currency":"USD","skills":[{"name":"capture_location","displayName":"Capture Location","description":"Get a high-resolution satellite photo of any location on Earth. Sub-meter resolution in populated areas — you can see buildings, roads, and vehicles. Powered by Esri World Imagery.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the center point (-90 to 90)"},"longitude":{"type":"number","description":"Longitude of the center point (-180 to 180)"},"radius_km":{"type":"number","default":1,"description":"Radius in km to capture (default: 1, max: 500)"},"width":{"type":"number","default":1024,"description":"Image width in pixels (max: 4096)"},"height":{"type":"number","default":1024,"description":"Image height in pixels (max: 4096)"},"format":{"type":"string","enum":["jpg","png"],"default":"jpg","description":"Image format"}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Satellite photo of the Pentagon","input":{"latitude":38.871,"longitude":-77.056,"radius_km":0.5}},{"description":"Aerial view of central London","input":{"latitude":51.5074,"longitude":-0.1278,"radius_km":2}}],"pricing":"free","returns":"Satellite photo with image_url (permanent link) and image_page (shareable download page)"},{"name":"capture_dated","displayName":"Capture Dated","description":"Get NASA satellite imagery for a specific date. Uses MODIS Terra at 250m resolution — good for large-area views, natural disasters, and before/after comparisons. Specify a date to see what the area looked like.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the center point"},"longitude":{"type":"number","description":"Longitude of the center point"},"date":{"type":"string","description":"Date in YYYY-MM-DD format (e.g. 2024-06-15)"},"radius_km":{"type":"number","default":50,"description":"Radius in km (default: 50, larger because 250m resolution)"},"width":{"type":"number","default":1024,"description":"Image width in pixels"},"height":{"type":"number","default":1024,"description":"Image height in pixels"}},"required":["latitude","longitude","date"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"LA fires area on Jan 10 2025","input":{"latitude":34.05,"longitude":-118.25,"date":"2025-01-10","radius_km":30}},{"description":"Ukraine front lines","input":{"latitude":48,"longitude":37.8,"date":"2024-06-01","radius_km":100}}],"pricing":"free","returns":"Dated satellite image with image_url and image_page"},{"name":"earth_photo","displayName":"Earth Photo","description":"Get a full-Earth photo taken from deep space by NASA DSCOVR satellite (1.5M km from Earth). Shows the entire sunlit side of the planet. Specify a date or get the latest available image.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format (optional — omit for latest available)"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Latest Earth photo from space","input":{}},{"description":"Earth photo on Christmas 2024","input":{"date":"2024-12-25"}}],"pricing":"free","returns":"Full-Earth photo from space with image_url, image_page, date, and centroid coordinates"},{"name":"image_metadata","displayName":"Image Metadata","description":"Get metadata about satellite imagery at a location — when it was captured, which satellite/source, and the resolution. Use this to check how recent the imagery is before or after taking a photo.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude (-90 to 90)"},"longitude":{"type":"number","description":"Longitude (-180 to 180)"}},"required":["latitude","longitude"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"When was Pentagon imagery captured?","input":{"latitude":38.871,"longitude":-77.056}},{"description":"Check imagery date for London","input":{"latitude":51.5074,"longitude":-0.1278}}],"pricing":"free","outputSchema":{"type":"object","properties":{"best_available":{"type":"object","description":"Best source with capture date and resolution"},"all_sources":{"type":"array","description":"All imagery sources available at this location"}}},"returns":"Imagery metadata with capture dates, sources (satellite names), and resolution in meters"}],"workflow":["image_metadata → capture_location","capture_dated","earth_photo"],"icon":"/icons/satellite-imagery.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with 3 skills: capture_location (Esri), capture_dated (NASA GIBS), earth_photo (NASA EPIC)"]},{"version":"0.02","date":"2026-03-25","changes":["Added image_metadata skill — returns capture date, source satellite, resolution for any location"]},{"version":"0.03","date":"2026-04-23","changes":["Returns image_url (permanent CDN link) instead of a downloaded file — reference material, not a created asset"]}],"premadePrompt":"Show me a satellite photo of [location]. I'd also like to see what it looked like on [date] — can you compare the two views?","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"youtube-thumbnails","displayName":"YouTube Thumbnails","subtitle":"AI-generated YouTube thumbnails in proven styles","about":"**YouTube Thumbnails** generates high-performing YouTube thumbnails using AI, optimized for the click patterns that top creators rely on. Choose from 10 proven thumbnail styles — reaction faces, before/after, versus, tutorials, listicles, product reveals, and more — all output at the exact 1280x720 resolution YouTube requires.\n\nA thumbnail is often the only thing standing between a viewer clicking your video or scrolling past. This tool applies the visual formulas that consistently drive clicks: bold contrasting text, high-emotion faces, strong compositions, and vibrant colors — the same patterns you see on channels with millions of subscribers.\n\n### What you can do\n- **generate_thumbnail** — create YouTube thumbnails from a video topic with choice of style, text overlay, reference images for brand consistency, and batch generation for A/B testing\n\n### Who it's for\nYouTube creators who want thumbnails that match the proven click patterns in their niche. Channels building visual consistency across their library. Teams running A/B tests on thumbnail variations before publishing. Anyone launching a YouTube channel who needs professional-looking thumbnails without a designer.\n\n### How to use it\n1. Use **generate_thumbnail** with your video topic and choose a style (reaction, before_after, versus, tutorial, etc.)\n2. Add a text_overlay for the bold text that appears across the thumbnail\n3. Provide reference_images with a photo of the presenter or subject for face consistency\n4. Set num_images to 4–6 to generate multiple variations for A/B testing\n\n### Getting started\nStart with a clear video topic and a style that fits your niche. For talking-head content, use the reaction style with a face reference image. For educational content, tutorial or listicle styles work well. Connect your brand style references for consistent visual identity across your whole channel.","version":"0.03","categories":["media","ai"],"currency":"USD","skills":[{"name":"generate_thumbnail","displayName":"Generate Thumbnail","description":"Generate YouTube thumbnails from a video topic. Supports 10 proven styles, text overlays, reference images for brand/face consistency, and batch generation for A/B testing.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"Video topic or thumbnail concept (e.g. \"unboxing the new iPhone\", \"how I lost 50 pounds in 6 months\")"},"style":{"type":"string","enum":["reaction","before_after","versus","tutorial","listicle","product","storytime","travel","gaming","food"],"description":"Thumbnail style: reaction, before_after, versus, tutorial, listicle, product, storytime, travel, gaming, food"},"text_overlay":{"type":"string","description":"Bold text to render on the thumbnail (3-5 words max, e.g. \"I QUIT MY JOB\", \"$10K IN 30 DAYS\"). Rendered in thick sans-serif with contrasting outline."},"mood":{"type":"string","description":"Emotional tone (e.g. \"shocking\", \"inspiring\", \"mysterious\", \"exciting\", \"cozy\", \"dramatic\")"},"color_scheme":{"type":"string","description":"Color guidance (e.g. \"red and yellow\", \"dark with neon accents\", \"warm golden tones\", \"blue gradient\")"},"reference_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"additional_details":{"type":"string","description":"Extra prompt details for fine-tuning the composition, subject, or scene (e.g. \"person wearing red hoodie on left side\", \"luxury car in background\")"},"num_images":{"type":"number","description":"Number of thumbnail variations to generate (1-12). Use 4-6 for A/B testing selection. Defaults to 1.","default":1},"model":{"type":"string","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"seed":{"type":"number","description":"Random seed for reproducible results."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output format. PNG (default) for text-heavy thumbnails, JPEG for photo-heavy. YouTube accepts JPG, PNG, GIF, BMP under 2MB."},"negative_prompt":{"type":"string","description":"Things to avoid in the thumbnail (appended to built-in exclusions for blurry, watermarks, etc.)"},"guidance_scale":{"type":"number","description":"How closely to follow the prompt (1-20). Higher = more literal. Model-dependent."},"enhance_prompt":{"type":"boolean","description":"Let the model expand and improve the prompt automatically."}},"required":["topic"]},"annotations":{},"examples":[{"description":"Generate a reaction-style thumbnail for a tech video","input":{"topic":"Unboxing the most expensive laptop ever made","style":"reaction","text_overlay":"$15,000 LAPTOP","num_images":4}},{"description":"Before/after thumbnail for a fitness transformation video","input":{"topic":"My 90-day body transformation journey","style":"before_after","mood":"inspiring","color_scheme":"warm golden tones"}},{"description":"Gaming thumbnail with neon style","input":{"topic":"Breaking the world record in Minecraft speedrun","style":"gaming","text_overlay":"WORLD RECORD","color_scheme":"dark with neon green accents","num_images":6}},{"description":"Food thumbnail for a recipe video","input":{"topic":"Perfect homemade pizza from scratch in 30 minutes","style":"food","mood":"cozy","additional_details":"Overhead shot of a wood-fired pizza with melted mozzarella and fresh basil"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"thumbnails":{"type":"array","description":"Generated thumbnail images","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width (1280px)"},"height":{"type":"number","description":"Height (720px)"},"content_type":{"type":"string","description":"MIME type"}}}},"num_thumbnails":{"type":"number","description":"Number of thumbnails generated"},"model":{"type":"string","description":"Model used for generation"},"seed":{"type":"number","description":"Seed for reproducibility"},"specs":{"type":"object","description":"YouTube thumbnail specifications used","properties":{"width":{"type":"number"},"height":{"type":"number"},"aspect_ratio":{"type":"string"},"format":{"type":"string"},"max_file_size":{"type":"string"}}},"prompt_used":{"type":"string","description":"Full prompt sent to the model"},"tips":{"type":"array","items":{"type":"string"},"description":"YouTube thumbnail best practice tips"}}},"contentType":"image","returns":"Thumbnail image(s) at 1280x720, downloadable via asset system, prompt used, YouTube specs, and best practice tips"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/youtube-thumbnails.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release — generate YouTube thumbnails with 10 proven styles, batch generation up to 12, reference image support"]},{"version":"0.02","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across thumbnails"]},{"version":"0.03","date":"2026-04-14","changes":["Accept personas from your file library"]}],"premadePrompt":"Generate a YouTube thumbnail for a video about [topic]. Use a [reaction/before_after/versus/tutorial] style with the text \"[bold text overlay]\".","usesPersonas":true,"usesStyleReferences":true,"styleReferenceSkills":["generate_thumbnail"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand colours, typography, and visual identity to thumbnails\n  - Match the channel's established thumbnail style for consistency\n  - Reference audience preferences for click-optimised design","produces":["content_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"energy-data","displayName":"Energy Data","subtitle":"Solar estimates and live electricity prices worldwide","about":"**Energy Data** gives you live electricity prices for any location and solar generation estimates for any address in the world. Whether you're evaluating rooftop solar economics or tracking energy costs across regions, both answers come back in one place.\n\nElectricity pricing auto-routes to the best regional source: UK gets half-hourly consumer and wholesale rates, Europe gets day-ahead prices for 40+ countries, Australia gets real-time spot prices, and the US gets monthly retail prices by state. Solar estimates work globally, detecting the right radiation dataset for any set of coordinates and returning annual and monthly generation figures.\n\n### What you can do\n- **electricity_prices** — get current electricity prices for any location, auto-routed to the best regional data source\n- **solar_estimate** — estimate annual solar energy production for a system of any size at any address\n\n### Who it's for\nHomeowners evaluating solar panel installations, energy analysts monitoring regional prices, researchers comparing electricity costs across countries, and businesses assessing energy costs for new locations.\n\n### How to use it\n1. Call **electricity_prices** with latitude and longitude for any location — it picks the right data source automatically.\n2. Call **solar_estimate** with coordinates and your system size in kilowatts to get annual and monthly production figures.\n3. Combine both: multiply the annual kWh estimate by the local electricity price to calculate potential savings.\n\n### Getting started\nCall **electricity_prices** with your coordinates to see current rates for your region. A NREL API key unlocks richer US solar data.","version":"0.02","categories":["data","analytics"],"currency":"USD","skills":[{"name":"electricity_prices","displayName":"Electricity Prices","description":"Get current electricity prices for any location. Auto-detects region and queries the best source: UK (half-hourly), EU (day-ahead, 40+ countries), Australia (real-time spot), or US (monthly retail by state).","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the location (-90 to 90)"},"longitude":{"type":"number","description":"Longitude of the location (-180 to 180)"}},"required":["latitude","longitude"]},"annotations":{},"examples":[{"description":"Electricity prices in London","input":{"latitude":51.5074,"longitude":-0.1278}},{"description":"Electricity prices in Berlin","input":{"latitude":52.52,"longitude":13.405}},{"description":"Electricity prices in Sydney","input":{"latitude":-33.87,"longitude":151.21}},{"description":"Electricity prices in New York","input":{"latitude":40.71,"longitude":-74.01}}],"pricing":"free","outputSchema":{"type":"object","properties":{"region":{"type":"string","description":"Detected region: UK, EU, Australia, US, or other"},"consumer":{"type":"object","description":"Consumer/retail prices with current rate and time series (UK)"},"wholesale":{"type":"object","description":"Wholesale/market prices with current rate and time series (UK, EU)"},"spot":{"type":"object","description":"Real-time spot prices with demand/generation (Australia)"},"retail":{"type":"object","description":"Monthly retail prices by sector: residential, commercial, industrial (US)"},"sources":{"type":"array","items":{"type":"string"},"description":"Data sources used"}}},"returns":"Current electricity prices from the best regional source — consumer and/or wholesale rates with time series"},{"name":"solar_estimate","displayName":"Solar Estimate","description":"Estimate solar energy production for any location worldwide. Returns annual and monthly kWh output, solar radiation, capacity factor, and nearest weather station details.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the location (-90 to 90)"},"longitude":{"type":"number","description":"Longitude of the location (-180 to 180)"},"system_capacity_kw":{"type":"number","description":"System size in kilowatts (default: 4)","default":4},"module_type":{"type":"string","enum":["standard","premium","thin_film"],"description":"Solar module type (default: standard)","default":"standard"},"roof_mount":{"type":"boolean","description":"Roof-mounted (true) or open rack (false). Default: true","default":true},"tilt_degrees":{"type":"number","description":"Panel tilt angle in degrees (default: 20)","default":20},"azimuth_degrees":{"type":"number","description":"Panel azimuth (180 = south-facing, default: 180)","default":180}},"required":["latitude","longitude"]},"annotations":{},"examples":[{"description":"Solar estimate for a 4kW system in Denver","input":{"latitude":39.74,"longitude":-105,"system_capacity_kw":4}},{"description":"Solar estimate for London UK","input":{"latitude":51.5074,"longitude":-0.1278}}],"pricing":"free","outputSchema":{"type":"object","properties":{"annual_kwh":{"type":"number","description":"Total AC energy output per year in kWh"},"annual_solar_radiation":{"type":"number","description":"Average annual solar radiation in kWh/m2/day"},"capacity_factor":{"type":"number","description":"System capacity factor"},"monthly_kwh":{"type":"array","description":"Monthly AC energy output (12 values, Jan-Dec) in kWh"},"station_info":{"type":"object","description":"Nearest weather station info"},"system_parameters":{"type":"object","description":"Input parameters used"}}},"returns":"Annual and monthly solar energy production (kWh), solar radiation, capacity factor, and weather station info"}],"icon":"/icons/energy-data.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with solar_estimate and utility_rates"]},{"version":"0.02","date":"2026-03-25","changes":["Replaced stale utility_rates (2012 data) with electricity_prices using live sources","UK: Octopus Energy (consumer half-hourly) + Elexon BMRS (wholesale)","EU: Energy-Charts day-ahead prices for 40+ countries","Australia: AEMO NEM real-time 5-min spot prices","US: EIA monthly retail prices by state","Auto-routes by coordinates to the best regional data source"]}],"premadePrompt":"Estimate how much electricity a [system size, e.g. 5kW] solar panel system would generate annually at [address or city]. Also show me current electricity prices for that location.","requirements":[{"name":"nrel_api_key","type":"secret","displayName":"NREL API Key","description":"API key for US Department of Energy Alternative Fuel Stations data — free at developer.nrel.gov","acquireUrl":"https://developer.nrel.gov/signup/","envFallback":"NREL_API_KEY"},{"name":"eia_api_key","type":"secret","displayName":"EIA API Key","description":"US Energy Information Administration API key — free at eia.gov/opendata/register.php","envFallback":"EIA_API_KEY"}],"credentials":[{"name":"nrel_api_key","type":"secret","displayName":"NREL API Key","description":"API key for US Department of Energy Alternative Fuel Stations data — free at developer.nrel.gov","acquireUrl":"https://developer.nrel.gov/signup/","envFallback":"NREL_API_KEY"},{"name":"eia_api_key","type":"secret","displayName":"EIA API Key","description":"US Energy Information Administration API key — free at eia.gov/opendata/register.php","envFallback":"EIA_API_KEY"}]},{"name":"government-spending","displayName":"Government Spending","subtitle":"US federal contracts, grants & budgets","about":"**Government Spending** gives you direct access to US federal spending data — contracts, grants, and loans across every agency. Find out who received funding, how much, and from which agency, or track how spending has changed over time across states and fiscal years.\n\nWhether you're investigating defense contractor spending, researching federal grants for nonprofits, or building a picture of government budget allocation, this tool pulls from official federal data sources so you always have authoritative figures.\n\n### What you can do\n- **search_awards** — find specific contracts or grants by keyword, recipient name, awarding agency, state, and date range\n- **list_agencies** — browse all federal agencies with budget authority, obligated amounts, and outlays\n- **spending_by_geography** — break down federal spending by state, county, or congressional district with per-capita figures\n- **spending_over_time** — track monthly, quarterly, or annual spending trends across any award type\n\n### Who it's for\nJournalists investigating federal contracts, researchers studying public expenditure, nonprofit organizations looking for grant recipients similar to them, and policy analysts tracking budget allocation across agencies and time periods.\n\n### How to use it\n1. Use **search_awards** to find specific grants or contracts by keyword (like \"cybersecurity\" or \"AI\") or by agency and recipient name\n2. Use **list_agencies** to explore the biggest spenders or find the right agency for a specific topic\n3. Use **spending_by_geography** to see which states receive the most federal funding in a given category\n4. Use **spending_over_time** to build a trend picture of how spending is changing\n\n### Getting started\nAll skills work immediately with no setup — data comes from the official USASpending.gov API.","version":"0.01","categories":["data","analytics","finance"],"currency":"USD","skills":[{"name":"search_awards","displayName":"Search Awards","description":"Search federal contracts, grants, and loans by keyword, agency, recipient, state, or date range. Returns award details including amounts, recipients, agencies, and descriptions.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","items":{"type":"string"},"description":"Search terms to match against award descriptions (e.g. [\"cybersecurity\", \"AI\"])"},"agency":{"type":"string","description":"Filter by awarding agency name (e.g. \"Department of Defense\", \"Department of Energy\")"},"recipient":{"type":"string","description":"Filter by recipient/contractor name (e.g. \"Lockheed Martin\", \"Deloitte\")"},"award_type":{"type":"string","enum":["contracts","grants","loans","all"],"default":"all","description":"Type of federal award to search"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"},"state":{"type":"string","description":"Two-letter US state code to filter by place of performance (e.g. \"CA\", \"TX\", \"VA\")"},"limit":{"type":"number","default":10,"description":"Number of results to return (max 50)"},"sort_by":{"type":"string","enum":["amount","date"],"default":"amount","description":"Sort results by award amount or start date"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search cybersecurity contracts","input":{"keywords":["cybersecurity"],"award_type":"contracts"}},{"description":"Find grants to a specific recipient","input":{"recipient":"MIT","award_type":"grants","limit":5}},{"description":"Department of Energy contracts in California","input":{"agency":"Department of Energy","state":"CA","award_type":"contracts"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"awards":{"type":"array","description":"Award records with id, recipient, amount, agency, dates, type, description"},"total_results":{"type":"number","description":"Total matching awards"},"has_next":{"type":"boolean","description":"Whether more results are available"}}},"returns":"Federal award records with recipient, amount, agency, dates, and description"},{"name":"list_agencies","displayName":"List Agencies","description":"List all US federal agencies with their budget authority, obligated amounts, and outlays. Useful for identifying the biggest spenders and comparing agency budgets.","inputSchema":{"type":"object","properties":{"sort_by":{"type":"string","enum":["name","budget","spending"],"default":"budget","description":"Sort agencies by name, budget authority, or obligated spending"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"All agencies sorted by budget","input":{}},{"description":"Agencies sorted by name","input":{"sort_by":"name"}},{"description":"Agencies ranked by spending","input":{"sort_by":"spending"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"agencies":{"type":"array","description":"Agencies with name, abbreviation, code, budget, obligated, outlays"},"total":{"type":"number","description":"Total number of agencies"}}},"returns":"All federal agencies with budget authority, obligations, and outlay amounts"},{"name":"spending_by_geography","displayName":"Spending by Geography","description":"Break down federal spending by state, county, or congressional district. Shows total amounts, population, and per-capita spending for each region.","inputSchema":{"type":"object","properties":{"award_type":{"type":"string","enum":["contracts","grants","loans","all"],"default":"all","description":"Type of federal award to include"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format (default: start of current fiscal year)"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format (default: end of current fiscal year)"},"geo_level":{"type":"string","enum":["state","county","district"],"default":"state","description":"Geographic granularity: state, county, or congressional district"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Contract spending by state","input":{"award_type":"contracts","geo_level":"state"}},{"description":"Grant spending by county","input":{"award_type":"grants","geo_level":"county"}},{"description":"All spending by state in FY2025","input":{"start_date":"2024-10-01","end_date":"2025-09-30"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"regions":{"type":"array","description":"Regions with code, name, amount, population, per_capita"},"total_amount":{"type":"number","description":"Total spending across all regions"}}},"returns":"Federal spending by geographic region with amounts, population, and per-capita figures"},{"name":"spending_over_time","displayName":"Spending Over Time","description":"Track federal spending trends over time by month, quarter, or fiscal year. Shows how spending changes across periods for any award type.","inputSchema":{"type":"object","properties":{"award_type":{"type":"string","enum":["contracts","grants","loans","all"],"default":"contracts","description":"Type of federal award to track"},"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format (default: start of current fiscal year)"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format (default: end of current fiscal year)"},"group_by":{"type":"string","enum":["month","quarter","fiscal_year"],"default":"month","description":"Time granularity for aggregation"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Monthly contract spending this fiscal year","input":{"award_type":"contracts","group_by":"month"}},{"description":"Quarterly grant spending","input":{"award_type":"grants","group_by":"quarter"}},{"description":"Annual spending over 5 years","input":{"award_type":"all","group_by":"fiscal_year","start_date":"2021-10-01","end_date":"2026-09-30"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"periods":{"type":"array","description":"Time periods with fiscal_year, month/quarter, and amount"},"total_amount":{"type":"number","description":"Total spending across all periods"}}},"returns":"Federal spending amounts aggregated by time period with totals"}],"icon":"/icons/government-spending.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with 4 skills"]}],"premadePrompt":"How much has the US federal government spent on [topic, e.g. \"cybersecurity\" or \"defense\"] this year, and which agencies or contractors received the most funding?"},{"name":"places-search","displayName":"Places Search","subtitle":"Find restaurants, shops & venues worldwide","about":"**Places Search** finds restaurants, cafes, hotels, shops, and any point of interest in 200+ countries. Search by name, category, or type anywhere in the world and get back ratings, hours, contact details, and reviews — all in one query. It works globally, covering the US, UK, Europe, Asia-Pacific, and beyond.\n\nThe tool draws from multiple venue databases to maximise coverage and result quality. For specific coordinates, the nearby search finds what's within walking or driving distance. For deeper research, place details gives you the full picture — opening hours, phone number, website, user reviews, and price level.\n\n### What you can do\n- Search any city or location for restaurants, hotels, cafes, shops, or any place category\n- Find places near specific GPS coordinates with a configurable radius\n- Filter results by open now, minimum price level, or maximum price level\n- Sort results by relevance, rating, or distance\n- Get full place details including opening hours, reviews, phone number, and website\n\n### Who it's for\nTravellers planning trips, local business researchers, developers building location-aware features, journalists researching venues, and anyone who needs to find and compare places globally.\n\n### How to use it\n1. Use **search_places** with a query and location — e.g. \"sushi restaurants\" in \"Tokyo, Japan\"\n2. Use **nearby_places** with GPS coordinates to find what's around a specific spot\n3. Use **place_details** with a place ID from search results to get full hours, reviews, and contact info\n4. Filter search results with open_now, sort, min_price, and max_price parameters\n\n### Getting started\nNo setup required for basic searches — results pull from multiple global venue databases automatically.","version":"0.03","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_places","displayName":"Search Places","description":"Search for places by name, type, or category with optional location filtering","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"What to search for — e.g. \"sushi restaurants\", \"coffee shops\", \"hotels\""},"location":{"type":"string","description":"City name like \"London, UK\" or coordinates like \"51.5074,-0.1278\""},"radius_meters":{"type":"number","description":"Search radius in meters (default: 10000)","default":10000},"limit":{"type":"number","description":"Max results to return (default: 10, max: 20)","default":10,"maximum":20},"open_now":{"type":"boolean","description":"Only return places that are currently open"},"sort":{"type":"string","description":"Sort order for results","enum":["relevance","rating","distance"],"default":"relevance"},"min_price":{"type":"number","description":"Minimum price level (1-4)","minimum":1,"maximum":4},"max_price":{"type":"number","description":"Maximum price level (1-4)","minimum":1,"maximum":4}},"required":["query"]},"annotations":{},"examples":[{"description":"Find sushi restaurants in London","input":{"query":"sushi restaurants","location":"London, UK"}},{"description":"Search for coffee near coordinates","input":{"query":"coffee","location":"40.7128,-74.0060","limit":5}}],"pricing":"paid","returns":"Array of places with name, address, coordinates, categories, rating, price level, and source"},{"name":"nearby_places","displayName":"Nearby Places","description":"Find places near specific coordinates with optional category filtering","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude of the center point"},"longitude":{"type":"number","description":"Longitude of the center point"},"radius_meters":{"type":"number","description":"Search radius in meters (default: 1000)","default":1000},"category":{"type":"string","description":"Category to filter by — e.g. \"restaurant\", \"hotel\", \"cafe\", \"pharmacy\""},"limit":{"type":"number","description":"Max results to return (default: 10, max: 20)","default":10,"maximum":20}},"required":["latitude","longitude"]},"annotations":{},"examples":[{"description":"Find restaurants near Times Square","input":{"latitude":40.758,"longitude":-73.9855,"category":"restaurant","limit":5}},{"description":"What is nearby in central Paris","input":{"latitude":48.8566,"longitude":2.3522}}],"pricing":"paid","returns":"Array of nearby places with name, address, coordinates, categories, rating, and distance"},{"name":"place_details","displayName":"Place Details","description":"Get full details for a specific place including reviews, hours, and contact info","inputSchema":{"type":"object","properties":{"place_id":{"type":"string","description":"Place ID from a previous search result (Foursquare fsq_id or Google place_id)"},"source":{"type":"string","description":"Which source the ID is from (auto-detected if omitted)","enum":["foursquare","google"]}},"required":["place_id"]},"annotations":{},"examples":[{"description":"Get details for a Foursquare place","input":{"place_id":"4b7b5ee0f964a52004432fe3"}},{"description":"Get details for a Google place","input":{"place_id":"ChIJN1t_tDeuEmsRUsoyG83frY4","source":"google"}}],"pricing":"paid","returns":"Full place details including name, address, hours, phone, website, reviews, and rating"}],"icon":"/icons/places-search.webp","changelog":[{"version":"0.01","date":"2026-03-25","changes":["Initial release with dual-source search, nearby, and details"]},{"version":"0.02","date":"2026-05-08","changes":["Ratings, price level, and contact details now returned for all Foursquare results","Searches now continue via the remaining source when one source returns a configuration error"]},{"version":"0.03","date":"2026-05-08","changes":["place_details no longer cross-routes Foursquare-format IDs to Google (and vice versa) when only the other source is available — eliminates a class of \"Place ID is not valid\" errors when source is auto-detected"]}],"premadePrompt":"Find the best [type of place, e.g. Italian restaurants / coffee shops / hotels] in [location]. Show me ratings, opening hours, and contact details for the top options.","requirements":[{"name":"foursquare","type":"secret","displayName":"Foursquare API Key","description":"API key for Foursquare place search","envFallback":"FOURSQUARE_API_KEY"},{"name":"google_places","type":"secret","displayName":"Google Places API Key","description":"API key for Google Places search (enriches results)","envFallback":"GOOGLE_PLACES_API_KEY"}],"credentials":[{"name":"foursquare","type":"secret","displayName":"Foursquare API Key","description":"API key for Foursquare place search","envFallback":"FOURSQUARE_API_KEY"},{"name":"google_places","type":"secret","displayName":"Google Places API Key","description":"API key for Google Places search (enriches results)","envFallback":"GOOGLE_PLACES_API_KEY"}]},{"name":"compress","displayName":"Compress","subtitle":"Compress video, images, and PDFs up to 90% smaller","about":"**Compress** shrinks video, image, and PDF files by up to 90% while preserving visual quality. Pass one file or a whole batch — it auto-detects each file type and applies the right compression pipeline.\n\nOversized files cause slow page loads, email bounces, and storage bloat. This tool fixes that in one call. For video it supports modern codecs including H.265, VP9, and AV1. For images it can convert to WebP or AVIF for dramatically smaller files at the same visual quality. For PDFs it balances size against print fidelity. The defaults work well for most use cases — you only need to customize when you have specific requirements.\n\n### What you can do\n- **compress** — reduce one or more video, image, or PDF files with configurable quality, codec, format, and resolution settings\n\n### Who it's for\nAnyone who handles media files regularly: content creators reducing clips for social, developers optimizing assets for the web, designers sharing large files via email, or teams managing document storage.\n\n### How to use it\n1. Use **compress** and pass one or more file URLs in the files array\n2. Set quality to control the compression level (high is the default, low gives maximum compression)\n3. For images, set image_format to webp or avif for the best size reduction\n4. For video, pick a codec: h265 or av1 gives smaller files than the h264 default, at the cost of slightly longer processing\n5. For PDFs, adjust pdf_quality to balance file size against print fidelity","version":"0.01","categories":["media","productivity"],"currency":"USD","skills":[{"name":"compress","displayName":"Compress Files","description":"Compress one or more video, image, or PDF files with configurable quality, codec, format, and resolution settings.","inputSchema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string"},"description":"File as ToolRouter file ID or hosted HTTP(S) URL."},"quality":{"type":"string","enum":["highest","high","good","medium","low"],"default":"high","description":"Compression quality preset (highest = minimal compression, low = maximum compression)"},"video_codec":{"type":"string","enum":["h264","h265","vp9","av1"],"default":"h264","description":"Video codec for encoding"},"video_format":{"type":"string","enum":["same","mp4","webm"],"default":"same","description":"Output video container format"},"image_format":{"type":"string","enum":["same","webp","jpg","png","avif"],"default":"same","description":"Output image format"},"pdf_quality":{"type":"string","enum":["best","high","balanced","low"],"default":"high","description":"PDF compression quality (best = minimal compression, low = maximum)"},"target_fps":{"type":"string","enum":["same","60","30","24","15"],"default":"same","description":"Target video frame rate (only reduces, never increases)"},"remove_audio":{"type":"boolean","default":false,"description":"Strip audio track from video files"},"strip_metadata":{"type":"boolean","default":false,"description":"Remove EXIF, IPTC, and ICC metadata from files"},"max_width":{"type":"integer","description":"Maximum output width in pixels (aspect ratio preserved)"},"max_height":{"type":"integer","description":"Maximum output height in pixels (aspect ratio preserved)"}},"required":["files"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"cpu"}},"examples":[{"description":"Compress a video to reduce file size for sharing","input":{"files":["https://example.com/demo-video.mp4"]}},{"description":"Compress multiple images to WebP format at medium quality","input":{"files":["https://example.com/photo1.jpg","https://example.com/photo2.png"],"image_format":"webp","quality":"medium"}},{"description":"Compress a PDF for email attachment","input":{"files":["https://example.com/report.pdf"],"pdf_quality":"balanced"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"original_filename":{"type":"string","description":"Original file name"},"file_type":{"type":"string","description":"Detected file type: video, image, or pdf"},"original_size_bytes":{"type":"number","description":"Original file size"},"compressed_size_bytes":{"type":"number","description":"Compressed file size"},"reduction_percent":{"type":"number","description":"Size reduction percentage"},"settings_applied":{"type":"object","description":"Compression settings used"}}}},"total_original_bytes":{"type":"number","description":"Combined original size"},"total_compressed_bytes":{"type":"number","description":"Combined compressed size"},"total_reduction_percent":{"type":"number","description":"Overall reduction percentage"},"files_processed":{"type":"number","description":"Number of files compressed"}}},"returns":"Compressed file URLs with original and compressed sizes, reduction percentage, and applied settings for each file"}],"icon":"/icons/compress.webp","changelog":[{"version":"0.01","date":"2026-03-27","changes":["Initial release with video, image, and PDF compression"]}],"premadePrompt":"Compress these files for me: [file URL or URLs]. I need to reduce the file size as much as possible while keeping the quality reasonable for sharing online.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"supply-chain-risk","displayName":"Supply Chain Risk","subtitle":"Package, dependency & exploit risk","about":"**Supply Chain Risk** audits open-source packages for known vulnerabilities, exploited CVEs, and dependency exposure across every major ecosystem — npm, PyPI, Maven, Go, Cargo, NuGet, RubyGems, and more. It turns a package name and version into a clear risk score in seconds.\n\nSecurity teams and developers use it to triage dependency risk before shipping, catch vulnerabilities in pull requests, and investigate specific advisories. Each package audit returns a deterministic 0–100 risk score, severity breakdown, CISA KEV hits, EPSS exploitability probability, provenance checks, OpenSSF Scorecard health, fixed versions, and vulnerable dependency paths — everything you need to make a go/no-go call.\n\n### What you can do\n- **package_risk** — full security audit for one exact package version with risk score, advisories, and fix recommendations\n- **batch_risk** — rank up to 10 packages by risk in one call — great for triaging a dependency list\n- **dependency_graph** — fetch the full dependency tree for a package with per-node vulnerability counts and vulnerable paths\n- **advisory_details** — look up a specific CVE, GHSA, or OSV advisory by ID for full details\n\n### Who it's for\nSecurity engineers, developers, and DevSecOps teams who need to understand and communicate dependency risk. Also useful for anyone doing vendor due diligence or supply chain compliance work.\n\n### How to use it\n1. Use **package_risk** with a package URL like pkg:npm/lodash@4.17.20 to get an instant risk score and advisory list\n2. For a list of dependencies, use **batch_risk** to get a ranked table sorted by descending risk\n3. Use **dependency_graph** to see which transitive dependencies are vulnerable and which direct upgrades would fix the most paths\n4. When you see a CVE or GHSA ID in results, use **advisory_details** to open the full record\n\n### Getting started\nNo setup needed — all four skills work immediately with no credentials required.","version":"0.02","categories":["security","development","analytics"],"currency":"USD","skills":[{"name":"package_risk","displayName":"Package Risk","description":"Assess the security risk of one exact package version. Returns advisories, severity counts, KEV hits, exploitability signals, provenance, repository health, fixed versions, and a deterministic risk score.","inputSchema":{"type":"object","properties":{"package_url":{"type":"string","description":"Package URL including version (preferred). Example: pkg:npm/lodash@4.17.20 or pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1"},"ecosystem":{"type":"string","description":"Package ecosystem when not using package_url. Common values: npm, PyPI, Go, crates.io, Maven, NuGet, RubyGems, Packagist, Debian, Ubuntu, Alpine."},"name":{"type":"string","description":"Package name when not using package_url. Maven uses group:artifact (for example org.apache.logging.log4j:log4j-core)."},"version":{"type":"string","description":"Exact package version when not using package_url."},"include_latest":{"type":"boolean","description":"Look up the latest known version from deps.dev when the ecosystem supports it.","default":true},"page":{"type":"number","description":"Page number for advisory pagination (default 1).","default":1},"per_page":{"type":"number","description":"Number of advisories to return per page (default 10, max 25).","default":10}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Audit a vulnerable lodash release by package URL","input":{"package_url":"pkg:npm/lodash@4.17.20"}},{"description":"Audit a vulnerable Log4j core release","input":{"ecosystem":"Maven","name":"org.apache.logging.log4j:log4j-core","version":"2.14.1"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"package":{"type":"object","description":"Normalized package coordinates used for the lookup"},"deps_supported":{"type":"boolean","description":"Whether deps.dev enrichment was available for this ecosystem"},"published_at":{"type":"string","description":"Package publish timestamp from deps.dev when available"},"is_default_version":{"type":"boolean","description":"Whether the queried version is the default or latest version in deps.dev"},"latest_version":{"type":"string","description":"Latest known version when deps.dev lookup succeeded"},"latest_is_current":{"type":"boolean","description":"Whether the queried version matches the latest known version"},"licenses":{"type":"array","description":"Detected package licenses from deps.dev"},"links":{"type":"array","description":"Homepage, source, issue tracker, and registry links when available"},"registries":{"type":"array","description":"Registry URLs reported by deps.dev for the package version"},"provenance":{"type":"object","description":"Attestations, related projects, and source repository provenance derived from deps.dev and advisory metadata"},"repository":{"type":"object","description":"Repository health derived from deps.dev project metadata and OpenSSF Scorecard when a source repository is available"},"exploitability":{"type":"object","description":"Exploitability summary across the matched advisories, including EPSS, CVSS, and malware counts"},"advisories_count":{"type":"number","description":"Total advisories matched for the exact version"},"kev_count":{"type":"number","description":"How many advisories map to CISA KEV exploited CVEs"},"severity_counts":{"type":"object","description":"Counts grouped by CRITICAL/HIGH/MEDIUM/LOW/UNKNOWN"},"risk_score":{"type":"number","description":"Deterministic 0-100 score based on severity counts and KEV hits"},"risk_level":{"type":"string","description":"Risk band derived from the score: minimal, low, medium, high, or critical"},"vulnerabilities":{"type":"array","description":"Paginated advisory details with aliases, severity, fixed versions, KEV, CVSS, EPSS, malware, and references"},"total_vulnerabilities":{"type":"number","description":"Total advisories before pagination"},"page":{"type":"number","description":"Current advisory page"},"per_page":{"type":"number","description":"Current advisory page size"},"format":{"type":"string","description":"Interactive renderer format name"},"format_data":{"type":"object","description":"Structured report payload for MCP Apps rendering"}}},"returns":"Risk score, severity breakdown, KEV hits, package metadata, and paginated advisory details for one package version"},{"name":"batch_risk","displayName":"Batch Risk Audit","description":"Audit up to 10 exact package versions in one request. Returns a sortable table with risk scores, advisory counts, KEV hits, exploitability signals, provenance, and repository health.","inputSchema":{"type":"object","properties":{"packages":{"type":"array","description":"List of package descriptors. Each item supports package_url or ecosystem, name, and version. Max 10 items.","items":{"type":"object","properties":{"package_url":{"type":"string","description":"Package URL including version"},"ecosystem":{"type":"string","description":"Ecosystem name when not using package_url"},"name":{"type":"string","description":"Package name when not using package_url"},"version":{"type":"string","description":"Exact version when not using package_url"}}}},"per_package_limit":{"type":"number","description":"How many advisory records to load internally per package for scoring (default 5, max 25).","default":5}},"required":["packages"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":20,"mode":"io"}},"examples":[{"description":"Audit a mixed npm and PyPI package list","input":{"packages":[{"package_url":"pkg:npm/lodash@4.17.20"},{"package_url":"pkg:pypi/django@5.0.3"}]}},{"description":"Audit Maven and NuGet packages together","input":{"packages":[{"ecosystem":"Maven","name":"org.apache.logging.log4j:log4j-core","version":"2.14.1"},{"ecosystem":"NuGet","name":"Newtonsoft.Json","version":"13.0.1"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"package_count":{"type":"number","description":"Number of package versions audited"},"results":{"type":"array","description":"Risk table rows sorted by descending risk score"},"format":{"type":"string","description":"Interactive renderer format name"},"format_data":{"type":"object","description":"Structured table payload for MCP Apps rendering"}}},"returns":"A ranked table of package versions with risk scores, advisory counts, KEV hits, and severity breakdowns"},{"name":"dependency_graph","displayName":"Dependency Graph","description":"Fetch the dependency graph for one package version on ecosystems supported by deps.dev. Returns direct and transitive dependencies with per-node vulnerability counts from OSV, plus vulnerable paths and remediation candidates.","inputSchema":{"type":"object","properties":{"package_url":{"type":"string","description":"Package URL including version. Best for npm, PyPI, Go, Cargo, Maven, NuGet, and RubyGems packages."},"ecosystem":{"type":"string","description":"deps.dev-supported ecosystem when not using package_url: npm, pypi, go, cargo, maven, nuget, or rubygems."},"name":{"type":"string","description":"Package name when not using package_url."},"version":{"type":"string","description":"Exact package version when not using package_url."},"depth":{"type":"number","description":"Dependency graph depth for deps.dev (default 3, max 6).","default":3},"max_nodes":{"type":"number","description":"Maximum dependency nodes to return in the response table (default 100, max 150).","default":100}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":25,"mode":"io"}},"examples":[{"description":"Inspect the React dependency graph","input":{"package_url":"pkg:npm/react@18.2.0"}},{"description":"Inspect a Go dependency graph","input":{"ecosystem":"Go","name":"github.com/gin-gonic/gin","version":"v1.10.0"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"package":{"type":"object","description":"Normalized package coordinates used for the graph lookup"},"deps_supported":{"type":"boolean","description":"Always true on successful graph responses"},"depth":{"type":"number","description":"Dependency depth used for the deps.dev request"},"total_nodes":{"type":"number","description":"Total dependency nodes returned by deps.dev before trimming"},"returned_nodes":{"type":"number","description":"Dependency nodes included in this response after trimming"},"direct_dependencies":{"type":"number","description":"How many direct dependencies the package has"},"indirect_dependencies":{"type":"number","description":"How many indirect dependencies the package has"},"vulnerable_nodes":{"type":"number","description":"How many returned nodes have one or more OSV advisories"},"unique_vulnerability_ids":{"type":"array","description":"Unique advisory IDs seen across the returned graph nodes"},"vulnerable_paths_count":{"type":"number","description":"How many vulnerable dependency paths were found across the full graph"},"vulnerable_paths":{"type":"array","description":"Top vulnerable dependency paths from the root package to affected nodes"},"remediation_candidates_count":{"type":"number","description":"How many direct dependency upgrade candidates were inferred from the vulnerable paths"},"remediation_candidates":{"type":"array","description":"Direct dependencies that would remove the most vulnerable subpaths if upgraded or replaced"},"nodes":{"type":"array","description":"Dependency nodes with relation type and vulnerability counts"},"truncated":{"type":"boolean","description":"Whether the response trimmed nodes down to max_nodes"},"format":{"type":"string","description":"Interactive renderer format name"},"format_data":{"type":"object","description":"Structured table payload for MCP Apps rendering"}}},"returns":"Dependency graph nodes with direct or indirect relation types, vulnerable paths, and remediation candidates"},{"name":"advisory_details","displayName":"Advisory Details","description":"Open a single advisory by ID. Works well for GHSA, CVE, and ecosystem-specific IDs and returns aliases, affected packages, fixed versions, KEV status, exploitability, and GitHub-reviewed metadata when available.","inputSchema":{"type":"object","properties":{"advisory_id":{"type":"string","description":"Exact advisory identifier, for example GHSA-29mw-wpgm-hmr9, CVE-2020-28500, or PYSEC-2024-57."}},"required":["advisory_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Open a GitHub security advisory","input":{"advisory_id":"GHSA-29mw-wpgm-hmr9"}},{"description":"Open a Python advisory by PYSEC ID","input":{"advisory_id":"PYSEC-2024-57"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Canonical advisory ID returned by OSV"},"aliases":{"type":"array","description":"Alias IDs such as CVE, GHSA, or ecosystem-specific identifiers"},"summary":{"type":"string","description":"Short advisory summary when the source provides one"},"severity":{"type":"string","description":"Normalized severity band derived from OSV metadata"},"cwes":{"type":"array","description":"Related CWE identifiers when present"},"published":{"type":"string","description":"Advisory publish timestamp"},"modified":{"type":"string","description":"Last modified timestamp"},"fixed_versions":{"type":"array","description":"Fixed versions extracted from OSV affected ranges"},"references":{"type":"array","description":"Reference URLs attached to the advisory"},"affected_packages":{"type":"array","description":"Affected package names, ecosystems, and purls from OSV"},"kev":{"type":"object","description":"Matching CISA KEV entry when one of the aliases is a KEV-listed CVE"},"sources":{"type":"array","description":"Data sources that contributed to the normalized advisory record"},"advisory_type":{"type":"string","description":"GitHub advisory type when available, such as reviewed or malware"},"advisory_url":{"type":"string","description":"Primary advisory URL when the source provides one"},"source_code_location":{"type":"string","description":"Repository location attached by GitHub when available"},"github_reviewed_at":{"type":"string","description":"GitHub reviewed timestamp when available"},"cvss_score":{"type":"number","description":"Highest available CVSS score from GitHub when available"},"cvss_vector":{"type":"string","description":"Associated CVSS vector string when available"},"epss_percentage":{"type":"number","description":"EPSS probability when the advisory has a CVE with EPSS coverage"},"epss_percentile":{"type":"number","description":"EPSS percentile when the advisory has a CVE with EPSS coverage"},"vulnerable_version_range":{"type":"string","description":"GitHub vulnerable version range summary when available"},"format":{"type":"string","description":"Interactive renderer format name"},"format_data":{"type":"object","description":"Structured detail payload for MCP Apps rendering"}}},"returns":"One advisory record with aliases, affected packages, fixed versions, KEV enrichment, exploitability, and source metadata when available"}],"workflow":["package_risk","batch_risk","dependency_graph","package_risk → advisory_details","dependency_graph → advisory_details"],"author":{"name":"Humanleap","url":"https://toolrouter.com","email":"hello@toolrouter.com"},"repository":"https://github.com/Humanleap/toolrouter.git","license":"UNLICENSED","homepage":"https://toolrouter.com/tools/supply-chain-risk","icon":"/icons/supply-chain-risk.webp","changelog":[{"version":"0.01","date":"2026-03-27","changes":["Added exploitability enrichment via FIRST EPSS and GitHub global advisories","Added deps.dev provenance and related-project metadata plus OpenSSF Scorecard repository health","Added dependency remediation candidates and vulnerable path summaries"]},{"version":"0.02","date":"2026-03-27","changes":["Initial release with package_risk, batch_risk, dependency_graph, and advisory_details"]}],"premadePrompt":"Check [package name]@[version] for known vulnerabilities and tell me the risk score. If there are critical issues, what versions have them fixed?"},{"name":"grants-finder","displayName":"Grants Finder","subtitle":"Find grants, funding fits, and precedent","about":"**Grants Finder** searches live grant opportunities and funding history across the US, UK, Australia, and Japan from official government sources. It also covers EU and UK precedent funding records, so you can find both open calls and historical awards for the research you're doing.\n\nGrant research is time-consuming because the information is spread across dozens of government portals in different formats. This tool normalizes it into one interface — search, score your fit, dig into details, and monitor deadlines without switching between Grants.gov, Find a Grant, J-Grants, and UKRI.\n\n### What you can do\n- **search_opportunities** — search live funding calls across US (Grants.gov), UK (Find a Grant), Australia (Business.gov.au), and Japan (J-Grants)\n- **opportunity_details** — open a specific grant record for full eligibility, deadlines, and documents\n- **search_grant_history** — find past UKRI and EU CORDIS funded projects for precedent research\n- **match_applicant_profile** — rank live opportunities against your organization's geography, type, sector, and funding needs\n- **watchlist_snapshot** — get a compact digest of the most urgent open opportunities, sorted by deadline or urgency\n\n### Who it's for\nNonprofits, universities, startups, and research organizations looking for funding across multiple countries. Grant writers who need to quickly assess fit before investing time in an application. Consultants building funding pipelines for clients.\n\n### How to use it\n1. Start with **search_opportunities** using a keyword or sector — pass a region filter like US, UK, AU, or JP to focus results\n2. Use **opportunity_details** to open a specific record and check eligibility and deadline\n3. Use **match_applicant_profile** with your organization's details to get a ranked fit-scored shortlist\n4. Use **watchlist_snapshot** for regular deadline monitoring sorted by urgency\n\n### Getting started\nAll skills work immediately with no setup — data comes directly from official government funding portals.","version":"0.01","categories":["data","search","finance"],"currency":"USD","skills":[{"name":"search_opportunities","displayName":"Search Opportunities","description":"Search live and recent grant opportunities across official US, UK, Australian, and Japanese funding sources with filters for geography, applicant type, dates, amount bands, and funders.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword, sector, program, or theme to search for"},"source":{"type":"string","description":"Opportunity source to search: all, grants_gov, find_a_grant, business_gov_au, or jgrants","enum":["all","grants_gov","find_a_grant","business_gov_au","jgrants"],"default":"all"},"regions":{"type":"array","items":{"type":"string"},"description":"Market filter such as US, UK, AU, JP, EU, APAC, or ASIA"},"target_locations":{"type":"array","items":{"type":"string"},"description":"Country, city, or jurisdiction strings to match against source location fields"},"applicant_types":{"type":"array","items":{"type":"string"},"description":"Applicant organization types or eligibility labels to match"},"funder_name":{"type":"string","description":"Funder, department, or agency name to narrow the search"},"published_from":{"type":"string","description":"Only include programs published on or after this date (YYYY-MM-DD)"},"deadline_before":{"type":"string","description":"Only include opportunities closing on or before this date (YYYY-MM-DD)"},"amount_min":{"type":"number","description":"Minimum funding amount to include when the source exposes one"},"amount_max":{"type":"number","description":"Maximum funding amount to include when the source exposes one"},"open_only":{"type":"boolean","description":"When true, prefer currently open opportunities only","default":true},"include_closed":{"type":"boolean","description":"When true, keep closed or archived results when a source exposes them","default":false},"limit":{"type":"number","description":"Maximum opportunities to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find AI and research-focused grant opportunities across all live sources","input":{"query":"artificial intelligence research","source":"all","regions":["US","UK","JP"],"limit":6}},{"description":"Find UK government grants for manufacturing before a deadline","input":{"source":"find_a_grant","query":"manufacturing","deadline_before":"2026-06-30","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Total number of matching opportunities found before paging"},"source_totals":{"type":"object","description":"Per-source counts behind the current search"},"skipped_sources":{"type":"array","description":"Sources that were skipped because they were unavailable for this request"},"opportunities":{"type":"array","description":"Normalized opportunity records with deadlines, funding ranges, and source links"},"count":{"type":"number","description":"Number of opportunities returned in this response"}}},"returns":"Normalized live grant opportunities with funders, deadlines, funding bands, and source metadata"},{"name":"opportunity_details","displayName":"Opportunity Details","description":"Open one canonical grant record so you can inspect the normalized summary, eligibility, deadlines, funding text, related documents, and official source URL.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Source that owns the grant opportunity record","enum":["grants_gov","find_a_grant","business_gov_au","jgrants"]},"record_id":{"type":"string","description":"Record identifier returned by search_opportunities"},"opportunity_id":{"type":"string","description":"Optional alias for record_id"},"opportunity_number":{"type":"string","description":"Optional alias for record_id when a source uses an opportunity number"},"id":{"type":"string","description":"Optional alias for record_id when you already have a source-specific id"}},"required":["source"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Open a Grants.gov opportunity by numeric record id","input":{"source":"grants_gov","record_id":"361703"}},{"description":"Open a J-Grants subsidy detail record","input":{"source":"jgrants","record_id":"a0WJ200000CDIvKMAX"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"record_id":{"type":"string","description":"Canonical record identifier used for the lookup"},"source_url":{"type":"string","description":"Best official landing page or detail URL for the opportunity"},"deadline_at":{"type":"string","description":"Closing date or deadline when available"},"applicant_types":{"type":"array","description":"Applicant or eligibility labels extracted from the detail record"},"documents":{"type":"array","description":"Related links or application documents exposed by the source"}}},"returns":"The normalized detail record for one grant opportunity with summary, eligibility, funding text, and source documents"},{"name":"search_grant_history","displayName":"Search Grant History","description":"Search funded-project and research-grant history across official UKRI and EU CORDIS sources to find precedent awards, funder behavior, and recent program context.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword, topic, research theme, or program phrase to search history for"},"source":{"type":"string","description":"History source to search: all, ukri_gtr, or cordis","enum":["all","ukri_gtr","cordis"],"default":"all"},"regions":{"type":"array","items":{"type":"string"},"description":"Market filter such as UK or EU to keep history searches geographically tight"},"organization_name":{"type":"string","description":"Lead organization, university, lab, or consortium name to match"},"funder_name":{"type":"string","description":"Funder name to narrow the history search"},"funded_from":{"type":"string","description":"Only include records starting on or after this date (YYYY-MM-DD)"},"limit":{"type":"number","description":"Maximum grant-history records to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find UKRI and EU precedent funding for artificial intelligence","input":{"query":"artificial intelligence","source":"all","regions":["UK","EU"],"limit":6}},{"description":"Find recent UKRI grants awarded to a named university","input":{"source":"ukri_gtr","organization_name":"University of Cambridge","funded_from":"2024-01-01","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Total number of matching history records found before paging"},"source_totals":{"type":"object","description":"Per-source counts behind the current search"},"skipped_sources":{"type":"array","description":"Sources that were skipped because they were unavailable for this request"},"grant_history":{"type":"array","description":"Normalized funded-project and precedent-grant history records"},"count":{"type":"number","description":"Number of history records returned in this response"}}},"returns":"Normalized funding-history records with organizations, funders, dates, amounts, and official source links"},{"name":"match_applicant_profile","displayName":"Match Applicant Profile","description":"Rank live opportunities against an applicant profile using geography, applicant-type fit, keyword and sector relevance, funding need, deadline urgency, and preferred-funder signals.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Opportunity source focus: all, grants_gov, find_a_grant, business_gov_au, or jgrants","enum":["all","grants_gov","find_a_grant","business_gov_au","jgrants"],"default":"all"},"query":{"type":"string","description":"Core mission, research area, or funding theme for text relevance"},"regions":{"type":"array","items":{"type":"string"},"description":"Target markets or countries such as US, UK, EU, AU, JP, APAC, or ASIA"},"target_locations":{"type":"array","items":{"type":"string"},"description":"Specific geographies or jurisdictions to prefer"},"applicant_types":{"type":"array","items":{"type":"string"},"description":"Applicant organization types to favor, such as nonprofit, university, startup, or SME"},"sector_keywords":{"type":"array","items":{"type":"string"},"description":"Sector or mission keywords to reinforce text matching"},"preferred_funders":{"type":"array","items":{"type":"string"},"description":"Named funders, agencies, or departments to prefer when matching"},"funding_need":{"type":"number","description":"Approximate target funding amount to compare against award ranges"},"published_from":{"type":"string","description":"Only include opportunities published on or after this date (YYYY-MM-DD)"},"deadline_before":{"type":"string","description":"Only include opportunities closing on or before this date (YYYY-MM-DD)"},"amount_min":{"type":"number","description":"Minimum award range to include when sources expose one"},"amount_max":{"type":"number","description":"Maximum award range to include when sources expose one"},"open_only":{"type":"boolean","description":"When true, keep the ranking focused on open opportunities","default":true},"limit":{"type":"number","description":"Maximum ranked opportunities to return per page (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":20,"mode":"io"}},"examples":[{"description":"Match a university AI lab profile against all live funding sources","input":{"source":"all","query":"artificial intelligence","regions":["UK","EU","JP"],"applicant_types":["university","research organisation"],"sector_keywords":["AI","machine learning","research"],"funding_need":500000,"limit":6}},{"description":"Match an Australian startup profile against local grant programs","input":{"source":"business_gov_au","query":"commercialisation","regions":["AU"],"applicant_types":["Company","Startup"],"sector_keywords":["innovation"],"funding_need":30000,"limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"candidate_count":{"type":"number","description":"Number of candidate opportunities scored for the profile"},"matches":{"type":"array","description":"Ranked opportunity matches with fit breakdowns and reasons"},"count":{"type":"number","description":"Number of ranked matches returned in this response"}}},"returns":"Ranked live opportunities with fit scores, reasons, and breakdowns against an applicant profile"},{"name":"watchlist_snapshot","displayName":"Watchlist Snapshot","description":"Produce a compact monitoring digest of the most actionable live grant opportunities using urgency, deadline, funding amount, or freshness sorting.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Opportunity source focus: all, grants_gov, find_a_grant, business_gov_au, or jgrants","enum":["all","grants_gov","find_a_grant","business_gov_au","jgrants"],"default":"all"},"query":{"type":"string","description":"Keyword, sector, or funding theme to watch"},"regions":{"type":"array","items":{"type":"string"},"description":"Target markets or regions such as US, UK, AU, JP, EU, APAC, or ASIA"},"target_locations":{"type":"array","items":{"type":"string"},"description":"Specific geographies or jurisdictions to prefer"},"applicant_types":{"type":"array","items":{"type":"string"},"description":"Applicant organization types to prefer"},"funder_name":{"type":"string","description":"Optional funder filter to make the watchlist more specific"},"amount_min":{"type":"number","description":"Minimum award range to include when sources expose one"},"amount_max":{"type":"number","description":"Maximum award range to include when sources expose one"},"deadline_before":{"type":"string","description":"Only include opportunities closing on or before this date (YYYY-MM-DD)"},"sort_by":{"type":"string","description":"How to rank the snapshot: urgency, deadline, amount, or published","enum":["urgency","deadline","amount","published"],"default":"urgency"},"limit":{"type":"number","description":"Maximum snapshot rows to return (1-20, default 10)","default":10,"minimum":1,"maximum":20}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Generate a cross-source AI funding watchlist sorted by urgency","input":{"source":"all","query":"artificial intelligence","sort_by":"urgency","limit":8}},{"description":"Watch Japanese subsidies by closing date","input":{"source":"jgrants","query":"AI","sort_by":"deadline","limit":5}}],"pricing":"free","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Total opportunities considered before trimming to the snapshot"},"source_totals":{"type":"object","description":"Per-source counts behind the current snapshot"},"skipped_sources":{"type":"array","description":"Sources that were skipped because they were unavailable for this request"},"snapshot":{"type":"array","description":"Compact ranked watchlist rows with urgency and source links"},"count":{"type":"number","description":"Number of rows in the snapshot"}}},"returns":"A compact ranked digest of live grant opportunities for deadline-driven monitoring workflows"}],"workflow":["search_opportunities","opportunity_details","search_grant_history","match_applicant_profile","watchlist_snapshot"],"author":{"name":"Humanleap","url":"https://toolrouter.com","email":"hello@toolrouter.com"},"repository":"https://github.com/Humanleap/toolrouter.git","license":"UNLICENSED","homepage":"https://toolrouter.com/tools/grants-finder","icon":"/icons/grants-finder.webp","changelog":[{"version":"0.01","date":"2026-03-27","changes":["Initial release with official-source grant search, detail lookups, funding history, applicant-fit scoring, and watchlist snapshots across US, UK, EU precedent, Australia, and Japan."]}],"premadePrompt":"Find me open grants for a [nonprofit / university / startup] working in [sector] based in [country or region]. I need funding of around [amount] and would like to see the best matches ranked by fit."},{"name":"marketplace-search","displayName":"Marketplace Search","subtitle":"Find second-hand listings and products across regions","about":"**Marketplace Search** searches major secondhand and retail marketplaces across multiple regions in one query — covering eBay, Facebook Marketplace, Craigslist, Gumtree, Vinted, Mercado Libre, OLX, Rakuten, Carousell, and more. No marketplace accounts or API keys required.\n\nHunting for a specific used item across multiple platforms means opening a dozen tabs and repeating the same search. This tool collapses that into a single query with filters for region, condition, listing type, and source — so you can find the best deal across the full market in one go.\n\n### What you can do\n- **search_listings** — search multiple marketplace domains simultaneously with filters for region, condition, source, and listing class\n- **listing_details** — preview a single listing URL for title, description, image, and inferred source details\n- **watchlist_snapshot** — generate a compact snapshot of search results for monitoring new listings over time\n- **source_coverage** — see which marketplaces are active for your region before running a search\n\n### Who it's for\nBuyers hunting for specific used items who want to check multiple markets without opening separate tabs. Resellers monitoring pricing trends and new inventory across regions. Anyone comparing secondhand prices internationally before buying or selling.\n\n### How to use it\n1. Check **source_coverage** first if you're targeting a specific region to see which marketplaces are available\n2. Run **search_listings** with your product query — add region, condition, and source filters to narrow results\n3. Use **listing_details** on any result URL to preview the full listing before clicking through\n4. Use **watchlist_snapshot** to capture a clean snapshot you can re-run periodically to monitor new listings\n\n### Getting started\nRun **search_listings** with your item query and set the regions parameter for your target market (US, UK, EU, AU, LATAM, etc.). Set condition to \"used\" for secondhand results.","version":"0.02","categories":["search","data"],"currency":"USD","skills":[{"name":"search_listings","displayName":"Search Listings","description":"Search multiple marketplace domains and shopping indexes for second-hand listings, classifieds, auctions, and product offers with region, source, condition, and listing-class filters.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Product, second-hand item, brand, model, or listing phrase to search for"},"source":{"type":"string","description":"Marketplace source: all, shopping_index, ebay, facebook_marketplace, craigslist, gumtree, trademe, mercadolibre, olx, rakuten, vinted, carousell","enum":["all","shopping_index","ebay","facebook_marketplace","craigslist","gumtree","trademe","mercadolibre","olx","rakuten","vinted","carousell"],"default":"all"},"sources":{"type":"array","description":"Optional explicit source list when you want to search multiple named marketplaces at once","items":{"type":"string"}},"regions":{"type":"array","description":"Region or market codes such as US, CA, UK, EU, AU, NZ, JP, SG, HK, LATAM, MX, BR, or APAC","items":{"type":"string"}},"country":{"type":"string","description":"Optional 2-letter search country code for result localization, such as us, gb, de, jp, or au"},"language":{"type":"string","description":"Optional search language code such as en, es, pt, de, fr, or ja"},"location":{"type":"string","description":"Optional city, country, or local search phrase to bias the query, such as \"Berlin\" or \"Auckland\""},"listing_classes":{"type":"array","description":"Filter toward classifieds, auctions, fixed-price listings, or retail marketplaces","items":{"type":"string","enum":["classified","auction","fixed_price","retail_marketplace"]}},"condition":{"type":"string","description":"Optional condition hint such as used, refurbished, new, or preowned","enum":["any","used","refurbished","new","preowned"],"default":"any"},"local_pickup":{"type":"boolean","description":"Bias the search toward listings mentioning local pickup or collection","default":false},"limit":{"type":"number","description":"Maximum listings to return (1-25, default 10)","default":10,"minimum":1,"maximum":25},"page":{"type":"number","description":"Page number for the underlying search-index query window (default 1)","default":1,"minimum":1,"maximum":20}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search across all no-key sources for a used Herman Miller chair in the UK and Europe","input":{"query":"Herman Miller Aeron","source":"all","regions":["UK","EU"],"condition":"used","limit":8}},{"description":"Search Mercado Libre and OLX for used camera gear in Latin America","input":{"query":"Sony A7 III","sources":["mercadolibre","olx"],"regions":["LATAM"],"condition":"used","limit":8}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"total_found":{"type":"number","description":"Total deduped listings found before the response limit"},"count":{"type":"number","description":"Number of listings returned in this response"},"results":{"type":"array","description":"Normalized marketplace listing cards with source, URL, inferred condition, and price text when available"},"sources_attempted":{"type":"array","description":"Marketplace sources the tool attempted for this search"},"skipped_sources":{"type":"array","description":"Sources skipped because search was unavailable or failed for this request"}}},"returns":"Deduped marketplace listing cards with source names, URLs, snippets, inferred listing class, and price text when available"},{"name":"listing_details","displayName":"Listing Details","description":"Preview a single marketplace URL so you can inspect the title, description, image, inferred source, region, listing id, and any price text available from metadata.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Full listing URL returned by search_listings"},"source_url":{"type":"string","description":"Optional alias for url"}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Preview an eBay listing URL returned by marketplace search","input":{"url":"https://www.ebay.com/itm/325123456789"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Canonical listing URL"},"source":{"type":"string","description":"Inferred marketplace source id"},"listing_id":{"type":"string","description":"Best-effort listing identifier parsed from the URL"},"title":{"type":"string","description":"Preview title for the listing page"},"description":{"type":"string","description":"Preview description for the listing page when available"},"image_url":{"type":"string","description":"Preview image URL when available"}}},"returns":"A quick metadata preview for one listing URL with inferred source, region, and listing characteristics"},{"name":"watchlist_snapshot","displayName":"Watchlist Snapshot","description":"Generate a compact marketplace snapshot for a query so you can monitor new listings, prices, and sources over time without storing state in the tool.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Product, second-hand item, brand, model, or listing phrase to search for"},"source":{"type":"string","description":"Marketplace source: all, shopping_index, ebay, facebook_marketplace, craigslist, gumtree, trademe, mercadolibre, olx, rakuten, vinted, carousell","enum":["all","shopping_index","ebay","facebook_marketplace","craigslist","gumtree","trademe","mercadolibre","olx","rakuten","vinted","carousell"],"default":"all"},"sources":{"type":"array","description":"Optional explicit source list when you want to search multiple named marketplaces at once","items":{"type":"string"}},"regions":{"type":"array","description":"Region or market codes such as US, CA, UK, EU, AU, NZ, JP, SG, HK, LATAM, MX, BR, or APAC","items":{"type":"string"}},"country":{"type":"string","description":"Optional 2-letter search country code for result localization, such as us, gb, de, jp, or au"},"language":{"type":"string","description":"Optional search language code such as en, es, pt, de, fr, or ja"},"location":{"type":"string","description":"Optional city, country, or local search phrase to bias the query, such as \"Berlin\" or \"Auckland\""},"listing_classes":{"type":"array","description":"Filter toward classifieds, auctions, fixed-price listings, or retail marketplaces","items":{"type":"string","enum":["classified","auction","fixed_price","retail_marketplace"]}},"condition":{"type":"string","description":"Optional condition hint such as used, refurbished, new, or preowned","enum":["any","used","refurbished","new","preowned"],"default":"any"},"local_pickup":{"type":"boolean","description":"Bias the search toward listings mentioning local pickup or collection","default":false},"limit":{"type":"number","description":"Maximum listings to return (1-25, default 10)","default":10,"minimum":1,"maximum":25},"page":{"type":"number","description":"Page number for the underlying search-index query window (default 1)","default":1,"minimum":1,"maximum":20}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Create a compact watchlist snapshot for used Leica cameras across Europe","input":{"query":"Leica Q2","regions":["EU"],"condition":"used","limit":6}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"snapshot_at":{"type":"string","description":"Timestamp when the snapshot was generated"},"count":{"type":"number","description":"Number of snapshot entries returned"},"entries":{"type":"array","description":"Compact watchlist rows with stable snapshot ids and listing URLs"}}},"returns":"Compact watchlist rows with stable snapshot ids, marketplace names, price text, and listing URLs"},{"name":"source_coverage","displayName":"Source Coverage","description":"Show which marketplaces are active for a given region or listing class in the no-key version of the tool, including caveats and access tiers.","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Marketplace source: all, shopping_index, ebay, facebook_marketplace, craigslist, gumtree, trademe, mercadolibre, olx, rakuten, vinted, carousell","enum":["all","shopping_index","ebay","facebook_marketplace","craigslist","gumtree","trademe","mercadolibre","olx","rakuten","vinted","carousell"],"default":"all"},"sources":{"type":"array","description":"Optional explicit source list when you want to search multiple named marketplaces at once","items":{"type":"string"}},"regions":{"type":"array","description":"Region or market codes such as US, CA, UK, EU, AU, NZ, JP, SG, HK, LATAM, MX, BR, or APAC","items":{"type":"string"}},"listing_classes":{"type":"array","description":"Filter toward classifieds, auctions, fixed-price listings, or retail marketplaces","items":{"type":"string","enum":["classified","auction","fixed_price","retail_marketplace"]}}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check which no-key sources cover Europe second-hand marketplaces","input":{"regions":["EU"],"listing_classes":["classified"]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"selected_regions":{"type":"array","description":"Normalized region filters used for coverage selection"},"selected_sources":{"type":"array","description":"Marketplace sources selected for the current filter set"},"supported_sources":{"type":"array","description":"Coverage rows including source names, regions, listing classes, domains, and caveats"}}},"returns":"Coverage rows describing which marketplaces are active, how they are accessed, and what caveats apply"}],"workflow":["source_coverage","search_listings","listing_details","watchlist_snapshot"],"icon":"/icons/marketplace-search.webp","changelog":[{"version":"0.01","date":"2026-03-28","changes":["Initial release with no-key marketplace discovery across search-indexed marketplace domains, listing previews, watchlist snapshots, and explicit source coverage reporting."]},{"version":"0.02","date":"2026-03-28","changes":["Added Facebook Marketplace as a search-indexed source with Marketplace-item URL filtering and explicit compliance caveats."]}],"premadePrompt":"Search for used [product] listings across major marketplaces in [region] and show me the best deals.","requirements":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}],"credentials":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}]},{"name":"record-collector","displayName":"Record Collector","subtitle":"Find, identify, price, and buy music releases","about":"**Record Collector** is a complete research and buying tool for vinyl, CD, cassette, and box-set releases. Look up any album across Discogs and MusicBrainz, identify specific pressings by catalog number or matrix inscription, check current market prices by condition, and search 20+ global resale platforms for copies to buy.\n\nWhether you're building a collection, identifying a record you found, valuing what you already own, or hunting for a specific pressing across international markets, this tool has you covered with real collector data from the world's largest music databases.\n\n### What you can do\n- **search_releases** — find releases across Discogs and MusicBrainz by artist, title, label, barcode, or catalog number\n- **release_details** — get full tracklist, identifiers, artwork, and current market stats for any release\n- **identify_pressing** — identify a specific pressing from catalog number, barcode, or matrix/runout inscription\n- **edition_match** — score likely pressing candidates from partial clues\n- **price_guide** — get current market pricing including condition-based prices (Mint through Poor)\n- **marketplace_listings** — see active Discogs listings with supply and lowest price\n- **market_search** — search eBay, Bandcamp, Mercari, Yahoo Auctions Japan, and 15+ other platforms\n- **artist_discography** — browse a full artist discography sorted by year or format\n- **label_catalog** — browse a record label's full release catalog\n- **collection_value** — estimate the current market value of a list of releases\n\n### Who it's for\nVinyl collectors buying and selling records, crate diggers researching finds at record fairs, dealers building inventory or pricing stock, and music enthusiasts researching an artist's catalog or a label's history.\n\n### How to use it\n1. Start with **search_releases** to find the release — pass artist, title, and format for the best match.\n2. Use **identify_pressing** if you have a catalog number or matrix inscription to pinpoint the exact edition.\n3. Call **price_guide** with the Discogs release ID to check current market value and condition pricing.\n4. Use **market_search** to find copies for sale across global platforms beyond Discogs.\n\n### Getting started\nConnect your Discogs account for condition-based pricing (Mint through Poor). Without it, you still get current lowest prices and market snapshots.","version":"0.03","categories":["search","data"],"currency":"USD","skills":[{"name":"search_releases","displayName":"Search Releases","description":"Search release catalogs for likely matching vinyl, CD, cassette, and box-set editions using artist, title, label, barcode, catalog number, country, and year clues.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text release query such as \"Nirvana Nevermind\" or \"Blue Note 1527\""},"artist":{"type":"string","description":"Artist or band name to match"},"title":{"type":"string","description":"Release title or album title to match"},"format":{"type":"string","description":"Preferred format such as lp, 7inch, cd, cassette, or box_set","enum":["any","lp","12inch","10inch","7inch","cd","cassette","box_set","dvd","blu_ray"],"default":"any"},"country":{"type":"string","description":"Optional country or market code such as US, UK, JP, DE, FR, or CA"},"year":{"type":"number","description":"Optional release year to bias edition matching"},"label":{"type":"string","description":"Optional label name to narrow results"},"barcode":{"type":"string","description":"Optional barcode or UPC when you want a more exact edition match"},"catalog_number":{"type":"string","description":"Optional catalog number or matrix clue such as \"DGCD-24425\""},"source":{"type":"string","description":"Catalog source to search: all, discogs, or musicbrainz","enum":["all","discogs","musicbrainz"],"default":"all"},"sources":{"type":"array","description":"Optional explicit catalog source list when you want to search multiple named sources","items":{"type":"string"}},"limit":{"type":"number","description":"Maximum releases to return (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for search pagination (default 1)","default":1,"minimum":1,"maximum":20}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for Nevermind releases by Nirvana on vinyl","input":{"artist":"Nirvana","title":"Nevermind","format":"lp","limit":8}},{"description":"Find a release by catalog number and label","input":{"catalog_number":"BNLP 1595","label":"Blue Note","limit":6}},{"description":"Search for Pink Floyd on Discogs only","input":{"query":"Pink Floyd Dark Side of the Moon","source":"discogs"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Normalized search query built from the supplied release clues"},"count":{"type":"number","description":"Number of releases returned"},"releases":{"type":"array","description":"Normalized release candidates with source ids, format data, collector demand, and current market stats when available"},"sources_attempted":{"type":"array","description":"Catalog sources queried for this search"}}},"returns":"Likely matching releases with edition clues, collector demand, and current market stats where available"},{"name":"release_details","displayName":"Release Details","description":"Get a detailed release profile including tracklist, identifiers, labels, formats, notes, artwork, and current market stats. Use a Discogs or MusicBrainz release id, or resolve from a query.","inputSchema":{"type":"object","properties":{"discogs_release_id":{"type":"number","description":"Discogs release id from search_releases or identify_pressing results"},"discogs_master_id":{"type":"number","description":"Optional Discogs master id when you want the master profile plus version list"},"musicbrainz_release_id":{"type":"string","description":"MusicBrainz release id (UUID) when you want MusicBrainz metadata"},"query":{"type":"string","description":"Fallback query to resolve the best Discogs release automatically"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get full details for a Discogs release by id","input":{"discogs_release_id":7097051}},{"description":"Resolve release details from a query","input":{"query":"Miles Davis Kind of Blue original pressing"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Release title"},"artist_name":{"type":"string","description":"Primary artist name"},"year":{"type":"number","description":"Release year"},"country":{"type":"string","description":"Country of pressing"},"tracklist":{"type":"array","description":"Tracks with positions, titles, and durations"},"identifiers":{"type":"array","description":"Release identifiers including catalog numbers, barcodes, and matrix inscriptions"},"lowest_price":{"type":"number","description":"Current lowest asking price on Discogs"},"num_for_sale":{"type":"number","description":"Current number of copies for sale"}}},"returns":"Full release profile with tracklist, identifiers, artwork, label and format details, and current market pricing"},{"name":"identify_pressing","displayName":"Identify Pressing","description":"Identify a specific vinyl pressing from catalog number, barcode, matrix/runout inscription, or partial info. Essential for distinguishing original pressings from reissues. Searches Discogs identifiers and cross-references matrix numbers.","inputSchema":{"type":"object","properties":{"catno":{"type":"string","description":"Catalog number printed on the label or spine (e.g. \"BLP 1501\", \"FACT 10\", \"PCS 7027\")"},"barcode":{"type":"string","description":"Barcode or UPC from the packaging"},"matrix":{"type":"string","description":"Matrix/runout inscription etched in the dead wax near the label (e.g. \"YEX-749-1\")"},"query":{"type":"string","description":"General search if no specific identifiers (e.g. \"Led Zeppelin I UK first pressing\")"},"artist":{"type":"string","description":"Artist name to narrow results"},"title":{"type":"string","description":"Album or single title to narrow results"},"country":{"type":"string","description":"Country of pressing (e.g. \"US\", \"UK\", \"Japan\")"},"year":{"type":"string","description":"Year or year range (e.g. \"1969\", \"1965-1970\")"},"format":{"type":"string","description":"Format hint (e.g. \"vinyl\", \"lp\", \"7\"\")"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Identify by catalog number","input":{"catno":"BLP 1501"}},{"description":"Identify by matrix inscription","input":{"artist":"Led Zeppelin","title":"Led Zeppelin I","matrix":"ZAL 6535","country":"UK"}},{"description":"Identify by barcode","input":{"barcode":"074643811224"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"best_match":{"type":"object","description":"Highest-confidence pressing match"},"matches":{"type":"array","description":"All matching pressings ordered by confidence"},"identifiers_used":{"type":"object","description":"The identifiers that were searched"},"count":{"type":"number","description":"Number of candidate pressings found"}}},"returns":"Ranked pressing candidates with edition details, identifiers, and matrix match flags"},{"name":"edition_match","displayName":"Edition Match","description":"Score likely pressings and reissues from partial clues like barcode, catalog number, country, format, year, and label so you can identify the closest edition match.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text release query such as \"Nirvana Nevermind\" or \"Blue Note 1527\""},"artist":{"type":"string","description":"Artist or band name to match"},"title":{"type":"string","description":"Release title or album title to match"},"format":{"type":"string","description":"Preferred format such as lp, 7inch, cd, cassette, or box_set","enum":["any","lp","12inch","10inch","7inch","cd","cassette","box_set","dvd","blu_ray"],"default":"any"},"country":{"type":"string","description":"Optional country or market code such as US, UK, JP, DE, FR, or CA"},"year":{"type":"number","description":"Optional release year to bias edition matching"},"label":{"type":"string","description":"Optional label name to narrow results"},"barcode":{"type":"string","description":"Optional barcode or UPC when you want a more exact edition match"},"catalog_number":{"type":"string","description":"Optional catalog number or matrix clue such as \"DGCD-24425\""},"source":{"type":"string","description":"Catalog source to search: all, discogs, or musicbrainz","enum":["all","discogs","musicbrainz"],"default":"all"},"sources":{"type":"array","description":"Optional explicit catalog source list when you want to search multiple named sources","items":{"type":"string"}},"limit":{"type":"number","description":"Maximum releases to return (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for search pagination (default 1)","default":1,"minimum":1,"maximum":20}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Match a Nevermind pressing using country, year, and catalog number clues","input":{"artist":"Nirvana","title":"Nevermind","country":"CA","year":1991,"catalog_number":"DGCD-24425","limit":6}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Normalized edition-matching query"},"count":{"type":"number","description":"Number of match candidates returned"},"matches":{"type":"array","description":"Ranked edition candidates with matched fields and confidence-oriented scores"}}},"returns":"Ranked edition candidates with matched clue fields and current market context"},{"name":"price_guide","displayName":"Price Guide","description":"Get current market pricing for a release — lowest listed price, number of copies for sale, community demand stats (want/have ratio), and condition-based pricing from Mint through Poor when a personal access token is configured.","inputSchema":{"type":"object","properties":{"discogs_release_id":{"type":"number","description":"Discogs release id from search_releases, identify_pressing, or edition_match results"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). Supported: USD, GBP, EUR, CAD, AUD, JPY, CHF, MXN, BRL, NZD, SEK, ZAR","default":"USD"}},"required":["discogs_release_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get price guide for a release","input":{"discogs_release_id":249504}},{"description":"Price guide in EUR","input":{"discogs_release_id":249504,"currency":"EUR"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"discogs_release_id":{"type":"number","description":"The release ID"},"title":{"type":"string","description":"Release title"},"lowest_price":{"type":"number","description":"Lowest currently listed price"},"num_for_sale":{"type":"number","description":"Number of copies for sale"},"price_by_condition":{"type":"array","description":"Suggested prices by condition (M, NM, VG+, VG, G+, G, F, P) — requires personal access token"},"condition_pricing_available":{"type":"boolean","description":"Whether condition-based pricing was returned"},"community":{"type":"object","description":"Want/have counts and demand ratio"},"marketplace_url":{"type":"string","description":"Direct link to Discogs marketplace sorted by price"}}},"returns":"Market snapshot with lowest price, supply depth, demand ratio, and condition-based pricing where available"},{"name":"marketplace_listings","displayName":"Discogs Marketplace","description":"Find active for-sale listings on the Discogs marketplace for a specific release. Shows number of copies available, lowest price, and a direct marketplace browse link.","inputSchema":{"type":"object","properties":{"release_id":{"type":"number","description":"Discogs release ID from search_releases or identify_pressing results"},"query":{"type":"string","description":"Search query (alternative to release_id) — will find the best matching release"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). Supported: USD, GBP, EUR, CAD, AUD, JPY, CHF, MXN, BRL, NZD, SEK, ZAR","default":"USD"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find Discogs listings for a release","input":{"release_id":249504}},{"description":"Search for listings by name","input":{"query":"Radiohead OK Computer"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"release_id":{"type":"number","description":"The release ID"},"num_for_sale":{"type":"number","description":"Copies currently for sale"},"lowest_price":{"type":"number","description":"Lowest asking price"},"marketplace_url":{"type":"string","description":"Direct link to Discogs marketplace listings"}}},"returns":"Discogs marketplace overview with number of copies for sale, lowest price, and direct browse link"},{"name":"market_search","displayName":"Global Market Search","description":"Search 20+ global resale and retail platforms for music releases — including Discogs, eBay, Bandcamp, Mercari, Yahoo Auctions Japan, Rakuten, Facebook Marketplace, Craigslist, and more. Use this to find deals, compare prices across regions, or discover copies not listed on Discogs.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text release query such as \"Nirvana Nevermind\" or \"Blue Note 1527\""},"artist":{"type":"string","description":"Artist or band name to match"},"title":{"type":"string","description":"Release title or album title to match"},"format":{"type":"string","description":"Preferred format such as lp, 7inch, cd, cassette, or box_set","enum":["any","lp","12inch","10inch","7inch","cd","cassette","box_set","dvd","blu_ray"],"default":"any"},"condition":{"type":"string","description":"Optional condition hint such as used, new, sealed, or preowned","enum":["any","used","new","sealed","preowned"],"default":"any"},"source":{"type":"string","description":"Specific market source: all, discogs, ebay, bandcamp, mercari, rakuma, yahoo_auctions_japan, cdandlp, musicstack, craigslist, and more.","enum":["all","discogs","ebay","cdandlp","musicstack","bandcamp","mercari","yahoo_auctions_japan","rakuma","facebook_marketplace","craigslist","gumtree","trademe","mercadolibre","olx","rakuten","carousell","vinted","wallapop","depop"],"default":"all"},"sources":{"type":"array","description":"Optional explicit market source list when you want to search multiple named sources","items":{"type":"string"}},"regions":{"type":"array","description":"Optional region filters such as GLOBAL, US, UK, EU, JP, LATAM, APAC, NZ, AU, SG, or HK","items":{"type":"string"}},"country":{"type":"string","description":"Optional 2-letter country code for search localization such as us, gb, jp, de, or au"},"language":{"type":"string","description":"Optional search language code such as en, ja, de, fr, or es"},"location":{"type":"string","description":"Optional local place name to bias classifieds-style queries"},"local_pickup":{"type":"boolean","description":"Bias the search toward listings mentioning local pickup or collection","default":false},"limit":{"type":"number","description":"Maximum listings to return (1-25, default 10)","default":10,"minimum":1,"maximum":25},"page":{"type":"number","description":"Page number for search pagination (default 1)","default":1,"minimum":1,"maximum":20}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search global resale markets for a used vinyl copy of Nevermind","input":{"artist":"Nirvana","title":"Nevermind","format":"lp","condition":"used","regions":["GLOBAL"],"limit":8}},{"description":"Search Japan-specific sale sources for a City Pop cassette","input":{"query":"City Pop cassette","regions":["JP"],"sources":["mercari","rakuma","yahoo_auctions_japan"],"limit":8}},{"description":"Find jazz vinyl auctions on eBay","input":{"query":"Blue Note original pressing","sources":["ebay"],"condition":"used","limit":10}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Normalized release query used for sale discovery"},"count":{"type":"number","description":"Number of market listings returned"},"results":{"type":"array","description":"Normalized market listings with source, URL, price text, format guess, and region"},"skipped_sources":{"type":"array","description":"Sources skipped because a backend was unavailable or the source failed for this request"}}},"returns":"Sale listings and release pages from global record marketplaces with prices, regions, and caveats"},{"name":"artist_discography","displayName":"Artist Discography","description":"Browse an artist's full discography — albums, singles, compilations, and appearances. Shows release years, formats, labels, and community want/have stats. Requires an artist_id from search_releases.","inputSchema":{"type":"object","properties":{"artist_id":{"type":"number","description":"Discogs artist ID — obtain from search_releases with a query like the artist name, look for the id field in results with type \"artist\""},"sort_by":{"type":"string","description":"Sort releases by","enum":["year","title","format"],"default":"year"},"sort_order":{"type":"string","description":"Sort direction","enum":["asc","desc"],"default":"desc"},"limit":{"type":"number","description":"Results per page (1-100, default 25)","default":25,"minimum":1,"maximum":100},"page":{"type":"number","description":"Page number (default 1)","default":1,"minimum":1}},"required":["artist_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Browse Radiohead discography","input":{"artist_id":3840}},{"description":"Oldest Miles Davis releases first","input":{"artist_id":15885,"sort_order":"asc"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"artist":{"type":"object","description":"Artist profile with name, bio, members, and links"},"total_releases":{"type":"number","description":"Total releases in discography"},"releases":{"type":"array","description":"Releases with titles, years, formats, labels, and community stats"}}},"returns":"Full artist discography with album details, formats, labels, roles, and community want/have statistics"},{"name":"label_catalog","displayName":"Label Catalog","description":"Browse a record label's full release catalog. Accepts a label name (searches for the label automatically) or a Discogs label_id. Shows catalog numbers, artists, formats, and community demand.","inputSchema":{"type":"object","properties":{"label_id":{"type":"number","description":"Discogs label ID — optional, use query instead if you only have the label name"},"query":{"type":"string","description":"Label name to search for (e.g. \"Blue Note\", \"Sub Pop\", \"Factory Records\")"},"sort_by":{"type":"string","description":"Sort releases by","enum":["year","title","catno"],"default":"year"},"sort_order":{"type":"string","description":"Sort direction","enum":["asc","desc"],"default":"desc"},"limit":{"type":"number","description":"Results per page (1-100, default 25)","default":25,"minimum":1,"maximum":100},"page":{"type":"number","description":"Page number (default 1)","default":1,"minimum":1}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Browse Blue Note Records catalog","input":{"query":"Blue Note"}},{"description":"Browse Sub Pop catalog oldest first","input":{"query":"Sub Pop","sort_order":"asc"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"label":{"type":"object","description":"Label profile with name, profile text, and links"},"total_releases":{"type":"number","description":"Total releases in catalog"},"releases":{"type":"array","description":"Releases with catalog numbers, artists, titles, years, and formats"}}},"returns":"Full label catalog with catalog numbers, artists, release years, formats, and community demand stats"},{"name":"collection_value","displayName":"Collection Value","description":"Estimate the current value of a record collection from known release ids or item queries, with totals grouped by currency and line-level valuation details.","inputSchema":{"type":"object","properties":{"items":{"type":"array","description":"Collection rows to value. Each item can provide a discogs_release_id or a query plus an optional quantity.","items":{"type":"object","properties":{"discogs_release_id":{"type":"number","description":"Known Discogs release id for the item"},"query":{"type":"string","description":"Fallback item query such as \"Miles Davis Kind of Blue mono LP\""},"quantity":{"type":"number","description":"How many copies of this release to value (default 1)","default":1,"minimum":1}}}}},"required":["items"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Estimate the value of two known Discogs releases","input":{"items":[{"discogs_release_id":7097051,"quantity":1},{"discogs_release_id":249504,"quantity":2}]}},{"description":"Value a collection by query","input":{"items":[{"query":"Miles Davis Kind of Blue mono"},{"query":"The Beatles Abbey Road UK first pressing"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"item_count":{"type":"number","description":"Total collection rows submitted for valuation"},"valued_count":{"type":"number","description":"How many rows were successfully valued"},"totals_by_currency":{"type":"array","description":"Value totals grouped by currency to avoid false cross-currency sums"},"items":{"type":"array","description":"Line-level valuation rows with resolved release ids and unit prices when available"}}},"returns":"Per-item values plus grouped currency totals based on the current public market snapshot"}],"workflow":["search_releases → release_details → price_guide","identify_pressing → price_guide → marketplace_listings","search_releases → edition_match → price_guide","market_search","artist_discography → release_details → price_guide","label_catalog → release_details","collection_value"],"icon":"/icons/record-collector.webp","changelog":[{"version":"0.01","date":"2026-03-29","changes":["Initial release with release lookup, edition matching, current market snapshots, cross-market record search, collection valuation, wantlist snapshots, and source coverage reporting."]},{"version":"0.02","date":"2026-03-29","changes":["Add Discogs app-level OAuth authentication (DISCOGS_CONSUMER_KEY + DISCOGS_CONSUMER_SECRET) for higher rate limits."]},{"version":"0.03","date":"2026-03-29","changes":["Consolidate vinyl-records tool into record-collector. Added identify_pressing, artist_discography, label_catalog, marketplace_listings skills. Replaced price_snapshot with richer price_guide (condition-based pricing + market snapshot). Expanded market_search sources to include eBay, Facebook Marketplace, Craigslist, Gumtree, Mercado Libre, Rakuten, and Carousell. Removed wantlist_snapshot and source_coverage."]}],"premadePrompt":"What is [artist or album] worth on vinyl right now? Find available copies across global marketplaces and show me current prices by condition.","requirements":[{"name":"discogs","type":"secret","displayName":"Discogs Personal Access Token","description":"Optional — enables condition-based price suggestions (Mint through Poor). Get one at discogs.com/settings/developers","acquireUrl":"https://www.discogs.com/settings/developers","envFallback":"DISCOGS_TOKEN"},{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}],"credentials":[{"name":"discogs","type":"secret","displayName":"Discogs Personal Access Token","description":"Optional — enables condition-based price suggestions (Mint through Poor). Get one at discogs.com/settings/developers","acquireUrl":"https://www.discogs.com/settings/developers","envFallback":"DISCOGS_TOKEN"},{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}]},{"name":"wine-collector","displayName":"Wine Collector","subtitle":"Wine prices, ratings, tasting profiles, food pairings, and marketplace deals","about":"**Wine Collector** is a complete wine research tool — look up any wine by name, grape, or region to see ratings, tasting profiles, food pairings, price comparisons, and where to buy. It works globally with localized pricing in 50+ currencies and includes access to marketplace listings for rare and vintage bottles.\n\nWhether you're picking a bottle for dinner, working out when to open one, building a cellar, or hunting a vintage, it covers the journey from discovery to the dinner table.\n\n### What you can do\n- **search_wines** — find wines by grape variety, region, style, price, or rating; returns IDs for other skills\n- **wine_details** — full profile including ratings, reviews, winery info, and tasting notes\n- **tasting_profile** — structured flavor breakdown: acidity, tannin, sweetness, body, and dominant flavors\n- **drinking_window** — when a wine is ready, at its peak, and likely declining, from its grape, region, and vintage\n- **food_pairing** — food pairing recommendations based on the wine's flavor structure\n- **similar_wines** — discover alternative wines matching the same grape, region, price range, and rating\n- **price_compare** — compare prices across merchants with localized currency support\n- **marketplace_deals** — rare and vintage listings from global secondary marketplaces\n- **top_rated** — browse highest-rated wines by style, region, or grape\n- **region_explorer** — explore wines from a specific geographic region\n\n### Who it's for\nEnthusiasts building a cellar or buying for occasions. Collectors deciding when to open each bottle. Sommeliers advising guests. Buyers hunting specific vintages.\n\n### How to use it\n1. Use **drinking_window** any time to know whether to cellar a bottle or open it now — just give it a name like \"Barolo 2015\"\n2. Use **top_rated** or **region_explorer** to discover wines, then **wine_details** or **tasting_profile** for character\n3. Use **food_pairing** for serving ideas\n4. Use **price_compare** or **marketplace_deals** to find the best place to buy\n\n### Getting started\nFor **drinking_window**, pass a wine name with its vintage (e.g. \"Châteauneuf-du-Pape 2018\") or set grape, region, and vintage directly. For pricing, non-US users should pass a market code (e.g. \"gb\", \"jp\") and currency code.","version":"0.04","categories":["data","search"],"currency":"USD","skills":[{"name":"search_wines","displayName":"Search Wines","description":"Search for wines by name, grape variety, region, or style. Returns matching wines with ratings, prices, and wine IDs for detailed lookup.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Wine name, grape variety, or keyword to search for (e.g. \"Chateau Margaux 2015\", \"Pinot Noir\", \"Barolo\")"},"wine_type":{"type":"string","description":"Filter by wine type","enum":["red","white","sparkling","rose","dessert","fortified"]},"min_rating":{"type":"number","description":"Minimum average rating (1.0-5.0, default 1.0)","minimum":1,"maximum":5},"max_price":{"type":"number","description":"Maximum price in local currency"},"min_price":{"type":"number","description":"Minimum price in local currency"},"country":{"type":"string","description":"Filter by wine origin country code (e.g. \"fr\", \"us\", \"it\", \"es\", \"au\")"},"sort_by":{"type":"string","description":"How to sort results","enum":["ratings_count","ratings_average","price"],"default":"ratings_count"},"limit":{"type":"number","description":"Number of results to return (1-25, default 10)","default":10,"minimum":1,"maximum":25},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for Bordeaux wines","input":{"query":"Bordeaux"}},{"description":"Find highly-rated Pinot Noir under $50","input":{"query":"Pinot Noir","min_rating":4,"max_price":50,"wine_type":"red"}},{"description":"Search for Italian sparkling wines","input":{"query":"Prosecco","wine_type":"sparkling","country":"it"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"The search query used"},"total_found":{"type":"number","description":"Total matching wines"},"wines":{"type":"array","description":"Matching wines with name, rating, price, region, and wine_id"},"count":{"type":"number","description":"Number of wines returned"}}},"returns":"List of matching wines with names, ratings, localized prices, regions, wineries, images, and wine IDs for detailed lookup"},{"name":"wine_details","displayName":"Wine Details","description":"Get full details for a specific wine including ratings, reviews, pricing, and tasting notes. Requires a wine_id from search_wines results.","inputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"Vivino wine ID — obtained from search_wines results"},"review_count":{"type":"number","description":"Number of user reviews to include (1-10, default 5)","default":5,"minimum":1,"maximum":10}},"required":["wine_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get full details for a wine by ID","input":{"wine_id":1520}},{"description":"Get wine details with more reviews","input":{"wine_id":1520,"review_count":10}}],"pricing":"free","outputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"The wine ID looked up"},"name":{"type":"string","description":"Full wine name"},"rating":{"type":"number","description":"Average rating (1-5)"},"ratings_count":{"type":"number","description":"Total number of ratings"},"reviews":{"type":"array","description":"User reviews with rating and note"},"taste":{"type":"object","description":"Tasting profile with structure and flavors"}}},"returns":"Complete wine profile with ratings, user reviews, tasting notes, and flavor breakdown"},{"name":"top_rated","displayName":"Top Rated Wines","description":"Discover the highest-rated wines by type, grape, region, or price range. Great for finding quality bottles for any occasion or budget.","inputSchema":{"type":"object","properties":{"wine_type":{"type":"string","description":"Wine type to explore","enum":["red","white","sparkling","rose","dessert","fortified"]},"grape":{"type":"string","description":"Filter by grape variety (e.g. \"Cabernet Sauvignon\", \"Chardonnay\", \"Riesling\")"},"country":{"type":"string","description":"Filter by wine origin country code (e.g. \"fr\", \"us\", \"it\", \"es\", \"au\", \"nz\")"},"min_price":{"type":"number","description":"Minimum price in local currency"},"max_price":{"type":"number","description":"Maximum price in local currency"},"min_rating":{"type":"number","description":"Minimum rating threshold (default 4.0)","default":4,"minimum":1,"maximum":5},"limit":{"type":"number","description":"Number of results (1-25, default 10)","default":10,"minimum":1,"maximum":25},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Top red wines under $30","input":{"wine_type":"red","max_price":30}},{"description":"Best-rated Champagne","input":{"wine_type":"sparkling","country":"fr","min_rating":4.3}},{"description":"Top wines in Japan market priced in yen","input":{"grape":"Pinot Noir","market":"jp","currency":"JPY"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"filters":{"type":"object","description":"Applied filters"},"wines":{"type":"array","description":"Top-rated wines sorted by rating"},"count":{"type":"number","description":"Number of wines returned"}}},"returns":"Highest-rated wines matching the filters, sorted by average rating with localized prices and regions"},{"name":"price_compare","displayName":"Price Compare","description":"Compare prices for a specific wine across Vivino merchants. Optionally include global marketplace listings from eBay, Mercado Libre, Rakuten, and more for wider coverage.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Wine name to search and compare prices for (e.g. \"Opus One 2019\", \"Cloudy Bay Sauvignon Blanc\")"},"include_marketplaces":{"type":"boolean","description":"Also search eBay, Mercado Libre, Rakuten, Facebook Marketplace, and other global platforms for additional listings (default false)","default":false},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Compare prices for Opus One","input":{"query":"Opus One 2019"}},{"description":"Find UK prices for a Champagne","input":{"query":"Veuve Clicquot Brut","market":"gb","currency":"GBP"}},{"description":"Compare prices including eBay and global marketplaces","input":{"query":"Penfolds Grange 2018","include_marketplaces":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"wine_name":{"type":"string","description":"The wine found"},"price_min":{"type":"number","description":"Lowest Vivino merchant price"},"price_max":{"type":"number","description":"Highest Vivino merchant price"},"price_avg":{"type":"number","description":"Average Vivino merchant price"},"currency":{"type":"string","description":"Currency of prices"},"merchants":{"type":"array","description":"Vivino merchant listings with price and link"},"marketplace_listings":{"type":"array","description":"Global marketplace listings (when include_marketplaces is true)"}}},"returns":"Price comparison across Vivino merchants (and optionally global marketplaces) with min/max/average prices and purchase links"},{"name":"tasting_profile","displayName":"Tasting Profile","description":"Get the detailed tasting profile for a wine — acidity, tannin, sweetness, body, and dominant flavor notes. Requires a wine_id from search results.","inputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"Vivino wine ID — obtained from search_wines results"}},"required":["wine_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get the tasting profile of a wine","input":{"wine_id":1520}},{"description":"Check flavor notes for a different wine","input":{"wine_id":4251}}],"pricing":"free","outputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"The wine ID"},"structure":{"type":"object","description":"Wine structure — acidity, tannin, sweetness, body, fizziness"},"flavors":{"type":"array","description":"Dominant flavor groups and keywords"}}},"returns":"Detailed tasting structure (acidity, tannin, sweetness, body) and dominant flavor notes grouped by category"},{"name":"drinking_window","displayName":"Drinking Window","description":"Find out when a wine is ready to drink, when it hits its peak, and when it is likely past its best. Works from the grape, region, and vintage — give it a wine name like \"Barolo 2015\" or set grape/region/wine_type explicitly. No lookup required.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Wine name including the vintage year (e.g. \"Barolo 2015\", \"Chateauneuf-du-Pape 2018\"). Grape, region, and vintage are read from the name."},"vintage":{"type":"number","description":"Vintage year (e.g. 2015). The window is calculated from this year. Read from the name if omitted."},"grape":{"type":"string","description":"Grape variety, overrides what is inferred from the name (e.g. \"Nebbiolo\", \"Cabernet Sauvignon\", \"Riesling\")."},"region":{"type":"string","description":"Region or appellation, overrides the name (e.g. \"Barolo\", \"Bordeaux\", \"Napa Valley\")."},"wine_type":{"type":"string","description":"Wine type, overrides the name","enum":["red","white","sparkling","rose","dessert","fortified"]},"wine_id":{"type":"number","description":"Optional Vivino wine ID from search_wines — used only to refine the window with the wine's tasting structure."}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Should I open my 2015 Barolo yet?","input":{"query":"Barolo 2015"}},{"description":"Window for a young Bordeaux","input":{"query":"Pauillac","vintage":2020}},{"description":"Explicit grape and region","input":{"grape":"Riesling","region":"Mosel","vintage":2019}}],"pricing":"free","outputSchema":{"type":"object","properties":{"grape_variety":{"type":"string","description":"Grape used for the calculation"},"region":{"type":"string","description":"Region used for the calculation"},"vintage_year":{"type":"number","description":"Vintage used for the calculation"},"status":{"type":"string","description":"too_young, developing, at_peak, mature, or past_peak"},"status_label":{"type":"string","description":"Human-readable drinking status"},"recommendation":{"type":"string","description":"Whether to cellar or open the bottle now"},"window_years":{"type":"object","description":"Absolute years for drink-from, peak, and drink-by (when vintage is known)"},"ageability_years":{"type":"number","description":"Total years from vintage the wine should hold"},"confidence":{"type":"string","description":"Confidence in the window: low, medium, or high"}}},"returns":"Maturity assessment: current drinking status, the drink-from / peak / drink-by years, a cellar-or-open recommendation, and the reasoning behind it"},{"name":"region_explorer","displayName":"Region Explorer","description":"Explore wines from a specific region or country. Browse what a region is known for and find its top bottles.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Wine origin country code (e.g. \"fr\", \"us\", \"it\", \"es\", \"ar\", \"cl\", \"au\", \"nz\", \"za\", \"de\", \"pt\", \"at\", \"gr\")"},"wine_type":{"type":"string","description":"Filter by wine type","enum":["red","white","sparkling","rose","dessert","fortified"]},"sort_by":{"type":"string","description":"Sort results by","enum":["ratings_count","ratings_average","price"],"default":"ratings_average"},"min_rating":{"type":"number","description":"Minimum rating (default 3.5)","default":3.5,"minimum":1,"maximum":5},"max_price":{"type":"number","description":"Maximum price in local currency"},"limit":{"type":"number","description":"Number of results (1-25, default 15)","default":15,"minimum":1,"maximum":25},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":["country"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Explore top French wines","input":{"country":"fr"}},{"description":"Find affordable Italian reds in euros","input":{"country":"it","wine_type":"red","max_price":25,"market":"de","currency":"EUR"}},{"description":"Best wines from New Zealand","input":{"country":"nz","sort_by":"ratings_average","min_rating":4}}],"pricing":"free","outputSchema":{"type":"object","properties":{"country":{"type":"string","description":"Country explored"},"wines":{"type":"array","description":"Wines from the region"},"count":{"type":"number","description":"Number of wines returned"}}},"returns":"Wines from the specified region with ratings, localized prices, wineries, and grape information"},{"name":"marketplace_deals","displayName":"Marketplace Deals","description":"Search global marketplaces for wine listings — eBay, Facebook Marketplace, Mercado Libre, Rakuten, Craigslist, Gumtree, and Carousell. Great for finding rare vintages, collectible bottles, auction deals, and wines not available through traditional retail.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Wine name or description to search for (e.g. \"Penfolds Grange 2010\", \"vintage Burgundy\", \"rare Bordeaux\")"},"vintage":{"type":"string","description":"Optional vintage year to narrow results (e.g. \"2015\", \"2018\")"},"sources":{"type":"array","description":"Specific marketplace sources to search (default: all wine-relevant platforms)","items":{"type":"string","enum":["ebay","facebook_marketplace","craigslist","gumtree","mercadolibre","rakuten","carousell"]}},"condition":{"type":"string","description":"Listing condition filter","enum":["any","new","used"],"default":"any"},"listing_classes":{"type":"array","description":"Filter by listing type","items":{"type":"string","enum":["classified","auction","fixed_price","retail_marketplace"]}},"limit":{"type":"number","description":"Maximum listings to return (1-25, default 15)","default":15,"minimum":1,"maximum":25},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find Penfolds Grange on eBay","input":{"query":"Penfolds Grange","sources":["ebay"]}},{"description":"Search for vintage Burgundy globally","input":{"query":"Domaine de la Romanée-Conti","vintage":"2015"}},{"description":"Find wine deals in Japan on Rakuten","input":{"query":"Opus One","sources":["rakuten"],"market":"jp"}},{"description":"Browse wine auctions only","input":{"query":"rare Bordeaux","listing_classes":["auction"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used"},"listings":{"type":"array","description":"Marketplace listings with title, price, source, condition, and link"},"sources_searched":{"type":"array","description":"Marketplaces that were searched"},"count":{"type":"number","description":"Number of listings found"}}},"returns":"Global marketplace listings for wine with titles, prices, sources, conditions, listing types, and direct links"},{"name":"food_pairing","displayName":"Food Pairing","description":"Get food pairing recommendations for any wine based on its tasting profile — acidity, tannin, sweetness, body, and dominant flavors. Accepts a wine_id or wine name. Returns categorized pairing suggestions with reasoning.","inputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"Vivino wine ID — obtained from search_wines results"},"query":{"type":"string","description":"Wine name to look up (alternative to wine_id, e.g. \"Barolo\", \"Sancerre\", \"Malbec\")"},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"What food goes with this wine?","input":{"wine_id":1520}},{"description":"Food pairings for Barolo by name","input":{"query":"Barolo"}},{"description":"Pairing suggestions for Champagne","input":{"query":"Veuve Clicquot Brut"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"The wine ID used"},"wine_name":{"type":"string","description":"Wine name"},"summary":{"type":"string","description":"Quick pairing summary"},"structure":{"type":"object","description":"Wine structure used for pairing analysis"},"pairings":{"type":"array","description":"Food pairing categories with specific dishes and reasoning"},"pairing_count":{"type":"number","description":"Number of pairing categories"}}},"returns":"Food pairing recommendations organized by category with specific dishes and sommelier-style reasoning based on the wine's tasting profile"},{"name":"similar_wines","displayName":"Similar Wines","description":"Find wines similar to a reference wine — matched by grape variety, region, price range, and rating. Great for discovering alternatives when your favorite bottle is unavailable or finding comparable wines at different price points.","inputSchema":{"type":"object","properties":{"wine_id":{"type":"number","description":"Vivino wine ID of the reference wine — obtained from search_wines results"},"query":{"type":"string","description":"Wine name to find alternatives for (alternative to wine_id, e.g. \"Opus One\", \"Silver Oak Cabernet\")"},"max_price_delta":{"type":"number","description":"Maximum price difference from the reference wine in local currency (e.g. 20 means ±$20)"},"limit":{"type":"number","description":"Number of similar wines to return (1-25, default 10)","default":10,"minimum":1,"maximum":25},"market":{"type":"string","description":"Country code for localized prices (default \"us\"). E.g. \"gb\", \"fr\", \"de\", \"jp\", \"au\", \"sg\", \"hk\", \"kr\", \"br\", \"za\", \"ae\", \"in\"","default":"us"},"currency":{"type":"string","description":"Currency code for prices (default \"USD\"). E.g. \"GBP\", \"EUR\", \"JPY\", \"AUD\", \"SGD\", \"HKD\", \"KRW\", \"BRL\", \"ZAR\", \"AED\", \"INR\"","default":"USD"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find wines similar to Opus One","input":{"query":"Opus One"}},{"description":"Cheaper alternatives within $15","input":{"query":"Caymus Cabernet Sauvignon","max_price_delta":15}},{"description":"Similar wines in the UK market","input":{"query":"Cloudy Bay Sauvignon Blanc","market":"gb","currency":"GBP"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"reference_wine":{"type":"object","description":"The wine used as reference"},"similar_wines":{"type":"array","description":"Similar wines ranked by similarity score"},"count":{"type":"number","description":"Number of similar wines found"}}},"returns":"Similar wines ranked by match quality with grape variety, region, price, and rating similarity scores"}],"workflow":["search_wines → wine_details","search_wines → tasting_profile","search_wines → drinking_window","search_wines → food_pairing","search_wines → similar_wines","search_wines → price_compare","search_wines → marketplace_deals","top_rated → price_compare","region_explorer → wine_details","similar_wines → price_compare","food_pairing","marketplace_deals","drinking_window"],"icon":"/icons/wine-collector.webp","changelog":[{"version":"0.01","date":"2026-03-28","changes":["Initial release with search, details, pricing, tasting profiles, top-rated, and region exploration"]},{"version":"0.02","date":"2026-03-28","changes":["Added global market/currency support — localized pricing for UK, EU, Asia, and 50+ countries"]},{"version":"0.03","date":"2026-03-29","changes":["Added marketplace_deals skill — search eBay, Mercado Libre, Rakuten, Facebook Marketplace, Craigslist, Gumtree, and Carousell for wine listings","Added food_pairing skill — AI-driven food pairing recommendations based on wine tasting profile (acidity, tannin, sweetness, body, flavors)","Added similar_wines skill — find alternative wines by matching grape variety, region, price range, and rating","Enhanced price_compare with optional include_marketplaces flag to merge Vivino merchant prices with global marketplace listings","Fixed countryCode bug in price_compare empty-result message"]},{"version":"0.04","date":"2026-05-29","changes":["Added drinking_window skill — find out when a wine is ready to drink, at its peak, and past its best, from the grape, region, and vintage (e.g. \"Barolo 2015\")","Restored wine name search — searching by name now returns the right wines again, with accurate ratings, vintages, and live prices"]}],"premadePrompt":"Find me a highly-rated [wine name, grape variety, or region] under [price], tell me about its tasting profile, and what food it pairs well with."},{"name":"trading-cards","displayName":"Trading Cards","subtitle":"Pokemon, Magic, and Yu-Gi-Oh card prices and data","about":"**Trading Cards** is the complete price and data lookup for Pokemon TCG, Magic: The Gathering, and Yu-Gi-Oh. Search by card name, browse sets by value, check prices across conditions and marketplaces, and identify cards from partial information — all three games in one place.\n\nIt covers everything from spotting the most valuable pull in a set before you buy a pack to checking what a childhood card collection is actually worth today. Prices come from TCGPlayer and CardMarket so you're seeing real marketplace data, not estimates.\n\n### What you can do\n- **search_cards** — search by card name across Pokemon, MTG, or Yu-Gi-Oh with images and market prices\n- **card_price** — detailed pricing by condition (near mint, lightly played, etc.) and foil variants with buy links\n- **set_browse** — browse all cards in a set sorted by value to find the most valuable pulls\n- **top_cards** — most valuable cards for a game, filterable by rarity, type, or set\n- **identify_card** — identify a card from partial information like a name fragment, number, or set\n\n### Who it's for\nCollectors, traders, players, and parents trying to value cards found in attics. Works for anyone who wants to know what a card is worth, where to buy or sell it, and what the most valuable cards in a set are.\n\n### How to use it\n1. Use **search_cards** with a card name and game to find the card and get basic pricing\n2. Take the card_id from search results and pass it to **card_price** for a full condition-by-condition price breakdown with direct marketplace links\n3. To find the most valuable pulls in a specific set, use **set_browse** with the set ID sorted by value\n4. If you only have partial information, use **identify_card** — it handles name fragments, set numbers, and vague descriptions\n\n### Getting started\nNo setup needed — all five skills work immediately with no credentials required. Defaults to Pokemon if no game is specified.","version":"0.01","categories":["data","search"],"currency":"USD","skills":[{"name":"search_cards","displayName":"Search Cards","description":"Search for trading cards by name across Pokemon TCG, Magic: The Gathering, or Yu-Gi-Oh. Returns card details, images, and market prices.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Card name or search text (e.g. \"Charizard\", \"Black Lotus\", \"Dark Magician\")"},"game":{"type":"string","description":"Which card game to search","enum":["pokemon","mtg","yugioh"],"default":"pokemon"},"limit":{"type":"number","description":"Number of results (1-20, default 10)","default":10,"minimum":1,"maximum":20},"page":{"type":"number","description":"Page number for pagination (default 1)","default":1,"minimum":1}},"required":["query"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Search for Charizard Pokemon cards","input":{"query":"Charizard","game":"pokemon"}},{"description":"Find Magic Lightning Bolt cards","input":{"query":"Lightning Bolt","game":"mtg"}},{"description":"Look up Yu-Gi-Oh Blue-Eyes White Dragon","input":{"query":"Blue-Eyes White Dragon","game":"yugioh"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query used"},"game":{"type":"string","description":"Card game searched"},"total_found":{"type":"number","description":"Total matching cards"},"cards":{"type":"array","description":"Matching cards with details and prices"},"count":{"type":"number","description":"Number of cards returned"}}},"returns":"Matching cards with names, sets, rarities, images, and market prices from TCGPlayer and CardMarket"},{"name":"card_price","displayName":"Card Price","description":"Get detailed pricing for a specific card including prices by condition, foil variants, and purchase links. Use a card_id from search results.","inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"Card ID from search results (e.g. \"base1-4\" for Pokemon, UUID for MTG, number for Yu-Gi-Oh)"},"game":{"type":"string","description":"Which card game","enum":["pokemon","mtg","yugioh"],"default":"pokemon"}},"required":["card_id","game"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Get price for Base Set Charizard","input":{"card_id":"base1-4","game":"pokemon"}},{"description":"Get Yu-Gi-Oh card price","input":{"card_id":"46986414","game":"yugioh"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Card name"},"prices":{"type":"object","description":"Price breakdown by condition and variant"},"purchase_links":{"type":"object","description":"Buy links for TCGPlayer, CardMarket"}}},"returns":"Full price breakdown by condition and variant with purchase links to TCGPlayer and CardMarket"},{"name":"set_browse","displayName":"Browse Set","description":"Browse all cards in a specific set, sorted by value. Find the most valuable pulls or check set composition.","inputSchema":{"type":"object","properties":{"set_id":{"type":"string","description":"Set identifier — Pokemon: \"base1\", \"sv1\". MTG: \"lea\", \"2xm\". Yu-Gi-Oh: set name"},"game":{"type":"string","description":"Which card game","enum":["pokemon","mtg","yugioh"],"default":"pokemon"},"sort_by":{"type":"string","description":"Sort cards by value or name","enum":["value","number","name"],"default":"value"},"limit":{"type":"number","description":"Number of cards to return (1-50, default 20)","default":20,"minimum":1,"maximum":50}},"required":["set_id","game"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Browse the Base Set by value","input":{"set_id":"base1","game":"pokemon"}},{"description":"Browse Alpha Edition MTG cards","input":{"set_id":"lea","game":"mtg"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"set_name":{"type":"string","description":"Set name"},"total_cards":{"type":"number","description":"Total cards in the set"},"cards":{"type":"array","description":"Cards sorted by value or name"}}},"returns":"Cards in the set sorted by value with prices, rarities, and images"},{"name":"top_cards","displayName":"Top Cards","description":"Find the most valuable or popular cards for a game. Filter by rarity, type, or set to discover what is worth the most.","inputSchema":{"type":"object","properties":{"game":{"type":"string","description":"Which card game","enum":["pokemon","mtg","yugioh"],"default":"pokemon"},"rarity":{"type":"string","description":"Filter by rarity (e.g. \"Rare Holo\", \"mythic\", \"Ultra Rare\")"},"set_id":{"type":"string","description":"Filter to a specific set ID or code"},"type_filter":{"type":"string","description":"Card type filter (e.g. \"Pokemon\", \"creature\", \"Effect Monster\")"},"limit":{"type":"number","description":"Number of cards (1-25, default 10)","default":10,"minimum":1,"maximum":25}},"required":["game"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Most valuable Pokemon cards","input":{"game":"pokemon"}},{"description":"Top mythic MTG cards","input":{"game":"mtg","rarity":"mythic"}},{"description":"Most expensive Yu-Gi-Oh cards","input":{"game":"yugioh"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"game":{"type":"string","description":"Game searched"},"cards":{"type":"array","description":"Most valuable cards"},"count":{"type":"number","description":"Cards returned"}}},"returns":"Most valuable cards sorted by market price descending with images, rarities, and set info"},{"name":"identify_card","displayName":"Identify Card","description":"Identify a card from partial information — a name fragment, set number, or vague description. Helpful when the user has incomplete details.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Full or partial card name (e.g. \"chariz\", \"bolt\", \"blue eyes\")"},"game":{"type":"string","description":"Which card game to search","enum":["pokemon","mtg","yugioh"],"default":"pokemon"},"set_id":{"type":"string","description":"Set ID or code to narrow search"},"number":{"type":"string","description":"Card number within a set (e.g. \"4\", \"141\")"}},"required":["name","game"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Identify a Pokemon card by partial name","input":{"name":"chariz","game":"pokemon"}},{"description":"Find a card by partial name in MTG","input":{"name":"bolt","game":"mtg"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"matches":{"type":"array","description":"Best matching cards"},"count":{"type":"number","description":"Matches found"}}},"returns":"Best matching cards with full details, images, and prices based on the partial information provided"}],"workflow":["search_cards → card_price","set_browse → card_price","top_cards","identify_card → card_price"],"icon":"/icons/trading-cards.webp","changelog":[{"version":"0.01","date":"2026-03-28","changes":["Initial release with Pokemon TCG, Magic: The Gathering, and Yu-Gi-Oh support"]}],"premadePrompt":"How much is [card name] worth right now? Show me the prices for different conditions and where I can buy or sell it."},{"name":"manufacturer-finder","displayName":"Manufacturer Finder","subtitle":"Find and verify manufacturers and suppliers worldwide","about":"**Manufacturer Finder** searches over 100 supplier directories, trade databases, and government registries to locate and verify manufacturers worldwide. From Chinese factories on Alibaba to European suppliers on Kompass to FDA-registered food and medical manufacturers, it covers the full global sourcing landscape in one workflow.\n\nFinding a manufacturer usually means spending days manually searching multiple directories, then trying to verify whether the companies are legitimate. This tool compresses that into a single conversation — search globally, understand which countries dominate your product category, check import records to see who actually supplies known brands, and verify company registration status before reaching out.\n\n### What you can do\n- **find_manufacturers** — search 100+ directories globally for suppliers of any product type\n- **manufacturing_hubs** — find which countries are the top exporters of a product category using trade data\n- **supply_chain_intel** — find real factory-buyer relationships from import and export records\n- **verify_manufacturer** — check company legitimacy across 200M+ registered companies\n- **manufacturer_profile** — get a detailed profile including certifications, MOQ, factory size, and contact info\n\n### Who it's for\nEntrepreneurs sourcing a product for the first time who need to find and vet manufacturers. Procurement teams expanding their supplier base or moving production to new regions. Importers who want to know which factories supply competing brands.\n\n### How to use it\n1. Start with **manufacturing_hubs** to understand which countries lead in your product category\n2. Use **find_manufacturers** to search for specific suppliers — include required capabilities or certifications to filter results\n3. Use **supply_chain_intel** to find verified factory-buyer relationships from real import records\n4. Use **verify_manufacturer** and **manufacturer_profile** to do due diligence before reaching out\n\n### Getting started\nRun **find_manufacturers** with your product description. Add a country filter to target a specific region, or leave it blank to search globally.","version":"0.02","categories":["data","search"],"currency":"USD","skills":[{"name":"find_manufacturers","displayName":"Find Manufacturers","description":"Search 100+ supplier directories globally (Alibaba, ThomasNet, IndiaMART, Kompass, TaiwanTrade, TradeKorea, Europages, and more) plus FDA for medical/food products. Returns manufacturers with locations, capabilities, and source URLs.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Product or component to manufacture (e.g. \"custom silicone phone cases\", \"CNC machined aluminum parts\")"},"country":{"type":"string","description":"Filter to manufacturers in a specific country (e.g. \"China\", \"Germany\", \"India\"). Omit to search globally."},"capabilities":{"type":"string","description":"Required manufacturing capabilities or certifications (e.g. \"ISO 9001\", \"injection molding\", \"FDA registered\")"},"limit":{"type":"number","description":"Maximum number of results to return (default: 15, max: 30)","default":15}},"required":["product"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find silicone phone case manufacturers","input":{"product":"custom silicone phone cases"}},{"description":"Find CNC machining suppliers in Germany","input":{"product":"CNC machined aluminum parts","country":"Germany","capabilities":"ISO 9001"}},{"description":"Find PCB assembly manufacturers in Shenzhen","input":{"product":"PCB assembly and SMT","country":"China"}}],"pricing":"paid","returns":"List of manufacturers with name, location, capabilities, source directory, URL, and relevance summary"},{"name":"manufacturing_hubs","displayName":"Manufacturing Hubs","description":"Discover which countries are the top manufacturers and exporters of a product category using UN Comtrade international trade data. Helps identify the best regions to source from based on real export volumes.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Product category to research (e.g. \"electronics\", \"textiles\", \"automotive parts\", \"pharmaceuticals\")"},"hs_code":{"type":"string","description":"HS commodity code for precise lookup (e.g. \"8542\" for integrated circuits). Auto-inferred if omitted."},"year":{"type":"number","description":"Trade data year (default: most recent available). UN Comtrade data typically lags 1-2 years."},"limit":{"type":"number","description":"Number of top exporting countries to return (default: 10)","default":10}},"required":["product"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find top countries for electronics manufacturing","input":{"product":"consumer electronics"}},{"description":"Find top textile exporters using HS code","input":{"product":"cotton textiles","hs_code":"5208"}}],"pricing":"free","returns":"Ranked list of countries by export volume with trade values, quantities, and year-over-year trends"},{"name":"supply_chain_intel","displayName":"Supply Chain Intelligence","description":"Find real factory-buyer relationships by searching import/export records and supply chain databases. Reveals which factories actually supply known brands, providing verified sourcing intelligence beyond directory listings.","inputSchema":{"type":"object","properties":{"product":{"type":"string","description":"Product type to investigate (e.g. \"stainless steel water bottles\", \"LED lighting\")"},"brand":{"type":"string","description":"Optional brand name to find their suppliers (e.g. \"Hydro Flask\", \"IKEA\")"},"country":{"type":"string","description":"Filter to suppliers in a specific origin country"},"limit":{"type":"number","description":"Maximum results (default: 10)","default":10}},"required":["product"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find suppliers for stainless steel water bottles","input":{"product":"stainless steel water bottles"}},{"description":"Find who manufactures for Hydro Flask","input":{"product":"water bottles","brand":"Hydro Flask"}}],"pricing":"paid","returns":"List of verified supplier-buyer relationships with factory names, buyer brands, shipment details, and source references"},{"name":"verify_manufacturer","displayName":"Verify Manufacturer","description":"Check manufacturer legitimacy across OpenCorporates (200M+ companies) and GLEIF LEI database (2M+ legal entities) in parallel. Returns registration status, LEI codes, jurisdiction, and incorporation details.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Full company name to verify (e.g. \"Shenzhen Foxconn Technology Co., Ltd.\")"},"jurisdiction":{"type":"string","description":"Country or jurisdiction code to narrow search (e.g. \"cn\", \"us_ca\", \"gb\", \"de\"). See OpenCorporates for full list."}},"required":["company_name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Verify a Chinese manufacturer","input":{"company_name":"Shenzhen Foxconn Technology Co., Ltd."}},{"description":"Verify a US company in California","input":{"company_name":"Tesla Inc","jurisdiction":"us_ca"}}],"pricing":"free","returns":"Company registration details including status, jurisdiction, incorporation date, registered address, and officers"},{"name":"manufacturer_profile","displayName":"Manufacturer Profile","description":"Get a detailed profile of a specific manufacturer by searching for in-depth information including products, certifications, factory details, MOQ, and contact info. Aggregates data from supplier directories and company websites.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","description":"Manufacturer or supplier company name"},"website":{"type":"string","description":"Company website URL for direct profile enrichment. The tool server CAN fetch any public URL — always pass it."},"product":{"type":"string","description":"Optional product context to focus the profile on relevant capabilities"}},"required":["company_name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Get profile for a known manufacturer","input":{"company_name":"BYD Company Limited"}},{"description":"Get profile with product focus","input":{"company_name":"Foxconn","product":"PCB assembly"}}],"pricing":"paid","returns":"Detailed manufacturer profile with products, certifications, factory size, MOQ, export markets, and contact details"}],"workflow":["find_manufacturers","manufacturing_hubs → find_manufacturers","find_manufacturers → manufacturer_profile → verify_manufacturer","manufacturing_hubs → find_manufacturers → supply_chain_intel → verify_manufacturer"],"icon":"/icons/manufacturer-finder.webp","changelog":[{"version":"0.01","date":"2026-03-30","changes":["Initial release with 5 skills: find, hubs, supply chain, verify, profile"]},{"version":"0.02","date":"2026-03-30","changes":["Add 100+ supplier directories across all regions, FDA establishment search, GLEIF LEI verification, 200+ HS code mappings"]}],"premadePrompt":"Find manufacturers for [product type] — I want verified suppliers with their capabilities and contact details.","requirements":[{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"}],"credentials":[{"name":"exa","type":"secret","displayName":"Exa API Key","description":"Optional: use your own Exa key instead of the platform default","acquireUrl":"https://dashboard.exa.ai/api-keys","envFallback":"EXA_API_KEY"}]},{"name":"interior-design","displayName":"Interior Design","subtitle":"Redesign, stage, and visualize any room with AI","about":"**Interior Design** transforms room photos with AI — redesigning spaces in dozens of styles, virtually staging empty rooms, changing wall colors, adjusting lighting, converting hand-drawn sketches into photorealistic renders, and redesigning outdoor spaces. It covers the full range of interior and exterior visualization tasks in one tool.\n\nFor homeowners planning a renovation, real estate agents staging listings, and designers presenting concepts to clients, it eliminates the gap between imagining a space and showing what it would actually look like.\n\n### What you can do\n- **redesign_room** — restyle a furnished room in any of 20+ interior design styles\n- **stage_room** — furnish and decorate an empty room for real estate or presentations\n- **empty_room** — remove all furniture and decor to show the raw architectural space\n- **sketch_to_render** — convert a hand-drawn concept sketch into a photorealistic interior\n- **outdoor_design** — redesign gardens, patios, facades, and pool areas\n- **paint_walls** — change wall color while keeping all furniture and decor intact\n- **change_lighting** — adjust the lighting mood from bright daylight to warm evening ambiance\n- **add_furniture** — place specific furniture items into a room naturally\n- **add_people** — insert lifestyle figures for marketing or editorial visuals\n- **upscale_room** — increase resolution up to 4K for print or listing use\n\n### Who it's for\nHomeowners visualizing a renovation before committing, real estate agents creating compelling listing photos, interior designers presenting concepts to clients, and property developers building marketing materials.\n\n### How to use it\n1. Use **redesign_room** to restyle a furnished room — pick a style like minimalist, mid-century modern, or japandi and optionally add custom instructions\n2. Use **stage_room** for empty rooms, or **empty_room** to clear a furnished space first\n3. Chain **redesign_room** followed by **upscale_room** for high-resolution output ready for print or listings\n4. Use **paint_walls** or **change_lighting** for targeted changes without a full redesign\n\n### Getting started\nWorks immediately with no setup — pass any room photo URL and a style to get started.","version":"0.04","categories":["media","ai"],"currency":"USD","skills":[{"name":"redesign_room","displayName":"Redesign Room","description":"Redesign a furnished room in a chosen style. Supports prompt-guided redesign and style-transfer mode. Works on living rooms, bedrooms, kitchens, offices, and more.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["modern","contemporary","minimalist","scandinavian","industrial","mid-century-modern","art-deco","farmhouse","bohemian","coastal","rustic","traditional","mediterranean","japanese","french-country","luxury","eco-friendly","futuristic","retro","tropical","hollywood-glam","vintage","neoclassic","biophilic","cottagecore","zen","cyberpunk","gothic","baroque","maximalist","shabby-chic","art-nouveau","nautical","ski-chalet"],"default":"modern","description":"Interior design style to apply to the room."},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room being redesigned. Helps the model apply appropriate furniture and decor."},"mode":{"type":"string","enum":["prompt","style-transfer"],"default":"prompt","description":"\"prompt\" uses AI to freely redesign the room in the chosen style. \"style-transfer\" blends the style more closely with the original image structure."},"strength":{"type":"number","minimum":0.1,"maximum":1,"default":0.65,"description":"How strongly to apply the redesign (0.1–1.0). Higher values diverge more from the original. Only used in \"style-transfer\" mode."},"custom_instructions":{"type":"string","description":"Optional extra guidance appended to the prompt, e.g. \"add a fireplace\" or \"keep the hardwood floors\"."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Redesign a living room in a modern minimalist style","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"minimalist","room_type":"living-room"}},{"description":"Style-transfer a bedroom into a mid-century modern look with custom touches","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"mid-century-modern","room_type":"bedroom","mode":"style-transfer","strength":0.75,"custom_instructions":"Add a statement headboard and warm lighting"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path to the redesigned room image"},"style":{"type":"string","description":"Style applied to the room"},"room_type":{"type":"string","description":"Room type that was redesigned"},"mode":{"type":"string","description":"Redesign mode used (prompt or style-transfer)"}}},"contentType":"image","returns":"Photorealistic redesigned room image in the chosen style"},{"name":"stage_room","displayName":"Stage Room","description":"Virtually stage an empty room by adding furniture, decor, and accessories in a chosen style. Ideal for real estate listings and interior design presentations.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["modern","contemporary","minimalist","scandinavian","industrial","mid-century-modern","art-deco","farmhouse","bohemian","coastal","rustic","traditional","mediterranean","japanese","french-country","luxury","eco-friendly","futuristic","retro","tropical","hollywood-glam","vintage","neoclassic","biophilic","cottagecore","zen","cyberpunk","gothic","baroque","maximalist","shabby-chic","art-nouveau","nautical","ski-chalet"],"default":"modern","description":"Interior design style used to furnish and decorate the room."},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room being staged. Determines appropriate furniture and accessories."},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"include a large sectional sofa\" or \"neutral color palette only\"."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Stage an empty living room for a real estate listing","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"contemporary","room_type":"living-room"}},{"description":"Stage a bare bedroom in a Scandinavian style with cozy touches","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"scandinavian","room_type":"bedroom","custom_instructions":"Add warm textile accents and plants"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path to the staged room image"},"style":{"type":"string","description":"Style used for staging"},"room_type":{"type":"string","description":"Room type that was staged"}}},"contentType":"image","returns":"Furnished and decorated room image ready for presentation or listing"},{"name":"empty_room","displayName":"Empty Room","description":"Remove all furniture, decor, and personal items from a room photo, leaving bare walls, floors, and architectural features. Useful for real estate, renovation planning, and before-and-after comparisons.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room being emptied. Helps the model retain appropriate architectural elements."},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"keep the built-in shelving\" or \"preserve the fireplace surround\"."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Clear a furnished living room for a property listing showing the raw space","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","room_type":"living-room"}},{"description":"Empty a home office while keeping built-in cabinetry","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","room_type":"home-office","custom_instructions":"Retain the built-in shelving along the back wall"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path to the emptied room image"},"room_type":{"type":"string","description":"Room type that was emptied"}}},"contentType":"image","returns":"Clean vacant room image with furniture and decor removed"},{"name":"sketch_to_render","displayName":"Sketch to Render","description":"Convert a hand-drawn sketch or floor-plan drawing into a photorealistic interior render. Great for architects, interior designers, and homeowners visualizing renovation concepts.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["modern","contemporary","minimalist","scandinavian","industrial","mid-century-modern","art-deco","farmhouse","bohemian","coastal","rustic","traditional","mediterranean","japanese","french-country","luxury","eco-friendly","futuristic","retro","tropical","hollywood-glam","vintage","neoclassic","biophilic","cottagecore","zen","cyberpunk","gothic","baroque","maximalist","shabby-chic","art-nouveau","nautical","ski-chalet"],"default":"modern","description":"Interior design style to apply in the photorealistic render."},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room being rendered. Guides material selection and furniture placement."},"strength":{"type":"number","minimum":0.3,"maximum":1,"default":0.85,"description":"How strongly to transform the sketch (0.3–1.0). Higher = more realistic, lower = more sketch lines preserved."},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"use concrete floors\" or \"floor-to-ceiling windows on the north wall\"."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Render a hand-drawn living room concept sketch in a modern style","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"modern","room_type":"living-room"}},{"description":"Convert an architectural floor-plan sketch into a luxury dining room render","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"luxury","room_type":"dining-room","strength":0.9,"custom_instructions":"High ceilings with a statement chandelier"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path to the rendered room image"},"style":{"type":"string","description":"Style applied in the render"},"room_type":{"type":"string","description":"Room type that was rendered"},"strength":{"type":"number","description":"Transformation strength used"}}},"contentType":"image","returns":"Photorealistic interior render generated from the sketch"},{"name":"outdoor_design","displayName":"Outdoor Design","description":"Redesign outdoor spaces like gardens, patios, facades, and pool areas in a chosen style. Works with exterior photos of homes, yards, and commercial outdoor areas.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["modern","contemporary","minimalist","scandinavian","industrial","mid-century-modern","art-deco","farmhouse","bohemian","coastal","rustic","traditional","mediterranean","japanese","french-country","luxury","eco-friendly","futuristic","retro","tropical","hollywood-glam","vintage","neoclassic","biophilic","cottagecore","zen","cyberpunk","gothic","baroque","maximalist","shabby-chic","art-nouveau","nautical","ski-chalet"],"default":"modern","description":"Design style to apply to the outdoor space"},"space_type":{"type":"string","enum":["outdoor-garden","outdoor-patio","house-exterior","pool-area","balcony","rooftop-terrace","front-yard","backyard","driveway","courtyard","deck","pergola"],"default":"outdoor-garden","description":"Type of outdoor space being redesigned"},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"add a fire pit\" or \"use native plants\""}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Redesign a backyard garden in a zen style","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"zen","space_type":"outdoor-garden"}},{"description":"Transform a plain patio into a mediterranean outdoor living area","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","style":"mediterranean","space_type":"outdoor-patio","custom_instructions":"add string lights and terracotta planters"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the redesigned outdoor image"},"style":{"type":"string","description":"Style applied"},"space_type":{"type":"string","description":"Outdoor space type"}}},"contentType":"image","returns":"Photorealistic redesigned outdoor space in the chosen style"},{"name":"paint_walls","displayName":"Paint Walls","description":"Change the wall color in a room photo while keeping all furniture and decor intact. Specify any color by name or description to see how a new paint color would look.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"color":{"type":"string","description":"Wall color to apply, e.g. \"sage green\", \"warm white\", \"navy blue\""},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room being repainted"},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"only paint the accent wall\" or \"include the ceiling\""}},"required":["image_url","color"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Paint a living room sage green","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","color":"sage green","room_type":"living-room"}},{"description":"Paint only the accent wall in a bedroom dark navy","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","color":"dark navy","room_type":"bedroom","custom_instructions":"only paint the wall behind the bed"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the repainted room image"},"color":{"type":"string","description":"Wall color applied"},"room_type":{"type":"string","description":"Room type"}}},"contentType":"image","returns":"Room image with walls repainted in the specified color"},{"name":"change_lighting","displayName":"Change Lighting","description":"Adjust the lighting conditions in a room photo. Change from day to evening, add warm ambient glow, simulate natural daylight, or create moody atmosphere — while keeping the room layout unchanged.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"lighting":{"type":"string","description":"Desired lighting, e.g. \"warm evening\", \"bright natural daylight\", \"moody ambient\", \"golden hour sunset\""},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room being relit"},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"add candles on the table\" or \"light coming from the left window\""}},"required":["image_url","lighting"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Change a living room to warm evening lighting","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","lighting":"warm evening with soft lamp glow","room_type":"living-room"}},{"description":"Simulate bright morning sunlight in a kitchen","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","lighting":"bright natural morning sunlight","room_type":"kitchen"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the relit room image"},"lighting":{"type":"string","description":"Lighting applied"},"room_type":{"type":"string","description":"Room type"}}},"contentType":"image","returns":"Room image with adjusted lighting and atmosphere"},{"name":"add_furniture","displayName":"Add Furniture","description":"Place specific furniture items into a room photo. Describe what to add and where — the AI will position it naturally in the space, matching existing style and proportions.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"furniture":{"type":"string","description":"What to add, e.g. \"a leather sectional sofa against the far wall\" or \"a round dining table with 4 chairs\""},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room"},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"match the existing mid-century style\" or \"oak wood finish\""}},"required":["image_url","furniture"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Add a bookshelf to a home office","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","furniture":"a tall wooden bookshelf against the wall","room_type":"home-office"}},{"description":"Place a dining set in an empty dining room","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","furniture":"a round marble dining table with 6 velvet chairs","room_type":"dining-room"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the updated room image"},"furniture":{"type":"string","description":"Furniture added"},"room_type":{"type":"string","description":"Room type"}}},"contentType":"image","returns":"Room image with the specified furniture placed naturally"},{"name":"add_people","displayName":"Add People","description":"Insert people into a room scene for lifestyle visualization. Describe who to add and what they are doing — the AI places them naturally with realistic proportions and lighting.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"people":{"type":"string","description":"Who to add and what they are doing, e.g. \"a couple sitting on the sofa\" or \"a woman reading by the window\""},"room_type":{"type":"string","enum":["living-room","bedroom","kitchen","bathroom","dining-room","home-office","kids-room","studio","hallway","walk-in-closet","laundry-room","attic","garage","gym","gaming-room","meeting-room","office","coworking-space","coffee-shop","restaurant","hotel-lobby","hotel-room","store","salon","outdoor-patio","outdoor-garden","house-exterior","pool-area","balcony"],"default":"living-room","description":"Type of room"},"custom_instructions":{"type":"string","description":"Optional extra guidance, e.g. \"casual clothing\" or \"looking at the camera\""}},"required":["image_url","people"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Add a couple relaxing in a living room","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","people":"a couple sitting together on the sofa, relaxing","room_type":"living-room"}},{"description":"Add a person working at a desk in a home office","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","people":"a man working on a laptop at the desk","room_type":"home-office"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the updated room image"},"people":{"type":"string","description":"People added"},"room_type":{"type":"string","description":"Room type"}}},"contentType":"image","returns":"Room image with people placed naturally in the scene"},{"name":"upscale_room","displayName":"Upscale Room","description":"Increase the resolution of a room image up to 4K. Use after any other skill to get a higher-quality output for print, presentations, or listings.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"scale":{"type":"number","minimum":1,"maximum":4,"default":2,"description":"Scale factor (1-4x). 2x is recommended for most uses"},"target_resolution":{"type":"string","enum":["720p","1080p","2K","4K"],"description":"Target resolution instead of scale factor. Overrides scale if set"}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Upscale a redesigned room to 2x resolution","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","scale":2}},{"description":"Upscale a staged room image to 4K for a print listing","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","target_resolution":"4K"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the upscaled image"}}},"contentType":"image","returns":"Higher resolution version of the room image"}],"workflow":["redesign_room","outdoor_design","stage_room","empty_room","sketch_to_render","paint_walls","change_lighting","add_furniture","add_people","upscale_room"],"icon":"/icons/interior-design.webp","changelog":[{"version":"0.01","date":"2026-03-30","changes":["Initial release with redesign, staging, empty room, and sketch-to-render skills"]},{"version":"0.02","date":"2026-03-30","changes":["Add upscale, outdoor design, paint walls, change lighting, add furniture, and add people skills"]},{"version":"0.03","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across room designs"]},{"version":"0.04","date":"2026-04-14","changes":["Accept scenes (rooms) from your file library"]}],"premadePrompt":"Redesign my [room type] in a [style, e.g. modern minimalist] style. Here is a photo of the current room: [image URL].","usesScenes":true,"usesStyleReferences":true,"styleReferenceSkills":["redesign_room","stage_room","sketch_to_render","outdoor_design"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply the user's design style preferences and aesthetic\n  - Reference preferred colour schemes and materials\n  - Match established interior design direction","produces":["design_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"jewelry-visualizer","displayName":"Jewelry Visualizer","subtitle":"Photorealistic jewelry renders from text and references","about":"**Jewelry Visualizer** is a complete AI-powered jewelry design suite — from generating photorealistic renders from scratch to identifying hallmarks on antique pieces. Whether you're designing new pieces, preparing client proposals, or cleaning up product photography, every part of the workflow is covered in one place.\n\nJewelers and retailers spend hours on photography, client mockups, and sourcing consultations. This tool replaces most of that manual work with AI renders that match professional studio standards — and it handles the analytical side too, identifying what a piece is made of and decoding maker's marks from a photo.\n\n### What you can do\n- **generate_jewelry** — create photorealistic images from text descriptions or reference photos\n- **visualize_on_model** — show a piece of jewelry worn on a real or described person\n- **design_to_schematic** — convert designs into technical blueprint-style line drawings\n- **recolor_design** — swap metals and gemstones on an existing jewelry photo\n- **engrave_preview** — preview personalized inscriptions before ordering\n- **compare_variants** — generate the same design in multiple material combinations side by side\n- **clean_photo** — remove dust, fingerprints, and marks from product photos\n- **identify_piece** — analyze a photo to determine era, style, metal, and stones\n- **identify_hallmark** — decode maker's marks and purity stamps from a close-up photo\n\n### Who it's for\nJewelers and independent designers who need quick renders for clients or social media. Retailers building product catalogs without a studio photographer. Collectors and appraisers who need to identify or document pieces.\n\n### How to use it\n1. To create new designs, use **generate_jewelry** with a text description and optional reference images\n2. To show a piece on a person, use **visualize_on_model** with a jewelry photo and model description\n3. To prepare a client proposal, use **compare_variants** to show metal and stone options side by side\n4. To clean up existing product photos, use **clean_photo** on the image URL\n5. To decode marks on an antique, use **identify_hallmark** with a close-up photo\n\n### Getting started\nStart with **generate_jewelry** and describe what you want — metal type, stone, style, and setting. For existing pieces, any of the analysis or editing skills just need a photo URL.","version":"0.05","categories":["media"],"currency":"USD","skills":[{"name":"generate_jewelry","displayName":"Generate Jewelry","description":"Generate a photorealistic image of jewelry from a text description, reference images, or both. Describe the piece and/or provide reference photos for inspiration. Optionally specify a model/person (via text or photo) to show the jewelry worn.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Jewelry description: type, metal, stones, style, details. Combine with reference_images for accuracy."},"reference_images":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"model_description":{"type":"string","description":"Describe person to wear the jewelry: skin tone, outfit, pose. Omit for standalone product shot."},"model_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"shot_type":{"type":"string","enum":["product","lifestyle","close_up","editorial"],"description":"product: studio shot. lifestyle: real-world. close_up: macro. editorial: fashion. Auto-detects from inputs."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"num_images":{"type":"number","description":"Number of images to generate (1-4). Defaults to 1.","default":1},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Generate ring from text description only","input":{"prompt":"Engagement ring, 18k yellow gold band, emerald-cut 2 carat diamond center stone, pavé set round brilliant diamonds on the band, polished finish"}},{"description":"Generate from reference images with text refinement","input":{"prompt":"Similar style but in rose gold with a cushion-cut morganite center stone instead of diamond","reference_images":["https://toolrouter.com/demo-product-photo.webp"]}},{"description":"Generate necklace on a described model","input":{"prompt":"Delicate pendant necklace, white gold cable chain, pear-shaped sapphire pendant with diamond halo","model_description":"Woman with medium skin tone wearing a black V-neck dress, natural lighting","shot_type":"lifestyle"}},{"description":"Generate jewelry shown on a specific person from photo","input":{"prompt":"Vintage art deco diamond bracelet, platinum with emerald accents","model_image_url":"https://toolrouter.com/demo-ugc-skincare.webp","model_description":"Show on her left wrist, same outfit and setting as the photo"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated image metadata"},"image_path":{"type":"string","description":"Local path for asset delivery"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Shareable download page"}}},"returns":"Photorealistic jewelry image with permanent URL and shareable download page"},{"name":"visualize_on_model","displayName":"Visualize on Model","description":"Take a reference photo of existing jewelry and render it on a person or model. Accepts the jewelry image URL plus a text description and/or a photo of the model/person. Describe where it is worn (hand, neck, ear, wrist) and the desired scene.","inputSchema":{"type":"object","properties":{"jewelry_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Where jewelry is worn (hand, neck, wrist), model description (skin tone, outfit), and scene."},"model_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["jewelry_image_url","prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Show ring on a described model hand","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","prompt":"Show this engagement ring on a woman's left hand ring finger, light skin tone, hand resting on a linen tablecloth, soft natural daylight"}},{"description":"Show necklace on a specific person from photo","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","prompt":"Show this pendant necklace on her, same outfit, editorial photography lighting","model_image_url":"https://toolrouter.com/demo-ugc-skincare.webp","aspect_ratio":"3:4"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated image metadata"},"image_path":{"type":"string","description":"Local path for asset delivery"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Shareable download page"}}},"returns":"Visualization of reference jewelry on a model with permanent URL and shareable download page"},{"name":"design_to_schematic","displayName":"Design to Schematic","description":"Convert a jewelry design or photo into a technical schematic illustration. Produces clean line-art engineering drawings showing stone settings, metal structure, and construction details. Accepts a reference image, text description, or both.","inputSchema":{"type":"object","properties":{"design_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Describe the jewelry piece. Use alone or with design_image_url to refine the schematic."},"view":{"type":"string","enum":["front","side","top","exploded","all"],"description":"front: primary face. side: profile/cross-section. top: plan view. exploded: assembly. all: three-view orthographic."},"style":{"type":"string","enum":["blueprint","line_drawing","technical","cad"],"description":"blueprint: white lines on navy. line_drawing: black-on-white sketch. technical: with dimension arrows. cad: sterile CAD output."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"seed":{"type":"number","description":"Random seed for reproducible results."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Convert a ring photo to a front-view technical schematic","input":{"design_image_url":"https://toolrouter.com/demo-product-photo.webp","view":"front","style":"line_drawing"}},{"description":"Generate blueprint from text description","input":{"prompt":"Art deco platinum engagement ring, emerald-cut center stone, baguette side stones, geometric filigree shoulders","view":"all","style":"blueprint"}},{"description":"Exploded assembly diagram from reference photo","input":{"design_image_url":"https://toolrouter.com/demo-product-photo.webp","prompt":"Show how the bail, chain loop, and pendant body connect","view":"exploded","style":"technical"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated schematic image metadata"},"image_path":{"type":"string","description":"Local path for asset delivery"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Shareable download page"},"view":{"type":"string","description":"View used for the schematic"},"style":{"type":"string","description":"Style used for the schematic"}}},"returns":"Technical schematic line-art illustration of the jewelry piece"},{"name":"recolor_design","displayName":"Recolor Design","description":"Swap the metal color and/or stone type on an existing jewelry photo. Changes yellow → rose gold, diamonds → sapphires, etc. Preserves all design details exactly.","inputSchema":{"type":"object","properties":{"jewelry_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"metal":{"type":"string","enum":["yellow_gold","rose_gold","white_gold","platinum","silver","bronze"],"description":"New metal to apply. Omit to keep metal unchanged."},"stone_type":{"type":"string","description":"Replace all stones with this type (e.g. sapphire, ruby, emerald, moissanite)."},"stone_color":{"type":"string","description":"Change stone color (e.g. deep blue, vivid red). Use with or without stone_type."},"prompt":{"type":"string","description":"Additional change instructions not covered by metal/stone fields."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["jewelry_image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Change yellow gold ring to rose gold","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","metal":"rose_gold"}},{"description":"Change diamond center stone to sapphire in white gold","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","metal":"white_gold","stone_type":"sapphire","stone_color":"deep royal blue"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Recolored image metadata"},"image_path":{"type":"string","description":"Local path for asset delivery"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Shareable download page"},"metal_applied":{"type":"string","description":"Metal that was applied"},"stone_type_applied":{"type":"string","description":"Stone type that was applied"}}},"returns":"Recolored jewelry photo with only the specified material changes, preserving all design details"},{"name":"engrave_preview","displayName":"Engrave Preview","description":"Add engraved text to a jewelry photo — ring bands, pendants, or bracelets. Shows how a personalized inscription will look before ordering.","inputSchema":{"type":"object","properties":{"jewelry_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"text":{"type":"string","description":"The exact text to engrave (name, date, initials, phrase)."},"placement":{"type":"string","enum":["inside_band","outside_band","front_surface","pendant_back","ring_shank"],"description":"inside_band: inner ring circumference. outside_band/ring_shank: outer surface. front_surface/pendant_back: face or reverse."},"font_style":{"type":"string","enum":["script","block","roman","diamond_cut"],"description":"script: cursive. block: bold sans-serif. roman: classic serif. diamond_cut: faceted V-cut grooves."},"prompt":{"type":"string","description":"Extra engraving instructions (position, size, orientation)."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["jewelry_image_url","text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Preview wedding date engraving inside a ring band","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","text":"14.06.2026","placement":"inside_band","font_style":"roman"}},{"description":"Add names in script to a pendant back","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","text":"Emma & James","placement":"pendant_back","font_style":"script"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Engraved image metadata"},"image_path":{"type":"string","description":"Local path for asset delivery"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Shareable download page"},"engraved_text":{"type":"string","description":"The text that was engraved"},"placement":{"type":"string","description":"Placement applied"},"font_style":{"type":"string","description":"Font style applied"}}},"returns":"Jewelry photo with engraved inscription rendered realistically in the metal"},{"name":"compare_variants","displayName":"Compare Variants","description":"Generate the same jewelry design in multiple metal/stone combinations side by side. Useful for client proposals and purchasing decisions.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Base jewelry description. Used for text-to-image when no base_image_url provided."},"base_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"variants":{"type":"array","description":"Up to 4 variants to generate. Each needs a label and optional metal/stone/details.","items":{"type":"object","properties":{"label":{"type":"string","description":"Short name for this variant (e.g. \"Rose Gold Diamond\")."},"metal":{"type":"string","description":"Metal for this variant."},"stone":{"type":"string","description":"Stone type/color for this variant."},"details":{"type":"string","description":"Any extra differences for this variant."}},"required":["label"]}},"shot_type":{"type":"string","enum":["product","lifestyle","editorial"],"description":"product: studio shot. lifestyle: natural setting. editorial: fashion."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"seed":{"type":"number","description":"Random seed. Same seed keeps composition consistent across variants."}},"required":["variants"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":240,"mode":"io"}},"examples":[{"description":"Compare an engagement ring in 3 metal options from a reference photo","input":{"base_image_url":"https://toolrouter.com/demo-product-photo.webp","variants":[{"label":"Yellow Gold","metal":"yellow gold"},{"label":"Rose Gold","metal":"rose gold"},{"label":"Platinum","metal":"platinum"}],"shot_type":"product"}},{"description":"Compare sapphire vs ruby vs emerald center stone from text description","input":{"prompt":"Oval halo engagement ring, 18k white gold, pavé set band, elegant and classic","variants":[{"label":"Blue Sapphire","stone":"oval blue sapphire, vivid cornflower blue"},{"label":"Ruby","stone":"oval ruby, vivid red, pigeon blood"},{"label":"Emerald","stone":"oval emerald, rich deep green"}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"All variant images with labels"},"image_path":{"type":"string","description":"Local path (first variant) for asset delivery"},"image_url":{"type":"string","description":"Permanent URL (first variant)"},"image_page":{"type":"string","description":"Shareable download page"},"variant_labels":{"type":"array","description":"List of variant labels in order"},"num_variants":{"type":"number","description":"Number of variants generated"}}},"returns":"Gallery of variant images with labels — one image per material/stone combination"},{"name":"clean_photo","displayName":"Clean Photo","description":"Remove dust, fingerprints, and surface marks from a jewelry product photo. Produces a clean studio shot without touching the jewelry itself.","inputSchema":{"type":"object","properties":{"jewelry_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Specific issues to fix (e.g. \"heavy fingerprint on left side of velvet pad\")."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"description":"Aspect ratio for the output image. Defaults to 1:1 (square) for product shots, 3:4 for model shots."},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["jewelry_image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Clean dust and fingerprints from a ring product shot","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp"}},{"description":"Remove specific marks from a pendant photo","input":{"jewelry_image_url":"https://toolrouter.com/demo-product-photo.webp","prompt":"Remove fingerprint smudge on the black velvet display pad"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Cleaned image metadata"},"image_path":{"type":"string","description":"Local path for asset delivery"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Shareable download page"}}},"returns":"Cleaned jewelry photo with dust and marks removed, jewelry itself unchanged"},{"name":"identify_piece","displayName":"Identify Piece","description":"Analyze a jewelry photo and identify the piece's era, style, likely metal, stone types, setting, and condition. Returns structured data suitable for appraisal, cataloging, or client reports.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"questions":{"type":"string","description":"Optional specific questions to answer (e.g. \"Is this Art Deco? What karat is the gold?\")."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Identify an unknown ring from a photo","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}},{"description":"Identify piece with specific questions","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","questions":"Is this genuine Art Nouveau? What metal is it? Are those genuine stones?"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"jewelry_type":{"type":"string","description":"Type of piece (ring, necklace, bracelet, etc.)"},"period":{"type":"string","description":"Estimated era or decade"},"style":{"type":"array","description":"Style descriptors"},"metal":{"type":"object","description":"Estimated metal with confidence and notes"},"stones":{"type":"array","description":"Each stone type, cut, setting, and count"},"condition":{"type":"string","description":"Condition rating and notes"},"hallmarks_visible":{"type":"boolean","description":"Whether hallmarks are visible"},"notes":{"type":"string","description":"Expert observations and construction details"},"answers":{"type":"object","description":"Answers to any specific questions asked"}}},"returns":"Structured expert analysis of the jewelry piece including period, metal, stones, and condition"},{"name":"identify_hallmark","displayName":"Identify Hallmark","description":"Read and decode jewelry hallmarks or maker's marks from a close-up photo. Returns metal purity, assay office, date letter, maker's mark, and country of origin.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"country_hint":{"type":"string","description":"Optional country hint to narrow down hallmarking system (e.g. \"United Kingdom\", \"France\")."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":90,"mode":"io"}},"examples":[{"description":"Decode British hallmarks on a silver piece","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","country_hint":"United Kingdom"}},{"description":"Identify unknown marks on a gold ring","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"marks_found":{"type":"array","description":"Each mark with type, content, interpretation, and country"},"metal":{"type":"string","description":"Most likely metal and purity"},"country_of_origin":{"type":"string","description":"Most likely country"},"approximate_date":{"type":"string","description":"Estimated date range from date letters"},"assay_office":{"type":"string","description":"Assay office identified"},"summary":{"type":"string","description":"Plain-English summary of the piece"},"confidence":{"type":"string","description":"high / medium / low"},"notes":{"type":"string","description":"Caveats or additional observations"}}},"returns":"Decoded hallmark data including metal purity, origin, date, and assay office"}],"icon":"/icons/jewelry-visualizer.webp","changelog":[{"version":"0.01","date":"2026-03-31","changes":["Initial release: generate_jewelry and visualize_on_model skills with text + image input support"]},{"version":"0.02","date":"2026-03-31","changes":["Add design_to_schematic skill: convert jewelry designs to technical schematic/blueprint illustrations"]},{"version":"0.03","date":"2026-03-31","changes":["Add recolor_design, engrave_preview, compare_variants, clean_photo, identify_piece, identify_hallmark skills"]},{"version":"0.04","date":"2026-04-06","changes":["Style references now supported — pass a style reference for consistent visual direction across jewelry renders"]},{"version":"0.05","date":"2026-04-14","changes":["Accept products (jewelry) and personas (models) from your file library"]}],"premadePrompt":"Generate a photorealistic image of a [jewelry description, e.g. 18k rose gold ring with oval sapphire center stone]. Show it as a studio product shot.","usesPersonas":true,"usesProducts":true,"usesStyleReferences":true,"styleReferenceSkills":["generate_jewelry","visualize_on_model"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"scene-compositor","displayName":"Scene Compositor","subtitle":"AI object-into-scene compositing","about":"**Scene Compositor** places any object into any scene with realistic lighting, shadows, and perspective matching. Give it a product photo and a background image and it composites them into a single result that looks like the object was always there.\n\nThis is useful for creating product lifestyle imagery without an actual photo shoot — drop a product into a kitchen, a coffee shop, an outdoor setting, or anywhere else. The AI matches the ambient lighting and adds appropriate shadows so the composite looks natural rather than pasted together.\n\n### What you can do\n- **place_object** — composite an object photo into a scene photo with matched lighting, shadows, and perspective\n- **check_image** — check on a pending composite and retrieve it when ready\n\n### Who it's for\nE-commerce brands building lifestyle imagery without a photo studio, marketers creating contextual product visuals for ads and social, designers compositing reference imagery for presentations, and anyone who needs to place one image into another convincingly.\n\n### How to use it\n1. Upload both your object photo and your scene photo to your file space and get their URLs.\n2. Call **place_object** with the two image URLs and a prompt describing the placement — include angle, position, and any lighting notes.\n3. The flash model is the default for most use cases. Use model \"pro\" for higher fidelity when the result needs to be polished.\n4. Enable upscale if you need a larger output for print or high-res digital use.\n\n### Getting started\nYou need two hosted image URLs before calling this tool. Upload your photos at toolrouter.com/dashboard/files, then paste the URLs into place_object.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"place_object","displayName":"Place Object in Scene","description":"Composite object into scene. STOP: if user has not given you 2 image URLs, ask them to upload at toolrouter.com/dashboard/files. Do NOT use generate-image or any other tool to create inputs. Flash $0.08, Pro $0.15. Optional upscale. Runs async (~1 min).","inputSchema":{"type":"object","properties":{"object_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"scene_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"How to place the object in the scene. Describe placement, angle, lighting, camera style."},"model":{"type":"string","enum":["flash","pro"],"description":"Compositing model. flash (default, Gemini 3.1 Flash, $0.08) or pro (Gemini 2.5 Pro, $0.15, higher fidelity)."},"strength":{"type":"number","description":"Edit strength 0-1. Lower preserves more of the original scene, higher allows more creative freedom. Default: 0.5."},"upscale":{"type":"boolean","description":"Upscale the composited result for higher resolution. Uses the image-upscale tool (SeedVR2 by default). Default: false."},"upscale_factor":{"type":"number","description":"Upscale factor (2-10). Only applies when upscale is true. Default: 2."}},"required":["object_image_url","scene_image_url","prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Place a product on a street scene","input":{"object_image_url":"https://placehold.co/400x400.png","scene_image_url":"https://placehold.co/800x600.png","prompt":"Place the product on the ground in the foreground of the scene, slightly angled. Natural lighting."}},{"description":"Place object with upscale","input":{"object_image_url":"https://placehold.co/400x400.png","scene_image_url":"https://placehold.co/800x600.png","prompt":"Top down view. Object placed flat on the surface, shot on contax g2.","upscale":true,"upscale_factor":2}},{"description":"Place object with Pro model","input":{"object_image_url":"https://placehold.co/400x400.png","scene_image_url":"https://placehold.co/800x600.png","prompt":"Close up shot of the object held in hand against the background scene.","model":"pro"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"completed or pending"},"image_url":{"type":"string","description":"Composited image URL"},"upscaled_image_url":{"type":"string","description":"Upscaled image URL (if upscale was requested)"},"model":{"type":"string","description":"Model used (flash or pro)"},"request_id":{"type":"string","description":"fal.ai request ID"}}},"contentType":"image","returns":"Composited image with permanent URL, downloadable asset, and optional upscaled version"},{"name":"check_image","displayName":"Check Image Status","description":"Check on a pending composited image and retrieve it if ready. Use after place_object returns a pending result with fal_request_id.","inputSchema":{"type":"object","properties":{"fal_request_id":{"type":"string","description":"The fal.ai request ID returned by place_object when the image was still generating."},"fal_model_id":{"type":"string","description":"The fal.ai model ID. Default: fal-ai/nano-banana-2/edit."}},"required":["fal_request_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check a pending image","input":{"fal_request_id":"abc123-def456"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"completed, running, queued, or failed"},"image_url":{"type":"string","description":"Image URL (when completed)"}}},"contentType":"image","returns":"Image status and URL if completed, or a message to try again"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["place_object","list_models"],"icon":"/icons/scene-compositor.webp","changelog":[{"version":"0.01","date":"2026-04-01","changes":["Initial release: object-into-scene compositing with Gemini Flash/Pro, optional upscale"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, scenes and products from your file library"]}],"premadePrompt":"Place my [product/object] into this [scene/background] photo so it looks like a natural part of the scene. Here are the two image URLs: [object image URL] and [scene image URL].","usesPersonas":true,"usesScenes":true,"usesProducts":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"catalogue-scraper","displayName":"Catalogue Scraper","subtitle":"Extract products from any website into your file space","about":"**Catalogue Scraper** turns any e-commerce website into a structured product database in minutes. Point it at a homepage or catalogue URL and it discovers every product page, extracts the data, and saves a file for each item to your file space.\n\nIt works on any site structure — no custom integration required. The tool uses AI-powered extraction to find products even when they're buried in nested navigation or dynamically loaded pages. Each product file includes images, pricing, categories, and variants.\n\n### What you can do\n- **scrape_catalogue** — crawl any public e-commerce site and extract all products into your file space, with images, pricing, categories, and variants\n\n### Who it's for\nRetailers, brand managers, and agencies who need to audit competitor catalogues, migrate product data, or build databases without writing a custom scraper. Also useful for anyone building a price-comparison workflow or doing market research.\n\n### How to use it\n1. Use **scrape_catalogue** and pass the website's homepage or catalogue page URL\n2. Optionally set max_products to limit scope during testing, or pass include_paths to focus on specific URL patterns\n3. When the job completes, the response includes a products_url — click it to browse your extracted catalogue, grouped by category","version":"0.01","categories":["data"],"currency":"USD","skills":[{"name":"scrape_catalogue","displayName":"Scrape Product Catalogue","description":"Discover and extract all products from any e-commerce website. Identifies product pages, extracts structured data, generates spec sheets, and saves each product to your file space. Runs asynchronously — returns a job_id, poll with get_job_result.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Website URL to scrape (homepage or catalogue page). The tool server CAN fetch any public URL — always pass it."},"max_products":{"type":"number","description":"Optional limit on products to extract. Omit to scrape all products found."},"product_type":{"type":"string","enum":["physical","digital"],"description":"Product type hint (default: physical)"},"include_images":{"type":"boolean","description":"Download product images (default: true)"},"include_paths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to include (e.g. /shoes/*)"},"exclude_paths":{"type":"array","items":{"type":"string"},"description":"URL path patterns to exclude"}},"required":["url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":300,"timeoutSeconds":900,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Scrape all products from an online store","input":{"url":"https://example-store.com"}},{"description":"Scrape up to 20 products, no images","input":{"url":"https://example-store.com/shop","max_products":20,"include_images":false}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"products_found":{"type":"number","description":"Number of products extracted"},"categories":{"type":"number","description":"Number of unique categories"},"site":{"type":"string","description":"Website domain"}}},"returns":"Product files saved to your file space with structured metadata, plus a category-grouped catalogue summary"}],"workflow":["scrape_catalogue"],"icon":"/icons/catalogue-scraper.webp","changelog":[{"version":"0.01","date":"2026-04-03","changes":["Initial release: scrape any website to discover and catalogue all products with images, pricing, categories, and variants"]}],"premadePrompt":"Use ToolRouter to scrape all the products from [URL] and save them to my file space. Include images and group by category.","requirements":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}],"credentials":[{"name":"firecrawl","type":"secret","displayName":"Firecrawl API Key","description":"Optional: use your own Firecrawl key instead of the platform default","acquireUrl":"https://firecrawl.dev/app/api-keys","envFallback":"FIRECRAWL_API_KEY"}]},{"name":"lab-results","displayName":"Lab Results","subtitle":"Decode lab values & blood tests","about":"**Lab Results** interprets blood test values against both standard lab ranges and tighter functional medicine optimal ranges — so you can understand not just whether something is \"abnormal\" but whether it's actually optimal. It covers 60+ biomarkers and detects multi-marker patterns like metabolic syndrome, iron deficiency, and thyroid conversion problems.\n\nStandard lab reports only flag values outside the pathological range, which misses a lot. This tool adds a second layer: functional medicine optimal ranges that are narrower and more meaningful for everyday health. It also looks across your whole panel to spot patterns that no single marker would reveal on its own.\n\n### What you can do\n- **lookup_biomarker** — check a single lab value against conventional and functional ranges with a full clinical interpretation\n- **analyze_panel** — submit a complete blood panel and get per-marker analysis plus pattern detection across all values\n- **explain_marker** — get a plain-English explanation of what any test measures, why it's ordered, and what the ranges mean\n\n### Who it's for\nPeople who've received lab results and want to understand what they mean beyond the standard \"normal/abnormal\" flag. Health-conscious individuals tracking biomarkers over time. Anyone preparing questions for a doctor's appointment based on their bloodwork.\n\n### How to use it\n1. Use **explain_marker** first if you're not sure what a test measures — no value needed\n2. Use **lookup_biomarker** for a single value: pass the marker name, your result, unit, and gender\n3. For a full panel, use **analyze_panel** with all your markers as an array — it detects patterns across the whole picture\n\n### Getting started\nAlways include your gender when submitting values — many markers have different reference ranges for males and females. This tool provides educational interpretation only and is not a substitute for medical advice.","version":"0.01","categories":["data","productivity"],"currency":"USD","skills":[{"name":"lookup_biomarker","displayName":"Look Up Biomarker","description":"Look up a single lab value against conventional and functional reference ranges. Returns range classification (optimal, suboptimal, high, low, critical), clinical interpretation, and panel context. Supports 60+ biomarkers with gender-specific ranges.","inputSchema":{"type":"object","properties":{"marker":{"type":"string","description":"Marker name or abbreviation, e.g. \"TSH\", \"ferritin\", \"vitamin D\", \"HbA1c\", \"ALT\", \"free testosterone\""},"value":{"type":"number","description":"Numeric result value from the lab report"},"unit":{"type":"string","description":"Unit of measurement, e.g. \"ng/mL\", \"mIU/L\", \"mg/dL\". Leave blank to use the default unit for this marker."},"gender":{"type":"string","enum":["male","female"],"description":"Patient gender. Many markers have different reference ranges by sex. Highly recommended."}},"required":["marker","value"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Check TSH for hypothyroid","input":{"marker":"TSH","value":3.8,"unit":"mIU/L","gender":"female"}},{"description":"Check ferritin in a woman","input":{"marker":"ferritin","value":18,"unit":"ng/mL","gender":"female"}},{"description":"Check fasting glucose","input":{"marker":"glucose","value":97,"unit":"mg/dL"}},{"description":"Check vitamin D","input":{"marker":"vitamin D","value":28,"unit":"ng/mL"}},{"description":"Check LDL cholesterol","input":{"marker":"LDL","value":140,"unit":"mg/dL"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"marker":{"type":"string","description":"Full marker name"},"panel":{"type":"string","description":"Lab panel this marker belongs to"},"conventional":{"type":"object","description":"Standard lab range classification with status and interpretation"},"functional":{"type":"object","description":"Functional medicine optimal range classification (tighter, health-optimised)"},"critical_alert":{"type":"string","description":"Present only when value is in a critical range requiring urgent attention"},"description":{"type":"string","description":"Plain English explanation of what this marker measures"},"clinical_note":{"type":"string","description":"Key clinical interpretation guidance"}}},"returns":"Range classification (conventional and functional), status label, clinical interpretation, and marker description"},{"name":"analyze_panel","displayName":"Analyse Lab Panel","description":"Analyse a full blood panel: submit multiple markers as an array. Classifies each against conventional and functional ranges, then detects multi-marker patterns — metabolic syndrome, iron deficiency anemia, poor thyroid conversion, insulin resistance, cardiovascular inflammation, and more.","inputSchema":{"type":"object","properties":{"markers":{"type":"array","description":"Array of marker results to analyse together","items":{"type":"object","properties":{"marker":{"type":"string","description":"Marker name or abbreviation"},"value":{"type":"number","description":"Numeric result value"},"unit":{"type":"string","description":"Unit of measurement (optional)"}},"required":["marker","value"]}},"gender":{"type":"string","enum":["male","female"],"description":"Patient gender — applies to all markers. Strongly recommended for accurate ranges."}},"required":["markers"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Full thyroid panel analysis","input":{"markers":[{"marker":"TSH","value":3.8,"unit":"mIU/L"},{"marker":"Free T4","value":0.9,"unit":"ng/dL"},{"marker":"Free T3","value":2.4,"unit":"pg/mL"}],"gender":"female"}},{"description":"Metabolic syndrome screening","input":{"markers":[{"marker":"fasting glucose","value":105,"unit":"mg/dL"},{"marker":"triglycerides","value":180,"unit":"mg/dL"},{"marker":"HDL","value":38,"unit":"mg/dL"},{"marker":"fasting insulin","value":14,"unit":"µIU/mL"},{"marker":"HbA1c","value":5.8,"unit":"%"}],"gender":"male"}},{"description":"Iron panel for fatigue","input":{"markers":[{"marker":"ferritin","value":12,"unit":"ng/mL"},{"marker":"serum iron","value":55,"unit":"µg/dL"},{"marker":"TIBC","value":390,"unit":"µg/dL"},{"marker":"hemoglobin","value":11.8,"unit":"g/dL"}],"gender":"female"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"summary":{"type":"object","description":"Counts of optimal, abnormal, critical markers; overall score; pattern count"},"markers":{"type":"array","description":"Per-marker classification results with conventional and functional ranges"},"patterns":{"type":"array","description":"Multi-marker patterns detected with severity, description, and recommendations"},"unrecognised_markers":{"type":"array","description":"Marker names not found in the database (check spelling/abbreviation)"}}},"returns":"Per-marker classifications, multi-marker pattern detection (metabolic syndrome, iron deficiency, etc.), and an overall health score"},{"name":"explain_marker","displayName":"Explain Marker","description":"Get a plain-English explanation of what a lab marker measures, why it's ordered, conventional and functional reference ranges, and a summary from MedlinePlus (U.S. National Library of Medicine). No result value required — use this to understand any test.","inputSchema":{"type":"object","properties":{"marker":{"type":"string","description":"Marker name or abbreviation, e.g. \"TSH\", \"hs-CRP\", \"HOMA-IR\", \"ferritin\", \"eGFR\""}},"required":["marker"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Explain TSH","input":{"marker":"TSH"}},{"description":"Explain hs-CRP","input":{"marker":"hs-CRP"}},{"description":"Explain ferritin","input":{"marker":"ferritin"}},{"description":"Explain HbA1c","input":{"marker":"HbA1c"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"marker":{"type":"string","description":"Full marker name"},"aliases":{"type":"array","description":"Common names and abbreviations"},"panel":{"type":"string","description":"Lab panel this belongs to"},"description":{"type":"string","description":"What this marker measures in plain English"},"reference_ranges":{"type":"object","description":"Conventional and functional optimal ranges"},"clinical_note":{"type":"string","description":"Key clinical interpretation notes"},"medlineplus_summary":{"type":"string","description":"Patient-friendly explanation from MedlinePlus"},"loinc_code":{"type":"string","description":"LOINC code for this test"}}},"returns":"Plain-English marker explanation, reference ranges (conventional and functional), clinical notes, and MedlinePlus patient education content"}],"workflow":["explain_marker","lookup_biomarker","analyze_panel","explain_marker → lookup_biomarker","analyze_panel"],"icon":"/icons/lab-results.webp","changelog":[{"version":"0.01","date":"2026-04-04","changes":["Initial release: lookup_biomarker, analyze_panel, explain_marker skills","Covers 60+ biomarkers across CBC, CMP, lipids, thyroid, iron, vitamins, hormones, inflammation, and glycemic markers","Conventional and functional reference ranges for all markers with gender-specific variants","Multi-marker pattern detection: metabolic syndrome, insulin resistance, iron deficiency, hypothyroidism, B12/folate deficiency, and more","MedlinePlus integration for plain-English test explanations"]}],"premadePrompt":"Analyse my blood test results: [paste your lab results or list markers with values, e.g. \"TSH 3.2, Free T4 1.0, Ferritin 18, Vitamin D 28, HbA1c 5.8\"]. Tell me which values are outside optimal ranges, what patterns you see, and what I should discuss with my doctor."},{"name":"shopify-store","displayName":"Shopify Store Manager","subtitle":"Full store management for orders, products, customers, and more","about":"**Shopify Store Manager** gives AI agents full access to your Shopify store — orders, products, inventory, customers, discounts, and analytics — all from one connected tool. Stop switching tabs to handle routine store operations.\n\nWhether you're fulfilling orders, updating product listings, adjusting stock, or pulling revenue reports, you can describe what you want in plain English and have it done. It works with any Shopify plan and acts directly on your store, so every change is live immediately.\n\n### What you can do\n- View and manage orders — list, fulfill, cancel, refund, and track individual orders\n- Create, update, and delete products and product variants\n- Check and adjust inventory levels across locations\n- Browse and manage customers — view profiles, create new records, update details\n- Create and manage collections, discounts, and promo codes\n- Draft and complete manual orders\n- Pull revenue analytics over any date range\n\n### Who it's for\nShopify store owners and operators who want to handle store tasks faster through AI. Agencies managing multiple Shopify clients. Anyone doing regular fulfillment, catalog, or inventory work who wants to skip the Shopify admin UI.\n\n### How to use it\n1. Start with **get_store_info** to confirm the connection and see your store details\n2. Use **list_orders** to see recent orders, then **get_order** for full details on any individual order\n3. Fulfill with **fulfill_order**, cancel with **cancel_order**, or process returns with **refund_order**\n4. Use **list_products** and **update_product** to manage your catalog, or **create_product** to add new items\n5. Use **get_inventory** and **adjust_inventory** to correct stock levels\n\n### Getting started\nConnect your Shopify store by providing your store domain and access token — both are available in your Shopify admin under Apps and sales channels.","version":"0.01","categories":["productivity","analytics"],"currency":"USD","skills":[{"name":"get_store_info","displayName":"Get Store Info","description":"Fetch store details including name, plan, currency, timezone, and settings.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get my store details","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Store name"},"email":{"type":"string","description":"Store owner email"},"plan":{"type":"string","description":"Shopify plan name"},"currency":{"type":"string","description":"Store default currency code"},"timezone":{"type":"string","description":"Store timezone (IANA)"},"domain":{"type":"string","description":"Primary domain"}}},"returns":"Store name, plan, currency, timezone, domain, and owner details"},{"name":"list_orders","displayName":"List Orders","description":"List orders with optional filters for status, payment, fulfilment, and date range.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Order status: open, closed, cancelled, any (default: open)","enum":["open","closed","cancelled","any"],"default":"open"},"financial_status":{"type":"string","description":"Payment status: authorized, pending, paid, partially_refunded, refunded, voided"},"fulfillment_status":{"type":"string","description":"Fulfilment status: shipped, partial, unshipped, any"},"created_at_min":{"type":"string","description":"Earliest creation date (ISO 8601, e.g. 2026-01-01)"},"created_at_max":{"type":"string","description":"Latest creation date (ISO 8601)"},"limit":{"type":"number","description":"Max orders to return (default 50, max 250)","default":50}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List all open orders","input":{"status":"open"}},{"description":"List unfulfilled paid orders","input":{"financial_status":"paid","fulfillment_status":"unshipped"}}],"pricing":"free","returns":"List of orders with id, name, total, financial status, fulfilment status, and item count"},{"name":"get_order","displayName":"Get Order","description":"Fetch full details of a single order including line items, addresses, fulfilments, refunds, and discounts.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Shopify order ID (numeric, e.g. 450789469)"}},"required":["order_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get order details","input":{"order_id":"450789469"}}],"pricing":"free","returns":"Complete order object with line items, fulfilment history, refunds, and billing/shipping addresses"},{"name":"update_order","displayName":"Update Order","description":"Update order metadata such as note, tags, email, or shipping address.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Order ID to update"},"note":{"type":"string","description":"Internal order note"},"tags":{"type":"string","description":"Comma-separated tags"},"email":{"type":"string","description":"Customer email on the order"},"shipping_address":{"type":"object","description":"Shipping address object with first_name, last_name, address1, city, country, zip"}},"required":["order_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Add a note to an order","input":{"order_id":"450789469","note":"Customer requested gift wrap"}},{"description":"Tag an order as VIP","input":{"order_id":"450789469","tags":"vip,priority"}}],"pricing":"free","returns":"Updated order object"},{"name":"fulfill_order","displayName":"Fulfill Order","description":"Create a fulfilment for an order, optionally with tracking information.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Order ID to fulfill"},"tracking_number":{"type":"string","description":"Tracking number from the carrier"},"tracking_company":{"type":"string","description":"Carrier name (e.g. UPS, FedEx, USPS, DHL)"},"tracking_url":{"type":"string","description":"Direct URL to tracking page"},"notify_customer":{"type":"boolean","description":"Send shipping notification email (default true)","default":true},"line_items":{"type":"array","description":"Specific line items to fulfill: [{id, quantity}]. Omit to fulfill all."}},"required":["order_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Fulfill all items with tracking","input":{"order_id":"450789469","tracking_number":"1Z1234512345","tracking_company":"UPS"}},{"description":"Fulfill without notifying customer","input":{"order_id":"450789469","notify_customer":false}}],"pricing":"free","returns":"Fulfilment object with id, status, tracking details, and line items fulfilled"},{"name":"cancel_order","displayName":"Cancel Order","description":"Cancel an order with a reason. Optionally restock items and issue a refund.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Order ID to cancel"},"reason":{"type":"string","description":"Cancellation reason: customer, fraud, inventory, declined, other","enum":["customer","fraud","inventory","declined","other"]},"restock":{"type":"boolean","description":"Restock inventory items (default true)","default":true},"refund":{"type":"boolean","description":"Issue a refund automatically (default false)","default":false},"email":{"type":"boolean","description":"Send cancellation email to customer (default true)","default":true}},"required":["order_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Cancel a fraud order","input":{"order_id":"450789469","reason":"fraud","restock":true}},{"description":"Cancel by customer request with refund","input":{"order_id":"450789469","reason":"customer","refund":true}}],"pricing":"free","returns":"Cancelled order with cancel_reason and cancelled_at timestamp"},{"name":"refund_order","displayName":"Refund Order","description":"Create a partial or full refund for specific line items on an order.","inputSchema":{"type":"object","properties":{"order_id":{"type":"string","description":"Order ID to refund"},"refund_line_items":{"type":"array","description":"Items to refund: [{line_item_id, quantity, restock_type}]. restock_type: return, cancel, legacy, no_restock."},"shipping":{"type":"object","description":"Shipping refund: {full_refund: true} or {amount: \"5.00\"}"},"note":{"type":"string","description":"Internal note for the refund"},"notify":{"type":"boolean","description":"Email customer about refund (default true)","default":true}},"required":["order_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Refund one item","input":{"order_id":"450789469","refund_line_items":[{"line_item_id":466157049,"quantity":1,"restock_type":"return"}]}}],"pricing":"free","returns":"Refund object with id, transactions, and refunded amounts"},{"name":"list_products","displayName":"List Products","description":"Browse the product catalogue with optional filters for status, vendor, and type.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Product status: active, draft, archived","enum":["active","draft","archived"]},"vendor":{"type":"string","description":"Filter by vendor name"},"product_type":{"type":"string","description":"Filter by product type"},"title":{"type":"string","description":"Filter by title (partial match)"},"limit":{"type":"number","description":"Max products to return (default 50, max 250)","default":50}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List all active products","input":{"status":"active"}},{"description":"Find draft products from a vendor","input":{"vendor":"Acme","status":"draft"}}],"pricing":"free","returns":"List of products with id, title, vendor, status, variant count, and tags"},{"name":"get_product","displayName":"Get Product","description":"Fetch full product details including all variants, images, and inventory quantities.","inputSchema":{"type":"object","properties":{"product_id":{"type":"string","description":"Shopify product ID"}},"required":["product_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get product with all variants","input":{"product_id":"632910392"}}],"pricing":"free","returns":"Full product with title, description, all variants (sku, price, inventory), and images"},{"name":"create_product","displayName":"Create Product","description":"Create a new product with variants and images. Defaults to draft status.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Product title"},"body_html":{"type":"string","description":"Product description (HTML allowed)"},"vendor":{"type":"string","description":"Product vendor name"},"product_type":{"type":"string","description":"Product type/category"},"tags":{"type":"string","description":"Comma-separated tags"},"status":{"type":"string","description":"Initial status: active or draft (default draft)","enum":["active","draft"],"default":"draft"},"variants":{"type":"array","description":"Variant objects: [{price, sku, option1, inventory_quantity, weight, weight_unit, requires_shipping, taxable}]"},"images":{"type":"array","description":"Image objects: [{src}] using ToolRouter file IDs or hosted HTTP(S) URLs"}},"required":["title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Create a simple product","input":{"title":"Classic T-Shirt","status":"draft","variants":[{"price":"29.99","sku":"TSHIRT-SM","inventory_quantity":100}]}}],"pricing":"free","returns":"Created product with id, all variants, and images"},{"name":"update_product","displayName":"Update Product","description":"Edit a product title, description, price, status, tags, or variant details.","inputSchema":{"type":"object","properties":{"product_id":{"type":"string","description":"Product ID to update"},"title":{"type":"string","description":"New product title"},"body_html":{"type":"string","description":"New product description"},"vendor":{"type":"string","description":"New vendor name"},"product_type":{"type":"string","description":"New product type"},"tags":{"type":"string","description":"New comma-separated tags (replaces existing)"},"status":{"type":"string","description":"New status: active, draft, archived","enum":["active","draft","archived"]},"variants":{"type":"array","description":"Variants to update — each must include the variant id. Fields: price, compare_at_price, sku, barcode."},"images":{"type":"array","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["product_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Publish a draft product","input":{"product_id":"632910392","status":"active"}},{"description":"Update price for all variants","input":{"product_id":"632910392","variants":[{"id":"39072856","price":"24.99"}]}}],"pricing":"free","returns":"Updated product object"},{"name":"delete_product","displayName":"Delete Product","description":"Archive a product (default) or permanently delete it. Archive is reversible; permanent delete is not.","inputSchema":{"type":"object","properties":{"product_id":{"type":"string","description":"Product ID to archive or delete"},"archive_only":{"type":"boolean","description":"Archive instead of permanently delete (default true — recommended)","default":true}},"required":["product_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Archive a product","input":{"product_id":"632910392","archive_only":true}},{"description":"Permanently delete","input":{"product_id":"632910392","archive_only":false}}],"pricing":"free","returns":"Confirmation of archive or deletion with product id"},{"name":"get_inventory","displayName":"Get Inventory","description":"Get inventory levels for a product or specific variants across all locations.","inputSchema":{"type":"object","properties":{"product_id":{"type":"string","description":"Get inventory for all variants of this product"},"variant_ids":{"type":"string","description":"Comma-separated inventory item IDs (alternative to product_id)"},"location_id":{"type":"string","description":"Filter to a specific location ID"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check stock for a product","input":{"product_id":"632910392"}}],"pricing":"free","returns":"Inventory levels per variant per location with inventory_item_id (needed for adjust_inventory)"},{"name":"adjust_inventory","displayName":"Adjust Inventory","description":"Set absolute inventory quantity or apply a delta adjustment at a location. Use get_inventory first to obtain inventory_item_id and location_id.","inputSchema":{"type":"object","properties":{"inventory_item_id":{"type":"number","description":"Inventory item ID (from get_inventory output)"},"location_id":{"type":"number","description":"Location ID (from get_inventory output)"},"available":{"type":"number","description":"Set absolute quantity (e.g. 100). Use this OR adjustment, not both."},"adjustment":{"type":"number","description":"Change quantity by delta (e.g. -5 or +10). Use this OR available, not both."}},"required":["inventory_item_id","location_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Set stock to 50 units","input":{"inventory_item_id":808950810,"location_id":655441491,"available":50}},{"description":"Reduce stock by 5","input":{"inventory_item_id":808950810,"location_id":655441491,"adjustment":-5}}],"pricing":"free","returns":"Updated inventory level with new available quantity"},{"name":"list_customers","displayName":"List Customers","description":"Browse customers with optional search query or date filters.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search by name or email (uses Shopify customer search)"},"created_at_min":{"type":"string","description":"Filter to customers created after this date (ISO 8601)"},"created_at_max":{"type":"string","description":"Filter to customers created before this date (ISO 8601)"},"limit":{"type":"number","description":"Max customers to return (default 50, max 250)","default":50}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for a customer by email","input":{"query":"jane@example.com"}},{"description":"List recent customers","input":{"created_at_min":"2026-01-01"}}],"pricing":"free","returns":"Customer list with id, name, email, order count, and total spent"},{"name":"get_customer","displayName":"Get Customer","description":"Fetch full customer profile including addresses and recent order history.","inputSchema":{"type":"object","properties":{"customer_id":{"type":"string","description":"Shopify customer ID"},"include_orders":{"type":"boolean","description":"Include last 10 orders (default true)","default":true}},"required":["customer_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Get customer with order history","input":{"customer_id":"207119551"}}],"pricing":"free","returns":"Customer profile with addresses, tags, marketing consent, and order history"},{"name":"create_customer","displayName":"Create Customer","description":"Create a new customer record with contact details and optional address.","inputSchema":{"type":"object","properties":{"first_name":{"type":"string","description":"Customer first name"},"last_name":{"type":"string","description":"Customer last name"},"email":{"type":"string","description":"Customer email address"},"phone":{"type":"string","description":"Customer phone (E.164 format, e.g. +16135551234)"},"tags":{"type":"string","description":"Comma-separated customer tags"},"note":{"type":"string","description":"Internal note about the customer"},"accepts_marketing":{"type":"boolean","description":"Opted in to marketing emails"},"address":{"type":"object","description":"Default address: {address1, city, country, zip, phone}"},"send_email_invite":{"type":"boolean","description":"Send account invite email (default false)","default":false}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Create a new customer","input":{"first_name":"Jane","last_name":"Smith","email":"jane@example.com"}}],"pricing":"free","returns":"Created customer with id and all profile fields"},{"name":"update_customer","displayName":"Update Customer","description":"Update customer contact details, tags, notes, or marketing preferences.","inputSchema":{"type":"object","properties":{"customer_id":{"type":"string","description":"Customer ID to update"},"first_name":{"type":"string","description":"New first name"},"last_name":{"type":"string","description":"New last name"},"email":{"type":"string","description":"New email address"},"phone":{"type":"string","description":"New phone number"},"tags":{"type":"string","description":"New tags (replaces existing)"},"note":{"type":"string","description":"New internal note"},"tax_exempt":{"type":"boolean","description":"Set tax exemption status"},"accepts_marketing":{"type":"boolean","description":"Update marketing consent"},"address":{"type":"object","description":"Updated default address"}},"required":["customer_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Tag a customer as wholesale","input":{"customer_id":"207119551","tags":"wholesale,vip"}}],"pricing":"free","returns":"Updated customer object"},{"name":"list_collections","displayName":"List Collections","description":"List custom and smart collections in the store.","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"Collection type: custom, smart, all (default all)","enum":["custom","smart","all"],"default":"all"},"title":{"type":"string","description":"Filter by title"},"limit":{"type":"number","description":"Max collections to return per type (default 50)","default":50}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List all collections","input":{}}],"pricing":"free","returns":"Collections with id, title, type (custom/smart), product count, and publish date"},{"name":"create_collection","displayName":"Create Collection","description":"Create a custom collection (manual product list) or smart collection (rule-based).","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Collection title"},"type":{"type":"string","description":"Collection type: custom or smart","enum":["custom","smart"]},"body_html":{"type":"string","description":"Collection description (HTML allowed)"},"published":{"type":"boolean","description":"Publish immediately (default true)","default":true},"image_src":{"type":"string","description":"Collection image URL"},"products":{"type":"array","description":"Product IDs to add (custom collections only)"},"rules":{"type":"array","description":"Smart collection rules: [{column, relation, condition}] e.g. {column: \"title\", relation: \"contains\", condition: \"sale\"}"},"disjunctive":{"type":"boolean","description":"Smart collection: true = match ANY rule, false = match ALL rules (default false)","default":false}},"required":["title","type"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Create a summer sale collection","input":{"title":"Summer Sale","type":"custom","products":["632910392"]}},{"description":"Create a smart collection for tagged items","input":{"title":"New Arrivals","type":"smart","rules":[{"column":"tag","relation":"equals","condition":"new"}]}}],"pricing":"free","returns":"Created collection with id and type"},{"name":"update_collection","displayName":"Update Collection","description":"Update a collection title, description, or product membership.","inputSchema":{"type":"object","properties":{"collection_id":{"type":"string","description":"Collection ID to update"},"collection_type":{"type":"string","description":"Collection type: custom or smart","enum":["custom","smart"]},"title":{"type":"string","description":"New title"},"body_html":{"type":"string","description":"New description"},"published":{"type":"boolean","description":"Publish or unpublish the collection"},"sort_order":{"type":"string","description":"Sort order: alpha-asc, alpha-desc, best-selling, created, created-desc, manual, price-asc, price-desc"},"products_to_add":{"type":"array","description":"Product IDs to add (custom collections only)"},"products_to_remove":{"type":"array","description":"Product IDs to remove (custom collections only)"}},"required":["collection_id","collection_type"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Add a product to a collection","input":{"collection_id":"841564295","collection_type":"custom","products_to_add":["632910392"]}}],"pricing":"free","returns":"Updated collection object"},{"name":"list_discounts","displayName":"List Discounts","description":"List all discount codes with their price rules, usage counts, and expiry dates.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max price rules to return (default 50)","default":50}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List all active discount codes","input":{}}],"pricing":"free","returns":"Discount codes with code string, value, type, usage count, limits, and dates"},{"name":"create_discount","displayName":"Create Discount","description":"Create a discount code — percentage off, fixed amount off, or free shipping.","inputSchema":{"type":"object","properties":{"code":{"type":"string","description":"Discount code string customers enter at checkout (e.g. SUMMER20)"},"type":{"type":"string","description":"Discount type: percentage, fixed_amount, free_shipping","enum":["percentage","fixed_amount","free_shipping"]},"value":{"type":"number","description":"Discount amount — for percentage: 20 means 20% off; for fixed_amount: 10 means $10 off. Not used for free_shipping."},"min_order_amount":{"type":"number","description":"Minimum order subtotal required to use the code"},"usage_limit":{"type":"number","description":"Maximum total uses (omit for unlimited)"},"one_per_customer":{"type":"boolean","description":"Limit to one use per customer (default false)","default":false},"starts_at":{"type":"string","description":"Start date (ISO 8601, defaults to now)"},"ends_at":{"type":"string","description":"Expiry date (ISO 8601, omit for no expiry)"}},"required":["code","type"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Create 20% off code","input":{"code":"SUMMER20","type":"percentage","value":20}},{"description":"Create $10 off code with min order","input":{"code":"SAVE10","type":"fixed_amount","value":10,"min_order_amount":50}},{"description":"Create free shipping code","input":{"code":"FREESHIP","type":"free_shipping"}}],"pricing":"free","returns":"Price rule and discount code objects with ids"},{"name":"update_discount","displayName":"Update Discount","description":"Update a discount code expiry date, usage limit, or title.","inputSchema":{"type":"object","properties":{"price_rule_id":{"type":"string","description":"Price rule ID to update (from list_discounts)"},"ends_at":{"type":"string","description":"New expiry date (ISO 8601). Set to a past date to deactivate immediately."},"usage_limit":{"type":"number","description":"New total usage limit"},"title":{"type":"string","description":"New internal title"}},"required":["price_rule_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Extend discount expiry","input":{"price_rule_id":"507328175","ends_at":"2026-12-31T23:59:59Z"}},{"description":"Deactivate a discount immediately","input":{"price_rule_id":"507328175","ends_at":"2020-01-01T00:00:00Z"}}],"pricing":"free","returns":"Updated price rule object"},{"name":"delete_discount","displayName":"Delete Discount","description":"Permanently delete a discount code and its price rule.","inputSchema":{"type":"object","properties":{"price_rule_id":{"type":"string","description":"Price rule ID to delete (from list_discounts)"}},"required":["price_rule_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Delete a discount code","input":{"price_rule_id":"507328175"}}],"pricing":"free","returns":"Confirmation of deletion with price_rule_id"},{"name":"list_draft_orders","displayName":"List Draft Orders","description":"List draft orders (quotes, manual orders) by status.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Draft order status: open, invoice_sent, completed, all (default open)","enum":["open","invoice_sent","completed","all"],"default":"open"},"limit":{"type":"number","description":"Max drafts to return (default 50)","default":50}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List open draft orders","input":{"status":"open"}}],"pricing":"free","returns":"Draft orders with id, name, customer email, total, status, and invoice URL"},{"name":"create_draft_order","displayName":"Create Draft Order","description":"Create a draft order (quote or manual order) for a customer with custom pricing or notes.","inputSchema":{"type":"object","properties":{"line_items":{"type":"array","description":"Items: [{variant_id, quantity}] for existing products or [{title, price, quantity}] for custom items"},"customer_id":{"type":"string","description":"Existing customer ID to associate"},"email":{"type":"string","description":"Customer email (used if no customer_id)"},"note":{"type":"string","description":"Internal note on the draft"},"tags":{"type":"string","description":"Comma-separated tags"},"shipping_address":{"type":"object","description":"Shipping address object"},"applied_discount":{"type":"object","description":"Discount to apply: {value, value_type: \"percentage\"|\"fixed_amount\", title}"}},"required":["line_items"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Create a draft for a custom item","input":{"line_items":[{"title":"Custom Engraving","price":"45.00","quantity":1}],"email":"jane@example.com"}}],"pricing":"free","returns":"Draft order with id, name, invoice_url, and total price"},{"name":"complete_draft_order","displayName":"Complete Draft Order","description":"Convert a draft order into a real order, either marking it as paid or leaving payment pending.","inputSchema":{"type":"object","properties":{"draft_order_id":{"type":"string","description":"Draft order ID to complete"},"payment_pending":{"type":"boolean","description":"true = payment still pending (COD), false = mark as paid immediately (default false)","default":false}},"required":["draft_order_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Complete and mark as paid","input":{"draft_order_id":"622762746","payment_pending":false}}],"pricing":"free","returns":"Completed order with order_id, status, and total price"},{"name":"get_analytics","displayName":"Get Analytics","description":"Summarise sales performance over a date range: total revenue, order count, average order value, and top products.","inputSchema":{"type":"object","properties":{"date_from":{"type":"string","description":"Start date YYYY-MM-DD (default: 30 days ago)"},"date_to":{"type":"string","description":"End date YYYY-MM-DD (default: today)"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Sales summary for last 30 days","input":{}},{"description":"Revenue for Q1 2026","input":{"date_from":"2026-01-01","date_to":"2026-03-31"}}],"pricing":"free","returns":"Total orders, revenue, average order value, orders by financial status, and top 5 products by revenue"}],"workflow":["get_store_info","list_orders → get_order → fulfill_order","list_orders → get_order → cancel_order","list_orders → get_order → refund_order","list_products → update_product","create_product → adjust_inventory","get_inventory → adjust_inventory","list_customers → get_customer","create_discount","create_draft_order → complete_draft_order"],"icon":"/icons/shopify-store.webp","changelog":[{"version":"0.01","date":"2026-04-06","changes":["Initial release: full Shopify store management across orders, products, inventory, customers, collections, discounts, and draft orders"]}],"premadePrompt":"Connect my Shopify store at [store URL] and show me all unfulfilled orders from the last 7 days. Then check inventory levels for my top 5 products.","brain":{"instructions":"When brain knowledge is available:\n  - Reference the user's product catalogue and pricing strategy\n  - Apply knowledge of store structure and collections\n  - Tailor management actions to known business goals","produces":["ecommerce_insights","product_insights"],"followEdges":true},"requirements":[{"name":"shopify_domain","type":"secret","displayName":"Shopify Store Domain","description":"Your Shopify store domain (e.g. mystore.myshopify.com)","required":true,"acquireUrl":"https://admin.shopify.com","envFallback":"SHOPIFY_DOMAIN","setupGuide":"Your Shopify store domain is the .myshopify.com address for your store.\n\n1. Log in to your Shopify admin at https://admin.shopify.com\n2. Look at the URL in your browser — it will look like: mystore.myshopify.com/admin\n3. Copy just the domain part: mystore.myshopify.com\n\nDo not include https:// or /admin — just the domain (e.g. mystore.myshopify.com).\n\nNote: this is NOT your custom domain (e.g. shop.example.com). It must be the .myshopify.com address."},{"name":"shopify_token","type":"secret","displayName":"Shopify Admin API Token","description":"Admin API access token from a custom app in your Shopify admin","required":true,"acquireUrl":"https://admin.shopify.com/settings/apps/development","envFallback":"SHOPIFY_TOKEN","setupGuide":"The Admin API access token lets this tool read and write data in your Shopify store.\n\n1. Go to your Shopify admin: https://admin.shopify.com\n2. Click \"Settings\" (bottom-left) → \"Apps and sales channels\"\n3. Click \"Develop apps\" (top-right) — if you see a warning, click \"Allow custom app development\"\n4. Click \"Create an app\", give it a name (e.g. ToolRouter), and click \"Create app\"\n5. Click \"Configure Admin API scopes\"\n6. Enable these scopes:\n   - read_orders, write_orders\n   - read_products, write_products\n   - read_inventory, write_inventory\n   - read_customers, write_customers\n   - read_discounts, write_discounts\n   - read_draft_orders, write_draft_orders\n   - read_analytics\n7. Click \"Save\", then click \"Install app\"\n8. Click \"Install\" to confirm\n9. Under \"Admin API access token\", click \"Reveal token once\" and copy it\n\nThe token starts with shpat_ — keep it secret, it grants full admin access."}],"credentials":[{"name":"shopify_domain","type":"secret","displayName":"Shopify Store Domain","description":"Your Shopify store domain (e.g. mystore.myshopify.com)","required":true,"acquireUrl":"https://admin.shopify.com","envFallback":"SHOPIFY_DOMAIN","setupGuide":"Your Shopify store domain is the .myshopify.com address for your store.\n\n1. Log in to your Shopify admin at https://admin.shopify.com\n2. Look at the URL in your browser — it will look like: mystore.myshopify.com/admin\n3. Copy just the domain part: mystore.myshopify.com\n\nDo not include https:// or /admin — just the domain (e.g. mystore.myshopify.com).\n\nNote: this is NOT your custom domain (e.g. shop.example.com). It must be the .myshopify.com address."},{"name":"shopify_token","type":"secret","displayName":"Shopify Admin API Token","description":"Admin API access token from a custom app in your Shopify admin","required":true,"acquireUrl":"https://admin.shopify.com/settings/apps/development","envFallback":"SHOPIFY_TOKEN","setupGuide":"The Admin API access token lets this tool read and write data in your Shopify store.\n\n1. Go to your Shopify admin: https://admin.shopify.com\n2. Click \"Settings\" (bottom-left) → \"Apps and sales channels\"\n3. Click \"Develop apps\" (top-right) — if you see a warning, click \"Allow custom app development\"\n4. Click \"Create an app\", give it a name (e.g. ToolRouter), and click \"Create app\"\n5. Click \"Configure Admin API scopes\"\n6. Enable these scopes:\n   - read_orders, write_orders\n   - read_products, write_products\n   - read_inventory, write_inventory\n   - read_customers, write_customers\n   - read_discounts, write_discounts\n   - read_draft_orders, write_draft_orders\n   - read_analytics\n7. Click \"Save\", then click \"Install app\"\n8. Click \"Install\" to confirm\n9. Under \"Admin API access token\", click \"Reveal token once\" and copy it\n\nThe token starts with shpat_ — keep it secret, it grants full admin access."}]},{"name":"image-style-extractor","displayName":"Image Style Extractor","subtitle":"Extract visual style from any image","about":"**Image Style Extractor** analyzes a photograph and extracts its complete visual fingerprint — camera settings, lens character, lighting setup, color grading, film stock, era, texture, and mood. The result is saved as a reusable style prompt you can apply to future image generation.\n\nIt's the bridge between reference photography and AI image creation. Instead of trying to describe a visual style from memory, you point it at a photo you love and get back a precise, ready-to-use prompt that captures exactly what makes that image look the way it does.\n\n### What you can do\n- **extract_style** — analyze any image URL and extract a full visual style breakdown with a reusable generation prompt\n- Accepts direct image URLs, Instagram posts, or any webpage with an og:image tag\n- Auto-saves the extracted style to your Style Prompts library for reuse with generate-image\n- Optionally name and tag the style for easy retrieval later\n\n### Who it's for\nPhotographers and creative directors who want to replicate a visual language across AI-generated content. Brand teams building a consistent visual identity. Content creators who have a reference aesthetic they want to reproduce at scale.\n\n### How to use it\n1. Use **extract_style** with any image URL — a photo you like, an Instagram post, or a brand campaign image\n2. The tool returns a full style breakdown plus a ready-to-use generation prompt\n3. The style is auto-saved to your library — use it with generate-image to create new images in the same visual language\n4. Optionally pass a name and tags to keep your style library organized\n\n### Getting started\nWorks immediately with no setup — pass any public image URL to extract its style.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"extract_style","displayName":"Extract Style","description":"Analyze an image to extract its complete visual style — camera, lens, lighting, color grading, texture, film stock, era, mood, and a reusable generation prompt. Auto-saves to Style Prompts.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"name":{"type":"string","description":"Name for the saved style reference. If omitted, auto-generated from the analysis (e.g. \"intimate — portrait — 2010s\")"},"save":{"type":"boolean","description":"Whether to save the extracted style to the user's Style Prompts section. Defaults to true","default":true},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for the saved style reference (e.g. [\"brand\", \"campaign-spring\"]). Auto-tags are added from the analysis"}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":60,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Extract style from a photograph","input":{"image_url":"https://images.unsplash.com/photo-1506744038136-46273834b3fb"}},{"description":"Extract and name the style with tags","input":{"image_url":"https://images.unsplash.com/photo-1506744038136-46273834b3fb","name":"Golden Hour Landscape","tags":["landscape","warm"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"style":{"type":"object","description":"Comprehensive visual style analysis with camera, exposure, color, lighting, texture, composition, post-processing, era, and mood"},"prompt":{"type":"string","description":"Ready-to-use generation prompt that captures the entire visual style"},"source_image_url":{"type":"string","description":"The analyzed image URL"},"saved":{"type":"boolean","description":"Whether the style was saved to Style Prompts"}}},"returns":"Complete visual style breakdown with a reusable generation prompt, auto-saved to Style Prompts"}],"workflow":["extract_style"],"icon":"/icons/image-style-extractor.webp","changelog":[{"version":"0.01","date":"2026-04-06","changes":["Initial release: extract visual style from images and save as reusable style prompt"]},{"version":"0.02","date":"2026-04-06","changes":["Accept any URL — automatically extracts the image from webpages via og:image metadata"]}],"premadePrompt":"Use ToolRouter to extract the visual style from this image: [paste image URL]. Save it as a style prompt I can reuse when generating new images.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"scene-creator","displayName":"Scene Creator","subtitle":"Save scenes from any URL","about":"**Scene Creator** saves scene and location reference images to your personal scene library from any URL — including Instagram posts and Pinterest pins. It downloads the image, analyzes it to extract setting, mood, lighting, and time of day, and stores it with searchable metadata so you can use it across other tools.\n\nScenes saved here can be referenced by image generation tools to produce consistent visual environments. Build up a library of locations, environments, and atmospheres that match your brand or project, then reuse them without hunting for references every time.\n\n### What you can do\n- **create_scene** — save any image URL as a scene reference with AI-generated metadata about setting, mood, lighting, and time of day\n\n### Who it's for\nPhotographers and creative directors building reference libraries, marketers maintaining a visual style library for campaigns, designers collecting environment references for product compositing, and anyone who works with AI image tools and wants reusable scene references they can reference by name.\n\n### How to use it\n1. Call **create_scene** with any image URL — direct image links, Instagram post URLs, or any webpage that contains an image all work.\n2. Optionally pass a name and tags to organize your library, or let the tool auto-generate them from the analysis.\n3. The response includes a shareable image_page link — always show this to the user.\n4. The saved scene_file_id can be passed to compatible image generation tools to compose products or subjects into this setting.\n\n### Getting started\nPass any image URL to **create_scene** — it automatically downloads, analyzes, and saves the image to your scene library in one step.","version":"0.01","categories":["media"],"currency":"USD","skills":[{"name":"create_scene","displayName":"Create Scene","description":"Save a scene reference from any image URL or webpage. Downloads the image, analyzes it to extract setting, mood, lighting, and time of day, and saves to your scene library.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Optional context to guide the analysis — e.g. \"this is for a luxury fashion shoot\""},"name":{"type":"string","description":"Name for the saved scene. If omitted, auto-generated from the analysis"},"product_ids":{"type":"array","items":{"type":"string"},"description":"Product file IDs to associate with this scene"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for the saved scene (e.g. [\"outdoor\", \"golden-hour\"]). Auto-tags are added from the analysis"}},"required":["url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":60,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Save a scene from an image URL","input":{"url":"https://images.unsplash.com/photo-1506744038136-46273834b3fb"}},{"description":"Save a scene with custom name and tags","input":{"url":"https://images.unsplash.com/photo-1506744038136-46273834b3fb","name":"Mountain Lake Sunrise","tags":["landscape","nature"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"scene":{"type":"object","description":"Scene analysis with setting, mood, lighting, time_of_day, description"},"source_image_url":{"type":"string","description":"The resolved image URL that was analyzed"},"saved":{"type":"boolean","description":"Whether the scene was saved to files"}}},"returns":"Scene analysis with setting, mood, lighting, and time of day — auto-saved to scene library"}],"workflow":["create_scene"],"icon":"/icons/scene-creator.webp","changelog":[{"version":"0.01","date":"2026-04-13","changes":["Initial release — create scenes from any URL with AI metadata extraction"]}],"premadePrompt":"Use ToolRouter to save this image as a scene reference: [paste URL]. Describe the setting and mood.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"script-enhancer","displayName":"Script Enhancer","subtitle":"Script to Seedance prompt in seconds","about":"**Script Enhancer** rewrites any video script into a production-ready prompt with timestamped shots, physical motion direction, camera moves, and audio cues — formatted specifically for AI video generation. Pass in a raw script and get back a structured file you can pipe directly into a video generation tool.\n\nWriting a script is one thing. Writing a prompt that an AI video model can actually execute is harder — the language needs to be precise, physical, and sequential. This tool bridges that gap by translating human-readable scripts into the exact format video models respond to.\n\n### What you can do\n- **enhance_script** — rewrite any raw script (screenplay format, prose, or action lines) into a structured Seedance 2.0 video prompt with timestamped shots, motion direction, camera moves, and per-shot generation parameters\n\n### Who it's for\nVideo creators using AI generation tools, marketers producing short-form video content, filmmakers exploring AI-assisted production, and developers building video generation pipelines who need their scripts translated into precise model prompts.\n\n### How to use it\n1. Call **enhance_script** with your raw script text — any format works: screenplay headings, prose description, or simple action lines.\n2. Pass a style to set the visual aesthetic, e.g. \"warm UGC\", \"cinematic drama\", or \"noir action\".\n3. Pass target_duration_seconds to control the total clip length. If omitted, duration is inferred from word count.\n4. The response includes a saved file URL — show this to the user. Use the file_id with a file_read call to retrieve the full shot-by-shot prompts for video generation.\n\n### Getting started\nPass any script text to **enhance_script** with a style description — it returns the enhanced prompt saved to your library within seconds.","version":"0.03","categories":["media","ai"],"currency":"USD","skills":[{"name":"enhance_script","displayName":"Enhance Script","description":"Rewrites a raw script into a structured Seedance 2.0 video prompt with timestamped shots, sequential physical motion direction, single camera moves per shot, dialogue formatted with delivery cues, and per-shot API params for generate-video.","inputSchema":{"type":"object","properties":{"script":{"type":"string","description":"Raw script text: scene headings, action lines, and dialogue in any format."},"style":{"type":"string","description":"Visual aesthetic direction, e.g. \"noir\", \"warm UGC\", \"cinematic drama\"."},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"],"description":"Output aspect ratio. Default 16:9."},"target_duration_seconds":{"type":"number","description":"Desired total video length in seconds (min 4, max 300). If omitted, inferred from word count at ~3 words/sec."}},"required":["script"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Enhance a short dramatic scene","input":{"script":"INT. CAFÉ - DAY\nMARCUS sits alone. He checks his phone. Nothing.\nMARCUS: She's not coming.","style":"cinematic drama","aspect_ratio":"16:9"}},{"description":"Enhance a UGC talking-head script with duration target","input":{"script":"Standing outside in natural light.\nHey, I just tried this and honestly it changed everything. Here's why.","style":"warm UGC, iPhone front camera","target_duration_seconds":10}},{"description":"Enhance a pure action scene with no dialogue","input":{"script":"A woman sprints down a neon-lit alley. She vaults a dumpster. Skids around a corner. Slams against a wall. Listens. Nothing.","style":"noir action","aspect_ratio":"9:16"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"shot_count":{"type":"number","description":"Number of shots generated."},"estimated_duration_seconds":{"type":"number","description":"Total estimated clip duration in seconds."},"has_dialogue":{"type":"boolean","description":"True if any shot contains spoken dialogue."},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal issues (truncation, multi-character shots, etc.)."},"saved_files":{"type":"array","description":"Saved prompt file — contains the full enhanced prompt and per-shot Seedance params.","items":{"type":"object","properties":{"file_id":{"type":"string","description":"File ID — pass to file_read to retrieve the full prompt data."},"name":{"type":"string","description":"File name."},"url":{"type":"string","description":"View URL — share with the user so they can read the full enhanced script."}}}}}},"returns":"Shot count, duration, and a saved prompt file URL. Show URL to user. Use file_read with file_id to get full prompts for video generation."}],"workflow":["enhance_script"],"icon":"/icons/script-enhancer.webp","changelog":[{"version":"0.01","date":"2026-04-21","changes":["Initial release"]},{"version":"0.02","date":"2026-04-21","changes":["Style reference no longer required — apply visual style at the storyboard generation step instead"]},{"version":"0.03","date":"2026-04-21","changes":["Enhanced script now saved to your prompt library — response returns a view link instead of the full text"]}],"premadePrompt":"Enhance this script for Seedance 2.0 video generation: [paste your script here]. Style: [e.g. cinematic drama / warm UGC / noir]. Target duration: [e.g. 15 seconds].","brain":{"instructions":"When brain knowledge is available:\n  - Apply brand visual style and cinematic aesthetic to shot style_notes\n  - Match brand voice and tone in dialogue delivery direction\n  - Reference product and subject details accurately in subject_action fields\n  - Use audience and platform context to calibrate pacing and shot duration","produces":["video_insights","creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"outfit-stylist","displayName":"Outfit Stylist","subtitle":"Build and style outfit collections","about":"**Outfit Stylist** lets you build, analyse, and catalogue outfit collections from photos, product pages, and your own garment library. Paste an Instagram URL, a product page, or a photo from any source and the tool extracts the garments, removes backgrounds, and assembles clean outfit sheets ready to share or reference.\n\nIt works in three directions. Extract the complete styling direction from a reference photo — how garments are layered, proportioned, and coordinated — and save it as a reusable style guide. Assemble a new outfit by pulling together product files or product page URLs and compositing them into a clean sheet. Or go the other direction and extract every individual garment from a single outfit photo, generating isolated product images for each piece.\n\n### What you can do\n- Extract the styling direction from any outfit photo, including Instagram posts and carousels\n- Assemble outfit sheets from existing product files or product page URLs\n- Extract all individual garments from a photo and save them as product files\n- Chain style extraction into outfit creation to recreate a reference look with new products\n- Tag outfits by occasion and season for organised collections\n\n### Who it's for\nFashion stylists, content creators, e-commerce teams, and personal shoppers who need to catalogue looks, build mood boards, or recreate reference styles. Also useful for brands managing outfit collections across shoots.\n\n### How to use it\n1. Use **extract_styling** to capture the styling direction from a reference photo — save it for later\n2. Use **create_outfit** to assemble a new outfit from product URLs or existing product files\n3. Use **extract_outfit** to reverse-engineer a photo into individual garment files\n4. Chain extract_styling into create_outfit to apply a reference style to a completely new outfit\n\n### Getting started\nNo API key required — paste any product URL or image URL to get started.","version":"0.03","categories":["media","ai"],"currency":"USD","skills":[{"name":"extract_styling","displayName":"Extract Styling","description":"Analyze an outfit photo to extract the fashion styling direction — how garments are layered, tucked, proportioned, and coordinated. Saves as a reusable style reference for future outfit creation.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"name":{"type":"string","description":"Name for the saved style reference. Auto-generated from analysis if omitted."},"save":{"type":"boolean","description":"Save the styling direction as a style reference. Defaults to true.","default":true},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for the saved style reference."}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":60,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Extract styling from an outfit photo","input":{"image_url":"https://example.com/outfit-lookbook.jpg"}},{"description":"Extract and name the style reference with tags","input":{"image_url":"https://example.com/outfit-lookbook.jpg","name":"Minimalist Linen Summer","tags":["summer","minimalist"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"styling":{"type":"object","description":"Complete fashion styling analysis with garments, direction, occasion, season, and silhouette"},"prompt":{"type":"string","description":"Reusable styling direction prose"},"source_image_url":{"type":"string","description":"The analyzed image URL"},"saved":{"type":"boolean","description":"Whether the style reference was saved"}}},"returns":"Fashion styling analysis with a reusable styling direction, auto-saved to Style Prompts"},{"name":"create_outfit","displayName":"Create Outfit","description":"Assemble an outfit from existing product files or product page URLs. Extracts product info and images, then composes them into an outfit sheet on a white canvas.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Name for the outfit."},"product_ids":{"type":"array","items":{"type":"string"},"description":"Array of existing product file IDs to include in the outfit."},"product_urls":{"type":"array","items":{"type":"string"},"description":"Array of product page URLs. Each is scraped to create a product file automatically."},"styling_direction":{"type":"string","description":"Inline styling direction prose describing how to wear and style this outfit."},"occasion":{"type":"string","description":"Outfit occasion.","enum":["casual","smart_casual","business_casual","business","formal","evening","athleisure","streetwear","resort","festival"]},"season":{"type":"string","description":"Season suitability.","enum":["spring","summer","autumn","winter","transitional","all_season"]},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for the outfit."}},"required":["name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Create outfit from existing product files","input":{"name":"Summer Linen Look","product_ids":["ast_abc123","ast_def456"],"occasion":"smart_casual","season":"summer"}},{"description":"Create outfit from product URLs with styling","input":{"name":"Weekend Casual","product_urls":["https://example.com/shirt","https://example.com/jeans"],"styling_direction":"Shirt untucked, sleeves rolled to elbow. Jeans cuffed at ankle. Clean white sneakers."}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"outfit_name":{"type":"string","description":"Name of the created outfit"},"garment_count":{"type":"number","description":"Number of garments in the outfit"},"garment_ids":{"type":"array","items":{"type":"string"},"description":"Product file IDs of all garments"},"outfit_meta":{"type":"object","description":"Complete outfit metadata"}}},"returns":"Created outfit file with composite sheet image and garment references"},{"name":"extract_outfit","displayName":"Extract Outfit","description":"Extract all individual garments from a single outfit photo using AI vision. Generates an isolated product image for each garment on a white background and saves as product files. Takes 1-2 minutes for image generation.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"name":{"type":"string","description":"Name for the outfit. Auto-generated if omitted."},"styling_direction":{"type":"string","description":"Override the auto-extracted styling direction with your own."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for the outfit and its garments."}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Extract all garments from an outfit photo","input":{"image_url":"https://example.com/street-style-outfit.jpg"}},{"description":"Extract with custom name and tags","input":{"image_url":"https://example.com/editorial-look.jpg","name":"Editorial Fall Look","tags":["editorial","fall"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"outfit_name":{"type":"string","description":"Name of the created outfit"},"garment_count":{"type":"number","description":"Number of garments identified"},"garments":{"type":"array","description":"Details of each identified garment"},"styling_direction":{"type":"string","description":"Extracted styling direction"},"source_image_url":{"type":"string","description":"The analyzed image URL"}}},"returns":"Extracted outfit with individual garment product files and styling direction"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["extract_styling","create_outfit","extract_outfit","extract_styling → create_outfit","list_models"],"icon":"/icons/outfit-stylist.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release: extract styling direction, create outfits from products, extract outfits from photos"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas and outfits from your file library"]},{"version":"0.03","date":"2026-04-17","changes":["Instagram post and carousel support — paste any Instagram URL and the correct image is extracted automatically"]}],"premadePrompt":"Use ToolRouter to analyze this outfit photo [paste URL] and extract all the individual garments. Create an outfit collection with the styling direction so I can recreate this look.","usesPersonas":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["create_outfit"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand aesthetic and style preferences to outfit curation\n  - Reference known audience demographics and fashion sensibility\n  - Match the creator's established styling direction","produces":["creative_insights","audience_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"character-animator","displayName":"Character Animator","subtitle":"Make characters dance, move, and come to life","about":"**Character Animator** brings any character, illustration, or portrait to life with AI-generated motion. From dancing animations to subtle portrait movement, it turns still images into shareable video clips without any animation software.\n\nWhether you're working with original artwork, saved personas, or photographs, the tool handles motion generation end to end. You can choose a dance style, transplant motion from a reference video onto a custom character, generate a looping chibi sprite, or add gentle lifelike movement to any still photo.\n\n### What you can do\n- **dance** — make a character or person dance in a chosen style: hip-hop, ballet, k-pop, salsa, breakdance, and more\n- **transfer_motion** — apply the movement from any reference video onto a custom character image\n- **animate_chibi** — generate a cute animated chibi character with a looping action cycle\n- **animate_photo** — add subtle, lifelike motion to any still photo — portraits, landscapes, or historical images\n\n### Who it's for\nContent creators, social media managers, game developers, and illustrators who want to animate characters quickly. Also useful for anyone who wants to create engaging short video clips from existing artwork or personas.\n\n### How to use it\n1. Upload a character image or use a saved persona from your library\n2. Choose the right skill: **dance** for a dance animation, **transfer_motion** to copy motion from a reference video, **animate_chibi** for a looping sprite, or **animate_photo** for subtle movement\n3. Set aspect ratio to 9:16 for vertical social content or 16:9 for widescreen\n4. Output defaults to 5 seconds — pass duration: 10 if you need a longer clip","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"dance","displayName":"Dance","description":"Make a character or person dance in a chosen style. Upload a character image and pick a dance style to generate a short animated video.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"dance_style":{"type":"string","enum":["hip-hop","ballet","breakdance","k-pop","salsa","disco","robot","contemporary"],"description":"Dance style. Default: hip-hop"},"duration":{"type":"number","description":"Video duration in seconds (5 or 10). Default: 5"},"aspect_ratio":{"type":"string","enum":["9:16","16:9","1:1"],"description":"Output aspect ratio. Default: 9:16"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Make a character do a hip-hop dance","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","dance_style":"hip-hop"}},{"description":"Ballet dance animation for vertical social media","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","dance_style":"ballet","aspect_ratio":"9:16"}}],"pricing":"paid","returns":"Short video of the character dancing in the chosen style"},{"name":"transfer_motion","displayName":"Transfer Motion","description":"Apply the movement from a reference video onto a custom character image. The character adopts the exact motion, poses, and timing of the reference.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"character_url":{"type":"string","description":"URL of the character image to animate"},"motion_video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"duration":{"type":"number","description":"Output video duration in seconds. Default: 5"},"aspect_ratio":{"type":"string","enum":["9:16","16:9","1:1"],"description":"Output aspect ratio. Default: 16:9"}},"required":["character_url","motion_video_url"]},"annotations":{},"examples":[{"description":"Transfer a walking motion onto a fantasy character","input":{"character_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","motion_video_url":"https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif"}}],"pricing":"paid","returns":"Video of the character performing the motion from the reference video"},{"name":"animate_chibi","displayName":"Animate Chibi","description":"Generate an animated chibi-style character with a looping action. Provide a photo or description and choose an action.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"character_desc":{"type":"string","description":"Description of the character if no image provided"},"action":{"type":"string","enum":["dance","jump","wave","run","spin","attack","celebrate"],"description":"Animation action. Default: dance"},"duration":{"type":"number","description":"Video duration in seconds. Default: 5"}},"required":[]},"annotations":{},"examples":[{"description":"Animated chibi from a photo doing a wave","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","action":"wave"}},{"description":"Animated chibi from a description","input":{"character_desc":"A cheerful orange-haired girl in a school uniform","action":"dance"}}],"pricing":"paid","returns":"Short animated video of the chibi character performing the chosen action"},{"name":"animate_photo","displayName":"Animate Photo","description":"Add subtle, life-like motion to any still photo — portraits, old photos, landscapes, or illustrations.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"motion_style":{"type":"string","enum":["subtle","moderate","dramatic"],"description":"Amount of motion to add. Default: subtle"},"motion_type":{"type":"string","enum":["breathing","wind","cinematic-float","parallax","eye-movement"],"description":"Type of motion effect. Default: breathing"},"duration":{"type":"number","description":"Video duration in seconds. Default: 5"},"aspect_ratio":{"type":"string","enum":["9:16","16:9","1:1","4:5"],"description":"Output aspect ratio. Default: matches source"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Add subtle breathing motion to a portrait","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","motion_style":"subtle","motion_type":"breathing"}},{"description":"Animate an old photo with cinematic movement","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","motion_style":"moderate","motion_type":"cinematic-float"}}],"pricing":"paid","returns":"Short video with the photo brought to life through motion"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/character-animator.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, scenes, and outfits from your file library"]}],"premadePrompt":"Animate [character image URL] doing a [dance style] dance. Make it a smooth 5-second loop ready for social media.","usesPersonas":true,"usesScenes":true,"usesOutfits":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"content-remixer","displayName":"Content Remixer","subtitle":"Remix viral videos with new personas","about":"**Content Remixer** repurposes viral TikTok and Instagram videos by replacing the person with a saved persona, swapping their outfit and scene, then animating the result with the original video's motion and audio. Same energy, new face.\n\nIt's built for creators who want to ride trending content without using someone else's likeness, and for brands that want consistent persona-based content across channels. The workflow previews the look as a still image first so you can approve the result before committing to video generation.\n\n### What you can do\n- **preview_persona** — generate a still image of a persona in a chosen outfit and scene before creating the video\n- **remix** — swap the person in a TikTok or Instagram video with a saved persona, keeping the original motion and audio\n- **check_video** — poll the status of a pending video generation job\n\n### Who it's for\nContent creators building persona-based channels, social media managers repurposing trending content for brand accounts, and anyone who wants to generate high-volume short-form video without filming new footage.\n\n### How to use it\n1. Save a persona in your library first (use the persona management tools)\n2. Use **preview_persona** with the persona, a desired outfit description, and a scene — check the still image before proceeding\n3. Once you're happy with the look, use **remix** with a TikTok or Instagram URL to generate the full video\n4. The response includes a video_page link — a permanent shareable page with a preview","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"preview_persona","displayName":"Preview Persona","description":"Generate a still image of a persona in a chosen outfit and scene. Use this to preview the look before committing to video generation. Accepts a persona from the roster and optional outfit/scene overrides.","inputSchema":{"type":"object","properties":{"source_image":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"persona_file_id":{"type":"string","description":"ID of a saved persona from the roster. If omitted, uses the source image directly."},"outfit":{"type":"string","description":"Outfit description (text) or a style reference ID from outfit-stylist (starts with ast_)."},"scene":{"type":"string","description":"Background/scene description. If omitted, preserves the original scene."},"aspect_ratio":{"type":"string","enum":["1:1","3:4","4:3","9:16","16:9"],"description":"Output aspect ratio. Default: 9:16."}},"required":["source_image"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Preview a persona in a new outfit","input":{"source_image":"https://example.com/original-person.jpg","persona_file_id":"ast_abc123","outfit":"Black leather jacket, white t-shirt, dark jeans","scene":"Urban street at sunset"}},{"description":"Preview with just a scene change","input":{"source_image":"https://example.com/original-person.jpg","scene":"Minimalist studio with white background"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated persona image(s)"},"persona_name":{"type":"string","description":"Name of the persona used"},"outfit_applied":{"type":"string","description":"Outfit description applied"},"scene_applied":{"type":"string","description":"Scene description applied"}}},"contentType":"image","returns":"Persona image in gallery format with outfit and scene applied"},{"name":"remix","displayName":"Remix","description":"Full end-to-end content remix: swap the person for a saved persona, change outfit and scene, then animate with motion and audio from a TikTok or Instagram video. ⏱ Takes 1-3 minutes. Runs asynchronously — returns a job_id, poll with check_video until complete.","inputSchema":{"type":"object","properties":{"source_image":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"reference_video_url":{"type":"string","description":"Video as ToolRouter file ID or hosted HTTP(S) URL."},"persona_file_id":{"type":"string","description":"ID of a saved persona from the roster. If omitted, uses the source image directly."},"outfit":{"type":"string","description":"Outfit description (text) or a style reference ID from outfit-stylist."},"scene":{"type":"string","description":"Background/scene description. If omitted, preserves the original scene."},"aspect_ratio":{"type":"string","enum":["9:16","16:9","1:1"],"description":"Output aspect ratio. Default: 9:16."}},"required":["source_image","reference_video_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":120,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Remix a TikTok with a persona and new outfit","input":{"source_image":"https://example.com/original-person.jpg","reference_video_url":"https://www.tiktok.com/@user/video/1234567890","persona_file_id":"ast_abc123","outfit":"Streetwear — oversized hoodie, cargo pants, chunky sneakers"}},{"description":"Remix an Instagram reel with scene change","input":{"source_image":"https://example.com/original-person.jpg","reference_video_url":"https://www.instagram.com/reel/ABC123/","scene":"Beach at golden hour"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Generated video URL"},"video_page":{"type":"string","description":"Permanent shareable page with OG preview"},"persona_name":{"type":"string","description":"Name of the persona used"},"reference_platform":{"type":"string","description":"Source platform (tiktok/instagram)"},"duration":{"type":"number","description":"Video duration in seconds"},"request_id":{"type":"string","description":"Job ID for polling if still processing"}}},"returns":"Remixed video with persona, outfit, scene, and motion/audio from reference video"},{"name":"check_video","displayName":"Check Video","description":"Poll for pending video generation jobs. Returns the video when complete, or current status if still processing.","inputSchema":{"type":"object","properties":{"request_id":{"type":"string","description":"The request_id returned by the remix skill when the video is still processing."},"model_id":{"type":"string","description":"The fal.ai model ID used for generation. Defaults to Kling 3.0 i2v endpoint."}},"required":["request_id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check status of a pending remix","input":{"request_id":"abc123-def456"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"status":{"type":"string","description":"completed, running, or failed"},"video_url":{"type":"string","description":"Video URL when completed"},"video_page":{"type":"string","description":"Permanent shareable page"}}},"returns":"Video status and URL when complete"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["preview_persona","preview_persona → remix","remix","list_models"],"icon":"/icons/content-remixer.webp","changelog":[{"version":"0.01","date":"2026-04-09","changes":["Initial release: persona swap, outfit + scene changes, motion transfer with audio from TikTok/Instagram videos"]},{"version":"0.02","date":"2026-04-14","changes":["Accept scenes and outfits from your file library"]}],"premadePrompt":"Use ToolRouter to remix this TikTok [paste URL] with my persona [persona name]. Give them a streetwear outfit and keep the original motion and audio.","usesPersonas":true,"usesScenes":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["preview_persona","remix"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"character-sheet-maker","displayName":"Character Sheet Maker","subtitle":"Expression sheets, lineups, lookbooks, and reference packs","about":"**Character Sheet Maker** generates professional character design reference assets from a description or image. Expression sheets, lookbooks, sprite sheets, NPC portraits, prop sheets — all with consistent style across every panel.\n\nIt's built for the full character development pipeline. Whether you're designing a game character that needs animation references, building an NPC cast for a visual novel, or creating a lookbook for an illustrated brand mascot, the tool handles the visual consistency problem so you don't have to generate and manually match dozens of images one by one.\n\n### What you can do\n- **expression_sheet** — multi-panel sheet showing a character across different emotions\n- **character_lineup** — side-by-side height and proportion comparison for a cast of characters\n- **look_book** — one character shown across multiple outfit variations\n- **sprite_sheet** — game animation cycle references in a single grid\n- **npc_portraits** — a consistent portrait pack for an entire NPC faction from a single description\n- **location_sheet** — an environment rendered from multiple angles and lighting conditions\n- **prop_sheet** — an object shown from multiple angles with detail close-ups\n- **age_progression** — a character rendered across life stages from child to elderly\n\n### Who it's for\nGame developers, comic artists, animators, and illustrators who need consistent character design references. Also useful for brand teams building mascot style guides or anyone developing a visual storytelling project.\n\n### How to use it\n1. Start with **expression_sheet** or **character_lineup** — pass a character_ref_url or write a character_desc\n2. Set art_style to match your project (anime, cartoon, realistic, pixel art)\n3. Use **look_book** to explore outfit variations, or **sprite_sheet** for game animation references\n4. For world-building, use **npc_portraits** with a faction description to generate a full cast at once","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"expression_sheet","displayName":"Expression Sheet","description":"Generate a multi-panel expression sheet showing a character in different emotional states. Maintains visual consistency across all panels.","inputSchema":{"type":"object","properties":{"character_ref_url":{"type":"string","description":"URL of the character reference image"},"character_desc":{"type":"string","description":"Text description of the character if no image is provided"},"expressions":{"type":"array","items":{"type":"string"},"description":"List of emotions to depict. Default: happy, sad, angry, surprised, neutral, embarrassed"},"art_style":{"type":"string","description":"Art style for the sheet (e.g. anime, cartoon, realistic, pixel). Default: anime"}},"required":[]},"annotations":{},"examples":[{"description":"Expression sheet for an anime girl character","input":{"character_desc":"A cheerful teenage girl with short pink hair and green eyes","art_style":"anime"}},{"description":"Expression sheet from a reference image","input":{"character_ref_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg"}}],"pricing":"paid","returns":"Gallery of expression panels showing the character in each emotional state"},{"name":"character_lineup","displayName":"Character Lineup","description":"Generate a side-by-side character lineup comparing multiple characters at consistent scale for height and proportion reference.","inputSchema":{"type":"object","properties":{"characters":{"type":"array","items":{"type":"string"},"description":"List of character descriptions to include in the lineup"},"character_ref_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"art_style":{"type":"string","description":"Consistent art style for all characters. Default: anime"},"show_height_markers":{"type":"boolean","description":"Add height comparison markers. Default: true"}},"required":["characters"]},"annotations":{},"examples":[{"description":"Lineup of three game characters","input":{"characters":["tall warrior with silver armour","short mage with purple robes","agile rogue in dark leather"],"art_style":"fantasy illustration"}}],"pricing":"paid","returns":"Lineup image with all characters at consistent scale for comparison"},{"name":"look_book","displayName":"Look Book","description":"Generate a styled lookbook showing one character in different outfits or visual variations. Maintains character identity across all panels.","inputSchema":{"type":"object","properties":{"character_ref_url":{"type":"string","description":"URL of the character reference image"},"character_desc":{"type":"string","description":"Description of the character if no image provided"},"outfits":{"type":"array","items":{"type":"string"},"description":"List of outfit descriptions. Default: casual, formal, battle, summer"},"art_style":{"type":"string","description":"Art style. Default: anime"}},"required":[]},"annotations":{},"examples":[{"description":"Outfit lookbook for a fantasy heroine","input":{"character_desc":"A tall elven archer with silver hair","outfits":["casual tavern clothes","full battle armour","royal ball gown","ranger forest gear"]}}],"pricing":"paid","returns":"Gallery of the character in each specified outfit"},{"name":"sprite_sheet","displayName":"Sprite Sheet","description":"Generate animation frame references for a character showing standard game animation cycles.","inputSchema":{"type":"object","properties":{"character_ref_url":{"type":"string","description":"URL of the character reference image"},"character_desc":{"type":"string","description":"Description of the character if no image provided"},"art_style":{"type":"string","enum":["pixel","cartoon","anime","realistic"],"description":"Sprite art style. Default: cartoon"},"animation_cycles":{"type":"array","items":{"type":"string"},"description":"Animation cycles to show. Default: idle, walk, run, attack, jump"}},"required":[]},"annotations":{},"examples":[{"description":"Sprite sheet for a 2D game hero","input":{"character_desc":"A young knight in blue armour","art_style":"cartoon","animation_cycles":["idle","walk","attack","jump"]}}],"pricing":"paid","returns":"Gallery of animation frame reference panels for each cycle"},{"name":"npc_portraits","displayName":"NPC Portrait Pack","description":"Generate a set of distinct but visually consistent NPC portraits from a faction or world description.","inputSchema":{"type":"object","properties":{"faction_desc":{"type":"string","description":"Description of the faction, culture, or group these NPCs belong to"},"count":{"type":"number","description":"Number of distinct NPC portraits to generate (1–6). Default: 6"},"art_style":{"type":"string","description":"Art style for portraits (e.g. fantasy RPG, sci-fi, medieval). Default: fantasy RPG"},"world_setting":{"type":"string","description":"World setting context for cultural accuracy"}},"required":["faction_desc"]},"annotations":{},"examples":[{"description":"Generate NPC portraits for a desert merchant faction","input":{"faction_desc":"Desert merchant guild — sun-weathered traders in flowing robes with brass jewellery","count":6,"art_style":"fantasy RPG"}}],"pricing":"paid","returns":"Gallery of NPC portrait images, each visually distinct but culturally consistent"},{"name":"location_sheet","displayName":"Location Reference Sheet","description":"Generate a multi-angle reference sheet for a location showing it from different perspectives, times of day, and lighting conditions.","inputSchema":{"type":"object","properties":{"location_desc":{"type":"string","description":"Description of the location to render"},"art_style":{"type":"string","description":"Visual style (e.g. anime background, concept art, realistic). Default: concept art"},"views":{"type":"array","items":{"type":"string"},"description":"List of views to include. Default: exterior wide, interior, day, night, close detail"}},"required":["location_desc"]},"annotations":{},"examples":[{"description":"Location sheet for a fantasy tavern","input":{"location_desc":"A cosy medieval tavern with a large fireplace, wooden beams, and scattered barrels","art_style":"anime background"}}],"pricing":"paid","returns":"Gallery of the location from multiple angles and lighting conditions"},{"name":"prop_sheet","displayName":"Prop Design Sheet","description":"Generate a prop design sheet showing an object from multiple angles with detail callouts.","inputSchema":{"type":"object","properties":{"prop_desc":{"type":"string","description":"Description of the prop or object to design"},"art_style":{"type":"string","description":"Visual style. Default: concept art"},"views":{"type":"array","items":{"type":"string"},"description":"Views to show. Default: front, back, side, detail, in-use context"}},"required":["prop_desc"]},"annotations":{},"examples":[{"description":"Prop sheet for a magical staff","input":{"prop_desc":"An ancient wooden wizard staff with a glowing crystal orb at the top and carved runes along the shaft"}}],"pricing":"paid","returns":"Gallery of prop views with multiple angles and detail shots"},{"name":"age_progression","displayName":"Age Progression","description":"Generate a grid showing a character or person at different life stages from childhood to old age.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"character_desc":{"type":"string","description":"Description of the character if no image is provided"},"stages":{"type":"array","items":{"type":"string"},"description":"Life stages to show. Default: baby, child, teenager, young adult, middle age, elderly"},"art_style":{"type":"string","description":"Art style. Default: realistic"}},"required":[]},"annotations":{},"examples":[{"description":"Age progression for a fantasy character","input":{"character_desc":"A brave knight with dark hair and blue eyes","stages":["child","young adult","middle age","elderly"]}},{"description":"Age progression from a photo","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg"}}],"pricing":"paid","returns":"Gallery of the character at each specified life stage"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/character-sheet-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas and style references from your file library"]}],"premadePrompt":"Create an expression sheet for [character description or upload a reference image]. I need at least 6 different emotions including happy, sad, angry, surprised, neutral, and one more.","usesPersonas":true,"usesStyleReferences":true,"styleReferenceSkills":["expression_sheet","character_lineup","look_book","sprite_sheet","npc_portraits","location_sheet","prop_sheet","age_progression"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"ai-influencer-creator","displayName":"AI Influencer Creator","subtitle":"Create AI influencers and fashion editorial content","about":"**AI Influencer Creator** generates photorealistic AI influencer images, places real or fictional people on celebrity red carpets, transforms casual photos into editorial shoots, and creates fashion images from text descriptions. All outputs are vertical 9:16 by default — ready for Instagram, TikTok, and campaigns.\n\nBrands use it to create consistent AI talent for campaigns without hiring models. Creators use it to build a visual identity, generate editorial content, or put themselves in glamorous settings. The tool gives granular control over physical appearance, fashion style, pose, and background — so outputs match a specific brief rather than being generic.\n\n### What you can do\n- Generate a fully custom photorealistic AI persona with control over age, skin tone, hair, outfit, pose, and background\n- Place any uploaded portrait on a celebrity red carpet with paparazzi atmosphere\n- Transform a casual photo into a professional editorial photoshoot with studio lighting\n- Generate fashion editorial images from a text description when no source photo is available\n\n### Who it's for\nMarketing and creative teams producing campaign imagery without a photo shoot. Brands building AI talent personas for consistent content. Fashion and lifestyle creators generating editorial content at scale.\n\n### How to use it\n1. Use **create_influencer** to build a custom AI persona from scratch — describe the style, age range, skin tone, outfit, and setting\n2. Use **paparazzi_scene** with an uploaded portrait to place someone on a red carpet\n3. Use **model_photoshoot** to upgrade a casual photo to a professional editorial look\n4. Use **fashion_editorial** when you only have a text description and want a generated fashion image\n\n### Getting started\n**create_influencer** needs no photo — just a description of the persona you want. All other skills accept a photo URL.","version":"0.02","categories":["media","marketing","ai"],"currency":"USD","skills":[{"name":"create_influencer","displayName":"Create Influencer","description":"Generate a photorealistic AI influencer with full physical and style customisation. Outputs vertical 9:16 images ready for social platforms.","inputSchema":{"type":"object","properties":{"age_range":{"type":"string","enum":["18-24","25-34","35-44","45-54"],"description":"Age range of the influencer. Default: 25-34"},"gender":{"type":"string","enum":["female","male","non-binary"],"description":"Gender presentation. Default: female"},"fashion_style":{"type":"string","description":"Fashion aesthetic (e.g. streetwear, luxury, athleisure, bohemian, minimalist). Default: streetwear"},"hair_style":{"type":"string","description":"Hair style description (e.g. long wavy, short bob, braids, afro). Default: long wavy"},"hair_colour":{"type":"string","description":"Hair colour. Default: brunette"},"eye_colour":{"type":"string","description":"Eye colour. Default: brown"},"skin_tone":{"type":"string","enum":["fair","light","medium","olive","tan","dark","deep"],"description":"Skin tone. Default: medium"},"outfit_desc":{"type":"string","description":"Detailed outfit description"},"setting":{"type":"string","description":"Background setting (e.g. urban street, luxury interior, beach, studio). Default: urban street"},"pose":{"type":"string","description":"Pose description (e.g. casual lean, confident stance, walking). Default: confident stance"},"custom_instructions":{"type":"string","description":"Any additional details about appearance, accessories, or mood"},"num_images":{"type":"number","description":"Number of images to generate (1–4). Default: 1"}},"required":[]},"annotations":{},"examples":[{"description":"Generate a streetwear female AI influencer","input":{"age_range":"25-34","gender":"female","fashion_style":"streetwear","hair_style":"long wavy","skin_tone":"medium","setting":"urban street"}},{"description":"Luxury fashion male influencer","input":{"age_range":"25-34","gender":"male","fashion_style":"luxury","outfit_desc":"tailored navy blazer, white shirt, designer sunglasses","setting":"upscale hotel lobby"}}],"pricing":"paid","returns":"Photorealistic influencer image(s) in 9:16 vertical format"},{"name":"paparazzi_scene","displayName":"Paparazzi Scene","description":"Place any person on a celebrity red carpet with paparazzi camera flashes, crowds, and event atmosphere. Upload a portrait and choose the event type.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"event_type":{"type":"string","enum":["film-premiere","awards-ceremony","fashion-week","music-awards","sports-gala"],"description":"Type of celebrity event. Default: film-premiere"},"outfit_desc":{"type":"string","description":"Optional outfit description to wear on the red carpet"},"aspect_ratio":{"type":"string","enum":["9:16","4:5","1:1"],"description":"Output aspect ratio. Default: 9:16"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Place a portrait on a film premiere red carpet","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","event_type":"film-premiere"}},{"description":"Fashion week paparazzi scene with outfit","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","event_type":"fashion-week","outfit_desc":"avant-garde black gown with dramatic sleeves"}}],"pricing":"paid","returns":"Photorealistic image of the person on the red carpet with paparazzi atmosphere"},{"name":"model_photoshoot","displayName":"Model Photoshoot","description":"Transform a single casual photo into a professional editorial photoshoot with studio lighting, fashion poses, and polished production quality.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"shoot_style":{"type":"string","enum":["editorial","commercial","street","campaign","beauty"],"description":"Photoshoot style. Default: editorial"},"setting":{"type":"string","description":"Shoot setting (e.g. studio white, urban, nature, luxury interior). Default: studio white"},"num_images":{"type":"number","description":"Number of photoshoot variants to generate (1–4). Default: 2"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Turn a selfie into an editorial photoshoot","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","shoot_style":"editorial","num_images":2}},{"description":"Commercial beauty shoot","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","shoot_style":"beauty","setting":"studio white"}}],"pricing":"paid","returns":"Professional photoshoot images with editorial quality lighting and composition"},{"name":"fashion_editorial","displayName":"Fashion Editorial","description":"Generate fashion editorial photography from a text description — model appearance, outfit, setting, and mood.","inputSchema":{"type":"object","properties":{"model_desc":{"type":"string","description":"Description of the model — appearance, age range, style"},"outfit_desc":{"type":"string","description":"Detailed outfit and styling description"},"setting":{"type":"string","description":"Shoot setting and environment"},"mood":{"type":"string","description":"Editorial mood and atmosphere (e.g. moody, vibrant, minimalist, dramatic)"},"aspect_ratio":{"type":"string","enum":["9:16","4:5","2:3","1:1"],"description":"Output aspect ratio. Default: 9:16"},"num_images":{"type":"number","description":"Number of editorial images (1–4). Default: 2"}},"required":["model_desc"]},"annotations":{},"examples":[{"description":"Dark editorial fashion shoot","input":{"model_desc":"tall female model with sharp features and dark hair","outfit_desc":"structured black leather coat and thigh-high boots","setting":"rain-slicked urban alley at night","mood":"moody and dramatic"}}],"pricing":"paid","returns":"Editorial fashion photography images ready for campaign use"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/ai-influencer-creator.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas and outfits from your file library"]}],"premadePrompt":"Create a female AI influencer who is [describe age, style, and vibe — e.g. \"25, streetwear, confident and edgy\"]. Vertical format, ready for Instagram.","usesPersonas":true,"usesOutfits":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"photo-style-transfer","displayName":"Photo Style Transfer","subtitle":"Apply any visual style to photos and characters","about":"**Photo Style Transfer** transforms images by applying a completely different visual treatment. Clone the exact look of a reference image onto any subject. Convert portraits and photos into anime illustrations with five distinct aesthetics. Match the colour palette of a cinematic reference frame to any photo. Turn stylised or anime characters photorealistic. Generate anime squad posters from group photos. Create anime sticker packs from a single reference.\n\nThe tool is built for creative work where visual consistency matters — applying an artist's signature style across multiple images, building a cohesive branded aesthetic, or exploring what a photo looks like in a completely different artistic tradition. Style transfer preserves faces and identity by default while changing everything else around them.\n\n### What you can do\n- Clone the visual style of any reference image onto a subject image — colour, texture, lighting, and treatment\n- Convert any photo to anime in five styles: shonen-action, Studio Ghibli, cyberpunk, slice-of-life, or dark-fantasy\n- Apply the exact colour grade of a reference image to any photo\n- Render anime or stylised characters as photorealistic portraits\n- Transform group photos into anime squad posters with consistent styling\n- Generate a set of anime-style sticker variants (up to 6) from a photo or description\n\n### Who it's for\nDigital artists, social media creators, game developers, brand designers, and anyone who needs to apply consistent visual treatments across images or explore creative style transformations.\n\n### How to use it\n1. Use **transfer_style** with a subject image and a style reference URL to clone the look\n2. Use **apply_anime_style** to convert any photo to your chosen anime aesthetic\n3. Use **color_grade** to match the colour palette of a cinematic reference to your photo\n4. Use **anime_squad_poster** to transform a group photo into a squad-style anime poster\n5. Use **anime_sticker_pack** to generate a set of sticker variants from a photo or text description\n\n### Getting started\nNo setup required — pass image URLs to get started with any of the style transfer skills.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"transfer_style","displayName":"Transfer Style","description":"Apply the visual style of a reference image onto a subject image — matching colour palette, texture, lighting, and artistic treatment.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style_reference_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"strength":{"type":"number","description":"Style transfer strength from 0 (subtle) to 1 (full transformation). Default: 0.8"},"preserve_faces":{"type":"boolean","description":"Keep faces and identity intact while applying style. Default: true"}},"required":["image_url","style_reference_url"]},"annotations":{},"examples":[{"description":"Apply a watercolour painting style to a portrait photo","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","style_reference_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Camponotus_flavomarginatus_ant.jpg/640px-Camponotus_flavomarginatus_ant.jpg"}}],"pricing":"paid","returns":"Restyled image with the visual treatment of the reference applied"},{"name":"apply_anime_style","displayName":"Apply Anime Style","description":"Convert any photo or image into an anime-styled illustration. Choose from five distinct anime aesthetics.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"anime_style":{"type":"string","enum":["shonen-action","studio-ghibli","cyberpunk","slice-of-life","dark-fantasy"],"description":"Anime aesthetic to apply. Default: studio-ghibli"},"preserve_composition":{"type":"boolean","description":"Keep original composition and poses. Default: true"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Convert a portrait photo to Studio Ghibli style","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","anime_style":"studio-ghibli"}}],"pricing":"paid","returns":"Anime-styled version of the input image"},{"name":"color_grade","displayName":"Colour Grade","description":"Apply the exact colour palette and cinematic grade of a reference image to any photo.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"reference_url":{"type":"string","description":"URL of the reference image whose colour palette to match"},"intensity":{"type":"string","enum":["subtle","moderate","full"],"description":"Grading intensity. Default: moderate"}},"required":["image_url","reference_url"]},"annotations":{},"examples":[{"description":"Apply a warm cinematic colour grade from a film still","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","reference_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Camponotus_flavomarginatus_ant.jpg/640px-Camponotus_flavomarginatus_ant.jpg"}}],"pricing":"paid","returns":"Colour-graded image matching the palette of the reference"},{"name":"anime_to_photo","displayName":"Anime to Photo","description":"Render a stylised or anime character as a photorealistic portrait, preserving their features and colours.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"detail_level":{"type":"string","enum":["standard","high"],"description":"Level of photorealistic detail. Default: standard"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Render an anime character as a realistic person","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg"}}],"pricing":"paid","returns":"Photorealistic rendering of the anime character"},{"name":"anime_squad_poster","displayName":"Anime Squad Poster","description":"Transform a group photo into an anime squad poster. All faces are stylised consistently in the chosen anime aesthetic.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["shonen-action","studio-ghibli","cyberpunk","slice-of-life","dark-fantasy"],"description":"Anime style for the squad poster. Default: shonen-action"},"add_title":{"type":"string","description":"Optional title text to overlay on the poster"}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Turn a team photo into a shonen anime squad poster","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","style":"shonen-action"}}],"pricing":"paid","returns":"Anime squad poster in the chosen style"},{"name":"anime_sticker_pack","displayName":"Anime Sticker Pack","description":"Generate a set of anime-style stickers from a photo or text description. Produces up to 6 distinct expressions or poses.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"description":{"type":"string","description":"Text description of the character if no photo is provided"},"style":{"type":"string","enum":["cute-chibi","expressive-anime","kawaii","bold-lineart"],"description":"Sticker art style. Default: cute-chibi"},"count":{"type":"number","description":"Number of sticker variants to generate (1–6). Default: 4"}},"required":[]},"annotations":{},"examples":[{"description":"Generate a chibi sticker pack from a selfie","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","style":"cute-chibi","count":4}},{"description":"Generate anime stickers from a character description","input":{"description":"A cheerful orange-haired girl with big blue eyes","style":"expressive-anime","count":4}}],"pricing":"paid","returns":"Gallery of anime sticker images ready for use"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/photo-style-transfer.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept style references from your file library"]}],"premadePrompt":"Take [subject image URL] and apply the visual style from [style reference URL] to it so it looks like it was created by the same artist.","usesStyleReferences":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"fashion-studio","displayName":"Fashion Studio","subtitle":"Fashion reels, runway walks, and catalogue shots from a single photo","about":"**Fashion Studio** turns a single garment photo into a complete fashion content package — reels, runway videos, e-commerce shots, fabric swatches, and furniture texture previews. No studio, no model, no stylist required.\n\nUpload one image of a garment and produce scroll-worthy Instagram reels with multiple styled shots, virtual runway walk videos, professional catalogue images for your product pages, and fabric visualisations for materials you're considering before ordering samples. The furniture texture swap lets interior designers preview how a piece looks in different fabrics without buying anything.\n\n### What you can do\n- **fashion_reel** — generate a short Instagram fashion reel from a single garment photo with multiple styled shots and transitions\n- **runway_walk** — create a virtual runway video of a model walking in your garment\n- **clothing_catalogue** — produce professional e-commerce product views from one garment image\n- **fabric_swatch** — visualise a fabric or textile from a text description before ordering samples\n- **fabric_texture_swap** — preview how a piece of furniture looks in a different fabric or material\n\n### Who it's for\nFashion brands, e-commerce sellers, independent designers, and interior designers who want professional-quality visual content without a full production shoot.\n\n### How to use it\n1. For social media, call **fashion_reel** with your garment image URL and choose a model style and background.\n2. For product pages, call **clothing_catalogue** to generate standard e-commerce angles.\n3. To visualise a material before purchasing, call **fabric_swatch** with a text description of the fabric.\n\n### Getting started\nCall **fashion_reel** with a garment image URL to generate your first video content immediately.","version":"0.02","categories":["media","marketing"],"currency":"USD","skills":[{"name":"fashion_reel","displayName":"Fashion Reel","description":"Generate a short fashion reel video from a single garment photo, showing the garment in multiple styled shots with smooth transitions.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"garment_url":{"type":"string","description":"URL of the garment or outfit photo"},"model_style":{"type":"string","description":"Description of the model aesthetic (e.g. editorial, street, minimalist). Default: editorial"},"background_style":{"type":"string","description":"Setting or background style (e.g. studio, urban, nature, luxury). Default: studio"},"duration":{"type":"number","description":"Reel duration in seconds. Default: 5"},"aspect_ratio":{"type":"string","enum":["9:16","4:5","1:1"],"description":"Output ratio. Default: 9:16"}},"required":["garment_url"]},"annotations":{},"examples":[{"description":"Create an Instagram reel for a dress","input":{"garment_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","model_style":"editorial","background_style":"urban"}}],"pricing":"paid","returns":"Short fashion reel video of the garment in multiple styled shots"},{"name":"runway_walk","displayName":"Runway Walk","description":"Generate a virtual runway walk video showing a model wearing the garment, with professional catwalk lighting and atmosphere.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"garment_url":{"type":"string","description":"URL of the garment photo"},"model_url":{"type":"string","description":"Optional URL of a model photo to use as the body"},"runway_style":{"type":"string","enum":["catwalk","street","editorial","luxury"],"description":"Runway setting style. Default: catwalk"},"duration":{"type":"number","description":"Video duration in seconds. Default: 5"}},"required":["garment_url"]},"annotations":{},"examples":[{"description":"Catwalk runway walk for an evening gown","input":{"garment_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","runway_style":"catwalk"}}],"pricing":"paid","returns":"Short runway walk video of the garment on a virtual catwalk"},{"name":"clothing_catalogue","displayName":"Clothing Catalogue","description":"Generate standard e-commerce product views from a single garment photo — front hanger, back hanger, fabric close-up, and on-model shot.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"garment_url":{"type":"string","description":"URL of the garment photo"},"background":{"type":"string","enum":["white","light-grey","lifestyle"],"description":"Product background style. Default: white"},"include_model":{"type":"boolean","description":"Include an on-model shot. Default: true"}},"required":["garment_url"]},"annotations":{},"examples":[{"description":"Generate catalogue shots for an e-commerce listing","input":{"garment_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","background":"white","include_model":true}}],"pricing":"paid","returns":"Gallery of professional e-commerce product views of the garment"},{"name":"fabric_swatch","displayName":"Fabric Swatch","description":"Visualise any fabric or textile from a text description — useful for previewing materials before ordering samples.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"fabric_desc":{"type":"string","description":"Description of the fabric (e.g. navy linen with subtle texture, floral silk in pastel pink)"},"colour":{"type":"string","description":"Primary colour if not mentioned in fabric_desc"},"swatch_style":{"type":"string","enum":["flat","draped","folded"],"description":"How to present the swatch. Default: flat"},"count":{"type":"number","description":"Number of swatch variants to generate (1–4). Default: 2"}},"required":["fabric_desc"]},"annotations":{},"examples":[{"description":"Visualise a floral silk fabric","input":{"fabric_desc":"delicate floral silk in soft pink and cream tones, lightweight and sheer","swatch_style":"draped","count":2}},{"description":"Heavy wool fabric swatch","input":{"fabric_desc":"heavy charcoal herringbone wool, thick texture with subtle pattern","swatch_style":"flat"}}],"pricing":"paid","returns":"Gallery of fabric swatch visualisations"},{"name":"fabric_texture_swap","displayName":"Fabric Texture Swap","description":"Swap the fabric or material on any piece of furniture in a photo — preserves the original shape, lighting, and shadows while applying a new textile surface.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"fabric_desc":{"type":"string","description":"Description of the new fabric or material to apply (e.g. deep emerald velvet, natural linen, cognac leather)"},"preserve_details":{"type":"boolean","description":"Carefully preserve shape, lighting, and shadow details. Default: true"}},"required":["image_url","fabric_desc"]},"annotations":{},"examples":[{"description":"Swap sofa fabric to emerald velvet","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","fabric_desc":"deep emerald green velvet with subtle sheen"}},{"description":"Apply natural linen to armchair","input":{"image_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","fabric_desc":"natural washed linen in warm oatmeal tone"}}],"pricing":"paid","returns":"Image of the furniture with the new fabric applied, preserving original lighting and shape"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/fashion-studio.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, scenes, outfits, products and style references from your file library"]}],"premadePrompt":"Create a fashion reel for this garment [upload image]. I want a short video showing multiple styled shots with smooth transitions, ready for Instagram.","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["fashion_reel","runway_walk","clothing_catalogue","fabric_swatch","fabric_texture_swap"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply the brand's fashion aesthetic and visual identity\n  - Match established styling direction for catalogue and editorial shoots\n  - Reference brand colour palette and mood for scene composition","produces":["creative_insights","product_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"playlist-art-maker","displayName":"Playlist Art Maker","subtitle":"Turn songs and Spotify playlists into aesthetic visual scenes","about":"**Playlist Art Maker** generates unique visual artwork for songs and playlists. Pass a track name and artist and it infers the mood, atmosphere, and emotional tone to create an evocative image — no manual prompt writing needed. Visualise a whole playlist as a cohesive gallery, one artwork per song, all in the same visual style.\n\nFive visual styles are available: cinematic for moody film-like scenes, anime for illustrated character-driven visuals, abstract for colour-field and shape-based interpretations, painterly for brushstroke texture and depth, and vintage for aged and grainy treatments. Aspect ratio choices cover album artwork squares, widescreen, and portrait orientation for Stories and phone wallpapers.\n\n### What you can do\n- Generate a single song visualisation in any of five visual styles\n- Visualise an entire playlist as a gallery — one artwork per track\n- Choose cinematic, anime, abstract, painterly, or vintage aesthetics\n- Output in 1:1 for album art, 16:9 for widescreen, or 9:16 for mobile and Stories\n- Visualise up to 10 tracks in a single playlist call\n\n### Who it's for\nMusicians, playlist curators, music journalists, content creators, and anyone who wants visual artwork that matches the feeling of a song or a collection of tracks. Great for social media content, streaming profile artwork, and music-driven creative projects.\n\n### How to use it\n1. Use **visualize_track** with a track name and artist for a single song — choose your style and aspect ratio\n2. Use **visualize_playlist** with an array of track objects to generate a full gallery\n3. Pick the visual_style that fits the genre or mood — cinematic works for most, anime for J-pop or lo-fi\n4. Set aspect_ratio to 9:16 for Stories-format content or 1:1 for album art\n\n### Getting started\nNo setup required — pass any track name and artist to generate artwork instantly.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"visualize_track","displayName":"Visualize Track","description":"Generate a single aesthetic visual scene for a song. Infers mood from track name and artist to create an evocative artwork in your chosen style.","inputSchema":{"type":"object","properties":{"track":{"type":"string","description":"Song name (e.g. \"Lover\", \"Bohemian Rhapsody\", \"Blinding Lights\")"},"artist":{"type":"string","description":"Artist or band name (e.g. \"Taylor Swift\", \"Queen\", \"The Weeknd\")"},"visual_style":{"type":"string","enum":["cinematic","anime","abstract","painterly","vintage"],"description":"Visual aesthetic style. Default: cinematic"},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16"],"description":"Image aspect ratio. 1:1 for album art (default), 16:9 for widescreen, 9:16 for mobile/Stories"}},"required":["track","artist"]},"annotations":{},"examples":[{"description":"Visualize a romantic pop song","input":{"track":"Lover","artist":"Taylor Swift","visual_style":"painterly"}},{"description":"Visualize a classic rock anthem in cinematic style","input":{"track":"Bohemian Rhapsody","artist":"Queen","visual_style":"cinematic","aspect_ratio":"16:9"}},{"description":"Anime-style visual for a Japanese pop track","input":{"track":"Plastic Love","artist":"Mariya Takeuchi","visual_style":"anime"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number"},"height":{"type":"number"}}}},"image_path":{"type":"string","description":"Local path for asset pipeline upload"},"track":{"type":"string","description":"Track name used"},"artist":{"type":"string","description":"Artist name used"},"visual_style":{"type":"string","description":"Style applied"},"prompt_used":{"type":"string","description":"Full prompt sent to the image model"}}},"contentType":"image","returns":"One aesthetic image capturing the mood of the song, in the chosen visual style"},{"name":"visualize_playlist","displayName":"Visualize Playlist","description":"Generate one aesthetic visual per track from a list of songs. Returns a gallery of images — each artwork tailored to the mood of its song.","inputSchema":{"type":"object","properties":{"tracks":{"type":"array","description":"List of tracks to visualize. Each item must have \"name\" and \"artist\" fields.","items":{"type":"object","properties":{"name":{"type":"string","description":"Song name"},"artist":{"type":"string","description":"Artist name"}}}},"visual_style":{"type":"string","enum":["cinematic","anime","abstract","painterly","vintage"],"description":"Visual aesthetic style applied to all tracks. Default: cinematic"},"aspect_ratio":{"type":"string","enum":["1:1","16:9","9:16"],"description":"Image aspect ratio for all tracks. Default: 1:1"},"max_tracks":{"type":"number","description":"Maximum number of tracks to visualize (1-10). Default: 6"}},"required":["tracks"]},"annotations":{},"examples":[{"description":"Visualize a road trip playlist","input":{"tracks":[{"name":"Life is a Highway","artist":"Tom Cochrane"},{"name":"Born to Run","artist":"Bruce Springsteen"},{"name":"Africa","artist":"Toto"}],"visual_style":"cinematic"}},{"description":"Anime-style visuals for a J-pop playlist","input":{"tracks":[{"name":"Plastic Love","artist":"Mariya Takeuchi"},{"name":"Stay With Me","artist":"Miki Matsubara"},{"name":"Night Dancer","artist":"imase"}],"visual_style":"anime","aspect_ratio":"9:16","max_tracks":3}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"track_count":{"type":"number","description":"Number of tracks visualized"},"visual_style":{"type":"string"},"image_path":{"type":"string","description":"Local path for asset pipeline upload (first image)"},"tracks":{"type":"array","description":"Tracks that were visualized","items":{"type":"object","properties":{"name":{"type":"string"},"artist":{"type":"string"}}}}}},"contentType":"image","returns":"Gallery of aesthetic images, one per track, each capturing the unique mood of the song"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["visualize_track","visualize_playlist","list_models"],"icon":"/icons/playlist-art-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release — visualize single tracks and full playlists in 5 visual styles"]},{"version":"0.02","date":"2026-04-14","changes":["Accept style references from your file library"]}],"premadePrompt":"Create playlist art for these songs: [track name] by [artist], [track name] by [artist]. Use a [cinematic/anime/abstract/painterly/vintage] style.","usesStyleReferences":true,"brain":{"instructions":"When brain knowledge is available:\n  - Match genre-appropriate aesthetics and music culture references\n  - Apply the creator's visual style and colour preferences\n  - Reference brand identity when creating for branded playlists","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"ai-art-studio","displayName":"AI Art Studio","subtitle":"Sketch rendering, food photography, perspective shifts, and surreal imagery","about":"**AI Art Studio** is a set of advanced image tools for creators and designers who want more control over their visual output. It covers six distinct techniques: turning rough sketches into polished renders, generating professional food photography, shifting image perspective, creating surreal impossible-physics imagery, fixing the plastic skin texture common in AI portraits, and reverse-engineering a reference image to recreate its style.\n\nEach skill targets a specific creative problem that generic image generators handle poorly. Designers use sketch rendering to visualize spaces and products. Food photographers use the food photo skill to generate studio-quality shots from text or reference images. The skin enhancement skill fixes one of the most common complaints about AI-generated portraits. Together they form a toolkit for serious visual work.\n\n### What you can do\n- Convert hand-drawn sketches into photorealistic, 3D, watercolor, or oil-painting renders\n- Generate professional food photography in restaurant, rustic, minimal, or overhead styles\n- Shift the viewpoint of any image — eye-level, aerial, worm's-eye, or three-quarter\n- Create surreal impossible-physics imagery from a concept description\n- Fix plastic AI skin texture with natural pore definition, smoothness, or editorial finish\n- Reverse-engineer a reference image and generate a fresh recreation in the same style\n\n### Who it's for\nArchitects, interior designers, and product designers visualizing concepts. Food brands and recipe creators needing high-quality photography. AI artists and creative directors who want tighter control over outputs and style.\n\n### How to use it\n1. Use **sketch_to_render** with a sketch URL and choose your render style — add material hints like \"concrete walls, oak floor\" for more accurate results\n2. Use **food_photo** with either a text description or an existing photo to generate professional shots\n3. Use **skin_enhance** on any AI portrait to replace plastic texture with natural-looking skin\n4. Use **reverse_engineer** with a reference image URL to generate a fresh image in the same aesthetic\n\n### Getting started\nEach skill works independently — pick the one that matches your task and pass it an image URL or description.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"sketch_to_render","displayName":"Sketch to Render","description":"Convert a hand-drawn sketch into a fully rendered image. Choose from photorealistic, 3D render, watercolor, or oil-painting styles.","inputSchema":{"type":"object","properties":{"sketch_url":{"type":"string","description":"URL of the hand-drawn sketch to render. The tool server can fetch any public URL — pass it directly."},"render_style":{"type":"string","enum":["photorealistic","3d-render","watercolor","oil-painting"],"default":"photorealistic","description":"Rendering style to apply to the sketch."},"material_hints":{"type":"string","description":"Optional material hints to guide the render, e.g. \"concrete walls, oak floor, exposed brick\"."}},"required":["sketch_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Render a sketch in photorealistic style","input":{"sketch_url":"https://toolrouter.com/demo-interior-japandi.webp","render_style":"photorealistic"}},{"description":"Render an architectural sketch with material hints","input":{"sketch_url":"https://toolrouter.com/demo-interior-japandi.webp","render_style":"3d-render","material_hints":"concrete walls, glass facade, steel beams"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the rendered image"},"render_style":{"type":"string","description":"Render style applied"},"material_hints":{"type":"string","description":"Material hints used"}}},"contentType":"image","returns":"Fully rendered image generated from the sketch in the chosen style"},{"name":"perspective_shift","displayName":"Perspective Shift","description":"Recompose any image from a different perspective — eye-level, aerial, worm's-eye, or three-quarter view.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"target_perspective":{"type":"string","enum":["eye-level","aerial","worm","three-quarter"],"default":"three-quarter","description":"Target perspective viewpoint to apply."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Shift a product photo to aerial overhead view","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","target_perspective":"aerial"}},{"description":"Apply three-quarter elevated perspective to a building","input":{"image_url":"https://toolrouter.com/demo-interior-industrial.webp","target_perspective":"three-quarter"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the perspective-shifted image"},"target_perspective":{"type":"string","description":"Perspective viewpoint applied"}}},"contentType":"image","returns":"Image recomposed from the specified perspective viewpoint"},{"name":"food_photo","displayName":"Food Photo","description":"Generate professional food photography from a text description or transform an existing food photo. Choose setting and lighting style.","inputSchema":{"type":"object","properties":{"food_desc":{"type":"string","description":"Description of the food to photograph, e.g. \"a bowl of ramen with soft-boiled egg and nori\". Required if no image_url."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"setting":{"type":"string","enum":["restaurant","rustic","minimal","overhead"],"default":"overhead","description":"Photography setting and styling."},"lighting":{"type":"string","enum":["natural","moody","bright"],"default":"natural","description":"Lighting mood for the food photo."}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Generate a professional overhead food photo from description","input":{"food_desc":"a bowl of spicy ramen with soft-boiled egg, nori, and green onions","setting":"overhead","lighting":"natural"}},{"description":"Transform a food photo into moody restaurant-style shot","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","setting":"restaurant","lighting":"moody"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the generated food photo"},"setting":{"type":"string","description":"Setting applied"},"lighting":{"type":"string","description":"Lighting applied"}}},"contentType":"image","returns":"Professional food photograph in the chosen setting and lighting"},{"name":"paradox_frames","displayName":"Paradox Frames","description":"Generate surreal images with impossible physics — gravity defiance, impossible scale, time collisions, or reality breaks.","inputSchema":{"type":"object","properties":{"concept":{"type":"string","description":"The surreal concept or subject to visualize, e.g. \"a library inside a raindrop\" or \"elephants the size of ants in a city\"."},"setting":{"type":"string","description":"Optional setting or environment for the scene, e.g. \"desert\", \"office building\", \"deep ocean\"."},"collision_type":{"type":"string","enum":["gravity","scale","time","reality"],"default":"scale","description":"Type of impossible physics to apply."},"style":{"type":"string","enum":["photorealistic","painterly","digital"],"default":"photorealistic","description":"Visual rendering style."}},"required":["concept"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Scale paradox: skyscrapers inside a coffee cup","input":{"concept":"skyscrapers growing inside a coffee cup on a cafe table","collision_type":"scale","style":"photorealistic"}},{"description":"Gravity paradox: a waterfall flowing upward into the sky","input":{"concept":"a massive waterfall flowing upward into storm clouds","collision_type":"gravity","style":"painterly","setting":"mountain valley"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the generated paradox image"},"concept":{"type":"string","description":"The concept used"},"collision_type":{"type":"string","description":"Physics paradox type applied"},"style":{"type":"string","description":"Visual style used"}}},"contentType":"image","returns":"Surreal paradox image with impossible physics rendered in the chosen style"},{"name":"skin_enhance","displayName":"Skin Enhance","description":"Fix plastic, over-smoothed AI skin in portrait photos. Restore natural pore texture, realistic imperfections, and genuine skin character.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"skin_goal":{"type":"string","enum":["pore-definition","natural-smoothness","glass-skin","aged","editorial"],"default":"natural-smoothness","description":"Target skin aesthetic."},"intensity":{"type":"string","enum":["low","medium","high"],"default":"medium","description":"Strength of the enhancement."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Restore natural skin texture to an AI-generated portrait","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","skin_goal":"natural-smoothness","intensity":"medium"}},{"description":"Apply high-definition pore detail to a fashion photo","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","skin_goal":"pore-definition","intensity":"high"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the enhanced portrait"},"skin_goal":{"type":"string","description":"Skin aesthetic applied"},"intensity":{"type":"string","description":"Enhancement intensity used"}}},"contentType":"image","returns":"Portrait with natural skin texture restored in the chosen aesthetic"},{"name":"reverse_engineer","displayName":"Reverse Engineer","description":"Analyse a reference image and generate a fresh recreation with the same composition, lighting, color palette, and style.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"context_notes":{"type":"string","description":"Optional notes to guide the recreation, e.g. \"this is a product shot — use a different product\" or \"change the season to winter\"."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Recreate the style and composition of a reference photo","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp"}},{"description":"Recreate a reference shot with a different season","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","context_notes":"Change the season to winter with snow"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Path to the recreated image"},"reference_url":{"type":"string","description":"URL of the original reference image"},"context_notes":{"type":"string","description":"Context notes used"}}},"contentType":"image","returns":"Fresh image recreation with the same style, composition, and mood as the reference"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["sketch_to_render","food_photo","paradox_frames","perspective_shift","skin_enhance","reverse_engineer","list_models"],"icon":"/icons/ai-art-studio.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release with sketch rendering, food photography, perspective shift, surreal paradox frames, skin enhancement, and image reverse engineering"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, scenes, and style references from your file library"]}],"premadePrompt":"Turn this sketch into a photorealistic render: [sketch image URL]. The space uses concrete walls and oak flooring.","usesPersonas":true,"usesScenes":true,"usesStyleReferences":true,"brain":{"instructions":"When brain knowledge is available:\n  - Apply the creator's artistic direction for specialised techniques (sketches, surreal, perspective)\n  - Use established colour palettes and mood references\n  - Match brand visual identity when creating commercial art","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"brand-kit-maker","displayName":"Brand Kit Maker","subtitle":"Logo concepts, mood boards, mockups, and patterns","about":"**Brand Kit Maker** generates logos, mood boards, brand patterns, and product mockups for any business. From a name and description, it builds a complete visual identity kit — four logo concept variations, an aesthetic mood board, repeating surface patterns, and real-world mockups on cards, apparel, and storefronts.\n\nStarting a brand from scratch normally means hiring a designer or spending hours in design tools. This gives you a strong visual foundation in minutes — concepts you can react to and refine, rather than starting from a blank canvas. Outputs are shareable as permanent image links with preview thumbnails.\n\n### What you can do\n- Generate 4 logo concept variations in minimal, bold, playful, elegant, or geometric style\n- Create a brand mood board to visualize the aesthetic and emotional tone\n- Generate repeating brand patterns for packaging, backgrounds, and surfaces\n- Apply your logo to real-world mockups: business card, t-shirt, storefront, coffee cup, billboard, or notebook\n\n### Who it's for\nFounders and entrepreneurs building a visual identity for a new business. Freelancers and agencies creating brand concepts to show clients. Designers using AI-generated concepts as a starting point before refinement.\n\n### How to use it\n1. Call **generate_logo** with the business name, description, and optional industry — it returns 4 concept variations\n2. Run **brand_moodboard** with the same business context to generate a visual mood board\n3. Use **brand_pattern** to create repeating surface patterns for packaging and backgrounds\n4. Use **logo_mockup** with one of your logo images to see it on a real-world surface\n\n### Getting started\nStart with **generate_logo** — just pass a business name and a short description of what the business does.","version":"0.01","categories":["media","marketing","ai"],"currency":"USD","skills":[{"name":"generate_logo","displayName":"Generate Logo","description":"Generate 4 logo concept variations from a business name and description. Returns a gallery of minimal, wordmark, icon-based, and combination mark designs.","inputSchema":{"type":"object","properties":{"business_name":{"type":"string","description":"Name of the business or brand to create a logo for."},"business_desc":{"type":"string","description":"Short description of what the business does and its values."},"industry":{"type":"string","description":"Industry or sector (e.g. \"tech startup\", \"bakery\", \"law firm\"). Optional — improves relevance."},"style":{"type":"string","enum":["minimal","bold","playful","elegant","geometric"],"default":"minimal","description":"Visual style for all 4 logo concepts. Defaults to minimal."},"color_scheme":{"type":"string","description":"Desired color palette (e.g. \"blue and white\", \"earth tones\", \"black and gold\"). Optional."}},"required":["business_name","business_desc"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Generate 4 minimal logo concepts for a tech startup","input":{"business_name":"Nexus Labs","business_desc":"AI-powered data analytics platform for enterprise teams","industry":"tech startup","style":"minimal","color_scheme":"deep blue and white"}},{"description":"Generate bold logos for a fitness brand","input":{"business_name":"IronEdge","business_desc":"Premium gym equipment and personal training","style":"bold"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format: gallery"},"format_data":{"type":"object","description":"Gallery data with images array containing 4 logo concept URLs and titles"},"business_name":{"type":"string","description":"Business name used for generation"},"style":{"type":"string","description":"Style applied to all concepts"},"concepts":{"type":"number","description":"Number of logo concepts generated"}}},"returns":"Gallery of 4 logo concept images — flat design, wordmark, icon-based, and combination mark variations"},{"name":"brand_moodboard","displayName":"Brand Mood Board","description":"Generate a visual mood board capturing a brand's aesthetic, color palette, and emotional tone. Returns a single collage image with color swatches, textures, and design elements.","inputSchema":{"type":"object","properties":{"business_name":{"type":"string","description":"Name of the business or brand."},"brand_desc":{"type":"string","description":"Description of the brand identity, values, and target audience."},"mood":{"type":"string","enum":["professional","playful","luxurious","energetic","calm","bold"],"default":"professional","description":"Emotional tone and aesthetic direction for the mood board. Defaults to professional."}},"required":["business_name","brand_desc"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Mood board for a luxury skincare brand","input":{"business_name":"Lumière Botanicals","brand_desc":"Organic luxury skincare targeting affluent women aged 30-50 who value natural ingredients and premium packaging","mood":"luxurious"}},{"description":"Mood board for a kids education app","input":{"business_name":"BrightMind","brand_desc":"Interactive learning app for children aged 4-10 with gamified lessons in reading and math","mood":"playful"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format: gallery"},"format_data":{"type":"object","description":"Gallery with a single mood board image"},"business_name":{"type":"string","description":"Business name used"},"mood":{"type":"string","description":"Mood/aesthetic applied"},"image_url":{"type":"string","description":"URL of the generated mood board"}}},"returns":"A visual mood board collage image showing brand colors, textures, typography specimens, and aesthetic direction"},{"name":"logo_mockup","displayName":"Logo Mockup","description":"Apply a logo to a real-world surface mockup. Supports business card, t-shirt, storefront, coffee cup, billboard, and notebook.","inputSchema":{"type":"object","properties":{"logo_url":{"type":"string","description":"Logo image as a ToolRouter file ID or hosted HTTP(S) URL to apply to the mockup."},"mockup_type":{"type":"string","enum":["business-card","t-shirt","storefront","coffee-cup","billboard","notebook"],"default":"business-card","description":"Surface to apply the logo to. Defaults to business-card."},"brand_color":{"type":"string","description":"Brand accent color for the mockup background or accents (e.g. \"navy blue\", \"#1a2b3c\"). Optional."}},"required":["logo_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Apply logo to a business card","input":{"logo_url":"https://placehold.co/400x400.png","mockup_type":"business-card","brand_color":"navy blue"}},{"description":"Apply logo to a storefront sign","input":{"logo_url":"https://placehold.co/400x400.png","mockup_type":"storefront"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format: gallery"},"format_data":{"type":"object","description":"Gallery with a single mockup image"},"mockup_type":{"type":"string","description":"Mockup surface used"},"image_url":{"type":"string","description":"URL of the generated mockup"}}},"returns":"A photorealistic mockup image showing the logo applied to the selected real-world surface"},{"name":"brand_pattern","displayName":"Brand Pattern","description":"Generate a seamless repeating brand pattern for packaging, backgrounds, and brand materials. Supports geometric, organic, minimal, ornate, and playful styles.","inputSchema":{"type":"object","properties":{"business_name":{"type":"string","description":"Name of the business or brand."},"pattern_style":{"type":"string","enum":["geometric","organic","minimal","ornate","playful"],"default":"geometric","description":"Visual style of the repeating pattern. Defaults to geometric."},"primary_color":{"type":"string","description":"Primary color for the pattern (e.g. \"forest green\", \"#2d5a27\"). Optional."},"secondary_color":{"type":"string","description":"Secondary/accent color for the pattern (e.g. \"cream\", \"#f5f0e8\"). Optional."}},"required":["business_name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Geometric brand pattern for a tech company","input":{"business_name":"Nexus Labs","pattern_style":"geometric","primary_color":"deep blue","secondary_color":"white"}},{"description":"Organic pattern for a natural foods brand","input":{"business_name":"Green Root Co.","pattern_style":"organic","primary_color":"forest green","secondary_color":"cream"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format: gallery"},"format_data":{"type":"object","description":"Gallery with a single pattern image"},"business_name":{"type":"string","description":"Business name used"},"pattern_style":{"type":"string","description":"Pattern style applied"},"image_url":{"type":"string","description":"URL of the generated pattern"}}},"returns":"A seamless repeating brand pattern image suitable for packaging, backgrounds, and brand collateral"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["generate_logo","generate_logo → brand_moodboard → brand_pattern → logo_mockup","list_models"],"icon":"/icons/brand-kit-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]}],"premadePrompt":"Use Brand Kit Maker to create a complete brand identity for [your business name]. The business is [describe what the business does]. Start with 4 logo concepts, then create a mood board, a brand pattern, and show the logo on a business card mockup.","brain":{"instructions":"When brain knowledge is available:\n  - Reference existing brand assets, colours, and typography\n  - Maintain consistency with established brand identity\n  - Apply brand values and positioning in design direction","produces":["brand_insights"],"followEdges":true},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"game-art-generator","displayName":"Game Art Generator","subtitle":"Environments, icon sheets, and isometric art for games","about":"**Game Art Generator** creates professional game-ready art assets from text descriptions. Environment concept art, icon sheets, isometric dioramas, and miniature cityscapes — generated in seconds without a concept artist or a 3D modeling pipeline.\n\nIndie developers, game jam participants, and creative directors use it to rapidly prototype visual direction, fill asset gaps, or produce reference art for their teams. You describe what you want; the tool produces images you can use directly or hand off to an artist as a brief.\n\n### What you can do\n- **game_environment** — generate environment concept art in photorealistic, stylized, pixel, or painterly style with multiple lighting conditions (day, night, rain, fog, snow) returned as a gallery\n- **icon_sheet** — produce a 4x3 grid of 12 consistent inventory icons across fantasy, sci-fi, horror, cute, or realistic styles\n- **isometric_diorama** — render floating-tile isometric scenes in clay, pixel, realistic, or cartoon style\n- **miniature_city** — generate bird's-eye miniature cityscapes in tilt-shift, clay diorama, pixel, or watercolor style\n\n### Who it's for\nIndie game developers who need concept art fast, game jam teams building without a dedicated artist, and creative directors who want quick visual references to communicate style with their team.\n\n### How to use it\n1. Use **game_environment** with a description of your setting and an art style — add multiple conditions for a lighting comparison gallery\n2. Use **icon_sheet** with item categories to generate a consistent set of 12 inventory icons in one shot\n3. Use **isometric_diorama** or **miniature_city** for scene-level art from a single text prompt\n\n### Getting started\nNo configuration needed — all skills work immediately with a text description.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"game_environment","displayName":"Game Environment","description":"Generate environment concept art from a text description in multiple lighting conditions (day, night, rain, fog, snow). Returns a gallery when multiple conditions are requested.","inputSchema":{"type":"object","properties":{"environment_desc":{"type":"string","description":"Description of the environment, e.g. \"ancient elven forest with towering oak trees and glowing mushrooms\"."},"art_style":{"type":"string","enum":["photorealistic","stylized","pixel","painterly"],"default":"photorealistic","description":"Visual art style to apply."},"conditions":{"type":"array","items":{"type":"string"},"default":["day"],"description":"Lighting/weather conditions: day, night, rain, fog, snow. Each generates one image. Multiple return a gallery."},"perspective":{"type":"string","description":"Optional camera perspective, e.g. \"wide angle\", \"first person\", \"top-down\"."}},"required":["environment_desc"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Generate a volcano dungeon in painterly style for day and night","input":{"environment_desc":"volcanic dungeon with lava rivers and stone bridges","art_style":"painterly","conditions":["day","night"]}},{"description":"Rainy cyberpunk city street","input":{"environment_desc":"neon-lit cyberpunk city street with holographic billboards","art_style":"stylized","conditions":["rain"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated environment images (one per condition)"},"format":{"type":"string","description":"Output format — \"gallery\" for multiple conditions"},"format_data":{"type":"object","description":"Gallery data with image URLs and condition titles"}}},"contentType":"image","returns":"Environment concept art image(s). Single condition returns one image; multiple conditions return a gallery."},{"name":"icon_sheet","displayName":"Icon Sheet","description":"Generate a 4x3 grid of 12 consistent game-ready inventory icons from item categories. Supports fantasy, sci-fi, horror, cute, and realistic styles.","inputSchema":{"type":"object","properties":{"game_style":{"type":"string","enum":["fantasy","sci-fi","horror","cute","realistic"],"default":"fantasy","description":"Visual style for all icons in the sheet."},"item_categories":{"type":"array","items":{"type":"string"},"default":["weapons","potions","armor"],"description":"Item categories to include, e.g. [\"weapons\", \"potions\", \"armor\", \"food\", \"tools\"]."},"background":{"type":"string","enum":["transparent","dark","light"],"default":"dark","description":"Icon background style."}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Fantasy RPG icon sheet with weapons and potions","input":{"game_style":"fantasy","item_categories":["weapons","potions","scrolls"],"background":"dark"}},{"description":"Sci-fi icon sheet with tech items","input":{"game_style":"sci-fi","item_categories":["energy cells","cybernetic implants","gadgets"],"background":"dark"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated icon sheet image"},"game_style":{"type":"string","description":"Style applied"},"item_categories":{"type":"array","description":"Categories included"}}},"contentType":"image","returns":"A 4x3 grid image with 12 consistent game inventory icons."},{"name":"isometric_diorama","displayName":"Isometric Diorama","description":"Generate an isometric diorama illustration from a scene description. Choose from clay, pixel, realistic, or cartoon art styles.","inputSchema":{"type":"object","properties":{"scene_desc":{"type":"string","description":"Scene to render isometrically, e.g. \"a medieval blacksmith workshop with a glowing forge and scattered tools\"."},"art_style":{"type":"string","enum":["clay","pixel","realistic","cartoon"],"default":"clay","description":"Art style for the diorama."}},"required":["scene_desc"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Clay-style medieval village diorama","input":{"scene_desc":"cozy medieval village with a market square, fountain, and timber-framed houses","art_style":"clay"}},{"description":"Pixel-art space station diorama","input":{"scene_desc":"sci-fi space station with solar panels, airlocks, and a docking bay","art_style":"pixel"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated diorama image"},"scene_desc":{"type":"string","description":"Scene description used"},"art_style":{"type":"string","description":"Art style applied"}}},"contentType":"image","returns":"Isometric diorama illustration on a floating tile base."},{"name":"miniature_city","displayName":"Miniature City","description":"Generate miniature cityscape art from a description. Styles include tilt-shift photography, clay diorama, pixel art, and watercolor.","inputSchema":{"type":"object","properties":{"city_desc":{"type":"string","description":"City to render, e.g. \"a futuristic Tokyo with towering skyscrapers and elevated rail lines\"."},"style":{"type":"string","enum":["tilt-shift","clay-diorama","pixel","watercolor"],"default":"tilt-shift","description":"Visual style of the miniature cityscape."},"time_of_day":{"type":"string","enum":["day","sunset","night"],"default":"day","description":"Time of day lighting."}},"required":["city_desc"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Tilt-shift sunset view of a European city","input":{"city_desc":"historic European city with cathedrals, cobblestone plazas, and canal bridges","style":"tilt-shift","time_of_day":"sunset"}},{"description":"Clay diorama of a fantasy port city at night","input":{"city_desc":"fantasy port city with harbor, lighthouse, and market stalls","style":"clay-diorama","time_of_day":"night"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated cityscape image"},"city_desc":{"type":"string","description":"City description used"},"style":{"type":"string","description":"Style applied"},"time_of_day":{"type":"string","description":"Time of day used"}}},"contentType":"image","returns":"Miniature cityscape art from a bird's-eye view."},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["game_environment","icon_sheet","isometric_diorama","miniature_city","list_models"],"icon":"/icons/game-art-generator.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept scenes and style references from your file library"]}],"premadePrompt":"Generate a game environment for a [setting, e.g. dark forest dungeon] in [art style, e.g. painterly] style with both day and night lighting conditions.","usesScenes":true,"usesStyleReferences":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"short-film-maker","displayName":"Short Film Maker","subtitle":"Turn text, images, or conversations into cinematic videos","about":"**Short Film Maker** turns text, images, and conversations into cinematic short videos. Describe a scene, drop in two keyframe images, or paste a conversation — and get back a rendered video with real cinematography, lighting, and motion.\n\nIt's not a slideshow generator. It produces actual cinematic footage: POV shots, dramatic reveals, renovation timelapses, animated album art, movie title sequences, and product explosion videos. Each skill is built for a specific type of film moment.\n\n### What you can do\n- Turn a conversation or script into a cinematic scene with a genre of your choice\n- Generate a first-person POV video from any description\n- Create a dramatic reveal between two images\n- Animate a before/after renovation with a timelapse effect\n- Build a seamlessly looping ambient video\n- Animate an album cover into motion\n- Generate a cinematic title sequence with text and style\n- Interpolate two keyframe images into a smooth video clip\n- Create a product explosion or showcase video\n- Generate movie poster images and next-scene frame sequences\n\n### Who it's for\nContent creators and filmmakers who want cinematic output without a production team. Musicians and artists who need animated visuals. Brands building short-form video content. Anyone who wants to go from idea to video in under two minutes.\n\n### How to use it\n1. For a scripted scene, use **messages_to_scene** — paste a conversation or script and pick a genre\n2. For a single visual, use **pov_scene** with a description of what the camera sees\n3. For two images, use **dramatic_reveal** or **frames_to_video** to interpolate between them\n4. For a product, use **product_explosion** with a product photo\n5. All video skills are async — they return a job ID, poll with get_job_result until complete (~60–90s)\n\n### Getting started\nNo setup required — pick any skill and describe what you want to create.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"messages_to_scene","displayName":"Messages to Scene","description":"Paste a text conversation and choose a genre — get back a cinematic short film scene. Async ~60–90s.","inputSchema":{"type":"object","properties":{"conversation_text":{"type":"string","description":"The conversation or text exchange to adapt into a cinematic scene."},"genre":{"type":"string","enum":["romance","thriller","horror","comedy","drama"],"description":"Film genre for the scene. Default drama."},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"],"description":"Output aspect ratio. Default 16:9."}},"required":["conversation_text"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Romance scene from a text conversation","input":{"conversation_text":"Sarah: I've been thinking about you all day.\nJames: Same. I can't stop thinking about last night.","genre":"romance","aspect_ratio":"16:9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent video URL"},"video_page":{"type":"string","description":"Shareable download page"}}},"returns":"Cinematic video adapted from the conversation. Returns video_url and video_page."},{"name":"pov_scene","displayName":"POV Scene","description":"Text description → first-person POV cinematic video. Immersive eye-level perspective. Async ~60–90s.","inputSchema":{"type":"object","properties":{"scene_desc":{"type":"string","description":"What the viewer experiences, e.g. \"walking through a rain-soaked Tokyo street at night\"."},"setting":{"type":"string","description":"Additional setting context, e.g. \"1990s, neon-lit, crowded\"."},"duration":{"type":"number","description":"Video duration in seconds. Default 5."},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"],"description":"Output aspect ratio. Default 16:9."}},"required":["scene_desc"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Walking through a forest at dawn","input":{"scene_desc":"Walking through a misty ancient forest at dawn, sunlight breaking through the canopy","setting":"old growth redwood forest, ethereal atmosphere","duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent video URL"},"video_page":{"type":"string","description":"Shareable download page"}}},"returns":"First-person POV cinematic video. Returns video_url and video_page."},{"name":"dramatic_reveal","displayName":"Dramatic Reveal","description":"Two images → cinematic before-and-after reveal video with a chosen transition style. Async ~60–90s.","inputSchema":{"type":"object","properties":{"before_url":{"type":"string","description":"URL of the \"before\" image."},"after_url":{"type":"string","description":"URL of the \"after\" image."},"reveal_style":{"type":"string","enum":["swipe","dissolve","light-sweep","explosion"],"description":"Transition style for the reveal. Default dissolve."},"duration":{"type":"number","description":"Video duration in seconds. Default 5."}},"required":["before_url","after_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Light-sweep reveal between two room states","input":{"before_url":"https://example.com/room-before.jpg","after_url":"https://example.com/room-after.jpg","reveal_style":"light-sweep","duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent video URL"},"video_page":{"type":"string","description":"Shareable download page"},"reveal_style":{"type":"string","description":"Transition style used"}}},"returns":"Before-to-after reveal video. Returns video_url, video_page, and reveal_style used."},{"name":"renovation_timelapse","displayName":"Renovation Timelapse","description":"Property photo → animated renovation transformation timelapse video. Async ~60–90s.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"renovation_type":{"type":"string","enum":["kitchen","bathroom","living-room","exterior"],"description":"Type of renovation to simulate."},"finish_style":{"type":"string","description":"Optional finish style, e.g. \"modern minimalist\", \"Scandinavian\", \"industrial\"."},"duration":{"type":"number","description":"Video duration in seconds. Default 5."}},"required":["image_url","renovation_type"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Modern kitchen renovation timelapse","input":{"image_url":"https://example.com/kitchen.jpg","renovation_type":"kitchen","finish_style":"modern minimalist","duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent video URL"},"video_page":{"type":"string","description":"Shareable download page"},"renovation_type":{"type":"string","description":"Renovation type applied"}}},"returns":"Renovation timelapse video. Returns video_url, video_page, and renovation_type."},{"name":"seamless_loop","displayName":"Seamless Loop","description":"Image or text description → seamlessly looping ambient video. Perfect for backgrounds. Async ~60–90s.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"scene_desc":{"type":"string","description":"Text description of the scene to generate as a loop (optional if image_url provided)."},"loop_duration":{"type":"number","description":"Loop duration in seconds. Default 5."}},"required":[]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Looping ocean waves from an image","input":{"image_url":"https://example.com/ocean.jpg","loop_duration":5}},{"description":"Looping campfire from description","input":{"scene_desc":"A cosy crackling campfire at night with embers floating upward","loop_duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent looping video URL"},"video_page":{"type":"string","description":"Shareable download page"}}},"returns":"Seamlessly looping video. Returns video_url and video_page."},{"name":"animated_album_cover","displayName":"Animated Album Cover","description":"Album art image + music genre → animated looping video for music platforms. Async ~60–90s.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"music_genre":{"type":"string","description":"Music genre, e.g. \"lo-fi hip hop\", \"electronic\", \"classical\", \"jazz\"."},"animation_style":{"type":"string","enum":["particle","wave","pulse","cinematic"],"description":"Animation style. Default cinematic."},"duration":{"type":"number","description":"Video duration in seconds. Default 5."}},"required":["image_url","music_genre"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Cinematic lo-fi hip hop album cover animation","input":{"image_url":"https://example.com/album-art.jpg","music_genre":"lo-fi hip hop","animation_style":"cinematic","duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent animated video URL"},"video_page":{"type":"string","description":"Shareable download page"},"animation_style":{"type":"string","description":"Animation style applied"}}},"returns":"Animated album cover video. Returns video_url, video_page, and animation_style."},{"name":"title_sequence","displayName":"Title Sequence","description":"Title text + visual style → animated cinematic title card video. Async ~60–90s.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"The main title text to animate."},"subtitle":{"type":"string","description":"Optional subtitle or tagline text."},"style":{"type":"string","enum":["sci-fi","horror","drama","comedy","action"],"description":"Visual style for the title sequence. Default drama."},"duration":{"type":"number","description":"Video duration in seconds. Default 5."}},"required":["title"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Sci-fi title sequence","input":{"title":"THE LAST SIGNAL","subtitle":"Beyond the edge of everything","style":"sci-fi","duration":5}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent title sequence video URL"},"video_page":{"type":"string","description":"Shareable download page"},"style":{"type":"string","description":"Visual style applied"}}},"returns":"Animated title sequence video. Returns video_url, video_page, and style used."},{"name":"frames_to_video","displayName":"Frames to Video","description":"Two keyframe images → smooth interpolated video that animates between them. Async ~60–90s.","inputSchema":{"type":"object","properties":{"start_url":{"type":"string","description":"URL of the starting keyframe image."},"end_url":{"type":"string","description":"URL of the ending keyframe image."},"duration":{"type":"number","description":"Video duration in seconds. Default 5."},"motion_style":{"type":"string","enum":["smooth","dramatic","natural"],"description":"Motion interpolation style. Default smooth."}},"required":["start_url","end_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Smooth interpolation between two portrait poses","input":{"start_url":"https://example.com/pose-start.jpg","end_url":"https://example.com/pose-end.jpg","duration":5,"motion_style":"smooth"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent interpolated video URL"},"video_page":{"type":"string","description":"Shareable download page"},"motion_style":{"type":"string","description":"Motion style applied"}}},"returns":"Interpolated video between the two keyframes. Returns video_url, video_page, and motion_style."},{"name":"product_explosion","displayName":"Product Explosion","description":"Product photo → dramatic reveal video with a cinematic effect. Async ~60–90s.","inputSchema":{"type":"object","properties":{"product_url":{"type":"string","description":"URL of the product photo."},"effect_style":{"type":"string","enum":["explosion","shatter","reveal","glow"],"description":"Dramatic effect style. Default reveal."},"background_color":{"type":"string","description":"Optional background colour description, e.g. \"matte black\", \"pure white\"."}},"required":["product_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Glow reveal for a luxury watch","input":{"product_url":"https://example.com/watch.jpg","effect_style":"glow","background_color":"matte black"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent product video URL"},"video_page":{"type":"string","description":"Shareable download page"},"effect_style":{"type":"string","description":"Effect style applied"}}},"returns":"Dramatic product reveal video. Returns video_url, video_page, and effect_style."},{"name":"movie_poster","displayName":"Movie Poster","description":"Title + tone → 4 cinematic poster compositions returned as a gallery. Image generation.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Film title for the poster."},"tagline":{"type":"string","description":"Optional tagline text, e.g. \"In space no one can hear you scream\"."},"film_tone":{"type":"string","enum":["cinematic-drama","horror-thriller","action","indie","sci-fi","comedy"],"description":"Visual tone for the poster. Default cinematic-drama."},"key_art_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["title"]},"annotations":{},"examples":[{"description":"Sci-fi movie poster gallery","input":{"title":"ECHOES OF TITAN","tagline":"The silence between stars hides the truth","film_tone":"sci-fi"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format (gallery)"},"format_data":{"type":"object","description":"Gallery image data"},"compositions":{"type":"array","description":"Composition names generated","items":{"type":"string"}}}},"returns":"Gallery of 4 cinematic movie poster compositions. Each with a different layout approach."},{"name":"next_scene","displayName":"Next Scene","description":"Scene image → sequence of extended frames with consistent characters. Returns a gallery.","inputSchema":{"type":"object","properties":{"scene_url":{"type":"string","description":"URL of the scene image to extend."},"sequence_type":{"type":"string","enum":["emotional-arc","action-sequence","time-passage"],"description":"Type of narrative sequence. Default emotional-arc."},"total_frames":{"type":"number","description":"Number of frames to generate (2–4). Default 3.","minimum":2,"maximum":4}},"required":["scene_url"]},"annotations":{},"examples":[{"description":"Emotional arc continuation of a dramatic scene","input":{"scene_url":"https://example.com/scene.jpg","sequence_type":"emotional-arc","total_frames":3}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format (gallery)"},"format_data":{"type":"object","description":"Gallery image data"},"sequence_type":{"type":"string","description":"Sequence type used"},"total_frames":{"type":"number","description":"Number of frames generated"}}},"returns":"Gallery of sequential scene frames with consistent characters and visual style."},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["messages_to_scene","pov_scene","dramatic_reveal","renovation_timelapse","seamless_loop","animated_album_cover","title_sequence","frames_to_video","product_explosion","movie_poster","next_scene","list_models"],"icon":"/icons/short-film-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release — 11 skills: messages to scene, POV scene, dramatic reveal, renovation timelapse, seamless loop, animated album cover, title sequence, frames to video, product explosion, movie poster, and next scene"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, scenes, products, outfits and style references from your file library"]}],"premadePrompt":"Create a cinematic short video of [describe the scene, subject, or paste a conversation]. Style: [genre or mood, e.g. drama / thriller / romance].","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["messages_to_scene","pov_scene","dramatic_reveal","renovation_timelapse","seamless_loop","animated_album_cover","title_sequence","frames_to_video","product_explosion","movie_poster","next_scene"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply the creator's visual style and cinematic preferences\n  - Match brand voice in scene descriptions and dialogue\n  - Use established colour palettes and mood references\n  - Reference products or brand elements when relevant","produces":["video_insights","creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"meme-generator","displayName":"Meme Generator","subtitle":"Create memes from templates, images, or AI ideas","about":"**Meme Generator** creates memes from classic templates like Drake, Distracted Boyfriend, and Doge — or generates entirely original ones from a topic description using AI. Add text to any image, or let AI pick the template, write the text, and generate the visual all at once.\n\nMemes are one of the most effective forms of social content, but creating them usually means searching for template images, opening an editor, and doing manual layout work. This tool handles everything from a single prompt — whether you have a specific format in mind or just a vibe you want to capture.\n\n### What you can do\n- **from_template** — generate a meme using a named classic template with your own top and bottom text\n- **from_image** — add meme-style text overlay to any image URL\n- **ai_meme** — describe a topic and let AI generate the image and text from scratch, with 8 style options and 4 format options\n\n### Who it's for\nSocial media managers who need fast, on-brand content. Community managers responding to moments in real time. Marketers who want to participate in meme culture without spending time on manual creation. Anyone who wants a laugh or needs to make a point with humor.\n\n### How to use it\n1. For a classic meme, use **from_template** with a template name (drake, distracted boyfriend, this is fine, doge, etc.) and your text\n2. To caption an existing image, use **from_image** with the image URL and your top/bottom text\n3. For fully AI-generated memes, use **ai_meme** with a topic description — choose a style (classic, corporate, gen-z, gaming, etc.) and format (standard, drake, expanding-brain, galaxy-brain)\n\n### Getting started\nThe fastest path is **ai_meme** with a topic — just describe the situation you want to make fun of and pick a style. For brand content, \"corporate\" style tends to land well on LinkedIn; \"gen-z\" works on Instagram and TikTok.","version":"0.01","categories":["media","ai","marketing"],"currency":"USD","skills":[{"name":"from_template","displayName":"From Template","description":"Generate a meme from a classic template with custom text. Supports drake, distracted boyfriend, this is fine, woman yelling at cat, doge, two buttons, and more.","inputSchema":{"type":"object","properties":{"template":{"type":"string","description":"Template name. Built-in: drake, distracted boyfriend, this is fine, woman yelling at cat, doge, two buttons. Other names accepted."},"top_text":{"type":"string","description":"Text to display at the top of the meme."},"bottom_text":{"type":"string","description":"Text to display at the bottom of the meme."},"custom_context":{"type":"string","description":"Extra context to help the AI generate a better-fitting image for the template."}},"required":["template"]},"annotations":{},"examples":[{"description":"Drake meme about tabs vs spaces","input":{"template":"drake","top_text":"Spaces","bottom_text":"Tabs"}},{"description":"This is fine meme about production bugs","input":{"template":"this is fine","top_text":"Me watching production go down at 5pm Friday"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated meme image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Meme image URL"},"width":{"type":"number"},"height":{"type":"number"},"content_type":{"type":"string"}}}},"template":{"type":"string","description":"Template name used"},"top_text":{"type":"string","description":"Top text applied"},"bottom_text":{"type":"string","description":"Bottom text applied"}}},"contentType":"image","returns":"Generated meme image URL and metadata"},{"name":"from_image","displayName":"From Image","description":"Add meme text to any image. Provide an image URL and top/bottom text or a caption to overlay in classic meme style.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Source image as a ToolRouter file ID or hosted HTTP(S) URL to turn into a meme."},"top_text":{"type":"string","description":"Text to display at the top of the image."},"bottom_text":{"type":"string","description":"Text to display at the bottom of the image."},"caption":{"type":"string","description":"Caption text to overlay on the image (alternative to top/bottom split)."}},"required":["image_url"]},"annotations":{},"examples":[{"description":"Add top and bottom text to an existing photo","input":{"image_url":"https://placehold.co/800x600.png","top_text":"When the code works on first try","bottom_text":"But you have no idea why"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Meme image(s) with text overlaid","items":{"type":"object","properties":{"url":{"type":"string","description":"Meme image URL"},"width":{"type":"number"},"height":{"type":"number"},"content_type":{"type":"string"}}}},"source_image":{"type":"string","description":"URL of the original source image"},"top_text":{"type":"string","description":"Top text applied"},"bottom_text":{"type":"string","description":"Bottom text applied"},"caption":{"type":"string","description":"Caption text applied"}}},"contentType":"image","returns":"Meme image URL with text overlay applied"},{"name":"ai_meme","displayName":"AI Meme","description":"Describe a meme idea and AI generates the perfect image and text. Choose from 8 styles and 4 formats for fully custom meme creation.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"What the meme is about. Be descriptive — e.g. \"programmers who never write tests\" or \"Mondays at the office\"."},"style":{"type":"string","enum":["classic","surreal","wholesome","dark-humor","corporate","gaming","boomer","gen-z"],"description":"Meme style. Default: classic.","default":"classic"},"format":{"type":"string","enum":["standard","drake","expanding-brain","galaxy-brain"],"description":"Meme format. Default: standard.","default":"standard"}},"required":["topic"]},"annotations":{},"examples":[{"description":"Classic meme about Monday mornings","input":{"topic":"Monday morning stand-ups when nobody has updates","style":"corporate","format":"standard"}},{"description":"Drake format meme about tech choices","input":{"topic":"using TypeScript vs JavaScript","style":"classic","format":"drake"}},{"description":"Gen-Z surreal meme","input":{"topic":"procrastinating on a deadline","style":"gen-z","format":"expanding-brain"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated meme image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Meme image URL"},"width":{"type":"number"},"height":{"type":"number"},"content_type":{"type":"string"}}}},"topic":{"type":"string","description":"The topic used"},"style":{"type":"string","description":"Style applied"},"format":{"type":"string","description":"Format applied"}}},"contentType":"image","returns":"AI-generated meme image URL with embedded text"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["from_template","from_image","ai_meme","list_models"],"icon":"/icons/meme-generator.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release — classic template memes, image captioning, and AI-generated memes"]}],"premadePrompt":"Make a meme about [topic or situation]. Use the [drake/distracted boyfriend/this is fine/doge] template with top text \"[top text]\" and bottom text \"[bottom text]\".","brain":{"instructions":"When brain knowledge is available:\n  - Match the brand's humour style and tone boundaries\n  - Reference products or brand elements when relevant\n  - Tailor humour for the target audience","produces":["content_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"tattoo-designer","displayName":"Tattoo Designer","subtitle":"Custom tattoo designs, flash sheets, and placement previews","about":"**Tattoo Designer** generates custom tattoo artwork from any concept in 10 styles, creates coordinated flash sheets, and lets you preview exactly how a tattoo will look on a specific body area before you commit to anything permanent.\n\nDescribe what you want and pick a style — fine-line, traditional, blackwork, watercolor, japanese, geometric, tribal, realism, neo-traditional, or minimalist — and the tool generates professional-quality artwork ready to share with a tattoo artist. Then use placement preview to see how the design looks composited onto a photo of the actual body area you have in mind.\n\n### What you can do\n- **design_tattoo** — generate custom tattoo artwork from a text description in any of 10 styles\n- **flash_sheet** — create a coordinated flash sheet with 6 mini designs around a single theme\n- **placement_preview** — composite a tattoo design onto a body photo to preview how it looks on skin\n\n### Who it's for\nAnyone thinking about getting a tattoo who wants to visualise the design before booking a session. Also useful for tattoo artists creating client concepts, and studios that want to offer an AI design consultation service.\n\n### How to use it\n1. Call **design_tattoo** with your concept description — be as specific as you like about subject, style, size, and colour mode\n2. Once you have a design you like, call **placement_preview** with the tattoo image URL and a photo of your skin area to see how it will look\n3. For a themed collection of smaller designs, use **flash_sheet** with a unifying theme and style — it generates 6 coordinated designs in a grid\n\n### Getting started\nNo setup needed — describe your concept and pick a style to generate your first design instantly.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"design_tattoo","displayName":"Design Tattoo","description":"Generate a custom tattoo design from a text description. Choose from 10 styles: traditional, neo-traditional, blackwork, fine-line, watercolor, geometric, tribal, japanese, realism, or minimalist.","inputSchema":{"type":"object","properties":{"concept":{"type":"string","description":"What the tattoo should depict, e.g. \"a wolf howling at the moon\" or \"geometric lotus flower\"."},"style":{"type":"string","enum":["traditional","neo-traditional","blackwork","fine-line","watercolor","geometric","tribal","japanese","realism","minimalist"],"default":"fine-line","description":"Tattoo art style. Default: fine-line."},"size_hint":{"type":"string","enum":["small","medium","large","sleeve-piece"],"default":"medium","description":"Intended size of the tattoo. Guides detail level and complexity. Default: medium."},"color_mode":{"type":"string","enum":["black-and-white","color","grayscale"],"default":"black-and-white","description":"Color treatment. Default: black-and-white."}},"required":["concept"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Fine-line botanical tattoo in black and white","input":{"concept":"delicate botanical fern frond with small flowers","style":"fine-line","size_hint":"small","color_mode":"black-and-white"}},{"description":"Traditional American eagle chest piece in color","input":{"concept":"bald eagle with spread wings holding a banner","style":"traditional","size_hint":"large","color_mode":"color"}},{"description":"Japanese koi fish sleeve piece","input":{"concept":"koi fish swimming through waves with cherry blossoms","style":"japanese","size_hint":"sleeve-piece","color_mode":"color"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated tattoo design image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}}}},"concept":{"type":"string","description":"Concept used for design"},"style":{"type":"string","description":"Style applied"},"color_mode":{"type":"string","description":"Color mode used"},"size_hint":{"type":"string","description":"Size hint used"},"image_path":{"type":"string","description":"Asset path for the generated design"}}},"contentType":"image","returns":"Tattoo design artwork image ready to share or use in placement_preview"},{"name":"placement_preview","displayName":"Placement Preview","description":"Preview a tattoo design on a body photo. Composites the tattoo onto the specified skin area with realistic depth and skin texture integration.","inputSchema":{"type":"object","properties":{"tattoo_url":{"type":"string","description":"URL of the tattoo design image (e.g. from design_tattoo output)."},"body_photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"placement_area":{"type":"string","enum":["forearm","upper-arm","shoulder","back","chest","ankle","wrist","neck","thigh"],"default":"forearm","description":"Body area where the tattoo will be placed. Default: forearm."},"opacity":{"type":"number","minimum":0.5,"maximum":1,"default":0.85,"description":"Tattoo opacity on skin (0.5–1.0). Higher = more opaque. Default: 0.85."}},"required":["tattoo_url","body_photo_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":25,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Preview a tattoo design on a forearm","input":{"tattoo_url":"https://toolrouter.com/demo-ugc-skincare.webp","body_photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","placement_area":"forearm","opacity":0.85}},{"description":"Preview a shoulder tattoo at high opacity","input":{"tattoo_url":"https://toolrouter.com/demo-ugc-skincare.webp","body_photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","placement_area":"shoulder","opacity":0.95}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Preview image(s) with tattoo composited onto skin","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}}}},"tattoo_url":{"type":"string","description":"Tattoo design URL used"},"body_photo_url":{"type":"string","description":"Body photo URL used"},"placement_area":{"type":"string","description":"Body area used for placement"},"opacity":{"type":"number","description":"Opacity applied"},"image_path":{"type":"string","description":"Asset path for the preview image"}}},"contentType":"image","returns":"Photo with the tattoo design realistically placed on the specified body area"},{"name":"flash_sheet","displayName":"Flash Sheet","description":"Generate a tattoo flash sheet with 6 coordinated mini designs around a theme. All designs share a consistent style and are arranged in a grid on a clean white background.","inputSchema":{"type":"object","properties":{"theme":{"type":"string","description":"Unifying theme for all 6 designs, e.g. \"ocean life\", \"celestial\", \"botanical flowers\", \"Japanese koi\"."},"style":{"type":"string","enum":["traditional","neo-traditional","blackwork","fine-line","japanese","minimalist"],"default":"traditional","description":"Tattoo art style for all designs on the sheet. Default: traditional."},"color_mode":{"type":"string","enum":["black-and-white","color"],"default":"black-and-white","description":"Color treatment for the flash sheet. Default: black-and-white."}},"required":["theme"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Traditional American flash sheet: nautical theme","input":{"theme":"nautical — anchors, swallows, ships, compasses, ropes","style":"traditional","color_mode":"black-and-white"}},{"description":"Fine-line botanical flash sheet in color","input":{"theme":"botanical flowers — roses, peonies, lavender, wildflowers","style":"fine-line","color_mode":"color"}},{"description":"Japanese celestial flash sheet","input":{"theme":"celestial — moon phases, stars, sun, clouds, lightning","style":"japanese","color_mode":"black-and-white"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Flash sheet image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}}}},"theme":{"type":"string","description":"Theme used for the flash sheet"},"style":{"type":"string","description":"Style applied"},"color_mode":{"type":"string","description":"Color mode used"},"design_count":{"type":"number","description":"Number of designs on the sheet"},"image_path":{"type":"string","description":"Asset path for the flash sheet image"}}},"contentType":"image","returns":"Flash sheet image with 6 coordinated tattoo designs in a grid layout"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["design_tattoo","flash_sheet","placement_preview","list_models"],"icon":"/icons/tattoo-designer.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept style references from your file library"]}],"premadePrompt":"Design a tattoo of [describe concept, e.g. \"a wolf howling at the moon\"] in [style, e.g. fine-line] style.","usesStyleReferences":true,"styleReferenceSkills":["design_tattoo","flash_sheet"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"photo-animation","displayName":"Photo Animation","subtitle":"Bring still photos to life as short animated videos","about":"**Photo Animation** turns any still photo into a short animated video. Give it a portrait and it adds subtle blinking, breathing, and micro-expressions. Give it a landscape and it introduces wind through the trees, rippling water, or drifting clouds. Pass an old family photo and it transforms the memory into an emotionally warm clip. Or apply a cinematic Ken Burns zoom and pan to any image for video presentations and social content.\n\nEach animation mode is designed for a specific use case. Portrait animation preserves the person's identity exactly while adding just enough life to feel real. Scene animation matches natural environmental motion to the photo's content. Memory animation handles aged or low-quality photos gracefully and adds period-accurate treatment when you specify an era. Slow zoom produces smooth, professional camera movement suited to documentary and presentation work.\n\n### What you can do\n- Animate portraits with natural blinking, breathing, and micro-expressions\n- Add environmental motion to landscapes — wind, water, clouds, fire, snow, rain\n- Transform old or childhood photos into warm emotional animated clips\n- Apply cinematic Ken Burns slow zoom or pan effects to any image\n- Choose intensity levels from subtle to dramatic for portrait animation\n- Control video duration and aspect ratio (1:1, 16:9, 9:16)\n\n### Who it's for\nContent creators, social media managers, digital artists, families who want to bring old photos to life, and anyone who needs to add motion to still images for video projects, presentations, or personal use.\n\n### How to use it\n1. Use **animate_portrait** for photos of people — pass the photo URL and choose intensity\n2. Use **animate_scene** for landscapes, cityscapes, or any non-portrait photo — choose a motion type\n3. Use **relive_memory** for old, faded, or historical photos — add an era hint for period accuracy\n4. Use **slow_zoom** for any image when you want a cinematic camera movement effect\n\n### Getting started\nNo setup required — pass any publicly accessible image URL to get started.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"animate_portrait","displayName":"Animate Portrait","description":"Bring a portrait photo to life with subtle natural animation — blinking, breathing, and micro-expressions — while preserving the person's identity exactly.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Portrait photo as a ToolRouter file ID or hosted HTTP(S) URL."},"intensity":{"type":"string","enum":["subtle","moderate","dramatic"],"description":"\"subtle\" barely perceptible, \"moderate\" clearly visible, \"dramatic\" expressive. Default: subtle."},"duration":{"type":"number","description":"Video duration in seconds. Default: 5."},"aspect_ratio":{"type":"string","enum":["1:1","9:16","16:9"],"description":"Output video aspect ratio. Default: 1:1."}},"required":["photo_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Animate a portrait with subtle life-like motion","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg","intensity":"subtle","duration":5}},{"description":"Animate a portrait with moderate expression for 9:16 video","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg","intensity":"moderate","aspect_ratio":"9:16"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent ToolRouter video URL"},"video_url_direct":{"type":"string","description":"Direct temporary video URL from provider"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"model":{"type":"string","description":"Video model used"}}},"returns":"Animated video of the portrait with natural life-like motion"},{"name":"animate_scene","displayName":"Animate Scene","description":"Add natural environmental motion to any photo — wind through trees, rippling water, drifting clouds, falling snow, and more.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Scene photo as a ToolRouter file ID or hosted HTTP(S) URL."},"motion_type":{"type":"string","enum":["wind","water","clouds","fire","snow","rain","particles"],"description":"Type of natural motion to add. Default: wind."},"duration":{"type":"number","description":"Video duration in seconds. Default: 5."},"aspect_ratio":{"type":"string","enum":["1:1","9:16","16:9"],"description":"Output video aspect ratio. Default: 16:9."}},"required":["photo_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Add wind movement to a landscape photo","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Hopetoun_falls.jpg/1280px-Hopetoun_falls.jpg","motion_type":"water","duration":5}},{"description":"Add falling snow to a winter scene","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Hopetoun_falls.jpg/1280px-Hopetoun_falls.jpg","motion_type":"snow","aspect_ratio":"16:9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent ToolRouter video URL"},"video_url_direct":{"type":"string","description":"Direct temporary video URL from provider"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"model":{"type":"string","description":"Video model used"}}},"returns":"Animated video of the scene with the chosen natural motion effect"},{"name":"relive_memory","displayName":"Relive Memory","description":"Transform an old or childhood photo into a warm, emotional animated video clip. Preserves all faces and details while bringing the memory to life.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Photo as a ToolRouter file ID or hosted HTTP(S) URL."},"era":{"type":"string","description":"Optional era hint for period-accurate animation style, e.g. \"1980s\", \"1960s\", \"Victorian\". Omit if unknown."},"mood":{"type":"string","enum":["nostalgic","joyful","dramatic","peaceful"],"description":"Emotional mood of the animation. Default: nostalgic."},"duration":{"type":"number","description":"Video duration in seconds. Default: 5."}},"required":["photo_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Bring a nostalgic family photo to life","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg","mood":"nostalgic","duration":5}},{"description":"Animate a 1970s childhood photo with joyful mood","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Abraham_Lincoln_O-77_matte_collodion_print.jpg/800px-Abraham_Lincoln_O-77_matte_collodion_print.jpg","era":"1970s","mood":"joyful"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent ToolRouter video URL"},"video_url_direct":{"type":"string","description":"Direct temporary video URL from provider"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"model":{"type":"string","description":"Video model used"}}},"returns":"Emotional animated video clip of the memory with natural life-like motion"},{"name":"slow_zoom","displayName":"Slow Zoom","description":"Apply a cinematic Ken Burns slow zoom or pan effect to any photo — zoom in, zoom out, pan left/right, or diagonal drift.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Photo as a ToolRouter file ID or hosted HTTP(S) URL to apply the Ken Burns effect to."},"direction":{"type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","diagonal"],"description":"Camera movement. zoom-in/zoom-out, pan-left/pan-right, diagonal (zoom + pan combined). Default: zoom-in."},"duration":{"type":"number","description":"Video duration in seconds. Default: 5."},"aspect_ratio":{"type":"string","enum":["1:1","9:16","16:9"],"description":"Output video aspect ratio. Default: 16:9."}},"required":["photo_url"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Slow cinematic zoom in on a landscape photo","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Hopetoun_falls.jpg/1280px-Hopetoun_falls.jpg","direction":"zoom-in","duration":5}},{"description":"Ken Burns pan across a wide group photo","input":{"photo_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Hopetoun_falls.jpg/1280px-Hopetoun_falls.jpg","direction":"pan-right","aspect_ratio":"16:9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent ToolRouter video URL"},"video_url_direct":{"type":"string","description":"Direct temporary video URL from provider"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"model":{"type":"string","description":"Video model used"}}},"returns":"Cinematic video with smooth Ken Burns camera movement applied to the photo"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["animate_portrait","animate_scene","relive_memory","slow_zoom","list_models"],"icon":"/icons/photo-animation.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release with animate_portrait, animate_scene, relive_memory, and slow_zoom"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas and scenes from your file library — pass their image straight through to animate"]}],"premadePrompt":"Animate this photo for me: [image URL]. Make the person look like they are alive and breathing.","usesPersonas":true,"usesScenes":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"ai-avatar-creator","displayName":"AI Avatar Creator","subtitle":"Professional headshots, stylized avatars, and gaming characters","about":"**AI Avatar Creator** transforms any photo into a professional headshot, stylized avatar, or gaming character. It covers everything from polished LinkedIn portraits to anime characters, pixel art, cyberpunk personas, and fantasy RPG fighters — and can generate a pack of four variants at once.\n\nWhether you're updating a professional profile, creating a consistent persona for social media, or building a custom character for a game or platform, this tool handles it without requiring a designer or photo studio. You can start from a real photo for likeness-based results, or describe what you want for entirely generated avatars.\n\n### What you can do\n- Transform a photo into a polished professional headshot with a choice of backgrounds and styles\n- Create stylized avatars in cartoon, anime, pixel art, 3D render, oil painting, watercolor, or comic styles\n- Generate gaming characters with classes and settings — fantasy RPG, sci-fi, cyberpunk, medieval, steampunk, or chibi\n- Generate a pack of 4 avatar variants from a single photo in one call\n\n### Who it's for\nProfessionals wanting a better LinkedIn or Slack profile photo. Content creators and streamers building a visual brand persona. Developers and game designers generating consistent character visuals. Anyone who wants a stylized version of themselves for online use.\n\n### How to use it\n1. Use **professional_headshot** with a photo URL to get a polished corporate or creative headshot — choose background and style\n2. Use **avatar_style** with a photo or text description to get a stylized avatar in your chosen art style\n3. Use **gaming_avatar** to create a character with a specific class and genre setting\n4. Use **avatar_pack** to get four different style variants from a single photo in one go\n\n### Getting started\nPass any publicly accessible photo URL to **professional_headshot** or **avatar_style** to get started immediately.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"professional_headshot","displayName":"Professional Headshot","description":"Transform a photo into a polished professional headshot for LinkedIn, corporate profiles, or business use. Choose background and style.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"background":{"type":"string","enum":["office","gradient","blur","solid-white","outdoor"],"description":"Background style for the headshot. Default: gradient."},"style":{"type":"string","enum":["corporate","creative","casual","executive"],"description":"Headshot style. Default: corporate."},"gender_expression":{"type":"string","description":"Optional gender expression to reflect in the output (e.g. \"feminine\", \"masculine\", \"androgynous\")."}},"required":["photo_url"]},"annotations":{},"examples":[{"description":"Corporate LinkedIn headshot with gradient background","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","background":"gradient","style":"corporate"}},{"description":"Creative headshot with office background","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","background":"office","style":"creative"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated headshot image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"image_path":{"type":"string","description":"Local path of the generated image for asset pipeline"},"format":{"type":"string","description":"Output format type"},"format_data":{"type":"object","description":"Gallery data with image URLs and titles"}}},"contentType":"image","returns":"Professional headshot image URL in chosen style and background, formatted as a gallery"},{"name":"avatar_style","displayName":"Avatar Style","description":"Transform a photo or text description into a stylized avatar. Supports cartoon, anime, pixel art, 3D render, oil painting, watercolor, and comic styles.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"description":{"type":"string","description":"Text description of the avatar to generate. Used when no photo is provided."},"style":{"type":"string","enum":["cartoon","pixel-art","anime","3d-render","oil-painting","watercolor","comic"],"description":"Art style for the avatar. Default: cartoon."},"background":{"type":"string","description":"Optional background description (e.g. \"galaxy background\", \"city skyline\", \"forest\")."}},"required":[]},"annotations":{},"examples":[{"description":"Cartoon avatar from photo","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","style":"cartoon"}},{"description":"Anime avatar from description","input":{"description":"a young woman with blue hair and a cheerful smile","style":"anime","background":"cherry blossom garden"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated avatar image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"image_path":{"type":"string","description":"Local path of the generated image for asset pipeline"},"format":{"type":"string","description":"Output format type"},"format_data":{"type":"object","description":"Gallery data with image URLs and titles"}}},"contentType":"image","returns":"Stylized avatar image in the chosen art style, formatted as a gallery"},{"name":"gaming_avatar","displayName":"Gaming Avatar","description":"Transform a photo or description into a gaming or RPG character avatar. Choose from fantasy, sci-fi, cyberpunk, medieval, steampunk, or chibi styles.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"description":{"type":"string","description":"Text description of the character to generate. Used when no photo is provided."},"game_style":{"type":"string","enum":["fantasy-rpg","sci-fi","cyberpunk","medieval","steampunk","chibi"],"description":"Gaming genre style for the avatar. Default: fantasy-rpg."},"class":{"type":"string","description":"Optional character class or role (e.g. \"paladin\", \"mage\", \"rogue\", \"engineer\")."}},"required":[]},"annotations":{},"examples":[{"description":"Fantasy RPG paladin avatar from photo","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","game_style":"fantasy-rpg","class":"paladin"}},{"description":"Cyberpunk character from description","input":{"description":"a tough street hacker with neon tattoos and a leather jacket","game_style":"cyberpunk"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated gaming avatar image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"image_path":{"type":"string","description":"Local path of the generated image for asset pipeline"},"format":{"type":"string","description":"Output format type"},"format_data":{"type":"object","description":"Gallery data with image URLs and titles"}}},"contentType":"image","returns":"Gaming character avatar image in the chosen style, formatted as a gallery"},{"name":"avatar_pack","displayName":"Avatar Pack","description":"Generate 4 avatar variants from one photo in different art styles. Returns a gallery with all variants — perfect for choosing a profile picture.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"styles":{"type":"array","items":{"type":"string","enum":["cartoon","pixel-art","anime","3d-render","oil-painting","watercolor","comic","fantasy-rpg","cyberpunk"]},"description":"Up to 4 art styles to generate. Default: [\"cartoon\", \"anime\", \"3d-render\", \"pixel-art\"]."}},"required":["photo_url"]},"annotations":{},"examples":[{"description":"Generate default 4-style avatar pack","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp"}},{"description":"Generate custom style pack","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","styles":["anime","cyberpunk","watercolor","comic"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"variants":{"type":"array","description":"Generated avatar variants","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"title":{"type":"string","description":"Style name"}}}},"count":{"type":"number","description":"Number of variants generated"},"styles_generated":{"type":"array","items":{"type":"string"},"description":"Styles used"},"image_path":{"type":"string","description":"Local path of the first generated variant for asset pipeline"},"format":{"type":"string","description":"Output format type"},"format_data":{"type":"object","description":"Gallery data with all variant image URLs and titles"}}},"contentType":"image","returns":"Gallery of 4 avatar variants in different art styles, each with a URL and style label"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["professional_headshot","avatar_style","gaming_avatar","avatar_pack","list_models"],"icon":"/icons/ai-avatar-creator.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas from your file library"]}],"premadePrompt":"Create a professional LinkedIn headshot from my photo: [photo URL]. Use a gradient background and corporate style.","usesPersonas":true,"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand visual identity to avatar styling and backgrounds\n  - Match the creator's aesthetic for professional or stylised portraits\n  - Reference brand guidelines for consistent avatar presentation","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"cartoon-maker","displayName":"Cartoon Maker","subtitle":"Turn photos into cartoons, comics, caricatures, and illustrations","about":"**Cartoon Maker** transforms photos into cartoons, comics, caricatures, and original illustrated scenes. Choose from Disney, Pixar, anime, comic-book, flat-vector, watercolor, sketch, and Simpsons styles — or generate a fully original cartoon illustration from a text description.\n\nIt covers four distinct creative use cases: turning a portrait into a stylized cartoon version of the person, creating a multi-panel comic strip from a photo and story, generating an exaggerated caricature, and producing original illustrated scenes without any source photo. Each skill preserves what matters — likeness, story, or visual style — depending on what you're making.\n\n### What you can do\n- Transform a portrait photo into a cartoon in 8 different styles\n- Create a multi-panel comic strip from a photo and a story description\n- Generate an exaggerated caricature of any person from a portrait\n- Create original cartoon scenes and illustrations from text descriptions only\n\n### Who it's for\nContent creators making illustrated versions of themselves or their audience. Social media managers creating engaging comic content. Anyone who wants a stylized, fun interpretation of a photo for a profile, campaign, or gift.\n\n### How to use it\n1. Use **photo_to_cartoon** with a photo URL and choose your style — disney, pixar, anime, comic-book, flat-vector, watercolor, sketch, or simpsons\n2. Use **comic_strip** with a photo and a story description to generate a multi-panel narrative\n3. Use **caricature** for an exaggerated, humorous portrait from a photo\n4. Use **cartoon_scene** when you want an illustrated scene from text alone — no photo required\n\n### Getting started\n**photo_to_cartoon** is the quickest starting point — pass any portrait URL and choose a style.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"photo_to_cartoon","displayName":"Photo to Cartoon","description":"Transform a photo into a cartoon illustration. Choose from Disney, Pixar, anime, comic-book, flat-vector, watercolor, sketch, or Simpsons style.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"style":{"type":"string","enum":["disney","pixar","anime","comic-book","flat-vector","watercolor-illustration","sketch","simpsons"],"description":"Cartoon style to apply. Default: disney."},"preserve_likeness":{"type":"boolean","description":"Preserve the person's recognisable features and identity. Default: true."}},"required":["photo_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Convert a portrait to Disney style","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","style":"disney"}},{"description":"Anime version of a group photo","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","style":"anime","preserve_likeness":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated cartoon image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"style":{"type":"string","description":"Style applied"},"source_photo":{"type":"string","description":"Original photo URL"},"image_path":{"type":"string","description":"Local asset path for download"}}},"contentType":"image","returns":"Cartoon version of the photo as an image URL, downloadable asset, and shareable page link"},{"name":"comic_strip","displayName":"Comic Strip","description":"Turn a photo and story text into a multi-panel comic strip (2–4 panels). Choose superhero, newspaper, manga, indie, or vintage style.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"story":{"type":"string","description":"The narrative or dialogue to illustrate across the panels."},"panels":{"type":"number","description":"Number of panels (2–4). Default: 3."},"comic_style":{"type":"string","enum":["superhero","newspaper","manga","indie","vintage"],"description":"Comic strip style. Default: newspaper."}},"required":["photo_url","story"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Three-panel newspaper comic strip","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","story":"Character discovers their coffee is cold, looks devastated, then finds a hot coffee machine and celebrates.","panels":3,"comic_style":"newspaper"}},{"description":"Manga-style action strip","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","story":"Hero senses danger, leaps into action, defeats the villain with a finishing move.","panels":4,"comic_style":"manga"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Comic strip image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"comic_style":{"type":"string","description":"Style applied"},"panels":{"type":"number","description":"Number of panels generated"},"story":{"type":"string","description":"Story used"},"source_photo":{"type":"string","description":"Original photo URL"},"image_path":{"type":"string","description":"Local asset path for download"}}},"contentType":"image","returns":"Multi-panel comic strip as a single image URL, downloadable asset, and shareable page link"},{"name":"caricature","displayName":"Caricature","description":"Transform a portrait photo into an exaggerated caricature. Choose subtle, moderate, or extreme exaggeration and editorial, party, or digital-art style.","inputSchema":{"type":"object","properties":{"photo_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"exaggeration":{"type":"string","enum":["subtle","moderate","extreme"],"description":"Level of feature exaggeration. Default: moderate."},"style":{"type":"string","enum":["editorial","party","digital-art"],"description":"Caricature style. Default: digital-art."}},"required":["photo_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Digital art caricature with moderate exaggeration","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","exaggeration":"moderate","style":"digital-art"}},{"description":"Extreme editorial caricature","input":{"photo_url":"https://toolrouter.com/demo-ugc-skincare.webp","exaggeration":"extreme","style":"editorial"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Caricature image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"exaggeration":{"type":"string","description":"Exaggeration level used"},"style":{"type":"string","description":"Style applied"},"source_photo":{"type":"string","description":"Original photo URL"},"image_path":{"type":"string","description":"Local asset path for download"}}},"contentType":"image","returns":"Caricature image URL, downloadable asset, and shareable page link"},{"name":"cartoon_scene","displayName":"Cartoon Scene","description":"Generate an original cartoon scene from a text description. Choose Disney, Pixar, anime, flat-vector, storybook, or retro-cartoon style.","inputSchema":{"type":"object","properties":{"scene_desc":{"type":"string","description":"Description of the scene to illustrate (characters, setting, action, mood)."},"style":{"type":"string","enum":["disney","pixar","anime","flat-vector","storybook","retro-cartoon"],"description":"Illustration style. Default: pixar."},"aspect_ratio":{"type":"string","enum":["16:9","1:1","9:16","4:3"],"description":"Output aspect ratio. Default: 16:9."}},"required":["scene_desc"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Pixar-style adventure scene","input":{"scene_desc":"A brave young explorer and her robot companion discover a hidden waterfall in a glowing jungle at sunset","style":"pixar","aspect_ratio":"16:9"}},{"description":"Storybook illustration for a children's story","input":{"scene_desc":"A friendly dragon sharing cookies with three little woodland animals around a campfire","style":"storybook","aspect_ratio":"4:3"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Generated scene image(s)","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"style":{"type":"string","description":"Style applied"},"aspect_ratio":{"type":"string","description":"Aspect ratio used"},"scene_desc":{"type":"string","description":"Scene description used"},"image_path":{"type":"string","description":"Local asset path for download"}}},"contentType":"image","returns":"Original cartoon scene as an image URL, downloadable asset, and shareable page link"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["photo_to_cartoon","cartoon_scene","comic_strip","caricature","list_models"],"icon":"/icons/cartoon-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas and style references from your file library"]}],"premadePrompt":"Turn this photo into a [disney/pixar/anime/comic-book] cartoon: [image URL].","usesPersonas":true,"usesStyleReferences":true,"styleReferenceSkills":["photo_to_cartoon","comic_strip","cartoon_scene","caricature"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"floor-plan-renderer","displayName":"Floor Plan Renderer","subtitle":"Turn any floor plan into a photorealistic furnished interior","about":"**Floor Plan Renderer** turns a flat 2D floor plan into a photorealistic furnished interior in seconds. Upload any architectural drawing, blueprint, or even a hand-drawn sketch, pick a design style, and get back a fully furnished, photo-quality room render.\n\nIt's the fastest way to communicate what a space could feel like — before a single piece of furniture is moved or a wall is painted. Architects, developers, and interior designers use it to produce presentation-ready visuals without expensive 3D modeling software or photo shoots.\n\n### What you can do\n- **render** — generate a photorealistic interior from any 2D floor plan in your chosen style\n- Choose from Modern, Scandinavian, Luxury, Industrial, Warm Traditional, Minimalist, and Japandi styles\n- Optionally focus the render on a specific room area like a master bedroom or open-plan kitchen\n\n### Who it's for\nArchitects and designers presenting concepts to clients, property developers creating marketing materials, and homeowners visualizing a renovation before committing. Anyone who has a floor plan and wants to see a realistic version of the finished space.\n\n### How to use it\n1. Use **render** with the URL of your floor plan image — works with clean CAD drawings, blueprint scans, and rough hand sketches\n2. Pick a design_style that matches your brief or client preference\n3. Optionally add a room_type to tell the renderer which area to focus on for larger multi-room plans\n\n### Getting started\nPass a floor plan URL and a style to get your first render — no setup required.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"render","displayName":"Render Interior","description":"Generate a photorealistic furnished interior render from a 2D floor plan. Works with architectural drawings, blueprints, and hand-drawn sketches.","inputSchema":{"type":"object","properties":{"floor_plan_url":{"type":"string","description":"URL of the 2D floor plan — architectural drawing, blueprint, or hand-drawn sketch."},"design_style":{"type":"string","enum":["modern","scandinavian","luxury","industrial","warm-traditional","minimalist","japandi"],"default":"modern","description":"Interior design style to apply to the render."},"room_type":{"type":"string","description":"Optional focus area, e.g. \"open plan living room\", \"master bedroom\", \"kitchen\". Helps target the render to a specific space on the plan."}},"required":["floor_plan_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Render a floor plan as a modern interior","input":{"floor_plan_url":"https://toolrouter.com/demo-interior-japandi.webp","design_style":"modern"}},{"description":"Render a bedroom area from a floor plan in a Japandi style","input":{"floor_plan_url":"https://toolrouter.com/demo-interior-japandi.webp","design_style":"japandi","room_type":"master bedroom"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path to the rendered interior image"},"design_style":{"type":"string","description":"Design style applied"},"room_type":{"type":"string","description":"Room focus area if specified"}}},"contentType":"image","returns":"Photorealistic furnished interior render of the floor plan in the chosen style"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["render","list_models"],"icon":"/icons/floor-plan-renderer.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept scenes and style references from your file library"]}],"premadePrompt":"Render this floor plan as a photorealistic interior: [floor plan image URL]. Style: modern luxury.","usesScenes":true,"usesStyleReferences":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"room-renovator","displayName":"Room Renovator","subtitle":"Visualize any room fully renovated from a single photo","about":"**Room Renovator** transforms any room photo into a photorealistic renovation render. Upload a photo of a kitchen, bathroom, living room, bedroom, or exterior, choose a finish style, and get back a realistic image of the space fully renovated — same layout and perspective, completely new surfaces, materials, and furnishings.\n\nThis is the fastest way to visualize a renovation before committing to it. Homeowners use it to explore design directions. Agents use it to show buyers a property's potential. Designers use it to present concepts before detailed drawings.\n\n### What you can do\n- **renovate** — transform a room photo into a photorealistic render in the chosen renovation type and finish style\n\n### Who it's for\nHomeowners planning a renovation and wanting to visualize the result, real estate agents showing buyers the potential of a fixer-upper, interior designers presenting concepts to clients before detailed work begins, and property developers marketing renovation projects.\n\n### How to use it\n1. Call **renovate** with the URL of a room or property photo.\n2. Set renovation_type to match the space: interior, kitchen, bathroom, bedroom, outdoor, or commercial.\n3. Choose a finish_style: modern-luxury, scandinavian, industrial, rustic, minimalist, maximalist, coastal, or mid-century.\n4. Set aspect_ratio if you need a specific output format — 4:3 is the default for most interiors.\n\n### Getting started\nPass any room photo URL to **renovate** with a renovation_type and finish_style — the AI replaces all surfaces and furnishings while preserving the original layout and perspective.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"renovate","displayName":"Renovate Room","description":"Transform a room photo into a photorealistic renovation render. Choose a renovation type and finish style — the AI replaces all surfaces, materials, and furnishings while preserving the original layout and perspective.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"renovation_type":{"type":"string","enum":["interior","exterior","bathroom","kitchen","outdoor","commercial"],"default":"interior","description":"Type of space being renovated."},"finish_style":{"type":"string","enum":["modern-luxury","scandinavian","industrial","rustic","minimalist","maximalist","coastal","mid-century"],"default":"modern-luxury","description":"Finish and design style to apply to the renovated space."},"aspect_ratio":{"type":"string","enum":["1:1","16:9","4:3"],"default":"4:3","description":"Aspect ratio of the output image."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Renovate a dated living room in a modern luxury finish","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","renovation_type":"interior","finish_style":"modern-luxury"}},{"description":"Transform a tired bathroom into a Scandinavian spa","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","renovation_type":"bathroom","finish_style":"scandinavian"}},{"description":"Renovate a kitchen with a rustic farmhouse finish","input":{"image_url":"https://toolrouter.com/demo-interior-japandi.webp","renovation_type":"kitchen","finish_style":"rustic"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path to the renovated room image"},"renovation_type":{"type":"string","description":"Type of space that was renovated"},"finish_style":{"type":"string","description":"Finish style applied"}}},"contentType":"image","returns":"Photorealistic renovation render of the room in the chosen style"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["renovate","list_models"],"icon":"/icons/room-renovator.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept scenes and style references from your file library"]}],"premadePrompt":"Renovate this room for me: [image URL]. I want a [modern luxury / Scandinavian / industrial / rustic] finish.","usesScenes":true,"usesStyleReferences":true,"styleReferenceSkills":["renovate"],"brain":{"instructions":"When brain knowledge is available:\n  - Apply the user's renovation style preferences and budget context\n  - Reference preferred materials, finishes, and colour schemes\n  - Match established interior design direction from previous projects","produces":["design_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"furniture-fabric-swap","displayName":"Furniture Fabric Swap","subtitle":"Swap the fabric on any furniture or soft furnishing","about":"**Furniture Fabric Swap** lets you replace the fabric on any piece of furniture with a new material — just provide a photo of the item and a swatch of the new fabric. The shape, shadows, and lighting stay identical; only the surface material changes.\n\nThis is the fastest way to visualize a furniture reupholstery, show a product in multiple colorways, or experiment with different textile options before ordering samples. Retailers, interior designers, and product teams use it to produce realistic visual variants without a full photoshoot.\n\n### What you can do\n- **swap** — replace the fabric on chairs, sofas, cushions, curtains, bags, ottomans, and any upholstered item\n- Control coverage: full item, main upholstery only, or cushions only\n- Works with any swatch image — flat fabric swatches, seamless tiles, or close-up textile photos\n\n### Who it's for\nFurniture retailers showing a sofa in multiple fabric options, interior designers exploring material choices for clients, and e-commerce teams creating product variants without a reshooting every colorway.\n\n### How to use it\n1. Use **swap** with a product_url (the furniture photo) and a fabric_url (the new material swatch)\n2. Set coverage to control which surfaces get the new fabric — full by default\n3. View the result inline and iterate with a different swatch if needed\n\n### Getting started\nPass a furniture photo URL and a fabric swatch URL — results come back in under a minute.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"swap","displayName":"Swap Fabric","description":"Replace the fabric on a furniture or soft furnishing item using a swatch image as the new material. Preserves product shape, silhouette, shadows, and lighting exactly.","inputSchema":{"type":"object","properties":{"product_url":{"type":"string","description":"Public URL of the furniture or item photo whose fabric you want to replace (e.g. chair, cushion, curtain, bag)."},"fabric_url":{"type":"string","description":"Public URL of the fabric swatch or texture image to apply (flat swatch, seamless tile, or macro textile close-up)."},"coverage":{"type":"string","enum":["full","partial","cushions-only"],"default":"full","description":"Which surfaces to restyle: \"full\" (default) = all fabric, \"partial\" = main upholstery, \"cushions-only\" = cushions only."}},"required":["product_url","fabric_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Swap a grey armchair fabric with a tropical leaf print swatch","input":{"product_url":"https://toolrouter.com/demo-interior-japandi.webp","fabric_url":"https://toolrouter.com/demo-interior-japandi.webp","coverage":"full"}},{"description":"Apply a velvet texture swatch to just the cushions of a sofa","input":{"product_url":"https://toolrouter.com/demo-interior-japandi.webp","fabric_url":"https://toolrouter.com/demo-interior-japandi.webp","coverage":"cushions-only"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"images":{"type":"array","description":"Result image(s) with the fabric replaced","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"request_id":{"type":"string","description":"Request ID"}}},"contentType":"image","returns":"Product photo with fabric texture replaced by the provided swatch, shape and lighting unchanged"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["swap","list_models"],"icon":"/icons/furniture-fabric-swap.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept products (furniture) and style references from your file library"]}],"premadePrompt":"Swap the fabric on this furniture [image URL] with this fabric swatch [swatch URL].","usesProducts":true,"usesStyleReferences":true,"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"product-video-maker","displayName":"Product Video Maker","subtitle":"Turn any product photo into a cinematic reveal video","about":"**Product Video Maker** animates any product photo into a short cinematic reveal video in seconds. Choose from six visual effects — Explosion, Sparkle, Smoke, Cinematic Pan, Liquid, or Neon — and get back a polished 5-second clip ready for social ads, product pages, or TikTok.\n\nStatic product images don't stop a scroll. This tool turns your existing photos into motion content without a video production budget. Best results come from clean product shots on simple backgrounds, but it works with most product photography.\n\n### What you can do\n- **create** — animate a product photo into a 5-second cinematic reveal video in your chosen effect style and aspect ratio\n\n### Who it's for\nE-commerce brands creating social video ads, product marketers building content for TikTok and Instagram Reels, sellers looking to upgrade their product page visuals, and anyone who wants to turn static product images into scroll-stopping motion content.\n\n### How to use it\n1. Call **create** with the URL of your product photo.\n2. Choose an effect: cinematic for a polished premium feel, explosion or neon for energy and impact, sparkle or liquid for lifestyle and beauty products.\n3. Set aspect_ratio to 9:16 for TikTok and Stories, 16:9 for YouTube and product page banners.\n\n### Getting started\nPass a product image URL to **create** with effect set to cinematic for a universally polished starting point.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"create","displayName":"Create","description":"Turn a product photo into a 5-second cinematic reveal video. Choose an effect theme to control the visual style of the reveal.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"product_url":{"type":"string","description":"URL of the product photo to animate"},"effect":{"type":"string","enum":["explosion","sparkle","smoke","cinematic","liquid","neon"],"description":"Visual effect theme for the reveal. Default: cinematic"},"aspect_ratio":{"type":"string","enum":["9:16","16:9","1:1"],"description":"Output aspect ratio. Default: 9:16"}},"required":["product_url"]},"annotations":{},"examples":[{"description":"Cinematic reveal for a product shot","input":{"product_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","effect":"cinematic"}},{"description":"Explosion reveal in vertical format for TikTok","input":{"product_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","effect":"explosion","aspect_ratio":"9:16"}},{"description":"Neon effect in widescreen for a product page banner","input":{"product_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","effect":"neon","aspect_ratio":"16:9"}}],"pricing":"paid","returns":"5-second product reveal video in the chosen effect style"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["create","list_models"],"icon":"/icons/product-video-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept products and style references from your file library"]}],"premadePrompt":"Create a product reveal video for: [product image URL]. Effect: cinematic pan.","usesProducts":true,"usesStyleReferences":true,"styleReferenceSkills":["create"],"brain":{"instructions":"When brain knowledge is available:\n  - Select the reveal effect that matches the brand's aesthetic — cinematic for luxury, explosion for energy brands\n  - Reference product details for accurate scene descriptions\n  - Match the brand's cinematic style preferences","produces":["video_insights","product_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"movie-poster-maker","displayName":"Movie Poster Maker","subtitle":"4 cinematic posters from any image","about":"**Movie Poster Maker** turns a key art image and a title into four distinct cinematic poster compositions — each with professional typography, color grading, and layout suited to a different visual style. One call, four ready-to-use options with different treatments of the same source material.\n\nCreating even one movie poster from scratch requires design skills, licensed fonts, and hours in Photoshop. This tool generates four variants in under a minute — a title-dominant layout, full-bleed, centered hero, and atmospheric — each adapted to the film tone you specify, from horror thriller to indie arthouse to sci-fi epic.\n\n### What you can do\n- **create** — generate four cinematic poster compositions from a key art image and movie title\n\n### Who it's for\nIndependent filmmakers who need promotional materials without a design budget. Content creators making film-style visuals for short-form video. Marketers building campaign assets for entertainment releases. Anyone who needs striking cinematic visuals fast.\n\n### How to use it\n1. Call **create** with a key_art_url (any publicly accessible image — a character photo, scene still, or concept art)\n2. Add your movie title and an optional tagline\n3. Set film_tone to match the genre: horror-thriller, action-blockbuster, indie-arthouse, sci-fi-fantasy, comedy, or cinematic-drama (default)\n4. You'll get back four poster variants — title-dominant, full-bleed, centered hero, and atmospheric — as a gallery\n\n### Getting started\nUse a high-contrast, visually interesting image as key art. Portraits and dramatic scenes work best. The film_tone setting controls the color grading and typography style across all four compositions.","version":"0.02","categories":["media","ai","marketing"],"currency":"USD","skills":[{"name":"create","displayName":"Create Posters","description":"Generate 4 cinematic movie poster compositions from a key art image and title. Each variant uses a different layout and typography placement — title-dominant, full-bleed, centered hero, and atmospheric.","inputSchema":{"type":"object","properties":{"key_art_url":{"type":"string","description":"Key art image as a ToolRouter file ID or hosted HTTP(S) URL — a character photo, scene still, logo, or concept art."},"title":{"type":"string","description":"Main title text for the poster."},"tagline":{"type":"string","description":"Optional short tagline, e.g. \"This summer, fear has a new name\". Displayed on all four poster variants."},"film_tone":{"type":"string","enum":["cinematic-drama","horror-thriller","action-blockbuster","indie-arthouse","sci-fi-fantasy","comedy"],"description":"Visual tone of the film. Controls color grading, atmosphere, and typography style. Default: cinematic-drama.","default":"cinematic-drama"}},"required":["key_art_url","title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Create sci-fi posters with a tagline","input":{"key_art_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/280px-PNG_transparency_demonstration_1.png","title":"The Last Signal","tagline":"Some voices should stay silent","film_tone":"sci-fi-fantasy"}},{"description":"Create horror thriller posters","input":{"key_art_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/280px-PNG_transparency_demonstration_1.png","title":"Dark Hours","film_tone":"horror-thriller"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Movie title used"},"tagline":{"type":"string","description":"Tagline used, or null if not provided"},"film_tone":{"type":"string","description":"Film tone applied"},"variants":{"type":"array","description":"Four poster compositions with label and image details","items":{"type":"object","properties":{"label":{"type":"string","description":"Composition style name"},"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Image width in pixels"},"height":{"type":"number","description":"Image height in pixels"},"content_type":{"type":"string","description":"MIME type"}}}},"image_path":{"type":"string","description":"Asset path for poster variant 1"},"format":{"type":"string","description":"gallery — renders as image grid"},"format_data":{"type":"object","description":"Gallery data with all four poster variants","properties":{"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"}}}}}}}},"returns":"A gallery of 4 cinematic poster variants with different compositions, plus shareable image links for each"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["create","list_models"],"icon":"/icons/movie-poster-maker.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas (lead actors) and style references from your file library"]}],"premadePrompt":"Create movie posters for \"[TITLE]\" — [describe the film tone, e.g. dark thriller, sci-fi epic, indie drama]. Key art: [image URL]. Tagline: \"[your tagline]\".","usesPersonas":true,"usesStyleReferences":true,"brain":{"instructions":"When brain knowledge is available:\n  - Apply genre conventions (horror, comedy, thriller) aligned with the creator's style\n  - Use established colour palettes and cinematic visual identity\n  - Match the brand's typographic and compositional preferences","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"photo-location-finder","displayName":"Photo Location Finder","subtitle":"Find where any photo was taken from visual clues","about":"**Photo Location Finder** figures out where any photo was taken. It combines GPS metadata extraction, landmark recognition, reverse image search, and advanced AI visual reasoning — reading architecture, vegetation, signage, vehicle types, and terrain — to return a precise map pin with a confidence level and the reasoning behind the guess.\n\nWhen the first-pass confidence is medium or low, a second refinement layer pulls nearby street-level imagery and runs a visual match pass to pin the exact spot. The result is a geographic coordinate, a confidence rating (exact/high/medium/low), up to four alternative locations, and a list of the visual clues that informed the answer. An interactive map card is included in the output.\n\n### What you can do\n- Identify the location of any photo from visual clues alone\n- Read raw EXIF metadata including GPS coordinates, camera model, lens, and timestamp\n- Ask follow-up questions alongside the location guess — \"which neighbourhood?\" or \"Greece or Turkey?\"\n- Run reverse image search as an additional signal for famous or widely-shared photos\n- Get up to four alternative location guesses with reasons for each\n\n### Who it's for\nJournalists verifying the source of images, travel photographers cataloguing their work, investigators cross-checking photo claims, real estate professionals verifying listing photos, and curious people who want to know where a striking image was shot.\n\n### How to use it\n1. Use **locate_photo** with any publicly accessible image URL\n2. Add a questions parameter to get specific follow-up answers alongside the location\n3. Use **read_exif** to quickly check whether a photo has embedded GPS coordinates before running the full pipeline\n4. For ambiguous results, provide extra context in the questions field to narrow the guess\n\n### Getting started\nNo setup required — pass any public image URL to run the full location analysis pipeline.","version":"0.02","categories":["media","ai","analytics"],"currency":"USD","skills":[{"name":"locate_photo","displayName":"Locate Photo","description":"Analyse a photo and return the most likely location it was taken. Combines photo metadata, landmark recognition, reverse image search, and specialised visual reasoning. Returns a map pin, confidence score, and the visual clues that informed the guess.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"questions":{"type":"string","description":"Optional specific questions to answer alongside the guess, e.g. \"which neighbourhood in Tokyo?\" or \"is this Greece or Turkey?\"."},"use_reverse_search":{"type":"boolean","description":"Whether to run reverse image search as an extra signal. Defaults to true when available.","default":true}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":8,"timeoutSeconds":120,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Find the location of a famous landmark photo","input":{"image_url":"https://images.unsplash.com/photo-1526392060635-9d6019884377"}},{"description":"Guess where an ambiguous street photo was taken","input":{"image_url":"https://images.unsplash.com/photo-1533050487297-09b450131914","questions":"Which country is this and roughly which part of it?"}},{"description":"Analyse an uploaded image without reverse search","input":{"image_url":"https://images.unsplash.com/photo-1506905925346-21bda4d32df4","use_reverse_search":false}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Always \"map\" for rich rendering"},"format_data":{"type":"object","description":"Pins and zoom for map rendering"},"best_guess":{"type":"object","description":"Best guess with label, country, region, city, lat, lng, confidence (exact/high/medium/low), and source layer"},"alternates":{"type":"array","description":"Up to 4 plausible alternative locations with a reason each"},"reasoning":{"type":"array","description":"Visual clues the model used, each as a short bullet"},"caveats":{"type":"array","description":"Known limitations or uncertainty notes"},"signals":{"type":"object","description":"Raw signals from each layer (exif, landmarks, reverse_search) for debugging and audit trails"},"source_image_url":{"type":"string","description":"The input image URL"}}},"returns":"Best guess with coordinates and confidence, visual reasoning, alternates, and an interactive map pin"},{"name":"read_exif","displayName":"Read EXIF","description":"Read raw photo metadata (GPS coordinates, camera, lens, timestamp, orientation) from an image file without running the full analysis pipeline. Useful for forensics, photographer workflows, and quick metadata audits.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":2,"timeoutSeconds":30,"mode":"io"}},"examples":[{"description":"Read the EXIF metadata from a photograph","input":{"image_url":"https://images.unsplash.com/photo-1526392060635-9d6019884377"}},{"description":"Inspect a user-uploaded photo for GPS and camera info","input":{"image_url":"https://images.unsplash.com/photo-1506905925346-21bda4d32df4"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"exif":{"type":"object","description":"Parsed EXIF fields"},"gps":{"type":"object","description":"GPS coordinates if present, otherwise null"},"has_metadata":{"type":"boolean","description":"Whether any metadata was found"},"source_image_url":{"type":"string","description":"The input image URL"}}},"returns":"Raw EXIF metadata including GPS, camera, lens, and timestamp where available"}],"workflow":["locate_photo","read_exif"],"icon":"/icons/photo-location-finder.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release: photo geolocation with metadata extraction, famous-landmark recognition, reverse image search, and advanced visual reasoning — returns a map pin with confidence and a list of visual clues"]},{"version":"0.02","date":"2026-04-07","changes":["Added street-view refinement layer: when the first-pass guess is only medium or low confidence, the tool now pulls nearby open street-level imagery and runs a second visual match pass to pin the exact spot — no more guessing at the city level when a precise location is possible"]}],"premadePrompt":"Use ToolRouter to figure out where this photo was taken: [paste image URL]. Give me the most likely location, the reasoning, and 2-3 alternatives if you are not sure.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"sketch-to-render","displayName":"Sketch to Render","subtitle":"Turn any sketch or drawing into a photorealistic render","about":"**Sketch to Render** transforms hand-drawn sketches, architectural drawings, and rough concepts into fully rendered images with accurate materials, lighting, and textures. Upload any sketch and get back a photorealistic or stylized render in seconds.\n\nArchitects, product designers, and illustrators use it to bridge the gap between a rough idea and a polished visual — without waiting for a 3D artist. It handles everything from floor plans to character concepts to product wireframes.\n\n### What you can do\n- Turn pencil sketches into photorealistic renders with natural lighting\n- Convert architectural line drawings into interior or exterior visualizations\n- Render product concepts as 3D images with material hints\n- Apply watercolour, oil painting, or concept art styles to any sketch\n- Pass material hints to guide texture and finish choices\n\n### Who it's for\nArchitects and interior designers who need fast concept visualization. Product designers presenting early-stage ideas. Illustrators and artists who want to see how a sketch looks fully rendered. Anyone who draws first and needs a rendered output without a full 3D workflow.\n\n### How to use it\n1. Use **render** with a URL pointing to your sketch image\n2. Choose a **render_style**: photorealistic, 3d-render, watercolour, oil-painting, or concept-art\n3. Add **material_hints** to guide the output — for example \"polished concrete floors, oak furniture, large windows\"\n4. The rendered image is returned as a URL ready to view or share\n\n### Getting started\nNo setup required — just pass a sketch URL and choose your render style.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"render","displayName":"Render","description":"Transform a sketch or line drawing into a fully rendered image. Choose from photorealistic, 3D render, watercolour, oil painting, or concept art styles.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Call list_models for options. Omit for recommended default."},"sketch_url":{"type":"string","description":"URL of the sketch or drawing to render"},"render_style":{"type":"string","enum":["photorealistic","3d-render","watercolour","oil-painting","concept-art"],"description":"Output style for the render. Default: photorealistic"},"material_hints":{"type":"string","description":"Optional hints about materials and surfaces, e.g. \"concrete floors, exposed brick, oak furniture\""}},"required":["sketch_url"]},"annotations":{},"examples":[{"description":"Render an architectural floor plan sketch as a photorealistic interior","input":{"sketch_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Floor_plan.jpg/640px-Floor_plan.jpg","render_style":"photorealistic","material_hints":"polished concrete floors, white walls, large windows"}},{"description":"Turn a product sketch into a 3D render","input":{"sketch_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Floor_plan.jpg/640px-Floor_plan.jpg","render_style":"3d-render"}}],"pricing":"paid","returns":"Fully rendered image based on the input sketch in the chosen style"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["render","list_models"],"icon":"/icons/sketch-to-render.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept style references from your file library"]}],"premadePrompt":"Render this sketch as a photorealistic image: [sketch URL]. Style: photorealistic with natural lighting.","usesStyleReferences":true,"brain":{"instructions":"When brain knowledge is available:\n  - Apply the creator's preferred render style and material finishes\n  - Use brand colour palette and visual identity in renders\n  - Match established aesthetic for architectural or product renders","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"renovation-timelapse","displayName":"Renovation Timelapse","subtitle":"Turn any property photo into a cinematic renovation video","about":"**Renovation Timelapse** turns any photo of a room, house exterior, or property into a cinematic renovation timelapse video. The space transforms on screen — from its current state through a construction sequence into a fully renovated finish — with construction sound effects and music.\n\nThis is the kind of content that property developers, renovation companies, interior designers, and real estate agents share to show what's possible. One photo, one call, and you have a shareable video that makes the transformation feel real.\n\n### What you can do\n- **create** — generate a 5 or 10 second renovation timelapse video from a property photo, with your choice of space type and finish style\n\n### Who it's for\nReal estate developers and agents showcasing renovation potential, interior designers presenting concepts to clients, renovation contractors demonstrating their work, property investors visualizing returns, and content creators in the home improvement space.\n\n### How to use it\n1. Call **create** with the URL of a room or property photo.\n2. Set renovation_type to match the space: interior, kitchen, bathroom, bedroom, exterior, or living-room.\n3. Choose a finish_style: modern-luxury, scandinavian, industrial, rustic, minimalist, or coastal.\n4. Set aspect_ratio to 9:16 for Instagram Reels or TikTok, 16:9 for YouTube or property listings.\n\n### Getting started\nPass a property photo URL to **create** — the tool runs asynchronously and takes around 60–90 seconds to generate.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"create","displayName":"Create Renovation Timelapse","description":"Generate a cinematic renovation timelapse video from a property photo. The space transforms from its current state through construction phases into a fully renovated finish. ⏱ Async ~60–90s — poll with get_job_result.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"renovation_type":{"type":"string","enum":["interior","kitchen","bathroom","living-room","exterior","bedroom"],"description":"Type of space being renovated. Defaults to \"interior\"."},"finish_style":{"type":"string","enum":["modern-luxury","scandinavian","industrial","rustic","minimalist","coastal"],"description":"Target renovation style. Defaults to \"modern-luxury\"."},"duration":{"type":"number","enum":[5,10],"description":"Video duration in seconds. 5 (default) or 10."},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"],"description":"Video aspect ratio. \"16:9\" landscape (default), \"9:16\" portrait, \"1:1\" square."}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Modern luxury kitchen renovation","input":{"image_url":"https://example.com/old-kitchen.jpg","renovation_type":"kitchen","finish_style":"modern-luxury"}},{"description":"Scandinavian bedroom timelapse in portrait format","input":{"image_url":"https://example.com/bedroom.jpg","renovation_type":"bedroom","finish_style":"scandinavian","aspect_ratio":"9:16","duration":10}},{"description":"Industrial exterior renovation","input":{"image_url":"https://example.com/house-front.jpg","renovation_type":"exterior","finish_style":"industrial"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"Permanent ToolRouter video URL (added by asset system)"},"video_page":{"type":"string","description":"Shareable download page with OG preview — show this to the user"},"video_url_direct":{"type":"string","description":"Direct temporary video URL from provider"},"renovation_type":{"type":"string","description":"Space type used for generation"},"finish_style":{"type":"string","description":"Renovation style applied"},"prompt_used":{"type":"string","description":"The full video generation prompt used"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"model":{"type":"string","description":"Video model used"}}},"returns":"Permanent video URL and shareable download page (video_page). Also includes the renovation type, finish style, prompt used, model, and duration."},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["create","list_models"],"icon":"/icons/renovation-timelapse.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept scenes and style references from your file library"]}],"premadePrompt":"Create a renovation timelapse for this property: [image URL]. Target finish: modern luxury.","usesScenes":true,"usesStyleReferences":true,"styleReferenceSkills":["create"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"dramatic-reveal","displayName":"Dramatic Reveal","subtitle":"Cinematic before/after reveal video from two photos","about":"**Dramatic Reveal** turns any before-and-after photo pair into a cinematic transition video. Upload two images and get a polished 5-second reveal clip with the transition style of your choice — no video editing skills needed.\n\nIt's built for transformations: home renovations, room makeovers, product upgrades, fitness journeys, design redesigns, or anything else where the contrast between before and after tells the story. The output is a short video ready to post on social media or drop into a pitch deck.\n\n### What you can do\n- **create** — generate a cinematic reveal video from a before image and an after image, choosing from swipe, dissolve, light sweep, explosion, or cinematic transitions\n\n### Who it's for\nInterior designers, real estate agents, fitness coaches, product marketers, and content creators who want to showcase transformations in a visually compelling way without touching video editing software.\n\n### How to use it\n1. Get two image URLs — one for the \"before\" state and one for the \"after\" state.\n2. Call **create** with both URLs and pick a reveal style that fits the mood (light-sweep is a good default).\n3. Choose an aspect ratio: 16:9 for wide screens, 9:16 for vertical social, or 1:1 for square posts.\n4. Download the resulting video and share it directly.\n\n### Getting started\nCall **create** with your before and after image URLs. The light-sweep style works well for most transformations.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"create","displayName":"Create","description":"Generate a cinematic reveal video from a before and after image pair. Choose a transition style to create a dramatic transformation video.","inputSchema":{"type":"object","properties":{"before_url":{"type":"string","description":"URL of the \"before\" image"},"after_url":{"type":"string","description":"URL of the \"after\" image"},"reveal_style":{"type":"string","enum":["swipe","dissolve","light-sweep","explosion","cinematic"],"description":"Transition style for the reveal. Default: light-sweep"},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"],"description":"Output aspect ratio. Default: 16:9"}},"required":["before_url","after_url"]},"annotations":{},"examples":[{"description":"Room renovation reveal with light sweep","input":{"before_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","after_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","reveal_style":"light-sweep"}},{"description":"Makeover reveal with explosion effect in vertical format","input":{"before_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","after_url":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Gatto_europeo4.jpg/1200px-Gatto_europeo4.jpg","reveal_style":"explosion","aspect_ratio":"9:16"}}],"pricing":"paid","returns":"5-second cinematic video transitioning from the before to the after image"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"icon":"/icons/dramatic-reveal.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept products, scenes and style references from your file library"]}],"premadePrompt":"Create a dramatic reveal video showing this transformation: before [URL] → after [URL]. Style: light sweep.","usesScenes":true,"usesProducts":true,"usesStyleReferences":true,"styleReferenceSkills":["create"],"brain":{"instructions":"When brain knowledge is available:\n  - Recommend the transition style that best matches the brand's visual language\n  - Apply brand visual style to before/after presentation","produces":["video_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"storyboard-generator","displayName":"Storyboard Generator","subtitle":"Script to visual storyboard","about":"**Storyboard Generator** turns an enhanced script into a visual storyboard — one AI-generated frame per shot, composited into a labelled grid image and saved to your library, ready to hand straight to video generation.\n\nIt's the bridge between scripting and production. Once you've enhanced a script, this tool generates a realistic first-frame image for every shot in that script, applies your style reference and persona for visual consistency, then stitches everything into a grid so you can review the whole video at a glance before spending a penny on video generation. Each frame is also saved individually with its video generation prompt attached.\n\n### What you can do\n- **generate_storyboard** — generate one AI frame per shot from an enhanced script, composited into a storyboard grid image\n\n### Who it's for\nMarketers, DTC brands, and content agencies who want to see a video before they commit to generating it. Works best as part of the full UGC or video production pipeline.\n\n### How to use it\n1. Run the **script-enhancer** tool first to produce an enhanced script file\n2. Call **generate_storyboard** with the script file ID and a style reference — either a saved style reference ID or an inline description like \"super 8, grainy, domestic realism\"\n3. Optionally pass persona, scene, product, or outfit file IDs for visual consistency across shots\n4. Review the returned storyboard grid — show the URL to the user\n5. Use **file_read** with the returned file ID to get per-shot frame URLs and video generation prompts, then pass those to your video generation tool\n\n### Getting started\nYou need an enhanced script file from the script-enhancer tool and at least one style reference. Upload persona and product references at your file library to get the best results.","version":"0.01","categories":["media","ai"],"currency":"USD","skills":[{"name":"generate_storyboard","displayName":"Generate Storyboard","description":"Generates one AI frame per shot from an enhanced script file and composites them into a storyboard grid image saved to your library. Style reference required. Accepts personas, scenes, products, and outfits. ⏱ Takes 1–3 minutes.","inputSchema":{"type":"object","properties":{"script_file_id":{"type":"string","description":"File ID of an enhanced script from the script-enhancer tool (e.g. \"ast_abc123\")."},"style_reference_id":{"type":"string","description":"Style reference file ID. Use file_list section=\"style_references\" to find yours."},"style_reference_prompt":{"type":"string","description":"Inline style description (e.g. \"super 8, grainy, domestic realism\"). Use instead of style_reference_id."},"persona_file_id":{"type":"string","description":"Persona file ID for character consistency across frames."},"scene_file_id":{"type":"string","description":"Scene file ID for consistent location/environment."},"product_file_ids":{"type":"array","items":{"type":"string"},"description":"Product file IDs to include in relevant frames."},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"],"description":"Frame aspect ratio. Default 16:9."}},"required":["script_file_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":150,"timeoutSeconds":600,"mode":"io"}},"examples":[{"description":"Generate storyboard with style reference and persona","input":{"script_file_id":"ast_abc123","style_reference_id":"ast_style456","persona_file_id":"ast_persona789","aspect_ratio":"16:9"}},{"description":"Generate storyboard with inline style","input":{"script_file_id":"ast_abc123","style_reference_prompt":"super 8, grainy, domestic realism","aspect_ratio":"16:9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"shot_count":{"type":"number","description":"Number of storyboard frames generated."},"estimated_duration_seconds":{"type":"number","description":"Total estimated video duration in seconds."},"saved_files":{"type":"array","items":{"type":"object","properties":{"file_id":{"type":"string","description":"Pass to file_read for per-shot frame_url and seedance_prompt."},"name":{"type":"string"},"url":{"type":"string","description":"Show to user."}}}}}},"returns":"Storyboard file URL — show to user. Use file_read with file_id to get per-shot frame_url and seedance_prompt for video generation."}],"workflow":["generate_storyboard"],"icon":"/icons/storyboard-generator.webp","changelog":[{"version":"0.01","date":"2026-04-23","changes":["Initial release"]}],"premadePrompt":"Generate a storyboard from my enhanced script [paste script file URL or ID]. Use my [style reference name] style reference and [persona name] persona.","usesPersonas":true,"usesScenes":true,"usesProducts":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["generate_storyboard"],"acceptsImageReferences":true,"imageReferenceSkills":["generate_storyboard"],"imageReferencesKey":"image_urls","imageReferencesMax":4,"brain":{"instructions":"When brain knowledge is available:\n  - Apply brand visual style and cinematic aesthetic to each frame's generation prompt\n  - Use persona appearance details to maintain character consistency across frames\n  - Reference product details accurately in subject prompts\n  - Apply audience and platform context to framing and composition choices","produces":["video_insights","creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"put-yourself-in-a-movie","displayName":"Put Yourself in a Movie","subtitle":"Drop in a photo and get a 12-second cinematic movie clip","about":"**Put Yourself in a Movie** takes a photo of any person and drops them into a cinematic movie scene — matched lighting, film-style camera work, and genre-appropriate atmosphere. The result is a short video clip that looks like it was pulled straight from a real film.\n\nPick your genre and the tool handles everything: action sequences, tense thrillers, romantic moments, sci-fi settings, horror scenes, heist setups, or dramatic drama. It's made for sharing — the kind of clip people send because it genuinely surprises them.\n\n### What you can do\n- **create** — place a person from a photo into a 5-10 second cinematic movie clip in the chosen genre, with matched lighting, camera work, and atmosphere\n\n### Who it's for\nPeople who want to create entertaining content to share with friends, brands running social campaigns and viral activations, event organizers creating memorable personalized keepsakes, and creators who want to put themselves or their audience into cinematic scenarios.\n\n### How to use it\n1. Call **create** with the URL of a photo of the person to place in the scene.\n2. Choose a genre: action, thriller, romance, sci-fi, horror, drama, or heist.\n3. Optionally pass a scene_setting to specify the location, e.g. \"rainy city rooftop\" or \"spaceship bridge\".\n4. Set aspect_ratio to 9:16 for mobile-first vertical video, or 16:9 for widescreen cinematic output.\n\n### Getting started\nPass a clear photo URL and a genre to **create** — the tool handles the rest and returns a video clip in around 1-2 minutes.","version":"0.02","categories":["media","ai"],"currency":"USD","skills":[{"name":"create","displayName":"Create Movie Clip","description":"Place a person from a photo into a cinematic movie scene. Returns a short video clip with matched genre lighting, camera work, and atmosphere.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"genre":{"type":"string","enum":["action","thriller","romance","sci-fi","horror","drama","heist"],"description":"Movie genre that sets the scene style, lighting, and atmosphere. Defaults to action."},"scene_setting":{"type":"string","description":"Optional scene setting, e.g. \"rainy city rooftop\", \"spaceship bridge\". Leave blank to use the genre default."},"aspect_ratio":{"type":"string","enum":["16:9","9:16"],"description":"Output video aspect ratio. 16:9 for widescreen cinematic, 9:16 for vertical/mobile. Defaults to 16:9."}},"required":["image_url"]},"annotations":{"execution":{"estimatedSeconds":120,"timeoutSeconds":360,"mode":"io"}},"examples":[{"description":"Place a person in an action movie scene","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","genre":"action"}},{"description":"Place a person in a sci-fi scene on a spaceship bridge","input":{"image_url":"https://toolrouter.com/demo-ugc-skincare.webp","genre":"sci-fi","scene_setting":"spaceship bridge overlooking a nebula","aspect_ratio":"16:9"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"video_url":{"type":"string","description":"URL of the generated movie clip"},"genre":{"type":"string","description":"Genre used for the scene"},"scene_setting":{"type":"string","description":"Custom scene setting if provided"},"aspect_ratio":{"type":"string","description":"Aspect ratio of the output video"},"prompt":{"type":"string","description":"Full prompt used for generation"},"duration_seconds":{"type":"number","description":"Video duration in seconds"},"model":{"type":"string","description":"Model key used for generation"},"model_name":{"type":"string","description":"Display name of the model used"}}},"returns":"Video URL of the cinematic movie clip, genre, scene setting, prompt used, duration, and model details"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["create","list_models"],"icon":"/icons/put-yourself-in-a-movie.webp","changelog":[{"version":"0.01","date":"2026-04-07","changes":["Initial release"]},{"version":"0.02","date":"2026-04-14","changes":["Accept personas, scenes, outfits and style references from your file library"]}],"premadePrompt":"Put this person in a movie: [photo URL]. Genre: action thriller.","usesPersonas":true,"usesScenes":true,"usesOutfits":true,"usesStyleReferences":true,"styleReferenceSkills":["create"],"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"social-content-planner","displayName":"Social Content Planner","subtitle":"AI-powered content calendars","about":"**Social Content Planner** turns any company name or website into a research-backed content calendar across TikTok, Instagram, LinkedIn, and YouTube. It does the competitor research, audience analysis, and hook writing — you get a ready-to-use calendar with dated posts and creative briefs.\n\nMost content calendars are generic. This one is built specifically around your company's market, audience pain points, and what's already working for competitors. The output includes hooks and briefs for every post, not just topics.\n\n### What you can do\n- Generate a full content calendar for any company from just a URL or name\n- Cover TikTok, Instagram, LinkedIn, and YouTube in one plan\n- Get dated posts with hooks and creative briefs — not just topic ideas\n- Choose your calendar duration: one week, two weeks, or a month\n- Filter to specific platforms if you only want certain channels\n\n### Who it's for\nMarketing teams who need a structured content plan fast. Founders doing their own social media who don't have time to research every post. Agencies building content strategies for clients. Anyone who wants a starting point that's grounded in real market research rather than generic advice.\n\n### How to use it\n1. Use **create_plan** with your company name or website URL\n2. Set the **duration** for how long the calendar should cover (default is 2 weeks)\n3. Optionally filter **platforms** to just the channels you care about\n4. The plan runs for 5–10 minutes — it returns a job ID, poll with get_job_result until complete\n\n### Getting started\nNo setup needed — pass your company URL or name and the tool handles the rest.","version":"0.01","categories":["marketing","ai"],"currency":"USD","skills":[{"name":"create_plan","displayName":"Create Content Plan","description":"Research a company's market, audience pain points, and content landscape, then generate a dated content calendar with hooks and briefs across TikTok, Instagram, LinkedIn, and YouTube. ⏱ Takes 5-10 minutes. Runs asynchronously — returns a job_id, poll with get_job_result until complete.","inputSchema":{"type":"object","properties":{"company":{"type":"string","description":"Company name or website URL to research and plan content for"},"duration":{"type":"string","description":"How long the content calendar should cover (e.g. \"1 week\", \"2 weeks\", \"1 month\")","default":"2 weeks"},"platforms":{"type":"array","items":{"type":"string","enum":["tiktok","instagram","linkedin","youtube"]},"description":"Platforms to include in the calendar. Defaults to all four."}},"required":["company"]},"annotations":{"execution":{"estimatedSeconds":600,"timeoutSeconds":3600,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Create a 2-week content plan for a company by URL","input":{"company":"https://stripe.com"}},{"description":"Create a 1-month plan for a company by name, LinkedIn and YouTube only","input":{"company":"Notion","duration":"1 month","platforms":["linkedin","youtube"]}},{"description":"Create a 1-week TikTok-only plan","input":{"company":"Gymshark","duration":"1 week","platforms":["tiktok"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"company_profile":{"type":"object","description":"Company identity, audience, positioning from research","properties":{"name":{"type":"string","description":"Company name"},"industry":{"type":"string","description":"Industry or sector"},"audience":{"type":"string","description":"Target audience description"},"positioning":{"type":"string","description":"Market positioning"},"existing_content":{"type":"string","description":"Summary of current content strategy"}}},"pain_points":{"type":"array","description":"Audience pain points discovered through research","items":{"type":"object","properties":{"pain_point":{"type":"string","description":"The pain point"},"severity":{"type":"string","description":"high, medium, or low"},"source":{"type":"string","description":"Citation or research basis"}}}},"hooks":{"type":"array","description":"Content hooks generated from pain points","items":{"type":"object","properties":{"hook":{"type":"string","description":"The opening line or headline"},"pain_point":{"type":"string","description":"Which pain point it addresses"},"platform_fit":{"type":"array","items":{"type":"string"},"description":"Best platforms for this hook"},"content_format":{"type":"string","description":"Content format type"},"angle":{"type":"string","description":"Content angle"}}}},"calendar":{"type":"array","description":"Dated content calendar entries","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date string"},"day_of_week":{"type":"string","description":"Day name"},"platform":{"type":"string","description":"Platform for this post"},"content_type":{"type":"string","description":"Platform-native format"},"hook":{"type":"string","description":"The opening line"},"brief":{"type":"string","description":"2-3 sentence post description"},"pain_point":{"type":"string","description":"Pain point addressed"}}}},"duration":{"type":"string","description":"Calendar duration"},"total_posts":{"type":"number","description":"Total posts in the calendar"},"platforms_covered":{"type":"array","items":{"type":"string"},"description":"Platforms included"}}},"returns":"Company profile, pain points, content hooks, and a dated multi-platform calendar with hooks and briefs for each post."}],"workflow":["create_plan"],"icon":"/icons/social-content-planner.webp","changelog":[{"version":"0.01","date":"2026-04-09","changes":["Initial release — research-backed content calendars across TikTok, Instagram, LinkedIn, YouTube"]}],"premadePrompt":"Use ToolRouter to create a social content plan for [company name or URL]. Give me a 2-week content calendar across TikTok, Instagram, LinkedIn, and YouTube with hooks and briefs for each post.","brain":{"instructions":"When brain knowledge is available, use it to align content hooks with brand voice, ensure pain points match the company's actual customer base, and maintain consistency with existing content strategy.","produces":["content_strategy"]},"requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}]},{"name":"product-placement-photo","displayName":"Product Placement Photo","subtitle":"Viral product photo with person","about":"**Product Placement Photo** generates viral e-commerce poster images — a person modeling your product, optional bold marketing copy, three proven viral aesthetics. Output looks like a high-impact campaign poster you would see on X, TikTok, or Instagram.\n\nMost product photo tools generate generic studio shots or ask you to brief a designer. This one bakes in three proven viral compositions and fills them with your real product photo, your model, and your copy.\n\n### What you can do\n- Drop in a real product photo (URL or saved file) and a persona (saved or described in plain English)\n- Swap the persona's wardrobe — pass a saved outfit or describe one inline\n- Control framing — pick a shot zoom (close-up, half body, full body, wide) and camera angle (front, three-quarter, side profile, etc.)\n- Pick a visual style:\n  - **infographic** — AirPods-style stat poster: close-up product, person mid-ground, headline, feature, two stat callouts\n  - **surreal_oversized** — Crocs-style: monochrome studio, giant product as set piece, person leaning on it, single bottom tagline\n  - **editorial_zine** — Nike-style: dark moody editorial, body part with product, orbiting micro-text, dual-weight bold headline, scattered accent symbols\n- Toggle copy on/off for clean shots with no text\n- Pick any aspect ratio for the platform you're posting on\n- GPT Image 2 by default — renders typography accurately\n\n### Who it's for\nDTC brands launching a product. Marketing teams that need a viral poster without booking a photoshoot. Solo founders who want a polished launch image in one prompt.\n\n### How to use it\n1. Get your product image — saved product or a public URL\n2. Pick a persona — saved or describe in a sentence\n3. Choose a style — infographic, surreal_oversized, or editorial_zine\n4. Set include_copy true for text overlays, false for a clean shot. Fill in the relevant copy fields per style.\n5. Run **generate** — portrait poster with permanent shareable link\n\n### Getting started\nTry with a saved product and persona, or describe both in plain English. GPT Image 2 is the default because it renders typography well — other image models tend to distort the text overlays.","version":"0.01","categories":["marketing","media"],"currency":"USD","skills":[{"name":"generate","displayName":"Generate Placement Photo","description":"Generate a viral product placement photo — a person modeling your product, with optional copy overlays (headline, product label, feature, two stats). Requires a product image and a persona. Default 2:3 portrait, GPT Image 2. ⏱ 30-90 seconds.","inputSchema":{"type":"object","properties":{"product_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"persona_description":{"type":"string","description":"Plain-English description of the model. Auto-filled from a saved persona. Required if no saved persona is passed."},"persona_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"outfit_description":{"type":"string","description":"Override the persona's outfit. Auto-filled from a saved outfit. e.g. \"oversized white tee, baggy denim shorts, white sneakers\"."},"outfit_image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"shot_zoom":{"type":"string","enum":["close_up","medium","half_body","full_body","wide"],"description":"Camera zoom. close_up = face + product. medium = head and shoulders. half_body = waist up. full_body = head to toe. wide = full environment shot."},"camera_angle":{"type":"string","enum":["front","three_quarter","side_profile","low_angle","high_angle","overhead"],"description":"Camera angle / perspective. Default varies by style. Overrides any angle implied by persona_description."},"headline":{"type":"string","description":"Big bold headline word. infographic: background brand (AIRPODS). surreal: brand (CROCS). editorial_zine: first headline word (MOVE)."},"product_label":{"type":"string","description":"Short label near the headline. infographic: product name (Apple Pods Pro 3). editorial_zine: second lighter headline word (BEYOND)."},"feature_line":{"type":"string","description":"Mid-frame feature callout. infographic: feature line. editorial_zine: top nav phrases separated by commas (PURE COMFORT, ALWAYS AHEAD)."},"stat_a_number":{"type":"string","description":"Big number for the first stat (e.g. \"30\"). Used when include_copy is true."},"stat_a_label":{"type":"string","description":"Label under the first stat (e.g. \"hours of battery life.\")."},"stat_b_number":{"type":"string","description":"Big number for the second stat (e.g. \"1\"). Used when include_copy is true."},"stat_b_label":{"type":"string","description":"Label under the second stat (e.g. \"year warranty.\")."},"include_copy":{"type":"boolean","description":"Overlay marketing copy (headline, label, feature, stats). Set false for a clean shot with no text. Default true.","default":true},"style":{"type":"string","enum":["infographic","surreal_oversized","editorial_zine"],"description":"Visual style. See about for full descriptions. infographic | surreal_oversized | editorial_zine. Default infographic.","default":"infographic"},"tagline":{"type":"string","description":"Bottom tagline. surreal: bottom-center sentence. editorial_zine: slogan + sub-line (DEFINE YOUR STRIDE — Speed is a mindset)."},"credit_text":{"type":"string","description":"Optional small top-right credit line. surreal_oversized: \"Designed with ChatGPT\". editorial_zine: brand wordmark text like \"Nike\"."},"orbit_text":{"type":"string","description":"Repeated phrase shown orbiting the product at angles (editorial_zine only). Example: \"THE ONLY LIMITS ARE THE ONES YOU SET FOR YOURSELF\"."},"background_color":{"type":"string","description":"Studio backdrop color hint, e.g. \"soft sky blue\", \"warm cream\", \"matte charcoal\". Defaults: light blue (surreal), light gray (infographic)."},"aspect_ratio":{"type":"string","enum":["2:3","3:4","1:1","9:16","4:5"],"description":"Output aspect ratio. Default 2:3 for infographic, 3:4 for surreal_oversized and editorial_zine."},"layout_notes":{"type":"string","description":"Free-form layout overrides — composition, positioning, mood, lighting tweaks. Takes priority over defaults. e.g. \"headline on the left, warmer light\"."},"seed":{"type":"number","description":"Random seed for reproducible results."}},"required":["product_image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":60,"timeoutSeconds":240,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Full infographic style with copy — AirPods-style viral poster","input":{"product_image_url":"https://toolrouter.com/demo-product-photo.webp","persona_description":"Young woman with freckles and wavy pastel-pink hair, wearing a vibrant lime-green knit beanie and a black-and-white striped long-sleeve shirt, smiling at the camera","headline":"AIRPODS","product_label":"Apple Pods Pro 3","feature_line":"Premium sound and noise cancellation","stat_a_number":"30","stat_a_label":"hours of battery life.","stat_b_number":"1","stat_b_label":"year warranty.","aspect_ratio":"2:3"}},{"description":"Clean placement shot with no text overlays","input":{"product_image_url":"https://toolrouter.com/demo-product-photo.webp","persona_description":"Confident young man with shoulder-length curly hair, warm brown skin, and a lightly textured beard, wearing a soft beige hoodie","include_copy":false,"aspect_ratio":"3:4"}},{"description":"Surreal oversized style — Crocs-style giant product as set piece","input":{"product_image_url":"https://toolrouter.com/demo-product-photo.webp","persona_description":"Fashion model with long dark hair, dressed in a clean all-white coordinated sweatshirt and wide-leg trousers, leaning her back against the giant product in a relaxed posture, facing right in profile with a serene expression","style":"surreal_oversized","headline":"CROCS","tagline":"Made for comfort, worn for confidence. Because life feels better when your feet stop complaining.","credit_text":"Designed with ChatGPT","background_color":"soft sky blue","aspect_ratio":"3:4"}},{"description":"Different outfit + close-up zoom — same persona, swapped wardrobe","input":{"product_image_url":"https://toolrouter.com/demo-product-photo.webp","persona_description":"Young woman with freckles and wavy pastel-pink hair, smiling warmly at the camera","outfit_description":"Oversized cream knitted sweater, gold hoop earrings, no hat","shot_zoom":"close_up","camera_angle":"three_quarter","include_copy":false,"aspect_ratio":"1:1"}},{"description":"Editorial zine style — Nike-style dark moody editorial with orbiting text","input":{"product_image_url":"https://toolrouter.com/demo-product-photo.webp","persona_description":"Male leg wearing a crisp white athletic crew sock, suspended mid-air at a 45-degree diagonal angle, sneaker on the foot","style":"editorial_zine","headline":"MOVE","product_label":"BEYOND","feature_line":"PURE COMFORT, ALWAYS AHEAD, THE FUTURE IS NOW","orbit_text":"THE ONLY LIMITS ARE THE ONES YOU SET FOR YOURSELF","tagline":"DEFINE YOUR STRIDE — An inspiring reminder that speed is a mindset. Every step forward is a statement.","credit_text":"NIKE","background_color":"near-black charcoal with subtle yellow graffiti texture","aspect_ratio":"3:4"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"image_path":{"type":"string","description":"Local path — auto-uploaded to permanent URL by the framework"},"image_url":{"type":"string","description":"Permanent image URL"},"image_page":{"type":"string","description":"Permanent shareable download page — always show this to the user"},"model":{"type":"string","description":"Model used to generate the image"},"style":{"type":"string","description":"Visual style applied (infographic or surreal_oversized)"},"aspect_ratio":{"type":"string","description":"Aspect ratio of the output"},"include_copy":{"type":"boolean","description":"Whether copy overlays were rendered"},"seed":{"type":"number","description":"Seed used for the generation"},"raw_cost":{"type":"number","description":"Cost in USD for this generation"}}},"returns":"Generated placement photo with permanent URL and shareable download page. Always show image_page to the user."}],"workflow":["generate"],"icon":"/icons/product-placement-photo.webp","changelog":[{"version":"0.01","date":"2026-04-25","changes":["Initial release — viral product placement photo with persona and product, optional marketing copy overlays, GPT Image 2 by default","Add surreal_oversized style — Crocs-style monochrome studio with a giant product as a set piece, single-sentence tagline, optional credit line","Add editorial_zine style — Nike-style dark moody editorial with orbiting micro-text, dual-weight headline (MOVE/BEYOND), top nav bar phrases, and bottom slogan","Enforce safe-area margins so text never touches or is cropped by the canvas edges, and add layout_notes for agent-driven layout customization","Accept outfits from your file library, plus inline outfit_description, shot_zoom, and camera_angle controls — change wardrobe and framing per shot"]}],"premadePrompt":"Generate a viral product placement photo for [product name]. Use [a saved product / this product image URL] as the product, and [a saved persona / a young woman with pastel-pink hair and a lime-green beanie] as the model. Headline: [bold one-word brand name]. Stats: [stat 1, e.g. \"30 hours battery\"] and [stat 2, e.g. \"1 year warranty\"].","usesPersonas":true,"usesProducts":true,"usesOutfits":true,"brain":{"instructions":"When brain knowledge is available:\n    - Match the brand's voice, headline cadence, and feature claims when writing copy overlays\n    - Use brand-approved product names exactly as documented (e.g. \"AirPods Pro 3\" not \"wireless earbuds\")\n    - Apply documented brand color cues to the background gradient and prism flare palette\n    - Reference target audience demographics and styling cues when describing the persona","produces":["creative_insights","brand_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"accounts-preparer","displayName":"Accounts Preparer","subtitle":"Statutory accounts & tax filings","about":"**Accounts Preparer** turns your bank statements and receipts into submission-ready UK accounts — annual accounts for Companies House, CT600 corporation tax returns for HMRC, and Self Assessment pages for sole traders. It handles the compliance maths so you don't have to.\n\nIt covers UK micro-entities and small limited companies filing under FRS 105, and sole traders completing their income tax and Class 4 NIC calculations. Filings include box references for every figure, capital allowances with the latest rates, and automatic deadline calculations. The workflow is designed to catch classification questions before generating final output, so you review a PDF before anything is marked as filed.\n\n### What you can do\n- Start a filing session for any UK accounting period (limited company or sole trader)\n- Upload bank statements, invoices, and receipts for automated parsing\n- Classify transactions with AI assistance, resolving ambiguous items manually\n- Generate profit and loss, balance sheet, and tax computations\n- Produce a review PDF for accountant sign-off before final output\n- Generate submission-ready CT600 + iXBRL (limited companies) or SA103 XML (sole traders)\n- Export structured data for your own records\n\n### Who it's for\nUK freelancers and sole traders filing Self Assessment. Directors of small limited companies preparing annual accounts and corporation tax returns. Accountants automating routine compliance work for micro-entity clients.\n\n### How to use it\n1. Call **start_filing** with your entity type, accounting period dates, and company name\n2. Upload documents using **upload_documents** — repeat for each batch, set type_hint for faster parsing\n3. Run **classify_transactions** and resolve any flagged items\n4. Call **generate_accounts** to compute P&L, balance sheet, and tax\n5. Review the PDF from **generate_review_pdf**, then call **generate_filing** with reviewed: true\n\n### Getting started\nBegin with **start_filing** — it will tell you exactly which documents to upload based on your entity type and period.","version":"0.03","categories":["finance","productivity"],"currency":"USD","skills":[{"name":"start_filing","displayName":"Start Filing","description":"Create a filing session. Resolves jurisdiction, determines required filings and documents, returns a checklist of what to upload.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO country code (e.g. \"GB\")"},"entity_type":{"type":"string","description":"\"limited_company\" or \"sole_trader\""},"period_start":{"type":"string","description":"Accounting period start (YYYY-MM-DD)"},"period_end":{"type":"string","description":"Accounting period end (YYYY-MM-DD)"},"entity_name":{"type":"string","description":"Company or trading name"},"identifier":{"type":"string","description":"UTR or company number"},"company_number":{"type":"string","description":"Companies House registration number"},"vat_registered":{"type":"boolean","description":"Whether VAT registered"},"has_employees":{"type":"boolean","description":"Whether has employees on payroll"},"associated_companies":{"type":"number","description":"Number of associated companies (affects corp tax thresholds)"},"is_first_period":{"type":"boolean","description":"First accounting period since incorporation"},"accounting_standard":{"type":"string","description":"\"FRS105\" or \"FRS102\" (auto-selected if omitted)"}},"required":["country","entity_type","period_start","period_end","entity_name"]},"annotations":{"execution":{"estimatedSeconds":3}},"examples":[{"description":"Start UK limited company accounts for year ending 31 March 2026","input":{"country":"GB","entity_type":"limited_company","period_start":"2025-04-01","period_end":"2026-03-31","entity_name":"Acme Widgets Ltd","company_number":"12345678"}},{"description":"First-period accounts for a newly incorporated company","input":{"country":"GB","entity_type":"limited_company","period_start":"2025-01-15","period_end":"2026-03-31","entity_name":"New Ventures Ltd","is_first_period":true}},{"description":"Start sole trader self assessment for tax year 2025/26","input":{"country":"GB","entity_type":"sole_trader","period_start":"2025-04-06","period_end":"2026-04-05","entity_name":"Jane Smith Trading","identifier":"1234567890"}}],"pricing":"paid","returns":"Session ID, accounting standard, required documents checklist, and submission deadlines for each filing authority"},{"name":"upload_documents","displayName":"Upload Documents","description":"Upload financial documents (bank statements, invoices, receipts). Extracts transactions and flags low-confidence items. Repeatable — call multiple times as documents become available.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from start_filing"},"documents":{"type":"array","description":"List of documents to upload and extract transactions from","items":{"type":"object","properties":{"url":{"type":"string","description":"Document as a ToolRouter file ID or hosted HTTP(S) URL"},"type_hint":{"type":"string","description":"Optional: bank_statement_csv, sales_invoice, purchase_invoice, receipt, trial_balance_csv"}},"required":["url"]}}},"required":["session_id","documents"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Upload a CSV bank statement for the year","input":{"session_id":"session_xyz","documents":[{"url":"https://...bank-statement.csv","type_hint":"bank_statement_csv"}]}},{"description":"Upload multiple documents: bank statement and purchase invoices","input":{"session_id":"session_xyz","documents":[{"url":"https://...bank.csv","type_hint":"bank_statement_csv"},{"url":"https://...invoices.pdf","type_hint":"purchase_invoice"}]}}],"pricing":"paid","returns":"Extracted transactions with dates, descriptions, amounts, confidence scores, and a list of items needing clarification"},{"name":"classify_transactions","displayName":"Classify Transactions","description":"Categorise all transactions to chart of accounts codes using double-entry bookkeeping. Surfaces ambiguous items as questions. Repeatable — call again with answers.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from start_filing"},"transactions":{"type":"array","description":"Transactions from upload_documents to classify","items":{"type":"object","properties":{"id":{"type":"string","description":"Transaction ID (auto-assigned if omitted)"},"date":{"type":"string","description":"Transaction date (YYYY-MM-DD)"},"description":{"type":"string","description":"Transaction description from bank"},"amount_pence":{"type":"number","description":"Amount in pence — positive = money in, negative = money out"},"confidence":{"type":"number","description":"Extraction confidence 0–1"}},"required":["date","description","amount_pence"]}},"manual_classifications":{"type":"array","description":"User-supplied classifications to apply before LLM (e.g. answers to questions from a prior call)","items":{"type":"object","properties":{"transaction_id":{"type":"string","description":"ID of the transaction to classify"},"account_code":{"type":"string","description":"Chart of accounts code (e.g. \"6000\" for turnover)"},"notes":{"type":"string","description":"Optional notes for this classification"}},"required":["transaction_id","account_code"]}}},"required":["session_id"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Classify all transactions extracted from uploaded bank statements","input":{"session_id":"session_xyz","transactions":[{"date":"2025-04-15","description":"Client payment","amount_pence":500000,"confidence":1}]}}],"pricing":"paid","returns":"Classified transactions with account codes, trial balance, and any ambiguous items surfaced as questions for the user to answer"},{"name":"generate_accounts","displayName":"Generate Accounts","description":"Compute P&L, balance sheet, and corporation tax from the classified trial balance. All arithmetic uses integer pence — no floating-point rounding errors.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from start_filing"},"entity_class":{"type":"string","description":"\"limited_company\" or \"sole_trader\" — determines tax computation method"},"trial_balance":{"type":"array","description":"Trial balance from classify_transactions","items":{"type":"object"}},"dividends_paid_pence":{"type":"number","description":"Total dividends declared in period (pence)"},"directors_loan_balance_pence":{"type":"number","description":"Directors loan balance at period end — positive if overdrawn (pence)"},"fixed_assets":{"type":"array","description":"Fixed asset additions for capital allowances calculation","items":{"type":"object"}},"period_months":{"type":"number","description":"Accounting period length in months (default 12)"},"associated_companies":{"type":"number","description":"Number of associated companies (affects marginal relief thresholds)"},"opening_retained_earnings_pence":{"type":"number","description":"Opening retained earnings balance (pence)"},"trading_allowance_claimed":{"type":"boolean","description":"Sole trader only: claim £1,000 trading allowance instead of actual expenses"},"other_income_pence":{"type":"number","description":"Sole trader only: other income (employment, savings) for tax band calculation (pence)"}},"required":["session_id","trial_balance"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Compute accounts from the trial balance produced by classify_transactions","input":{"session_id":"session_xyz","trial_balance":[]}}],"pricing":"paid","returns":"P&L account, balance sheet, and corporation tax computation including marginal relief where applicable"},{"name":"generate_review_pdf","displayName":"Generate Review PDF","description":"Produce an A4 PDF of the statutory accounts for director review and sign-off before submitting to Companies House and HMRC.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from start_filing"},"company_name":{"type":"string","description":"Full registered company name"},"company_number":{"type":"string","description":"Companies House registration number"},"period_start":{"type":"string","description":"Accounting period start (YYYY-MM-DD)"},"period_end":{"type":"string","description":"Accounting period end (YYYY-MM-DD)"},"directors":{"type":"array","description":"List of director names for the approval statement","items":{"type":"string"}},"pnl":{"type":"object","description":"P&L object from generate_accounts"},"bs":{"type":"object","description":"Balance sheet object from generate_accounts"},"tax":{"type":"object","description":"Tax computation object from generate_accounts"},"flagged_items":{"type":"array","description":"Optional items to highlight for director attention","items":{"type":"object"}}},"required":["session_id","company_name","period_start","period_end","pnl","bs","tax"]},"annotations":{"execution":{"estimatedSeconds":15,"timeoutSeconds":60,"mode":"cpu"}},"examples":[{"description":"Generate a review PDF for Acme Widgets Ltd before the director signs off","input":{"session_id":"session_xyz","company_name":"Acme Widgets Ltd","company_number":"12345678","period_start":"2025-04-01","period_end":"2026-03-31","directors":["Jane Smith"],"pnl":{},"bs":{},"tax":{}}}],"pricing":"paid","returns":"Path to the generated A4 PDF and page count — present to the user for review before calling generate_filing"},{"name":"generate_filing","displayName":"Generate Filing","description":"Produce submission-ready filing package: iXBRL annual accounts for Companies House and CT600 XML for HMRC. Requires prior review approval.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from start_filing"},"reviewed":{"type":"boolean","description":"Must be true — confirms the user has reviewed the PDF from generate_review_pdf"},"entity_class":{"type":"string","description":"\"limited_company\" or \"sole_trader\" — determines output format"},"company_name":{"type":"string","description":"Full registered company name (limited_company only)"},"company_number":{"type":"string","description":"Companies House registration number (limited_company only)"},"taxpayer_name":{"type":"string","description":"Full legal name of the taxpayer (sole_trader only)"},"business_name":{"type":"string","description":"Trading name of the business (sole_trader only)"},"business_description":{"type":"string","description":"Short description of the business activity (sole_trader only)"},"utr":{"type":"string","description":"Unique Taxpayer Reference (10 digits)"},"period_start":{"type":"string","description":"Accounting period start (YYYY-MM-DD)"},"period_end":{"type":"string","description":"Accounting period end (YYYY-MM-DD)"},"directors":{"type":"array","description":"List of director names for the accounts approval statement (limited_company only)","items":{"type":"string"}},"pnl":{"type":"object","description":"P&L object from generate_accounts"},"bs":{"type":"object","description":"Balance sheet object from generate_accounts"},"tax":{"type":"object","description":"Tax computation object from generate_accounts"},"income_tax":{"type":"object","description":"Income tax object from generate_accounts (sole_trader only)"},"submission_notes":{"type":"string","description":"Optional notes to include with the filing package"}},"required":["session_id","reviewed","period_start","period_end","pnl","bs","tax"]},"annotations":{"execution":{"estimatedSeconds":10,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Generate the final CT600 and iXBRL filing after the director has reviewed the accounts","input":{"session_id":"session_xyz","reviewed":true,"entity_class":"limited_company","company_name":"Acme Widgets Ltd","company_number":"12345678","utr":"1234567890","period_start":"2025-04-01","period_end":"2026-03-31","pnl":{},"bs":{},"tax":{}}},{"description":"Generate SA103 filing for a sole trader after review","input":{"session_id":"session_xyz","reviewed":true,"entity_class":"sole_trader","taxpayer_name":"Jane Smith","utr":"1234567890","business_name":"Jane Smith Consulting","period_start":"2025-04-06","period_end":"2026-04-05","pnl":{},"bs":{},"tax":{},"income_tax":{}}}],"pricing":"paid","returns":"Filing package with CT600 XML for HMRC and FRS105 iXBRL for Companies House, plus file paths for each submission"},{"name":"generate_export","displayName":"Export Accounts","description":"Export the computed accounts as an Excel workbook or CSV files — ready to share with your accountant or import into your accounting software.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"Session ID from start_filing"},"format":{"type":"string","description":"\"excel\" (default), \"csv\", or \"both\""},"pnl":{"type":"object","description":"P&L object from generate_accounts"},"bs":{"type":"object","description":"Balance sheet object from generate_accounts"},"tax":{"type":"object","description":"Tax computation object from generate_accounts"},"trial_balance":{"type":"array","description":"Optional trial balance lines to include as a separate sheet/file","items":{"type":"object"}}},"required":["session_id","pnl","bs","tax"]},"annotations":{"execution":{"estimatedSeconds":10,"timeoutSeconds":60,"mode":"io"}},"examples":[{"description":"Export accounts as an Excel workbook","input":{"session_id":"session_xyz","format":"excel","pnl":{},"bs":{},"tax":{}}},{"description":"Export accounts as CSV files","input":{"session_id":"session_xyz","format":"csv","pnl":{},"bs":{},"tax":{}}},{"description":"Export both Excel and CSV, including the trial balance","input":{"session_id":"session_xyz","format":"both","pnl":{},"bs":{},"tax":{},"trial_balance":[]}}],"pricing":"paid","returns":"File paths for the exported Excel workbook (.xlsx) and/or CSV files for P&L, balance sheet, tax computation, and trial balance"}],"workflow":["start_filing","upload_documents","classify_transactions","generate_accounts","generate_review_pdf","generate_filing","generate_export"],"icon":"/icons/accounts-preparer.webp","changelog":[{"version":"0.01","date":"2026-04-03","changes":["Initial release: UK micro-entity (FRS105) limited company accounts — CT600 draft computation, annual accounts (iXBRL), and review PDF"]},{"version":"0.02","date":"2026-04-03","changes":["Added Corporation Tax payment deadline (9 months and 1 day after period end) as a separate filing requirement","Corporation Tax and Self Assessment outputs now clearly labelled as draft computation summaries for accountant review; all figures include CT600/SA103F box references","Added full sole trader support: income tax (2025/26 rates with personal allowance taper), Class 4 NIC, SA103 Self Employment pages including NIC figures"]},{"version":"0.03","date":"2026-04-04","changes":["S455 tax rate updated to 35.75% for loans made on or after 6 April 2026 (Finance Act 2025 — dividend upper rate increase); pre-2026 loans remain at 33.75%","Capital allowances: main pool writing-down allowance reduced from 18% to 14% from 1 April 2026 (Finance Act 2025); hybrid rate computed automatically for periods straddling that date","Capital allowances: new 40% first-year allowance (new_fya pool) added for main rate expenditure from 1 January 2026 — available where full expensing does not apply","FRS 105 thresholds updated for accounting periods starting on or after 6 April 2025: turnover threshold raised to £1,000,000, balance sheet threshold raised to £500,000 (SI 2024/1303)","Income tax band calculation corrected for the personal allowance taper zone (income £100,000–£125,140): higher rate band now correctly widens as the personal allowance reduces","Payments on account flag now correctly applies both TMA 1970 s59A conditions: liability over £1,000 AND less than 80% collected at source","Self Assessment filing deadlines now derived from the tax year end (5 April), not the accounting period end — fixes deadline for non-5-April period ends under basis period reform","Capital allowances: full expensing disposals now generate a balancing charge equal to disposal proceeds; accounting periods up to 18 months (first-year companies) now accepted","First-period caveat: start_filing now warns that Companies House allows 21 months from incorporation for first accounts (Companies Act 2006 s394A)","iXBRL: added required xmlns:xlink namespace declaration; transformation format corrected to ixt:num-dot-decimal (2020-02-12 spec)"]}],"premadePrompt":"Prepare my UK limited company accounts for the year ending 31 March 2026. I have bank statements and invoices to upload.","requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}]},{"name":"construction-manager","displayName":"Construction Manager","subtitle":"Real-time building project data for any location","about":"**Construction Manager** pulls together live, cited data for every stage of a building project — from initial property checks to contractor verification, material pricing, and blueprint generation. Worldwide coverage with UK-first depth.\n\nPlanning a build or renovation means juggling property constraints, planning history, weather windows, contractor checks, and material costs across separate websites. This tool consolidates all of it. Look up any property by address or postcode, check listed building and flood status, pull recent planning decisions nearby, verify a contractor's company status before paying a deposit, find local tradesmen, price materials, extract scope from drawings, and generate blueprint renders — all from one place.\n\n### What you can do\n- **lookup_property** — geocode any address and get property details including coordinates for downstream lookups\n- **check_property_constraints** — listed building status, conservation area, flood risk, and tree preservation orders\n- **search_planning_permits** — recent planning applications and decisions near any location\n- **get_build_weather_forecast** — activity-specific weather windows for scheduling outdoor work\n- **verify_company** — check a contractor's company registration, status, and filing history before paying\n- **find_local_tradesmen** — discover local trades for any discipline near a postcode or address\n- **find_building_materials** — live local pricing and availability for materials\n- **analyze_construction_drawings** — extract scope of works from uploaded drawings or blueprints\n- **render_blueprint** — generate floor plans, elevations, sections, and site plans from a description\n\n### Who it's for\nHomeowners planning renovations, property developers scoping sites, contractors preparing bids, and architects checking constraints. Particularly useful in the UK where listed building and planning history data is fully integrated.\n\n### How to use it\n1. Start with **lookup_property** to get coordinates for the address\n2. Run **check_property_constraints** to identify any restrictions before starting design\n3. Use **search_planning_permits** to see what's been approved nearby — useful evidence for your own application\n4. Before signing a contract, use **verify_company** with the contractor's registered company name","version":"0.02","categories":["data","productivity","search"],"currency":"USD","skills":[{"name":"lookup_property","displayName":"Look Up Property","description":"Resolve any address or postcode worldwide to a structured record with coordinates and admin areas so other skills can use the location.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Address, postcode, or place name to resolve"},"lat":{"type":"number","description":"Latitude for reverse geocoding (provide with lon)"},"lon":{"type":"number","description":"Longitude for reverse geocoding (provide with lat)"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code hint (e.g. \"GB\", \"US\", \"DE\", \"FR\") to pick the best route"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Resolve a UK postcode for a Cotswold cottage renovation","input":{"address":"GL54 1AA","country_code":"GB"}},{"description":"Resolve a US address to coordinates","input":{"address":"350 5th Ave, New York, NY 10118","country_code":"US"}},{"description":"Reverse geocode a point to an address","input":{"lat":51.8,"lon":-1.9}}],"pricing":"free","returns":"Normalized property record with lat/lon, admin levels, postcode, country, and source attribution"},{"name":"check_property_constraints","displayName":"Check Property Constraints","description":"Check all legal and regulatory constraints affecting a property — listed status, conservation area, AONB, TPO, article-4 direction, flood zone, and more.","inputSchema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude from lookup_property"},"lon":{"type":"number","description":"Longitude from lookup_property"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code — \"GB\" for full UK, \"US\" for FEMA flood zones"}},"required":["lat","lon"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check constraints for a property in the Cotswolds (UK)","input":{"lat":51.83,"lon":-1.73,"country_code":"GB"}},{"description":"Check FEMA flood zone for a US property","input":{"lat":29.95,"lon":-90.07,"country_code":"US"}}],"pricing":"free","returns":"Constraint record with listed/historic status, conservation area, protected landscape, flood zone, TPOs, article-4 directions, and other overlays, with coverage flag and source URLs"},{"name":"search_planning_permits","displayName":"Search Planning Permits","description":"Find recent planning applications or building permits near a property so you can see what councils have approved and rejected in the area.","inputSchema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude from lookup_property"},"lon":{"type":"number","description":"Longitude from lookup_property"},"radius_km":{"type":"number","description":"Search radius in kilometres (default 1)","default":1},"search":{"type":"string","description":"Keyword filter — e.g. \"rear extension\", \"loft conversion\""},"start_date":{"type":"string","description":"Include applications submitted on or after YYYY-MM-DD"},"end_date":{"type":"string","description":"Include applications submitted on or before YYYY-MM-DD"},"status":{"type":"string","description":"Filter by decision state (e.g. \"Permitted\", \"Rejected\")"},"limit":{"type":"number","description":"Max results to return (1-50, default 20)","default":20},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code hint"}},"required":["lat","lon"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find approved rear extensions near a Cotswold property","input":{"lat":51.83,"lon":-1.73,"radius_km":1,"search":"rear extension","country_code":"GB"}},{"description":"Find recent New York City permits near a property","input":{"lat":40.7,"lon":-74,"radius_km":0.5,"country_code":"US","limit":20}}],"pricing":"free","returns":"Nearby permit records with reference, description, status, decision date, distance, and link to the official notice"},{"name":"get_build_weather_forecast","displayName":"Build Weather Forecast","description":"Daily forecast with build-suitability flags for a specific activity — concrete pour, external render, roof work, external paint, or earthworks.","inputSchema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude from lookup_property"},"lon":{"type":"number","description":"Longitude from lookup_property"},"activity":{"type":"string","description":"Activity to evaluate against forecast","enum":["external_render","roof_work","concrete_pour","external_paint","earthworks","any"],"default":"any"},"start_date":{"type":"string","description":"Start date YYYY-MM-DD (defaults to today)"},"days":{"type":"number","description":"Number of days to forecast (1-16, default 7)","default":7}},"required":["lat","lon"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check when to pour a concrete slab this week","input":{"lat":51.83,"lon":-1.73,"activity":"concrete_pour","days":10}},{"description":"14-day render window in Tuscany","input":{"lat":43.77,"lon":11.25,"activity":"external_render","days":14}}],"pricing":"free","returns":"Daily forecast with min/max temperature, rain, wind, suitability flag per day, and the longest good window for the chosen activity"},{"name":"verify_company","displayName":"Verify Company","description":"Check a builder, contractor, or supplier on the official company register — status, officers, incorporation date, registered address, and outstanding charges.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Registered or trading name of the company"},"company_number":{"type":"string","description":"Registration number if known"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code (e.g. \"GB\", \"US\")"},"jurisdiction_code":{"type":"string","description":"OpenCorporates jurisdiction code if non-UK — e.g. \"us_ca\", \"us_ny\", \"fr\", \"de\""}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Verify a UK limited company by name","input":{"name":"Travis Perkins Trading Company Limited","country_code":"GB"}},{"description":"Look up a UK company by registration number","input":{"company_number":"00824821","country_code":"GB"}},{"description":"Verify a US LLC by name and state","input":{"name":"ABC Construction LLC","country_code":"US","jurisdiction_code":"us_ca"}}],"pricing":"free","returns":"Company record with legal status, officers, incorporation date, address, charges count (UK), and warnings for liquidation, dissolution, or missing accounts"},{"name":"find_local_tradesmen","displayName":"Find Local Tradesmen","description":"Find rated local tradespeople — builders, plumbers, electricians, roofers, plasterers and more — using live Google Places data with country-specific trade terms.","inputSchema":{"type":"object","properties":{"trade":{"type":"string","description":"Trade category","enum":["builder","plumber","electrician","plasterer","roofer","carpenter","tiler","decorator","groundworker","heating_engineer","kitchen_fitter","bathroom_fitter","architect","structural_engineer","surveyor","scaffolder","glazier"],"default":"builder"},"location":{"type":"string","description":"Location string (postcode, city, address)"},"lat":{"type":"number","description":"Latitude alternative to location string"},"lon":{"type":"number","description":"Longitude alternative to location string"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code — localises the search term (e.g. \"builder\" vs \"general contractor\")","default":"GB"},"job_description":{"type":"string","description":"Optional extra keywords to narrow the match"},"min_rating":{"type":"number","description":"Minimum star rating 0-5"},"limit":{"type":"number","description":"Max results (1-20, default 10)","default":10}},"required":["trade"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find highly-rated builders near a Cotswold postcode","input":{"trade":"builder","location":"GL54 1AA, UK","country_code":"GB","min_rating":4.5}},{"description":"Find a Gas Safe heating engineer by coordinates","input":{"trade":"heating_engineer","lat":51.5,"lon":-0.12,"country_code":"GB"}},{"description":"Find a US general contractor for a bathroom remodel","input":{"trade":"bathroom_fitter","location":"Austin, TX","country_code":"US"}}],"pricing":"paid","returns":"Ranked tradesperson listings with rating, review count, address, phone, website, and distance when available"},{"name":"find_building_materials","displayName":"Find Building Materials","description":"Find live prices for building materials from country-appropriate retailers — Screwfix and Travis Perkins in the UK, Home Depot and Lowes in the US, Leroy Merlin in France, and similar elsewhere.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Material description, ideally with size/spec (e.g. \"25kg bag rapid-set concrete\")"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code — routes to the regional retailers","default":"GB"},"preferred_retailers_only":{"type":"boolean","description":"If true, keep only listings from the major regional building merchants","default":false},"limit":{"type":"number","description":"Max results to return (1-20, default 10)","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Price a timber double-glazed sash window in the UK","input":{"query":"1200x900 timber double glazed sash window","country_code":"GB","preferred_retailers_only":true}},{"description":"Find a 200L heat pump water heater in Germany","input":{"query":"200L Wärmepumpen Warmwasserbereiter","country_code":"DE"}},{"description":"Find a US kitchen faucet","input":{"query":"pull down kitchen faucet stainless","country_code":"US","limit":12}}],"pricing":"paid","returns":"Ranked product listings with price, currency, supplier, availability, and link, sorted to prefer major regional merchants"},{"name":"analyze_construction_drawings","displayName":"Analyze Construction Drawings","description":"Extract a structured scope of works from architectural or construction drawings — rooms with areas, structural items, MEP scope, door and window schedule, and external works.","inputSchema":{"type":"object","properties":{"drawing_urls":{"type":"array","description":"Up to 8 drawings as ToolRouter file IDs or hosted HTTP(S) URLs (PDF or images)","items":{"type":"string"}},"project_context":{"type":"string","description":"Short context about the project that helps interpret the drawings — e.g. \"Grade II listed, full refurb\""},"units":{"type":"string","description":"Preferred output units","enum":["metric","imperial"],"default":"metric"}},"required":["drawing_urls"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Extract scope from a single floor plan drawing","input":{"drawing_urls":["https://example.com/ground-floor.pdf"],"units":"metric"}},{"description":"Analyze a set of construction drawings for a Cotswold cottage renovation","input":{"drawing_urls":["https://example.com/existing-plan.pdf","https://example.com/proposed-plan.pdf","https://example.com/elevations.pdf"],"project_context":"Grade II listed Cotswold cottage, single-storey rear extension and full refurb","units":"metric"}}],"pricing":"paid","returns":"Structured scope with rooms, structural items, MEP scope, door/window schedule, external works, and a confidence score"},{"name":"render_blueprint","displayName":"Render Blueprint","description":"Generate a clean architectural blueprint — floor plan, elevation, section, or site plan — from a text description and optional dimensions. Ideal for sketching a proposed extension or refurb before taking it to an architect.","inputSchema":{"type":"object","properties":{"description":{"type":"string","description":"Plain-English description of the building or space to draw — rooms, materials, key features"},"plan_type":{"type":"string","description":"Which drawing type to produce","enum":["floor_plan","elevation","section","site_plan"],"default":"floor_plan"},"dimensions":{"type":"object","description":"Optional overall dimensions","properties":{"width_m":{"type":"number","description":"Width in metres (or feet if units=imperial)"},"depth_m":{"type":"number","description":"Depth in metres (or feet if units=imperial)"},"height_m":{"type":"number","description":"Height in metres (or feet if units=imperial)"}}},"include_annotations":{"type":"boolean","description":"Include room labels and dimension annotations","default":true},"units":{"type":"string","description":"Unit system for dimensions","enum":["metric","imperial"],"default":"metric"}},"required":["description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":90,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Draft a floor plan for a proposed rear extension","input":{"description":"Single-storey rear kitchen extension on a Victorian terrace, open-plan kitchen-diner, bifold doors to the garden, island unit, utility cupboard","plan_type":"floor_plan","dimensions":{"width_m":6,"depth_m":4,"height_m":2.7},"units":"metric"}},{"description":"Draw a front elevation for a new build cottage","input":{"description":"1.5 storey Cotswold stone cottage, symmetrical gables, stone mullion windows, slate roof, central stone porch","plan_type":"elevation","dimensions":{"width_m":12,"height_m":7}}},{"description":"Generate a site plan for a plot purchase","input":{"description":"0.25 acre plot, existing cottage footprint to north, proposed double garage to south-east, gravel driveway from eastern road, mature oak trees along western boundary","plan_type":"site_plan"}}],"pricing":"paid","returns":"Generated blueprint image URL plus the prompt used, plan type, and description"}],"workflow":["lookup_property","check_property_constraints","search_planning_permits","get_build_weather_forecast","verify_company","find_local_tradesmen","find_building_materials","analyze_construction_drawings","render_blueprint"],"icon":"/icons/construction-manager.webp","changelog":[{"version":"0.01","date":"2026-04-10","changes":["Initial release with eight skills: lookup_property, check_property_constraints, search_planning_permits, get_build_weather_forecast, verify_company, find_local_tradesmen, find_building_materials, analyze_construction_drawings","UK first-class coverage — planning.data.gov.uk sweep for listed buildings, conservation areas, AONBs, national parks, TPOs, article-4 directions, flood zones, SSSIs, ancient woodland, green belt, world heritage sites","US coverage for FEMA flood zones and building permits in New York City, Los Angeles, Chicago, and San Francisco","Global weather forecasts with build-suitability flags for external render, roof work, concrete pour, external paint, and earthworks","Global company verification through Companies House for UK and OpenCorporates for 140+ jurisdictions"]},{"version":"0.02","date":"2026-04-13","changes":["Improved error messages across all skills — service errors no longer expose infrastructure details","Weather forecast, planning permits, drawing analysis, and blueprint skills now return clean user-facing messages when services are unavailable","Weather forecast now automatically falls back to a secondary provider when the primary is rate-limited — more reliable forecasts during high-traffic periods"]}],"premadePrompt":"I am renovating [property description at address or postcode]. Check if it is listed, flood-risk, or in a conservation area, look up any nearby approved planning applications, and give me a 10-day weather window for the first external works.","requirements":[{"name":"companies_house","type":"secret","displayName":"Companies House API Key","description":"Free UK Companies House key for deeper verify_company lookups on UK limited companies.","acquireUrl":"https://developer.company-information.service.gov.uk/","envFallback":"COMPANIES_HOUSE_API_KEY"},{"name":"opencorporates","type":"secret","displayName":"OpenCorporates API Token","description":"Free-tier OpenCorporates token used by verify_company for non-UK jurisdictions.","acquireUrl":"https://opencorporates.com/api_accounts/new","envFallback":"OPENCORPORATES_API_KEY"},{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"openweathermap","type":"secret","displayName":"OpenWeatherMap API Key","description":"Optional: provides weather forecast fallback when the primary source is rate-limited","envFallback":"OPENWEATHERMAP_API_KEY","acquireUrl":"https://home.openweathermap.org/users/sign_up"}],"credentials":[{"name":"companies_house","type":"secret","displayName":"Companies House API Key","description":"Free UK Companies House key for deeper verify_company lookups on UK limited companies.","acquireUrl":"https://developer.company-information.service.gov.uk/","envFallback":"COMPANIES_HOUSE_API_KEY"},{"name":"opencorporates","type":"secret","displayName":"OpenCorporates API Token","description":"Free-tier OpenCorporates token used by verify_company for non-UK jurisdictions.","acquireUrl":"https://opencorporates.com/api_accounts/new","envFallback":"OPENCORPORATES_API_KEY"},{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"},{"name":"openweathermap","type":"secret","displayName":"OpenWeatherMap API Key","description":"Optional: provides weather forecast fallback when the primary source is rate-limited","envFallback":"OPENWEATHERMAP_API_KEY","acquireUrl":"https://home.openweathermap.org/users/sign_up"}]},{"name":"style-finder","displayName":"Style Finder","subtitle":"Find any fashion piece for less","about":"**Style Finder** is your personal shopping assistant for fashion. Paste any product URL to find the same piece for less across hundreds of global retailers, search in plain English for anything in your size and budget, or find affordable lookalikes for any item you love.\n\nIt searches across ASOS, Farfetch, Zalando, eBay Fashion, ShopStyle, and Google Shopping simultaneously, filtering to retailers that ship to your country and showing prices in your local currency. Results come back sorted cheapest first so the best deal is always at the top. Whether you want the exact same item cheaper or a budget-friendly dupe, this tool does the legwork.\n\n### What you can do\n- **find_by_url** — paste any fashion product URL and see where to buy the same item for less, sorted cheapest first\n- **find_dupe** — get affordable lookalikes for any item from a product URL or image, filtered by price and country\n- **search** — search in plain English with brand, style, colour, size, and budget — results sorted cheapest first\n\n### Who it's for\nShoppers looking to save money on fashion, style-conscious buyers hunting dupes, and anyone who wants to find the best price before buying. Works globally with country filtering for local retailers.\n\n### How to use it\n1. If you have a product link, use **find_by_url** — paste the URL and your country code (e.g. GB, US, DE) to instantly see cheaper alternatives\n2. If you want a lookalike at a lower price, use **find_dupe** with the product URL or an image URL and set a max_price\n3. For open-ended shopping, use **search** with a natural language query like \"white linen trousers under £60 size 12\" and your country code\n4. The cheapest field in every response gives you the single best deal instantly\n\n### Getting started\nNo account or setup needed — just tell it your country code so results are filtered to retailers that ship there.","version":"0.02","categories":["search","data"],"currency":"USD","skills":[{"name":"find_by_url","displayName":"Find by URL","description":"Paste any fashion product URL — from ASOS, Zara, Net-a-Porter, Nordstrom, or anywhere else — and instantly see where you can buy the same piece for less, sorted cheapest first.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Product page URL from any fashion retailer (e.g. https://www.asos.com/...)"},"country":{"type":"string","description":"Your country code (e.g. \"GB\", \"US\", \"DE\", \"FR\", \"AU\"). Filters to retailers that ship there and shows prices in local currency."},"limit":{"type":"number","description":"Maximum results to return (1–40, default 20)","default":20}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find cheaper options for an ASOS dress in the UK","input":{"url":"https://www.asos.com/asos-design/asos-design-mini-dress/prd/123","country":"GB"}},{"description":"Find cheaper options for a Zara jacket in the US","input":{"url":"https://www.zara.com/us/en/item.html","country":"US"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"source_product":{"type":"object","description":"Extracted product details from the source URL"},"results":{"type":"array","description":"Cross-retailer price results sorted cheapest first"},"count":{"type":"number","description":"Total results found"},"cheapest":{"type":"object","description":"The single cheapest result with saving vs source price"},"sources_searched":{"type":"array","description":"Data sources searched"}}},"returns":"Price comparison across global retailers sorted cheapest first, with saving vs source price and direct buy links."},{"name":"find_dupe","displayName":"Find Dupe","description":"Find affordable lookalikes for any fashion item — paste a product URL or image URL and get similar styles at a fraction of the price, filtered by country.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Product page URL to find dupes of (e.g. a £500 designer bag page)"},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"country":{"type":"string","description":"Your country code (e.g. \"GB\", \"US\", \"DE\", \"FR\", \"AU\"). Filters to retailers that ship there and shows prices in local currency."},"max_price":{"type":"number","description":"Maximum price for alternatives in local currency"},"limit":{"type":"number","description":"Maximum results to return (1–40, default 20)","default":20}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find dupes for a designer bag from a product URL in the UK","input":{"url":"https://www.net-a-porter.com/en-gb/shop/product/bottega-veneta/bags","country":"GB","max_price":100}},{"description":"Find affordable alternatives to a Zara dress in the US","input":{"url":"https://www.zara.com/us/en/item.html","country":"US","max_price":50}}],"pricing":"free","outputSchema":{"type":"object","properties":{"source_product":{"type":"object","description":"The original item being duped"},"results":{"type":"array","description":"Affordable alternatives sorted cheapest first"},"count":{"type":"number","description":"Total alternatives found"},"best_dupe":{"type":"object","description":"The single best affordable alternative with saving vs original"},"country":{"type":"string","description":"Country filter applied"}}},"returns":"Affordable lookalikes sorted cheapest first, with saving percentage vs the original item."},{"name":"search","displayName":"Search","description":"Search for any fashion item in plain English — brand, style, colour, size, and budget all welcome. Returns the best matches sorted cheapest first from hundreds of global retailers.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language fashion search. Examples: \"white linen trousers under £60 size 12\", \"Acne Studios scarf\", \"Nike Air Force 1 Low\""},"country":{"type":"string","description":"Your country code (e.g. \"GB\", \"US\", \"DE\", \"FR\", \"AU\"). Filters to retailers that ship there and shows prices in local currency."},"max_price":{"type":"number","description":"Maximum price in local currency (extracted from query if included there)"},"min_price":{"type":"number","description":"Minimum price in local currency"},"size":{"type":"string","description":"Size filter (e.g. \"M\", \"12\", \"EU 40\") — extracted from query if included there"},"limit":{"type":"number","description":"Maximum results to return (1–40, default 20)","default":20}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find white linen trousers under £60 in the UK","input":{"query":"white linen trousers","country":"GB","max_price":60}},{"description":"Search for an Acne Studios scarf anywhere","input":{"query":"Acne Studios wool scarf","country":"GB"}},{"description":"Find Nike Air Force 1 in the US under $120","input":{"query":"Nike Air Force 1 Low white","country":"US","max_price":120}},{"description":"Search for a summer dress in Germany under €80","input":{"query":"floral summer midi dress","country":"DE","max_price":80}}],"pricing":"free","outputSchema":{"type":"object","properties":{"results":{"type":"array","description":"Fashion items sorted cheapest first"},"count":{"type":"number","description":"Total results found"},"cheapest":{"type":"object","description":"The single cheapest match"},"sources_searched":{"type":"array","description":"Data sources searched"},"query":{"type":"string","description":"Search query used"},"filters":{"type":"object","description":"Applied filters"}}},"returns":"Fashion items from global retailers sorted cheapest first, with brand, price, retailer, sizes, and direct buy links."}],"workflow":["find_by_url","find_dupe","search"],"icon":"/icons/style-finder.webp","changelog":[{"version":"0.01","date":"2026-04-10","changes":["Initial release — URL price comparison and natural language fashion search across ShopStyle, eBay, Farfetch, Zalando, ASOS, and Google Shopping globally."]},{"version":"0.02","date":"2026-04-10","changes":["Added find_dupe skill — finds affordable alternatives to any fashion item from a product URL or image, filtering out the original brand."]}],"premadePrompt":"Find me the best price for [fashion item or paste a URL] in [your country, e.g. UK or US]. Show me options sorted cheapest first, and tell me how much I could save.","requirements":[{"name":"shopstyle","type":"secret","displayName":"ShopStyle Collective API Key","description":"Publisher ID for ShopStyle Collective — covers 500+ fashion retailers across US, UK, and AU","acquireUrl":"https://shopsense.shopstyle.com/","envFallback":"SHOPSTYLE_API_KEY"},{"name":"ebay_app_id","type":"secret","displayName":"eBay App ID","description":"eBay developer App ID (Client ID) for eBay Browse API — global fashion marketplace coverage","acquireUrl":"https://developer.ebay.com/my/keys","envFallback":"EBAY_APP_ID"},{"name":"ebay_cert_id","type":"secret","displayName":"eBay Cert ID","description":"eBay developer Cert ID (Client Secret) paired with App ID for OAuth2 authentication","acquireUrl":"https://developer.ebay.com/my/keys","envFallback":"EBAY_CERT_ID"},{"name":"farfetch","type":"secret","displayName":"Farfetch API Key","description":"Farfetch Partner API key — luxury and designer fashion across 100+ countries","acquireUrl":"https://www.farfetch.com/partners/","envFallback":"FARFETCH_API_KEY"},{"name":"zalando","type":"secret","displayName":"Zalando Client ID","description":"Zalando Partner Program client ID — EU fashion across 20+ European markets","acquireUrl":"https://corporate.zalando.com/en/partners","envFallback":"ZALANDO_CLIENT_ID"},{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}],"credentials":[{"name":"shopstyle","type":"secret","displayName":"ShopStyle Collective API Key","description":"Publisher ID for ShopStyle Collective — covers 500+ fashion retailers across US, UK, and AU","acquireUrl":"https://shopsense.shopstyle.com/","envFallback":"SHOPSTYLE_API_KEY"},{"name":"ebay_app_id","type":"secret","displayName":"eBay App ID","description":"eBay developer App ID (Client ID) for eBay Browse API — global fashion marketplace coverage","acquireUrl":"https://developer.ebay.com/my/keys","envFallback":"EBAY_APP_ID"},{"name":"ebay_cert_id","type":"secret","displayName":"eBay Cert ID","description":"eBay developer Cert ID (Client Secret) paired with App ID for OAuth2 authentication","acquireUrl":"https://developer.ebay.com/my/keys","envFallback":"EBAY_CERT_ID"},{"name":"farfetch","type":"secret","displayName":"Farfetch API Key","description":"Farfetch Partner API key — luxury and designer fashion across 100+ countries","acquireUrl":"https://www.farfetch.com/partners/","envFallback":"FARFETCH_API_KEY"},{"name":"zalando","type":"secret","displayName":"Zalando Client ID","description":"Zalando Partner Program client ID — EU fashion across 20+ European markets","acquireUrl":"https://corporate.zalando.com/en/partners","envFallback":"ZALANDO_CLIENT_ID"},{"name":"rapidapi","type":"secret","displayName":"RapidAPI Key","description":"API key for RapidAPI marketplace (powers multiple data tools)","acquireUrl":"https://rapidapi.com/developer/apps","envFallback":"RAPIDAPI_KEY"}]},{"name":"dupe-finder","displayName":"Dupe Finder","subtitle":"Find lookalikes for less","about":"**Dupe Finder** surfaces affordable lookalikes for any fashion item — without the designer price tag. Paste a product URL or an image and instantly see similar styles from hundreds of global retailers, sorted cheapest first.\n\nIt searches across the web for visually similar items and filters out the original brand so every result is a genuine alternative. You can also drop in a screenshot or photo of an outfit and it will identify each item in the image, then find dupes for all of them separately.\n\n### What you can do\n- **find_dupe** — find affordable alternatives to any fashion item from a product URL or image URL, filtered to retailers that ship to your country\n- **shop_screenshot** — identify all fashion items in a photo or screenshot and search for dupes of each one\n\n### Who it's for\nBudget-conscious shoppers who want the look without the price, stylists sourcing alternatives for clients, and anyone who spots an outfit they love and wants to recreate it for less.\n\n### How to use it\n1. For a specific product, call **find_dupe** with the product page URL or a direct image URL.\n2. Pass your country code (e.g. \"GB\", \"US\", \"DE\") to filter results to local retailers and show prices in your currency.\n3. For an outfit photo or screenshot, call **shop_screenshot** — it identifies all visible items and searches for dupes of each.\n4. Review results sorted cheapest first and follow the links to buy.\n\n### Getting started\nCall **find_dupe** with a product URL and your country code to see lookalikes from retailers near you.","version":"0.01","categories":["search","data"],"currency":"USD","skills":[{"name":"find_dupe","displayName":"Find Dupe","description":"Find affordable lookalikes for any fashion item — paste a product URL or image URL and get similar styles at a fraction of the price, filtered by country.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Product page URL to find dupes of (e.g. a £500 designer bag page)"},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"country":{"type":"string","description":"Your country code (e.g. \"GB\", \"US\", \"DE\", \"FR\", \"AU\"). Filters to retailers that ship there and shows prices in local currency."},"max_price":{"type":"number","description":"Maximum price for alternatives in local currency"},"limit":{"type":"number","description":"Maximum results to return (1–40, default 20)","default":20}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Find dupes for a designer bag in the UK under £100","input":{"url":"https://www.net-a-porter.com/en-gb/shop/product/bottega-veneta/bags","country":"GB","max_price":100}},{"description":"Find affordable alternatives to a Zara dress in the US","input":{"url":"https://www.zara.com/us/en/item.html","country":"US","max_price":50}}],"pricing":"free","outputSchema":{"type":"object","properties":{"source_product":{"type":"object","description":"The original item being duped"},"results":{"type":"array","description":"Affordable alternatives sorted cheapest first"},"count":{"type":"number","description":"Total alternatives found"},"best_dupe":{"type":"object","description":"The single best affordable alternative with saving vs original"},"country":{"type":"string","description":"Country filter applied"}}},"returns":"Affordable lookalikes sorted cheapest first, with saving percentage vs the original item."},{"name":"shop_screenshot","displayName":"Shop Screenshot","description":"Upload a screenshot or photo of an outfit or fashion item — get shopping results for everything visible. Identifies all fashion items in the image then searches for each one separately.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"country":{"type":"string","description":"Your country code (e.g. \"GB\", \"US\", \"DE\", \"FR\", \"AU\"). Filters to retailers that ship there and shows prices in local currency."},"max_price":{"type":"number","description":"Maximum price per item in local currency"},"limit":{"type":"number","description":"Maximum results per identified item (1–20, default 10)","default":10}},"required":["image_url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Find where to buy items from an outfit screenshot in the UK","input":{"image_url":"https://example.com/outfit.jpg","country":"GB"}},{"description":"Shop a celebrity look from an image with a budget","input":{"image_url":"https://example.com/celebrity-look.jpg","country":"US","max_price":80}}],"pricing":"free","outputSchema":{"type":"object","properties":{"items_identified":{"type":"array","description":"Fashion items identified in the image"},"results_by_item":{"type":"array","description":"Shopping results grouped by identified item"},"country":{"type":"string","description":"Country filter applied"}}},"returns":"Shopping results grouped by fashion item identified in the image, sorted cheapest first per item."}],"workflow":["find_dupe","shop_screenshot → find_dupe"],"icon":"/icons/dupe-finder.webp","changelog":[{"version":"0.01","date":"2026-04-10","changes":["Initial release — find affordable lookalikes from a product URL or image, and identify + shop items from outfit screenshots."]}],"premadePrompt":"I found an item I love but it's too expensive — [paste product URL or describe the item]. Find me affordable lookalikes in [your country, e.g. UK or US], ideally under [your budget, e.g. £50].","requirements":[{"name":"openai","type":"secret","displayName":"OpenAI API Key","description":"Used to identify fashion items in screenshots (vision)","acquireUrl":"https://platform.openai.com/api-keys","envFallback":"OPENAI_API_KEY"},{"name":"anthropic","type":"secret","displayName":"Anthropic API Key","description":"Used to identify fashion items in screenshots (vision fallback)","acquireUrl":"https://console.anthropic.com/settings/keys","envFallback":"ANTHROPIC_API_KEY"}],"credentials":[{"name":"openai","type":"secret","displayName":"OpenAI API Key","description":"Used to identify fashion items in screenshots (vision)","acquireUrl":"https://platform.openai.com/api-keys","envFallback":"OPENAI_API_KEY"},{"name":"anthropic","type":"secret","displayName":"Anthropic API Key","description":"Used to identify fashion items in screenshots (vision fallback)","acquireUrl":"https://console.anthropic.com/settings/keys","envFallback":"ANTHROPIC_API_KEY"}]},{"name":"menu-photo","displayName":"Menu Photo","subtitle":"Pro food photos from text or uploads","about":"**Menu Photo** generates and enhances professional food photos for menus, delivery apps, and restaurant listings. Describe a dish and get a polished commercial-grade shot, or upload an existing photo and transform it — with seven photography styles and four lighting moods to match any brand aesthetic.\n\nGood food photography drives orders. But hiring a photographer for every menu item is expensive, and most restaurant owners are taking shots on their phones. This tool bridges that gap: text descriptions become professional product shots, and mediocre phone photos get transformed into something that looks like it was shot in a studio.\n\n### What you can do\n- **generate_photo** — create professional food photos from text descriptions of dishes, single or batch up to 10\n- **enhance_photo** — transform existing food photos into professional commercial-grade images, single or batch up to 10\n\n### Who it's for\nRestaurant owners building their first proper menu with quality photography. Delivery app operators who need consistent, high-quality product images at scale. Caterers and food bloggers who want polished visuals without a production budget.\n\n### How to use it\n1. Use **generate_photo** with a dish description — be specific about ingredients and presentation (e.g. \"spicy tonkotsu ramen with soft-boiled egg, nori, and spring onion\")\n2. Choose a style to match the context: \"delivery\" or \"clean\" for apps, \"moody\" for fine dining, \"overhead\" or \"rustic\" for casual\n3. For existing photos, use **enhance_photo** with the image URL and an optional food description to help the model identify the subject\n4. For batch processing, pass an items array to process up to 10 dishes in one call\n\n### Getting started\nFor delivery apps, start with style \"delivery\" and lighting \"bright\" — it's optimized for the high-contrast, clean look that converts on food delivery platforms.","version":"0.02","categories":["media","marketing"],"currency":"USD","skills":[{"name":"generate_photo","displayName":"Generate Photo","description":"Generate a professional food photo from a text description of the dish. Choose a photography style and lighting mood. Process a single dish or up to 10 in one batch. ⏱ ~20-30 seconds per image.","inputSchema":{"type":"object","properties":{"description":{"type":"string","description":"Description of the dish to photograph, e.g. \"spicy tonkotsu ramen with soft-boiled egg, nori, and spring onion\". Required for single-item mode."},"style":{"type":"string","enum":["overhead","three-quarter","hero","rustic","clean","moody","delivery"],"default":"overhead","description":"Style: overhead=flat-lay, three-quarter=natural, hero=close-up, rustic=wooden table, clean=white bg, moody=dark fine-dining, delivery=bright for apps."},"lighting":{"type":"string","enum":["natural","warm","bright","dramatic"],"default":"natural","description":"Lighting mood. natural=soft window light, warm=golden amber glow, bright=even studio light, dramatic=high-contrast shadows."},"items":{"type":"array","description":"Batch mode: array of up to 10 dishes to photograph in parallel. Each item must have a description; style and lighting are optional per-item.","items":{"type":"object","properties":{"description":{"type":"string","description":"Dish description, e.g. \"margherita pizza with fresh basil\"."},"style":{"type":"string","enum":["overhead","three-quarter","hero","rustic","clean","moody","delivery"],"description":"Photography style for this item. Defaults to overhead."},"lighting":{"type":"string","enum":["natural","warm","bright","dramatic"],"description":"Lighting mood for this item. Defaults to natural."}},"required":["description"]}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":180,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Generate an overhead shot of ramen","input":{"description":"spicy tonkotsu ramen with soft-boiled egg, nori, spring onion, and sesame seeds","style":"overhead","lighting":"natural"}},{"description":"Batch generate photos for 3 menu items","input":{"items":[{"description":"margherita pizza with fresh basil and buffalo mozzarella","style":"overhead"},{"description":"grilled salmon fillet with lemon butter sauce and asparagus","style":"three-quarter","lighting":"warm"},{"description":"chocolate lava cake with vanilla ice cream and berry coulis","style":"hero","lighting":"moody"}]}},{"description":"Generate delivery-app optimized burger photo","input":{"description":"double smash burger with cheddar, caramelized onions, and special sauce","style":"delivery","lighting":"bright"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format (gallery)"},"format_data":{"type":"object","description":"Gallery of generated food photos","properties":{"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","description":"Permanent image URL"},"title":{"type":"string","description":"Dish description"},"page":{"type":"string","description":"Shareable download page URL"}}}}}},"results":{"type":"array","description":"Per-item results with status, image URL, and any errors","items":{"type":"object","properties":{"index":{"type":"number","description":"Item index in the batch"},"status":{"type":"string","enum":["success","error"],"description":"Result status"},"description":{"type":"string","description":"Dish description used"},"style":{"type":"string","description":"Style applied"},"lighting":{"type":"string","description":"Lighting applied"},"image_url":{"type":"string","description":"Generated image URL (on success)"},"image_page":{"type":"string","description":"Shareable download page (on success)"},"error":{"type":"string","description":"Error message (on failure)"}}}},"summary":{"type":"object","description":"Batch summary","properties":{"total":{"type":"number","description":"Total items processed"},"succeeded":{"type":"number","description":"Successfully generated"},"failed":{"type":"number","description":"Failed items"}}}}},"contentType":"image","returns":"Gallery of professional food photos with permanent URLs and per-item results"},{"name":"enhance_photo","displayName":"Enhance Photo","description":"Transform an existing food photo into a professional commercial-grade image. Upload a basic or low-quality shot and get back a polished food photography result. Optionally describe the dish to improve accuracy. Batch up to 10 photos at once. ⏱ ~20-30 seconds per image.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"food_desc":{"type":"string","description":"Optional description of the food to help the model understand the subject, e.g. \"beef burger with cheese\". Improves accuracy."},"style":{"type":"string","enum":["overhead","three-quarter","hero","rustic","clean","moody","delivery"],"default":"overhead","description":"Style: overhead=flat-lay, three-quarter=natural, hero=close-up, rustic=wooden table, clean=white bg, moody=dark fine-dining, delivery=bright for apps."},"lighting":{"type":"string","enum":["natural","warm","bright","dramatic"],"default":"natural","description":"Lighting mood. natural=soft window light, warm=golden amber glow, bright=even studio light, dramatic=high-contrast shadows."},"items":{"type":"array","description":"Batch mode: array of up to 10 photos to enhance in parallel. Each item must have image_url; food_desc, style, and lighting are optional per-item.","items":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"food_desc":{"type":"string","description":"Optional dish description to guide the enhancement."},"style":{"type":"string","enum":["overhead","three-quarter","hero","rustic","clean","moody","delivery"],"description":"Photography style for this item. Defaults to three-quarter."},"lighting":{"type":"string","enum":["natural","warm","bright","dramatic"],"description":"Lighting mood for this item. Defaults to natural."}},"required":["image_url"]}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":180,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Enhance a basic food photo to moody restaurant style","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","style":"moody","lighting":"warm"}},{"description":"Enhance a photo with dish context for better accuracy","input":{"image_url":"https://toolrouter.com/demo-product-photo.webp","food_desc":"chicken tikka masala with naan bread","style":"three-quarter","lighting":"natural"}},{"description":"Batch enhance 3 existing menu photos","input":{"items":[{"image_url":"https://toolrouter.com/demo-product-photo.webp","food_desc":"pepperoni pizza","style":"overhead"},{"image_url":"https://toolrouter.com/demo-product-photo.webp","style":"delivery","lighting":"bright"},{"image_url":"https://toolrouter.com/demo-product-photo.webp","food_desc":"tiramisu","style":"hero","lighting":"dramatic"}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format (gallery)"},"format_data":{"type":"object","description":"Gallery of enhanced food photos","properties":{"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","description":"Permanent enhanced image URL"},"title":{"type":"string","description":"Image label"},"page":{"type":"string","description":"Shareable download page URL"}}}}}},"results":{"type":"array","description":"Per-item results with status, enhanced image URL, and any errors","items":{"type":"object","properties":{"index":{"type":"number","description":"Item index in the batch"},"status":{"type":"string","enum":["success","error"],"description":"Result status"},"source_image_url":{"type":"string","description":"Original source photo URL"},"style":{"type":"string","description":"Style applied"},"lighting":{"type":"string","description":"Lighting applied"},"image_url":{"type":"string","description":"Enhanced image URL (on success)"},"image_page":{"type":"string","description":"Shareable download page (on success)"},"error":{"type":"string","description":"Error message (on failure)"}}}},"summary":{"type":"object","description":"Batch summary","properties":{"total":{"type":"number","description":"Total photos processed"},"succeeded":{"type":"number","description":"Successfully enhanced"},"failed":{"type":"number","description":"Failed items"}}}}},"contentType":"image","returns":"Gallery of professionally enhanced food photos with permanent URLs and per-item results"},{"name":"list_models","displayName":"List Models","description":"List available models for this tool, sorted by popularity. Returns provider details and pricing.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by capability (e.g. text-to-image, editing, text-to-video)."}}},"annotations":{"execution":{"estimatedSeconds":1,"timeoutSeconds":10,"mode":"cpu"}},"examples":[{"description":"List all available models","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"models":{"type":"array","description":"Available models with provider details"},"total":{"type":"number"}}},"returns":"List of available models with pricing and provider info"}],"workflow":["generate_photo","enhance_photo","list_models"],"icon":"/icons/menu-photo.webp","changelog":[{"version":"0.01","date":"2026-04-12","changes":["Initial release — generate food photos from descriptions and enhance existing shots, with 7 styles and 4 lighting moods, single and batch support"]},{"version":"0.02","date":"2026-04-14","changes":["Accept products (menu items) from your file library"]}],"premadePrompt":"Generate professional food photos for my menu. Here are my dishes: [e.g. \"spicy tonkotsu ramen with soft-boiled egg and nori\", \"grilled salmon with lemon butter and asparagus\"]. Use an overhead style with natural lighting.","usesProducts":true,"brain":{"instructions":"When brain knowledge is available:\n    - Apply the restaurant's brand aesthetic — upscale, casual, rustic, modern, etc. — to guide style and lighting choices\n    - Reference the restaurant's cuisine type to choose props, plating style, and color palette\n    - Match the target platform (delivery app, fine dining menu, social media) when selecting style preset\n    - Use any established brand colors or visual identity to inform the photography direction","produces":["creative_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"menu-finder","displayName":"Menu Finder","subtitle":"Restaurant menus from any country","about":"**Menu Finder** locates and reads the menu for any restaurant, café, or bar in over 200 countries. It searches the live web for official menu pages and PDFs, ranks results by source quality, and returns the full menu content — including image-based and scanned PDF menus that most tools can't read.\n\nAsking an AI \"what's on the menu at X restaurant?\" usually gets you either a made-up answer or \"I can't access that.\" This tool actually goes and finds it — searching official sites, third-party listing pages, and PDF uploads, then extracting the content so you can read, summarize, or compare menus directly.\n\n### What you can do\n- **find_menu** — search for a restaurant's menu by name and location, returns ranked sources and the parsed menu text from the top result\n- **parse_menu** — fetch and extract the menu from a specific URL (HTML page or PDF)\n\n### Who it's for\nTravelers researching restaurants before visiting. People with dietary requirements who need to check menus before booking. Agents helping users plan meals or make reservation decisions. Hospitality businesses doing competitive menu research.\n\n### How to use it\n1. Use **find_menu** with the restaurant name and city — always include location for best results (\"Dishoom, London\" is more reliable than just \"Dishoom\")\n2. Set the country parameter with an ISO code (gb, us, de, fr, etc.) to bias results for the right region\n3. If the top menu result has no readable text (image PDF or blocked page), call **parse_menu** on the next ranked source URL\n4. Use **parse_menu** directly when you already have a menu URL and just need the content extracted\n\n### Getting started\nCall **find_menu** with a restaurant name and location. The tool automatically fetches and parses the top-ranked menu so most queries return readable menu content in a single call.","version":"0.02","categories":["data","productivity"],"currency":"USD","skills":[{"name":"find_menu","displayName":"Find Menu","description":"Locate a restaurant's menu by name and location. Returns restaurant details (address, phone, rating, website), a ranked list of menu source URLs (with official-site and PDF flags), and the parsed menu text from the top result.","inputSchema":{"type":"object","properties":{"restaurant_name":{"type":"string","description":"The restaurant's name, e.g. \"Dishoom\", \"Le Bernardin\", \"Burger Bar\""},"location":{"type":"string","description":"City, neighbourhood or full address to disambiguate, e.g. \"Shoreditch, London\" or \"Midtown, NYC\". Strongly recommended."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code to bias results, e.g. \"us\", \"gb\", \"de\", \"fr\", \"it\", \"es\", \"jp\""},"fetch_top_menu":{"type":"boolean","description":"If true (default), automatically fetches and returns the parsed text of the top-ranked menu page. Set false to only get URLs.","default":true}},"required":["restaurant_name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":15,"timeoutSeconds":90,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Find the menu for a London restaurant","input":{"restaurant_name":"Dishoom","location":"Shoreditch, London","country":"gb"}},{"description":"Find the menu for a New York restaurant","input":{"restaurant_name":"Joe's Pizza","location":"Greenwich Village, New York","country":"us"}},{"description":"Find a Berlin restaurant menu without auto-fetch","input":{"restaurant_name":"Mustafas Gemüse Kebap","location":"Berlin","country":"de","fetch_top_menu":false}},{"description":"Find a Paris bistro menu","input":{"restaurant_name":"Le Comptoir du Relais","location":"Paris","country":"fr"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format":{"type":"string","description":"Output format hint (list)"},"format_data":{"type":"object","description":"List of menu sources for inline rendering","properties":{"title":{"type":"string","description":"Restaurant name"},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Menu page title"},"description":{"type":"string","description":"Snippet and tags"},"url":{"type":"string","description":"Menu page URL"}}}}}},"restaurant":{"type":"object","description":"Restaurant details from Maps lookup (may be omitted if not found)","properties":{"name":{"type":"string","description":"Restaurant name"},"address":{"type":"string","description":"Street address"},"phone":{"type":"string","description":"Phone number"},"rating":{"type":"number","description":"Average rating (typically 0–5)"},"website":{"type":"string","description":"Official website URL"},"category":{"type":"string","description":"Cuisine or business category"},"latitude":{"type":"number","description":"Latitude"},"longitude":{"type":"number","description":"Longitude"}}},"sources":{"type":"array","description":"Ranked menu source URLs","items":{"type":"object","properties":{"title":{"type":"string","description":"Page title"},"url":{"type":"string","description":"Page URL"},"snippet":{"type":"string","description":"Search snippet"},"is_pdf":{"type":"boolean","description":"True if the URL is a PDF"},"is_official":{"type":"boolean","description":"True if the URL is on the restaurant's official website"},"score":{"type":"number","description":"Internal relevance score"}}}},"top_menu":{"type":"object","description":"Parsed content of the top-ranked menu page (when fetch_top_menu is true)","properties":{"url":{"type":"string","description":"URL that was fetched"},"markdown":{"type":"string","description":"Extracted menu content as markdown (truncated at 12k chars)"},"source":{"type":"string","enum":["web","vision"],"description":"web = scraped text; vision = read from a menu image"},"used_image_url":{"type":"string","description":"When source is vision, the image URL that was analysed"},"warning":{"type":"string","description":"Set if extraction was partial (e.g. image-only menu with vision unavailable)"},"error":{"type":"string","description":"Error message if the fetch failed"}}}}},"returns":"Restaurant details, ranked menu source URLs, and the parsed text of the top menu page"},{"name":"parse_menu","displayName":"Parse Menu","description":"Fetch and extract the menu content from a specific URL. Use when the user provides a menu link directly, or to read a different ranked source from a previous find_menu call. Returns clean markdown.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the menu page (HTML or PDF) to fetch and parse"}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":60,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Parse a menu from an official restaurant website","input":{"url":"https://www.dishoom.com/menus/"}},{"description":"Parse a PDF menu from a restaurant website","input":{"url":"https://example-restaurant.com/menus/dinner.pdf"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The URL that was fetched"},"title":{"type":"string","description":"Page title"},"markdown":{"type":"string","description":"Extracted menu content as markdown (truncated at 20k chars)"},"truncated":{"type":"boolean","description":"True if the content was truncated"},"source":{"type":"string","enum":["web","vision"],"description":"web = scraped text; vision = read from a menu image"},"used_image_url":{"type":"string","description":"When source is vision, the image URL that was analysed"},"warning":{"type":"string","description":"Warning message if extraction was partial"}}},"returns":"Markdown of the menu page content"}],"workflow":["find_menu","find_menu → parse_menu"],"icon":"/icons/menu-finder.webp","changelog":[{"version":"0.01","date":"2026-04-22","changes":["Initial release — global restaurant menu search and parsing across 200+ countries"]},{"version":"0.02","date":"2026-04-23","changes":["Read image-based and PDF menus automatically — handles restaurants whose menu is a single photo or scanned page"]}],"premadePrompt":"Find the menu for [restaurant name] in [city / country] using ToolRouter. Tell me what they serve, highlight any standout dishes, and list a few prices if available.","requirements":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}],"credentials":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}]},{"name":"property-prospector","displayName":"Property Prospector","subtitle":"AI property upgrade visualizations","about":"**Property Prospector** renders photorealistic home improvement visualizations onto real property photos. Give it an address and an improvement — a pool, landscaping, solar panels, a curb-appeal makeover — and it captures the actual property, renders the upgrade on it, and returns a before-and-after comparison. Contractors and home services businesses use it to show homeowners exactly what their property will look like before committing.\n\nIt works from satellite imagery for aerial views (pools, solar, full-lot work) or from street view for curb-appeal makeovers and facade refreshes. You can also supply your own front-of-house photo instead of an address lookup.\n\n### What you can do\n- **render_upgrade** — capture any property and render a photorealistic improvement onto it, returning a before/after comparison\n- **render_video** — same as render_upgrade but also generates a cinematic transformation reveal video\n- **batch_render** — render the same improvement onto up to 10 addresses at once for prospecting campaigns\n- **generate_mailer** — write personalized postcard marketing copy for the improvement, with headline, body, CTA, and ROI line\n\n### Who it's for\nPool installers, landscapers, solar companies, roofers, painters, and any home services contractor who wants to generate personalized visual proposals at scale. Also useful for real estate agents staging renovation potential for listings.\n\n### How to use it\n1. Call **render_upgrade** with an address and a description of the improvement — be specific, e.g. \"rectangular in-ground pool with travertine deck\".\n2. Set view_angle to \"aerial\" for full-lot work or \"street\" for curb-appeal makeovers.\n3. Chain **generate_mailer** with the improvement details to produce postcard copy for the homeowner.\n4. For prospecting, pass a list of addresses to **batch_render** to generate comparisons for an entire street.\n\n### Getting started\nCall **render_upgrade** with an address and improvement description — no API key needed for aerial view.","version":"0.05","categories":["marketing"],"currency":"USD","skills":[{"name":"render_upgrade","displayName":"Render Upgrade","description":"Take a property address, capture satellite imagery, and render a photorealistic home improvement onto the actual property photo. Returns before/after comparison.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Full property address or street with city/state (e.g. \"1423 Oak Lane, Tampa, FL 33609\"). Required unless image_url is provided."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"improvement":{"type":"string","description":"What to render. Be specific: \"in-ground pool with travertine deck\", \"lush front-yard landscaping with flagstone path\", \"solar panel array\"."},"view_angle":{"type":"string","description":"\"aerial\" = top-down satellite (pools, solar, full-lot work). \"street\" = front of house from the curb (curb-appeal makeovers, facade refreshes).","enum":["aerial","street"],"default":"aerial"},"style":{"type":"string","description":"Design style preference (e.g. \"modern minimalist\", \"tropical resort\", \"luxury contemporary\", \"rustic farmhouse\")"},"zoom":{"type":"number","description":"Aerial-only. Satellite capture radius in km. Default 0.1 shows a single property. Ignored for street view.","default":0.1},"edit_target":{"type":"string","description":"Part to modify. Aerial: backyard/front_yard/roof/driveway. Street: front_yard/facade/roof/driveway. Defaults: entire_lot or front_yard.","enum":["backyard","front_yard","facade","roof","driveway","entire_lot","whole_image"]}},"required":["improvement"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Render a pool onto a residential property (aerial view)","input":{"address":"1423 Oak Lane, Tampa, FL 33609","improvement":"rectangular in-ground swimming pool with travertine stone deck surround and lounge area"}},{"description":"Curb-appeal makeover from the street","input":{"address":"892 Elm Street, Phoenix, AZ 85004","improvement":"lush front-yard landscaping with green lawn, flagstone pathway, colorful flower beds, hedges, and accent lighting","view_angle":"street","edit_target":"front_yard","style":"desert modern with drought-tolerant plants"}},{"description":"Render onto a homeowner's own front-of-house photo","input":{"image_url":"https://example.com/my-house-front.jpg","improvement":"mature front-yard garden with manicured lawn, stone walkway, hydrangea borders, and porch container plants","view_angle":"street","edit_target":"front_yard"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"before_url":{"type":"string","description":"Original property image (satellite or street view depending on view_angle)"},"after_url":{"type":"string","description":"Rendered upgrade image"},"comparison_url":{"type":"string","description":"Side-by-side before/after grid"},"comparison_page":{"type":"string","description":"Shareable download page for the comparison"},"address":{"type":"string","description":"Confirmed geocoded address (omitted when image_url was supplied)"},"coordinates":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}}},"improvement":{"type":"string","description":"What was rendered"},"view_angle":{"type":"string","description":"Which camera angle was used (aerial or street)"}}},"returns":"Before/after images with the improvement rendered onto the property, plus a side-by-side comparison grid"},{"name":"render_video","displayName":"Render Video","description":"Full pipeline: capture imagery (aerial or street), render improvement, then generate a cinematic transformation video showing the property upgrading. Returns before/after images plus a reveal video. ⏱ Takes 1-2 minutes.","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"Full property address with city/state. Required unless image_url is provided."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"improvement":{"type":"string","description":"What to render. Be specific: \"in-ground pool with travertine deck\", \"full landscaping with lawn and hedges\""},"view_angle":{"type":"string","description":"\"aerial\" = top-down satellite (pools, solar, full-lot work). \"street\" = front of house from the curb (curb-appeal makeovers).","enum":["aerial","street"],"default":"aerial"},"style":{"type":"string","description":"Design style preference (e.g. \"modern minimalist\", \"tropical resort\")"},"zoom":{"type":"number","description":"Aerial-only. Satellite capture radius in km (default 0.1). Ignored for street view.","default":0.1},"edit_target":{"type":"string","description":"What part of the property to modify. Aerial: \"backyard\"/\"front_yard\"/\"roof\"/\"driveway\". Street: \"front_yard\"/\"facade\"/\"roof\"/\"driveway\".","enum":["backyard","front_yard","facade","roof","driveway","entire_lot","whole_image"]},"duration":{"type":"number","description":"Video duration in seconds (default 12)","default":12},"aspect_ratio":{"type":"string","description":"Video aspect ratio","enum":["16:9","9:16","1:1"],"default":"16:9"}},"required":["improvement"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":120,"timeoutSeconds":300,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Aerial pool transformation video","input":{"address":"4912 W Dickens Ave, Tampa, FL 33629","improvement":"in-ground swimming pool with travertine deck and lounge area"}},{"description":"Curb-appeal makeover video for vertical social","input":{"address":"892 Elm Street, Phoenix, AZ 85004","improvement":"lush front-yard landscaping with green lawn, flagstone pathway, flower beds and hedges","view_angle":"street","edit_target":"front_yard","aspect_ratio":"9:16"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"before_url":{"type":"string","description":"Original satellite image"},"after_url":{"type":"string","description":"Rendered upgrade image"},"comparison_url":{"type":"string","description":"Side-by-side before/after grid"},"comparison_page":{"type":"string","description":"Shareable comparison page"},"video_url":{"type":"string","description":"Transformation video URL"},"video_page":{"type":"string","description":"Shareable video download page"},"address":{"type":"string","description":"Confirmed geocoded address"},"improvement":{"type":"string","description":"What was rendered"}}},"returns":"Before/after images, comparison grid, and a cinematic transformation video showing the upgrade being built"},{"name":"generate_mailer","displayName":"Generate Mailer","description":"Generate personalized postcard marketing copy for a property upgrade. Includes headline, body, call-to-action, and ROI calculation.","inputSchema":{"type":"object","properties":{"improvement":{"type":"string","description":"The improvement type (e.g. \"in-ground pool\", \"full landscaping\", \"solar panels\")"},"business_name":{"type":"string","description":"The contractor or service business name"},"business_phone":{"type":"string","description":"Contact phone number for the CTA"},"business_url":{"type":"string","description":"Website URL for the CTA"},"estimated_cost":{"type":"number","description":"Estimated project cost in dollars (e.g. 48500)"},"home_value_increase":{"type":"number","description":"Estimated property value increase in dollars (e.g. 37500)"},"urgency_hook":{"type":"string","description":"Optional seasonal or time-sensitive hook (e.g. \"43 days to Memorial Day\", \"Book before spring rush\")"}},"required":["improvement","business_name"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Generate pool installation postcard copy","input":{"improvement":"in-ground pool with deck","business_name":"Tampa Bay Pools","business_phone":"(813) 555-0199","estimated_cost":48500,"home_value_increase":37500,"urgency_hook":"43 days to Memorial Day"}},{"description":"Generate landscaping postcard copy","input":{"improvement":"full front yard landscaping","business_name":"Green Valley Landscaping","estimated_cost":8500,"home_value_increase":38500}}],"pricing":"free","outputSchema":{"type":"object","properties":{"headline":{"type":"string","description":"Attention-grabbing postcard headline"},"body":{"type":"string","description":"Postcard body copy (2-3 sentences)"},"cta":{"type":"string","description":"Call to action text"},"roi_line":{"type":"string","description":"ROI calculation line"},"full_copy":{"type":"string","description":"Complete assembled postcard text"}}},"returns":"Complete postcard marketing copy with headline, body, CTA, and ROI breakdown"},{"name":"batch_render","displayName":"Batch Render","description":"Render the same improvement onto multiple properties at once. Provide up to 10 addresses and one improvement type. Returns before/after comparisons for each. Takes 2-5 minutes depending on count.","inputSchema":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"List of property addresses (max 10)","maxItems":10},"improvement":{"type":"string","description":"Improvement to render on all properties"},"view_angle":{"type":"string","description":"Camera angle applied to every property. \"aerial\" = top-down satellite, \"street\" = front of the house from the curb (curb-appeal makeovers).","enum":["aerial","street"],"default":"aerial"},"style":{"type":"string","description":"Design style preference applied to all renders"},"zoom":{"type":"number","description":"Aerial-only. Satellite capture radius in km (default 0.1). Ignored for street view.","default":0.1},"edit_target":{"type":"string","description":"Which part of each property to modify. Same options as render_upgrade. Defaults to \"entire_lot\" for aerial and \"front_yard\" for street.","enum":["backyard","front_yard","facade","roof","driveway","entire_lot","whole_image"]}},"required":["addresses","improvement"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":180,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Render pools onto 3 properties","input":{"addresses":["1423 Oak Lane, Tampa, FL 33609","892 Elm Street, Tampa, FL 33611","3150 Bay Shore Blvd, Tampa, FL 33629"],"improvement":"in-ground pool with modern deck"}},{"description":"Render solar panels onto 2 properties","input":{"addresses":["450 Sunrise Dr, Phoenix, AZ 85004","780 Desert View Rd, Phoenix, AZ 85006"],"improvement":"rooftop solar panel array covering south-facing roof sections","style":"modern flush-mount panels"}},{"description":"Curb-appeal makeovers for a landscaper's prospect list","input":{"addresses":["892 Elm Street, Phoenix, AZ 85004","1106 Cedar Ave, Phoenix, AZ 85014","2280 Mesa Ridge, Scottsdale, AZ 85251"],"improvement":"lush front-yard landscaping with manicured lawn, flagstone pathway, flower beds and accent shrubs","view_angle":"street","edit_target":"front_yard"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"before_url":{"type":"string"},"after_url":{"type":"string"},"comparison_url":{"type":"string"},"comparison_page":{"type":"string"},"coordinates":{"type":"object"},"status":{"type":"string","enum":["success","failed"]},"error":{"type":"string"}}}},"successful":{"type":"number"},"failed":{"type":"number"}}},"returns":"Array of before/after comparisons for each address, with success/failure counts"}],"workflow":["render_upgrade","render_upgrade → generate_mailer","render_video","render_video → generate_mailer","batch_render → generate_mailer"],"icon":"/a/ast_3960235af1f04c97","changelog":[{"version":"0.01","date":"2026-04-13","changes":["Initial release with render, mailer, and batch skills"]},{"version":"0.02","date":"2026-04-13","changes":["Tighter default zoom to focus on individual properties"]},{"version":"0.03","date":"2026-04-13","changes":["Added transformation video skill for before/after reveal videos"]},{"version":"0.04","date":"2026-04-13","changes":["Added edit_target parameter to constrain what part of the property gets modified (backyard, front_yard, roof, driveway)"]},{"version":"0.05","date":"2026-04-14","changes":["Added street-view \"front of house\" view angle for curb-appeal makeovers — flawless landscaping renders onto a real photo of the home","New view_angle parameter (aerial or street) on render_upgrade, render_video, and batch_render","New image_url parameter — render onto your own front-of-house photo instead of looking it up by address","New street-only edit_target options: facade for siding/paint refreshes, plus front_yard/roof/driveway tailored to the curb view"]}],"premadePrompt":"Use ToolRouter to render a photorealistic [pool/landscaping/solar panels/curb-appeal makeover] upgrade onto the property at [address]. Use the [aerial/street] view, show me the before and after side by side, then generate postcard marketing copy for my [business type] business.","brain":{"instructions":"When brain knowledge is available:\n  - Match the improvement style to any brand guidelines or visual preferences\n  - Reference specific products, plant palettes, or materials the business offers\n  - Pick view_angle to match the service: street view for landscapers, painters, and curb-appeal makeovers; aerial for pool, solar, paving, and full-lot work\n  - Tailor the mailer copy to the business's tone and target market\n  - Use any geographic or demographic context to improve targeting","produces":["creative_insights"]},"requirements":[{"name":"google_maps","type":"secret","displayName":"Google Maps Platform API Key","description":"Required only for street view (view_angle: \"street\"). Enable the Street View Static API in Google Cloud Console. Aerial view works without a key.","required":false,"acquireUrl":"https://console.cloud.google.com/google/maps-apis/credentials","envFallback":"GOOGLE_MAPS_API_KEY"}],"credentials":[{"name":"google_maps","type":"secret","displayName":"Google Maps Platform API Key","description":"Required only for street view (view_angle: \"street\"). Enable the Street View Static API in Google Cloud Console. Aerial view works without a key.","required":false,"acquireUrl":"https://console.cloud.google.com/google/maps-apis/credentials","envFallback":"GOOGLE_MAPS_API_KEY"}]},{"name":"material-patterns","displayName":"Material Patterns","subtitle":"Seamless PBR textures up to 8K","about":"**Material Patterns** generates seamlessly tiling PBR (Physically Based Rendering) materials for games, CGI, and 3D production. Describe a material in text, extract one from a real photo, or predict PBR maps from an existing texture — all with built-in upscaling to 4x resolution and full map sets ready for any 3D engine.\n\nCreating production-ready PBR materials normally requires specialized software like Substance Painter or a skilled texture artist. This tool generates complete map sets — base color, normal, roughness, metalness, and height — from text or images, with seamless tiling that works in any direction.\n\n### What you can do\n- **generate_material** — create a seamless PBR material from a text description, optionally guided by a reference image\n- **extract_material** — convert a real-world photograph into a clean, tileable PBR texture (handles shadows, angles, and uneven lighting)\n- **predict_maps** — predict PBR maps from an existing texture image without re-generating the base\n\n### Who it's for\nGame developers who need tileable environment textures at scale. 3D artists and VFX teams building production pipelines. Architects and product designers who need realistic material renders quickly.\n\n### How to use it\n1. Use **generate_material** with a text prompt for new materials — \"mossy stone wall\", \"brushed aluminium\", \"weathered oak planks\"\n2. Use **extract_material** when you have a photo of a real surface — pass the image URL and describe which part to extract\n3. Use **predict_maps** when you already have a base texture and just need the PBR maps generated for it\n4. Set upscale_factor to 2 or 4 for higher resolution output, and choose which maps you need via the maps parameter\n\n### Getting started\nStart with **generate_material** and a material description. The default output is all five PBR maps at 1024x1024 with seamless tiling in both directions.","version":"0.01","categories":["media"],"currency":"USD","skills":[{"name":"generate_material","displayName":"Generate Material","description":"Generate a complete seamlessly tiling PBR material from a text prompt. Produces a base texture plus base colour, normal, roughness, metalness, and height maps. Supports image-to-image guidance, inpainting masks, prompt expansion, tiling control, and built-in 2x/4x upscaling.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Material description, e.g. \"mossy stone wall\", \"brushed aluminium\", \"weathered oak planks\"."},"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"mask_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"strength":{"type":"number","description":"Transform intensity for image-to-image (0-1 exclusive). Higher values deviate more from the reference. Only used with image_url. Default 0.75."},"image_size":{"type":"string","enum":["square_hd","square","landscape_4_3","landscape_16_9","portrait_4_3","portrait_16_9"],"description":"Output image size preset. Defaults to square_hd (1024x1024). For custom dimensions pass a string like \"1024x2048\"."},"maps":{"type":"array","items":{"type":"string","enum":["basecolor","normal","roughness","metalness","height"]},"description":"Which PBR maps to output. Defaults to all five: basecolor, normal, roughness, metalness, height."},"upscale_factor":{"type":"integer","enum":[0,2,4],"description":"Built-in upscaling: 0 (none, default), 2 (2x), or 4 (4x). Applies to all output maps."},"tiling_mode":{"type":"string","enum":["both","horizontal","vertical"],"description":"Tiling direction. Defaults to both (seamless in all directions)."},"tile_size":{"type":"integer","description":"Latent tile size (32-256). Controls pattern scale. Default 128."},"tile_stride":{"type":"integer","description":"Latent tile stride (16-128). Controls tile overlap. Default 64."},"num_inference_steps":{"type":"integer","description":"Number of denoising steps (1-8). More steps = higher quality but slower. Default 8."},"num_images":{"type":"integer","description":"Number of material variations to generate (1-4). Default 1."},"enable_prompt_expansion":{"type":"boolean","description":"Let an LLM enrich your prompt for better results. Adds ~$0.0025. Default true."},"seed":{"type":"number","description":"Random seed for reproducible results."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format. Defaults to png."}},"required":["prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Generate a mossy stone wall material","input":{"prompt":"mossy stone wall"}},{"description":"Generate brushed metal at 4x resolution with only 3 maps","input":{"prompt":"brushed aluminium with fine scratches","upscale_factor":4,"maps":["basecolor","normal","roughness"]}},{"description":"Image-to-image guided material with inpainting","input":{"prompt":"weathered brick","image_url":"https://placehold.co/512x512.png","strength":0.7,"tiling_mode":"horizontal"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"texture":{"type":"object","description":"Generated base texture image (first in response, no map_type)","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}}},"maps":{"type":"array","description":"PBR map images with map_type labels","items":{"type":"object","properties":{"url":{"type":"string","description":"Map image URL"},"map_type":{"type":"string","description":"basecolor, normal, roughness, metalness, or height"}}}},"seed":{"type":"number","description":"Seed used for generation"},"prompt":{"type":"string","description":"Final prompt (may be expanded)"},"image_path":{"type":"string","description":"Local path to base texture for asset pipeline"}}},"contentType":"image","returns":"Base texture and PBR map set as downloadable images with seed and expanded prompt"},{"name":"extract_material","displayName":"Extract Material","description":"Extract a clean, seamless tileable material from a real-world photograph. Handles angled shots, uneven lighting, and shadows — flattens and normalises the source into a production-ready PBR map set. Supports built-in 2x/4x upscaling, tiling control, and prompt guidance.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"prompt":{"type":"string","description":"Describe which part of the image to extract, e.g. \"the wall\", \"the floor tiles\", \"the wooden panel\"."},"image_size":{"type":"string","enum":["square_hd","square","landscape_4_3","landscape_16_9","portrait_4_3","portrait_16_9"],"description":"Output image size preset. Defaults to square_hd (1024x1024). For custom dimensions pass a string like \"1024x2048\"."},"maps":{"type":"array","items":{"type":"string","enum":["basecolor","normal","roughness","metalness","height"]},"description":"Which PBR maps to output. Defaults to all five: basecolor, normal, roughness, metalness, height."},"upscale_factor":{"type":"integer","enum":[0,2,4],"description":"Built-in upscaling: 0 (none, default), 2 (2x), or 4 (4x). Applies to all output maps."},"tiling_mode":{"type":"string","enum":["both","horizontal","vertical"],"description":"Tiling direction. Defaults to both (seamless in all directions)."},"tile_size":{"type":"integer","description":"Latent tile size (32-256). Controls pattern scale. Default 128."},"tile_stride":{"type":"integer","description":"Latent tile stride (16-128). Controls tile overlap. Default 64."},"strength":{"type":"number","description":"Extraction intensity (0-1 exclusive). Higher = more creative deviation from source. Default 0.75."},"num_inference_steps":{"type":"integer","description":"Number of denoising steps (1-8). Default 8."},"num_images":{"type":"integer","description":"Number of material variations to extract (1-4). Default 1."},"enable_prompt_expansion":{"type":"boolean","description":"Let an LLM enrich your prompt. Adds ~$0.0025. Default true."},"seed":{"type":"number","description":"Random seed for reproducible results."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format. Defaults to png."}},"required":["image_url","prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Extract wall material from a photo","input":{"image_url":"https://placehold.co/1024x768.png","prompt":"the brick wall"}},{"description":"Extract floor tiles at 4x resolution","input":{"image_url":"https://placehold.co/1024x768.png","prompt":"the marble floor tiles","upscale_factor":4}},{"description":"Extract only normal and height maps","input":{"image_url":"https://placehold.co/512x512.png","prompt":"the stone surface","maps":["normal","height"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"texture":{"type":"object","description":"Extracted seamless texture (first in response, no map_type)","properties":{"url":{"type":"string","description":"Image URL"},"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}}},"maps":{"type":"array","description":"PBR map images with map_type labels","items":{"type":"object","properties":{"url":{"type":"string","description":"Map image URL"},"map_type":{"type":"string","description":"basecolor, normal, roughness, metalness, or height"}}}},"seed":{"type":"number","description":"Seed used"},"prompt":{"type":"string","description":"Final prompt (may be expanded)"},"image_path":{"type":"string","description":"Local path to extracted texture for asset pipeline"}}},"contentType":"image","returns":"Flattened seamless texture and PBR map set extracted from the source photo"},{"name":"predict_maps","displayName":"Predict Maps","description":"Predict PBR maps directly from an existing texture or photograph without re-generating the base image. Upload any image and get back base colour, normal, roughness, metalness, and height maps ready for 3D engines.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"maps":{"type":"array","items":{"type":"string","enum":["basecolor","normal","roughness","metalness","height"]},"description":"Which PBR maps to output. Defaults to all five: basecolor, normal, roughness, metalness, height."},"seed":{"type":"number","description":"Random seed for reproducible results."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output image format. Defaults to png."}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":90,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Predict PBR maps from a brick texture","input":{"image_url":"https://placehold.co/512x512.png"}},{"description":"Predict only normal and height maps","input":{"image_url":"https://placehold.co/512x512.png","maps":["normal","height"]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"maps":{"type":"array","description":"Predicted PBR map images with map_type labels","items":{"type":"object","properties":{"url":{"type":"string","description":"Map image URL"},"map_type":{"type":"string","description":"basecolor, normal, roughness, metalness, or height"}}}},"seed":{"type":"number","description":"Seed used"},"image_path":{"type":"string","description":"Local path to first PBR map for asset pipeline"}}},"contentType":"image","returns":"PBR map set predicted from the input image, ready for 3D engines"}],"workflow":["generate_material","extract_material","predict_maps","generate_material → extract_material"],"icon":"/icons/material-patterns.webp","changelog":[{"version":"0.01","date":"2026-04-15","changes":["Initial release with three skills: text-to-material, photo-to-material extraction, and PBR map prediction. Built-in 2x/4x upscaling, inpainting, prompt expansion, tiling control"]}],"premadePrompt":"Use ToolRouter to generate a seamless PBR material of [material description, e.g. mossy cobblestone] with all five maps (base colour, normal, roughness, metalness, height) at 1024x1024.","requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"trade-supplies","displayName":"Trade Supplies","subtitle":"Live building material prices","about":"**Trade Supplies** finds live prices for construction materials, trade consumables, and building supplies from regional merchants. Search for one item, compare prices across suppliers, or estimate a multi-item materials basket before you request a quote or place an order.\n\nIt uses live shopping results localised by country and ranks known trade merchants first: Screwfix, Travis Perkins, Wickes, B&Q, Toolstation, Home Depot, Lowes, Bunnings, Leroy Merlin, Bauhaus, Hornbach, and similar suppliers by region.\n\n### What you can do\n- **search_supplies** — find current product listings for a material or trade supply with supplier, price, availability, and link\n- **compare_prices** — sort priced listings cheapest-first and calculate savings against the highest priced option\n- **estimate_materials** — price a bill of materials by multiplying live unit prices by quantities, with job, VAT, markup, collection, and accounting fields for quoting workflows\n- **check_local_availability** — check real merchant branch stock where supplier APIs are implemented, currently Toolstation and Screwfix UK branch/stock endpoints, with explicit unsupported status for other suppliers\n- **find_branches** — find the nearest physical branches of trade suppliers to a postcode, with address, distance, opening hours, phone, and a directions link (location only — not stock-checked)\n- **optimize_material_pickup** — choose a supplier stop for a materials basket using verified branch stock, price, pickup SLA, and route/location hints\n- **supplier_coverage** — see preferred suppliers and currency assumptions by country\n\n### Who it's for\nBuilders, renovators, quantity surveyors, facilities teams, and contractors checking current material costs before ordering or quoting work.\n\n### How to use it\n1. Start with **supplier_coverage** if you want to see which suppliers are preferred in your country\n2. Use **search_supplies** for a specific item with size/spec, such as \"15mm copper pipe 3m\"\n3. Use **compare_prices** when price matters more than supplier rank\n4. Use **estimate_materials** for a basket of materials with quantities","version":"0.05","categories":["data","productivity"],"currency":"USD","skills":[{"name":"search_supplies","displayName":"Search Supplies","description":"Search live shopping listings for trade supplies and building materials with regional supplier ranking, prices, availability, and product links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Material or trade supply search phrase, ideally including size/spec such as \"25kg rapid set concrete\" or \"15mm copper pipe 3m\""},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"preferred_retailers_only":{"type":"boolean","description":"If true, keep only known regional trade suppliers in the results","default":false},"limit":{"type":"number","description":"Maximum listings to return (1-20, default 10)","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Search for UK copper pipe prices","input":{"query":"15mm copper pipe 3m","country_code":"GB","limit":8}},{"description":"Search preferred US building merchants for OSB boards","input":{"query":"7/16 OSB sheathing 4x8","country_code":"US","preferred_retailers_only":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"results_count":{"type":"number","description":"Number of supplier listings returned"},"results":{"type":"array","description":"Supplier listings with title, price, currency, supplier, availability, URL, image, and ratings"},"source_url":{"type":"string","description":"Shopping search URL used as the source trail"}}},"returns":"Live supplier listings with price, currency, supplier, availability, source link, and ranking metadata"},{"name":"compare_prices","displayName":"Compare Prices","description":"Compare live supplier prices for a single trade supply item and identify the cheapest priced listing with savings against the highest result.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Material or trade supply to compare, including size/spec where possible"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"preferred_retailers_only":{"type":"boolean","description":"If true, compare only known regional trade suppliers","default":false},"limit":{"type":"number","description":"Maximum listings to compare (1-20, default 10)","default":10}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find the cheapest 25kg cement listing","input":{"query":"general purpose cement 25kg","country_code":"GB","limit":10}}],"pricing":"paid","returns":"Cheapest priced listing, savings summary, and all priced listings sorted cheapest first"},{"name":"estimate_materials","displayName":"Estimate Materials","description":"Estimate a bill of materials by searching live prices for each item, selecting a priced supplier listing, and multiplying by requested quantities with job, VAT, markup, and accounting metadata.","inputSchema":{"type":"object","properties":{"items":{"type":"array","description":"Material rows to price. Each row needs query and quantity, with optional unit and preferred_supplier.","items":{"type":"object","properties":{"query":{"type":"string","description":"Material or trade supply phrase with size/spec"},"quantity":{"type":"number","description":"Quantity required"},"unit":{"type":"string","description":"Optional unit label such as bags, lengths, boards, rolls, or boxes"},"preferred_supplier":{"type":"string","description":"Optional supplier name to choose when present in priced results"}},"required":["query","quantity"]}},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"preferred_retailers_only":{"type":"boolean","description":"If true, estimate from known regional trade suppliers only","default":true},"per_item_limit":{"type":"number","description":"Maximum listings to inspect per material item (1-10, default 5)","default":5},"max_wait_ms":{"type":"number","description":"Overall time budget in ms (default 10000, range 4000-20000). Items unpriced by the deadline return under pending_items to re-request.","default":10000},"job_id":{"type":"string","description":"Field-service job identifier to carry into quote/accounting output"},"quote_id":{"type":"string","description":"Quote identifier connected to the job, such as Q20260429-001"},"service":{"type":"string","description":"Service or job type, such as EICR Remedials"},"scheduled_date":{"type":"string","description":"Scheduled service date in ISO format when available"},"customer_price":{"type":"number","description":"Customer-facing fixed or quoted job price"},"supplier_price":{"type":"number","description":"Supplier or contractor cost price if already set"},"materials_ordered_by_office":{"type":"boolean","description":"Whether the office/admin team ordered the materials for collection or delivery"},"collection_branch":{"type":"string","description":"Supplier branch for collection, such as TLC Merton"},"collection_address":{"type":"string","description":"Full collection branch address"},"materials_notes":{"type":"string","description":"Internal materials notes from the job or operations team"},"order_reference":{"type":"string","description":"Supplier order reference or internal purchase reference"},"order_confirmation_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"vat_rate":{"type":"number","description":"VAT or sales tax percentage for material accounting, e.g. 20 for UK VAT","default":0},"markup_percent":{"type":"number","description":"Markup percentage to calculate quote material price from net material cost","default":0},"cost_code":{"type":"string","description":"Accounting or job-costing code for these material lines"},"nominal_code":{"type":"string","description":"Nominal ledger account code for supplier invoices or bookkeeping"},"parking_expense":{"type":"boolean","description":"Whether parking expense should be expected or reconciled for the job"},"congestion_expense":{"type":"boolean","description":"Whether congestion charge expense should be expected or reconciled for the job"}},"required":["items"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Estimate a small UK materials basket","input":{"country_code":"GB","job_id":"1243","quote_id":"Q20260429-001","collection_branch":"TLC Merton","vat_rate":20,"markup_percent":15,"cost_code":"ELECTRICAL_MATERIALS","items":[{"query":"general purpose cement 25kg","quantity":3,"unit":"bags"},{"query":"IP65 bathroom downlight white","quantity":3,"unit":"each","preferred_supplier":"TLC"}]}}],"pricing":"paid","returns":"Estimated basket: selected listing per line with SKU, buy link, VAT, markup, cost codes, job context, collection, missing and pending items with partial flag, and total when currencies match"},{"name":"check_local_availability","displayName":"Check Local Availability","description":"Check local pickup evidence near a postcode. Toolstation and Screwfix UK branch stock is verified through real merchant endpoints with per-branch quantities and collect-today status; unsupported suppliers return explicit unverified status instead of placeholder branches.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"postcode":{"type":"string","description":"Postcode or local area to use for nearby pickup availability, such as SE15 1QS."},"items":{"type":"array","description":"Material rows to check. Each row needs query and quantity.","items":{"type":"object","properties":{"query":{"type":"string","description":"Material or trade supply phrase with size/spec."},"quantity":{"type":"number","description":"Quantity required."},"unit":{"type":"string","description":"Optional unit label such as each, bags, lengths, rolls, or boxes."}},"required":["query","quantity"]}},"suppliers":{"type":"array","items":{"type":"string"},"description":"Optional supplier names to include, such as Screwfix or Toolstation."},"radiusMiles":{"type":"number","description":"Preferred merchant branch search radius in miles for supported supplier stock APIs.","default":10},"preferSameDayCollection":{"type":"boolean","description":"Prefer same-day collection and branch-stock verified rows where available.","default":true},"includeAlternatives":{"type":"boolean","description":"Include alternative supplier rows for each item.","default":true},"per_item_limit":{"type":"number","description":"Maximum listings to inspect per material item (1-20, default 10).","default":10}},"required":["items"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check two UK electrical materials near a job postcode","input":{"country":"GB","postcode":"SE15 1QS","suppliers":["Screwfix","Toolstation"],"preferSameDayCollection":true,"includeAlternatives":true,"items":[{"query":"MK Logic Plus 13A 2 gang switched socket white","quantity":2},{"query":"2.5mm twin and earth cable 10m","quantity":1}]}},{"description":"Check local pickup evidence for a single plumbing item","input":{"country":"GB","postcode":"SW19 2QA","suppliers":["TLC Direct","Screwfix"],"includeAlternatives":false,"items":[{"query":"15mm copper pipe 3m","quantity":4,"unit":"lengths"}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"verifiedAt":{"type":"string","description":"ISO timestamp for the availability check."},"items":{"type":"array","description":"Availability rows with matched product, store, quantity, pickup SLA, quote readiness, job readiness, and verification method."},"basketSummary":{"type":"object","description":"Basket-level same-day, single-supplier, and material total summary."},"evidence":{"type":"object","description":"Verification method, source URL, branch-stock flag, and checkout-confirmation flag."}}},"returns":"Local availability evidence with merchant product links, real branch stock for supported suppliers, pickup SLA, store details, and unsupported/unverified caveats"},{"name":"find_branches","displayName":"Find Branches","description":"Find the nearest physical branches of trade suppliers to a postcode, with address, distance, opening hours, phone, and a directions link. Location only — branches are not stock-checked.","inputSchema":{"type":"object","properties":{"postcode":{"type":"string","description":"Postcode or local area to find nearby branches around, such as SE15 1QS or W5."},"suppliers":{"type":"array","items":{"type":"string"},"description":"Supplier names to locate, such as Screwfix or Toolstation. Defaults to the regional preferred suppliers when omitted."},"supplier":{"type":"string","description":"Single supplier name to locate. Use this or suppliers."},"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"radius_miles":{"type":"number","description":"Search radius in miles around the postcode (GB postcodes are geocoded for real distances).","default":10},"limit":{"type":"number","description":"Maximum branches to return per supplier (1-10, default 5).","default":5}},"required":["postcode"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find nearby Screwfix and Toolstation branches","input":{"postcode":"SE15 1QS","suppliers":["Screwfix","Toolstation"],"radius_miles":8}},{"description":"Find all preferred UK trade branches near an outcode","input":{"postcode":"W5","country_code":"GB"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"postcode":{"type":"string","description":"Postcode the search was centred on."},"suppliers":{"type":"array","description":"Per-supplier branch lists with name, address, postcode, distance, opening hours, phone, website, rating, and a directions link."},"note":{"type":"string","description":"Caveat that branches are location-only and not stock-checked."}}},"returns":"Nearest branches per supplier with address, distance, opening hours, phone, website, rating, and directions link"},{"name":"optimize_material_pickup","displayName":"Optimize Material Pickup","description":"Choose the best supplier stop for collecting a materials basket using local availability evidence, route locations, pickup SLA, price, and strategy constraints.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"},"items":{"type":"array","description":"Material rows to source and route for pickup. Each row needs query and quantity.","items":{"type":"object","properties":{"query":{"type":"string","description":"Material or trade supply phrase with size/spec."},"quantity":{"type":"number","description":"Quantity required."},"unit":{"type":"string","description":"Optional unit label."}},"required":["query","quantity"]}},"traderLocation":{"type":"object","description":"Current trader location with optional lat, lng, and postcode.","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"postcode":{"type":"string"}}},"jobLocation":{"type":"object","description":"Job location with optional lat, lng, and postcode.","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"postcode":{"type":"string"}}},"route":{"type":"object","description":"Route context such as mode and departAt. Used as caller intent for pickup planning."},"suppliers":{"type":"array","items":{"type":"string"},"description":"Optional supplier names to include, such as Screwfix or Toolstation."},"strategy":{"type":"string","enum":["closest_to_trader","closest_to_job","minimize_detour","lowest_total_price","fastest_pickup","single_supplier_complete_basket","best_overall"],"description":"Pickup optimisation strategy.","default":"best_overall"},"constraints":{"type":"object","description":"Constraints such as mustHaveAllItemsToday, maxStops, maxDetourMinutes, maxDistanceMilesFromRoute, and preferSingleSupplier."},"includeAlternatives":{"type":"boolean","description":"Include alternate supplier plans and tradeoffs.","default":true}},"required":["items"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Find the best same-day pickup stop on the way to a job","input":{"country":"GB","strategy":"minimize_detour","traderLocation":{"lat":51.5074,"lng":-0.1278,"postcode":"WC2N 5DU"},"jobLocation":{"lat":51.475,"lng":-0.069,"postcode":"SE15 1QS"},"suppliers":["Screwfix","Toolstation","Wickes","B&Q"],"constraints":{"mustHaveAllItemsToday":true,"maxStops":1,"preferSingleSupplier":true},"items":[{"query":"MK Logic Plus 13A 2 gang switched socket white","quantity":2},{"query":"2.5mm twin and earth cable 10m","quantity":1}]}},{"description":"Pick the closest verified branch to the job","input":{"country":"GB","strategy":"closest_to_job","jobLocation":{"lat":51.475,"lng":-0.069,"postcode":"SE15 1QS"},"suppliers":["Screwfix","Toolstation"],"constraints":{"mustHaveAllItemsToday":true,"maxStops":1},"items":[{"query":"MK Logic Plus 13A 2 gang switched socket white","quantity":2}]}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"recommendation":{"type":"object","description":"Recommended pickup stop, item rows, material total, pickup time, route impact, and navigation URL."},"alternatives":{"type":"array","description":"Alternative supplier plans with explicit tradeoffs."},"evidence":{"type":"object","description":"Availability verification evidence inherited from the local availability check."}}},"returns":"Recommended pickup plan with store sequence, item availability, branch stock evidence, pickup SLA, route impact, material total, navigation URL, and alternatives"},{"name":"supplier_coverage","displayName":"Supplier Coverage","description":"Show regional supplier coverage and currency assumptions used by Trade Supplies before running live material price searches.","inputSchema":{"type":"object","properties":{"country_code":{"type":"string","description":"ISO-3166-1 alpha-2 country code for local suppliers and currency, such as GB, US, CA, AU, NZ, IE, DE, FR, NL, ES, or IT. Defaults to GB.","default":"GB"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check US supplier coverage","input":{"country_code":"US"}}],"pricing":"free","returns":"Preferred supplier names, currency, supported country list, and caveats for live shopping results"}],"workflow":["supplier_coverage","search_supplies","check_local_availability","find_branches","optimize_material_pickup","compare_prices","estimate_materials"],"icon":"/icons/trade-supplies.webp","changelog":[{"version":"0.01","date":"2026-06-11","changes":["Screwfix: check_local_availability now returns real per-branch stock quantities and collect-today / next-day status near a postcode, alongside Toolstation."]},{"version":"0.02","date":"2026-06-10","changes":["Prices, in/out-of-stock status, and product codes are now read directly from the supplier’s own product page for Screwfix, Wickes, Travis Perkins, B&Q, TLC Direct, and more — not just from shopping results — so quotes use merchant-confirmed figures and verified buy links.","New find_branches: find the nearest branches of trade suppliers to a postcode with address, distance, opening hours, phone, and directions.","supplier_coverage now shows which suppliers have merchant-verified online availability versus real branch click & collect stock."]},{"version":"0.03","date":"2026-05-14","changes":["Added local availability and pickup optimisation skills with branch stock evidence fields, direct merchant links, pickup SLA, store metadata, and explicit checkout-confirmation caveats.","Toolstation UK now uses public merchant branch and stock endpoints for real postcode-aware branch quantities; unsupported suppliers no longer receive placeholder branch rows."]},{"version":"0.04","date":"2026-05-06","changes":["Initial release with live trade supply search, price comparison, multi-item material estimates, and regional supplier coverage."]},{"version":"0.05","date":"2026-06-14","changes":["estimate_materials now prices every item in a bill at the same time, so multi-item estimates return much faster.","A temporary supplier-search hiccup on one item no longer fails the whole estimate — that row is returned for retry while the others are priced.","Large bills that reach the response time budget now return a partial estimate with the not-yet-priced rows under pending_items, instead of timing out; set max_wait_ms to tune the budget."]}],"premadePrompt":"Price these building materials in [country code] for job [job ID]: [list materials with quantities]. Prefer [Screwfix/TLC], include VAT, markup, SKU, buy link, and accounting fields.","requirements":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}],"credentials":[{"name":"serper","type":"secret","displayName":"Serper API Key","description":"Optional: use your own Serper key instead of the platform default","acquireUrl":"https://serper.dev/api-key","envFallback":"SERPER_API_KEY"}]},{"name":"lead-planner","displayName":"Lead Planner","subtitle":"Diagnose and plan lead generation","about":"**Lead Planner** diagnoses what's actually blocking your lead generation and builds a concrete plan to fix it. Rather than handing you a generic playbook, it identifies the specific bottleneck — awareness, conversion, follow-up, ad economics — and routes you to the right framework for that problem.\n\nMost businesses apply the wrong lead generation tactic for their stage. A pre-revenue founder doesn't need paid ads; an established agency doesn't need more warm outreach. This tool starts with a diagnosis to understand the real constraint, then builds a plan that fits the actual situation.\n\n### What you can do\n- **diagnose** — identify the lead generation bottleneck and get routed to the right framework\n- **lead_magnet_brief** — design a lead magnet from scratch with type, format, naming, and CTA\n- **outreach_plan** — build a warm or cold outreach system with scripts and follow-up sequences\n- **content_plan** — create a content strategy with platform selection and posting framework\n- **ad_plan** — build a paid ads plan with targeting, budget phasing, and unit economics\n- **advertising_plan** — synthesize everything into a one-page advertising plan with 30-day actions\n\n### Who it's for\nFounders and solo operators who need a structured approach to getting their first clients. Small business owners who've been doing random marketing and want a coherent system. Sales teams that need a documented outreach process rather than ad hoc tactics.\n\n### How to use it\n1. Always start with **diagnose** — describe your business, current methods, and goal\n2. Follow the recommended framework from the diagnosis: run **lead_magnet_brief**, **outreach_plan**, **content_plan**, or **ad_plan** based on what the diagnosis identifies\n3. Use **advertising_plan** for a complete one-page synthesis covering all channels and a 30-day action roadmap\n\n### Getting started\nRun **diagnose** with a description of what your business sells, your current monthly revenue, and what you want to achieve. The more specific you are, the more targeted the output.","version":"0.01","categories":["marketing"],"currency":"USD","skills":[{"name":"diagnose","displayName":"Diagnose Bottleneck","description":"Identify the real lead generation bottleneck and recommend which framework to apply next. Returns a diagnostic decision tree the agent uses to route the business to the right solution.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"Describe the business: what it sells, who buys it, and the current situation"},"monthly_revenue":{"type":"string","description":"Current monthly revenue (e.g. \"$5k\", \"$50k\", \"pre-revenue\")"},"current_methods":{"type":"string","description":"How leads are currently generated (e.g. \"warm outreach + Instagram content\")"},"team_size":{"type":"string","description":"Team size and who does what (e.g. \"solo\", \"3 people — me + 2 sales reps\")"},"goal":{"type":"string","description":"What the business wants to achieve (e.g. \"first 10 clients\", \"double revenue\")"}},"required":["business_description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Diagnose a gym with no consistent leads","input":{"business_description":"Local gym selling $150/mo memberships, 40 members, mostly from word of mouth","monthly_revenue":"$6k","goal":"Get to 100 members"}},{"description":"Diagnose a SaaS startup pre-revenue","input":{"business_description":"B2B SaaS for restaurant inventory management, $99/mo, pre-launch with beta users","monthly_revenue":"pre-revenue","current_methods":"None yet"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"business_context":{"type":"object","description":"Parsed business situation"},"framework_sections":{"type":"array","description":"Relevant diagnostic frameworks"},"guidance":{"type":"string","description":"Instructions for applying the frameworks"}}},"returns":"Diagnostic decision tree with routing logic and bottleneck identification framework"},{"name":"lead_magnet_brief","displayName":"Lead Magnet Brief","description":"Design a lead magnet from scratch — pick the type, format, name, and CTA. Returns the 7-step build framework and a brief template the agent fills in for the business.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"Describe the business: what it sells, who buys it, and the current situation"},"monthly_revenue":{"type":"string","description":"Current monthly revenue (e.g. \"$5k\", \"$50k\", \"pre-revenue\")"},"current_methods":{"type":"string","description":"How leads are currently generated (e.g. \"warm outreach + Instagram content\")"},"team_size":{"type":"string","description":"Team size and who does what (e.g. \"solo\", \"3 people — me + 2 sales reps\")"},"goal":{"type":"string","description":"What the business wants to achieve (e.g. \"first 10 clients\", \"double revenue\")"}},"required":["business_description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Design a lead magnet for a real estate agent","input":{"business_description":"Real estate agent helping first-time buyers in Austin, TX. Core offer is full buyer representation.","goal":"Get more leads from social media"}},{"description":"Design a lead magnet for a B2B consultant","input":{"business_description":"Supply chain consultant for mid-size manufacturers, $5k/engagement","current_methods":"Referrals only"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"business_context":{"type":"object","description":"Parsed business situation"},"framework_sections":{"type":"array","description":"Lead magnet design frameworks"},"guidance":{"type":"string","description":"Instructions for applying the frameworks"}}},"returns":"Lead magnet design framework with types, formats, naming formulas, and brief template"},{"name":"outreach_plan","displayName":"Outreach Plan","description":"Build a warm or cold outreach system with scripts, follow-up sequences, and volume targets. Returns the outreach framework and plan template the agent fills in for the business.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"Describe the business: what it sells, who buys it, and the current situation"},"monthly_revenue":{"type":"string","description":"Current monthly revenue (e.g. \"$5k\", \"$50k\", \"pre-revenue\")"},"current_methods":{"type":"string","description":"How leads are currently generated (e.g. \"warm outreach + Instagram content\")"},"team_size":{"type":"string","description":"Team size and who does what (e.g. \"solo\", \"3 people — me + 2 sales reps\")"},"goal":{"type":"string","description":"What the business wants to achieve (e.g. \"first 10 clients\", \"double revenue\")"},"outreach_type":{"type":"string","description":"Type of outreach to plan","enum":["warm","cold","both"],"default":"both"}},"required":["business_description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Build a warm outreach plan for a new coaching business","input":{"business_description":"Career coaching for mid-level tech professionals, $2k package","monthly_revenue":"pre-revenue","outreach_type":"warm"}},{"description":"Build a cold outreach plan for a B2B agency","input":{"business_description":"SEO agency targeting e-commerce brands doing $1M-$10M revenue","monthly_revenue":"$20k","outreach_type":"cold"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"business_context":{"type":"object","description":"Parsed business situation"},"framework_sections":{"type":"array","description":"Outreach system frameworks"},"guidance":{"type":"string","description":"Instructions for applying the frameworks"}}},"returns":"Outreach system with scripts, ACA framework, follow-up sequences, and plan template"},{"name":"content_plan","displayName":"Content Plan","description":"Create a content strategy with platform selection, posting cadence, content types, and give:ask ratio. Returns the Hook/Retain/Reward framework and plan template the agent fills in.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"Describe the business: what it sells, who buys it, and the current situation"},"monthly_revenue":{"type":"string","description":"Current monthly revenue (e.g. \"$5k\", \"$50k\", \"pre-revenue\")"},"current_methods":{"type":"string","description":"How leads are currently generated (e.g. \"warm outreach + Instagram content\")"},"team_size":{"type":"string","description":"Team size and who does what (e.g. \"solo\", \"3 people — me + 2 sales reps\")"},"goal":{"type":"string","description":"What the business wants to achieve (e.g. \"first 10 clients\", \"double revenue\")"},"platforms":{"type":"string","description":"Platforms already using or considering (e.g. \"Instagram, LinkedIn, YouTube\")"}},"required":["business_description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Create a content plan for a personal trainer","input":{"business_description":"Online personal trainer for busy professionals, $200/mo coaching","platforms":"Instagram, TikTok","goal":"Build audience to 10k followers"}},{"description":"Create a content plan for a SaaS founder","input":{"business_description":"Project management tool for construction teams, $49/mo per seat","current_methods":"Cold email only","platforms":"LinkedIn"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"business_context":{"type":"object","description":"Parsed business situation"},"framework_sections":{"type":"array","description":"Content strategy frameworks"},"guidance":{"type":"string","description":"Instructions for applying the frameworks"}}},"returns":"Content strategy framework with Hook/Retain/Reward, give:ask ratio, and plan template"},{"name":"ad_plan","displayName":"Paid Ads Plan","description":"Build a paid ads plan with ad structure, targeting, budget phasing, and LTGP:CAC math. Returns the Call Out + Value + CTA framework and plan template the agent fills in.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"Describe the business: what it sells, who buys it, and the current situation"},"monthly_revenue":{"type":"string","description":"Current monthly revenue (e.g. \"$5k\", \"$50k\", \"pre-revenue\")"},"current_methods":{"type":"string","description":"How leads are currently generated (e.g. \"warm outreach + Instagram content\")"},"team_size":{"type":"string","description":"Team size and who does what (e.g. \"solo\", \"3 people — me + 2 sales reps\")"},"goal":{"type":"string","description":"What the business wants to achieve (e.g. \"first 10 clients\", \"double revenue\")"},"ad_platform":{"type":"string","description":"Ad platform to plan for (e.g. \"Facebook\", \"Google\", \"Instagram\")"},"ltgp":{"type":"string","description":"Lifetime gross profit per customer (e.g. \"$500\", \"$3,000\")"},"cac":{"type":"string","description":"Current cost to acquire a customer (e.g. \"$50\", \"unknown\")"}},"required":["business_description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Plan Facebook ads for a local dentist","input":{"business_description":"Dental practice in Denver, $2k average patient value over 3 years","ad_platform":"Facebook","ltgp":"$2,000","cac":"unknown"}},{"description":"Plan Google ads for an online course","input":{"business_description":"Online photography course, $497 one-time, upsell to $2k mentorship","monthly_revenue":"$15k","ad_platform":"Google","ltgp":"$800","cac":"$200"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"business_context":{"type":"object","description":"Parsed business situation"},"framework_sections":{"type":"array","description":"Paid ads frameworks"},"guidance":{"type":"string","description":"Instructions for applying the frameworks"}}},"returns":"Paid ads framework with Call Out + Value + CTA, budget phasing, LTGP:CAC, and plan template"},{"name":"advertising_plan","displayName":"Full Advertising Plan","description":"Synthesize everything into a one-page advertising plan with roadmap level, More Better New analysis, and 30-day actions. Returns the full synthesis framework and one-page plan template the agent fills in.","inputSchema":{"type":"object","properties":{"business_description":{"type":"string","description":"Describe the business: what it sells, who buys it, and the current situation"},"monthly_revenue":{"type":"string","description":"Current monthly revenue (e.g. \"$5k\", \"$50k\", \"pre-revenue\")"},"current_methods":{"type":"string","description":"How leads are currently generated (e.g. \"warm outreach + Instagram content\")"},"team_size":{"type":"string","description":"Team size and who does what (e.g. \"solo\", \"3 people — me + 2 sales reps\")"},"goal":{"type":"string","description":"What the business wants to achieve (e.g. \"first 10 clients\", \"double revenue\")"},"referral_rate":{"type":"string","description":"Percentage of customers from referrals (e.g. \"10%\", \"unknown\")"},"has_employees":{"type":"boolean","description":"Whether employees are doing any advertising"},"has_affiliates":{"type":"boolean","description":"Whether affiliates or partners are promoting the business"}},"required":["business_description"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Build a full advertising plan for a growing agency","input":{"business_description":"Digital marketing agency for local restaurants, $2k/mo retainers","monthly_revenue":"$40k","current_methods":"Referrals, cold email, LinkedIn content","team_size":"5 people — me + 2 account managers + 2 sales reps","referral_rate":"30%","has_employees":true}},{"description":"Build a full plan for a solo founder","input":{"business_description":"Freelance web designer for small businesses, $3k-$8k per project","monthly_revenue":"$8k","current_methods":"Word of mouth only","team_size":"solo","referral_rate":"unknown"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"business_context":{"type":"object","description":"Parsed business situation"},"framework_sections":{"type":"array","description":"Full advertising plan frameworks"},"guidance":{"type":"string","description":"Instructions for applying the frameworks"}}},"returns":"Full advertising plan framework with More Better New, roadmap levels, and one-page plan template"}],"workflow":["diagnose","diagnose → lead_magnet_brief","diagnose → outreach_plan","diagnose → content_plan","diagnose → ad_plan","diagnose → advertising_plan"],"icon":"/icons/lead-planner.webp","changelog":[{"version":"0.01","date":"2026-04-15","changes":["Initial release with 6 planning skills"]}],"premadePrompt":"Use ToolRouter to diagnose my lead generation and build a plan. My business is [describe what you sell and who buys it]. I'm currently at [monthly revenue] and my main goal is [what you want to achieve]."},{"name":"agent-readiness","displayName":"Agent Readiness","subtitle":"Score your site for AI agents","about":"**Agent Readiness** audits any website and scores it 0–100 for AI agent compatibility. It checks 16 signals across five categories — discoverability, content accessibility, bot access control, protocol discovery, and commerce — and tells you exactly what to fix.\n\nAs AI agents become a significant source of web traffic, sites that aren't built for them get skipped or misread. This tool checks whether your site has the right signals: a readable robots.txt, sitemap, markdown negotiation, correct AI bot rules, MCP Server Card, OAuth discovery endpoints, payment protocols, and more. Each check returns pass, warn, or fail with actionable detail.\n\n### What you can do\n- Run a full 16-point agent-readiness audit on any URL\n- Get a 0–100 score broken down by category\n- See per-check pass/warn/fail results with specific findings\n- Identify the highest-impact issues to fix first\n\n### Who it's for\nDevelopers and product teams who want their site to work well with AI agents. SaaS companies whose products get discovered and used via AI assistants. Anyone building infrastructure for the agentic web who needs a baseline health check.\n\n### How to use it\n1. Call **check_readiness** with your website URL\n2. Review the score and category breakdown\n3. Focus on any fail results first — these block AI agents from accessing or understanding your content\n4. Work through warn results to improve discoverability and protocol support\n\n### Getting started\nNo setup needed — **check_readiness** is free and runs immediately on any public URL.","version":"0.02","categories":["development"],"currency":"USD","skills":[{"name":"check_readiness","displayName":"Check Readiness","description":"Audit a website for AI agent compatibility. Checks 16 signals across five categories and returns a 0–100 score with pass/warn/fail per item.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Website URL to audit — e.g. https://example.com"}},"required":["url"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Audit a SaaS website","input":{"url":"https://stripe.com"}},{"description":"Audit a developer tool site","input":{"url":"https://vercel.com"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Normalised origin URL that was checked"},"score":{"type":"number","description":"Overall agent-readiness score 0–100"}}},"returns":"Structured report with score, section statuses, and per-check pass/warn/fail results"}],"workflow":["check_readiness"],"icon":"/icons/agent-readiness.webp","changelog":[{"version":"0.01","date":"2026-04-19","changes":["Initial release — 16-check audit across 5 categories"]},{"version":"0.02","date":"2026-04-20","changes":["Fixed Content-Signal header detection (now correctly checks Content-Signal, not Content-Signals)","Improved WebMCP Link header detection"]}],"premadePrompt":"Use ToolRouter to check how agent-ready [your website URL] is. Score it across discoverability, content accessibility, bot access control, protocol discovery, and commerce — and tell me the top 3 things to fix."},{"name":"options-flow","displayName":"Options Flow","subtitle":"Chain, flow & unusual activity","about":"**Options Flow** gives you real-time US equity options data sourced from the consolidated OPRA feed — covering all 17 US options exchanges including CBOE, Nasdaq PHLX, NYSE Arca, BOX, and MIAX. It's the same data professional traders use to spot unusual positioning, monitor block trades, and track open interest trends.\n\nThe tool is built for traders and analysts who want to understand what the smart money is doing. Detect contracts with abnormally high volume relative to open interest — a common signal for unusual directional bets. Scan the full options chain by expiry and strike. Surface large block trades above a minimum size. Track how total open interest has changed over time to see money flowing in or out of a ticker.\n\n### What you can do\n- Detect unusual activity — contracts ranked by volume-to-open-interest ratio\n- View the full options chain for any stock, filterable by expiry date\n- Surface large individual trades (block trades and sweeps) by contract size\n- Track open interest history as a trend chart or broken down by expiry\n- Look up detailed contract specs including tick size, multiplier, and exchange\n\n### Who it's for\nActive traders, options analysts, hedge fund researchers, and quant developers who need institutional-quality options flow data. Useful for building watchlists, monitoring unusual activity around earnings or macro events, and validating trading hypotheses.\n\n### How to use it\n1. Use **unusual_activity** with a ticker symbol to find contracts with abnormal volume — filter to calls or puts\n2. Use **options_chain** to see the full chain for a specific expiry date\n3. Use **large_trades** to find individual block trades above a minimum contract threshold\n4. Use **open_interest_history** to track how positioning has shifted over a date range\n5. Use **contract_specs** to look up specs for a specific strike or expiry\n\n### Getting started\nConnect your data account to enable live options data queries.","version":"0.02","categories":["finance","data"],"currency":"USD","skills":[{"name":"unusual_activity","displayName":"Unusual Activity","description":"Detect options contracts with abnormally high volume relative to open interest. High volume-to-OI ratios indicate unusual directional bets or potential insider activity.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Underlying ticker (e.g. \"AAPL\", \"NVDA\", \"SPY\")"},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to the last trading day."},"type":{"type":"string","description":"Filter to calls, puts, or both. Default: \"both\"","enum":["call","put","both"],"default":"both"},"min_volume":{"type":"number","description":"Minimum contract volume to include. Default: 100.","default":100},"limit":{"type":"number","description":"Number of top contracts to return (max 200). Default: 25.","default":25}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Unusual call activity in Apple options","input":{"symbol":"AAPL","type":"call"}},{"description":"Top 10 unusual put contracts in NVDA","input":{"symbol":"NVDA","type":"put","limit":10}},{"description":"All unusual activity in SPY with min volume 500","input":{"symbol":"SPY","min_volume":500}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"rows":{"type":"array","description":"Contracts sorted by volume/OI ratio desc, each with strike, expiry, type, volume, open_interest, volume_oi_ratio, close_price, premium_total"}}},"returns":"Contracts ranked by volume-to-OI ratio with strike, expiry, type, volume, open interest, ratio, last price, and total premium value."},{"name":"options_chain","displayName":"Options Chain","description":"Full options chain for a stock, showing calls and puts side by side at each strike for every expiry. Filter to a specific expiry date to narrow the view.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Underlying ticker (e.g. \"AAPL\", \"TSLA\", \"SPY\")"},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to the last trading day."},"expiry":{"type":"string","description":"Filter to a specific expiry date (YYYY-MM-DD). Omit to get all expiries."}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Full options chain for Apple","input":{"symbol":"AAPL"}},{"description":"TSLA options expiring this Friday","input":{"symbol":"TSLA","expiry":"2026-04-25"}},{"description":"SPY chain for next month expiry","input":{"symbol":"SPY","expiry":"2026-05-16"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"rows":{"type":"array","description":"Chain rows per expiry/strike with call_volume, call_oi, call_last, put_volume, put_oi, put_last"},"expiries":{"type":"array","description":"List of all available expiry dates"}}},"returns":"Flattened chain rows grouped by expiry and strike, with call and put volume, open interest, and last price per side."},{"name":"large_trades","displayName":"Large Trades","description":"Individual large options trades (block trades and sweeps) above a minimum contract size. Identifies who is making big directional bets, with price, premium, and buy/sell side.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Underlying ticker (e.g. \"AAPL\", \"NVDA\", \"AMZN\")"},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to the last trading day."},"min_contracts":{"type":"number","description":"Minimum contracts per trade to include. Default: 500.","default":500},"type":{"type":"string","description":"Filter to calls, puts, or both. Default: \"both\"","enum":["call","put","both"],"default":"both"},"limit":{"type":"number","description":"Number of trades to return (max 200). Default: 50.","default":50}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Large options trades in Apple today","input":{"symbol":"AAPL"}},{"description":"Big call sweeps in NVDA over 1000 contracts","input":{"symbol":"NVDA","min_contracts":1000,"type":"call"}},{"description":"Large put trades in SPY","input":{"symbol":"SPY","type":"put","min_contracts":2000}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"rows":{"type":"array","description":"Large trades sorted by contracts desc, each with time, raw_symbol, strike, expiry, type, contracts, price, premium, side"}}},"returns":"Individual large trades sorted by size, with timestamp, contract details, price, total premium, and buy/sell side."},{"name":"open_interest_history","displayName":"Open Interest History","description":"Track how total open interest in a stock's options has changed over time. Shows whether money is flowing in or out of the options market for that ticker.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Underlying ticker (e.g. \"AAPL\", \"TSLA\", \"SPY\")"},"start":{"type":"string","description":"Start date in YYYY-MM-DD format. Defaults to 30 days ago."},"end":{"type":"string","description":"End date in YYYY-MM-DD format. Defaults to yesterday."},"aggregate":{"type":"string","description":"How to aggregate: \"total\" (sum across all contracts, returned as line chart) or \"by_expiry\" (per expiry date, returned as table). Default: \"total\".","enum":["total","by_expiry"],"default":"total"}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Total open interest trend for Apple over 30 days","input":{"symbol":"AAPL"}},{"description":"SPY open interest broken down by expiry","input":{"symbol":"SPY","aggregate":"by_expiry"}},{"description":"TSLA OI history for the past week","input":{"symbol":"TSLA","start":"2026-04-12","end":"2026-04-18"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"format_data":{"type":"object","description":"Chart data when aggregate=total: labels (dates), datasets with total OI values"},"rows":{"type":"array","description":"Table rows when aggregate=by_expiry: date, expiry, open_interest"}}},"returns":"Line chart of total OI by date (aggregate=total) or table of OI by date and expiry (aggregate=by_expiry)."},{"name":"contract_specs","displayName":"Contract Specs","description":"Look up detailed contract specifications for options — strike, expiry, exchange, currency, tick size, and multiplier. Filter by expiry or strike to narrow results.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Underlying ticker (e.g. \"AAPL\", \"MSFT\", \"QQQ\")"},"date":{"type":"string","description":"Trading date in YYYY-MM-DD format. Defaults to the last trading day."},"expiry":{"type":"string","description":"Filter to a specific expiry date (YYYY-MM-DD). Optional."},"strike":{"type":"number","description":"Filter to a specific strike price. Optional."},"type":{"type":"string","description":"Filter to calls, puts, or both. Default: \"both\".","enum":["call","put","both"],"default":"both"}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"All contract specs for Apple options","input":{"symbol":"AAPL"}},{"description":"NVDA call contracts expiring next month","input":{"symbol":"NVDA","expiry":"2026-05-16","type":"call"}},{"description":"SPY contracts at strike 520","input":{"symbol":"SPY","strike":520}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"rows":{"type":"array","description":"Contract specs sorted by expiry, strike, type"}}},"returns":"Contract specification rows with raw_symbol, strike, expiry, type, exchange, currency, min_price_increment, and contract_multiplier."}],"icon":"/icons/options-flow.webp","changelog":[{"version":"0.01","date":"2026-04-19","changes":["Initial release"]},{"version":"0.02","date":"2026-04-19","changes":["Clarified data source: OPRA consolidated feed covering all 17 US options exchanges"]}],"premadePrompt":"Show me unusual options activity for [ticker symbol] today — focus on calls with the highest volume-to-open-interest ratio.","requirements":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}],"credentials":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}]},{"name":"equities","displayName":"Equities","subtitle":"Institutional equity data & order flow","about":"**Equities** delivers institutional-grade US stock market data sourced directly from NYSE, Nasdaq, CBOE, and every US equity venue. This is the raw market microstructure data that professional traders use — tick-by-tick prints, Level 2 order book depth, auction imbalances, and trading halts.\n\nIt goes beyond basic price data. You can pull the actual trade tape filtered to block-sized prints, see the full order book at any historical moment, track opening and closing auction imbalances in real time, and identify every halt and resume event with precise duration calculations. All data is historical, making it ideal for research, backtesting, and post-trade analysis.\n\n### What you can do\n- **trade_tape** — tick-by-tick institutional trades filtered by size, side, and time window\n- **order_book_depth** — Level 2 snapshot (top 10 bids/asks) at any historical datetime\n- **price_history_pro** — consolidated OHLCV from exchange feeds at 1-minute, 1-hour, or 1-day intervals\n- **auction_imbalance** — opening and closing auction imbalance data from Nasdaq and NYSE\n- **trading_halts** — halt and resume events with duration calculations\n- **nbbo_history** — National Best Bid and Offer time series as a chart or tick-level table\n\n### Who it's for\nQuantitative researchers, algorithmic traders, market microstructure analysts, and financial data engineers who need exchange-sourced equity data rather than delayed or aggregated feeds.\n\n### How to use it\n1. For institutional order flow, call **trade_tape** with a ticker symbol, date, and minimum share size.\n2. For price research, call **price_history_pro** with a symbol and interval.\n3. For auction analysis, call **auction_imbalance** to see supply/demand imbalances at open and close.\n\n### Getting started\nConnect your data account to unlock historical market data access, then call **trade_tape** with any US equity ticker.","version":"0.02","categories":["finance","data"],"currency":"USD","skills":[{"name":"trade_tape","displayName":"Trade Tape","description":"Tick-by-tick institutional trades for a US equity on a given date. Filter by minimum share size, aggressor side (buy/sell), and time window. Returns trades sorted newest-first with price, size, side, and venue.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"NVDA\", \"MSFT\")"},"date":{"type":"string","description":"Trading date YYYY-MM-DD (default: yesterday)"},"min_size":{"type":"number","description":"Minimum trade size in shares (default: 10000)","default":10000},"start_time":{"type":"string","description":"Start of time window in HH:MM Eastern Time (e.g. \"09:30\")"},"end_time":{"type":"string","description":"End of time window in HH:MM Eastern Time (e.g. \"16:00\")"},"side":{"type":"string","description":"Aggressor side filter: \"buy\", \"sell\", or \"both\" (default: \"both\")","enum":["buy","sell","both"],"default":"both"},"limit":{"type":"number","description":"Max trades to return (1–1000, default: 100)","default":100}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Large NVDA trades on a specific date","input":{"symbol":"NVDA","date":"2025-01-15","min_size":50000}},{"description":"Buy-side institutional tape for Apple during open hour","input":{"symbol":"AAPL","side":"buy","start_time":"09:30","end_time":"10:30"}},{"description":"All large trades for MSFT with high limit","input":{"symbol":"MSFT","min_size":25000,"limit":500}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"date":{"type":"string"},"rows":{"type":"array","description":"Trade records with time, price, size, side, flags, venue"},"count":{"type":"number"}}},"returns":"Institutional trades sorted newest-first with price, size, aggressor side, exchange flags, and venue"},{"name":"order_book_depth","displayName":"Order Book Depth","description":"Level 2 order book aggregated across all US venues at a specific historical moment. Returns up to 10 bid and ask price levels with sizes, spread, mid price, and a depth imbalance ratio showing buy vs. sell pressure.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"NVDA\")"},"datetime":{"type":"string","description":"ISO 8601 datetime with timezone offset (e.g. \"2025-01-15T14:30:00-05:00\")"},"duration_seconds":{"type":"number","description":"Window to capture the latest snapshot in, 1–60 seconds (default: 1)","default":1}},"required":["symbol","datetime"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"AAPL order book at market open","input":{"symbol":"AAPL","datetime":"2025-01-15T09:30:00-05:00","duration_seconds":5}},{"description":"NVDA order book at 2:30pm ET","input":{"symbol":"NVDA","datetime":"2025-01-15T14:30:00-05:00"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"timestamp":{"type":"string"},"bids":{"type":"array","description":"Up to 10 bid levels with price and size"},"asks":{"type":"array","description":"Up to 10 ask levels with price and size"},"mid_price":{"type":"number"},"spread":{"type":"number"},"depth_imbalance":{"type":"number","description":"Range -1 to 1; positive = more bid depth"}}},"returns":"Level 2 order book snapshot with 10 bid/ask levels, mid price, spread, and depth imbalance"},{"name":"price_history_pro","displayName":"Price History Pro","description":"Institutional-grade OHLCV price history from consolidated US exchange feeds via Databento. Supports daily, hourly, and 1-minute bars. Returns a chart of close prices plus the full OHLCV bar array for quantitative analysis.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"SPY\", \"NVDA\")"},"interval":{"type":"string","description":"Bar interval: \"1d\", \"1h\", or \"1m\" (default: \"1d\")","enum":["1d","1h","1m"],"default":"1d"},"start":{"type":"string","description":"Start date YYYY-MM-DD (required)"},"end":{"type":"string","description":"End date YYYY-MM-DD (default: yesterday)"}},"required":["symbol","start"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Daily NVDA price history for Q1 2025","input":{"symbol":"NVDA","interval":"1d","start":"2025-01-01","end":"2025-03-31"}},{"description":"Hourly AAPL bars for a single week","input":{"symbol":"AAPL","interval":"1h","start":"2025-01-13","end":"2025-01-17"}},{"description":"1-minute SPY bars for a single trading day","input":{"symbol":"SPY","interval":"1m","start":"2025-01-15","end":"2025-01-15"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"interval":{"type":"string"},"data_points":{"type":"number"},"bars":{"type":"array","description":"OHLCV bars with date, open, high, low, close, volume"}}},"returns":"Close price chart plus full OHLCV bar array from consolidated exchange feeds"},{"name":"auction_imbalance","displayName":"Auction Imbalance","description":"Opening and closing auction imbalance data from Nasdaq and NYSE. Shows the paired quantity, imbalance quantity, imbalance side (buy/sell/balanced), and reference price leading up to market open or close. Critical for understanding institutional order flow at auction crosses.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"NVDA\")"},"date":{"type":"string","description":"Trading date YYYY-MM-DD (default: yesterday)"},"auction_type":{"type":"string","description":"Auction to query: \"open\", \"close\", or \"both\" (default: \"close\")","enum":["open","close","both"],"default":"close"},"venue":{"type":"string","description":"Exchange to query: \"nasdaq\", \"nyse\", or \"both\" (default: \"both\")","enum":["nasdaq","nyse","both"],"default":"both"}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"AAPL closing auction imbalance from both venues","input":{"symbol":"AAPL","auction_type":"close"}},{"description":"NVDA opening auction from Nasdaq only","input":{"symbol":"NVDA","auction_type":"open","venue":"nasdaq"}},{"description":"Full day auction data for MSFT on a specific date","input":{"symbol":"MSFT","date":"2025-01-15","auction_type":"both"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"date":{"type":"string"},"rows":{"type":"array","description":"Imbalance records with time, auction_type, venue, paired_qty, imbalance_qty, imbalance_side, ref_price"},"count":{"type":"number"}}},"returns":"Auction imbalance records from Nasdaq ITCH and/or NYSE PILLAR feeds"},{"name":"trading_halts","displayName":"Trading Halts","description":"Trading halt and resume events for a US equity over a date range. Pairs halt and resume events to calculate halt duration in seconds. Useful for identifying regulatory halts, circuit breakers, and volatility halts.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"GME\")"},"date":{"type":"string","description":"Single trading day YYYY-MM-DD (overrides start/end if provided)"},"start":{"type":"string","description":"Start date YYYY-MM-DD (default: 30 days ago)"},"end":{"type":"string","description":"End date YYYY-MM-DD (default: yesterday)"}},"required":["symbol"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"All trading halts for GME over the past 30 days","input":{"symbol":"GME"}},{"description":"Halts for NVDA on a specific date","input":{"symbol":"NVDA","date":"2025-01-15"}},{"description":"AAPL halts over a custom date range","input":{"symbol":"AAPL","start":"2025-01-01","end":"2025-03-31"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"rows":{"type":"array","description":"Halt/resume events with datetime, event_type, reason, venue, duration_seconds"},"count":{"type":"number"}}},"returns":"Halt and resume events with paired duration, reason, and venue from consolidated feed"},{"name":"nbbo_history","displayName":"NBBO History","description":"National Best Bid/Offer time series for a US equity on a trading day. Use \"1m\" interval for a chart of minute-by-minute NBBO midpoint, or \"tick\" for the raw Level 1 quote stream with best bid, best ask, and spread at every quote change.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker symbol (e.g. \"AAPL\", \"NVDA\")"},"date":{"type":"string","description":"Trading date YYYY-MM-DD (required)"},"interval":{"type":"string","description":"Resolution: \"1m\" for minute bars or \"tick\" for every quote change (default: \"1m\")","enum":["1m","tick"],"default":"1m"},"start_time":{"type":"string","description":"Start of time window HH:MM Eastern Time (e.g. \"09:30\")"},"end_time":{"type":"string","description":"End of time window HH:MM Eastern Time (e.g. \"16:00\")"}},"required":["symbol","date"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"examples":[{"description":"Minute-by-minute NBBO for AAPL on a trading day","input":{"symbol":"AAPL","date":"2025-01-15","interval":"1m"}},{"description":"Tick-level NBBO for NVDA during power hour","input":{"symbol":"NVDA","date":"2025-01-15","interval":"tick","start_time":"15:00","end_time":"16:00"}},{"description":"Full day 1m NBBO for SPY","input":{"symbol":"SPY","date":"2025-01-15"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"symbol":{"type":"string"},"date":{"type":"string"},"interval":{"type":"string"},"data_points":{"type":"number"},"rows":{"type":"array","description":"For tick interval: best_bid, best_ask, spread per quote"}}},"returns":"For 1m: close price chart; for tick: quote-by-quote table with best bid, best ask, spread"}],"icon":"/icons/equities.webp","changelog":[{"version":"0.01","date":"2026-04-19","changes":["Initial release"]},{"version":"0.02","date":"2026-04-19","changes":["Clarified data sources: NYSE, Nasdaq, CBOE, and all US equity venues"]}],"premadePrompt":"Show me the institutional trade tape for [ticker] on [date], and what was the auction imbalance at the close?","requirements":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}],"credentials":[{"name":"databento","type":"secret","displayName":"Databento API Key","description":"API key for institutional market data from direct exchange feeds","required":true,"acquireUrl":"https://databento.com/signup","envFallback":"DATABENTO_API_KEY"}]},{"name":"image-to-3d","displayName":"Image to 3D","subtitle":"Turn any photo into a 3D model","about":"**Image to 3D** converts photos, text descriptions, or multiple reference angles into fully-textured 3D models you can import directly into Blender, Maya, Unreal Engine, or Unity. The output is a GLB file with physically based rendering materials and an interactive 3D viewer inside Claude.\n\nTurning a product photo or concept sketch into a 3D asset used to take hours of modeling work. This tool does it in 1-3 minutes, producing game-ready or high-fidelity hero assets depending on the model you choose.\n\n### What you can do\n- **image_to_3d** — generate a 3D model from a single photo, with choice of high-fidelity PBR or game-ready low-poly output\n- **text_to_3d** — generate a 3D model from a text description — describe the object, material, and style\n- **multiview_to_3d** — produce a higher-accuracy model from 2-4 photos of the same object from different angles\n\n### Who it's for\nGame developers creating props and characters, product designers visualizing concepts in 3D, e-commerce teams building product configurators, and architects or designers creating object assets for spatial rendering.\n\n### How to use it\n1. Use **image_to_3d** with a single photo URL for most objects — choose H3.1 for maximum fidelity with PBR textures or P1 for game-ready topology\n2. Use **text_to_3d** with a descriptive prompt for objects you don't have a photo of\n3. Use **multiview_to_3d** for best results — provide front, left, back, and right views if possible\n4. Set texture_quality and geometry_quality to \"detailed\" on H3.1 for print or hero-asset quality; add quad:true for rigging-ready meshes\n\n### Getting started\nConnect your account to activate 3D generation — models take 1-3 minutes and return a GLB you can view interactively before downloading.","version":"0.01","categories":["media","ai"],"currency":"USD","skills":[{"name":"image_to_3d","displayName":"Image to 3D","description":"Generate a 3D model from a single image. Supports Tripo H3.1 (high-fidelity PBR), Tripo P1 (game-ready low-poly), and ReconViaGen (multi-angle capable). Outputs GLB — import directly into Blender, Maya, Unreal, or Unity. Takes 1-3 minutes.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Media as ToolRouter file ID or hosted HTTP(S) URL."},"model":{"type":"string","enum":["h3.1","p1","reconviagen"],"default":"h3.1","description":"h3.1: high-fidelity PBR hero assets. p1: game-ready low-poly (faster). reconviagen: multi-image reconstruction with configurable resolution."},"texture_quality":{"type":"string","enum":["standard","detailed"],"description":"Texture resolution. H3.1 only. Default: standard."},"geometry_quality":{"type":"string","enum":["standard","detailed"],"description":"Geometry detail level. H3.1 only. Default: standard."},"quad":{"type":"boolean","description":"Quad-topology mesh instead of triangles (better for rigging/sculpting). H3.1 only."},"face_limit":{"type":"number","description":"Target polygon count. Leave unset for adaptive quality."},"texture":{"type":"boolean","description":"Generate textures. Default: true."},"pbr":{"type":"boolean","description":"Generate PBR (physically based rendering) materials. H3.1 only. Default: true."},"model_seed":{"type":"number","description":"Seed for reproducible geometry output."},"resolution":{"type":"number","enum":[512,1024,1536],"description":"Output resolution. ReconViaGen only. Default: 1024."},"texture_size":{"type":"number","enum":[1024,2048,4096],"description":"Texture map resolution in pixels. ReconViaGen only. Default: 2048."}},"required":["image_url"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Generate a high-fidelity product 3D model","input":{"image_url":"https://example.com/product.jpg","model":"h3.1"}},{"description":"Generate a game-ready low-poly model","input":{"image_url":"https://example.com/character.jpg","model":"p1"}},{"description":"High-fidelity model with detailed textures and quad mesh for rigging","input":{"image_url":"https://example.com/figure.jpg","model":"h3.1","texture_quality":"detailed","geometry_quality":"detailed","quad":true}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"glb_url":{"type":"string","description":"GLB download URL — import directly into Blender, Maya, Unreal, Unity, or any GLTF viewer."},"preview_image_url":{"type":"string","description":"Rendered preview image of the 3D model."},"base_model_url":{"type":"string","description":"Untextured base mesh GLB. Tripo3D models only."},"pbr_model_url":{"type":"string","description":"PBR-textured GLB variant. Tripo3D models only."},"model":{"type":"string","description":"Model used."},"request_id":{"type":"string","description":"fal.ai request ID."}}},"returns":"GLB model URL (importable into Blender, Maya, Unreal, Unity, etc.), preview image, and interactive 3D viewer. H3.1/P1 also return separate base_model_url and pbr_model_url variants."},{"name":"text_to_3d","displayName":"Text to 3D","description":"Generate a 3D model from a text description using Tripo H3.1 or P1. Outputs GLB with PBR textures — import into Blender, Maya, Unreal, or Unity. Takes 1-3 minutes.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the 3D object to generate (max 1024 chars). Be specific about shape, material, and style."},"model":{"type":"string","enum":["h3.1","p1"],"default":"h3.1","description":"h3.1: high-fidelity PBR output. p1: game-ready low-poly topology."},"negative_prompt":{"type":"string","description":"Features to avoid in generation. H3.1 only."},"texture_quality":{"type":"string","enum":["standard","detailed"],"description":"Texture resolution. H3.1 only. Default: standard."},"geometry_quality":{"type":"string","enum":["standard","detailed"],"description":"Geometry detail level. H3.1 only. Default: standard."},"quad":{"type":"boolean","description":"Quad-topology mesh instead of triangles (better for rigging/sculpting). H3.1 only."},"face_limit":{"type":"number","description":"Target polygon count. Leave unset for adaptive quality."},"texture":{"type":"boolean","description":"Generate textures. Default: true."},"pbr":{"type":"boolean","description":"Generate PBR (physically based rendering) materials. H3.1 only. Default: true."},"model_seed":{"type":"number","description":"Seed for reproducible geometry output."}},"required":["prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Generate a sci-fi helmet in H3.1","input":{"prompt":"A futuristic sci-fi helmet with visor, metallic surface, blue LED accents","model":"h3.1"}},{"description":"Generate a low-poly game prop","input":{"prompt":"A medieval wooden chest with iron lock and hinges, game asset style","model":"p1"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"glb_url":{"type":"string","description":"GLB download URL — import directly into Blender, Maya, Unreal, Unity, or any GLTF viewer."},"preview_image_url":{"type":"string","description":"Rendered preview image of the 3D model."},"base_model_url":{"type":"string","description":"Untextured base mesh GLB. Tripo3D models only."},"pbr_model_url":{"type":"string","description":"PBR-textured GLB variant. Tripo3D models only."},"model":{"type":"string","description":"Model used."},"request_id":{"type":"string","description":"fal.ai request ID."}}},"returns":"GLB model URL (importable into Blender, Maya, Unreal, Unity, etc.), preview image, and interactive 3D viewer. H3.1/P1 also return separate base_model_url and pbr_model_url variants."},{"name":"multiview_to_3d","displayName":"Multiview to 3D","description":"Generate a high-accuracy 3D model from multiple photos of the same object. Tripo H3.1 accepts 2-4 images (front/left/back/right order). ReconViaGen accepts 1+ images from any angles. Outputs GLB — import into Blender, Maya, Unreal, or Unity. Takes 1-3 minutes.","inputSchema":{"type":"object","properties":{"image_urls":{"type":"array","items":{"type":"string"},"description":"Media as ToolRouter file IDs or hosted HTTP(S) URLs."},"model":{"type":"string","enum":["h3.1","reconviagen"],"default":"h3.1","description":"h3.1: 2-4 images (front/left/back/right order), high-fidelity PBR. reconviagen: 1 or more images from any angles, configurable resolution."},"texture_quality":{"type":"string","enum":["standard","detailed"],"description":"Texture resolution. H3.1 only. Default: standard."},"geometry_quality":{"type":"string","enum":["standard","detailed"],"description":"Geometry detail level. H3.1 only. Default: standard."},"quad":{"type":"boolean","description":"Quad-topology mesh instead of triangles (better for rigging/sculpting). H3.1 only."},"face_limit":{"type":"number","description":"Target polygon count. Leave unset for adaptive quality."},"texture":{"type":"boolean","description":"Generate textures. Default: true."},"pbr":{"type":"boolean","description":"Generate PBR (physically based rendering) materials. H3.1 only. Default: true."},"model_seed":{"type":"number","description":"Seed for reproducible geometry output."},"resolution":{"type":"number","enum":[512,1024,1536],"description":"Output resolution. ReconViaGen only. Default: 1024."},"texture_size":{"type":"number","enum":[1024,2048,4096],"description":"Texture map resolution. ReconViaGen only. Default: 2048."}},"required":["image_urls"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":90,"timeoutSeconds":600,"mode":"io","restartPolicy":"retry"}},"examples":[{"description":"Reconstruct a product from front and back photos","input":{"image_urls":["https://example.com/front.jpg","https://example.com/back.jpg"],"model":"h3.1"}},{"description":"Reconstruct from multiple angles with ReconViaGen","input":{"image_urls":["https://example.com/angle1.jpg","https://example.com/angle2.jpg","https://example.com/angle3.jpg"],"model":"reconviagen"}},{"description":"High-quality four-view product reconstruction","input":{"image_urls":["https://example.com/front.jpg","https://example.com/left.jpg","https://example.com/back.jpg","https://example.com/right.jpg"],"model":"h3.1","texture_quality":"detailed"}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"glb_url":{"type":"string","description":"GLB download URL — import directly into Blender, Maya, Unreal, Unity, or any GLTF viewer."},"preview_image_url":{"type":"string","description":"Rendered preview image of the 3D model."},"base_model_url":{"type":"string","description":"Untextured base mesh GLB. Tripo3D models only."},"pbr_model_url":{"type":"string","description":"PBR-textured GLB variant. Tripo3D models only."},"model":{"type":"string","description":"Model used."},"request_id":{"type":"string","description":"fal.ai request ID."}}},"returns":"GLB model URL (importable into Blender, Maya, Unreal, Unity, etc.), preview image, and interactive 3D viewer. H3.1/P1 also return separate base_model_url and pbr_model_url variants."}],"workflow":["image_to_3d","text_to_3d","multiview_to_3d"],"icon":"/icons/image-to-3d.webp","changelog":[{"version":"0.01","date":"2026-04-19","changes":["Initial release — H3.1 and P1 image/text/multiview-to-3D via Tripo3D, ReconViaGen 0.5 multi-image reconstruction"]}],"premadePrompt":"Use ToolRouter to turn [image URL or uploaded photo] into a 3D model I can import into Blender. Use H3.1 for maximum quality with PBR textures. Show me the interactive 3D viewer.","brain":{"instructions":"When brain knowledge is available:\n    - Use accurate product names and visual descriptions when generating 3D models of brand products\n    - Reference style preferences and visual guidelines from brand knowledge\n    - Choose model quality (H3.1 detailed vs P1) based on intended use case from context","produces":["creative_insights","design_insights"]},"requirements":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}],"credentials":[{"name":"fal","type":"secret","displayName":"fal.ai API Key","description":"Optional: use your own fal.ai key instead of the platform default","acquireUrl":"https://fal.ai/dashboard/keys","envFallback":"FAL_KEY"},{"name":"prodia","type":"secret","displayName":"Prodia API Token","description":"Optional: use your own Prodia token instead of the platform default","acquireUrl":"https://app.prodia.com/api","envFallback":"PRODIA_TOKEN"},{"name":"higgsfield","type":"secret","displayName":"Higgsfield API Key","description":"Optional: use your own Higgsfield key instead of the platform default","acquireUrl":"https://cloud.higgsfield.ai","envFallback":"HIGGSFIELD_API_KEY"},{"name":"phota","type":"secret","displayName":"Photalabs API Key","description":"Optional: use your own Photalabs key instead of the platform default","acquireUrl":"https://platform.photalabs.com","envFallback":"PHOTA_API_KEY"},{"name":"google","type":"secret","displayName":"Google AI API Key","description":"Optional: use your own Google AI key instead of the platform default","acquireUrl":"https://aistudio.google.com/apikey","envFallback":"GOOGLE_AI_KEY"},{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","acquireUrl":"https://openrouter.ai/keys","envFallback":"OPENROUTER_API_KEY"},{"name":"elevenlabs","type":"secret","displayName":"ElevenLabs API Key","description":"Optional: use your own ElevenLabs key instead of the platform default","acquireUrl":"https://elevenlabs.io/app/settings/api-keys","envFallback":"ELEVENLABS_API_KEY"}]},{"name":"send-email","displayName":"Send Email","subtitle":"Send transactional email","about":"**Send Email** lets AI agents send transactional emails on your behalf — through your own verified sending domain, not a shared platform address. Great for notifications, receipts, outreach sequences, and automated follow-ups triggered by agent workflows.\n\nIt connects to your email account so messages come from you. You can send a single email or batch up to 100 at once, check delivery status, and list your verified sending domains — all from one tool without touching code.\n\n### What you can do\n- Send a single transactional email with HTML or plain-text body, CC, BCC, and reply-to\n- Send up to 100 emails in a single batch call\n- Check delivery status, opens, and clicks on any sent message\n- List recent sent emails\n- View your verified sending domains to confirm valid from addresses\n\n### Who it's for\nDevelopers and power users who want AI agents to send emails as part of automated workflows. Teams using Claude to draft and send outreach, confirmations, or alerts without manually copying content into an email client.\n\n### How to use it\n1. Use **list_domains** to confirm which sending addresses are available on your account\n2. Use **send_email** to send a message — the from address must be on a verified domain\n3. Use **get_email** with the returned email ID to check delivery status, opens, and clicks\n4. For bulk sends, use **send_batch** with an array of email objects — same structure, up to 100 at once\n\n### Getting started\nConnect your email account to get started. Once connected, use list_domains to see which from addresses you can send from.","version":"0.01","categories":["communication"],"currency":"USD","skills":[{"name":"send_email","displayName":"Send Email","description":"Send a transactional email from a verified Resend domain. Supports HTML and plain-text bodies, CC, BCC, reply-to, and scheduled delivery.","inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Sender address on a verified domain (e.g. \"Name <email@yourdomain.com>\"). Use list_domains to see available domains."},"to":{"type":"string","description":"Recipient address or array of addresses (max 50)."},"subject":{"type":"string","description":"Email subject line."},"html":{"type":"string","description":"HTML body of the email. Required if text is not provided."},"text":{"type":"string","description":"Plain-text body of the email. Required if html is not provided."},"cc":{"type":"array","description":"CC recipient addresses.","items":{"type":"string"}},"bcc":{"type":"array","description":"BCC recipient addresses.","items":{"type":"string"}},"reply_to":{"type":"string","description":"Reply-to address. Defaults to the from address."},"scheduled_at":{"type":"string","description":"When to send the email. ISO 8601 datetime (e.g. \"2026-05-01T09:00:00Z\") or natural language (e.g. \"in 2 hours\"). Omit to send immediately."}},"required":["from","to","subject"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Send a plain-text email","input":{"from":"hello@yourdomain.com","to":"recipient@example.com","subject":"Welcome aboard","text":"Thanks for signing up! We're excited to have you."}},{"description":"Send an HTML email with CC and scheduled delivery","input":{"from":"noreply@yourdomain.com","to":"customer@example.com","subject":"Your order is confirmed","html":"<h1>Order Confirmed</h1><p>Your order #1234 is on its way.</p>","cc":["support@yourdomain.com"],"scheduled_at":"2026-05-01T09:00:00Z"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Resend email id — use with get_email to check delivery."},"sent":{"type":"boolean","description":"True if the email was queued successfully."},"to":{"type":"string","description":"Recipient address(es)."},"from":{"type":"string","description":"Sender address."},"subject":{"type":"string","description":"Email subject."}}},"returns":"The email id and confirmation it was queued."},{"name":"send_batch","displayName":"Send Batch Emails","description":"Send up to 100 emails in a single request. Each email in the batch is an independent message with its own from, to, subject, and body.","inputSchema":{"type":"object","properties":{"emails":{"type":"array","description":"Array of email objects to send (max 100). Each must have from, to, subject, and at least one of html or text.","items":{"type":"object","properties":{"from":{"type":"string","description":"Sender address on a verified domain."},"to":{"type":"string","description":"Recipient address or array of addresses."},"subject":{"type":"string","description":"Email subject."},"html":{"type":"string","description":"HTML body."},"text":{"type":"string","description":"Plain-text body."},"cc":{"type":"array","items":{"type":"string"},"description":"CC addresses."},"bcc":{"type":"array","items":{"type":"string"},"description":"BCC addresses."},"reply_to":{"type":"string","description":"Reply-to address."}},"required":["from","to","subject"]}}},"required":["emails"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"examples":[{"description":"Send two emails in one batch","input":{"emails":[{"from":"hello@yourdomain.com","to":"alice@example.com","subject":"Welcome Alice","text":"Hi Alice, welcome to the team!"},{"from":"hello@yourdomain.com","to":"bob@example.com","subject":"Welcome Bob","text":"Hi Bob, welcome to the team!"}]}},{"description":"Batch of HTML newsletters","input":{"emails":[{"from":"news@yourdomain.com","to":"subscriber@example.com","subject":"April Newsletter","html":"<h1>April Update</h1><p>Here's what's new this month.</p>"}]}}],"pricing":"free","outputSchema":{"type":"object","properties":{"sent":{"type":"number","description":"Number of emails queued."},"ids":{"type":"array","description":"Resend email ids for each queued message."}}},"returns":"Count of emails queued and their ids."},{"name":"list_emails","displayName":"List Sent Emails","description":"List emails sent from your Resend account. Shows delivery status, recipient, subject, and send time.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"List recent sent emails","input":{}},{"description":"Check what emails have been sent","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"emails":{"type":"array","description":"List of sent emails with id, status, and metadata."},"total":{"type":"number","description":"Total number of emails returned."}}},"returns":"Recent emails with delivery status, recipient, and subject."},{"name":"get_email","displayName":"Get Email Status","description":"Get delivery details for a specific email by id. Returns status, open count, and click count. Use the id returned by send_email.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Resend email id returned by send_email or list_emails."}},"required":["id"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"Check delivery status of a sent email","input":{"id":"49a3999c-0ce1-4ea6-ab68-e08835cf401e"}},{"description":"Get opens and clicks for an email campaign","input":{"id":"ae2460d6-4b40-42b2-9c26-3b4d66f45e45"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Email id."},"status":{"type":"string","description":"Delivery status (e.g. delivered, bounced, opened)."},"from":{"type":"string","description":"Sender address."},"to":{"type":"array","description":"Recipient addresses."},"subject":{"type":"string","description":"Email subject."},"created_at":{"type":"string","description":"When the email was sent."},"opens":{"type":"number","description":"Number of times the email was opened."},"clicks":{"type":"number","description":"Number of link clicks."}}},"returns":"Email delivery status, open count, and click count."},{"name":"list_domains","displayName":"List Verified Domains","description":"List the sending domains verified in your Resend account. Use this to find valid from addresses before calling send_email.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"examples":[{"description":"See available sending domains","input":{}},{"description":"Check which domains are verified","input":{}}],"pricing":"free","outputSchema":{"type":"object","properties":{"domains":{"type":"array","description":"List of verified sending domains with name and status."},"total":{"type":"number","description":"Number of domains."}}},"returns":"Verified sending domains with their status and region."}],"workflow":["list_domains → send_email","send_email → get_email","send_batch","list_emails → get_email"],"icon":"/icons/send-email.webp","changelog":[{"version":"0.01","date":"2026-04-20","changes":["Initial release: send single and batch emails, list sent emails, check delivery status, list verified sending domains"]}],"premadePrompt":"Use ToolRouter to send an email from [your-domain.com] to [recipient@example.com] with the subject \"[Subject]\" and this message: [your message here].","requirements":[{"name":"resend","type":"connector","connector":"resend","displayName":"Resend account","description":"Connect your Resend account so agents can send emails and check delivery status on your behalf."}],"credentials":[{"name":"resend","type":"connector","connector":"resend","displayName":"Resend account","description":"Connect your Resend account so agents can send emails and check delivery status on your behalf."}]},{"name":"resume-maker","displayName":"Resume Maker","subtitle":"Resumes that get interviews","about":"**Resume Maker** builds polished, ATS-safe resumes with PDF, Word, and image preview outputs in one call. Bullets are rewritten in the strong XYZ formula — \"Accomplished X by doing Y, resulting in Z\" — using your actual experience. Tailor the same resume to a specific job posting, run a free ATS audit, and draft a matching cover letter.\n\nThe tool outputs files you can send immediately, not a web builder you have to log into. Every resume follows single-column, recruiter-standard typography with clean section structure that passes automated screening systems.\n\n### What you can do\n- **create_resume** — build a polished PDF, Word file, and image preview from structured resume data with optional bullet rewriting\n- **tailor_for_job** — rewrite bullets to mirror a job posting's keywords and report a before/after match score\n- **import_resume** — parse pasted resume text into structured fields ready for the other skills\n- **critique_resume** — run a deterministic ATS and writing-quality audit: parsability, quantification ratio, weak verbs, AI-tell words\n- **write_cover_letter** — draft a 250-400 word cover letter keyed to a job description, with optional first-90-days paragraph\n\n### Who it's for\nJob seekers who want a polished, ATS-ready resume without paying for a resume service, career coaches preparing resumes for clients, and anyone who knows their experience is strong but needs help presenting it in the format that gets callbacks.\n\n### How to use it\n1. Start with **import_resume** — paste your existing resume text and it returns structured fields plus an initial critique.\n2. Pass the structured data to **create_resume** with polish: true to get bullet rewrites and a downloadable PDF and Word file.\n3. When you have a job to apply for, run **tailor_for_job** with the job description to see which keywords you're missing and get a tailored version.\n4. Follow up with **write_cover_letter** to draft a matching letter for the same role.\n\n### Getting started\nPaste your current resume into **import_resume** to start — it does the parsing and gives you an immediate critique of what to improve.","version":"0.03","categories":["productivity"],"currency":"USD","skills":[{"name":"create_resume","displayName":"Create resume","description":"Take structured resume fields and render a polished PDF, Word file, and image preview in one call. Bullets are rewritten to the XYZ formula by default.","inputSchema":{"type":"object","properties":{"resume":{"type":"object","description":"Structured resume data. Every field that goes on the page maps 1:1 to a key here.","properties":{"name":{"type":"string","description":"Candidate full name (page header)."},"headline":{"type":"string","description":"One-line tagline under the name."},"contact":{"type":"object","description":"Contact block shown under the name.","properties":{"email":{"type":"string","description":"Primary email (required)."},"phone":{"type":"string","description":"Phone number, any human format."},"location":{"type":"string","description":"City, State or City, Country."},"links":{"type":"array","description":"External links (LinkedIn, portfolio, GitHub).","items":{"type":"object","properties":{"label":{"type":"string","description":"Display text shown on the resume."},"url":{"type":"string","description":"Full URL."}},"required":["label","url"]}}},"required":["email"]},"summary":{"type":"string","description":"Optional 2-3 sentence professional summary."},"experience":{"type":"array","description":"Work history, newest-first.","items":{"type":"object","properties":{"company":{"type":"string","description":"Employer name."},"role":{"type":"string","description":"Job title."},"location":{"type":"string","description":"Office location (optional)."},"start":{"type":"string","description":"Start date (e.g. \"Jan 2023\")."},"end":{"type":"string","description":"End date or \"Present\"."},"bullets":{"type":"array","description":"Impact bullets. Quantified where possible.","items":{"type":"string"}}},"required":["company","role","start","end","bullets"]}},"education":{"type":"array","description":"Education entries, newest-first.","items":{"type":"object","properties":{"school":{"type":"string","description":"Institution name."},"degree":{"type":"string","description":"Degree or program."},"location":{"type":"string","description":"Campus location (optional)."},"start":{"type":"string","description":"Optional start year. Omit (or pass \"\") to suppress the date span entirely — useful when the candidate does not want graduation years shown."},"end":{"type":"string","description":"Optional end year, \"Present\", or \"Expected 2026\". Omit to suppress the date span."},"detail":{"type":"string","description":"Optional GPA, honours, coursework."}},"required":["school","degree"]}},"skills":{"type":"array","description":"Grouped skills. Use one group if the source is flat.","items":{"type":"object","properties":{"group":{"type":"string","description":"Category label (e.g. \"Technical\")."},"items":{"type":"array","description":"Skill names.","items":{"type":"string"}}},"required":["group","items"]}},"projects":{"type":"array","description":"Optional project highlights.","items":{"type":"object","properties":{"title":{"type":"string","description":"Project title."},"detail":{"type":"string","description":"One-line summary."},"link":{"type":"string","description":"Optional demo or source link."},"bullets":{"type":"array","items":{"type":"string"},"description":"Optional bullets."}},"required":["title","detail"]}},"selected":{"type":"array","description":"Optional \"Selected Work\" one-liners (talks, OSS, awards).","items":{"type":"object","properties":{"title":{"type":"string","description":"Item title."},"detail":{"type":"string","description":"Short context."}},"required":["title","detail"]}},"template":{"type":"string","description":"Visual template. Only \"modern\" is currently implemented.","enum":["modern","classic","technical"],"default":"modern"},"accent":{"type":"string","description":"Hex colour for name/rule accents. Defaults to teal."}},"required":["name","contact","experience","education","skills"]},"polish":{"type":"boolean","description":"Rewrite bullets for clarity and impact. Default true.","default":true},"job_description":{"type":"string","description":"Optional job posting text. If supplied, bullets are mirrored to its keywords."},"voice":{"type":"string","enum":["polished","authentic"],"default":"polished","description":"\"polished\" = strong action-verb bullets (default). \"authentic\" = preserves natural cadence, better for clinical, academic, legal, or trades roles."},"quantify":{"type":"string","enum":["placeholder","preserve"],"default":"placeholder","description":"\"placeholder\" inserts `[NUMBER]` for the user to fill in. \"preserve\" leaves bullets unquantified — use when real figures aren't available."}},"required":["resume"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":25,"timeoutSeconds":180,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Build Maya's resume with bullets polished","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"polish":true}},{"description":"Build without polishing — user has already edited bullets","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"polish":false}},{"description":"Authentic voice for a clinician — no MBA verb stacks, no [NUMBER] placeholders","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"polish":true,"voice":"authentic","quantify":"preserve"}}],"pricing":"free","outputSchema":{"type":"object","properties":{"pdf_path":{"type":"string","description":"Absolute path to generated PDF."},"docx_path":{"type":"string","description":"Absolute path to generated DOCX."},"preview_path":{"type":"string","description":"Absolute path to first-page JPEG preview."},"critique":{"type":"object","description":"Deterministic ATS + clarity scores and issues."},"bullet_rewrites":{"type":"array","description":"Per-bullet rewrite trace with original, rewritten, flags."},"resume":{"type":"object","description":"The resume data after polish (structured)."}}},"returns":"PDF, DOCX, and JPEG preview paths plus a critique score and the rewritten resume data."},{"name":"tailor_for_job","displayName":"Tailor to a job","description":"Rewrite the resume bullets to mirror keywords from a target job posting, re-render all three formats, and report the keyword-match delta.","inputSchema":{"type":"object","properties":{"resume":{"type":"object","description":"Structured resume data. Every field that goes on the page maps 1:1 to a key here.","properties":{"name":{"type":"string","description":"Candidate full name (page header)."},"headline":{"type":"string","description":"One-line tagline under the name."},"contact":{"type":"object","description":"Contact block shown under the name.","properties":{"email":{"type":"string","description":"Primary email (required)."},"phone":{"type":"string","description":"Phone number, any human format."},"location":{"type":"string","description":"City, State or City, Country."},"links":{"type":"array","description":"External links (LinkedIn, portfolio, GitHub).","items":{"type":"object","properties":{"label":{"type":"string","description":"Display text shown on the resume."},"url":{"type":"string","description":"Full URL."}},"required":["label","url"]}}},"required":["email"]},"summary":{"type":"string","description":"Optional 2-3 sentence professional summary."},"experience":{"type":"array","description":"Work history, newest-first.","items":{"type":"object","properties":{"company":{"type":"string","description":"Employer name."},"role":{"type":"string","description":"Job title."},"location":{"type":"string","description":"Office location (optional)."},"start":{"type":"string","description":"Start date (e.g. \"Jan 2023\")."},"end":{"type":"string","description":"End date or \"Present\"."},"bullets":{"type":"array","description":"Impact bullets. Quantified where possible.","items":{"type":"string"}}},"required":["company","role","start","end","bullets"]}},"education":{"type":"array","description":"Education entries, newest-first.","items":{"type":"object","properties":{"school":{"type":"string","description":"Institution name."},"degree":{"type":"string","description":"Degree or program."},"location":{"type":"string","description":"Campus location (optional)."},"start":{"type":"string","description":"Optional start year. Omit (or pass \"\") to suppress the date span entirely — useful when the candidate does not want graduation years shown."},"end":{"type":"string","description":"Optional end year, \"Present\", or \"Expected 2026\". Omit to suppress the date span."},"detail":{"type":"string","description":"Optional GPA, honours, coursework."}},"required":["school","degree"]}},"skills":{"type":"array","description":"Grouped skills. Use one group if the source is flat.","items":{"type":"object","properties":{"group":{"type":"string","description":"Category label (e.g. \"Technical\")."},"items":{"type":"array","description":"Skill names.","items":{"type":"string"}}},"required":["group","items"]}},"projects":{"type":"array","description":"Optional project highlights.","items":{"type":"object","properties":{"title":{"type":"string","description":"Project title."},"detail":{"type":"string","description":"One-line summary."},"link":{"type":"string","description":"Optional demo or source link."},"bullets":{"type":"array","items":{"type":"string"},"description":"Optional bullets."}},"required":["title","detail"]}},"selected":{"type":"array","description":"Optional \"Selected Work\" one-liners (talks, OSS, awards).","items":{"type":"object","properties":{"title":{"type":"string","description":"Item title."},"detail":{"type":"string","description":"Short context."}},"required":["title","detail"]}},"template":{"type":"string","description":"Visual template. Only \"modern\" is currently implemented.","enum":["modern","classic","technical"],"default":"modern"},"accent":{"type":"string","description":"Hex colour for name/rule accents. Defaults to teal."}},"required":["name","contact","experience","education","skills"]},"job_description":{"type":"string","description":"Full text of the target job posting."},"voice":{"type":"string","enum":["polished","authentic"],"default":"polished","description":"\"polished\" = strong action-verb bullets (default). \"authentic\" = preserves natural cadence, better for clinical, academic, legal, or trades roles."},"quantify":{"type":"string","enum":["placeholder","preserve"],"default":"placeholder","description":"How to handle bullets without numbers. \"placeholder\" inserts a literal `[NUMBER]`. \"preserve\" leaves the bullet unquantified."}},"required":["resume","job_description"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":35,"timeoutSeconds":240,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Tailor Maya's resume for a fintech Senior PM role","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"job_description":"Senior Product Manager, Fintech\nWe are looking for a Senior Product Manager to lead our payments and risk platform. You'll work with engineers and designers to ship new products, run experiments, and own a pricing roadmap. 5+ years of PM experience. Strong SQL skills. Experience with fraud detection, A/B testing, and payments infrastructure is required. Bonus: exposure to KYC and AML workflows."}},{"description":"Tailor Maya's resume for a shorter posting","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"job_description":"Payments PM at a Series B fintech. Must have SQL, A/B testing, and 4+ years PM experience. Bonus for fraud or KYC exposure."}}],"pricing":"free","outputSchema":{"type":"object","properties":{"pdf_path":{"type":"string","description":"Path to tailored PDF."},"docx_path":{"type":"string","description":"Path to tailored DOCX."},"preview_path":{"type":"string","description":"Path to tailored preview image."},"keywords":{"type":"object","description":"Extracted job-description keywords by category."},"match":{"type":"object","description":"Before/after keyword match score plus matched/missing phrases."},"bullet_rewrites":{"type":"array","description":"Per-bullet rewrite trace."},"critique":{"type":"object","description":"ATS + clarity critique of the tailored resume."},"resume":{"type":"object","description":"The tailored resume data."}}},"returns":"Tailored PDF, DOCX, preview image, extracted keywords, and before/after keyword match scores."},{"name":"import_resume","displayName":"Import existing resume","description":"Parse a pasted resume (or pre-extracted PDF/DOCX text) into structured fields that the other skills can consume.","inputSchema":{"type":"object","properties":{"resume_text":{"type":"string","description":"Plain text of the existing resume. Extract from PDF/DOCX first if needed (e.g. via the pdf tool)."}},"required":["resume_text"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":10,"timeoutSeconds":60,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Parse a short pasted resume","input":{"resume_text":"JANE SMITH\njane@example.com | 415-555-0100 | San Francisco, CA\n\nEXPERIENCE\nAcme — Senior Engineer — 2022-Present\n- Led migration of 40 services to Kubernetes\n- Cut p99 latency 60%\n\nEDUCATION\nMIT, BS Computer Science, 2016-2020"}},{"description":"Parse a summary-heavy resume","input":{"resume_text":"John Doe, Product Manager. john@doe.io. Oakland CA. 5 years in B2B SaaS. Led growth at Clay from $1M to $12M ARR. Hired and managed 4 PMs. BA Stanford 2015."}}],"pricing":"free","outputSchema":{"type":"object","properties":{"resume":{"type":"object","description":"Structured resume data ready for create_resume."},"critique":{"type":"object","description":"Deterministic critique of the parsed resume."}}},"returns":"Structured resume data plus an initial critique score."},{"name":"critique_resume","displayName":"Critique resume","description":"Deterministic ATS + writing-quality audit. No LLM. Scores parsability, clarity, quantification, AI-tell words, weak verbs, and clichés.","inputSchema":{"type":"object","properties":{"resume":{"type":"object","description":"Structured resume data. Every field that goes on the page maps 1:1 to a key here.","properties":{"name":{"type":"string","description":"Candidate full name (page header)."},"headline":{"type":"string","description":"One-line tagline under the name."},"contact":{"type":"object","description":"Contact block shown under the name.","properties":{"email":{"type":"string","description":"Primary email (required)."},"phone":{"type":"string","description":"Phone number, any human format."},"location":{"type":"string","description":"City, State or City, Country."},"links":{"type":"array","description":"External links (LinkedIn, portfolio, GitHub).","items":{"type":"object","properties":{"label":{"type":"string","description":"Display text shown on the resume."},"url":{"type":"string","description":"Full URL."}},"required":["label","url"]}}},"required":["email"]},"summary":{"type":"string","description":"Optional 2-3 sentence professional summary."},"experience":{"type":"array","description":"Work history, newest-first.","items":{"type":"object","properties":{"company":{"type":"string","description":"Employer name."},"role":{"type":"string","description":"Job title."},"location":{"type":"string","description":"Office location (optional)."},"start":{"type":"string","description":"Start date (e.g. \"Jan 2023\")."},"end":{"type":"string","description":"End date or \"Present\"."},"bullets":{"type":"array","description":"Impact bullets. Quantified where possible.","items":{"type":"string"}}},"required":["company","role","start","end","bullets"]}},"education":{"type":"array","description":"Education entries, newest-first.","items":{"type":"object","properties":{"school":{"type":"string","description":"Institution name."},"degree":{"type":"string","description":"Degree or program."},"location":{"type":"string","description":"Campus location (optional)."},"start":{"type":"string","description":"Optional start year. Omit (or pass \"\") to suppress the date span entirely — useful when the candidate does not want graduation years shown."},"end":{"type":"string","description":"Optional end year, \"Present\", or \"Expected 2026\". Omit to suppress the date span."},"detail":{"type":"string","description":"Optional GPA, honours, coursework."}},"required":["school","degree"]}},"skills":{"type":"array","description":"Grouped skills. Use one group if the source is flat.","items":{"type":"object","properties":{"group":{"type":"string","description":"Category label (e.g. \"Technical\")."},"items":{"type":"array","description":"Skill names.","items":{"type":"string"}}},"required":["group","items"]}},"projects":{"type":"array","description":"Optional project highlights.","items":{"type":"object","properties":{"title":{"type":"string","description":"Project title."},"detail":{"type":"string","description":"One-line summary."},"link":{"type":"string","description":"Optional demo or source link."},"bullets":{"type":"array","items":{"type":"string"},"description":"Optional bullets."}},"required":["title","detail"]}},"selected":{"type":"array","description":"Optional \"Selected Work\" one-liners (talks, OSS, awards).","items":{"type":"object","properties":{"title":{"type":"string","description":"Item title."},"detail":{"type":"string","description":"Short context."}},"required":["title","detail"]}},"template":{"type":"string","description":"Visual template. Only \"modern\" is currently implemented.","enum":["modern","classic","technical"],"default":"modern"},"accent":{"type":"string","description":"Hex colour for name/rule accents. Defaults to teal."}},"required":["name","contact","experience","education","skills"]}},"required":["resume"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"examples":[{"description":"Score Maya's resume","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]}}},{"description":"Score a resume with weak verbs","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Responsible for fraud detection.","Helped with onboarding improvements."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]}}}],"pricing":"free","outputSchema":{"type":"object","properties":{"ats_score":{"type":"number","description":"ATS parsability score (0-100)."},"clarity_score":{"type":"number","description":"Writing clarity score (0-100)."},"ai_tells":{"type":"number","description":"Count of AI-tell words detected."},"quantified_bullets_ratio":{"type":"number","description":"Fraction (0-1) of bullets with numbers."},"issues":{"type":"array","description":"Up to 20 actionable issues, sorted by severity."},"ban_list_hits":{"type":"object","description":"Exact phrase matches for ai_tells, weak_verbs, cliches."}}},"returns":"ATS score, clarity score, quantification ratio, and a prioritised issue list."},{"name":"write_cover_letter","displayName":"Write cover letter","description":"Draft a 250-400 word cover letter in hook-proof-ask structure, keyed to a job description and using only facts from the candidate's resume.","inputSchema":{"type":"object","properties":{"resume":{"type":"object","description":"Structured resume data. Every field that goes on the page maps 1:1 to a key here.","properties":{"name":{"type":"string","description":"Candidate full name (page header)."},"headline":{"type":"string","description":"One-line tagline under the name."},"contact":{"type":"object","description":"Contact block shown under the name.","properties":{"email":{"type":"string","description":"Primary email (required)."},"phone":{"type":"string","description":"Phone number, any human format."},"location":{"type":"string","description":"City, State or City, Country."},"links":{"type":"array","description":"External links (LinkedIn, portfolio, GitHub).","items":{"type":"object","properties":{"label":{"type":"string","description":"Display text shown on the resume."},"url":{"type":"string","description":"Full URL."}},"required":["label","url"]}}},"required":["email"]},"summary":{"type":"string","description":"Optional 2-3 sentence professional summary."},"experience":{"type":"array","description":"Work history, newest-first.","items":{"type":"object","properties":{"company":{"type":"string","description":"Employer name."},"role":{"type":"string","description":"Job title."},"location":{"type":"string","description":"Office location (optional)."},"start":{"type":"string","description":"Start date (e.g. \"Jan 2023\")."},"end":{"type":"string","description":"End date or \"Present\"."},"bullets":{"type":"array","description":"Impact bullets. Quantified where possible.","items":{"type":"string"}}},"required":["company","role","start","end","bullets"]}},"education":{"type":"array","description":"Education entries, newest-first.","items":{"type":"object","properties":{"school":{"type":"string","description":"Institution name."},"degree":{"type":"string","description":"Degree or program."},"location":{"type":"string","description":"Campus location (optional)."},"start":{"type":"string","description":"Optional start year. Omit (or pass \"\") to suppress the date span entirely — useful when the candidate does not want graduation years shown."},"end":{"type":"string","description":"Optional end year, \"Present\", or \"Expected 2026\". Omit to suppress the date span."},"detail":{"type":"string","description":"Optional GPA, honours, coursework."}},"required":["school","degree"]}},"skills":{"type":"array","description":"Grouped skills. Use one group if the source is flat.","items":{"type":"object","properties":{"group":{"type":"string","description":"Category label (e.g. \"Technical\")."},"items":{"type":"array","description":"Skill names.","items":{"type":"string"}}},"required":["group","items"]}},"projects":{"type":"array","description":"Optional project highlights.","items":{"type":"object","properties":{"title":{"type":"string","description":"Project title."},"detail":{"type":"string","description":"One-line summary."},"link":{"type":"string","description":"Optional demo or source link."},"bullets":{"type":"array","items":{"type":"string"},"description":"Optional bullets."}},"required":["title","detail"]}},"selected":{"type":"array","description":"Optional \"Selected Work\" one-liners (talks, OSS, awards).","items":{"type":"object","properties":{"title":{"type":"string","description":"Item title."},"detail":{"type":"string","description":"Short context."}},"required":["title","detail"]}},"template":{"type":"string","description":"Visual template. Only \"modern\" is currently implemented.","enum":["modern","classic","technical"],"default":"modern"},"accent":{"type":"string","description":"Hex colour for name/rule accents. Defaults to teal."}},"required":["name","contact","experience","education","skills"]},"job_description":{"type":"string","description":"Full text of the target job posting."},"company":{"type":"string","description":"Company name (if not obvious from JD)."},"recipient":{"type":"string","description":"Hiring manager name. Defaults to \"Hiring Team\"."},"job_title":{"type":"string","description":"Role title for the header line."},"briefcase":{"type":"boolean","description":"Append a \"First 90 days\" paragraph with 3 concrete initiatives.","default":false},"target_words":{"type":"number","description":"Target word count. Defaults to 320.","default":320}},"required":["resume","job_description"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"execution":{"estimatedSeconds":20,"timeoutSeconds":180,"mode":"io","restartPolicy":"resume"}},"examples":[{"description":"Write a standard cover letter for Maya","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"job_description":"Senior Product Manager, Fintech\nWe are looking for a Senior Product Manager to lead our payments and risk platform. You'll work with engineers and designers to ship new products, run experiments, and own a pricing roadmap. 5+ years of PM experience. Strong SQL skills. Experience with fraud detection, A/B testing, and payments infrastructure is required. Bonus: exposure to KYC and AML workflows.","company":"Ramp"}},{"description":"Write with briefcase mode enabled","input":{"resume":{"name":"Maya Chen","headline":"Senior Product Manager, Payments","contact":{"email":"maya.chen@hey.com","phone":"+1 415 555 0127","location":"San Francisco, CA","links":[{"label":"linkedin.com/in/mayachen","url":"https://linkedin.com/in/mayachen"}]},"summary":"Senior PM with six years across payments, fraud, and growth. Engineering background from Palantir.","experience":[{"company":"Stripe","role":"Senior Product Manager, Fraud","location":"San Francisco, CA","start":"Jan 2023","end":"Present","bullets":["Shipped fraud detection model for 2.1M merchants, cutting false-positive rate from 4.3% to 0.9%.","Rebuilt SMB onboarding flow, lifting activation from 52% to 70% in 90 days.","Hired and managed three PMs across fraud, onboarding, and growth."]}],"education":[{"school":"Stanford University","degree":"BS, Computer Science","location":"Stanford, CA","start":"2014","end":"2018","detail":"GPA 3.8."}],"skills":[{"group":"Product","items":["Experimentation","Pricing","0 to 1 Launches"]},{"group":"Technical","items":["SQL","Python","A/B Testing"]}]},"job_description":"Senior Product Manager, Fintech\nWe are looking for a Senior Product Manager to lead our payments and risk platform. You'll work with engineers and designers to ship new products, run experiments, and own a pricing roadmap. 5+ years of PM experience. Strong SQL skills. Experience with fraud detection, A/B testing, and payments infrastructure is required. Bonus: exposure to KYC and AML workflows.","company":"Ramp","briefcase":true}}],"pricing":"free","outputSchema":{"type":"object","properties":{"pdf_path":{"type":"string","description":"Path to generated PDF."},"docx_path":{"type":"string","description":"Path to generated DOCX."},"preview_path":{"type":"string","description":"Path to first-page JPEG preview."},"body":{"type":"string","description":"Plain-text letter body."},"word_count":{"type":"number","description":"Body word count."},"flags":{"type":"array","description":"Post-sanitize flags from the ban list."}}},"returns":"Cover letter as PDF, DOCX, preview image, plus body text and word count."}],"workflow":["create_resume","import_resume → create_resume","import_resume → tailor_for_job","import_resume → critique_resume → create_resume","tailor_for_job → write_cover_letter"],"icon":"/icons/resume-maker.webp","changelog":[{"version":"0.01","date":"2026-04-22","changes":["Initial release — generate resumes in PDF, Word, and image preview","Bullet rewriting with XYZ formula and strong action verbs","Tailor a resume to a specific job posting with keyword match scoring","Import a pasted resume into structured fields","Free ATS and writing-quality critique","Draft matching cover letters with optional first-90-days plan"]},{"version":"0.02","date":"2026-04-23","changes":["All skills are now free to use"]},{"version":"0.03","date":"2026-04-27","changes":["Added voice option: choose \"polished\" (default) or \"authentic\" to keep the candidate's natural cadence — useful for clinical, academic, legal, and trades resumes","Added quantify option: choose \"preserve\" to leave bullets unquantified instead of inserting `[NUMBER]` placeholders","Education start/end years are now optional — omit either to suppress the date span (no more \"undefined – undefined\")"]}],"premadePrompt":"Use ToolRouter to build me a polished resume. I will paste my current resume or dictate the key jobs; generate a PDF and Word file I can send, and list anything I should strengthen before applying.","brain":{"instructions":"When brain knowledge is available:\n    - Calibrate the tone of the summary and bullet rewrites to the user's established voice\n    - Reference the user's industry and domain correctly in phrasing (avoid wrong jargon)\n    - Use the user's preferred terminology for role titles, seniority, and product names\n    - For cover letters, echo the user's narrative style (direct, warm, technical) if specified","produces":["content_insights"]},"requirements":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}],"credentials":[{"name":"openrouter","type":"secret","displayName":"OpenRouter API Key","description":"Optional: use your own OpenRouter key instead of the platform default","envFallback":"OPENROUTER_API_KEY","acquireUrl":"https://openrouter.ai/keys"}]}]}