Skip to content

MCP server

mureo exposes 173 tools via the Model Context Protocol (MCP): 170 advertising and SEO operation tools across Google Ads, Meta Ads, and Search Console, plus 2 rollback tools and 1 cross-platform anomaly-detection tool. Any MCP-compatible client can connect and call these tools over stdio.

Terminal window
pip install mureo
# Start the MCP server
python -m mureo.mcp

The server communicates over stdin/stdout using the MCP JSON-RPC protocol. It is not meant to be run interactively — it should be launched by an MCP client.

Add to your MCP configuration (~/.config/claude/mcp.json or the app’s settings):

{
"mcpServers": {
"mureo": {
"command": "python",
"args": ["-m", "mureo.mcp"]
}
}
}

Add to .cursor/mcp.json in your project root:

{
"mcpServers": {
"mureo": {
"command": "python",
"args": ["-m", "mureo.mcp"]
}
}
}

If mureo is installed in a virtual environment, use the full path to the Python interpreter:

{
"mcpServers": {
"mureo": {
"command": "/path/to/venv/bin/python",
"args": ["-m", "mureo.mcp"]
}
}
}

Or use uv to run it:

{
"mcpServers": {
"mureo": {
"command": "uv",
"args": ["run", "python", "-m", "mureo.mcp"]
}
}
}
ToolDescriptionRequired Parameters
google_ads.campaigns.listList campaignscustomer_id
google_ads.campaigns.getGet campaign detailscustomer_id, campaign_id
google_ads.campaigns.createCreate a campaign (search or display, via channel_type)customer_id, name
google_ads.campaigns.updateUpdate campaign settingscustomer_id, campaign_id
google_ads.campaigns.update_statusChange status (ENABLED/PAUSED/REMOVED)customer_id, campaign_id, status
google_ads.campaigns.diagnoseDiagnose campaign deliverycustomer_id, campaign_id
ToolDescriptionRequired Parameters
google_ads.ad_groups.listList ad groupscustomer_id
google_ads.ad_groups.createCreate an ad groupcustomer_id, campaign_id, name
google_ads.ad_groups.updateUpdate an ad groupcustomer_id, ad_group_id
ToolDescriptionRequired Parameters
google_ads.ads.listList adscustomer_id
google_ads.ads.createCreate a responsive search ad (RSA)customer_id, ad_group_id, headlines, descriptions
google_ads.ads.create_displayCreate a responsive display ad (RDA); image files are uploaded automaticallycustomer_id, ad_group_id, headlines, long_headline, descriptions, business_name, marketing_image_paths, square_marketing_image_paths, final_url
google_ads.ads.updateUpdate an adcustomer_id, ad_group_id, ad_id
google_ads.ads.update_statusChange ad statuscustomer_id, ad_group_id, ad_id, status
google_ads.ads.policy_detailsGet ad policy approval detailscustomer_id, ad_group_id, ad_id
ToolDescriptionRequired Parameters
google_ads.keywords.listList keywordscustomer_id
google_ads.keywords.addAdd keywordscustomer_id, ad_group_id, keywords
google_ads.keywords.removeRemove a keywordcustomer_id, ad_group_id, criterion_id
google_ads.keywords.suggestGet keyword suggestions (Keyword Planner)customer_id, seed_keywords
google_ads.keywords.diagnoseDiagnose keyword quality scorescustomer_id, campaign_id
google_ads.keywords.pausePause a keywordcustomer_id, ad_group_id, criterion_id
google_ads.keywords.auditAudit keyword performance and qualitycustomer_id, campaign_id
google_ads.keywords.cross_adgroup_duplicatesFind duplicate keywords across ad groupscustomer_id, campaign_id
ToolDescriptionRequired Parameters
google_ads.negative_keywords.listList negative keywordscustomer_id, campaign_id
google_ads.negative_keywords.addAdd negative keywords to a campaigncustomer_id, campaign_id, keywords
google_ads.negative_keywords.removeRemove a negative keywordcustomer_id, campaign_id, criterion_id
google_ads.negative_keywords.add_to_ad_groupAdd negative keywords to an ad groupcustomer_id, ad_group_id, keywords
google_ads.negative_keywords.suggestSuggest negative keywords based on search termscustomer_id, campaign_id
ToolDescriptionRequired Parameters
google_ads.budget.getGet campaign budgetcustomer_id, campaign_id
google_ads.budget.updateUpdate budgetcustomer_id, budget_id, amount
google_ads.budget.createCreate a new campaign budgetcustomer_id, name, amount
ToolDescriptionRequired Parameters
google_ads.accounts.listList accessible Google Ads accounts(none)
ToolDescriptionRequired Parameters
google_ads.search_terms.reportGet search terms reportcustomer_id
google_ads.search_terms.analyzeAnalyze search terms with intent classificationcustomer_id, campaign_id
ToolDescriptionRequired Parameters
google_ads.sitelinks.listList sitelink extensionscustomer_id, campaign_id
google_ads.sitelinks.createCreate a sitelink extensioncustomer_id, campaign_id, sitelink_text, final_url
google_ads.sitelinks.removeRemove a sitelink extensioncustomer_id, campaign_id, extension_id
ToolDescriptionRequired Parameters
google_ads.callouts.listList callout extensionscustomer_id, campaign_id
google_ads.callouts.createCreate a callout extensioncustomer_id, campaign_id, callout_text
google_ads.callouts.removeRemove a callout extensioncustomer_id, campaign_id, extension_id
ToolDescriptionRequired Parameters
google_ads.conversions.listList conversion actionscustomer_id
google_ads.conversions.getGet conversion action detailscustomer_id, conversion_action_id
google_ads.conversions.performanceGet conversion performance metricscustomer_id
google_ads.conversions.createCreate a conversion actioncustomer_id, name, type
google_ads.conversions.updateUpdate a conversion actioncustomer_id, conversion_action_id
google_ads.conversions.removeRemove a conversion actioncustomer_id, conversion_action_id
google_ads.conversions.tagGet conversion tracking tag snippetcustomer_id, conversion_action_id
ToolDescriptionRequired Parameters
google_ads.recommendations.listList optimization recommendationscustomer_id
google_ads.recommendations.applyApply an optimization recommendationcustomer_id, recommendation_id
google_ads.device_targeting.getGet device targeting settingscustomer_id, campaign_id
google_ads.device_targeting.setSet device targeting bid adjustmentscustomer_id, campaign_id, device_type, bid_modifier
google_ads.bid_adjustments.getGet bid adjustment settingscustomer_id, campaign_id
google_ads.bid_adjustments.updateUpdate bid adjustmentscustomer_id, campaign_id
google_ads.location_targeting.listList location targeting criteriacustomer_id, campaign_id
google_ads.location_targeting.updateUpdate location targetingcustomer_id, campaign_id
google_ads.schedule_targeting.listList ad schedule targetingcustomer_id, campaign_id
google_ads.schedule_targeting.updateUpdate ad schedule targetingcustomer_id, campaign_id
google_ads.change_history.listList account change historycustomer_id
ToolDescriptionRequired Parameters
google_ads.performance.reportGet performance reportcustomer_id
google_ads.performance.analyzeAnalyze performance trends and anomaliescustomer_id
google_ads.cost_increase.investigateInvestigate sudden cost increasescustomer_id, campaign_id
google_ads.health_check.allRun a comprehensive account health checkcustomer_id
google_ads.ad_performance.compareCompare ad performance across variantscustomer_id, ad_group_id
google_ads.ad_performance.reportGet detailed ad-level performance reportcustomer_id
google_ads.network_performance.reportGet network-level performance breakdowncustomer_id
google_ads.budget.efficiencyAnalyze budget utilization efficiencycustomer_id
google_ads.budget.reallocationSuggest budget reallocation across campaignscustomer_id
google_ads.auction_insights.getGet auction insights (competitor analysis)customer_id, campaign_id
google_ads.rsa_assets.analyzeAnalyze RSA asset performancecustomer_id, ad_group_id
google_ads.rsa_assets.auditAudit RSA assets for best practicescustomer_id, campaign_id
google_ads.search_terms.reviewReview search terms with rule-based scoringcustomer_id, campaign_id
ToolDescriptionRequired Parameters
google_ads.btob.optimizationsGet B2B-specific optimization suggestionscustomer_id
ToolDescriptionRequired Parameters
google_ads.landing_page.analyzeAnalyze landing page relevance and qualitycustomer_id, campaign_id
google_ads.creative.researchResearch competitive creative strategiescustomer_id
ToolDescriptionRequired Parameters
google_ads.monitoring.delivery_goalMonitor campaign delivery against goalscustomer_id, campaign_id
google_ads.monitoring.cpa_goalMonitor CPA against target goalscustomer_id, campaign_id
google_ads.monitoring.cv_goalMonitor conversion volume against goalscustomer_id, campaign_id
google_ads.monitoring.zero_conversionsDetect campaigns with zero conversionscustomer_id
ToolDescriptionRequired Parameters
google_ads.capture.screenshotCapture a screenshot of a URLurl
ToolDescriptionRequired Parameters
google_ads.device.analyzeAnalyze device-level performancecustomer_id, campaign_id
google_ads.cpc.detect_trendDetect CPC trend (rising/stable/falling)customer_id, campaign_id
ToolDescriptionRequired Parameters
google_ads.assets.upload_imageUpload a local image file as a Google Ads assetcustomer_id, file_path
ToolDescriptionRequired Parameters
meta_ads.campaigns.listList campaignsaccount_id
meta_ads.campaigns.getGet campaign detailsaccount_id, campaign_id
meta_ads.campaigns.createCreate a campaignaccount_id, name, objective
meta_ads.campaigns.updateUpdate a campaignaccount_id, campaign_id
meta_ads.campaigns.pausePause a campaignaccount_id, campaign_id
meta_ads.campaigns.enableEnable a paused campaignaccount_id, campaign_id
ToolDescriptionRequired Parameters
meta_ads.ad_sets.listList ad setsaccount_id
meta_ads.ad_sets.createCreate an ad setaccount_id, campaign_id, name, daily_budget
meta_ads.ad_sets.updateUpdate an ad setaccount_id, ad_set_id
meta_ads.ad_sets.getGet ad set detailsaccount_id, ad_set_id
meta_ads.ad_sets.pausePause an ad setaccount_id, ad_set_id
meta_ads.ad_sets.enableEnable a paused ad setaccount_id, ad_set_id
ToolDescriptionRequired Parameters
meta_ads.ads.listList adsaccount_id
meta_ads.ads.createCreate an adaccount_id, ad_set_id, name, creative_id
meta_ads.ads.updateUpdate an adaccount_id, ad_id
meta_ads.ads.getGet ad detailsaccount_id, ad_id
meta_ads.ads.pausePause an adaccount_id, ad_id
meta_ads.ads.enableEnable a paused adaccount_id, ad_id
ToolDescriptionRequired Parameters
meta_ads.creatives.listList ad creativesaccount_id
meta_ads.creatives.createCreate a standard ad creativeaccount_id, name
meta_ads.creatives.create_carouselCreate a carousel creative (2-10 cards)account_id, page_id, cards, link
meta_ads.creatives.create_collectionCreate a collection creativeaccount_id, page_id, product_ids, link
meta_ads.creatives.create_dynamicCreate a dynamic product ad creativeaccount_id, catalog_id
meta_ads.creatives.upload_imageUpload an image for use in creativesaccount_id, file_path
ToolDescriptionRequired Parameters
meta_ads.images.upload_fileUpload an image from local fileaccount_id, file_path
ToolDescriptionRequired Parameters
meta_ads.insights.reportGet performance reportaccount_id
meta_ads.insights.breakdownGet breakdown report (age, gender, etc.)account_id, campaign_id
ToolDescriptionRequired Parameters
meta_ads.audiences.listList custom audiencesaccount_id
meta_ads.audiences.createCreate a custom audienceaccount_id, name, subtype
meta_ads.audiences.getGet audience detailsaccount_id, audience_id
meta_ads.audiences.deleteDelete a custom audienceaccount_id, audience_id
meta_ads.audiences.create_lookalikeCreate a lookalike audienceaccount_id, source_audience_id, country
ToolDescriptionRequired Parameters
meta_ads.conversions.sendSend conversion events (generic)account_id, pixel_id, events
meta_ads.conversions.send_purchaseSend a purchase eventaccount_id, pixel_id, event_time, user_data, currency, value
meta_ads.conversions.send_leadSend a lead eventaccount_id, pixel_id, event_time, user_data
ToolDescriptionRequired Parameters
meta_ads.pixels.listList pixelsaccount_id
meta_ads.pixels.getGet pixel detailsaccount_id, pixel_id
meta_ads.pixels.statsGet pixel firing statisticsaccount_id, pixel_id
meta_ads.pixels.eventsList pixel eventsaccount_id, pixel_id
ToolDescriptionRequired Parameters
meta_ads.analysis.performanceAnalyze overall performance trendsaccount_id
meta_ads.analysis.audienceAnalyze audience performance and overlapaccount_id
meta_ads.analysis.placementsAnalyze placement performance breakdownaccount_id
meta_ads.analysis.costAnalyze cost trends and efficiencyaccount_id
meta_ads.analysis.compare_adsCompare performance across adsaccount_id
meta_ads.analysis.suggest_creativeSuggest creative improvements based on dataaccount_id
ToolDescriptionRequired Parameters
meta_ads.catalogs.listList product catalogsaccount_id, business_id
meta_ads.catalogs.createCreate a product catalogaccount_id, business_id, name
meta_ads.catalogs.getGet catalog detailsaccount_id, catalog_id
meta_ads.catalogs.deleteDelete a product catalogaccount_id, catalog_id
meta_ads.products.listList products in a catalogaccount_id, catalog_id
meta_ads.products.addAdd a product to a catalogaccount_id, catalog_id, retailer_id, name, availability, condition, price, url, image_url
meta_ads.products.getGet product detailsaccount_id, product_id
meta_ads.products.updateUpdate a productaccount_id, product_id
meta_ads.products.deleteDelete a productaccount_id, product_id
meta_ads.feeds.listList feeds for a catalogaccount_id, catalog_id
meta_ads.feeds.createCreate a feed (URL-based, scheduled import)account_id, catalog_id, name, feed_url
ToolDescriptionRequired Parameters
meta_ads.lead_forms.listList lead forms (per page)account_id, page_id
meta_ads.lead_forms.getGet lead form detailsaccount_id, form_id
meta_ads.lead_forms.createCreate a lead formaccount_id, page_id, name, questions, privacy_policy_url
meta_ads.leads.getGet lead data (per form)account_id, form_id
meta_ads.leads.get_by_adGet lead data (per ad)account_id, ad_id
ToolDescriptionRequired Parameters
meta_ads.videos.uploadUpload a video from URLaccount_id, video_url
meta_ads.videos.upload_fileUpload a video from local fileaccount_id, file_path

