{
  "connector": "https://lodestone.studiocorsair.com/mcp",
  "demo": "https://lodestone.studiocorsair.com/mcp/demo",
  "signup": "https://lodestone.studiocorsair.com/login",
  "plans": [
    {
      "id": "free",
      "priceUsdPerMonth": 0,
      "creditsPerMonth": 100
    }
  ],
  "creditPack": {
    "priceUsd": 20,
    "credits": 1000,
    "oneTime": true,
    "expires": false
  },
  "integrations": [
    {
      "id": "twitter",
      "name": "X / Twitter",
      "category": "Social Media",
      "access": "free",
      "credits": 1,
      "description": "Search posts, look up profiles, read tweets and replies.",
      "tools": [
        {
          "name": "search_twitter",
          "description": "Search X/Twitter for tweets matching a query. Supports operators (from:user, filter:videos, min_faves:N, until:YYYY-MM-DD). Returns tweets with author, likes, retweets and link.",
          "readOnly": true
        },
        {
          "name": "twitter_user",
          "description": "Get an X/Twitter user's profile — name, bio, follower/following/tweet counts, verified status.",
          "readOnly": true
        },
        {
          "name": "twitter_user_tweets",
          "description": "Get a user's most recent tweets.",
          "readOnly": true
        },
        {
          "name": "twitter_replies",
          "description": "Get the replies to a specific tweet.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "instagram",
      "name": "Instagram",
      "category": "Social Media",
      "access": "free",
      "credits": 1,
      "description": "Look up Instagram profiles and their posts.",
      "tools": [
        {
          "name": "search_instagram",
          "description": "Look up an Instagram profile by username — full name, bio, follower and post counts.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "tiktok",
      "name": "TikTok",
      "category": "Social Media",
      "access": "free",
      "credits": 3,
      "description": "Search TikTok videos by keyword or creator.",
      "tools": [
        {
          "name": "search_tiktok",
          "description": "Search TikTok for videos by keyword or handle. Returns author, play count, caption and link.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "facebook",
      "name": "Facebook",
      "category": "Social Media",
      "access": "free",
      "credits": 2,
      "description": "Search public Facebook pages and posts.",
      "tools": [
        {
          "name": "search_facebook",
          "description": "Search Facebook public pages/posts by name or keyword. Returns page/author, text and link.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "youtube_channel",
      "name": "YouTube (your channel)",
      "category": "Social Media",
      "access": "byo",
      "description": "Upload videos to your own channel and reply to comments, after your AI shows you exactly what it will post.",
      "tools": [
        {
          "name": "youtube_upload",
          "description": "Upload a video to the user's OWN connected YouTube channel from a public link to the video file (for example a video a Lodestone generation tool just returned). Private by default. Requires confirm: true after showing the user what will be uploaded.",
          "readOnly": false
        },
        {
          "name": "youtube_comment_reply",
          "description": "Reply to a comment on YouTube as the user's OWN connected channel. Get the comment's id from youtube_comments. Requires confirm: true after showing the user the reply.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "linkedin_post",
      "name": "LinkedIn (your profile)",
      "category": "Social Media",
      "access": "byo",
      "description": "Publish posts on your own LinkedIn profile, after your AI shows you exactly what it will post.",
      "tools": [
        {
          "name": "linkedin_post",
          "description": "Publish a post on the user's OWN connected LinkedIn profile, optionally sharing a link. Public by default. Requires confirm: true after showing the user the exact post.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "youtube",
      "name": "YouTube",
      "category": "Social Media",
      "access": "free",
      "credits": 3,
      "description": "Search videos and channels, read full transcripts and comments, see channel stats, and have AI watch a video to answer questions about it.",
      "tools": [
        {
          "name": "youtube_search",
          "description": "Search YouTube for videos or channels. Returns titles, channel, view counts, upload dates, length and links (or, for channels, subscriber and video counts). Filter by upload date and length; sort by relevance, date, views or rating.",
          "readOnly": true
        },
        {
          "name": "youtube_video",
          "description": "Get one YouTube video's details and its FULL transcript: title, channel, upload date, length, views, likes, comment count, tags, chapters, description, then the spoken words with timestamps. Use it to summarise, quote or fact-check what a video says.",
          "readOnly": true
        },
        {
          "name": "youtube_watch",
          "description": "Have an AI video model WATCH a public YouTube video and answer a question about what is SHOWN and said (products on screen, scenes, text, people, actions), with timestamps. Use youtube_video instead when the transcript is enough. Slow: usually 20-40 seconds, so tell the user it is watching before you call it. One call covers up to 30 minutes; use start/end for a later part.",
          "readOnly": true
        },
        {
          "name": "youtube_comments",
          "description": "Read the comments on a YouTube video, top or newest first: author, text, likes, reply count and date. Marks the creator's own comments.",
          "readOnly": true
        },
        {
          "name": "youtube_channel_stats",
          "description": "A YouTube channel's numbers: subscribers, total views, video count, country, creation date, plus its most recent uploads with views and the average views per video.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "linkedin",
      "name": "LinkedIn",
      "category": "Social Media",
      "access": "free",
      "credits": 2,
      "description": "Find people and companies, read profiles and company pages with their recent posts and staff, and search posts by topic.",
      "tools": [
        {
          "name": "linkedin_search_people",
          "description": "Search LinkedIn for people by keywords: a job title, skill, company or industry, optionally in a place. Returns name, current role and company, location and profile link. Good for finding prospects, hires or experts.",
          "readOnly": true
        },
        {
          "name": "linkedin_search_companies",
          "description": "Search LinkedIn for companies by keywords, optionally in a place. Returns name, industry, size on LinkedIn, followers, headquarters, website and page link.",
          "readOnly": true
        },
        {
          "name": "linkedin_profile",
          "description": "Read one person's public LinkedIn profile: headline, location, followers, about, experience, education, skills and their recent posts with reactions.",
          "readOnly": true
        },
        {
          "name": "linkedin_company",
          "description": "Read a company's LinkedIn page: industry, size, employees on LinkedIn, followers, description, plus its recent posts with engagement and a sample of people who work there.",
          "readOnly": true
        },
        {
          "name": "linkedin_search_posts",
          "description": "Search LinkedIn posts by keywords: author, date, reactions, comments, text and link. Sort by relevance or newest. Good for seeing who talks about a topic and what gets engagement.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "reddit",
      "name": "Reddit",
      "category": "Social Media",
      "access": "free",
      "credits": 7,
      "description": "Search Reddit posts and discussions.",
      "tools": [
        {
          "name": "search_reddit",
          "description": "Search Reddit for posts matching a query. Returns post titles, subreddit, upvotes, comment counts and links.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "typefully",
      "name": "Post to X, LinkedIn, Threads, Bluesky & Mastodon",
      "category": "Social Media",
      "access": "byo",
      "description": "Publish one post — with images — to X, LinkedIn, Threads, Bluesky and Mastodon at once, via your own Typefully key (free tier includes API access). Typefully handles media upload and cross-posting for you.",
      "tools": [
        {
          "name": "typefully_whoami",
          "description": "Check that your connected Typefully API key works and see your Typefully account + social set(s) — the group of networks (X, LinkedIn, Threads, Bluesky, Mastodon) a post fans out to.",
          "readOnly": true
        },
        {
          "name": "typefully_post",
          "description": "Publish a post (with an optional image) to your social networks via Typefully — X and, if connected, LinkedIn, Threads, Bluesky and Mastodon at once. Publishes immediately by default; can also schedule. Handles image upload for you: pass image_url (e.g. a generated fal.media image) and Typefully attaches it.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "ads",
      "name": "Meta Ad Library",
      "category": "Advertising",
      "access": "free",
      "credits": 5,
      "description": "Search any advertiser's live Facebook/Instagram ads — public data, for competitor and creative research.",
      "tools": [
        {
          "name": "search_facebook_ads",
          "description": "Search the PUBLIC Meta (Facebook/Instagram) Ad Library for ads any advertiser is running — great for competitor and creative research. Returns advertiser, ad copy, call-to-action, landing link, platforms, run dates and a permalink. This is public ad data, not your own ad account (use meta_ads_* tools for that).",
          "readOnly": true
        }
      ]
    },
    {
      "id": "meta_ads",
      "name": "Meta Ads",
      "category": "Advertising",
      "access": "byo",
      "description": "Read and manage your own Meta ad campaigns, ad sets, ads and posts.",
      "tools": [
        {
          "name": "meta_ads_whoami",
          "description": "Check that your connected Meta account works and see whose token it is.",
          "readOnly": true
        },
        {
          "name": "meta_ads_list_accounts",
          "description": "List the Meta ad accounts your connected token can access (name, id, currency, status).",
          "readOnly": true
        },
        {
          "name": "meta_ads_account_info",
          "description": "Get details for your Meta ad account — currency, status, lifetime amount spent, spend cap and balance.",
          "readOnly": true
        },
        {
          "name": "meta_ads_list_campaigns",
          "description": "List campaigns in your Meta ad account with status, objective and budget.",
          "readOnly": true
        },
        {
          "name": "meta_ads_get_campaign",
          "description": "Get one Meta campaign by id (status, objective, budget, schedule).",
          "readOnly": true
        },
        {
          "name": "meta_ads_list_ad_sets",
          "description": "List ad sets in your Meta ad account, or just those in one campaign.",
          "readOnly": true
        },
        {
          "name": "meta_ads_get_ad_set",
          "description": "Get one Meta ad set by id (status, optimization goal, budget, targeting).",
          "readOnly": true
        },
        {
          "name": "meta_ads_list_ads",
          "description": "List ads in your Meta ad account, or just those in one ad set.",
          "readOnly": true
        },
        {
          "name": "meta_ads_get_ad",
          "description": "Get one Meta ad by id (name, status, parent ad set/campaign).",
          "readOnly": true
        },
        {
          "name": "meta_ads_insights",
          "description": "Get performance/spend metrics (spend, impressions, clicks, CTR, CPC, CPM, reach) for your whole ad account or one campaign/ad set/ad.",
          "readOnly": true
        },
        {
          "name": "meta_ads_list_page_posts",
          "description": "List recent posts on your connected Facebook Page so you can pick one to promote (returns each post's id for meta_ads_boost_post).",
          "readOnly": true
        },
        {
          "name": "meta_ads_create_campaign",
          "description": "[WRITE — changes your live account] Create a new Meta campaign. Created PAUSED; won't spend until you activate it. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "meta_ads_update_campaign",
          "description": "[WRITE — changes your live account] Update a Meta campaign's name, status and/or daily budget. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "meta_ads_set_status",
          "description": "[WRITE — changes your live account] Pause or resume any Meta campaign, ad set or ad by id. Pausing stops spend. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "meta_ads_create_ad_set",
          "description": "[WRITE — changes your live account] Create a Meta ad set under a campaign (budget, optimization goal, country/age/gender targeting). Created PAUSED. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "meta_ads_update_ad_set",
          "description": "[WRITE — changes your live account] Update a Meta ad set's name, status and/or daily budget. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "meta_ads_create_image_ad",
          "description": "[WRITE — changes your live account] Create an image ad from a public image URL (Meta fetches it — no upload) under an existing ad set. Created PAUSED. Needs a Facebook Page. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "meta_ads_boost_post",
          "description": "[WRITE — changes your live account] Promote an existing Facebook Page post as an ad under an existing ad set (no upload). Created PAUSED. Requires confirm:true.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "google_ads",
      "name": "Google Ads",
      "category": "Advertising",
      "access": "byo",
      "description": "Read and manage your own Google Ads campaigns, ad groups, ads, keywords and budgets, plus Keyword Planner search volumes.",
      "tools": [
        {
          "name": "google_ads_whoami",
          "description": "Check that your connected Google Ads account works and see how many accounts your sign-in can access.",
          "readOnly": true
        },
        {
          "name": "google_ads_list_accounts",
          "description": "List the Google Ads Customer IDs your connected sign-in can access (use one as your Customer ID in Lodestone).",
          "readOnly": true
        },
        {
          "name": "google_ads_account_info",
          "description": "Get details for your Google Ads account — name, currency, timezone, and whether it's a manager or test account.",
          "readOnly": true
        },
        {
          "name": "google_ads_list_campaigns",
          "description": "List campaigns in your Google Ads account with status, channel type and daily budget.",
          "readOnly": true
        },
        {
          "name": "google_ads_get_campaign",
          "description": "Get one Google Ads campaign by id (status, channel type, budget, schedule).",
          "readOnly": true
        },
        {
          "name": "google_ads_list_ad_groups",
          "description": "List ad groups in your Google Ads account, or just those in one campaign.",
          "readOnly": true
        },
        {
          "name": "google_ads_get_ad_group",
          "description": "Get one Google Ads ad group by id (status, type, max CPC, parent campaign).",
          "readOnly": true
        },
        {
          "name": "google_ads_list_ads",
          "description": "List ads in your Google Ads account, or just those in one ad group.",
          "readOnly": true
        },
        {
          "name": "google_ads_get_ad",
          "description": "Get one Google Ads ad by id (name, status, type, parent ad group/campaign).",
          "readOnly": true
        },
        {
          "name": "google_ads_insights",
          "description": "Get performance/spend metrics (impressions, clicks, cost, CTR, avg CPC, conversions) by campaign, ad group or ad over a date range.",
          "readOnly": true
        },
        {
          "name": "google_ads_query",
          "description": "Run a read-only GAQL (Google Ads Query Language) SELECT query for anything the other read tools don't cover. Returns raw rows as JSON.",
          "readOnly": true
        },
        {
          "name": "google_ads_keyword_ideas",
          "description": "Research keywords via Google Keyword Planner — real average monthly searches, competition and top-of-page CPC for seed keywords and/or a page URL.",
          "readOnly": true
        },
        {
          "name": "google_ads_create_campaign",
          "description": "[WRITE — changes your live account] Create a new SEARCH campaign (with its daily budget). Created PAUSED; won't spend until you activate it. Budget is in MICROS. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_update_campaign",
          "description": "[WRITE — changes your live account] Update a Google Ads campaign's name and/or status (pause/resume). Budget changes go through google_ads_update_budget. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_set_status",
          "description": "[WRITE — changes your live account] Pause or resume a campaign or ad group by id. Pausing stops spend. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_update_budget",
          "description": "[WRITE — changes your live account] Change a campaign budget's daily amount (MICROS). Affects every campaign sharing that budget. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_create_ad_group",
          "description": "[WRITE — changes your live account] Create an ad group under a campaign (with a max CPC bid in MICROS). Created PAUSED. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_update_ad_group",
          "description": "[WRITE — changes your live account] Update a Google Ads ad group's name, status and/or max CPC bid (MICROS). Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_add_keywords",
          "description": "[WRITE — changes your live account] Add keywords (or negative keywords) to an ad group in one batch. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "google_ads_create_rsa",
          "description": "[WRITE — changes your live account] Create a responsive search ad in an ad group (>=3 headlines <=30 chars, >=2 descriptions <=90 chars, pipe-separated). Created PAUSED. Requires confirm:true.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "instagram_insights",
      "name": "Instagram Insights",
      "category": "Analytics",
      "access": "byo",
      "description": "Reach, views, profile visits and per-post saves and shares for your own Instagram Business or Creator account.",
      "tools": [
        {
          "name": "instagram_account_insights",
          "description": "Get analytics for your own Instagram Business/Creator account over a window: accounts reached, views, profile visits, engagement, likes, comments, saves, shares, website taps, follower count and net new followers. Max 30 days per call.",
          "readOnly": true
        },
        {
          "name": "instagram_list_media",
          "description": "List your own latest Instagram posts, Reels and Stories with per-post insights: reach, views, likes, comments, saves, shares and permalink.",
          "readOnly": true
        },
        {
          "name": "instagram_media_insights",
          "description": "Get the full insights for one of your own Instagram posts, Reels or Stories by media id (from instagram_list_media).",
          "readOnly": true
        }
      ]
    },
    {
      "id": "ga4",
      "name": "Google Analytics",
      "category": "Analytics",
      "access": "byo",
      "description": "Run GA4 reports on your own site — traffic by source, landing pages, conversions, and who's on it right now.",
      "tools": [
        {
          "name": "ga4_list_properties",
          "description": "List the Google Analytics 4 properties (sites/apps) your connected service account can read, with their property ids.",
          "readOnly": true
        },
        {
          "name": "ga4_run_report",
          "description": "Run a Google Analytics 4 report on your own site: any GA4 dimensions and metrics over a date range, with optional filters — e.g. sessions and conversions from Instagram (sessionSource==instagram) by landing page over the last 28 days.",
          "readOnly": true
        },
        {
          "name": "ga4_realtime_report",
          "description": "See who is on your site right now in Google Analytics 4: active users in the last 30 minutes, broken down by country, page, traffic source or device.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "stripe",
      "name": "Stripe",
      "category": "Payments",
      "access": "byo",
      "description": "Ask about your own Stripe account: MRR, failed payments, churn, customers, invoices and subscriptions. Uses a restricted key you control; changes need your OK.",
      "tools": [
        {
          "name": "stripe_account_info",
          "description": "Check which Stripe account the connected key belongs to (name, id, live or test mode). Run this first to confirm the connection.",
          "readOnly": true
        },
        {
          "name": "stripe_mrr_summary",
          "description": "Monthly recurring revenue from the user's own Stripe account: MRR and ARR per currency, the largest plans, plus how many subscriptions are trialing or past due. Read-only.",
          "readOnly": true
        },
        {
          "name": "stripe_failed_payments",
          "description": "Failed card and payment charges in the user's Stripe account over a recent window: count, total amount, the decline reasons, and the most recent failures with customer email. Read-only.",
          "readOnly": true
        },
        {
          "name": "stripe_churn_summary",
          "description": "Subscription churn in the user's Stripe account over a recent window: cancellations, churn rate, MRR lost and the cancellation reasons customers gave. Read-only.",
          "readOnly": true
        },
        {
          "name": "stripe_api_search",
          "description": "Find the Stripe API operation id for something you want to do, e.g. intent 'list' + resource 'invoices'. Use before stripe_api_read / stripe_api_write when you don't know the id.",
          "readOnly": true
        },
        {
          "name": "stripe_api_details",
          "description": "Get the parameters of one Stripe API operation, so a stripe_api_read or stripe_api_write call is built correctly.",
          "readOnly": true
        },
        {
          "name": "stripe_api_read",
          "description": "Read anything in the user's Stripe account with any Stripe GET operation: customers, charges, invoices, subscriptions, payouts, disputes, balance and more. Read-only.",
          "readOnly": true
        },
        {
          "name": "stripe_api_write",
          "description": "[WRITE — changes the user's live Stripe account] Create, update or delete Stripe objects with any POST/DELETE method (customers, products, prices, invoices, coupons, refunds…). Requires confirm:true. Refunds and other money movement may need the user's approval in Stripe first; the reply then says NOT DONE YET and gives the approval link.",
          "readOnly": false
        },
        {
          "name": "stripe_search_docs",
          "description": "Search Stripe's official documentation and support articles.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "wordpress",
      "name": "WordPress",
      "category": "Websites",
      "access": "byo",
      "description": "Draft, edit, publish and schedule posts and pages on your own WordPress site, upload media, set categories and tags, and moderate comments. Nothing to install.",
      "tools": [
        {
          "name": "wordpress_site_info",
          "description": "Check the connected WordPress site: its name and address, which user the application password belongs to, their role, and what they are allowed to do (publish, upload, moderate).",
          "readOnly": true
        },
        {
          "name": "wordpress_list_posts",
          "description": "List or search posts on the user's WordPress site, including drafts, scheduled and private ones. Returns id, title, status, date and link.",
          "readOnly": true
        },
        {
          "name": "wordpress_list_pages",
          "description": "List or search pages (not posts) on the user's WordPress site, including drafts. Returns id, title, status, date and link.",
          "readOnly": true
        },
        {
          "name": "wordpress_get_post",
          "description": "Read one WordPress post or page in full: title, status, dates, link, categories and tags, and its content as block markup.",
          "readOnly": true
        },
        {
          "name": "wordpress_create_draft",
          "description": "[WRITE] Create a new DRAFT post or page on the user's WordPress site. Always a draft — never public until wordpress_publish is called. Markdown or plain text is converted to WordPress blocks. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "wordpress_update_post",
          "description": "[WRITE — changes your live site] Edit an existing post or page's title, content, excerpt, slug or featured image. Does not change its status (use wordpress_publish). If the post is already published the edit is live immediately. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "wordpress_publish",
          "description": "[WRITE — makes it public] Publish a draft post or page now, or schedule it by passing a future date. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "wordpress_delete_post",
          "description": "[WRITE — removes content] Move a post or page to the trash (restorable for 30 days), or delete it permanently with permanent:true. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "wordpress_upload_media",
          "description": "[WRITE] Upload an image, video, PDF or other file to the WordPress media library from a public URL (for example an image you just generated). Returns the media id and its URL. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "wordpress_list_taxonomies",
          "description": "List the site's categories and/or tags with their ids and post counts.",
          "readOnly": true
        },
        {
          "name": "wordpress_set_terms",
          "description": "[WRITE — changes your live site] Set or add categories and tags on a post, by name or id. Missing names are created unless create_missing is false. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "wordpress_list_comments",
          "description": "List comments on the user's WordPress site — by default the ones awaiting moderation. Filter by status, post or text.",
          "readOnly": true
        },
        {
          "name": "wordpress_moderate_comment",
          "description": "[WRITE — changes your live site] Approve, unapprove, mark as spam, trash or permanently delete a comment. Requires confirm:true.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "beeper",
      "name": "WhatsApp, Telegram, Signal, iMessage, Discord & more",
      "category": "Messaging",
      "access": "byo",
      "description": "Send and read messages across WhatsApp, Telegram, Signal, iMessage and more — hosted for you, no setup on your end beyond a one-time connect.",
      "tools": [
        {
          "name": "beeper_list_chats",
          "description": "List your recent Beeper conversations (across WhatsApp, Telegram, Signal, iMessage and every connected network), newest first, with each chat's ID, title and network.",
          "readOnly": true
        },
        {
          "name": "beeper_read_chats",
          "description": "Read the recent messages in one Beeper conversation (who said what, newest last) so you have the context before replying.",
          "readOnly": true
        },
        {
          "name": "beeper_search",
          "description": "Search across all your Beeper messages for text (e.g. an address someone sent, a confirmation number), optionally limited to certain chats or to messages from other people.",
          "readOnly": true
        },
        {
          "name": "beeper_send_message",
          "description": "[WRITE — sends a real message to a real person] Send a text message to one of your Beeper conversations. You must have read the thread first and confirmed the exact text with the user. Requires confirm:true. Lodestone appends the line \"Sent via Lodestone · lodestone.studiocorsair.com\" to the end of the message automatically unless the account has bought credits; do not add it yourself.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "telegram",
      "name": "Telegram Bot",
      "category": "Messaging",
      "access": "byo",
      "description": "Send and read messages through your own Telegram bot (created free via @BotFather).",
      "tools": [
        {
          "name": "telegram_get_bot_info",
          "description": "Check that your connected Telegram bot token works and see the bot's username (via @BotFather's getMe).",
          "readOnly": true
        },
        {
          "name": "telegram_send_message",
          "description": "Send a text message through your Telegram bot to a chat (a user who has DM'd the bot, or a group/channel the bot is in). Lodestone appends the line \"Sent via Lodestone · lodestone.studiocorsair.com\" to the end of the message automatically unless the account has bought credits; do not add it yourself.",
          "readOnly": false
        },
        {
          "name": "telegram_get_chat",
          "description": "Get info (type, title/name, username, description) for a chat your bot can see, by id or @username.",
          "readOnly": true
        },
        {
          "name": "telegram_read_recent_updates",
          "description": "Read the newest messages your bot has received. IMPORTANT: Telegram's Bot API has no \"fetch chat history\" endpoint. A bot only ever sees messages sent directly to it (DMs), or messages in groups where its privacy mode is off or it's an admin — and only NEW messages received after this tool starts checking, never anything sent before that.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "email",
      "name": "Email",
      "category": "Email",
      "access": "byo",
      "description": "Search, read and send email through your own inbox (Gmail, iCloud, Yahoo, Fastmail, Zoho or custom IMAP/SMTP).",
      "tools": [
        {
          "name": "email_search",
          "description": "Search your connected email account for messages matching a text query (checks From, Subject and body). message_id is an IMAP uid (from email_search or email_list_recent), scoped to the folder it was found in — not the email's Message-ID header.",
          "readOnly": true
        },
        {
          "name": "email_read",
          "description": "Read the full text of one email from your connected account by its uid. message_id is an IMAP uid (from email_search or email_list_recent), scoped to the folder it was found in — not the email's Message-ID header.",
          "readOnly": true
        },
        {
          "name": "email_send",
          "description": "Send a plain-text email from your connected account. Lodestone appends the line \"Sent via Lodestone · lodestone.studiocorsair.com\" to the end of the message automatically unless the account has bought credits; do not add it yourself.",
          "readOnly": false
        },
        {
          "name": "email_list_recent",
          "description": "List the most recent emails in a folder of your connected account (default INBOX). message_id is an IMAP uid (from email_search or email_list_recent), scoped to the folder it was found in — not the email's Message-ID header.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "github",
      "name": "GitHub",
      "category": "Developer",
      "access": "byo",
      "description": "Read code, issues and pull requests in your repositories, and open issues, comment, commit to a branch, open and merge pull requests.",
      "tools": [
        {
          "name": "github_search",
          "description": "Search GitHub for issues, pull requests or code — across all of GitHub or inside one repository. Uses GitHub search syntax (e.g. \"label:bug is:open login\").",
          "readOnly": true
        },
        {
          "name": "github_get_file",
          "description": "Read one file from a GitHub repository (any branch, tag or commit). Passing a directory lists it.",
          "readOnly": true
        },
        {
          "name": "github_list_tree",
          "description": "List the files and folders in a GitHub repository (whole repo or under one path) so you can find what to read.",
          "readOnly": true
        },
        {
          "name": "github_list_issues",
          "description": "List issues in a GitHub repository (most recently updated first), optionally by state or label. Pull requests are left out; use github_list_prs for those.",
          "readOnly": true
        },
        {
          "name": "github_get_issue",
          "description": "Get one GitHub issue with its full description and comments.",
          "readOnly": true
        },
        {
          "name": "github_list_prs",
          "description": "List pull requests in a GitHub repository (most recently updated first).",
          "readOnly": true
        },
        {
          "name": "github_get_pr",
          "description": "Get one GitHub pull request: description, mergeability, diff stats per file, reviews, comments and review comments on the diff.",
          "readOnly": true
        },
        {
          "name": "github_create_issue",
          "description": "[WRITE] Open a new issue in a GitHub repository. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "github_comment",
          "description": "[WRITE — public] Post a comment on a GitHub issue or pull request, and optionally close the issue. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "github_create_branch_commit",
          "description": "[WRITE] Commit changes to one or more files as a single commit on a branch (the branch is created from the default branch if it doesn't exist). Refuses the repository's default branch: commit to a new branch, then open a pull request. Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "github_create_pr",
          "description": "[WRITE] Open a pull request from a branch into the default branch (or another base). Requires confirm:true.",
          "readOnly": false
        },
        {
          "name": "github_merge_pr",
          "description": "[WRITE — changes the target branch] Merge a GitHub pull request (merge, squash or rebase). Only do this when the user has explicitly asked to merge. Requires confirm:true.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "shopee",
      "name": "Shopee",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 3,
      "description": "Search Shopee across Southeast Asia: local prices, discounts, units sold, ratings and the sellers behind them.",
      "tools": [
        {
          "name": "shopee_search",
          "description": "Search Shopee (Southeast Asia's largest marketplace: Vietnam, Indonesia, Thailand, Malaysia, Singapore, Philippines, plus Brazil and Mexico) for products: price in local currency, discount, units sold, rating, review count and seller, plus which sellers dominate the results. SLOW: Shopee blocks automated access, so this takes 15-50 seconds; tell the user it is searching Shopee BEFORE you call it.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "lazada",
      "name": "Lazada",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 2,
      "description": "Search Lazada across Southeast Asia: local prices, discounts, units sold, ratings and the sellers behind them.",
      "tools": [
        {
          "name": "lazada_search",
          "description": "Search Lazada (Vietnam, Indonesia, Thailand, Malaysia, Singapore, Philippines) for products: price in local currency, discount, units sold, rating, review count and seller, plus which sellers dominate the results. Takes about 10-15 seconds.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "amazon",
      "name": "Amazon",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 1,
      "description": "Search Amazon products, prices and ratings.",
      "tools": [
        {
          "name": "search_amazon",
          "description": "Search Amazon for products by keyword. Returns title, price, star rating, review count, Prime / Amazon's Choice / Best Seller badges and product link.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "airbnb",
      "name": "Airbnb",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 2,
      "description": "Search live Airbnb stays by place, price and dates.",
      "tools": [
        {
          "name": "search_airbnb",
          "description": "Search live Airbnb listings by location, monthly price ceiling and bedroom count. Returns matching stays with monthly price and rating.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "hotels",
      "name": "Booking.com",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 2,
      "description": "Find hotel availability and nightly prices on Booking.com.",
      "tools": [
        {
          "name": "search_hotels",
          "description": "Search live hotel availability and prices on Booking.com for a location and date range. Returns hotels with nightly price, star rating and review score.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "flights",
      "name": "Google Flights",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 1,
      "description": "Search flights and fares between airports on Google Flights.",
      "tools": [
        {
          "name": "search_flights",
          "description": "Search live flight prices and itineraries between two airports on a date (one-way or round-trip). Returns options sorted cheapest-first with airline, duration and stops.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "prediction_markets",
      "name": "Polymarket & Kalshi",
      "category": "Analytics",
      "access": "free",
      "credits": 1,
      "description": "Live odds from the Polymarket and Kalshi prediction markets on elections, the Fed, crypto, sports and company events, with each outcome's probability, volume and how the odds moved.",
      "tools": [
        {
          "name": "market_search",
          "description": "Search the prediction markets Polymarket and Kalshi for live markets on any topic (elections, the Fed, crypto prices, sports, company events) and get the current odds of each outcome, volume traded and end date. Odds are the market's implied probability.",
          "readOnly": true
        },
        {
          "name": "market_odds",
          "description": "Current odds for one prediction market or event on Polymarket or Kalshi: every outcome's implied probability, bid/ask spread, 24h move, volume, liquidity, end date and the exact resolution rules.",
          "readOnly": true
        },
        {
          "name": "market_history",
          "description": "How one prediction market's odds moved over the last day, week, month or its whole life: start and end probability, the change, the high and low with their times, and a timeline.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "trends",
      "name": "Google Trends",
      "category": "Analytics",
      "access": "free",
      "credits": 1,
      "description": "See how search interest in any term moves over time and by country, compare terms head to head, find rising related searches, and what is trending now.",
      "tools": [
        {
          "name": "trends_interest",
          "description": "Google Trends search interest for one term over time, in a country or worldwide: peak, average, latest, whether it is rising or falling, and a timeline. Values are Google's 0-100 index (100 = the peak), not search counts.",
          "readOnly": true
        },
        {
          "name": "trends_compare",
          "description": "Compare 2-5 search terms head to head on Google Trends, on one shared 0-100 scale: which leads and by how much, each term's average, peak and direction, and a timeline.",
          "readOnly": true
        },
        {
          "name": "trends_related_queries",
          "description": "What people search for alongside a term on Google: the top related searches and the RISING ones (fastest-growing, 'Breakout' = over 5000%). Good for content and keyword ideas.",
          "readOnly": true
        },
        {
          "name": "trends_rising",
          "description": "What is trending in Google searches in a country right now: each trend's search volume, % increase, when it started, and related searches.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "places",
      "name": "Google Maps",
      "category": "Shopping & Travel",
      "access": "free",
      "credits": 2,
      "description": "Find places, read their full Google reviews and photos, see what customers complain about, and compare a business with its nearby competitors.",
      "tools": [
        {
          "name": "search_places",
          "description": "Search Google Maps for places (restaurants, shops, services, businesses) by keyword and optional location. Returns names, star ratings, review counts, category, address, phone and website.",
          "readOnly": true
        },
        {
          "name": "places_reviews",
          "description": "Read a business's actual Google Maps reviews: full review text, stars, date, author and the owner's reply. Sort newest first (default), lowest rated first (complaints), highest first, or most relevant; optionally only certain star ratings. Use it to see what customers really say, not just the average.",
          "readOnly": true
        },
        {
          "name": "places_photos",
          "description": "Get a Google Maps listing's photos (image links) plus its star-rating distribution (how many 5★, 4★ ... 1★ reviews).",
          "readOnly": true
        },
        {
          "name": "places_review_themes",
          "description": "What customers complain about and what they praise at a business, counted from its Google Maps reviews: reads the lowest- and highest-rated reviews, groups them into themes (service, waiting time, price, cleanliness, food quality, noise...) with how many reviews mention each and real quotes.",
          "readOnly": true
        },
        {
          "name": "places_compare",
          "description": "Compare a business against its nearby competitors on Google Maps: rating, review count and distance for each, where it ranks, and the gap to the competitors' average. Competitors default to the same category in the same area.",
          "readOnly": true
        }
      ]
    },
    {
      "id": "nanobanana",
      "name": "Nano Banana",
      "category": "Generative AI",
      "access": "metered",
      "credits": 15,
      "description": "Generate images with Nano Banana (Gemini 3 Pro Image).",
      "tools": [
        {
          "name": "generate_image_nano_banana",
          "description": "Generate an image with Google's Nano Banana (Gemini 3 Pro Image) — best for photorealism, legible text in the image, and following complex/compositional prompts. Returns the image inline. SLOW: usually ~30-40 seconds. Tell the user it is generating and will take about half a minute BEFORE you call this, so the wait is expected rather than looking like a hang.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "flux",
      "name": "FLUX",
      "category": "Generative AI",
      "access": "metered",
      "credits": 4,
      "description": "Generate photoreal images with FLUX (sharp text).",
      "tools": [
        {
          "name": "generate_image_flux",
          "description": "Generate an image with FLUX1.1 [pro] — fast, sharp, great aesthetic quality for art, product shots and concept art. Returns the image inline.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "seedream",
      "name": "Seedream",
      "category": "Generative AI",
      "access": "metered",
      "credits": 4,
      "description": "Generate high-resolution images with Seedream 4.5.",
      "tools": [
        {
          "name": "generate_image_seedream",
          "description": "Generate an image with ByteDance Seedream 4.5 — high-resolution, strong at people, scenes and cinematic looks. Returns the image inline.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "veo",
      "name": "Veo",
      "category": "Generative AI",
      "access": "metered",
      "credits": 60,
      "creditsPerSecond": 15,
      "description": "Generate video with Google Veo 3.",
      "tools": [
        {
          "name": "generate_video_veo",
          "description": "Generate a 4, 6 or 8 second video with Google Veo 3.1 Fast (includes generated audio). Returns a link to the finished video. Longer clips use more credits: 4s is 60, 6s is 90, 8s is 120. VERY SLOW: usually ~60 seconds, sometimes longer. BEFORE calling, tell the user the video is generating and will take about a minute, so the wait is expected. If the call appears to fail or time out, say so plainly — do NOT silently retry, since the video may well have been generated and a retry bills them again.",
          "readOnly": false
        }
      ]
    },
    {
      "id": "kling",
      "name": "Kling",
      "category": "Generative AI",
      "access": "metered",
      "credits": 35,
      "description": "Generate cinematic video with Kling 2.5.",
      "tools": [
        {
          "name": "generate_video_kling",
          "description": "Generate a short video with Kling 2.5 Turbo Pro — smooth, cinematic motion. Returns a link to the finished video. THE SLOWEST TOOL HERE: usually ~90 seconds, sometimes longer, and some clients give up before it returns. BEFORE calling, tell the user it will take a minute and a half; if they need something faster, generate_video_veo is about 60s. If the call appears to fail or time out, say so plainly — do NOT silently retry, since the video may well have been generated and a retry bills them again.",
          "readOnly": false
        }
      ]
    }
  ]
}