Rybbit MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Rybbit MCP Server Show me the overview analytics for my main site"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Rybbit MCP Server
Rybbit now ships anofficial MCP server — a hosted, remote endpoint built into Rybbit itself with OAuth and scoped API-key support. This package offers full feature parity with it, plus extra tools it doesn't have (composite summaries, period comparison, batch event ingestion, ~20 additional read endpoints) and a local stdio transport for clients without remote MCP/OAuth support. See How this compares to the official Rybbit MCP.
An MCP (Model Context Protocol) server for the Rybbit Analytics API. It gives MCP-compatible AI assistants access to your Rybbit Analytics data and management capabilities, allowing you to query traffic, sessions, events, users, goals, funnels, performance, errors, and more using natural language. Ask questions like, "How many people visited last week, and what pages did they view?" and get detailed answers.
Installation
No installation required! Use npx to run directly.
Or install globally:
npm install -g rybbit-mcp-serverRelated MCP server: Google Analytics MCP Server
Configuration
Environment Variables
Variable | Required | Default | Description |
| Yes | — | Your Rybbit API key |
| No |
| Base URL for the Rybbit API (for self-hosted instances) |
| No |
| Seconds to cache GET responses in memory ( |
| No | off | Set to |
Getting an API Key
Navigate to Settings → Account in your Rybbit dashboard
Go to the API Keys section
Create a key with a custom name
Copy it immediately (it won't be shown again)
How this compares to the official Rybbit MCP
Compared against the official MCP v0.3.0 (Rybbit v2.7.0, July 2026).
Capability | Official MCP | This package |
Analytics reads (overview, timeseries, breakdowns, live, retention, journeys, web vitals, errors) | ✅ | ✅ |
Sessions, events, users (raw data reads) | ✅ | ✅ |
Goals & funnels (read, analyze, CRUD) | ✅ | ✅ |
Sites & organizations (CRUD, members) | ✅ | ✅ |
Raw read-only ClickHouse SQL ( | ✅ | ✅ |
User identify / traits / GDPR delete | ✅ | ✅ |
Teams & member site-access management | ✅ | ✅ |
Extra read tools (goal sessions, funnel step sessions, performance timeseries & by-dimension, error events & timeseries, session locations, user session counts, event properties, outbound links) | ❌ | ✅ |
Event ingestion ( | ❌ | ✅ |
Batch event ingestion ( | ❌ | ✅ |
Composite digest ( | ❌ | ✅ |
Period-over-period comparison ( | ❌ | ✅ |
Response caching + rate-limit awareness | ❌ | ✅ |
Read-only mode via env flag | ❌ | ✅ |
Local stdio transport (no remote MCP/OAuth support needed) | ❌ | ✅ |
Hosted remote endpoint (nothing to run locally) | ✅ | ❌ |
OAuth authorization flow | ✅ | ❌ |
Both authenticate with the same Rybbit API keys and hit the same public REST API, so
scoped keys (resource:action permissions) work identically: reads need the matching
:read scope, writes need :write (write implies read), and destructive operations
additionally require org admin/owner role. rybbit_run_query needs sql:read;
server-side event ingestion is marked trusted with ingest:write. The official server can approximate read-only operation with a scoped API key; this package's RYBBIT_READ_ONLY flag works with any key and composes with scoped keys.
Usage
With Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"rybbit": {
"command": "npx",
"args": ["rybbit-mcp-server"],
"env": {
"RYBBIT_API_KEY": "your_api_key_here"
}
}
}
}For self-hosted Rybbit instances, add the RYBBIT_URL environment variable:
{
"mcpServers": {
"rybbit": {
"command": "npx",
"args": ["rybbit-mcp-server"],
"env": {
"RYBBIT_API_KEY": "your_api_key_here",
"RYBBIT_URL": "https://your-rybbit-instance.com"
}
}
}
}With Claude Code
Add to your Claude Code MCP settings (~/.claude/settings.json):
{
"mcpServers": {
"rybbit": {
"command": "npx",
"args": ["rybbit-mcp-server"],
"env": {
"RYBBIT_API_KEY": "your_api_key_here",
"RYBBIT_URL": "https://your-rybbit-instance.com"
}
}
}
}Standalone
npx rybbit-mcp-server
# Or if installed globally:
rybbit-mcp-serverExample Questions
You ask... | Tools used |
"How many people visited last week, and what pages did they view?" |
|
"Show the daily traffic trend this month" |
|
"Where is my traffic coming from?" |
|
"Who are my most active users, and what did they do?" |
|
"Trace one visitor's journey" |
|
"How many people are on the site right now?" |
|
"Is the site healthy?" |
|
"How is my signup funnel converting?" |
|
"What are the most common paths through my site?" |
|
"Are users coming back?" |
|
Available Tools
Overview & Metrics
rybbit_get_overview- Get high-level analytics (sessions, pageviews, users, bounce rate)rybbit_get_overview_timeseries- Get time-series analytics datarybbit_get_metric- Get dimensional breakdown by parameter (browser, country, etc.)rybbit_get_live_visitors- Get count of currently active visitors
Sessions
rybbit_get_sessions- Get paginated list of sessionsrybbit_get_session_details- Get detailed session info with eventsrybbit_get_session_locations- Get session locations for map visualization
Events
rybbit_get_events- Get paginated list of events (supports sinceTimestamp/beforeTimestamp cursors)rybbit_get_event_names- Get unique event names with countsrybbit_get_event_properties- Get properties for a specific eventrybbit_get_outbound_links- Get outbound link clicks
Users
rybbit_get_users- Get paginated list of usersrybbit_get_user_sessions- Get sessions for a specific userrybbit_get_user_session_count- Get daily session count for a userrybbit_get_user_info- Get detailed user profile
SQL (Raw Data)
rybbit_run_query- Run read-only ClickHouse SQL against your events (SELECT-only, max 1,000 rows, 10s cap)rybbit_get_query_schema- Get the events-table column schema for writing queries
Users (management)
rybbit_identify_user- Link an anonymous visitor to a user ID and merge traitsrybbit_update_user_traits- Replace a user's profile traits (wholesale replacement)rybbit_delete_user- Permanently erase a user and all their data (GDPR, irreversible)
Goals
rybbit_get_goals- Get goals with conversion metricsrybbit_get_goal_sessions- Get sessions that completed a goalrybbit_create_goal- Create a new goal (path or event-based)rybbit_update_goal- Update goal configurationrybbit_delete_goal- Delete a goal
Funnels
rybbit_get_funnels- Get saved funnelsrybbit_analyze_funnel- Analyze step-by-step conversionrybbit_get_funnel_step_sessions- Get sessions at a funnel steprybbit_create_funnel- Create a new funnelrybbit_delete_funnel- Delete a funnel
Performance (Core Web Vitals)
rybbit_get_performance_overview- Get LCP, CLS, INP, FCP, TTFB metricsrybbit_get_performance_timeseries- Get performance trends over timerybbit_get_performance_by_dimension- Get performance by pathname, country, etc.
Error Tracking
rybbit_get_error_names- Get unique errors with countsrybbit_get_error_events- Get error occurrences with stack tracesrybbit_get_error_timeseries- Get error trends over time
Retention & Journeys
rybbit_get_retention- Get cohort-based retention analysisrybbit_get_journeys- Get common user navigation paths
Organizations & Sites
rybbit_get_organizations- Get your organizationsrybbit_get_organization_members- Get organization membersrybbit_add_organization_member- Add a member to an organizationrybbit_create_site- Create a new siterybbit_get_site- Get site detailsrybbit_update_site- Update site configurationrybbit_delete_site- Delete a siterybbit_get_excluded_ips- Get IPs excluded from trackingrybbit_get_excluded_countries- Get country codes excluded from trackingrybbit_get_private_link_config- Get private-link sharing config (org admin only)
Teams
rybbit_get_teams- List teams with members and site assignmentsrybbit_create_team- Create a team with optional members and sitesrybbit_update_team- Update a team (member/site lists replaced wholesale)rybbit_delete_team- Delete a teamrybbit_update_member_site_access- Restrict a member to specific sites
Event Tracking
rybbit_track_event- Send tracking events (pageview, custom, performance, error, outbound)
Composite & Batch
rybbit_get_site_summary- One-call digest: overview + top pages/referrers/countries/devices/events + live count (~7 API requests)rybbit_compare_periods- Compare overview metrics vs the equal-length preceding period with deltasrybbit_track_events- Send 1-50 tracking events in one call with per-event results
Common Parameters
Time Parameters
Most analytics tools accept time parameters:
startDate/endDate- Date range in YYYY-MM-DD formattimeZone- IANA timezone (e.g., "America/New_York")pastMinutesStart/pastMinutesEnd- Relative time range in minutes
Filters
Filter data using JSON array format:
[
{
"parameter": "country",
"type": "equals",
"value": ["US"]
}
]Filter types: equals, not_equals, contains, not_contains, regex, not_regex, greater_than, less_than
Available parameters: browser, operating_system, device_type, country, region, city, pathname, page_title, hostname, querystring, referrer, utm_source, utm_medium, utm_campaign, user_id, event_name
Rate Limits
The Rybbit API has a rate limit of 500 requests per 10 minutes per API key.
License
MIT
Available Tools
57 toolsrybbit_add_organization_memberC
Add a member to an organization
Inputs: role (required), email (required), organizationId (required).
rybbit_analyze_funnelC
Analyze a funnel and get step-by-step conversion data
Inputs: steps (required), siteId (required), endDate, filters, +4 more.
rybbit_compare_periodsA
Compare site overview metrics between a date range and the equal-length preceding period. Returns current values, previous values, and per-metric absolute and percent changes (percentChange is null when the previous value was 0).
Inputs: siteId (required), endDate (required), startDate (required), filters, +1 more.
rybbit_create_funnelB
Create or update a saved funnel
Inputs: name (required), steps (required), siteId (required), reportId.
rybbit_create_goalA
Create a new goal for tracking conversions (path-based or event-based)
Inputs: name (required), siteId (required), goalType (required), eventName, +3 more.
rybbit_create_siteA
Create a new site in an organization
Inputs: name (required), domain (required), organizationId (required), public, +5 more.
rybbit_create_teamA
Create a team in an organization, optionally assigning members and sites. Requires org admin/owner role and the org:write scope.
Inputs: name (required), organizationId (required), siteIds, memberUserIds.
rybbit_delete_funnelA
Delete a saved funnel permanently
Inputs: siteId (required), funnelId (required).
rybbit_delete_goalA
Delete a goal permanently
Inputs: goalId (required), siteId (required).
rybbit_delete_siteB
Delete a site permanently
Inputs: siteId (required).
rybbit_delete_teamA
Delete a team permanently. Requires org admin/owner role and the org:write scope.
Inputs: teamId (required), organizationId (required).
rybbit_delete_userA
Permanently delete a user and all their data (events, session replays, profile, aliases) — GDPR erasure. DESTRUCTIVE and IRREVERSIBLE; deletion runs asynchronously. Requires org admin/owner role and the users:write scope.
Inputs: siteId (required), userId (required).
rybbit_get_error_eventsA
Get individual error occurrences with full context including stack traces
Inputs: siteId (required), errorMessage (required), page, limit, +6 more.
rybbit_get_error_namesA
Get unique error messages with occurrence and session counts
Inputs: siteId (required), page, limit, endDate, +5 more.
rybbit_get_error_timeseriesC
Get error occurrence trends over time
Inputs: siteId (required), errorMessage (required), bucket, endDate, +5 more.
rybbit_get_event_namesA
Get a list of unique custom event names with their occurrence counts
Inputs: siteId (required), endDate, filters, timeZone, +3 more.
rybbit_get_event_propertiesA
Get property key-value pairs for a specific event name with occurrence counts
Inputs: siteId (required), eventName (required), endDate, filters, +4 more.
rybbit_get_eventsB
Get a paginated list of events (pageviews, custom events, and outbound clicks)
Inputs: siteId (required), page, endDate, filters, +7 more.
rybbit_get_excluded_countriesA
Get the list of country codes excluded from tracking for a site. Requires the sites:read scope.
Inputs: siteId (required).
rybbit_get_excluded_ipsA
Get the list of IP addresses excluded from tracking for a site. Requires the sites:read scope.
Inputs: siteId (required).
rybbit_get_funnelsB
Get all saved funnels for a site
Inputs: siteId (required).
rybbit_get_funnel_step_sessionsC
Get sessions that reached or dropped off at a specific funnel step
Inputs: mode (required), steps (required), siteId (required), stepNumber (required), +8 more.
rybbit_get_goalsA
Get a paginated list of goals with their conversion metrics
Inputs: siteId (required), page, sort, limit, +7 more.
rybbit_get_goal_sessionsB
Get sessions that completed a specific goal
Inputs: goalId (required), siteId (required), page, limit.
rybbit_get_journeysC
Get the most common page navigation paths (user journeys) within sessions
Inputs: siteId (required), limit, steps, endDate, +6 more.
rybbit_get_live_visitorsC
Get the count of currently active visitors on the site
Inputs: siteId (required), minutes.
rybbit_get_metricB
Get dimensional breakdown of metrics by a specific parameter (browser, country, pathname, etc.)
Inputs: siteId (required), parameter (required), page, limit, +6 more.
rybbit_get_organization_membersC
Get members of a specific organization
Inputs: organizationId (required).
rybbit_get_organizationsA
Get all organizations the authenticated user is a member of
Inputs: no named parameters.
rybbit_get_outbound_linksB
Get a list of outbound link clicks with their occurrence counts
Inputs: siteId (required), endDate, filters, timeZone, +3 more.
rybbit_get_overviewB
Get high-level analytics metrics for a site including sessions, pageviews, users, bounce rate, and session duration
Inputs: siteId (required), endDate, filters, timeZone, +3 more.
rybbit_get_overview_timeseriesB
Get time-series analytics data broken into configurable time buckets for trend analysis
Inputs: siteId (required), bucket, endDate, filters, +4 more.
rybbit_get_performance_by_dimensionA
Get performance metrics broken down by a specific dimension (pathname, country, browser, etc.)
Inputs: siteId (required), dimension (required), page, limit, +8 more.
rybbit_get_performance_overviewB
Get Core Web Vitals and performance metrics overview (LCP, CLS, INP, FCP, TTFB percentiles)
Inputs: siteId (required), endDate, filters, timeZone, +3 more.
rybbit_get_performance_timeseriesC
Get performance metrics over time for trend analysis
Inputs: siteId (required), bucket, endDate, filters, +4 more.
rybbit_get_private_link_configA
Get the private-link sharing configuration for a site. Requires org admin/owner role (admin-gated upstream) and the sites:write scope.
Inputs: siteId (required).
rybbit_get_query_schemaA
Get the ClickHouse column schema of the scoped_events table for use with rybbit_run_query. Returns column names, types, and usage notes. No API request is made.
Inputs: no named parameters.
rybbit_get_retentionC
Get cohort-based retention analysis data
Inputs: siteId (required), mode, range.
rybbit_get_session_detailsA
Get detailed information about a specific session including all events and pageviews
Inputs: siteId (required), sessionId (required), page, limit, +2 more.
rybbit_get_session_locationsA
Get aggregated session locations with coordinates for map visualization
Inputs: siteId (required), endDate, filters, timeZone, +3 more.
rybbit_get_sessionsC
Get a paginated list of sessions with analytics data
Inputs: siteId (required), page, limit, userId, +7 more.
rybbit_get_siteB
Get site details and configuration
Inputs: siteId (required).
rybbit_get_site_summaryA
Get a one-call analytics digest for a site: overview metrics plus top pages, referrers, countries, device types, custom events, and current live visitor count. Fans out to ~7 API requests internally — prefer this over calling each tool separately.
Inputs: siteId (required), limit, endDate, filters, +4 more.
rybbit_get_teamsA
List teams in an organization, including their members and site assignments. Requires the org:read scope.
Inputs: organizationId (required).
rybbit_get_user_infoB
Get detailed user information including profile traits and linked devices
Inputs: siteId (required), userId (required).
rybbit_get_usersC
Get a paginated list of users with analytics data
Inputs: siteId (required), page, sortBy, endDate, +8 more.
rybbit_get_user_session_countB
Get the number of sessions per day for a specific user
Inputs: siteId (required), userId (required), timeZone.
rybbit_get_user_sessionsB
Get session data for a specific user
Inputs: siteId (required), userId (required).
rybbit_identify_userA
Link an anonymous visitor to a known user ID and optionally merge profile traits. Requires the users:write scope.
Inputs: siteId (required), userId (required), anonymousId (required), traits.
rybbit_run_queryA
Run a read-only ClickHouse SQL query against your analytics events. Query the scoped_events table only (pre-filtered to sites your API key can access). Server-enforced limits: SELECT/WITH-SELECT statements only; max 1,000 result rows; 10-second execution cap; query length up to 20,000 chars; no semicolons; no quoted identifiers; DDL/DML keywords and remote table functions are blocked. Requires the sql:read scope. Call rybbit_get_query_schema first to see available columns. Omit siteId to query across all accessible sites in the organization.
Inputs: query (required), organizationId (required), siteId.
rybbit_track_eventB
Send a tracking event (pageview, custom event, performance, error, or outbound link)
Inputs: type (required), siteId (required), cls, fcp, +10 more.
rybbit_track_eventsA
Send a batch of 1-50 tracking events in one call. Each event has the same shape as rybbit_track_event. Events are sent sequentially; the result reports per-event success/failure. Note: siteId is the tracking site ID from your Rybbit tracking snippet. An API key with the ingest:write scope marks events as trusted server-side ingestion.
Inputs: events (required).
rybbit_update_goalC
Update an existing goal configuration
Inputs: name (required), goalId (required), siteId (required), goalType (required), +4 more.
rybbit_update_member_site_accessA
Restrict or unrestrict which sites an organization member can access. memberId is the membership record ID from rybbit_get_organization_members (not the user ID). Requires org admin/owner role and the org:write scope.
Inputs: memberId (required), organizationId (required), hasRestrictedSiteAccess (required), siteIds.
rybbit_update_siteC
Update site configuration
Inputs: siteId (required), domain, public, blockBots, +6 more.
rybbit_update_teamA
Update a team. WARNING: memberUserIds and siteIds are replaced wholesale when provided — include the full desired lists. Requires org admin/owner role and the org:write scope.
Inputs: name (required), teamId (required), organizationId (required), siteIds, +1 more.
rybbit_update_user_traitsA
Replace the profile traits of an identified user. WARNING: this is a wholesale replacement, not a merge — include every trait you want to keep. Max 2KB serialized. Requires the users:write scope.
Inputs: siteId (required), traits (required), userId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 57 tools
Most tools target distinct resources and actions, but the analytics cluster (overview, overview_timeseries, metric, site_summary, compare_periods) has overlapping purposes that require careful reading of descriptions. The rest are clearly separated by resource type.
All tools follow a consistent rybbit_<verb>_<noun> snake_case pattern, with clear verbs like get, create, update, delete, track, analyze. This makes the tool set predictable and easy to navigate.
At 57 tools, this is far beyond the typical well-scoped MCP server. While each tool has a defined role, the sheer number creates cognitive overhead and increases the likelihood of misselection.
The tool set covers the full analytics lifecycle: data ingestion (track), querying (run_query), dashboards (overview, funnels, retention), user management, and site/team administration. Minor gaps exist (e.g., no remove_organization_member), but the surface is largely comprehensive.
Maintenance
Related MCP Connectors
Analytics and debugging for your MCP server — explore usage and sessions, then root-cause errors.
MCP server for the Seline Analytics API
Analytics for MCP servers. Query your tool calls, first-call success, retries and schema cost.
Market data tools for the MCP ecosystem: server stats, events, search, leaderboards, package trends.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that provides tools to interact with Matomo Analytics API, enabling management of sites, users, goals, segments, and access to analytics reports through a MCP interface.1115 npmISC
- AlicenseNot gradedqualityNot gradedmaintenanceAn experimental MCP server that enables interaction with Google Analytics APIs, allowing users to retrieve account information, run core reports, and access realtime analytics data through natural language queries.Apache 2.0
- FlicenseAqualityDmaintenanceMCP server for the WhatsMyBudget Analytics API, providing tools to query budget periods, categories, accounts, and summaries.26-
- AlicenseAqualityDmaintenanceExposes Rybbit Analytics as MCP tools for querying site traffic, page views, visitor sessions, and live visitor counts through natural language.978 npmMIT