(See Creatives section above for carousel and collection tools.)

ToolDescriptionRequired Parameters
meta_ads.split_tests.listList split testsaccount_id
meta_ads.split_tests.getGet split test details and resultsaccount_id, study_id
meta_ads.split_tests.createCreate a split testaccount_id, name, cells, objectives, start_time, end_time
meta_ads.split_tests.endEnd a split testaccount_id, study_id
ToolDescriptionRequired Parameters
meta_ads.ad_rules.listList automated rulesaccount_id
meta_ads.ad_rules.getGet rule detailsaccount_id, rule_id
meta_ads.ad_rules.createCreate an automated rule (alerts, auto-pause, etc.)account_id, name, evaluation_spec, execution_spec
meta_ads.ad_rules.updateUpdate an automated ruleaccount_id, rule_id
meta_ads.ad_rules.deleteDelete an automated ruleaccount_id, rule_id
ToolDescriptionRequired Parameters
meta_ads.page_posts.listList Facebook page postsaccount_id, page_id
meta_ads.page_posts.boostBoost a page post (create ad from post)account_id, page_id, post_id, ad_set_id
ToolDescriptionRequired Parameters
meta_ads.instagram.accountsList connected Instagram accountsaccount_id
meta_ads.instagram.mediaList Instagram postsaccount_id, ig_user_id
meta_ads.instagram.boostBoost an Instagram post (create ad from post)account_id, ig_user_id, media_id, ad_set_id

