Skip to content
04

MCP Tracking

Track which tools AI clients call on your MCP server, how often, which clients (Claude, Cursor, Windsurf) drive the most usage, and error rates.

Auto-track all tools
import { BetterMeter } from "@bettermeter/node";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

const bm = new BetterMeter({
  siteId: "my-mcp-server",
  apiKey: "bm_...",
});

const server = new McpServer({
  name: "my-server",
  version: "1.0.0",
});

// Wraps server.tool() — auto-tracks every invocation
bm.wrapMcpServer(server);

// Tools registered after wrapping are automatically tracked
server.tool("search_docs", { query: z.string() }, async (args) => {
  // ... your tool logic (unchanged)
});
Manual tracking
bm.trackTool({
  tool: "search_docs",
  client: "claude-code",
  protocolVersion: "2024-11-05",
  durationMs: 250,
  success: true,
  inputTokens: 150,
  outputTokens: 800,
});

What gets tracked

Tool names, client names, duration, success/failure, and optional token counts. Tool input parameters and output content are never sent.

08

MCP Tools Reference

BetterMeter runs as an MCP server for AI assistants. Every CLI command has a matching MCP tool with the bettermeter_ prefix.

.mcp.json
{
  "mcpServers": {
    "bettermeter": {
      "command": "npx",
      "args": ["bettermeter"]
    }
  }
}

Mutating MCP tools require an exact confirmation phrase (CONFIRM <action> <target>) for the specific action and target before they create, update, delete, scan, or send paid requests.

All analytics tools accept site_id (string) and range (today|7d|30d|90d|12m) — except bettermeter_all_sites, which is account-wide: it declares no site_id, and its range also takes a custom YYYY-MM-DD..YYYY-MM-DD window. limit (number, 1-100, optional) is declared only by the list tools that return ranked rows; the summary, trend, and detail tools do not accept it. The bettermeter_export MCP tool supports json and md formats (the CLI export command also supports csv). Usage examples for AI assistants:

"Who is here and what are they doing right now?"bettermeter_live_visitors with activity=true
"Put live traffic on the wall display"bettermeter_live_display
"How's my traffic?"bettermeter_stats
"Show AI referral breakdown"bettermeter_ai_traffic
"Which CLI commands are most used?"bettermeter_cli_commands
"What AI clients call my MCP server?"bettermeter_mcp_clients
"Top API endpoints this week"bettermeter_api_endpoints with range=7d
"Which page lost the most traffic last month?"bettermeter_pulse_ask
"How healthy is my product?"bettermeter_pulse_health
"Any anomalies I should know about?"bettermeter_pulse_insights
"Give me a weekly briefing"bettermeter_pulse_briefing with period=weekly
"Refresh Meta spend for this site"bettermeter_ad_spend_sync with CONFIRM sync ad spend <site_id>
"Pull my HubSpot conversions now"bettermeter_crm_sync with CONFIRM sync crm <connection_id>

Full Tool List

Human-traffic tools exclude known and high-confidence automated traffic by default. Set include_bots=true when you explicitly need the unfiltered totals.

The tools that accept limit are bettermeter_pages, bettermeter_sources, bettermeter_bots, bettermeter_countries, bettermeter_browsers, bettermeter_visitors, bettermeter_sessions, bettermeter_events, bettermeter_campaigns, bettermeter_conversions, bettermeter_keywords, bettermeter_campaign_visitors, bettermeter_export, bettermeter_cli_commands, bettermeter_mcp_tools, bettermeter_mcp_clients, and bettermeter_api_endpoints. Omitting it returns the endpoint's own default page, which differs per dataset; send it only to ask for a specific number of rows. On bettermeter_sources (with filter) and bettermeter_bots (with category) the limit is applied before the filter, so a filtered result can hold fewer rows than the limit.

Real-Time

bettermeter_live_visitorsbettermeter_live_display

Portfolio

bettermeter_all_sites

Web Analytics

bettermeter_statsbettermeter_pagesbettermeter_sourcesbettermeter_ai_trafficbettermeter_botsbettermeter_timeseriesbettermeter_countriesbettermeter_devicesbettermeter_browsersbettermeter_visitorsbettermeter_sessionsbettermeter_find_visitorbettermeter_visitorbettermeter_update_visitorbettermeter_visitor_propertiesbettermeter_tag_visitorbettermeter_eventsbettermeter_event_detailbettermeter_campaignsbettermeter_campaign_detailbettermeter_campaign_visitorsbettermeter_keywordsbettermeter_marketingbettermeter_landing_page_screenshotbettermeter_channelsbettermeter_export

CLI Analytics

bettermeter_cli_overviewbettermeter_cli_commandsbettermeter_cli_timeseries

MCP Analytics

bettermeter_mcp_overviewbettermeter_mcp_toolsbettermeter_mcp_clientsbettermeter_mcp_timeseries

API Analytics

bettermeter_api_overviewbettermeter_api_endpointsbettermeter_api_timeseries

Paid Media

bettermeter_ad_connectionsbettermeter_ad_spendbettermeter_ad_spend_syncbettermeter_ad_creative

CRM & Conversions

bettermeter_conversionsbettermeter_crm_connectionsbettermeter_crm_sync

Slack alert delivery

bettermeter_slack_webhooksbettermeter_slack_connectbettermeter_slack_testbettermeter_slack_updatebettermeter_slack_remove

Builder

bettermeter_dashboardsbettermeter_create_dashboardbettermeter_update_dashboardbettermeter_delete_dashboardbettermeter_reportsbettermeter_create_reportbettermeter_report_previewbettermeter_update_reportbettermeter_delete_report

Conversion Goals & Evolution

bettermeter_goalsbettermeter_goal_detailbettermeter_create_goalbettermeter_update_goalbettermeter_delete_goalbettermeter_suggest_goals

Site Management

bettermeter_sites_listbettermeter_sites_addbettermeter_sites_removebettermeter_sites_infobettermeter_sites_updatebettermeter_install

Team Management

bettermeter_members_listbettermeter_members_addbettermeter_members_removebettermeter_members_update_rolebettermeter_cancel_invitation

Search Rankings and AI Visibility

bettermeter_brand_reportbettermeter_brand_configbettermeter_brand_comparebettermeter_brand_alertsbettermeter_ai_mentionsbettermeter_ai_mention_historybettermeter_backlinks

Billing

bettermeter_billing

Pulse AI

bettermeter_pulse_askbettermeter_pulse_threadsbettermeter_pulse_threadbettermeter_pulse_thread_deletebettermeter_pulse_insightsbettermeter_pulse_healthbettermeter_pulse_briefingbettermeter_pulse_forecastbettermeter_pulse_comparebettermeter_pulse_alerts_listbettermeter_pulse_alerts_createbettermeter_pulse_alerts_deletebettermeter_pulse_notifications

Meta spend is commercially sensitive and requires EDITOR or ADMIN access in both direct tools and Pulse; VIEWER Pulse catalogs omit only the spend tool. bettermeter_ad_spend_sync calls Meta and updates stored spend, so it also requires the exact phrase CONFIRM sync ad spend <site_id>.