{"tools":[{"name":"appstore-aso","displayName":"App Store ASO","subtitle":"ASO keywords, listings, competitors","description":"Complete iOS App Store optimization toolkit. Analyze keyword difficulty, update metadata directly, track competitor rankings, manage in-app events, and monitor reviews. Built for developers and marketers who want higher rankings.","instructions":"Start with analyze_keywords to score keywords for difficulty and traffic. Use keyword_hints for new ideas and keyword_popularity for search volume. Run audit_metadata for a listing improvement checklist. Use search_apps, app_details, and competitor_analysis to research rivals. To update your listing: export_metadata → edit → update_metadata or push_keywords. Use list_reviews for feedback. For in-app events: list_events → create_event or update_event. Save ios_app_id and ASC credentials to skip passing them each call.","version":"0.02","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"]}],"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","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","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","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","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","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","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","description":"Audit web pages and sites for ranking issues. Analyze meta tags, headings, content quality, Core Web Vitals, structured data, images, links, and technical SEO. Surfaces prioritized issues with 0-100 scores for diagnosis and competitor benchmarking.","instructions":"Start with `check_meta` for a quick title/description/OG audit, then `analyze_page` for a full scored report. `detect_schema` validates JSON-LD. `audit_headings` fixes H1/H2 hierarchy. `analyze_content` checks readability and E-E-A-T. `check_vitals` returns Core Web Vitals (mobile + desktop). `audit_technical` covers robots.txt, sitemap, redirects. `audit_images` finds alt text and format gaps. `extract_keywords` shows keyword focus. `analyze_links` finds orphan/broken links. `crawl_site` audits up to 100 pages. `compare_pages` benchmarks against a competitor.","version":"0.03","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"}],"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"],"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"]}],"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.","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","description":"Get cited by ChatGPT, Perplexity, Google AI Overviews, and Claude. Live AI visibility monitoring, citation source analysis, brand sentiment tracking, CORE-EEAT scoring, CITE domain authority, passage-level citability, and GEO optimization from crawler access to content writing.","instructions":"check_ai_visibility first — see if you are being cited. analyze_citation_sources to find who IS cited instead. check_brand_sentiment for AI brand framing. check_ai_crawlers — blocked bots kill citations. audit_content for CORE-EEAT score. analyze_serp before writing. write_content for new GEO articles. optimize_content for existing pages. analyze_citability for passage scoring. audit_domain for CITE authority. Skills are async — poll with get_job_result.","version":"0.03","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"}],"workflow":["check_ai_visibility","analyze_citation_sources","check_brand_sentiment","check_ai_crawlers","analyze_serp","analyze_competitors","analyze_content_gaps","audit_content","audit_domain","analyze_citability","optimize_content","optimize_meta","generate_schema","audit_entity","write_content","refresh_content"],"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"]}],"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","description":"DNS records, WHOIS registration, SSL/TLS certificates, and domain availability in one tool. Parallel DNS lookups for all record types, SSL expiry and trust checks, and batch availability checking. Essential for DevOps, security, and domain acquisition.","instructions":"Use lookup_dns for DNS config — verify email (MX/TXT), CDN routing (CNAME/A), or diagnose propagation. Use whois_lookup for ownership, dates, and nameservers. Use check_ssl for certificate health (days_remaining for expiry alerts). Use check_availability to batch-check multiple domains. For a full audit, run lookup_dns + whois_lookup + check_ssl in parallel.","version":"0.02","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"]}],"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","description":"Look up domain registration details: registrant, creation/expiry dates, registrar, nameservers, and registry status. Uses RDAP with automatic WHOIS fallback for accuracy across all TLDs. For domain research, security investigations, and brand protection.","instructions":"One skill: lookup_domain. Pass any domain (e.g. \"example.com\") for structured registration data. include_raw: true for full RDAP/WHOIS payloads. source field shows rdap vs whois. expires for expiration checks, status for lock states, available: true for unregistered domains. For bulk checks, call in sequence per domain.","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","description":"Generate domain name ideas from a keyword and instantly check availability across TLDs. Ranked candidates with real-time registration checks. Also verify a specific list of domains you already have in mind.","instructions":"Workflow: search_domains (keyword + optional TLDs) → check_domains (verify shortlist). search_domains generates candidates and checks availability. check_domains takes up to 100 domains for registration data. include_taken: true shows taken domains. include_raw: true adds RDAP/WHOIS payload. Confirm availability with a registrar before purchasing.","version":"0.02","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"}],"workflow":["search_domains","check_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"]}],"premadePrompt":"Find available domain names for my [business / idea / brand name]. Check .com, .io, and .ai options."},{"name":"page-speed","displayName":"Page Speed Test","subtitle":"Performance, SEO & Web Vitals","description":"Run a Lighthouse-style audit on any URL for performance, SEO, accessibility, and best practices scores plus all Core Web Vitals (LCP, CLS, INP, TTFB, FCP, TBT, TTI, Speed Index). Includes real-user CrUX data when available and a prioritized list of issues ranked by impact.","instructions":"Pass full URL with protocol. Default strategy \"mobile\" matches Google mobile-first indexing; use \"desktop\" for desktop-only issues. Focus on top_issues first (sorted by impact). Key metrics: lcp_ms, cls, ttfb_ms, core_web_vitals.inp_ms. core_web_vitals has real-user CrUX data — more accurate than lab metrics for SEO. Audit individual pages, not just root domain.","version":"0.03","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"]}],"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"}],"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":"site-crawler","displayName":"Site Crawler","subtitle":"Map pages, links, and errors","description":"Walk a website from any URL, collecting per-page titles, descriptions, heading counts, word counts, response times, and link counts. Ideal for site audits, content inventories, broken-link detection, and SEO analysis.","instructions":"Use `crawl_site` with a starting URL. Start with `max_pages: 10` for a quick audit. Increase up to 100 for full coverage (async, polls for result). Check `errors` for 404s/timeouts. Use `word_count` and heading counts to spot thin content. Set `include_subdomains: true` for multi-subdomain sites. For competitive research, crawl with `same_origin_only: true` to map content depth without leaving the domain.","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","description":"Transform images into production-ready assets in seconds. Resize to exact dimensions, convert between JPEG/WebP/AVIF/PNG, compress for web or app store, and apply rotation, blur, and grayscale — all in one call. Works with URLs or local files.","instructions":"Use `transform_image` for all image processing tasks. Supply either `image_url` (for remote images) or `image_path` (for local files) — not both. Tips: - For App Store icons, target 1024×1024 PNG with quality 90+. - For web hero images, use WebP format with quality 82 and a width of 1200-1920px. - For thumbnails, set width only and let the tool preserve aspect ratio using the default fit mode (inside). - Use `format: \"avif\"` for the best compression on modern browsers. - The output `image_path` is a local file you can pass to other tools or download.","version":"0.02","categories":["media","marketing","analytics"],"currency":"USD","skills":[{"name":"transform_image","displayName":"Transform Image","description":"Load an image from a local path or URL, 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":"Local file path to source image"},"image_url":{"type":"string","description":"Remote URL to source image"},"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}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Input source path or URL"},"source_type":{"type":"string","description":"Source type: path or url"},"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"}],"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":"security-scanner","displayName":"Security Scanner","subtitle":"Scan URLs, IPs, domains and files for threats","description":"Check URLs, domains, IPs, and file hashes against 70+ AV engines, URLhaus, AbuseIPDB, and ThreatFox. Probe targets for security headers and TLS. Scan for vulnerabilities. Generate risk-scored security reports.","instructions":"Use security_report for a one-shot audit — runs all checks with a risk score. Individual: check_url (VT+URLhaus), check_domain (VT+URLhaus+ThreatFox), check_ip (VT+AbuseIPDB+ThreatFox), check_hash (VT+URLhaus+ThreatFox). probe_hosts for HTTP/TLS/headers. scan_targets for vulnerability scanning. Most are instant; scan_targets and security_report are async (~60s).","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","description":"Analyze suspicious emails for phishing, spoofing, impersonation, and malicious links. Accepts copied message text, sender details, headers, screenshots, and URLs, then returns a scored verdict with concrete evidence and next-step guidance.","instructions":"Use check_email for one-shot phishing triage. Pass whatever evidence you have: subject, from, email_text, raw_headers, image_url, and links. Combines local heuristics with optional live lookups (DNS/auth, registration age, URLhaus, ThreatFox, PhishTank, OpenPhish, urlscan). If you have only a screenshot, provide image_url. Set check_live_sources to false for offline-only analysis. Review the top signals first, then use the recommendation field for the safest next action.","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":"Optional public URL of a screenshot or image of the email for vision analysis"},"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","description":"Turn any website into structured data with JS rendering, anti-bot bypass, and automatic extraction. Scrape pages, crawl sites, discover URLs, extract typed data with AI, or search and scrape at once. Supports markdown, HTML, CSS filtering, and mobile viewports.","instructions":"scrape_page — URL to markdown/HTML; handles JSON APIs too. onlyMainContent strips nav/footer. headers for auth. crawl_site — recursive crawl (limit/maxDepth/includePaths). map_site — fast URL discovery without content. extract_data — AI structured extraction via schema or prompt. search_web — search + optional scrape. stealth_scrape/stealth_crawl — enhanced proxy for bot-protected pages. Start with scrape_page; map_site before crawling. On 403, try stealth. Set country/languages for geo-targeting.","version":"0.05","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\"})"}},"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"}}}],"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\"])"}},"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}}],"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)"]}],"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","description":"Structured Google results across 11 types: web, news, images, videos, maps, places, reviews, shopping, academic papers, patents, and autocomplete. Returns clean data without HTML parsing. Essential for research and up-to-date information.","instructions":"search — web results + knowledge graph. news_search — articles with dates. image_search — images with source URLs. video_search — videos with channels/durations. maps_search — places with coordinates. places_search — with phone/hours. reviews_search — place reviews (use placeId). shopping_search — products with prices. scholar_search — papers with citations (use year filter). patent_search — patents. autocomplete — keyword suggestions. Use timeRange (h/d/w/m) for recency. num up to 100. page for pagination.","version":"0.02","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)"},"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"}}],"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)"}},"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)"},"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)"}},"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')"}},"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 detailed place results with names, addresses, phone numbers, ratings, reviews count, and opening hours.","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')"}},"required":["query"]},"annotations":{},"examples":[{"description":"Find coffee shops in a city","input":{"query":"specialty coffee","location":"San Francisco, CA"}}],"pricing":"paid","returns":"Array of places with title, address, phone, rating, reviewsCount, and hours"},{"name":"reviews_search","displayName":"Reviews Search","description":"Retrieve Google reviews for a specific place. 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 (from maps or places search)"},"sortBy":{"type":"string","enum":["relevance","newest","highest","lowest"],"description":"Sort order for reviews"}},"required":["query"]},"annotations":{},"examples":[{"description":"Get reviews for a restaurant","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)"}},"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)"},"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)"}},"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"]}],"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","description":"Create AI videos from text prompts or animate images. Multiple models with tradeoffs between cinematic quality, speed, cost, and audio support. Returns a downloadable video URL. Ideal for social media, product demos, and creative storytelling.","instructions":"list_models to compare by cost, duration, audio. text_to_video — describe scene, camera, lighting, action. image_to_video — animate a still with optional motion prompt. Async (~60-90s) — poll with get_job_result. Audio doubles cost. Be specific in prompts. Display video inline. Share video_page link for download and OG preview.","version":"0.07","categories":["media","ai"],"currency":"USD","skills":[{"name":"text_to_video","displayName":"Text to Video","description":"Generate a video from a text prompt. 10+ models with different quality, speed, and cost tradeoffs. Returns a downloadable video URL.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Detailed text description of the video to generate. Be specific about scene, action, camera movement, lighting, and style."},"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":"Video duration in seconds. Available durations depend on the model — typically 5 or 10. Auto-snaps to the nearest valid duration if unsupported."},"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":["prompt"]},"annotations":{"execution":{"estimatedSeconds":90,"timeoutSeconds":300,"mode":"io"}},"examples":[{"description":"Generate a short nature video with LTX (fast, low cost)","input":{"prompt":"A serene mountain lake at sunrise with mist rolling over the water, cinematic drone shot slowly pulling back to reveal snow-capped peaks","model":"ltx-2.3","duration":5,"enable_audio":false}},{"description":"Generate a short video with a specific model and audio","input":{"prompt":"A cat playing piano in a jazz club, warm ambient lighting, close-up shot","model":"veo-3.1","duration":4,"enable_audio":true}}],"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"}}},"returns":"Video download URL, model used, duration, resolution, audio status, generation cost, and request metadata"},{"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":"URL of the source image to animate. Must be a publicly accessible image 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":"Video duration in seconds. Available durations depend on the model — typically 5 or 10. Auto-snaps to the nearest valid duration if unsupported."},"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","text_to_video","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"]}],"premadePrompt":"Create a short video of [describe the scene, action, and mood]. Make it cinematic with smooth camera movement.","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"}],"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":"lead-finder","displayName":"Lead Finder","subtitle":"Find & enrich companies and people","description":"Find companies and people by industry, funding, role, location, or expertise. Enrich domains, find lookalikes, and get cited research answers. For sales prospecting and market mapping.","instructions":"Flow: find_companies or find_people for quick discovery → prospect for verified leads with emails → enrich_person or enrich_people for targeted contact enrichment. find_people is fast and cheap for browsing. prospect is slower but returns AI-verified matches with contact info. enrich_people takes URLs from find_people results for batch email/phone lookup. Set count 25-100 for prospect. find_similar with a competitor URL expands lead lists. enrich_company takes a bare domain for firmographic data. answer gives cited answers.","version":"0.05","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":{},"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":{},"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":{},"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)"}},"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)"}}},"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)"}},"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"]}],"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"}],"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","description":"Comprehensive weather data for any city or coordinates: current conditions, multi-day forecasts, UV index, air quality, pollen counts, and pollutant breakdowns. For travel planning, outdoor events, health apps, and agriculture.","instructions":"current_weather — default choice: temp, wind, precipitation, UV, AQI, pollen, visibility, dew point. forecast — 1-16 day outlook with daily high/low, rain/snow, wind, UV, sunrise/sunset. air_quality — pollutant concentrations, pollen by species, UV, aerosol depth. Accepts city names or lat,lon. Use units \"imperial\" for Fahrenheit/mph.","version":"0.06","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"]}],"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":"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":"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","description":"Convert amounts between 30+ currencies and retrieve live or historical exchange rates. Accurate rates from the European Central Bank, updated daily. Historical data back to 1999.","instructions":"Use `convert` when you need to convert a specific amount — it handles one-to-many conversions in a single call (e.g. 100 USD → EUR, GBP, JPY). Use `latest_rates` when you need a rate table for a base currency, not a specific conversion. Use `historical_rates` for past dates or date ranges — supports YYYY-MM-DD single dates and YYYY-MM-DD..YYYY-MM-DD ranges. Currency codes follow ISO 4217 (e.g. USD, EUR, GBP, JPY, AUD, CAD, CHF). For financial reporting requiring exact historical rates, always specify a date.","version":"0.03","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"]}],"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","description":"Real-time cryptocurrency prices, market data, and trending coins. Look up prices with 24h changes, drill into detailed stats like ATH and supply, and discover trending coins. Search any coin by name or ticker.","instructions":"Start with `search` if you don't know the exact coin ID — it returns the IDs you'll need for other skills. Use `price` for quick multi-coin lookups (comma-separate up to ~50 coin IDs). Use `market_data` when you need deep stats on a single coin (ATH, supply, 7d/30d price changes). Use `trending` to see what's gaining search momentum in the last 24 hours — useful for spotting emerging interest. Coin IDs use slugs like \"bitcoin\", \"ethereum\", \"solana\" — always search first if unsure.","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","description":"Search the full CVE catalog by keyword, look up any CVE by ID, or monitor recent advisories. Results include CVSS severity scores, affected software, CWE types, and reference links. For security researchers, dependency auditing, and DevSecOps pipelines.","instructions":"Three skills cover different access patterns:\n- search_vulnerabilities — find CVEs by keyword (software name, version, vulnerability type)\n- cve_details — get full details for a specific CVE ID you already know (e.g. CVE-2021-44228)\n- recent_vulnerabilities — get newly published CVEs from the last N days (default 7)\n\nTips:\n- For dependency auditing, use search_vulnerabilities with the package name (e.g. \"log4j\", \"openssl 3.0\")\n- cve_details returns the CVSS vector string which encodes exploitability and impact details\n- recent_vulnerabilities with days: 1 is useful for daily threat briefings\n","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","description":"Look up nutrition facts for any food or packaged product. Search by name for USDA macro/micronutrient breakdowns, or search international packaged products by brand. Scan a barcode to get ingredients, allergens, nutri-scores, and per-100g nutrition.","instructions":"Whole foods: search_foods → get_nutrition (full micronutrient breakdown). Packaged products: search_products or lookup_barcode (EAN/UPC). search_foods returns inline macros for quick comparisons. get_nutrition adds vitamins, minerals for dietary tracking. lookup_barcode includes allergens and ingredients. nutri-score (a-e) from search_products is a quick quality signal.","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","description":"Turn any IPv4 or IPv6 address into location and network data — city, region, country, timezone, coordinates, ISP, and ASN. Single or batch lookup (up to 10). Useful for enriching logs, detecting visitor geography, investigating traffic, or adding location context to analytics.","instructions":"Use `lookup` for a single IP address and `bulk_lookup` when you have a list of up to 10 IPs. Tips: - Pass the raw dotted-decimal IP (e.g. \"8.8.8.8\") — do not include port numbers or CIDR notation. - The `timezone` field (e.g. \"America/New_York\") is useful for scheduling or display logic. - The `asn` field identifies the network owner and is helpful for detecting cloud providers, VPNs, or bots. - For bulk analysis, collect all IPs first and call `bulk_lookup` once rather than looping on `lookup`.","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","description":"Surface top-ranked and newest technology stories from Hacker News. Get stories by score, latest submissions, or full discussions with top comments. Great for daily tech briefings, research, and tracking developer conversations.","instructions":"Use them in sequence for richer results: Start with `top_stories` to get the current highest-ranked stories (default 10, max 30). This is the best signal for \"what's important today in tech\". Use `new_stories` when you want the most recently submitted posts — useful for catching breaking news before it climbs the rankings. Use `story_details` to fetch the full discussion on a specific story — pass the `id` from a top or new stories result to get the top 10 comments and total comment count. Tip: chain `top_stories` → `story_details` to summarize community reaction to a specific news item.","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","description":"Search millions of peer-reviewed papers, authors, and citation data. Find credible sources by topic, keyword, or title with citation counts and open access links. Ideal for researchers, writers, and students who need trustworthy evidence fast.","instructions":"Start with search_papers to find papers on your topic — use sort: \"cited_by_count\" to surface the most influential work, or sort: \"publication_date\" for the latest research. Once you have a paper ID from search results, use paper_details to get the full abstract, all authors, references, and related works. Use search_authors to find a specific researcher by name and then cross-reference their institution, h-index, and publication count. Chain search_papers → paper_details to build literature reviews: search broadly, then drill into the top results for abstracts and citations.","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","description":"Public holiday data for 100+ countries. Look up all holidays in a year, check if a date is a holiday, or find the next upcoming holiday. Useful for scheduling automation, calendar integrations, and holiday-aware workflows.","instructions":"Start with `holidays` to get the full list of public holidays for a country and year — use ISO 3166-1 alpha-2 codes (e.g. US, GB, DE, AU). Use `is_holiday` to quickly check if a specific date is a holiday before scheduling something. Use `next_holiday` to find what holiday is coming up from today or any given date — great for nudging users about upcoming breaks. If you are unsure which country codes are supported, call `supported_countries` first.","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","description":"Generate a comprehensive intelligence report on any company from their website URL. Covers identity, positioning, pricing, social media, content, advertising, reviews, hiring, infrastructure, financials, and competitive landscape in one call.","instructions":"Call research_competitor with the homepage URL. Pass a sections array to limit scope: [\"identity\", \"positioning\"] for overview, [\"social\", \"content\", \"advertising\"] for marketing audit. Omit sections for all 12. Async skill (45-120s) — poll with get_job_result. Chain with brand-extract and ad-library-search for deeper analysis.","version":"0.02","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":45,"timeoutSeconds":120,"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"]}],"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."},{"name":"content-repurposer","displayName":"Content Repurposer","subtitle":"Turn any content into posts, scripts, and articles","description":"Transform blog posts, articles, transcripts, and long-form content into platform-ready outputs for every channel. Paste a URL or raw text and get optimized versions for social media, email, video scripts, blog summaries, ad copy, and more.","instructions":"Use repurpose to convert source content into one or more output formats. Pass a URL or raw text as the content input, then pick from 15 format options: 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. Use extract_key_points first when you want to analyze the content before deciding which formats to create. Set brand_voice for consistent tone across outputs. Set audience and goal for targeted messaging.","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].","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","description":"Structured facts for every country. Look up any country by name, ISO code, or currency for capital, population, languages, timezones, borders, and flags. Search by region or language, or compare two countries side by side.","instructions":"Use lookup with a country name, ISO alpha-2/3 code (e.g. \"US\", \"USA\"), or currency code (e.g. \"USD\") to get full details for a single country. Use search with filter_by: \"region\" (e.g. \"europe\") to get all countries in a region, filter_by: \"language\" to find countries that speak a given language, or filter_by: \"currency\" to find countries that use a currency. Use compare to put two countries side by side on population, area, languages, and more. For bulk lookups, call lookup in sequence for each country you need.","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","description":"Definitions, synonyms, rhymes, and related words for any English word. Includes phonetics, pronunciation audio, parts of speech, examples, and antonyms. All lookups ranked by relevance. Useful for writing, education, and poetry.","instructions":"Use define for phonetics, audio, and definitions across all parts of speech. Use synonyms for writing alternatives (ranked by closeness). Use rhymes for poetry and songwriting. Use related_words for brainstorming associated concepts. Increase limit (up to 50) for more options. Chain synonyms + rhymes to find a word that is both.","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","description":"World Bank data: 16,000+ economic, social, and environmental indicators for every country from 1960 to present. Look up time series, compare countries, or search indicator codes. For economic research, country risk, and data journalism.","instructions":"indicator — time series for one country + indicator (GDP: NY.GDP.MKTP.CD, population: SP.POP.TOTL, inflation: FP.CPI.TOTL.ZG). compare_countries — one indicator across multiple countries (semicolon-separated: \"US;GB;DE\"). search_indicators — find codes by keyword. Use country \"all\" for world aggregate. Flow: search_indicators -> indicator or compare_countries.","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","description":"Track recent earthquakes worldwide or search historical seismic events by location, date range, and magnitude. Real-time feeds include tsunami alerts, felt reports, and severity levels. Search within a radius of any coordinate for safety monitoring, research, and situational awareness.","instructions":"recent: current activity filtered by period (hour/day/week/month) and min_magnitude (\"significant\" = newsworthy, \"4.5\" = felt, \"all\" = micro). search: historical or location-specific — lat/lon + radius_km. Save default coordinates as credentials. Monitoring: recent with period \"hour\" and min_magnitude \"2.5\".","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","description":"Precise solar times for any city or GPS coordinate on any date. Returns sunrise, sunset, solar noon, twilight phases, day length, and golden hour windows. For photographers, outdoor apps, and travel planners.","instructions":"Only one skill: `times`. Pass a city name or \"lat,lon\" coordinates as `location`. Add a `date` in YYYY-MM-DD format to get times for a specific day — omit it to get today's times. The response includes all twilight phases (civil, nautical, astronomical), solar noon, day length, and both morning and evening golden hour windows. For photography use cases, focus on `golden_hour.morning` and `golden_hour.evening` in the response — these are the ideal windows for shooting. Users can save their default latitude/longitude as credentials to avoid passing coordinates every time.","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","description":"Explore every Nobel Prize winner across Physics, Chemistry, Medicine, Literature, Peace, and Economics. Search by name, filter by year or category, and get full prize motivations and biographical details. Ideal for research, education, and fact-checking.","instructions":"Use laureates to search by person name or filter by category/year. Use prizes to browse awards by year or category.\n\nTips:\n- laureates is best when you know who won — search by name (e.g. \"Curie\", \"Einstein\")\n- prizes is best when you want all winners in a given year or category — e.g. all 2024 Nobel prizes\n- Category codes: phy (Physics), che (Chemistry), med (Medicine/Physiology), lit (Literature), pea (Peace), eco (Economics)\n- Omit all filters to get recent prizes","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","description":"Convert raw numbers into professional chart images in seconds. Supports bar, line, pie, doughnut, radar, scatter, and more with automatic colors and custom dimensions. Returns a permanent shareable URL and downloadable image. Simple data input or full Chart.js config for precise control.","instructions":"For most use cases, pass type, title, labels, and datasets — the tool handles colors and layout automatically. For simple single-dataset charts (pie, doughnut), just pass one item in datasets. For multi-series comparisons (line, bar), add multiple datasets with distinct labels. Use the config parameter when you need full Chart.js control (custom axes, tooltips, plugins). Default size is 600x400px — increase width/height for presentation-quality output. The chart_url_short in the response is a permanent link you can embed or share directly.","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"}],"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":"sec-filings","displayName":"SEC Filings","subtitle":"SEC EDGAR filings & financial data","description":"Search the SEC EDGAR database for U.S. public companies. Look up by ticker, browse filings (10-K, 10-Q, 8-K, Form 4), pull XBRL financials, track insider trades, search filings by keyword, and screen companies by metrics like revenue or net income.","instructions":"Start with search_company to get CIK by ticker/name. company_filings: browse filings by CIK, filter by form_type (10-K, 10-Q, 8-K, 4). financial_statements: structured income, balance sheet, cash flow data. insider_transactions: recent insider buys/sells with prices. filing_search: full-text search across all companies. screen_companies: rank by metric (revenue, net_income, assets).","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","description":"Look back at how any website looked at any point in history. Check if a URL has been archived, browse captures across date ranges, or get year-by-year summaries. For competitive research, recovering lost content, and investigating website histories.","instructions":"check_availability — closest snapshot to a date, returns viewable snapshot_url. search_captures — full capture timeline with date range and status filters (use \"200\" for successful only). site_history — total captures and per-year breakdown. Both domains and full URLs work as input.","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","description":"Generate, edit, and upscale images with 20+ AI models. Create from text prompts, edit with natural language, inpaint masked areas, change backgrounds, and upscale to 4K. Models range from fast drafts to photorealistic renders, with strengths in typography, design, or speed.","instructions":"text_to_image works with the default model — no model param needed. Use list_models for specialized models (typography, speed, quality). edit_image for modifications; pick \"editing\" or \"inpainting\" capability. If fal accepts a request but the image is still processing, use check_image with the returned fal_request_id. upscale_image for resolution. Be specific in prompts. Display result inline: ![Image](image_url). Share image_page link — permanent URL with download and OG preview.","version":"0.10","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":"Model to use. Call list_models to see available options sorted by popularity. Omit for the recommended default."},"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 a product photo with Flux Schnell (fast, low cost)","input":{"prompt":"A sleek wireless headphone on a marble surface, soft studio lighting, product photography, 4K","model":"flux-schnell","num_images":1}},{"description":"Generate a logo with Ideogram (best for text in images)","input":{"prompt":"Modern minimalist logo for \"ToolRouter\" — clean typography, blue gradient, tech company","model":"ideogram-v3","rendering_speed":"QUALITY"}},{"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":"URL of the source image to edit. Must be publicly accessible."},"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":"URL of mask image for inpainting (white = area to edit). Required for models with \"inpainting\" capability."},"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":"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":"URL of the image to upscale. Must be publicly accessible."},"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","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)"]}],"premadePrompt":"Generate an image of [describe the scene, subject, or concept]. Make it look [photorealistic / illustrated / cinematic / etc.].","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"}],"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":"pentest","displayName":"Penetration Testing","subtitle":"AI-powered black-box pen testing","description":"Black-box penetration testing for web apps — crawl the attack surface, scan for misconfigurations, and test for SQL injection, XSS, SSRF, and auth bypass with AI-generated payloads. Findings compile into a report with severity ratings, PoC evidence, and remediation guidance.","instructions":"Always start with recon — it maps the attack surface and returns a session for all subsequent skills.\n\nWorkflow: recon → scan_vulnerabilities → test_injection/test_xss/test_auth/test_ssrf → generate_report\n\nTips:\n- Pass the full session object between skills\n- authorized: true is required on all attack skills — only test systems you own or have permission to test\n- Attack skills run async — use get_job_result to poll\n- generate_report: \"markdown\" for readable, \"json\" for structured\n- Lower max_pages in recon (10-20) for faster scans on large sites","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","description":"Turn text descriptions into audio files using AI. Describe any sound — explosions, ambient backgrounds, UI chimes, nature scenes — and get a downloadable MP3 or WAV. For game developers, video producers, and app builders who need unique audio fast.","instructions":"Use generate_sound_effect. Write descriptive prompts with sound type, texture, context for best results. loop: true for ambient/repeating audio (seamless). duration_seconds: 0.5-30s (omit for auto). prompt_influence: 0-1 (0.3-0.5 creative, 0.7-0.9 precise). Output: audio_url ready to embed. UI sounds: short duration + high influence. Cinematic: longer duration + lower influence.","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"}],"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"}],"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":"music-generator","displayName":"Music Generator","subtitle":"Original AI music from text prompts","description":"Generate original music from a text description — specify genre, mood, instruments, tempo, and style. Perfect for content creators, game developers, and anyone needing background music. Tracks from 3 seconds to 10 minutes in MP3 or PCM, with instrumental-only mode and reproducible seeds.","instructions":"Be specific about genre, mood, instruments, and tempo. Include BPM for precise tempo. Set force_instrumental:true to avoid vocals. Use seed for reproducibility. Duration 5-15s for jingles, 30-60s for background loops. Output audio_url is a downloadable asset.","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"}],"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"}],"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":"voice-generator","displayName":"Voice Generator","subtitle":"Text to speech with 1000+ voices","description":"Convert text to lifelike speech with 1000+ voices across dozens of languages and accents. Fine-tune stability, speed, and style. Output as MP3 or raw PCM for streaming. For narrations, explainers, audiobooks, voice assistants, and demos.","instructions":"list_voices to browse voices, then generate_voice with voice_id + text. Default voice (George) works for most narration. stability: lower = expressive, higher = consistent. similarity_boost: raise to 0.8-0.9 for cloned voices. style: leave 0 unless dramatized. speed: 1.0 normal, 0.9 for long-form, 1.1-1.2 for energetic. mp3_44100_192 for high quality, pcm_24000 for streaming. audio_path auto-uploaded.","version":"0.02","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 all available voices with their IDs, names, categories, labels, descriptions, and audio preview URLs. Use this to discover voice options before generating speech.","inputSchema":{"type":"object","properties":{}},"annotations":{},"examples":[{"description":"List all available voices","input":{}}],"pricing":"paid","outputSchema":{"type":"object","properties":{"voices":{"type":"array","description":"Available voices","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":"Total number of voices returned"}}},"returns":"Array of voice objects with voice_id, name, category, labels, description, and preview_url"}],"workflow":["list_voices","generate_voice"],"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"]}],"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].","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"}],"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":"audio-isolator","displayName":"Audio Isolator","subtitle":"Isolate vocals, kill the noise","description":"Separate vocals from background music, noise, and instrumentation in any audio file using AI. Returns a clean track with just the isolated voice. Useful for podcast cleanup, music production, and interview extraction.","instructions":"Call isolate_vocals with a publicly accessible audio_url pointing to any MP3, WAV, M4A, or similar audio file. The skill processes the file and returns an audio_path that is automatically uploaded as a downloadable asset — use the returned audio_url to download the cleaned track. For best results, provide the highest-quality source file available. The tool works on both speech (podcasts, interviews) and music (extracting a cappella vocals from songs). There is only one skill, so this tool has a single straightforward workflow.","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":"URL of the audio file to process. Must be a publicly accessible URL pointing to an audio file (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"}],"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"}],"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":"audio-transcriber","displayName":"Audio Transcriber","subtitle":"Speech-to-text with speaker labels","description":"Convert spoken audio into accurate text with AI speech recognition. Supports 99+ languages, speaker diarization, word-level timestamps, and audio event tagging. Perfect for meetings, interviews, podcasts, and lectures.","instructions":"Call transcribe_audio with audio_url. Language auto-detects. Set diarize: true for speaker labels; num_speakers improves accuracy. timestamps_granularity: \"word\" for subtitles. tag_audio_events: true captures laughter, applause, music. Returns text (full transcript) and words (per-word timing + speaker IDs). Use audio-isolator first for noisy audio.","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":"Publicly accessible URL of the audio file to transcribe (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"}],"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"}],"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":"voice-transformer","displayName":"Voice Transformer","subtitle":"Voice swap with emotion preserved","description":"Convert an audio recording into a different voice while preserving pacing, emotion, and delivery. Provide source audio and a target voice ID for speech-to-speech conversion. For anonymization, dubbing, localization, and brand voice matching. Includes noise removal.","instructions":"Use voice-generator list_voices to find a voice_id, then call transform_voice with source audio URL + voice_id. stability: lower = expressive, higher = consistent. similarity_boost 0.8-0.9 for close voice match. remove_background_noise for ambient recordings. seed for reproducible output. Default model is English-only. audio_path auto-uploaded.","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":"URL of the source audio file to transform. Must be a publicly accessible URL (MP3, WAV, or other 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"}],"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"}],"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":"audio-dubber","displayName":"Audio Dubber","subtitle":"AI dubbing in any language","description":"Translate audio or video into natural-sounding dubbed versions in any language using AI voice synthesis. Preserves timing and multiple speakers. Ideal for creators and businesses reaching international audiences.","instructions":"Two-step: call dub_audio with source_url and target_lang to get a dubbing_id. Then call get_dubbed_audio with that ID and language_code. Poll if status is not \"dubbed\". Set source_lang explicitly for accuracy. Set num_speakers if known. Use start_time/end_time to dub a segment. highest_resolution: true for premium quality.","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 publicly accessible 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":"Publicly accessible URL of the audio or video file to dub. 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."}],"workflow":["dub_audio","get_dubbed_audio"],"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"}],"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":"deep-research","displayName":"Deep Research","subtitle":"AI research reports with citations","description":"Turn any question into a cited research report by searching and synthesizing multiple web sources. Cross-references findings with field-level citations and confidence scores. Multiple depth tiers from quick lookups to analyst-grade deep dives.","instructions":"Async tool — returns a job ID; poll for results. Processors: lite/base (quick), core (cross-referenced), pro (default, exploratory), ultra (deepest). Add -fast for speed. output_mode \"auto\" for structured JSON with citations; \"text\" for markdown report. source_domains restricts sources. Be specific in queries.","version":"0.02","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"},"description":"Only use sources from these domains (e.g. [\"reuters.com\", \"bloomberg.com\"])"},"exclude_domains":{"type":"array","items":{"type":"string"},"description":"Exclude sources from these 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"]}],"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.","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","description":"Translate text in App Store and Play Store screenshots into any language while preserving layout, branding, UI, and icons. Handles currency and date formats for cultural accuracy. Go from English to a localized set ready for submission — no designer needed.","instructions":"get_screenshots fetches existing App Store screenshots by name or URL. Pass each image URL to localize_screenshot. Set both language (\"Japanese\") and country (\"Japan\") — country drives currency/date adaptation. Process in parallel with different language/country pairs. Output image_path is a JPEG ready for App Store submission. High-value markets: Japanese, Simplified Chinese, German, French, Brazilian Portuguese, Korean.","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 local file path or an HTTP(S) URL."},"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":"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"}],"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":"restyle-app-store-screenshots","displayName":"Restyle App Store Screenshots","subtitle":"Restyle screenshots in any style","description":"Transfer the visual style of any inspiration app onto your App Store screenshots using AI image generation. Produces a full restyled set at App Store resolution (1290x2796). Great for A/B testing creative directions or refreshing store pages without a design sprint.","instructions":"Follow this sequence: get_screenshots → generate_overview → extract_slots.\n\n1. get_screenshots: fetch screenshots for both source and inspiration apps\n2. generate_overview: produce a restyled overview strip from source + inspiration images\n3. extract_slots: extract and upscale each slot to full App Store resolution (1290x2796)\n\nPass slot_count and slot_mapping from generate_overview into extract_slots to speed it up. Both generate_overview and extract_slots are async (60-120s).","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":"Array of source app screenshot paths or URLs (the app whose UI content to keep). Max 10 images."},"inspiration_images":{"type":"array","items":{"type":"string"},"description":"Array of inspiration app screenshot paths or URLs (the app whose visual style to copy). 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)."},"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":"Path or URL to the overview strip image generated by generate_overview."},"source_images":{"type":"array","items":{"type":"string"},"description":"Array of original source app screenshot paths or URLs (for UI content extraction)."},"inspiration_images":{"type":"array","items":{"type":"string"},"description":"Optional array of inspiration screenshot paths or URLs (for per-slot style reference)."},"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."}},"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":"string"},"description":"Array of local file paths to extracted screenshot JPEGs"},"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":"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"}],"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":"qr-code-generator","displayName":"QR Code Generator","subtitle":"QR codes for links, WiFi & contacts","description":"Generate scannable QR codes for URLs, text, WiFi credentials, or contact cards. Outputs permanent image URLs in PNG, SVG, JPG, or GIF with control over size, colors, error correction, and margins. Ideal for marketing materials, events, and business cards.","instructions":"Use `generate_qr` for any URL or text — it is the most versatile skill and handles the majority of use cases. For WiFi sharing (e.g. printing on a card for guests), use `generate_wifi_qr` with the SSID and password. For digital business cards or contact sharing, use `generate_vcard_qr` — it produces a vCard-encoded QR that auto-adds the contact when scanned. Tips: use SVG format for print-quality output that scales without pixelation; use error correction level H when the QR code will be printed or overlaid on a logo; use H for WiFi QR codes (already the default).","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"}],"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":"play-store-aso","displayName":"Play Store ASO","subtitle":"Optimize your Play Store listing","description":"Research competitors, optimize store listings, manage screenshots, track releases, and respond to reviews on Google Play. Search keyword rankings, audit listings for gaps, update titles and descriptions across locales, and manage reviews.","instructions":"Research (no credentials): search_apps for keyword rankings, app_details for full metadata.\n\nManagement (requires gpc_service_account_key + play_store_app_id):\n1. audit_listings — check locales for gaps\n2. export_listings — backup before changes\n3. update_listing — always dry_run: true first\n4. list_images / upload_image — manage screenshots and graphics\n5. list_tracks — check release status\n6. list_reviews + reply_to_review\n\nTitle max 30 chars, short desc max 80, full desc max 4000.","version":"0.02","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":"Promo video 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":"Promo video 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":"URL to download the image from"}},"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"]}],"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","description":"Mine App Store and Google Play reviews to find what users love, hate, and where competitors fall short. Clusters themes with AI, tracks sentiment over time, and compares apps.","instructions":"Workflow: aggregate_reviews to fetch reviews, sentiment_trends for rating changes over time, cluster_themes for recurring complaints and praise with evidence. Use compare_competitors for head-to-head rival analysis — pass competitor_targets alongside your primary app. Set limit_per_target 50 for fast scans, 150-200 for depth. Use focus in cluster_themes to narrow on a concern (e.g. \"pricing, ads\"). You can skip aggregate_reviews — cluster_themes and compare_competitors fetch reviews internally. Save app IDs as credentials to avoid passing them each call.","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","description":"Retrieve public profile data from 13 platforms: TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Facebook, Reddit, Threads, Bluesky, Snapchat, Twitch, and Truth Social. Get follower counts, bios, verification, and audience data for influencer vetting and creator research.","instructions":"Handle-based: get_tiktok/instagram/twitter/threads/bluesky/snapchat/twitch_profile (username without @). get_youtube_channel: handle with or without @. URL-based: get_linkedin_profile, get_linkedin_company, get_facebook_profile. get_reddit_subreddit: name without r/. get_tiktok_audience: country-level breakdown. get_tiktok_followers/following: map creator networks. detect_age_gender: estimate demographics from a profile photo 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","description":"Pull structured post and video data from TikTok, Instagram, YouTube, Twitter/X, Facebook, LinkedIn, Threads, Bluesky, Twitch, Kick, Pinterest, and Truth Social. Get captions, engagement metrics, media URLs, and timestamps for content research and competitor monitoring.","instructions":"Plural skills (e.g. `get_tiktok_videos`, `get_instagram_posts`) fetch recent content by handle. Singular skills (e.g. `get_tiktok_video`, `get_instagram_post`) fetch one post by URL. YouTube: `get_youtube_videos` for channel, `get_youtube_video` for single, `get_youtube_playlist` for playlists. LinkedIn: pass full URL to `get_linkedin_post` or `get_linkedin_company_posts`. Instagram stories: `get_instagram_highlights` then `get_instagram_highlight_detail` with the ID. Engagement metrics (likes, views, shares) returned for all content types.","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"}],"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":"social-media-search","displayName":"Social Media Search","subtitle":"Search creators, tags & posts","description":"Search TikTok, YouTube, Reddit, Pinterest, Threads, Instagram, and Google from one tool. Find creators, trending videos, hashtags, and discussions across the social web for influencer discovery, market research, and trend tracking.","instructions":"Creators: search_tiktok_users or search_threads_users. Trending content: search_tiktok_keywords, search_youtube, search_reddit. Hashtags: search_tiktok_hashtags or search_youtube_hashtag (view counts show trend scale). Communities: search_reddit or search_reddit_subreddit. Visual: search_pinterest. Instagram: search_instagram_reels. Web: search_google. Chain across platforms to triangulate trends.","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":"video-transcripts","displayName":"Video Transcripts","subtitle":"Transcribe TikTok, YouTube & more","description":"Extract text transcripts from social videos on TikTok, YouTube, Instagram, Twitter/X, and Facebook. Paste a video URL, get clean text back. Useful for content research, repurposing video to text, competitive analysis, and building training datasets.","instructions":"Pick the skill matching the platform: get_tiktok_transcript, get_youtube_transcript, get_instagram_transcript, get_twitter_transcript, get_facebook_transcript. Pass the full URL with https://. YouTube is fastest (pre-generated captions); others use AI transcription. Returns plain text, no timestamps.","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":"Full URL of the video to extract the transcript from"}},"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":"Full URL of the video to extract the transcript from"}},"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":"Full URL of the video to extract the transcript from"}},"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":"Full URL of the video to extract the transcript from"}},"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":"Full URL of the video to extract the transcript from"}},"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"}],"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":"ad-library-search","displayName":"Ad Library Search","subtitle":"Spy on ads across every platform","description":"Browse the public ad libraries of Facebook, Google, LinkedIn, and Reddit. Search by keyword or company name to surface active creatives, impression data, and ad copy. Built for marketers and strategists tracking competitive messaging.","instructions":"Facebook: search_facebook_ad_companies to find page IDs, then get_facebook_company_ads for their ads. search_facebook_ads for keyword landscape. Google: search_google_advertisers for IDs, then get_google_company_ads (get_ad_details: true adds OCR). search_linkedin_ads for B2B. search_reddit_ads for sponsored posts. Use get_*_ad with a URL/ID for full creative. Filter status: \"ACTIVE\" for running ads, media_type: \"VIDEO\" for video.","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","description":"Retrieve full comment threads from TikTok, YouTube, Instagram, Facebook, and Reddit — including author details, like counts, and timestamps. For sentiment analysis, community research, and competitive monitoring.","instructions":"Pick the skill matching your platform: `get_tiktok_comments`, `get_youtube_comments`, `get_instagram_comments`, `get_facebook_comments`, or `get_reddit_comments`. Pass the full post/video URL. To fetch replies to a specific comment: `get_tiktok_comment_replies` needs `comment_id` (cid from comments) + `url`; `get_youtube_comment_replies` needs `continuation_token` (repliesContinuationToken from the comment). For sentiment analysis, pair `text` with `likes` — highly-liked comments reflect dominant opinion. Reddit: `upvotes` signals agreement.","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":"TikTok video URL — the same URL passed to `get_tiktok_comments`"},"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","description":"Explore creator commerce on TikTok Shop and Amazon storefronts, get product details and reviews, and extract links from Linktree, Komi, Pillar, Linkbio, and Linkme. For product research, affiliate discovery, and e-commerce analysis.","instructions":"TikTok Shop: search_tiktok_shop → get_tiktok_product for details. get_tiktok_shop_products: all products from a shop URL. get_tiktok_shop_reviews: customer reviews by product ID or URL. get_amazon_shop: list products from an Amazon storefront URL. Link hubs: get_linktree/komi/pillar/linkbio/linkme_page — returns links with titles and URLs for affiliate and partnership discovery.","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","description":"Read any social media URL, profile, or feed. Auto-detects platform from URLs across TikTok, Instagram, YouTube, Twitter/X, Facebook, LinkedIn, Reddit, Threads, Bluesky, Pinterest, Twitch, Kick, Snapchat, and Truth Social. Also reads RSS feeds and web pages.","instructions":"`read_url`: paste any social link, auto-detects platform. Falls back to web reader for non-social URLs. `read_profile`: handle + platform. `read_posts`: recent content, optional content_type (reels, shorts, photos). `read_comments`: post URL. `search_posts`: query + optional platform (omit for multi-platform). `get_trending`: TikTok or YouTube. `read_feed`: RSS/Atom URL. `read_webpage`: any web page as markdown. `read_url` is the fastest — just pass the URL.","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/1234567890123456789"}},{"description":"Read a TikTok video","input":{"url":"https://www.tiktok.com/@charlidamelio/video/7234567890123456789"}},{"description":"Read a Reddit post","input":{"url":"https://www.reddit.com/r/technology/comments/abc123/some_post"}},{"description":"Read any web page","input":{"url":"https://example.com/article"}}],"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/technology/comments/abc123/some_post"}}],"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 a blog RSS feed","input":{"url":"https://blog.example.com/feed.xml"}},{"description":"Read Hacker News RSS","input":{"url":"https://hnrss.org/frontpage"}}],"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 news article","input":{"url":"https://www.bbc.com/news/technology-12345678"}},{"description":"Read a blog post","input":{"url":"https://blog.example.com/my-post"}}],"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","description":"Crawl any website and extract a complete brand profile: color palette, typography, spacing, component styles, logos, icons, animations, layout patterns, and personality traits. Understand a brand's visual language, replicate a design style, or research competitors.","instructions":"Call extract_brand with the URL of the website you want to analyze — the homepage is usually the best starting point, but landing pages and product pages can also reveal distinct brand styles. The returned branding object contains nested sections: check colorScheme for the overall palette, colors for specific hex values by role (primary, secondary, accent, background, text), fonts for typeface names, and personality for tone descriptors. For competitor research, run extract_brand on multiple competitor URLs and compare the resulting profiles side by side. This is a single-skill tool.","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.","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","description":"See how ChatGPT, Claude, Gemini, and Perplexity answer questions about your brand — with web search enabled, exactly as real users experience it. Useful for PR monitoring, competitive benchmarking, and understanding your brand's AI-era presence.","instructions":"Use monitor first — it queries AI models with brand-related prompts and returns a full report on mentions, sentiment, framing, and competitor positioning. Use check_recommendations for focused queries like \"best CRM software\" to see if the brand gets recommended. Both skills are async — poll with get_job_result.","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-content","displayName":"UGC Content Generator","subtitle":"UGC videos and photos from product to post","description":"Create authentic UGC-style videos and photos from a product description. Researches audience, writes scripts, generates AI scenes and clips across 16 formats — from product showcase and unboxing to lifestyle stills and flat lays. For marketers, DTC brands, and agencies.","instructions":"PIPELINE: research_audience->generate_creative->[REVIEW]->generate_frames->[REVIEW]->generate_videos->assemble_final. REVIEW: After creative, show hooks/scripts/scenes for approval. After frames, confirm before video gen (expensive). PRODUCT IMAGES: Send user to toolrouter.com/dashboard/files to upload. PERSONA: Pass persona_file_id from discover. Create with persona-generator if none. VOICE: create_voice_profile before generate_videos. regenerate_frame to fix weak frames. assemble_final: max 20 clips, captions off.","version":"0.10","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 (e.g. \"busy parents\", \"fitness beginners\")"},"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 (e.g. [\"reddit.com\", \"trustpilot.com\"])"}},"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 to apply proven hook patterns targeting 60%+ 3-second view rate. ⏱ Takes ~5 seconds. Step 2 of the UGC workflow — 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":3,"description":"Number of hooks to generate (default 3)"},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype to tailor hooks to (e.g. educational, entertainment)"},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Persona name"},"description":{"type":"string","description":"Persona description"},"tone":{"type":"string","description":"Voice tone (e.g. friendly, authoritative, playful)"},"style":{"type":"string","description":"Content style (e.g. casual UGC, polished, raw)"}},"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 3 hooks 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":3}}],"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. Creates script variations for each hook with mini-hooks at key drop-off timestamps. Targets ~20 second duration with conversational, non-salesy tone. ⏱ Takes ~5-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"},"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":2,"description":"Number of script variations per hook (default 2)"},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype to tailor scripts 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"},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["hooks","company_name","product_name","product_description","research"]},"annotations":{},"examples":[{"description":"Generate 2 scripts 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":2}}],"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. Step 4 — requires scripts from step 3.","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. Omit for default talking-head style."},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Persona name"},"description":{"type":"string","description":"Persona visual description"},"appearance":{"type":"string","description":"Detailed physical appearance for image generation consistency"},"tone":{"type":"string","description":"Voice tone"},"style":{"type":"string","description":"Content style"}},"description":"Optional creator persona for visual consistency"},"familiar_elements":{"type":"object","properties":{"location":{"type":"string","description":"Recurring location (e.g. \"kitchen\", \"home office\")"},"wardrobe":{"type":"string","description":"Recurring wardrobe element (e.g. \"red hoodie\")"},"camera_angle":{"type":"string","description":"Recurring camera angle (e.g. \"close-up selfie\")"},"opening_line":{"type":"string","description":"Recurring opening phrase"},"visual_motif":{"type":"string","description":"Recurring visual element (e.g. \"coffee mug in hand\")"}},"description":"Repetitive brand elements for memorability across videos"},"wardrobe_image_url":{"type":"string","description":"Optional URL to a wardrobe/outfit reference image for clothing consistency across scenes."},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform for framing guidance. Defaults to tiktok."},"llm_model":{"type":"string","description":"OpenRouter model ID (default google/gemini-2.5-flash)"}},"required":["scripts"]},"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"}]}}],"pricing":"paid","returns":"Array of scenes, each with scene description, setting, lighting, wardrobe, camera angle, mood, and shot list with visual changes"},{"name":"generate_creative","displayName":"Generate Creative (Fast)","description":"Generate hooks, scripts, and scene descriptions in one call (~8s). Set \"format\" for format-specific output (e.g. product_demo, grwm, unboxing, lifestyle_still). Photo formats return compositions instead of hooks/scripts. Step 2 — pass FULL 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"},"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. See format docs for requirements."},"num_hooks":{"type":"number","default":3,"description":"Number of hooks to generate (video formats, default 3)"},"num_compositions":{"type":"number","default":3,"description":"Number of photo compositions to generate (photo formats, default 3)"},"scripts_per_hook":{"type":"number","default":1,"description":"Script variations per hook (default 1)"},"aspect_ratio":{"type":"string","description":"Custom aspect ratio (e.g. \"9:16\", \"1:1\", \"4:5\", \"16:9\"). Overrides platform and format defaults."},"creative_direction":{"type":"string","description":"Optional script direction, e.g. \"focus on Claude not generating images by default\" or \"clickbaity discovery angle\"."},"content_archetype":{"type":"string","enum":["lifestyle","inspirational","aspirational","educational","documentary","entertainment","fictional"],"description":"Content archetype to tailor output to"},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Creator name"},"description":{"type":"string","description":"Bio — who they are, their background, why they are credible"},"appearance":{"type":"string","description":"Detailed physical appearance — hair, skin tone, body type, distinguishing features. Used in image/video prompts for consistency."},"tone":{"type":"string","description":"Voice tone (e.g. friendly, sarcastic, chill)"},"style":{"type":"string","description":"Content style (e.g. casual UGC, polished, raw)"}},"description":"Creator persona. With appearance details and a turnaround sheet image URL, generated content depicts this person."},"persona_image_url":{"type":"string","description":"Headshot or turnaround URL for face consistency. Required for most formats (all except pov, voiceover_broll, lifestyle_still, aesthetic_moment)."},"wardrobe_image_url":{"type":"string","description":"URL to a wardrobe/outfit reference image. When provided, scenes emphasize this clothing in generated frames."},"product_images":{"type":"array","items":{"type":"string"},"description":"Hosted URLs. User uploads at toolrouter.com/dashboard/files. Required for product formats."},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform — determines aspect ratio, duration limits, hook window, and text placement. Defaults to tiktok."},"familiar_elements":{"type":"object","properties":{"location":{"type":"string"},"wardrobe":{"type":"string"},"camera_angle":{"type":"string"},"opening_line":{"type":"string"},"visual_motif":{"type":"string"}},"description":"Repetitive brand elements for memorability"},"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 3 hooks with scripts and scenes","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":3}}],"pricing":"paid","returns":"Video: hooks, scripts, scenes arrays. Photo: compositions + scenes. Includes output_type, format_name, persona info, aspect_ratio."},{"name":"create_voice_profile","displayName":"Create Voice Profile","description":"Create a reusable voice profile for consistent voice across clips. Provide a voice_sample_url or auto-match from persona + accent. Returns a voice_id for generate_videos. Call after generate_creative.","inputSchema":{"type":"object","properties":{"voice_sample_url":{"type":"string","description":"URL to a voice sample audio file (mp3/wav/mp4, 5-30s). If provided, skips auto-generation."},"persona":{"type":"object","properties":{"name":{"type":"string","description":"Creator name"},"description":{"type":"string","description":"Creator description"},"tone":{"type":"string","description":"Voice tone (e.g. casual, authoritative)"}},"description":"Persona for auto voice matching. At least one of voice_sample_url or persona is required."},"accent":{"type":"string","description":"Desired accent (e.g. \"british\", \"american\", \"australian\"). Used for auto voice matching."},"sample_text":{"type":"string","description":"Text to speak for the auto-generated voice sample. Defaults to the first hook text."},"scripts":{"type":"array","items":{"type":"object"},"description":"Scripts array — scripts[0].hook_text used as default sample text if sample_text not provided."}}},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":120,"mode":"io"}},"examples":[{"description":"Auto-generate voice profile from persona","input":{"persona":{"name":"Chloe","description":"Mixed race woman in her mid-20s from London","tone":"casual and friendly"},"accent":"british","scripts":[{"hook_text":"I used to spend 2 hours deciding what to cook"}]}},{"description":"Use a provided voice sample","input":{"voice_sample_url":"https://filesamples.com/samples/audio/mp3/sample3.mp3"}}],"pricing":"paid","returns":"Object with voice_id (reusable Kling voice profile ID), source (\"user_sample\" or \"auto_generated\"), and optionally elevenlabs_voice_id and elevenlabs_voice_name"},{"name":"generate_frames","displayName":"Generate First Frames","description":"Step 3: Generate first-frame images from scenes. ~30s async. Pass existing_frames to skip frames that already have image_url. Do NOT re-call if you have frames — pass them as existing_frames instead. persona_image_url for face consistency.","inputSchema":{"type":"object","properties":{"scenes":{"type":"array","items":{"type":"object"},"description":"Array of scenes from generate_scenes step"},"existing_frames":{"type":"array","items":{"type":"object","properties":{"script_index":{"type":"number"},"image_url":{"type":"string"},"scene_description":{"type":"string"}}},"description":"Optional: frames from a previous generate_frames call. Frames with image_url will be skipped. Pass this to avoid regenerating frames you already have."},"persona_description":{"type":"string","description":"Visual description of the persona/creator for image generation"},"persona_image_url":{"type":"string","description":"Reference image URL for persona. Always pass it — used for image-to-image conditioning to keep the face consistent."},"wardrobe_image_url":{"type":"string","description":"Optional URL to a wardrobe/outfit reference image. When provided, each generated frame will get an edit pass to apply the exact clothing."},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform — determines default aspect ratio. Defaults to tiktok (9:16)."},"model":{"type":"string","default":"nano-banana-2","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","default":"9:16","description":"Image aspect ratio (overrides platform default if set)"}},"required":["scenes"]},"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"}]}}],"pricing":"paid","returns":"Array of frames with image URLs and scene descriptions, plus asset paths for auto-upload"},{"name":"generate_videos","displayName":"Generate Videos","description":"Step 5: Generate video clips from first frames. Takes 2-10 MINUTES — do NOT retrigger. Long scripts auto-split with continuation keyframes. Use check_video for pending clips.","inputSchema":{"type":"object","properties":{"frames":{"type":"array","items":{"type":"object"},"description":"Array of frames from generate_frames step (objects with image_url, scene_description, script_index)"},"scripts":{"type":"array","items":{"type":"object"},"description":"Array of scripts from write_scripts step (full script objects with script_body, hook_text, cta)"},"scenes":{"type":"array","items":{"type":"object"},"description":"Array of scenes from generate_scenes step (scene objects with shot_list, setting, mood)"},"persona_description":{"type":"string","description":"Visual/behavioral description of the persona for video generation"},"model":{"type":"string","default":"kling-3.0","description":"Video model to use. Call list_models to see available options. Omit for the recommended default."},"duration":{"type":"number","description":"Target video duration in seconds. Defaults to model maximum. Automatically snapped to the nearest valid duration for the model."},"voice_id":{"type":"string","description":"Kling voice_id from create_voice_profile. When provided, all clips use this voice with synced lip movement."}},"required":["frames","scripts","scenes"]},"annotations":{"execution":{"estimatedSeconds":300,"timeoutSeconds":900,"mode":"io"}},"examples":[{"description":"Generate videos from frames","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. I just tell it what I like and it gives me a full plan with grocery list.","cta":"Link in bio if you want to try it"}],"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"}]}}],"pricing":"paid","returns":"Array of video clips with video URLs, script indices, segment indices, and duration. Long scripts are automatically split into multiple clips with consistent continuation keyframes."},{"name":"check_video","displayName":"Check Video Status","description":"Check on a pending video that was still generating when generate_videos returned. Pass the fal_request_id and model_id from the pending_videos array. Returns the video URL if ready, or current status if still generating. You can check back any time.","inputSchema":{"type":"object","properties":{"fal_request_id":{"type":"string","description":"The request ID from pending_videos output"},"model_id":{"type":"string","description":"The model ID (e.g. fal-ai/kling-video/v3/pro/image-to-video)"}},"required":["fal_request_id"]},"annotations":{},"examples":[{"description":"Check on a pending video","input":{"fal_request_id":"abc123-def456","model_id":"fal-ai/kling-video/v3/pro/image-to-video"}}],"pricing":"free","returns":"Video URL if completed, or current status (queued/running/failed) with instructions to check again"},{"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. Returns image URL if ready, or status if still generating.","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 from the registry (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 (queued/running/failed) with instructions to check again"},{"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. Use when a specific frame needs adjustment — much faster than regenerating all frames.","inputSchema":{"type":"object","properties":{"frame_index":{"type":"number","description":"Index of the frame to regenerate (0-based, must be within scenes array bounds)"},"scenes":{"type":"array","items":{"type":"object"},"description":"Full scenes array from generate_creative or generate_scenes output"},"persona_description":{"type":"string","description":"Visual description of the persona for image generation"},"persona_image_url":{"type":"string","description":"Reference image URL for persona consistency"},"wardrobe_image_url":{"type":"string","description":"Optional wardrobe reference image URL"},"revision_notes":{"type":"string","description":"What to change about this frame (e.g. \"make her smile more\", \"change to outdoor setting\")"},"model":{"type":"string","default":"nano-banana-2","description":"Model to use. Call list_models to see available options. Omit for the recommended default."},"aspect_ratio":{"type":"string","description":"Image aspect ratio (overrides platform default)"},"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 with better lighting"}}],"pricing":"paid","returns":"Single frame object with image URL and scene description, plus asset path"},{"name":"composite_product","displayName":"Composite Product","description":"Composite real product into frames. IMPORTANT: Inline chat images CANNOT be passed as URLs. Direct user to toolrouter.com/dashboard/files to upload their image and copy the hosted URL. They can reuse it anytime. Or use web-screenshot on product page.","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)"},"product_images":{"type":"array","items":{"type":"string"},"description":"Hosted image URLs. User uploads at toolrouter.com/dashboard/files to get URLs."},"product_name":{"type":"string","description":"Product name for the LLM placement prompt"},"product_description":{"type":"string","description":"Brief product description to guide natural placement"},"placement_hints":{"type":"array","items":{"type":"string"},"description":"Optional per-frame placement hints (e.g. \"holding in left hand\", \"visible on desk\"). One per frame."},"strength":{"type":"number","default":0.5,"description":"How much to change the frame (0.0 = no change, 1.0 = full replacement). Default 0.5."}},"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","https://images.unsplash.com/photo-1523362628745-0c100150b504?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 with product naturally placed in each scene) — 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 — poll with get_job_result.","inputSchema":{"type":"object","properties":{"videos":{"type":"array","items":{"type":"object"},"maxItems":20,"description":"Videos from generate_videos ({video_url, script_index, duration_seconds}). Max 20 per call."},"scripts":{"type":"array","items":{"type":"object"},"description":"Scripts array for text overlays (hook_text on first clip, cta on last clip)"},"platform":{"type":"string","enum":["tiktok","instagram_reels","youtube_shorts","instagram_stories","twitter"],"description":"Target platform — determines video format and text placement. Defaults to tiktok."},"transition":{"type":"string","enum":["fade","slide","flip","clock-wipe","none"],"default":"fade","description":"Transition effect between clips"},"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. Default false — users add captions on the platform."},"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, default #000000)"}},"description":"Optional style overrides for the final video"}},"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","generate_creative","create_voice_profile","generate_frames","composite_product","generate_videos","assemble_final","list_models"],"icon":"/icons/ugc-content.webp","changelog":[{"version":"0.01","date":"2026-03-20","changes":["Initial release"]},{"version":"0.02","date":"2026-03-20","changes":["Added platform-aware variants (tiktok, instagram_reels, youtube_shorts, instagram_stories, twitter)","Added wardrobe reference image support for clothing consistency","Added composite_product skill for real product placement via nano-banana-2 edit","Added regenerate_frame skill for scene-level iteration","Added assemble_final skill for video assembly via Remotion render server"]},{"version":"0.03","date":"2026-03-21","changes":["Enhanced realism prompts across all image and video generation skills"]},{"version":"0.04","date":"2026-03-22","changes":["Added subtitle, expanded description, and agent instructions"]},{"version":"0.05","date":"2026-03-23","changes":["Added create_voice_profile skill for consistent voice across video clips","Wired voice_id into generate_videos for synced lip movement across all clips"]},{"version":"0.06","date":"2026-03-26","changes":["Added 16 UGC format templates: 11 video (talking_to_camera, product_demo, product_showcase, grwm, unboxing, before_after, problem_solution, storytime, pov, voiceover_broll, reaction) + 5 photo (lifestyle_still, product_flat_lay, in_use_shot, aesthetic_moment, mirror_selfie)","generate_creative now accepts \"format\" param for format-specific creative direction and scene generation","Photo formats produce compositions instead of hooks/scripts, mapped to scenes for generate_frames compatibility","Added \"aspect_ratio\" param for custom aspect ratios independent of platform presets","generate_scenes now accepts \"format\" param for format-specific video scene direction"]},{"version":"0.07","date":"2026-03-30","changes":["generate_frames: added existing_frames param to skip frames that already have image_url — prevents redundant regeneration","composite_product: output key renamed from composited_frames to frames for consistency with generate_videos input","generate_videos: increased estimatedSeconds to 300 and timeoutSeconds to 900 to prevent premature retrigger","Updated instructions to warn agents against re-calling generate_frames and retriggering generate_videos"]},{"version":"0.08","date":"2026-03-31","changes":["BREAKING: write_scripts now always returns full script dialogue (script_body, hook_text, cta, mini_hooks) — removed table format that stripped content in concise mode","BREAKING: generate_scenes now always returns full scene data (shot_list, setting, lighting, mood, camera_angle, wardrobe) — removed table format","BREAKING: generate_videos now returns full videos/pending_videos data — removed media format that stripped content in concise mode","generate_videos: added duration awareness — clips capped to match script target duration instead of generating one per frame","generate_videos: video clips now download to temp for reliable asset pipeline upload (video_N_path keys)","write_scripts + generate_creative: improved CTA generation — natural sentences, not bare brand names","Updated tool instructions with recommended workflow, voice profile guidance, and URL handling","assemble_final: captions now default to false — users add captions natively on social platforms","assemble_final: documented max 20 clips per call limit in skill schema","Instructions now mention regenerate_frame for fixing weak hero frames before expensive video gen","generate_frames: timeout now returns pending_frames with fal_request_id instead of failing — images can be retrieved later via check_image","Added check_image skill for polling pending image jobs (mirrors check_video for videos)"]},{"version":"0.09","date":"2026-04-04","changes":["Improved error messages for person-driven formats — agents now get clear guidance to ask the user for appearance details"]},{"version":"0.10","date":"2026-04-05","changes":["Personas from your library are now auto-discovered and injected — pass persona_file_id instead of manual persona fields"]}],"premadePrompt":"Create a UGC-style video for my [product name]. It's a [brief product description] aimed at [target audience]. I want it to feel authentic and work well on TikTok.","usesPersonas":true,"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":"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"}],"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":"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":"faceless-carousels","displayName":"Faceless Carousel Generator","subtitle":"Scroll-stopping carousels, no face","description":"Generate faceless carousel posts for Instagram and TikTok — from quick single-call creation to a full research-backed pipeline. Handles niche research, hook writing, slide copy, visual design, and final rendered images. No design skills or personal brand required.","instructions":"FAST: create_carousel with niche + topic for rendered slides in one call (~15-30s). DEEP: research_niche → write_hooks → write_slides → design_slides → render_slides for maximum quality. MID: write_carousel → render_slides for speed with better quality. Add export_editable for Figma/Canva SVGs. Pass creative_direction (visual_style, platform, brand_colors) when available. Use brand_url to auto-extract colors, fonts, and images.","version":"0.02","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 — URLs or local file paths"},"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, slide copy, emphasis text, and color scheme. Outputs designed_carousels ready for render_slides. This is the FAST path: replaces write_hooks + write_slides + design_slides in a single LLM call (~5s). Use this instead of the 3-step pipeline for speed.","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 render_slides, plus color_scheme"},{"name":"create_carousel","displayName":"Create Complete Carousel (End-to-End)","description":"Generate a complete ready-to-post carousel in a single call. Writes copy, matches a template, renders all slides, and returns image URLs. Supports template replication, slide background images, and brand extraction. ⏱ Takes ~15-30 seconds. Async — poll with get_job_result.","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"},"cta_type":{"type":"string","enum":["save","share","comment","follow","dm","link"],"description":"CTA type"}},"description":"Optional creative direction for style, colors, and tone"},"brand_url":{"type":"string","description":"Website URL to auto-extract brand colors, fonts, and page images for styling and slide backgrounds."},"template_images":{"type":"array","items":{"type":"string"},"description":"Template carousel image(s) to replicate via vision LLM. Brand colors/fonts override template styling if provided."},"slide_images":{"type":"array","items":{"type":"string"},"description":"Image URLs or file paths for slide backgrounds. Distributed across slides in order (CTA excluded). Alias: images."},"images":{"type":"array","items":{"type":"string"},"description":"Alias for slide_images. Image URLs or file paths for slide backgrounds, distributed across slides in order (CTA excluded)."},"llm_model":{"type":"string","description":"OpenRouter model ID"}},"required":["niche","topic"]},"annotations":{"execution":{"estimatedSeconds":30,"timeoutSeconds":120,"mode":"cpu"}},"examples":[{"description":"Create a 7-slide finance carousel with images","input":{"niche":"personal finance","topic":"5 money habits that keep you broke","creative_direction":{"visual_style":"dark mode bold","platform":"instagram"}}}],"pricing":"paid","returns":"Carousel with slide image URLs, color scheme, and metadata — ready to post. Includes saved_template_id if a template was analyzed and persisted."},{"name":"generate_images","displayName":"Generate Slide Images","description":"Generate carousel slide images. Supports 70+ models; default: nano-banana-2 with accurate text rendering. Requires designed carousels from the design step. ⏱ Takes ~5-10 seconds per slide. Async — poll with get_job_result.","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":"Reference image URLs for image-to-image conditioning"}},"description":"Optional creative direction"},"model":{"type":"string","default":"nano-banana-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":"render_slides","displayName":"Render Slide Images (Template-Based)","description":"Render carousel slides using template-based SVG composition with professional typography. Pixel-perfect text, consistent layouts. Supports template replication, slide backgrounds, and brand extraction. ⏱ Takes ~10-30 seconds. Async — poll with get_job_result.","inputSchema":{"type":"object","properties":{"designed_carousels":{"type":"array","items":{"type":"object"},"description":"Array of designed carousels from design_slides or write_carousel step"},"creative_direction":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","tiktok","both"],"description":"Platform determines dimensions: instagram=1080x1350, tiktok=1080x1920"},"brand_colors":{"type":"object","description":"Brand colors: { primary, secondary, accent, background, text }"}},"description":"Optional creative direction"},"brand_url":{"type":"string","description":"Website URL to auto-extract brand colors, fonts, and page images for styling and slide backgrounds."},"template_images":{"type":"array","items":{"type":"string"},"description":"Template carousel image(s) to replicate via vision LLM. Brand colors/fonts override template styling if provided."},"slide_images":{"type":"array","items":{"type":"string"},"description":"Image URLs or file paths for slide backgrounds. Takes priority over generated and brand page images. Alias: images."},"images":{"type":"array","items":{"type":"string"},"description":"Alias for slide_images. Image URLs or file paths for slide backgrounds, distributed across slides in order (CTA excluded)."},"photo_backgrounds":{"type":"boolean","description":"Generate AI photo backgrounds (default: false). User-provided slide_images/images take priority."}},"required":["designed_carousels"]},"annotations":{"execution":{"estimatedSeconds":45,"timeoutSeconds":180,"mode":"cpu"}},"examples":[{"description":"Render slides from designed carousel using template composition","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 rendered slide image paths for auto-upload. Includes saved_template_id if a template was analyzed and persisted."},{"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 → render_slides","research_niche → write_hooks → write_slides → design_slides → render_slides","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"]}],"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.","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"}],"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":"get-brand-logo","displayName":"Get Brand Logo","subtitle":"Official logos by domain or ticker","description":"Retrieve official brand logos by domain, stock ticker, ISIN, or crypto symbol. Returns the logo image plus all variants — icon, full logo, symbol in light/dark themes and SVG/PNG/WebP/JPEG formats. Useful for dashboards, branded reports, and data displays.","instructions":"Call get_logo with an identifier — domain (nike.com), stock ticker (AAPL), or crypto symbol (crypto/BTC). The default type is \"icon\" which returns the compact square logo most useful for UI contexts. Use type: \"logo\" for the full horizontal lockup. Specify theme: \"dark\" or \"light\" when you know the background the logo will appear on. The response includes all_logos with every available variant and their CDN URLs, so you can let users choose their preferred format. The logo_path is automatically uploaded to the asset store and returned as a downloadable file.","version":"0.02","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_path":{"type":"string","description":"Path to the downloaded logo file"},"format":{"type":"string","description":"Image format of the downloaded file"},"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)"},"src_url":{"type":"string","description":"Direct CDN URL for the selected logo"},"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"]}],"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"}],"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":"stock-market","displayName":"Stock Market","subtitle":"Quotes, history & analyst insights","description":"Real-time and historical data for stocks, ETFs, indices, futures, forex, and crypto. Quotes, OHLCV history, side-by-side comparisons, market movers, and analyst insights with technicals, valuations, price targets, and bull/bear theses.","instructions":"get_quote — current price for up to 10 symbols. price_history — OHLCV bars (adjust interval/range). market_movers — gainers, losers, most_active, undervalued_growth. market_overview — US or GLOBAL snapshot. analyst_insights — technicals, valuation, scores, bull/bear thesis. compare_stocks — side-by-side performance. dividends_splits — dividend history and splits. search_symbol — find tickers by name. trending — hot tickers by region. Indices: ^GSPC, ^DJI. Futures: GC=F. Forex: EURUSD=X. Crypto: BTC-USD.","version":"0.02","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"}],"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"]}],"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."},{"name":"video-editor","displayName":"Video Studio","subtitle":"Edit footage, add motion & render","description":"Turn raw camera footage into publish-ready videos. Handles silence removal, dynamic zoom cuts, color correction, audio mastering, motion graphics from transcripts, B-roll insertion, and final export. For content creators, podcast editors, and course producers.","instructions":"list_capabilities first to check fonts, transitions, and formats. Talking-head workflow: edit_footage (silence removal, zoom, color, audio) -> transcribe_video -> create_animations -> finalize_video. Quick renders: render_video (JSON template) or render_still (single frame). edit_footage supports 1-2 cameras with auto audio sync. transcribe_video gives word-level timestamps for frame-accurate captions. All async skills return job_id — poll with get_job_result.","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\" (public URL) and optional \"label\". Supports 1-2 cameras with automatic audio-based sync.","items":{"type":"object","properties":{"url":{"type":"string","description":"Publicly accessible URL to the video file"},"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":"URL of the edited video to analyze and create animations for"},"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":"URL of the edited base video (from edit_footage)"},"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":"URL of the video to transcribe"},"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":"Background image 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"}],"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":"viral-video-clone","displayName":"Viral Video Clone","subtitle":"Clone any viral video format for your brand","description":"Clone the exact format of any viral TikTok, Instagram, or YouTube video. Forensic breakdown of hook style, scene structure, timing, camera angles, transitions, pacing, and audio. Generates brand-adapted production briefs ready for the ugc-content pipeline.","instructions":"analyze_video first — pass any TikTok, Instagram, or YouTube URL for a forensic format breakdown. Then adapt_format with the VideoFormat + brand/product/audience for a production brief. Feed adapt_format output into ugc-content/generate_frames as \"creative\" (skip research_audience and generate_creative). Set \"format\" to ugc_format, then: generate_frames → generate_videos → assemble_final. Both skills are async — poll with get_job_result.","version":"0.03","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":"Video URL from TikTok, Instagram, or YouTube. The tool server CAN fetch any public URL — always pass it."},"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-content 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-content pipeline"},"scenes":{"type":"array","description":"Scene descriptions compatible with ugc-content 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-content format template"},"creative_notes":{"type":"string","description":"What was preserved vs adapted"}}},"returns":"Production brief for ugc-content pipeline. Pass as \"creative\" to ugc-content/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"]}],"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,"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"}],"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":"web-screenshot","displayName":"Web Screenshot","subtitle":"Screenshot any page at any viewport","description":"Capture pixel-perfect screenshots of any URL with full JS rendering. Single or multi-viewport (desktop, tablet, mobile) in one call. Supports full-page captures, retina output, and configurable wait times. For visual QA, design reviews, and competitive research.","instructions":"capture — single URL at one viewport (desktop/tablet/mobile/custom, default 1440x900). capture_responsive — same URL at multiple viewports in one call (faster than separate captures). full_page: true for entire scrolling page. Increase wait_for for heavy JS. device_scale_factor: 2 for retina. jpeg for small files, png for sharp text. image_path auto-uploaded.","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"}],"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":"translate","displayName":"Translate","subtitle":"Accurate translation, 30+ languages","description":"Professional translations across 30+ languages with formality control, context hints, and HTML/XML handling. Translate strings or batches, auto-detect source language, and preserve markup. For support tools, content pipelines, and multilingual apps.","instructions":"list_languages — discover supported codes (DE, FR, JA, ZH, EN-US, PT-BR); cache the result. translate_text — pass string or array + target_lang; source auto-detects. Use formality \"prefer_more\"/\"prefer_less\" to avoid errors on unsupported languages. Use context param to disambiguate words. Set tag_handling: \"html\" for markup. detect_language — identify unknown text before routing. Batch arrays are more efficient than multiple calls.","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","description":"Create customer personas with demographics, psychographics, goals, pain points, and messaging angles — plus multi-angle portrait turnaround sheets. For marketing strategy, copywriting, ad targeting, and product development. Describe your business and audience to get presentable personas.","instructions":"Two paths:\n1. create_persona (recommended) — profiles + portraits in one async call (~70s per persona)\n2. generate_persona → generate_images — review/edit profiles before generating portraits\n\nTips:\n- Be specific in business_description and target_description\n- Set locale for culturally relevant names and references (e.g. \"UK\", \"Japan\")\n- Use additional_context for brand positioning or audience segments\n- Async jobs — poll with get_job_result every 30s\n- Render turnaround sheets inline with markdown image syntax using sheet_N_url","version":"0.03","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 sheet portraits (front/left/right/back) from persona photo descriptions. Composites into a 2x2 grid. Takes ~70s per persona. Async — poll with get_job_result. Render sheets inline via sheet_N_url.","inputSchema":{"type":"object","properties":{"descriptions":{"type":"array","description":"Array of photo description strings — typically the photoDescription field from each persona","items":{"type":"string"}},"style":{"type":"string","description":"Optional style direction applied to all portraits (e.g. \"professional headshot\", \"casual outdoor\")"}},"required":["descriptions"]},"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"}}],"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 individual angle image paths. Display sheets 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"]}],"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.","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","description":"Turn any poem into a 30-second vertical short film (9:16) — from text to fully assembled micro-cinema. Breaks the poem into scenes, generates AI visuals for each, adds typography overlays and audio, then assembles the final video.","instructions":"RETURNING USER? Call resume_project first — read user files via MCP (list_files, read_file) for config/personas/scenes/script, pass to resume_project. It tells you what to skip. NEW USER? Start with create_project or break_poem. Ask user to review between phases. Show film_page/image_page URLs.","version":"0.04","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":"URL of a reference image (uploaded to ToolRouter files first). The tool server CAN fetch any public URL — always pass it."}},"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":{"type":"object","description":"Script object from write_script 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, 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":{"type":"object","description":"Script object from write_script output — pass it directly"},"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"]}},"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/v2/master/image-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/v2/master/text-to-video","scene_index":0},{"fal_request_id":"ghi789","fal_model_id":"fal-ai/kling-video/v2/master/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."}],"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"],"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"]}],"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,"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"}],"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":"recipe-finder","displayName":"Recipe Finder","subtitle":"Recipes by dish or ingredients","description":"Search thousands of recipes by dish name, ingredients on hand, cuisine, or category. Browse trending recipes from 12+ food blogs updated daily. Each recipe includes step-by-step instructions, ingredient quantities, thumbnails, and optional video links.","instructions":"search_by_ingredients: pass comma-separated ingredients (\"chicken, garlic, rice\") to find matching recipes. search_recipes: look up by dish name for full details. trending_recipes: latest from 12 food blogs, with optional cuisine filter. recipe_of_the_day: daily featured recipe. filter_by_ingredient/cuisine/category: browse by one dimension (call list_categories if unsure). random_recipe: surprise suggestion.","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","description":"Live financial market data for portfolio analysis, macro research, and risk monitoring. Covers commodities, yield curves, central bank rates, 30+ FX pairs, economic indicators, energy, labor, housing, sentiment, government bonds, crypto, COT positioning, credit conditions, and the federal budget.","instructions":"live_prices — real-time prices (energy, metals, agriculture, indices, FX, crypto, bonds) with intraday intervals. commodity_prices — official FRED historical data. treasury_yields — US yield curve with spread/inversion analysis. benchmark_rates — SOFR, ESTER, SONIA, CORRA. exchange_rates — 30+ FX pairs. economic_indicators — GDP/CPI/unemployment (US or global). energy_markets — EIA oil/gas/coal/inventories. government_bonds — Euro area 10Y yields. crypto_markets — top coins, Fear & Greed. Use live_prices for current data, FRED skills for official historical reference.","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":"drug-info","displayName":"Drug Information","subtitle":"Drug info: recalls & side effects","description":"FDA drug labeling data: indications, dosage, warnings, contraindications, and interactions. Check adverse event reports for real-world side effects, query recall history, and search drugs by medical condition. Always surface the FDA disclaimer.","instructions":"lookup_drug: full FDA label by brand or generic name. check_adverse_events: reported side effects (FAERS). check_recalls: recall history (Class I = most serious). search_by_condition: find drugs by condition when name unknown. Chain: search_by_condition → lookup_drug → check_adverse_events. Always surface the FDA disclaimer.","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","description":"Find and compare accommodation worldwide — Airbnb listings with photos, ratings, prices, and booking links, plus hotel rates across Booking.com, Agoda, and Trip.com. Ideal for travel planning, trip research, and price comparison.","instructions":"AIRBNB: search_destinations → search_stays (or skip search_destinations if location name is known). Returns listings with photos, ratings, prices, and Airbnb booking URLs. HOTELS: compare_hotel_rates with TripAdvisor key (g{location}-d{property}). Returns live prices from multiple booking sites, cheapest first. Prices in requested currency (default USD). Dates: YYYY-MM-DD.","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","description":"Look up any movie or TV show for ratings from IMDB, Rotten Tomatoes, and Metacritic, plus cast, director, plot, awards, and box office. Browse episode guides with per-episode ratings and full cast lists. Great for recommendations, research, and entertainment queries.","instructions":"search first to get IMDB ID, then get_details for full info. Pass imdb_id for precise lookup. Use plot:\"full\" for detailed synopsis. get_episodes needs title + season — check total_seasons first. tv_episodes_detailed returns all seasons at once (better than per-season calls). tv_show_cast for cast lookup.","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","description":"Turn one favorite movie or a small set of seed titles into a ranked shortlist of genuinely similar films. Great for watchlist building, movie-night planning, and agents that need explainable recommendations instead of generic search results.","instructions":"Use find_similar when the user starts from one known movie and wants closely related follow-up picks. Use blend_taste when the user gives two to five seed movies and wants a shortlist that combines those tastes. Set include_same_collection to false when the user wants fresh alternatives instead of franchise sequels. Use min_vote_average to keep quality above a threshold, and page/limit when you need to browse deeper. Chain into movie-tv-search if the user wants extra ratings, cast, or plot detail on a shortlisted pick.","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","description":"Discover live events near any city worldwide — concerts, sports, comedy, theatre, and more. Search by keyword, category, date, or coordinates, then drill into venue details, price ranges, seat maps, and ticket links. Ideal for trip planning and finding things to do in any city.","instructions":"Start with search_events to find events by keyword, city, or category. Use find_airport-style geographic search (latitude/longitude + radius) when you have coordinates. Drill into event_details for a specific event to get full venue info, seat maps, and direct ticket purchase links. Use find_venues when looking for specific arenas or theatres — it returns box office hours and upcoming event counts. Use search_artists to find performer profiles and check upcoming tour dates. Chain search_artists → search_events (filtering by artist name) to build a complete tour schedule for any act.","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","description":"Real-time game data across football, basketball, American football, baseball, and hockey. Live scores, results by date, team schedules, league standings, and team search.","instructions":"live_scores: games currently in progress by sport. scores_by_date: results/fixtures for any date (YYYY-MM-DD). team_schedule: full season calendar by team name. search_team: find exact team name. standings: league table by name (\"Premier League\", \"NBA\", \"NHL\", \"NFL\"). Sports: football (soccer), basketball, american-football, baseball, hockey.","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","description":"Search live flight inventory across airlines for any route. Get real-time pricing, baggage, emissions, stops, and booking deadlines for one-way or round-trip flights, or scan a bounded date window for cheap travel days. Supports economy through first class and returns IDs needed for booking handoff.","instructions":"Use find_airport when you need IATA codes from city or airport names. Use search_flights for a specific travel date; set max_connections: 0 for direct-only results, and add airlines, departure_window, or sort_by when needed. Keep passenger_ids and offer_request_id for booking handoff to travel-booking. Use search_dates when dates are flexible, then rerun search_flights on the selected day before booking. Call get_offer to refresh a specific offer before purchase.","version":"0.04","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 flight offer by its ID. Returns updated pricing, baggage info, available services, and booking deadline. Use this after search_flights to check if an offer is still available.","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"}],"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"]}],"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.","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":"travel-booking","displayName":"Travel Booking","subtitle":"Book flights & hotels — real bookings","description":"Book real flights and hotel stays — both return a secure checkout link for the guest to pay. For flights, find offers with flight-search first, then book here. For hotels, search_stays finds rooms by location and dates, book_stay returns the payment link. Manage, cancel, and track both.","instructions":"FLIGHTS: (1) flight-search finds offers, (2) book_flight(offer_id, passengers[id, given_name, family_name, title, gender, born_on, email, phone_number]) → checkout_url. get_booking checks status. cancel_booking(confirm:false) = refund quote. pay_held_booking completes payment. STAYS: (1) search_stays(location or lat+lng, check_in_date, check_out_date) → rate_id per room. (2) book_stay(rate_id, guests[given_name, family_name, born_on], email, phone_number) → checkout_url for guest to pay. get_stay_booking(booking_id). cancel_stay(confirm:false) = policy; confirm:true cancels.","version":"0.05","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)"}],"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"]}],"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","description":"Search a massive catalog of books by title, author, subject, or ISBN. Get cover images, descriptions, publication details, trending titles, and author bios. Includes full-text access to 60,000+ public domain ebooks.","instructions":"Use search_books for open queries — returns work keys for get_book_details. Use lookup_isbn for exact edition details. Use search_by_author or search_by_subject to browse by writer or genre. Use get_author_details for bios and top works. Use trending_books for popular titles. For free reading: search_free_ebooks then read_ebook (set max_length up to 50000 for more text).","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","description":"Search artworks across museum APIs, cultural aggregators, and open knowledge sources. Browse image-rich records, compare institutions, open full artwork details, and look up artist background for global art discovery.","instructions":"Use search_artworks for discovery across providers and set source when you want one catalog. The best image-rich sources are met, artic, cma, digitalnz, and openverse, while wikidata and jpsearch broaden geographic coverage. Use artwork_details after search_artworks for normalized metadata on one provider record. Use search_artists for artist lookups across Art Institute of Chicago and Wikidata. Keep has_images enabled for gallery-first browsing. Prefer smaller limits because The Met needs follow-up object fetches and broad providers can return mixed records.","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","description":"Find live public-sector tenders, recent contract awards, buyer activity, and supplier-fit signals across official procurement sources. Useful for bid teams, consultants, and agencies that need revenue opportunities, incumbent evidence, and buyer watchlists in one place.","instructions":"Use search_opportunities for active tenders and search_awards for incumbent history. Open one result with opportunity_details when you need the canonical buyer, deadline, code, and source-link view. Use buyer_intelligence when the buyer matters more than the keyword. Use match_supplier_profile to rank tenders by code, geography, value band, set-aside fit, and preferred buyers. Use watchlist_snapshot for compact automation digests. Source all keeps the public no-auth sources active even when SAM.gov is unavailable.","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","description":"Real-time and historical NASA data. Astronomy Picture of the Day, near-Earth asteroid tracking with hazard ratings, ISS position, crew currently in space, and full-disc Earth photos from orbit. For educational apps, dashboards, and content.","instructions":"picture_of_the_day: daily image, use count for random APODs. near_earth_objects: asteroid activity for a date range (up to 7 days), check hazardous_count and miss_distance. iss_position: real-time lat/lon. people_in_space: crew list grouped by spacecraft. earth_imagery: full-disc Earth images from DSCOVR satellite.","version":"0.03","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"}}},"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"]}],"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","description":"Curated trivia questions across 20+ categories: history, science, sports, video games, music, film, and more. Filter by category, difficulty, and type (multiple choice or true/false). Each question includes shuffled answers with the correct one marked.","instructions":"list_categories — get category names and IDs. get_questions — set amount (1-50), category, difficulty, type. Omit filters for random questions. Use category_stats to check available question count before requesting. Batch 10 at a time and track seen questions to avoid repeats.","version":"0.02","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"]}],"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","description":"Search Wikipedia by keyword, get article summaries, fetch full text, discover historical events for any date, or grab a random article. Supports 50+ language editions. Ideal for background research, fact grounding, entity disambiguation, and knowledge about any topic, person, place, or concept.","instructions":"search — find articles by keyword. get_summary — concise overview by title. get_full_article — full text (set max_length, default 5000). on_this_day — events for any date. random_article — discovery. Flow: search -> get_summary -> get_full_article if needed. Titles are case-sensitive. Use language param for non-English editions (es, de, fr, ja).","version":"0.02","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"}},"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"}}},"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"]}],"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","description":"Fetch accurate, version-specific documentation and code examples for any library or framework. Covers thousands of libraries including React, Next.js, Prisma, Express, and Tailwind — always current, never hallucinated.","instructions":"Two-skill workflow: resolve_library first → get_docs second. resolve_library: search by library name to get the Context7-compatible library ID and available versions. get_docs: use the library ID + a natural language query or topic to fetch relevant docs and code snippets. Pass a specific version in the library ID (e.g. /vercel/next.js/v14) to get version-specific docs. Use topic param for focused results (e.g. \"hooks\", \"routing\", \"authentication\"). Increase tokens (default 5000) for more comprehensive documentation.","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","description":"Look up current time in any city, convert between time zones, get DST transition info, or browse timezone identifiers by region. Accepts city names — no IANA codes needed. For scheduling, global teams, and travel apps.","instructions":"current_time — get current time in any city or IANA timezone. convert_time — convert between timezones; omit datetime to convert now. timezone_info — DST status and UTC offset details. list_timezones — browse valid IANA identifiers by region. Accepts 80+ city names directly (\"New York\", \"Tokyo\") — no IANA codes needed.","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","description":"Uncover high-opportunity keywords, analyze terms for intent and difficulty, group lists into page clusters, and rank by opportunity score. Every result includes intent classification, recommended page types, and content briefs. Built for content marketers, SEO managers, and product teams.","instructions":"Workflow: find_keywords → cluster_keywords → score_opportunities → analyze_keyword for top picks. find_keywords with a seed topic; add business_goal to bias toward revenue/leads/signups. cluster_keywords turns raw ideas into a content architecture with page slugs. score_opportunities ranks targets as quick wins vs long-term bets. analyze_keyword gives a full content brief with SERP shape and title angles. Pass site_url to any skill to check existing coverage.","version":"0.02","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"]}],"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.","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","description":"Searchable database of 1300+ exercises with muscles worked, equipment needed, and step-by-step instructions. Filter by body part, target muscle, or equipment to build workout routines for any fitness level. For fitness apps, personal training, and rehab planning.","instructions":"Discovery: list_body_parts/list_target_muscles/list_equipment for valid values, then filter with exercises_by_*. search_exercises — find by name (partial match). browse_exercises — paginate full library. get_exercise — full instructions by ID. Use target_muscle for isolation, body_part for compound movements. \"body weight\" = no-equipment. Pagination via limit + offset.","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","description":"Produce a complete video from a creative brief: treatment planning, screenplay, AI storyboard with keyframes, video clip generation, and final assembly with music and transitions. Each step is individually accessible. For brands, agencies, and filmmakers.","instructions":"6-step pipeline in order — pass full output from each step to the next. 1. create_treatment (sync ~10s) 2. create_script (sync ~10s) 3. create_storyboard (async 1-5 min) 4. revise_storyboard (optional, repeatable, async ~30-60s) 5. generate_videos (async 5-30 min) 6. assemble_video (async 2-5 min, auto-generates music unless music_url provided). Pass persona_file_id for consistent characters (auto-resolved from your persona library). Set aspect_ratio 16:9 or 9:16. Poll async steps with get_job_result.","version":"0.04","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":"URLs for visual reference/moodboards"},"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"]}],"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,"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"}],"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":"diagram-generator","displayName":"Diagram Generator","subtitle":"Render Mermaid, PlantUML & more","description":"Render diagrams from text source code in Mermaid, PlantUML, Graphviz DOT, D2, C4-PlantUML, ERD, DBML, and more. Returns SVG or PNG plus a permanent URL for embedding. Great for architecture, flowcharts, and sequence diagrams.","instructions":"Pass source code and type to generate_diagram. Mermaid (default): flowcharts, sequence, class, Gantt. PlantUML: UML standard. Graphviz DOT: graph layouts. D2: architecture diagrams. format \"svg\" (default) for scalable output; \"png\" for raster. The diagram_url is a permanent shareable link.","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"}],"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":"address-geocoding","displayName":"Address Geocoding","subtitle":"Addresses to coordinates and back","description":"Convert between addresses and geographic coordinates. Forward geocode any address to get latitude/longitude, or reverse geocode coordinates to get the nearest street address. Useful for mapping, logistics, and location-aware workflows.","instructions":"Use geocode_address to convert an address (full or partial) into coordinates — pass the most specific address you have for the most accurate result. The response includes an importance score (0–1) to help you pick the best match when multiple results are returned. Use reverse_geocode when you have GPS coordinates and need a street address — useful for interpreting location data from devices or APIs. For bulk geocoding, call geocode_address in sequence for each address in your list.","version":"0.02","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\")"},"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"}}],"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)"},"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"]}],"premadePrompt":"Convert this address to coordinates: [street address, city, country]. Then tell me the exact latitude and longitude I can use for mapping."},{"name":"flight-status","displayName":"Flight Status","subtitle":"Live flight tracking in real time","description":"Look up live flight status by flight number, or check the full departure/arrival board for any airport worldwide. See real-time delays, gate and terminal assignments, and scheduled vs actual times. Essential for tracking connections, pickups, and travel disruptions.","instructions":"Use check_flight when you know the flight number (e.g. BA115, DL1) — it returns current status, delay minutes, gate, terminal, and scheduled vs actual times. Default date is today; pass a date for future or past lookups. Use airport_departures or airport_arrivals with an IATA airport code when you want the full board (e.g. LHR, JFK, SYD). Set hours_ahead to control the time window (1-12 hours). For unknown IATA codes, use the flight-search find_airport skill first.","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","description":"Search millions of live job listings worldwide, filter by location, type, experience, and recency, then pull full descriptions. Get salary ranges for any role and location, or look up what a specific company pays. Built for job seekers, recruiters, and compensation research.","instructions":"Flow: search_jobs → get_job_details → estimate_salary or company_salary. Include location in query (e.g. \"software engineer in Berlin\"). Set country to ISO code for country-specific results. Use date_posted \"week\" or \"3days\" for fresh listings. get_job_details for full requirements. estimate_salary for market range by role+location. company_salary for employer-specific pay data.","version":"0.02","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":"paid","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":"paid","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":"paid","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":"paid","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"]}],"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"}],"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":"link-preview","displayName":"Link Preview","subtitle":"Metadata from any URL, instantly","description":"Pull structured metadata from any URL — title, description, Open Graph image, author, publisher, date, language, and logo. Faster than a full scrape when you only need key page details. Perfect for link cards, bookmark enrichment, social preview validation, or quick URL summaries.","instructions":"Pass a full URL with protocol (e.g. \"https://...\"). Use liberally to understand a URL before deeper processing. image_url returns the OG/Twitter Card image. published_date and author available for articles. For full page content (body text, headings), use site-crawler or web-search instead. Good for validating URLs have useful metadata before including in summaries.","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","description":"Validate email addresses for format, deliverability, and risk. Detects disposable providers, verifies DNS/MX records, flags role-based addresses, and returns a 0-100 confidence score. Bulk mode handles up to 20 addresses at once. Essential for signup flows, CRM hygiene, and list cleaning.","instructions":"Use validate_email for single checks — confidence below 50 means likely undeliverable. The disposable flag catches throwaway providers; role flags info@/support@ addresses. Use bulk_validate for up to 20 at once with disposable_count and invalid_count summaries. Typical workflow: bulk_validate, then filter out disposable: true and confidence < 50. DNS/MX confirms the domain accepts mail but not the specific mailbox.","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","description":"Estimate demographic signals from a first name — age range, gender with confidence score, and top nationalities by probability. Useful for lead enrichment, audience segmentation, and personalized outreach. Works for single names or batches up to 10.","instructions":"enrich_name for one name, bulk_enrich for up to 10 (same cost, faster than looping). Pass first names only. Case-insensitive. Check probability on gender/nationality — low means ambiguous. Nationality returns all predicted country codes. For large datasets, batch with bulk_enrich in groups of 10.","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","description":"Read-only access to Polymarket prediction markets. Browse active markets, fetch real-time prices and order books, check spreads, retrieve price history, and calculate market prices for specific order sizes. Track election odds, macro events, sports, and more.","instructions":"Browse markets with list_markets or list_simplified_markets. Use get_market for full details by condition ID. For prices: get_market_price, get_midpoint_price, or get_last_trade_price. For depth: get_order_book, get_spread, get_tick_size. For trends: get_prices_history (intervals: 1m, 1h, 1d, 1w, 1mo, 1y, all). Use calculate_market_price for order size estimates. Batch variants exist for multi-token queries. Use health_check if connectivity seems off. raw_public_request covers any unlisted 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","description":"Extract text, get AI summaries, and merge PDFs from any public URL. Summarize papers, pull figures from reports, review contracts, or combine documents. Supports page-range filtering for targeting specific sections of large files.","instructions":"Choose the right skill:\n- get_info: metadata only (page count, author, size) without full content\n- extract_text: raw text for searching, quoting, or passing to another tool\n- analyze: AI-written answer — summarize, extract data, review clauses\n- merge: combine 2-20 PDFs into one file\n\nTips:\n- Always pass the full public URL\n- Use pages param for specific sections (e.g. \"1-10\" or \"3,7,12-15\")\n- For analyze, write a specific prompt — \"extract revenue figures into a table\" beats \"summarize\"\n- For large reports, extract_text relevant pages then analyze yourself","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":"URL of the PDF to extract text from. The tool server CAN fetch any public URL — always pass it."},"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":"URL of the PDF to analyze. The tool server CAN fetch any public URL — always pass it."},"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":"URL of the PDF to inspect. The tool server CAN fetch any public URL — always pass it."}},"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":"List of PDF URLs to merge (2-20). The tool server CAN fetch any public URL — always pass them."}},"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","description":"Decode VINs (140+ fields), Dutch plate lookup, UK MOT inspection history, safety recalls (US/Canada), complaints, fuel economy, NCAP ratings, manufacturer brands, vehicle specs, fuel prices, and safety investigations. Data from NHTSA, RDW, DVSA, Transport Canada, and FuelEconomy.gov.","instructions":"decode_vin — 17-char VIN (US, 140+ fields). decode_wmi — first 3 chars for worldwide manufacturer. plate_lookup — Dutch plates (country \"nl\"). inspection_history — UK MOT history by plate (country \"uk\"). check_recalls — US or Canada (\"ca\"). check_complaints — US complaints with optional date filtering. fuel_economy — EPA ratings. safety_ratings — NCAP crash stars. manufacturer_brands — all brands under a parent. vehicle_specs — dimensions and weight. fuel_prices — US national averages. check_investigations — NHTSA safety probes. search_models — list models or all makes.","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","description":"Tides, waves, sea temperature, ocean currents, marine alerts, and real station readings for any coastal location worldwide. Covers beaches, harbors, and open ocean with forecasts, historical statistics, and station reference data.","instructions":"Start with beach_report for a full overview (tides, waves, water temp, wind, alerts in one call). For tides only, use find_stations then tide_forecast (US coasts). For surf anywhere, use wave_forecast with lat/lon. For water temp and currents globally, use ocean_conditions. For real sensor readings at a NOAA station, use station_conditions. For ocean current predictions, use find_stations (type \"currents\") then current_predictions. For historical means, use tidal_statistics. For datums and flood levels, use station_info. marine_alerts covers US marine warnings only.","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","description":"Search product recalls from the FDA and CPSC. Look up food, drug, and consumer product recalls by name or brand, or check if any product has active safety recalls. Covers FDA enforcement actions and CPSC recalls from official US government databases.","instructions":"search_food_recalls: food contamination, allergens, mislabeling. search_drug_recalls: medications and pharmaceuticals. search_product_recalls: consumer goods (toys, electronics, appliances). recent_recalls: latest recalls without a query — set category or use \"all\". check_product_safety: verify if a product/brand has active recalls across all FDA and CPSC databases simultaneously. For clinical trial data, use the clinical-trials tool.","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","description":"See which planets and stars are visible from any location, get moon phases, sunrise/sunset times, upcoming eclipses, and celestial events like equinoxes, solstices, meteor showers, and asteroid approaches. Data from the US Naval Observatory and NASA JPL.","instructions":"Use whats_visible when the user asks \"what can I see tonight\" or wants to know which planets and stars are up — it returns everything above the horizon sorted by altitude. Use moon_phase for \"when is the next full moon\" or current illumination. Use sun_and_moon_times for sunrise, sunset, moonrise, moonset, and twilight times — great for planning photography or outdoor activities. Use eclipse_forecast to find upcoming solar and lunar eclipses by year. Use celestial_events for a combined timeline of equinoxes, solstices, meteor showers, and asteroid close approaches over a date range.","version":"0.02","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)"]}],"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","description":"Look up any color by hex, RGB, or HSL for full format conversions and naming. Generate palettes via color theory or AI. Check WCAG contrast ratios with AA/AAA compliance. Name colors from a database of 31,887 creative names.","instructions":"color_info: any color (hex, rgb, hsl) with all conversions and creative name. generate_palette: color scheme from hex using monochrome, analogic, complement, triad, or quad modes. ai_palette: ML-generated palette, optionally lock colors. check_contrast: WCAG AA/AAA pass/fail for foreground/background. name_colors: creative names for up to 10 hex colors.","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","description":"Look up chemical compounds, periodic table elements, and GHS safety data. Search by name, CAS number, or formula for molecular properties and SMILES. Get hazard pictograms and H/P-codes. Find similar compounds or compare elements side by side.","instructions":"compound_lookup: name, CAS number, or formula for molecular properties. safety_data: GHS pictograms, signal word, H/P-codes. element_info: element by name, symbol, or atomic number. search_compounds: partial name search when exact name unknown. similar_compounds: structurally related compounds by name or SMILES. compare_elements: side-by-side element comparison.","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","description":"Real-time rail data across 15 networks in 30+ countries. Search stations, check live departures with delays, plan journeys, track trains by GPS, and monitor disruptions. Covers Germany, Austria, Switzerland, UK, USA, Belgium, Norway, Denmark, Finland, Italy, pan-European routing, Canada, and Korea.","instructions":"station_search — all 15 networks. live_departures — de, at, ch, gb-london, gb, us-boston, be, no, dk, fi, it, eu, kr-seoul. journey_plan — de, at, ch, gb-london, be, no, dk, eu. track_train — us-amtrak, fi, ca. line_status — gb-london only.\n\nUse \"eu\" (MOTIS) for cross-border European journeys. Use country-specific networks for detailed local delay info. \"gb\" = National Rail, \"gb-london\" = TfL Tube/rail. \"ca\" = VIA Rail GPS tracking. \"kr-seoul\" = Seoul subway (Korean names).","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","description":"Search enforcement actions and regulatory filings from US financial regulators. Covers SEC litigation releases, CFPB consumer finance enforcement, FDIC bank failures, and Federal Register rules and proposed rules by any agency.","instructions":"sec_enforcement: SEC litigation releases and accounting enforcement. cfpb_enforcement: consumer finance actions. fdic_failures: bank failures by year/state. federal_register: rules, proposed rules, and notices from any agency. Combine sec + cfpb for broad monitoring. Pair fdic_failures with federal_register for banking analysis. For case law, use the case-law tool. All skills default to recent results.","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","description":"Financial calendar covering earnings reports, IPO pipeline, global economic events, exchange holidays (NYSE, CME, LSE, TSE), options expiry, central bank meetings (FOMC, ECB, BOE), and data release schedules (NFP, CPI, PPI, GDP, ISM).","instructions":"earnings_calendar — companies reporting on a date with EPS forecasts and timing. ipo_calendar — IPO pipeline by month. economic_events — this week's global events, filter by impact or currency. market_holidays — exchange open/close dates (NYSE, CME, LSE, TSE). options_expiry — monthly/weekly/quarterly expiry dates. fomc_meetings, ecb_meetings, boe_meetings — central bank schedules with projection/report flags. data_releases — NFP, CPI, PPI, GDP, PCE, ISM schedule. All default to current year if no date given.","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","description":"US federal tax reference for income brackets, capital gains rates, retirement contribution limits (401k, IRA, HSA), estate and gift tax thresholds, and MACRS depreciation schedules. Covers 2024-2026 with TCJA sunset notes. Includes marginal tax calculators and year-by-year depreciation schedules.","instructions":"`tax_brackets` — income tax rates by year/filing status; pass income for a marginal breakdown. `capital_gains` — long/short-term rates, NIIT, collectibles, Section 1250. `retirement_limits` — 401(k), IRA, HSA, SEP, SIMPLE limits and phase-outs. `estate_gift_tax` — exemptions, gift exclusions, GSTT, TCJA sunset. `depreciation` — MACRS, straight-line, or Section 179 schedules. Default year: 2025. All data from IRS publications.","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","description":"Precise financial math: DCF valuation, WACC with CAPM, bond pricing with duration/convexity, Black-Scholes options with Greeks, loan amortization, present/future value solvers, and portfolio risk metrics (Sharpe, Sortino, max drawdown).","instructions":"dcf_valuation — pass projected cash flows + discount rate. wacc_calculator — compute discount rate from capital structure (supports CAPM). bond_pricing — pass market_rate to price or market_price to solve for YTM. option_pricing — Black-Scholes with all Greeks. loan_amortization — payment schedules (monthly/biweekly/weekly, extra payments). time_value — solve for any PV/FV/payment/rate/periods variable. portfolio_metrics — pass periodic returns for Sharpe, Sortino, drawdown; add benchmark_returns for alpha/beta.","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","description":"Create, read, and modify Excel (.xlsx) workbooks. Build complete spreadsheets with formulas, formatting, validations, pivot tables, and conditional formatting. Read any .xlsx into structured JSON. Apply 30+ batch operations to existing files. Returns downloadable .xlsx files.","instructions":"create_spreadsheet — build from scratch with data, formulas, formatting, validations, and pivots in one call. read_spreadsheet — inspect an existing file (set include_formulas/comments/formatting for metadata). modify_spreadsheet — apply operations in order to an existing file URL. Number formats: \"$#,##0.00\" for currency, \"0.00%\" for percent. Validation: type \"list\" for dropdowns, \"whole\" with \"between\" for numeric. Conditional: \"colorScale\" for gradients, \"cellIs\" for value rules.","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","description":"Create, read, and modify Word documents (.docx) without Microsoft Word. Full formatting support: headings, lists, tables, images, tracked changes, comments, styles, hyperlinks, footnotes, and multi-section layouts. All skills return downloadable files.","instructions":"Use create_document to build from scratch via the content array (types: paragraph, table, page_break, table_of_contents, tracked_change, image). Use sections array for multi-section layouts. Use read_document to inspect a file before editing — toggle include_comments, include_tracked_changes, etc. Use modify_document with an operations array on an existing file URL. Sizes in points, page dimensions in DXA (1 inch = 1440). Tables: width_type \"pct\" or \"dxa\". Always include author and date on tracked changes.","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":"Image URL to fetch and embed"},"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":"Image URL to fetch and embed"},"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","description":"Create, read, and modify PowerPoint (.pptx) files. Build decks with text, shapes, images, charts, tables, backgrounds, and transitions. Read any .pptx into structured JSON. Apply batch edits like text replacement, slide reordering, and image insertion. Returns downloadable files.","instructions":"create_presentation: build from scratch with slides containing text, shapes, images, charts, tables. read_presentation: inspect existing files (set include_notes/layouts/masters/theme_colors/media for metadata). modify_presentation: apply batch operations to an existing file by URL. Colors: hex without # prefix (\"FF0000\"). Bullets: bullet: true or bullet: {type: \"number\"} — no unicode bullets. Coordinates in inches. Charts: array of {name, labels, values} series objects.","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":"For type \"image\" or \"chart\": image URL to fetch and embed"},"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":"Background image 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","description":"Extract data from bot-protected websites (Cloudflare, Akamai, DataDome, PerimeterX) using residential proxies and geo-targeted IPs. Scrape a single protected page or crawl an entire bot-protected site when standard scraping fails.","instructions":"Use when Web Scraper fails with 403/429/CAPTCHA or against Cloudflare/Akamai/DataDome/PerimeterX. stealth_scrape — single page with enhanced proxy, 3s wait, 60s timeout. stealth_crawl — recursive crawl with enhanced proxy per page (async, ~120s). Set country to match the site region (e.g. \"gb\" for UK). Use languages for locale matching. Increase waitFor for heavy SPAs. stealth_crawl is slower and costlier — keep limits reasonable. If the site loads without bot protection, use Web Scraper instead.","version":"0.01","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\"])"}},"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}}],"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"]}],"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","description":"Real-time fuel prices at stations across Australia, UK, Germany, France, Spain, Italy, Austria + US/EU averages. Petrol, diesel, E10, E85, LPG, premium. Australian fuel availability tracking included.","instructions":"find_stations/cheapest_fuel for nearby stations (lat+lng). Station-level data: Australia (NSW/ACT/TAS/WA), UK, Germany, France, Spain, Italy, Austria. regional_prices for US state/national averages or EU country averages (country=\"eu\" or specific name). price_trends for US weekly history. compare_countries for cross-nation comparison. Fuel type defaults to petrol/gasoline. Accepts: petrol, diesel, premium, lpg, e10, e85. For Australia: NSW FuelCheck covers NSW+ACT+TAS with real-time availability. WA FuelWatch covers WA. PetrolSpy covers all states (VIC/QLD/SA/NT + fallback).","version":"0.04","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-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":"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":"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","description":"Find anyone online from an email, username, name, or phone number. deep_search cross-references identifiers, generates username variations, and scans 500+ sites. Individual skills offer focused lookups by email, username, name, or phone. Works globally.","instructions":"Use deep_search for comprehensive results — pass any combo of name, email, username, phone. It cross-references sources, generates username variations, and scans 500+ sites.\n\nTargeted skills:\n- search_by_email: profiles, validation, breaches\n- search_by_username: 500+ sites (\"quick\" for ~60 top sites)\n- search_by_name: add location/company to narrow results\n- search_by_phone: country detection, formatting, web mentions\n- check_breaches: fast breach check for email/username\n- osint_search: investigative queries across LinkedIn, resumes, news, records, forums, papers","version":"0.05","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":"Analyze a phone number to detect country, format in E.164, and search for web mentions. Supports international numbers with country code detection for 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) and web mentions"},{"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":"Direct URL to the image to reverse search (must be a publicly accessible http/https URL)"}},"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"]}],"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","description":"Property listings, sold prices, valuations, market trends, rental analysis, and area research across the US, UK, Australia, and UAE. Auto-detects the market from any address, postcode, or zip code.","instructions":"Include postcode, zip, state, or country in the location — auto-detection handles the rest. property_history: sale history for an address. search_listings: active properties for sale/rent. property_valuation: estimated value with comps. sold_history: actual sold prices in an area. market_trends: price changes over time. rental_analysis: rent estimates and yields. area_research: crime, schools, transport, demographics. Pass optional context field with client notes or preferences.","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":"Background Removal","subtitle":"Cut out subjects from any photo","description":"Remove the background from any image and get a clean transparent cutout. Ideal for e-commerce product shots, portrait headshots, design compositing, and batch processing catalog images. Handles complex edges like hair, fur, and transparent objects with high accuracy.","instructions":"remove_background for one image, batch_remove for multiple (up to 20). Models: \"light\" (fast, default), \"heavy\" (better edges — hair, fur, glass), \"portrait\" (people). Resolution \"2048x2048\" for high-quality. PNG default; \"webp\" for smaller files. Display result inline: ![Result](image_url). Share image_page link for download.","version":"0.02","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":"URL of the image to remove the background from. The tool server CAN fetch any public URL — always pass it."},"model":{"type":"string","description":"Model variant. \"light\" is fast and good for most images. \"heavy\" is slower but handles complex edges better. \"portrait\" is optimized for people.","enum":["light","heavy","portrait"],"default":"light"},"output_format":{"type":"string","description":"Output image format. PNG supports transparency and is recommended.","enum":["png","webp"],"default":"png"},"resolution":{"type":"string","description":"Processing resolution. Higher values improve edge accuracy but are slower.","enum":["1024x1024","2048x2048"],"default":"1024x1024"}},"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://example.com/product.jpg"}},{"description":"Remove the background from a detailed photo with fine edges","input":{"image_url":"https://example.com/complex-scene.jpg","model":"heavy","resolution":"2048x2048"}}],"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"}}},"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":"Array of image URLs to process (max 20). The tool server CAN fetch any public URL — always pass them."},"model":{"type":"string","description":"Model variant for all images. \"light\" is fast, \"heavy\" handles complex edges better, \"portrait\" is optimized for people.","enum":["light","heavy","portrait"],"default":"light"},"output_format":{"type":"string","description":"Output image format for all images.","enum":["png","webp"],"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://example.com/product1.jpg","https://example.com/product2.jpg"]}},{"description":"Batch remove backgrounds from portrait photos with high quality","input":{"image_urls":["https://example.com/headshot1.jpg","https://example.com/headshot2.jpg","https://example.com/headshot3.jpg"],"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"]}],"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"}],"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":"image-upscale","displayName":"Image Upscale","subtitle":"AI image upscaling up to 10x","description":"Upscale images up to 10x resolution with multiple AI models. Choose the best model for the job — fast general-purpose upscaling, seamless tiling for patterns, professional-grade with face enhancement and text refinement, or cleanup and enhance. Process a single image or batch up to 10 in parallel.","instructions":"seedvr2 (default) — general photos, up to 10x. seedvr2-seamless — tileable textures. topaz — faces, text, CGI, degraded images; max 4x, higher quality. chrono-edit — noisy/compressed cleanup. batch_upscale for 2+ images. Display result inline: ![Upscaled](image_url). Share image_page for download.","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":"URL of the image to upscale. The tool server CAN fetch any public URL — always pass it."},"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":"URL of image to upscale."},"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"}],"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":"video-upscale","displayName":"Video Upscale","subtitle":"AI video upscaling up to 10x","description":"Upscale video resolution to 1080p, 2K, or 4K with multiple AI models. Choose general-purpose, premium face/texture recovery, professional noise reduction, or budget upscaling.","instructions":"bytedance (default) — best value, presets: general/ugc/aigc/old_film. seedvr2 — premium, faces/textures. flashvsr — fast, ProRes/VP9. topaz — pro, 10 AI models, noise/grain control. realesrgan — cheapest, basic. All async (60-300s). list_models first. Share video_page link for download and OG preview.","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":"URL of the video to upscale. The tool server CAN fetch any public URL — always pass it."},"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"}],"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":"ev-chargers","displayName":"EV Chargers","subtitle":"EV charging stations worldwide","description":"Find EV charging stations worldwide — 500K+ locations across 100+ countries. Search by location for availability, connectors, power, pricing, and network. Plan road trips or compare infrastructure across countries. Filter by CCS, CHAdeMO, Tesla/NACS, Type 2, speed, and access type.","instructions":"find_chargers: nearest stations by coordinates. route_chargers: stations along a driving route. charger_details: full info on a station ID. network_stats: compare networks in a country. country_stats: national infrastructure summary. US coordinates use richer government data.","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","description":"Crime data for UK, US, and 35+ European countries. Street-level crime near any UK location, national stats from FBI and Eurostat, cross-border comparisons, and UK stop-and-search records with demographic breakdowns.","instructions":"Use search_crimes when someone asks about crime near a location in England or Wales — pass coordinates (use address-geocoding to convert addresses). Use crime_stats for \"how much crime is there in [country/state]?\" questions — supports US (all 50 states), plus 35 European countries. Use compare_countries when comparing safety between countries (e.g. \"is Germany safer than France?\"). Use stop_and_search for UK-specific police stop and search data with demographic breakdowns. UK street-level data covers England, Wales & Northern Ireland with monthly updates.","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","description":"Look up registered companies across UK, US, and EU. View profiles, directors, ownership, filings, charges, insolvency, corporate structure, financials, and EU VAT validation. Covers 5M+ UK companies, all US public companies, and 2.7M global entities.","instructions":"Start with search_companies to get company numbers/CIK. Use company_profile for full details. Use beneficial_owners for UK PSC or US insider filings. Use corporate_structure for parent/subsidiary mapping via LEI. Use financial_data for structured financials — works for both UK (iXBRL accounts) and US (SEC XBRL). Use charges for UK mortgages, insolvency for UK liquidation status. Use officer_appointments (needs officer_id from profile) and disqualified_officers for director checks. Use validate_vat for EU VAT verification. UK IDs: \"08804411\", US CIK: \"0000320193\".","version":"0.03","categories":["data","finance"],"currency":"USD","skills":[{"name":"search_companies","displayName":"Search Companies","description":"Search for companies by name in the UK and US. Returns matching companies with registration numbers, status, type, and address. Use the company number or CIK from results to look up full details.","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"]},"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"}}],"pricing":"free","returns":"Matching companies with registration numbers, status, type, incorporation date, and address"},{"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"]}],"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","description":"Screen people and companies against sanctions lists, PEP databases, wanted lists, adverse media, offshore leaks, corporate registries, regulatory actions, and court records. Covers KYC, KYB, CDD, and AML investigation workflows.","instructions":"Use screen_entity for a quick risk check — runs sanctions, PEP, wanted, and media in parallel. Use due_diligence for corporate investigations with ownership tracing and regulatory checks. Use investigate for the most comprehensive report with verdict and full audit trail. Individual skills (screen_sanctions, screen_pep, etc.) work for single-source checks.","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":"URL of the document to analyze — PDF, image (JPG/PNG/WebP), or scanned document"},"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","description":"Search ClinicalTrials.gov for active, recruiting, and completed trials by condition, drug, or keyword. Get detailed protocols with eligibility and site locations. Also search the Health Canada Drug Product Database for approved drugs.","instructions":"Start with search_trials by condition, drug, or keyword. Filter by status (RECRUITING, COMPLETED) and phase (PHASE1-PHASE4). Use trial_details with an NCT ID for the full protocol. Use drug_products for Health Canada approved drugs. For adverse events use drug-info; for recalls use product-recalls. Always include the disclaimer.","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","description":"Real-time air quality and allergen data for any location worldwide. Get AQI (US and European), pollutant levels, UV index, and pollen counts. Includes multi-day forecasts and personalized health recommendations for sensitive groups.","instructions":"current_air_quality is the default for any air quality question — returns AQI, pollutants, pollen, UV. air_quality_forecast for planning ahead (up to 7 days). pollen_forecast for allergy sufferers needing type breakdowns. health_recommendations for users with conditions (asthma, COPD, allergies) — combines AQI, UV, pollen into risk scores. monitoring_stations finds nearby sensors (needs OpenAQ key). All accept city names or lat,lon.","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","description":"Legal research across 15+ jurisdictions. Cases: US, UK, India, Germany, Canada, Netherlands. Legislation: UK, US, EU, Germany, Japan, Canada, Poland, Sweden. Regulatory: CFR, Regulations.gov, FDA, EPA, NHTSA. Also: Congressional bills, US Code, 50 state legislatures, dockets, judges, citations.","instructions":"search_cases (country=US/UK/IN/DE/CA/NL) → case_details → citation_analysis. search_legislation (country=UK/US/EU/DE/JP/CA/PL/SE) → legislation_details. search_cfr, search_regulations, search_fda, search_epa, search_vehicle_safety for regulatory data. search_statutes, search_congress, search_state_bills for US statutory. search_dockets, search_judges for court system.","version":"0.04","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"]}],"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","description":"Submit sitemaps and URLs to Google Search Console, IndexNow (Bing, Yandex, Naver, Seznam), and Brave Search. Parse sitemap.xml and submit in one call, request indexing for specific pages, check indexing status, or push URLs to Brave via browser automation.","instructions":"submit_sitemap — register sitemap with Google + IndexNow (auto-detects indexes and Next.js dynamic sitemaps). submit_urls — request immediate indexing for new/updated pages. submit_brave — push URLs to Brave via browser. check_indexing — verify which pages are indexed. Google: save credential \"google_search_console\" (service account JSON or OAuth2 token JSON). IndexNow: generate a key, host at https://domain/{key}.txt, pass as indexnow_key. Covers Bing, Yandex, Naver, Seznam. Brave: no setup needed.","version":"0.01","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). 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},"examples":[{"description":"Check indexing status for pages","input":{"urls":["https://example.com/page1","https://example.com/page2"],"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, ...)"]}],"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."}],"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":"news","displayName":"News","subtitle":"Search and track news worldwide","description":"Track breaking stories, search by keyword, monitor locations, and follow specific publishers. Covers trending headlines, location-based news, and publisher feeds. Supports 50+ regional editions in local languages with source attribution and direct links.","instructions":"search_news for keyword/topic queries (supports exact_phrase, exclude, site, location). trending_news for current headlines. location_news for city/country news. publisher_news for a specific outlet by name or domain. All support region for localized results (e.g. \"jp\" for Japanese). Time filter via when (1h, 1d, 7d, 30d). Chain: trending_news → search_news → publisher_news for depth.","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","description":"Look up structured facts about any person, place, company, or concept — population, founding date, coordinates, headquarters, CEO, awards, and more. Answer factual questions with authoritative data from 100M+ entities. Run advanced queries to list, compare, and rank.","instructions":"search finds entities by keyword. get_entity returns 60+ structured facts by name or Q-ID. sparql_query handles multi-entity questions (lists, rankings, aggregations). Flow: search → get_entity → sparql_query. get_entity accepts plain names — no search needed for common entities. SPARQL: always include label service and LIMIT (max 500). Key properties: P31=instance of, P17=country, P1082=population, P571=inception, P625=coordinates, P856=website. Use get_entity for \"what is X of Y\"; use sparql_query for \"list all X\" or \"top N by Y\".","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","description":"Access US government data: Census demographics at zip-code level, 800K+ FRED time series (rates, GDP, inflation), BLS employment data (unemployment, CPI, wages), and 400K+ Data.gov datasets. Answer questions like \"median income in 90210\" or \"current federal funds rate\" with authoritative data.","instructions":"census_lookup: ACS data by state/county/zip/metro. Key vars: B01001_001E (pop), B19013_001E (income), B25077_001E (home value). geo_code \"*\" for all. fred_search → fred_series: discover then fetch FRED data. Key IDs: GDP, UNRATE, FEDFUNDS, MORTGAGE30US, SP500, CPIAUCSL, DGS10. Case-sensitive. bls_series: unemployment (LNS14000000), CPI (CUUR0000SA0), employment (CES0000000001). dataset_search: 400K+ Data.gov datasets.","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","description":"Track ships and monitor maritime traffic worldwide using live AIS data. Look up vessel positions, speeds, headings, ship specs, navigation aids, and safety broadcasts for any area or vessel.","instructions":"search_vessels — quick positions (~15s) by MMSI or bounding box. vessel_details — specs via static broadcasts. monitor_area — full traffic report. safety_alerts — collision/weather/distress. navigation_aids — buoys/beacons, flags off-position. visualize_area — AI map of vessel positions. Common boxes: English Channel [49.5,-5.5]-[51.5,2.0], Singapore [1.1,103.5]-[1.5,104.2], 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","description":"Track packages across 345+ carriers worldwide including UPS, FedEx, DHL, USPS, Royal Mail, and Australia Post. Register tracking numbers, view delivery event histories with timestamps, check estimated delivery dates, and manage tracked shipments. Auto-detects carriers from the tracking number.","instructions":"Start with track_package — it registers the number and returns current status plus event history. Use tracking_details for deeper provider-level event breakdown of an already-tracked package. Use list_packages to see all tracked shipments with optional status/date filters. Use realtime_track for the absolute latest status direct from the carrier (bypasses cache). Use check_quota to monitor usage limits. Use stop_tracking to remove a package. Carrier codes are optional — auto-detection handles most cases.","version":"0.01","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"]}],"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","description":"Formula 1 data across the full public championship surface: seasons, drivers, teams, circuits, race schedules, session results, and standings. Use it for sports agents, dashboards, editorial research, historical lookups, and current-season tracking.","instructions":"Use seasons for championship history. Use drivers, teams, and circuits for list, search, and profile lookups, with current and season-scoped views where supported. Use races for calendars, next race, last race, or a specific round. Use results for fp1, fp2, fp3, qualifying, race, sprint qualifying, or sprint race sessions. Use standings for drivers or constructors championship tables.","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","description":"Apply curated makeup styles to headshot photos using AI. 8 looks including glass skin, K-drama, glazed donut, 90s supermodel, peach blossom, and more. Preserves face and expression.","instructions":"Use apply_makeup with image URL + style key. Styles: gradient_blush, glass_skin, rosewood_burgundy, peach_blossom, 90s_supermodel, 90s_grunge, k_drama, glazed_donut. Any public or agent-provided image URL works. Always show image_page to the user — permanent shareable link with OG preview.","version":"0.02","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":"URL of the headshot photo. Any public or agent-provided URL works."},"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)"]}],"premadePrompt":"Apply a [makeup style] look to this photo: [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"}],"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":"photo-restore","displayName":"Photo Restore","subtitle":"Restore old, damaged, and faded photographs with AI","description":"Bring old photos back to life. Removes scratches, tears, and stains. Enhances faces and sharpens blurry details. Fixes faded colors and improves contrast. Colorizes black-and-white photos with historically accurate tones. Supports single photos or batch processing up to 10 images at once.","instructions":"Use restore_photo for general restoration of old or damaged photos — it handles scratches, fading, blur, and face enhancement in one pass. Set enhancement_level to \"light\" for minor touch-ups, \"standard\" for typical old photos, or \"heavy\" for severely damaged images. Use colorize_photo specifically when converting black-and-white or sepia photos to color — provide an era_hint for period-accurate results. Both skills accept a single image_url or an array of image_urls for batch processing up to 10 images.","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":"URL of a single photo to restore"},"image_urls":{"type":"array","items":{"type":"string"},"description":"Array of photo URLs to restore in batch (up to 10). Use this OR image_url, not both."},"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://example.com/old-family-photo.jpg"}},{"description":"Heavy restoration on a damaged photo at 2K","input":{"image_url":"https://example.com/damaged-photo.jpg","enhancement_level":"heavy","resolution":"2K"}},{"description":"Batch restore multiple photos","input":{"image_urls":["https://example.com/photo1.jpg","https://example.com/photo2.jpg","https://example.com/photo3.jpg"]}}],"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":"URL of a single B&W photo to colorize"},"image_urls":{"type":"array","items":{"type":"string"},"description":"Array of B&W photo URLs to colorize in batch (up to 10). Use this OR image_url, not both."},"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://example.com/bw-photo.jpg"}},{"description":"Colorize with era context for accurate colors","input":{"image_url":"https://example.com/1950s-family.jpg","era_hint":"1950s","style":"natural"}}],"pricing":"paid","returns":"Colorized photo(s) with full color applied and output details"}],"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"}],"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":"portrait-photo","displayName":"Portrait Photo","subtitle":"AI portrait photos from your selfies","description":"Upload one or more photos of yourself and get back a polished portrait photo. Choose a style — professional headshot, LinkedIn photo, creative editorial, or anything you describe. Multiple reference photos improve likeness accuracy.","instructions":"Call generate_portrait with at least one reference image URL and an optional style. More reference images produce better likeness. If the user wants a specific look, pass it in the style param. Default model is Nano Banana 2 (Gemini 3.1 Flash) — agents can override with the model param for different aesthetics. Display result inline: ![Portrait](image_url).","version":"0.01","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":"One or more URLs of photos of the person. More photos improve likeness."},"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://example.com/my-selfie.jpg"],"style":"professional corporate headshot, clean background, studio lighting"}},{"description":"Creative portrait from multiple reference photos","input":{"reference_images":["https://example.com/photo1.jpg","https://example.com/photo2.jpg"],"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"]}],"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.","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"}],"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":"virtual-tryon","displayName":"Virtual Try-On","subtitle":"See yourself in any outfit","description":"Upload a photo of a person and a photo of clothing to see them wearing it. Works with tops, bottoms, dresses, and full outfits. Multiple AI models for different quality and budget needs.","instructions":"fashn (default) — best quality, auto-detects garment type. quick — cheapest, fast previews. kolors — good balance. leffa — explicit garment type control. catvton — free, research-only. Person photo: full/upper body, clothing area visible. Garment: flat-lay or mannequin works best. Share image_page link for download and OG preview.","version":"0.01","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":"URL of the person photo. The tool server CAN fetch any public URL — always pass it. Should show upper or full body."},"garment_image":{"type":"string","description":"URL of the clothing/garment photo. Flat-lay or on-mannequin photos work best. The tool server CAN fetch any public 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://example.com/person.jpg","garment_image":"https://example.com/shirt.jpg"}},{"description":"Try on a dress with FASHN quality mode","input":{"person_image":"https://example.com/person.jpg","garment_image":"https://example.com/dress.jpg","category":"one-pieces","mode":"quality"}},{"description":"Quick budget try-on","input":{"person_image":"https://example.com/person.jpg","garment_image":"https://example.com/top.jpg","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)"]}],"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].","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"}],"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":"face-swap","displayName":"Face Swap","subtitle":"Swap faces between photos or onto scenes","description":"Swap a face from one photo onto another image or a generated scene. Provide a face source photo and either a target image or a text prompt describing the scene. Great for marketing mockups, content creation, and trying different looks.","instructions":"Call swap_face with face_image (source face URL) and either target_image (swap onto existing photo) or prompt (generate a new scene). When both target_image and prompt are given, the prompt guides how the swap is applied. Default model is Nano Banana 2 Edit — agents can override with the model param. Display result inline: ![Result](image_url).","version":"0.01","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":"URL of the photo containing the face to use as the source."},"target_image":{"type":"string","description":"URL of the image to swap the face onto. The body, pose, and background are preserved."},"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://example.com/my-face.jpg","target_image":"https://example.com/target-body.jpg"}},{"description":"Generate a scene with a specific face","input":{"face_image":"https://example.com/my-face.jpg","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"]}],"premadePrompt":"Swap my face from [photo URL] onto this target image [photo URL]. Keep the original body and background.","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"}],"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":"hairstyle-changer","displayName":"Hairstyle Changer","subtitle":"Try any hairstyle on your photo","description":"Upload a photo and describe any hairstyle to see yourself with it. Works with any hair description — bob cut, pixie, long waves, braids, balayage, buzz cut, or anything else you can imagine. Preserves your face and identity.","instructions":"change_hairstyle — describe any hairstyle in natural language. Be specific for best results. copy_hairstyle — copy hair from a reference photo onto your face (free). Share image_page link for download and OG preview.","version":"0.01","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":"URL of the person photo. The tool server CAN fetch any public URL — always pass it. Clear face and hair visible."},"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://example.com/person.jpg","prompt":"short blonde pixie cut"}},{"description":"Try long wavy hair with highlights","input":{"image_url":"https://example.com/person.jpg","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":"URL of your face photo. The tool server CAN fetch any public URL — always pass it."},"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://example.com/my-face.jpg","shape_reference_url":"https://example.com/celebrity-hair.jpg"}},{"description":"Copy shape from one photo, color from another","input":{"face_image_url":"https://example.com/my-face.jpg","shape_reference_url":"https://example.com/curly-hair.jpg","color_reference_url":"https://example.com/blonde-hair.jpg"}}],"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"]}],"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.","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"}],"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":"defense-spending","displayName":"Defense Spending","subtitle":"Military spending, arms trade, bases & contracts — 200+ countries","description":"Military spending, arms trade, sanctions, bases, and contracts. 12 data sources: World Bank/SIPRI, USAspending, UK Contracts Finder, UN Comtrade, CIA Factbook, EU Sanctions Map, US Treasury, UNHCR, OpenStreetMap. 14 skills covering 200+ countries.","instructions":"military_spending/compare_countries — any country. arms_trade/arms_transfers — trade data. military_profile — forces & equipment. budget_authority/budget_breakdown/defense_outlays — US budget. defense_contracts/top_contractors/spending_by_region — US/UK contracts. sanctions — EU arms embargoes. displacement — conflict refugees. military_bases — installations.","version":"0.03","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."]}],"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","description":"Monitor global geopolitical events using GDELT — the world's largest open event database. Real-time defense news in 100+ languages, media coverage trends, sentiment analysis, and article context.","instructions":"search_events — find articles on any geopolitical topic (e.g. \"Russia Ukraine\", \"China Taiwan military\"). trend_analysis — is coverage of a topic increasing or decreasing over time? sentiment_analysis — what is the media tone around a topic? (-10 negative to +10 positive). get_context — get article snippets and quotes for deeper context. GDELT rate limit: 1 request per 5 seconds.","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","description":"Track satellites in real-time with orbital data and approximate positions. Military, GPS, Starlink, weather, space stations, and 30+ groups. Search by name, track by NORAD ID, browse groups, and see recent launches.","instructions":"list_groups — see all 30+ satellite groups. track_group — get all satellites in a group (military, gps-ops, stations, starlink, weather, geo). search_satellites — find by name (ISS, STARLINK, GPS, COSMOS). satellite_info — detailed info + position for one satellite by NORAD ID. recent_launches — satellites launched in the last 30 days. Start with list_groups or search_satellites to find what you need.","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","description":"All-in-one AI photo studio for e-commerce and marketing. Studio shots, lifestyle scenes, ghost mannequins, flat lays, object removal, shadows, wrinkle removal, recoloring, background blur, image expansion, and freeform AI edits. Turn any phone photo into professional product photography.","instructions":"studio_shot for clean e-commerce photos. lifestyle_shot for scene placement. ghost_mannequin for clothing. flat_lay for overhead shots. remove_object to clean up. beautify to enhance. add_shadows for realism. unwrinkle for clothing. recolor for variants. blur_background for depth-of-field. resize_expand to change aspect ratio. ai_edit for freeform edits. Display: ![Result](url).","version":"0.01","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/raw-product.jpg"}},{"description":"Product on gradient background with warm lighting","input":{"image_url":"https://example.com/raw-product.jpg","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/mug.jpg","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/jacket-on-mannequin.jpg"}}],"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":"URL of the product photo. Must be publicly accessible."},"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://example.com/serum.jpg","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/product-with-people.jpg","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/raw-phone-photo.jpg"}}],"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":"URL of the product photo. Must be publicly accessible."},"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://example.com/product-no-shadow.jpg"}}],"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":"URL of the product photo. Must be publicly accessible."},"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://example.com/wrinkled-shirt.jpg"}}],"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":"URL of the product photo. Must be publicly accessible."},"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://example.com/red-dress.jpg","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/product-busy-bg.jpg"}}],"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":"URL of the product photo. Must be publicly accessible."},"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://example.com/product-portrait.jpg","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":"URL of the product photo. Must be publicly accessible."},"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://example.com/candle.jpg","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"]}],"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].","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"}],"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":"product-spec-sheet","displayName":"Product Spec Sheet","subtitle":"Clean product spec sheets from catalogue images","description":"Generate a product spec sheet. When multiple product images are provided, cleans each (removes backgrounds, text, overlays) and composes into a professional grid. With a single image, generates 6 angle views. One skill: generate_spec_sheet. ~30-60s async.","instructions":"Pass image_url + additional_image_urls. Multiple images → cleans each (removes bg/text/overlays) into a grid. Single image → generates 6 angle views. Response has spec_sheet_page (shareable link) — always show it to the user. Individual views in views[] array.","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":"URL of the product photo. Must be publicly accessible. The tool server CAN fetch any public URL — always pass it."},"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":"Extra product photos (up to 5). Triggers clean mode: each image has bg/text removed and joins the grid."},"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].","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"}],"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":"video-edit","displayName":"AI Video Edit","subtitle":"Transform videos with AI — swap characters, restyle, transfer motion","description":"Transform videos with AI. EDIT: swap characters, change environments. RESTYLE: style transfer (anime, painting). MOTION CONTROL: transfer motion onto a character image (put yourself in a movie). Powered by Kling O1/V3.","instructions":"edit_video for targeted changes (character swap, environment change) — use @Element1 and @Image1 syntax in the prompt. restyle_video for style transfer (anime, painting, time-of-day). motion_control to put a person into a scene — provide their photo as image_url and the scene video as video_url. All async (~60-120s) — poll with get_job_result. If pending, use check_video with the request_id. Display video_page link for download and OG preview.","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":"Source video URL (.mp4/.mov/.webm/.gif). 3-10s, 720-2160px, max 200 MB. Always pass the URL directly."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Style reference images. Referenced in the prompt as @Image1, @Image2, etc. Max 4 combined with elements."},"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":"Front-facing image URL of the character or object (required per element)"},"reference_image_urls":{"type":"array","items":{"type":"string"},"description":"Additional reference images showing different angles (optional)"}},"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":"Source video URL (.mp4/.mov/.webm/.gif). 3-10s, 720-2160px, max 200 MB. Always pass the URL directly."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Style reference images. Referenced in the prompt as @Image1, @Image2, etc. Max 4 combined with elements."},"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":"Front-facing image URL of the character or object (required per element)"},"reference_image_urls":{"type":"array","items":{"type":"string"},"description":"Additional reference images showing different angles (optional)"}},"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":"Character/appearance image URL — the person or character to animate. Always pass the URL directly."},"video_url":{"type":"string","description":"Motion reference video URL — the movements to transfer onto the character (.mp4, .mov)."},"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":"Front-facing image URL for facial identity preservation"}},"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"}],"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":"satellite-imagery","displayName":"Satellite Imagery","subtitle":"Satellite photos of any location on Earth","description":"Get satellite and aerial photos of any location on Earth. Sub-meter resolution in cities, global coverage. Also NASA dated imagery (MODIS) and full-Earth photos from the DSCOVR satellite.","instructions":"image_metadata — check when imagery was captured and by which satellite. Call this alongside capture_location. capture_location — satellite photo at sub-meter resolution (Esri). capture_dated — NASA MODIS for a specific date (250m, disasters/before-after). earth_photo — full-Earth from space (NASA DSCOVR). Show image_page to the user.","version":"0.02","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"]}],"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"}],"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":"youtube-thumbnails","displayName":"YouTube Thumbnails","subtitle":"AI-generated YouTube thumbnails in proven styles","description":"Generate high-performing YouTube thumbnails optimized for clicks. Choose from proven thumbnail styles used by top creators — reaction faces, before/after, versus, tutorials, and more. Outputs at the exact 1280x720 spec YouTube requires with text rendering, bold compositions, and vibrant colors.","instructions":"Use generate_thumbnail with a video topic and optional style. For batch review, set num_images to 4-6 for variety. Add text_overlay for bold text. Provide reference_images for brand consistency or face shots. Display results inline: ![Thumbnail](image_url). Share image_page links for permanent download URLs.","version":"0.01","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":"URLs of reference images — face photos for consistency, brand assets, or style references. First image is primary."},"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"]}],"premadePrompt":"Generate a YouTube thumbnail for a video about [topic]. Use a [reaction/before_after/versus/tutorial] style with the text \"[bold text overlay]\".","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"}],"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":"energy-data","displayName":"Energy Data","subtitle":"Solar estimates and live electricity prices worldwide","description":"Estimate solar energy production and check electricity prices for any location. Live pricing for UK, EU (40+ countries), Australia, and US. Solar estimates work globally.","instructions":"electricity_prices auto-routes by location: UK gets half-hourly consumer + wholesale, EU gets day-ahead by country, Australia gets real-time spot, US gets monthly retail by state. solar_estimate works globally with auto-detected datasets. Combine both: annual_kwh * price = annual savings.","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","description":"Search US federal spending — contracts, grants, and loans across all agencies. Find who received funding, how much, and where. Track spending trends by state, agency, or time period.","instructions":"Use search_awards to find specific contracts or grants by keyword, agency, or recipient. list_agencies shows all federal agencies with budgets — good starting point for exploration. spending_by_geography breaks down spending by state, county, or congressional district. spending_over_time shows trends by month, quarter, or fiscal year. All skills default to the current fiscal year if no dates are specified. Combine award_type filter across skills to focus on contracts, grants, or loans specifically.","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","description":"Search for restaurants, cafes, shops, hotels, and any point of interest worldwide. Covers 200+ countries with ratings, hours, contact info, and reviews. Find places by name, category, or location.","instructions":"Use search_places with a text query and optional location (city name or coordinates). nearby_places finds what is around specific coordinates — great for \"what is near me\" queries. place_details gets full info including reviews, hours, and contact details. Works globally — US, UK, Europe, Asia, and more. Results include rating, price level, and categories.","version":"0.01","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"]}],"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","description":"Shrink video, image, and PDF files while preserving visual quality. Choose from modern codecs and next-gen image formats for the best compression ratios available. Send one file or many — batch compression handles mixed formats in a single call.","instructions":"Use compress for any file size reduction task. Pass one or more file URLs in the files array. The tool auto-detects file type (video/image/PDF) and applies the right compression pipeline. For video: adjust quality (highest–low), pick a codec (h264/h265/vp9/av1), set target_fps, or remove_audio. For images: convert to webp/avif for best compression, or set max_width/max_height to resize. For PDFs: use pdf_quality to balance size vs print fidelity. Defaults work well for most cases — only override when the agent or user has specific requirements.","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":"URLs of files to compress"},"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"}],"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":"supply-chain-risk","displayName":"Supply Chain Risk","subtitle":"Package, dependency & exploit risk","description":"Audit open-source package versions for advisories, exploited CVEs, and dependency exposure across major ecosystems. Score one package, batch-audit a package list, inspect supported dependency graphs, or fetch full advisory records.","instructions":"Use package_risk for one exact package version; it returns advisories, exploitability, provenance, repository health, and a deterministic risk score. Use batch_risk for ranked triage across up to 10 versions. Use dependency_graph for deps.dev-supported ecosystems when you need vulnerable paths and remediation candidates. Use advisory_details when you already know a CVE, GHSA, or OSV ID. Prefer package_url for the widest ecosystem coverage.","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","description":"Search official grant opportunities across the US, UK, Australia, and Japan, plus UK and EU funding history for precedent research, fit scoring, and watchlist workflows.","instructions":"Use search_opportunities for live funding calls across the official public sources. Open one result with opportunity_details when you need the canonical summary, eligibility, documents, and deadline view. Use search_grant_history to find UKRI and EU precedent funding records. Use match_applicant_profile to rank live grants against geography, applicant type, sector, funder preference, and funding-need fit. Use watchlist_snapshot for compact deadline-driven monitoring digests. Source all keeps the public sources active and reports failures in skipped_sources.","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","description":"Search major marketplace domains and shopping indexes for used goods, classifieds, auctions, and online product offers across multiple regions. Useful when you want one search workflow without setting up source-specific marketplace credentials.","instructions":"Start with source_coverage when region support matters. Use search_listings for the main discovery flow across search-indexed marketplace domains and Google Shopping. Use listing_details with a URL returned by search_listings to pull a quick metadata preview. Use watchlist_snapshot for compact monitoring output. This no-key tool relies on search-index visibility rather than direct marketplace APIs.","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","description":"Look up vinyl, CD, cassette, and box-set releases across Discogs and MusicBrainz. Identify specific pressings by catalog number, barcode, or matrix inscription. Check prices by condition, browse active Discogs listings, search global marketplaces for deals, and estimate collection value.","instructions":"Start with search_releases for broad lookup across Discogs and MusicBrainz. Use identify_pressing for catno, barcode, or matrix. Use edition_match to score candidates by partial clues. Use release_details for tracklists and full metadata. Use price_guide for market stats and condition-based pricing. Use marketplace_listings for Discogs listing counts. Use market_search for eBay, Bandcamp, Mercari, Yahoo Auctions Japan, and 15+ platforms. Use artist_discography or label_catalog to browse catalogs. Use collection_value to value a batch of releases.","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","description":"Look up any wine to see ratings, prices, tasting notes, and where to buy. Search by name, grape, region, or style. Compare prices across merchants, explore wine regions, and discover top-rated bottles for any occasion. Works globally with localized pricing.","instructions":"Start with search_wines to get wine IDs for the other skills. Use wine_details for reviews and tasting notes, tasting_profile for flavor structure, similar_wines for alternatives, and price_compare for buying options. Use marketplace_deals for rare or vintage listings and food_pairing when the user wants serving ideas from a wine name or ID. top_rated helps discovery, region_explorer helps browsing, and price-oriented skills should usually set market and currency for non-US users.","version":"0.03","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":"free","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":"free","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":"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":"free","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":"free","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 → 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"],"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"]}],"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","description":"Look up trading card prices, details, and set info across Pokemon TCG, Magic: The Gathering, and Yu-Gi-Oh. Search by card name, browse sets, compare prices across marketplaces, and identify cards from partial info.","instructions":"Use search_cards for any card query — pass game:\"pokemon\", \"mtg\", or \"yugioh\". card_price gives detailed pricing across conditions and marketplaces. set_browse lists cards in a set sorted by value. top_cards finds the most valuable cards. identify_card helps with partial info. Default to game:\"pokemon\" if unspecified.","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","description":"Locate manufacturers and suppliers globally across 100+ directories, trade databases, and government registries. Covers China, India, Asia, Europe, Americas, Middle East, and Africa.","instructions":"For product sourcing: find_manufacturers searches 100+ directories (Alibaba, ThomasNet, IndiaMART, etc.) plus FDA for medical/food products. For market research: manufacturing_hubs shows top exporting countries via UN Comtrade trade data. For due diligence: verify_manufacturer checks OpenCorporates (200M+ companies) and GLEIF LEI database in parallel. For deep enrichment: manufacturer_profile aggregates certs, factory size, MOQ, and contact info. supply_chain_intel reveals real factory-buyer relationships from import records.","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","description":"Transform any room photo with AI-powered interior design. Redesign spaces in dozens of styles, virtually stage empty rooms with furniture and decor, strip a room back to bare walls, or convert hand-drawn sketches into photorealistic renders. Ideal for homeowners, real estate agents, and designers.","instructions":"redesign_room for restyling rooms. stage_room for furnishing empty spaces. empty_room to clear furniture. sketch_to_render for sketch→photo. outdoor_design for exteriors/gardens. paint_walls to change wall color. change_lighting to adjust ambiance. add_furniture / add_people to place items or people. upscale_room to increase resolution of any result. Chain: redesign → upscale for high-res output. Display results inline: ![Result](image_url).","version":"0.02","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":"URL of the room photo to redesign. The tool server can fetch any public URL — always pass it directly."},"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://example.com/living-room.jpg","style":"minimalist","room_type":"living-room"}},{"description":"Style-transfer a bedroom into a mid-century modern look with custom touches","input":{"image_url":"https://example.com/bedroom.jpg","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":"URL of the empty room photo to stage. The tool server can fetch any public URL — always pass it directly."},"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://example.com/empty-living-room.jpg","style":"contemporary","room_type":"living-room"}},{"description":"Stage a bare bedroom in a Scandinavian style with cozy touches","input":{"image_url":"https://example.com/empty-bedroom.jpg","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":"URL of the furnished room photo to clear. The tool server can fetch any public URL — always pass it directly."},"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://example.com/furnished-living-room.jpg","room_type":"living-room"}},{"description":"Empty a home office while keeping built-in cabinetry","input":{"image_url":"https://example.com/home-office.jpg","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":"URL of the sketch or drawing to render. The tool server can fetch any public URL — always pass it directly."},"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://example.com/living-room-sketch.jpg","style":"modern","room_type":"living-room"}},{"description":"Convert an architectural floor-plan sketch into a luxury dining room render","input":{"image_url":"https://example.com/dining-room-sketch.jpg","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":"URL of the outdoor space photo to redesign"},"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://example.com/backyard.jpg","style":"zen","space_type":"outdoor-garden"}},{"description":"Transform a plain patio into a mediterranean outdoor living area","input":{"image_url":"https://example.com/patio.jpg","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":"URL of the room photo to repaint"},"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://example.com/living-room.jpg","color":"sage green","room_type":"living-room"}},{"description":"Paint only the accent wall in a bedroom dark navy","input":{"image_url":"https://example.com/bedroom.jpg","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":"URL of the room photo to relight"},"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://example.com/living-room.jpg","lighting":"warm evening with soft lamp glow","room_type":"living-room"}},{"description":"Simulate bright morning sunlight in a kitchen","input":{"image_url":"https://example.com/kitchen.jpg","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":"URL of the room photo to add furniture to"},"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://example.com/office.jpg","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://example.com/dining-room.jpg","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":"URL of the room photo to add people to"},"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://example.com/living-room.jpg","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://example.com/office.jpg","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":"URL of the room image to upscale"},"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://example.com/redesigned-room.jpg","scale":2}},{"description":"Upscale a staged room image to 4K for a print listing","input":{"image_url":"https://example.com/staged-room.jpg","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"]}],"premadePrompt":"Redesign my [room type] in a [style, e.g. modern minimalist] style. Here is a photo of the current room: [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"}],"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":"jewelry-visualizer","displayName":"Jewelry Visualizer","subtitle":"Photorealistic jewelry renders from text and references","description":"Complete jewelry workflow suite for designers, jewelers, and retailers. Generate, visualize, recolor, engrave, compare variants, clean photos, and identify pieces and hallmarks.","instructions":"generate_jewelry: new designs from text/images. visualize_on_model: show on a person. design_to_schematic: technical blueprint. recolor_design: swap metal/stones on an existing photo. engrave_preview: add personalized inscriptions. compare_variants: same design in multiple material combos. clean_photo: remove dust and marks. identify_piece: analyze era/style/metal/stones. identify_hallmark: decode maker marks. Display images inline: ![Jewelry](image_url). Share image_page for download.","version":"0.03","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":"URLs of reference images (sketches, photos, mood boards). Server CAN fetch any public 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":"URL of person/model photo to show wearing the jewelry. Server CAN fetch any public 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://example.com/inspiration-ring.jpg"]}},{"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://example.com/person.jpg","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":"URL of the jewelry reference image. Server CAN fetch any public URL. Use a clear, well-lit photo."},"prompt":{"type":"string","description":"Where jewelry is worn (hand, neck, wrist), model description (skin tone, outfit), and scene."},"model_image_url":{"type":"string","description":"URL of person/model photo to wear the jewelry. Server CAN fetch any public 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://example.com/ring.jpg","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://example.com/necklace.jpg","prompt":"Show this pendant necklace on her, same outfit, editorial photography lighting","model_image_url":"https://example.com/model-photo.jpg","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":"URL of the jewelry reference image (photo or sketch). Server CAN fetch any public 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://example.com/ring.jpg","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://example.com/pendant.jpg","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":"URL of the jewelry photo to recolor. Server CAN fetch any public 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://example.com/ring.jpg","metal":"rose_gold"}},{"description":"Change diamond center stone to sapphire in white gold","input":{"jewelry_image_url":"https://example.com/engagement-ring.jpg","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":"URL of the jewelry photo. Server CAN fetch any public 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://example.com/wedding-band.jpg","text":"14.06.2026","placement":"inside_band","font_style":"roman"}},{"description":"Add names in script to a pendant back","input":{"jewelry_image_url":"https://example.com/pendant.jpg","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":"Reference photo of the piece to recolor into variants. Server CAN fetch any public 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://example.com/ring.jpg","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":"URL of the jewelry product photo to clean. Server CAN fetch any public 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://example.com/dusty-ring.jpg"}},{"description":"Remove specific marks from a pendant photo","input":{"jewelry_image_url":"https://example.com/pendant.jpg","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":"URL of the jewelry photo to analyze. Clear, well-lit photos give best results."},"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://example.com/mystery-ring.jpg"}},{"description":"Identify piece with specific questions","input":{"image_url":"https://example.com/vintage-brooch.jpg","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":"Close-up photo of the hallmark or stamp. Macro/zoomed-in shots work best."},"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://example.com/hallmark-closeup.jpg","country_hint":"United Kingdom"}},{"description":"Identify unknown marks on a gold ring","input":{"image_url":"https://example.com/gold-ring-marks.jpg"}}],"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"]}],"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.","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"}],"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":"scene-compositor","displayName":"Scene Compositor","subtitle":"AI object-into-scene compositing","description":"Place any object into any scene with natural lighting, shadows, and perspective matching. Give it a product photo and a background image, and it composites them into a single realistic result.","instructions":"Requires 2 hosted image URLs. If user shares inline images or has no URLs, reply: \"Upload your object and scene photos at toolrouter.com/dashboard/files, then paste the URLs here.\" Inline chat images cannot be used directly. NEVER generate images as inputs. Show image_page in results.","version":"0.01","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":"URL of the object photo provided by the user. Must be a real photo — never AI-generated."},"scene_image_url":{"type":"string","description":"URL of the scene/environment photo provided by the user. Must be a real photo — never AI-generated."},"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"}],"workflow":["place_object"],"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"]}],"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].","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"}],"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":"catalogue-scraper","displayName":"Catalogue Scraper","subtitle":"Extract products from any website into your file space","description":"Scrape any e-commerce website to discover and extract all products. Creates a product file for each item in your file space with images, pricing, categories, and variants. Produces a category-grouped catalogue summary. Uses AI-powered extraction — works on any site structure.","instructions":"Always show the products_url link from the response to the user — it takes them to their product catalogue. Lead with the products_url, then summarise what was found (count, categories). Do NOT list every product individually unless the user asks.","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","description":"Interpret blood tests against conventional lab ranges and tighter functional medicine optimal ranges. Covers 60+ biomarkers: CBC, metabolic panel, lipids, thyroid, iron, vitamins, hormones, and glycemic markers. Detects patterns like metabolic syndrome, iron deficiency, and insulin resistance.","instructions":"lookup_biomarker — single marker: name + value, optional unit and gender. Returns conventional + functional classification. analyze_panel — full panel: array of markers, runs per-marker analysis + pattern detection (metabolic syndrome, iron deficiency, hypothyroid, etc.). explain_marker — educational: what the test measures + MedlinePlus summary. No value needed. Workflow: explain_marker to understand → lookup_biomarker or analyze_panel with values. Always pass gender when known — ranges differ by sex. Always note this is not 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","description":"Manage your Shopify store directly from Claude or any AI agent. Read and update orders, products, inventory, customers, collections, discounts, and draft orders — all from a single connected tool. Works with any Shopify plan.","instructions":"Start with get_store_info. Orders: list_orders → get_order → fulfill_order / cancel_order / refund_order. Products: list_products → update_product or create_product. Inventory: get_inventory → adjust_inventory (inventory_item_id comes from get_inventory). Customers: list_customers → get_customer. Discounts: create_discount (percentage, fixed_amount, free_shipping). Manual orders: create_draft_order → complete_draft_order. Analytics: get_analytics for revenue over a date range. All write operations are immediate — confirm intent before calling mutating skills.","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}] — publicly accessible image 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":"New image list: [{src}]. Replaces all existing images."}},"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.","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","description":"Analyze any photograph or image to extract its complete visual style fingerprint — camera, lens, lighting, color grading, texture, white balance, black point, film stock, era, mood, and more. Saves the extracted style as a reusable style prompt for reproducing the look in future image generation.","instructions":"Use extract_style to analyze a reference image and capture its visual style. Returns a comprehensive style breakdown plus a ready-to-use generation prompt. The style is auto-saved to the user's Style Prompts for reuse. Ideal workflow: user provides a reference photo → extract_style → use the saved prompt with generate-image to reproduce the look.","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":"URL of the image to analyze — can be a direct image URL or a webpage containing an image (og:image will be extracted automatically)"},"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"}],"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"}]}]}