Search Console tools reuse the same Google OAuth2 credentials as Google Ads — no additional authentication is required.

ToolDescriptionRequired Parameters
search_console.sites.listList verified sites(none)
search_console.sites.getGet site detailssite_url
ToolDescriptionRequired Parameters
search_console.analytics.queryQuery search analytics datasite_url
search_console.analytics.top_queriesGet top search queriessite_url
search_console.analytics.top_pagesGet top pages by clicks/impressionssite_url
search_console.analytics.device_breakdownGet performance breakdown by devicesite_url
search_console.analytics.compare_periodsCompare search performance across time periodssite_url
ToolDescriptionRequired Parameters
search_console.sitemaps.listList sitemaps for a sitesite_url
search_console.sitemaps.submitSubmit a sitemapsite_url, sitemap_url
ToolDescriptionRequired Parameters
search_console.url_inspection.inspectInspect a URL for indexing statussite_url, inspection_url

Cross-platform tools for inspecting and applying the reversal of a previously-recorded action_log entry. rollback.apply re-dispatches through the same MCP handler used for forward actions, so the reversal re-enters the full policy gate (auth, rate-limit, GAQL validation, planner allow-list).

ToolDescriptionRequired Parameters
rollback.plan.getInspect the reversal plan for an action_log entry (supported / partial / not_supported), its operation + params, and any caveats. Read-only.index
rollback.applyExecute the reversal plan for action_log[index]. Requires confirm=true as a literal boolean. Appends a new log entry tagged rollback_of=<index>.index, confirm

