Documentation
MetricPort is a remote MCP server. Your endpoint is the same for every client:
https://metricport.io/api/mcp- Sign up and connect a Google account under Connections.
- Pick your client below. OAuth clients only need the URL; everything else uses an API key from API keys.
- Ask your assistant to call list_properties. It returns the ids every other tool expects.
claude.ai
Settings → Connectors → Add custom connector. Paste the endpoint URL, leave client id and secret empty, then click Connect and approve with your MetricPort login. Works on web, desktop and mobile.
https://metricport.io/api/mcpClaude Desktop
Use the connector flow above (Settings → Connectors) for OAuth. If you prefer a config file, add the server with an API key through mcp-remote:
{
"mcpServers": {
"metricport": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://metricport.io/api/mcp", "--header", "Authorization: Bearer mp_your_api_key"]
}
}
}Claude Code
claude mcp add --transport http metricport https://metricport.io/api/mcp --header "Authorization: Bearer mp_your_api_key"claude mcp add --transport http metricport https://metricport.io/api/mcpCursor, Windsurf and others
Add to .cursor/mcp.json or the equivalent config:
{
"mcpServers": {
"metricport": {
"url": "https://metricport.io/api/mcp",
"headers": { "Authorization": "Bearer mp_your_api_key" }
}
}
}ChatGPT
Settings → Connectors → Create (developer mode). Enter the endpoint URL and choose OAuth. ChatGPT registers itself and sends you through the MetricPort login.
Authentication
- OAuth 2.1: the endpoint publishes /.well-known/oauth-protected-resource. Clients discover the authorization server, register dynamically and send you to the MetricPort login. Tokens are scoped to your workspace.
- API key: send Authorization: Bearer mp_…. Keys never expire until revoked. Use one key per client so you can revoke individually.
curl -X POST https://metricport.io/api/mcp \
-H "Authorization: Bearer mp_your_api_key" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_properties","arguments":{}}}'Tool reference
All tools are read-only. Dates are YYYY-MM-DD. Search Console data lags two to three days, so defaults end three days ago. Responses are cached for five minutes.
Core
| Tool | Arguments | Example prompt |
|---|---|---|
list_propertiesEvery connected Google account with its Search Console sites, Ads accounts and AdSense accounts. | none | Which properties do I have connected? |
Google Search Console
| Tool | Arguments | Example prompt |
|---|---|---|
gsc_search_analyticsClicks, impressions, CTR and position by query, page, country, device, date or search appearance. Filters, search type and period comparison. | property, startDate, endDate, dimensions, filters, rowLimit, type, compare | Compare clicks by country in September vs. August. |
gsc_top_queriesTop queries by clicks, optionally for one page. | property, days, limit, page | Top 20 queries for /pricing in the last 90 days. |
gsc_top_pagesTop pages by clicks, optionally for one query term. | property, days, limit, query | Which pages rank for 'mcp server'? |
gsc_page_queriesEvery query one URL ranks for, with position. | property, url, days, limit | What does /blog/gsc-guide rank for? |
gsc_quick_winsStriking-distance queries (positions 5-20) ranked by potential extra clicks, with the ranking page. | property, days, minPosition, maxPosition, minImpressions, limit | Which keywords are closest to page one? |
gsc_ctr_opportunitiesPage-one queries whose CTR is far below the expected curve: title and snippet problems with missed clicks. | property, days, minImpressions, maxPosition, limit | Where am I losing clicks to bad titles? |
gsc_content_decayPages that lost the most clicks vs. the previous period or last year, plus the winners. | property, days, compareTo, minPreviousClicks, limit | Which articles are decaying and need a refresh? |
gsc_new_and_lost_queriesQueries that appeared or disappeared between two periods. | property, days, minImpressions, limit | What new keywords did we pick up this month? |
gsc_cannibalizationQueries where several of your pages compete, with leader share and competitors. | property, days, minImpressions, limit | Do I have keyword cannibalization? |
gsc_brand_splitBrand vs. non-brand totals, click share, trend and top non-brand queries via regex. | property, brandPattern, days, compare | How is non-brand traffic developing? |
gsc_query_clustersGroups queries into topic clusters with totals and examples. | property, days, minQueries, limit | Which topics drive my organic traffic? |
gsc_question_queriesQuestion-shaped queries (how, what, why, wie, was…) for FAQs and snippets. | property, days, limit | Which questions do people search that lead to my site? |
gsc_zero_click_pagesPages with impressions but no clicks. | property, days, minImpressions, limit | Which pages show up but never get clicked? |
gsc_daily_trendDaily clicks and impressions with 7-day average and flagged drops or spikes. | property, days, thresholdPct, query, page | Did traffic drop after the last core update? |
gsc_device_country_breakdownPerformance per device and country with the mobile vs. desktop CTR gap. | property, days, countries | Which countries underperform on CTR? |
gsc_search_appearanceSearch appearance types plus Discover and Google News traffic. | property, days | How much traffic comes from Discover? |
gsc_inspect_urlIndex status, crawl date, canonical and rich result status for one URL. | property, url | Is /blog/new-post indexed? |
gsc_index_checkBatch inspection of up to 10 URLs with canonical mismatch and blocker flags. | property, urls | Check if these 8 URLs are indexed. |
gsc_sitemapsSubmitted sitemaps with errors, warnings and URL counts. | property | Do any sitemaps have errors? |
gsc_weekly_reportOne-call weekly summary: totals, winners, losers, new queries, quick wins, anomalies. | property, endDate, brandPattern | Give me this week's SEO report. |
Google Ads
| Tool | Arguments | Example prompt |
|---|---|---|
ads_list_accountsCustomer accounts including MCC managers and child accounts. | none | List my Google Ads accounts. |
ads_queryRun any GAQL SELECT. | property, query | SELECT ad_group.name, metrics.clicks FROM ad_group WHERE segments.date DURING LAST_7_DAYS |
ads_campaign_performanceCampaigns with cost, clicks, CTR, conversions, CPA, ROAS and impression share. | property, startDate, endDate, status | How did campaigns perform last month? |
ads_search_termsSearch terms that triggered ads, with match type, cost and conversions. | property, startDate, endDate, limit, campaign | Show the most expensive search terms. |
ads_wasted_spendNon-converting search terms aggregated across campaigns with negative keyword suggestions. | property, startDate, endDate, minCost, minClicks, limit, campaign | Where am I wasting budget? |
ads_keyword_performanceKeywords with quality score, cost, conversions, CPA and impression share. | property, startDate, endDate, limit, campaign | Which keywords have the worst CPA? |
ads_quality_score_auditWeighted quality score, distribution and low-QS keywords with their weakest component. | property, startDate, endDate, maxScore, limit | Audit my quality scores. |
ads_impression_shareImpression share per search campaign with share lost to budget and to rank. | property, startDate, endDate | Where would more budget unlock volume? |
ads_budget_pacingMonth-to-date spend vs. expected with month-end projection per campaign. | property, monthlyBudget | Are we on track with this month's budget? |
ads_ad_performanceResponsive search ads with ad strength, headlines, CTR, cost and conversions. | property, startDate, endDate, limit, campaign | Which ads should I rewrite? |
ads_geo_performanceCost, conversions and CPA by country, region or city. | property, startDate, endDate, level, limit | Which regions convert worst? |
ads_device_performanceCost, CTR, conversion rate and CPA per device. | property, startDate, endDate, campaign | Mobile vs. desktop CPA? |
ads_daypartingPerformance by hour of day and weekday for ad schedules. | property, startDate, endDate, campaign | When do conversions happen? |
ads_landing_pagesLanding pages with cost, conversions, CPA, mobile-friendly rate and speed score. | property, startDate, endDate, limit | Which landing pages burn money? |
ads_recommendationsGoogle's open optimization recommendations with impact estimates. | property | What does Google recommend for this account? |
ads_change_historyWho changed what in the last N days. | property, days, limit | What changed last week that could explain the drop? |
ads_conversion_actionsConversion actions with status, counting, attribution and conversions produced. | property, startDate, endDate | Is conversion tracking set up correctly? |
ads_pmax_asset_groupsPerformance Max asset groups with ad strength, cost and ROAS. | property, startDate, endDate | How are my PMax asset groups doing? |
ads_daily_trendDaily cost, clicks, conversions, CPA with flagged spend or conversion anomalies. | property, days, thresholdPct, campaign | Did spend spike last week? |
ads_metadataSelectable fields of a resource, to build GAQL queries. | property, resource | What fields does keyword_view have? |
ads_account_auditOne-call audit: totals vs. previous period, wasted spend, impression share, quality score, pacing, recommendations, prioritized findings. | property, days | Audit this account. |
Google AdSense
| Tool | Arguments | Example prompt |
|---|---|---|
adsense_earningsEarnings totals and daily breakdown, optional previous period with change. | property, startDate, endDate, compare | AdSense earnings this month vs. last month. |
adsense_reportCustom report by any dimension and metric with filters. | property, dimensions, metrics, startDate, endDate, limit, orderBy, filters | Earnings per domain in the last 30 days. |
adsense_top_pagesPages by earnings with RPM, plus high-traffic pages with weak RPM. | property, startDate, endDate, limit, domain | Which pages earn the most? Which underperform? |
adsense_by_countryEarnings, page views, RPM and CPC per country. | property, startDate, endDate, limit | Which countries have the best RPM? |
adsense_ad_unit_performanceAd units with earnings, RPM, CTR, viewability and coverage. | property, startDate, endDate, limit | Which ad units should I remove? |
adsense_platform_splitDesktop vs. mobile vs. tablet earnings and RPM. | property, startDate, endDate | Is mobile monetizing worse than desktop? |
adsense_daily_trendDaily earnings and page views with flagged anomalies. | property, days, thresholdPct | Did earnings drop suddenly? |
adsense_sitesSites with approval state. | property | Which sites are approved? |
adsense_alertsPolicy and account alerts. | property | Any policy warnings? |
adsense_paymentsUnpaid balance and payment history. | property | When was my last payout? |
adsense_ad_unitsAd units per ad client. | property | List my ad units. |
adsense_monthly_reportOne-call monthly review: month over month, best day, top pages, countries, platforms, alerts, anomalies. | property, endDate | Give me the AdSense monthly review. |
Cross-source
| Tool | Arguments | Example prompt |
|---|---|---|
paid_vs_organicPaid search terms vs. organic queries: cannibalized spend, content gaps and pages to push. | gsc_property, ads_property, days, organicPositionThreshold, limit | Where am I paying for clicks I would get for free? |
content_monetizationOrganic clicks per page joined with AdSense earnings per page: earnings per click, weak monetizers, pages to push. | gsc_property, adsense_property, days, limit | Which organic pages earn the most per click? |
landing_page_overviewAds landing page cost and conversions joined with organic clicks for the same URLs. | gsc_property, ads_property, days, limit | Which paid landing pages already rank organically? |
Prompts
Ready-made workflows exposed as MCP prompts. In Claude Desktop pick them from the prompt menu (the + button), in Claude Code type / and the prompt name.
weekly_seo_report | Client-ready weekly Search Console summary. |
seo_quick_wins | Prioritized to-do list from quick wins, CTR gaps and decay. |
cannibalization_check | Consolidate or differentiate competing pages. |
ads_account_audit | Full read-only Google Ads audit. |
negative_keywords | Negative keyword list from wasted spend. |
adsense_monthly_review | Month-over-month AdSense review with actions. |
paid_organic_overlap | Cut cannibalized spend, find content gaps. |
Limits
- 60 tool calls per minute per workspace.
- Monthly call quota and Google account count depend on your plan. Exceeding a limit returns a tool error with an upgrade link, never a silent failure.
- GAQL queries are SELECT only and capped at 1,000 returned rows.
- Google’s own quotas apply (Search Console: 1,200 queries per minute per site).