Both tools accept an optional state_file argument (default STATE.json), which is resolved strictly inside the MCP server’s current working directory. Path traversal, symlink escape, and rollback.* self-recursion are all refused. A second apply of the same index is refused (idempotency is enforced by scanning later log entries for a matching rollback_of marker). Downstream SDK exceptions are logged server-side only; the MCP response returns a generic message so tokens and account identifiers cannot leak into model context.

Cross-platform anomaly detection that operates on STATE.json’s action_log history rather than a platform API directly.

ToolDescriptionRequired Parameters
analysis.anomalies.checkCompare a campaign’s current metrics against a median-based baseline built from action_log history. Returns severity-ordered anomalies — zero spend (CRITICAL), CPA spike (HIGH/CRITICAL, gated by 30+ conversions), CTR drop (HIGH/CRITICAL, gated by 1000+ impressions).current (current.campaign_id and current.cost required)

had_prior_spend (default true) suppresses the zero-spend alert for fresh campaigns. min_baseline_entries (default 7) controls how many history entries are required before a baseline is built; below this, baseline is null and only zero-spend is evaluated. Numeric fields accept int / float / numeric-string and reject "N/A" or booleans. state_file is sandboxed the same way as for the rollback tools. A parseable-but-corrupt STATE.json produces a baseline_warning in the response without silencing live zero-spend detection.

Beyond individual MCP tools, mureo provides higher-level operational workflows via Claude Code slash commands. These commands orchestrate multiple MCP tools in sequence, guided by the strategy context defined in STRATEGY.md.

CommandPurpose
/onboardInteractive account setup, STRATEGY.md generation, STATE.json init
/daily-checkMode-aware daily health monitoring
/rescueEmergency performance rescue
/search-term-cleanupStrategy-aligned search term hygiene
/creative-refreshPersona/USP-driven ad copy refresh
/budget-rebalanceMode-guided budget reallocation
/competitive-scanAuction analysis with Market Context
/sync-stateManual STATE.json synchronization

Each command reads strategy context (Operation Mode, Persona, USP, Brand Voice, Market Context) from STRATEGY.md and campaign state from STATE.json, then selects and invokes the appropriate MCP tools. For example, /daily-check adapts its monitoring focus based on the current Operation Mode — an EFFICIENCY_STABILIZE mode prioritizes CPA and budget efficiency, while a GROWTH_SCALE mode focuses on impression share and conversion volume.

Command definitions live in .claude/commands/. See strategy-context.md for details on the strategy files, and skills/mureo-workflows/SKILL.md for the full Operation Mode reference.

mureo is designed to work alongside other MCP servers in the same client session. For example, you can configure a GA4 MCP server next to mureo so that workflow commands like /daily-check and /budget-rebalance can incorporate analytics data into their analysis.

mureo’s workflow commands check for external tool availability opportunistically — if a GA4 or other MCP server responds, the agent uses that data; if not, the command proceeds with mureo’s own data. There is no hard dependency on any external MCP server.

For detailed setup instructions, supported platforms, and configuration examples, see integrations.md.

The Google Ads customer ID is a 10-digit number (e.g., "1234567890"). Dashes are automatically stripped.

The Meta Ads account ID must start with act_ (e.g., "act_1234567890").

  • status_filter: Filter by entity status ("ENABLED", "PAUSED", etc.)
  • period: Time range for reports ("LAST_7_DAYS", "LAST_30_DAYS" for Google Ads; "today", "yesterday", "last_7d", "last_30d" for Meta Ads)
  • limit: Maximum number of results to return (Meta Ads, default: 50)

The keywords parameter for google_ads.keywords.add and google_ads.negative_keywords.add is an array of objects:

{
"keywords": [
{"text": "running shoes", "match_type": "BROAD"},
{"text": "best running shoes", "match_type": "PHRASE"},
{"text": "nike running shoes", "match_type": "EXACT"}
]
}

match_type defaults to "BROAD" if omitted.

The google_ads.ads.create tool accepts headlines and descriptions arrays:

{
"customer_id": "1234567890",
"ad_group_id": "111222333",
"headlines": ["Buy Running Shoes", "Free Shipping", "Best Prices"],
"descriptions": ["Shop our collection of running shoes.", "Free returns on all orders."],
"final_url": "https://example.com/shoes"
}

Headlines: 3-15 items. Descriptions: 2-4 items.

To create a display campaign, pass channel_type: "DISPLAY" to google_ads.campaigns.create:

{
"customer_id": "1234567890",
"name": "Brand Display Campaign",
"channel_type": "DISPLAY",
"bidding_strategy": "MAXIMIZE_CONVERSIONS",
"budget_id": "555666777"
}

Then create an RDA via google_ads.ads.create_display. Local image file paths are uploaded automatically before the ad is created:

{
"customer_id": "1234567890",
"ad_group_id": "111222333",
"headlines": ["Run Faster", "Train Smarter"],
"long_headline": "The shoes that changed how athletes train",
"descriptions": ["Cushioning tested by Olympic runners.", "Free 30-day returns."],
"business_name": "Acme Athletics",
"marketing_image_paths": ["/path/to/marketing-1200x628.jpg"],
"square_marketing_image_paths": ["/path/to/square-1200x1200.jpg"],
"logo_image_paths": ["/path/to/logo.png"],
"final_url": "https://example.com/shoes"
}

Constraints (per the Google Ads API):

  • Headlines: 1-5 items, each ≤30 display width
  • Long headline: required, ≤90 display width
  • Descriptions: 1-5 items, each ≤90 display width
  • Business name: required, ≤25 display width
  • Marketing images (1.91:1): 1-15 files, 3+ recommended for delivery quality
  • Square marketing images (1:1): 1-15 files, 3+ recommended
  • Logo images: optional, up to 5
  • The target ad group must belong to a DISPLAY campaign (mureo verifies this before any upload)

If image upload fails partway through or the ad creation fails after all uploads succeed, an RDAUploadError is raised that includes the resource names of any orphaned uploaded assets so they can be cleaned up.

All tools return TextContent with JSON-serialized results. The JSON structure varies by tool but follows a consistent pattern:

[
{
"type": "text",
"text": "{\"campaigns\": [{\"id\": \"123\", \"name\": \"Brand\", ...}]}"
}
]

The text field contains a JSON string that your agent should parse.

If credentials are missing, tools return a descriptive error message (not an exception):

[
{
"type": "text",
"text": "Authentication credentials not found. Set environment variables or ~/.mureo/credentials.json."
}
]

API errors (rate limits, invalid parameters, etc.) are caught by the @api_error_handler decorator and returned as text:

[
{
"type": "text",
"text": "API Error: Meta API request failed (status=400, path=/act_123/campaigns)"
}
]

Missing required parameters raise ValueError, which the MCP protocol surfaces to the client:

ValueError: Required parameter customer_id is not specified
  • Google Ads: Uses gRPC with automatic retry built into the SDK.
  • Meta Ads: mureo monitors the x-business-use-case-usage response header and automatically retries on HTTP 429 with exponential backoff (up to 3 attempts).

AI agents can issue tool calls at high speed, which risks hitting API rate limits and triggering temporary bans. mureo includes a built-in throttling layer (mureo/throttle.py) that transparently rate-limits all outgoing API requests.

PlatformQPSBurstHourly Cap
Google Ads105
Meta Ads201050,000
Search Console55

The throttler uses a token bucket algorithm combined with a rolling hourly cap (Meta Ads only). When the bucket is empty, the request awaits until a token becomes available — no errors are raised and no tool calls are dropped.

Each platform has a module-level singleton throttler that is shared across all MCP tool calls in the same server process. No user configuration is required; throttling is always active.