MCP server
The Webmarketer MCP (Model Context Protocol) server lets you connect an AI assistant to your Webmarketer data. Once connected, the assistant can list your projects, query your marketing performance, analyze your attribution models or diagnose a tracking issue, and update some of your data, in response to a question asked in natural language.
MCP is an open protocol, supported by most AI assistants on the market. Where the API is meant for developers writing an integration, the MCP server is meant for the assistant itself: it describes the available tools to the assistant and how to use them correctly.
| Server URL | https://mcp.webmarketer.io/mcp |
| Transport | HTTP (Streamable HTTP) |
| Authentication | OAuth 2.1, with your Webmarketer account |
| Access | Read, and write for some tools |
Connecting an assistant
Connecting takes two steps:
- Declare the server URL in your assistant
- On first use, the assistant redirects you to the Webmarketer sign-in page. Sign in and authorize access: the assistant then receives a token that lets it query Webmarketer on your behalf
There is no key or token to copy: the assistant registers and authenticates on its own.
Claude
From claude.ai or the Claude Desktop app, open Settings > Connectors, click Add custom connector, then enter the server URL:
https://mcp.webmarketer.io/mcp
With Claude Code, add the server from the command line:
claude mcp add --transport http webmarketer https://mcp.webmarketer.io/mcp
ChatGPT
From chatgpt.com, open Plugins > Add > Add custom MCP server, then enter the server URL. Authentication uses OAuth.
Cursor
Add the server to the ~/.cursor/mcp.json file (or .cursor/mcp.json at the root of a project):
{
"mcpServers": {
"webmarketer": {
"url": "https://mcp.webmarketer.io/mcp"
}
}
}
Any MCP-compatible assistant that supports the HTTP transport and OAuth authentication can connect, provided its OAuth
redirect address is one of those listed above or a local address (localhost). Assistants installed on your
computer usually use a local address.
Access rights
The assistant acts with your own rights: it reaches the same workspaces and projects as you do, and every action is subject to the role you hold. A tool that requires a permission you lack returns an error.
Most tools only read your data. Some change it: they create or update event types, set the states and statistics of events, or record offline interactions (see Writing data). The server flags these tools as writes, so that your assistant can ask for your confirmation before calling them; whether it asks depends on the assistant and its settings. A write also requires the matching edit permission in your role.
The token handed to the assistant is short-lived (15 minutes), and the assistant renews it on its own. The token is only valid for the MCP server.
Available tools
The server exposes the tools below. The assistant picks the tools to call based on your question: you don't need to name them.
Discovery and context
| Tool | Role |
|---|---|
whoami | Identifies the connected account and lists the workspaces and projects it can reach. The entry point of every session |
list_workspaces | Lists the workspaces you can reach (id, name, slug) |
list_projects | Lists the projects of a workspace (name, domain, currency, creation date) |
get_project | Describes a project: domain, currency, workspace, creation date, setup state and data retention |
get_project_earliest_date | Gives the earliest date data is available for, based on the project's creation and the workspace's retention |
get_project_fields | Lists the project's event fields: key, label, type, entity and business description |
list_event_types | Lists the tracked event types, with their fields and configuration |
get_documentation_index | Lists the pages of this documentation (title, description, URL) |
get_documentation_page | Retrieves the content of a page of this documentation |
Marketing analytics
| Tool | Role |
|---|---|
query_index | Aggregates marketing data from the analytics index: metrics, ad platform dimensions, date range and attribution model |
get_event_insights | Aggregates event metrics (count, revenue…) over a date range, on the date the events occurred |
get_sql_schema | Describes the data warehouse schema: tables, columns, primary keys and relationships |
dry_run_sql | Validates a SQL query without running it and estimates the amount of data processed |
run_sql | Runs a SQL query on the data warehouse (100 rows by default, 500 at most) |
list_attribution_models | Lists the project's attribution models |
get_attribution_paths | Details how one event was attributed: the interactions of its conversion path and the credit each received, per attribution model |
compare_attribution_models | Measures the same metrics, over the same date range, under several attribution models side by side |
get_non_attributable_report | Explains why conversions were credited to the non-attributable node, cause by cause |
list_custom_columns | Lists the project's custom columns: the KPIs defined from its metrics (CPL, ROAS, conversion rate…) |
Traffic sources and ad platforms
| Tool | Role |
|---|---|
list_integrations | Lists the ad platform accounts configured on the project (one Google Ads account, one Meta account…) |
get_integrations_description | Describes the project's ad platform types (Google Ads, Meta…) and the hierarchy of their nodes |
get_ads_filters | Lists the filters available to target ad platform nodes |
search_ads_nodes | Searches the ad platform nodes (campaigns, ads…) matching a filter |
get_ads_nodes | Reads ad platform nodes you know by id, or the children of a node |
get_integration_sync_status | Reports whether an ad platform account's spend and clicks were imported over a period, and which ads fail their tracking URL checks |
get_credentials_status | Reports the state of the ad platform connections: validity, expiry, failed refreshes |
list_custom_ads_campaigns | Lists the campaigns of a custom connector |
list_custom_ads_outlays | Lists the spend declared on a campaign of a custom connector |
list_custom_interaction_rules | Lists the custom interaction rules, in the order they are evaluated |
simulate_interaction_rule (coming soon) | Measures which sessions a custom interaction rule would attach, before it is saved |
get_interaction_rules_recompute_status (coming soon) | Tells whether historical figures already reflect the last change to the interaction rules |
Events
| Tool | Role |
|---|---|
search_events | Searches the project's individual events (orders, leads, calls…), most recent first, with their fields and metrics |
get_event | Reads one processed event: its type, fields, states, statistics and user |
get_raw_event | Reads an event exactly as it was received, before processing, to check what was sent |
Interactions and users
| Tool | Role |
|---|---|
search_users | Searches users with filters on their fields, events and metrics |
get_user_metrics | Lists the states and statistics recorded on a user's events |
get_customer_journey | Returns a user's profile and customer journey: sessions and offline interactions, across devices |
search_interactions | Searches a project's interactions: sessions and offline interactions |
list_traffic_filters | Lists the project's traffic filters and their rule |
list_excluded_sessions | Counts, over time, the sessions excluded by traffic filters |
Diagnostics and data quality
| Tool | Role |
|---|---|
search_trash_events | Searches rejected events and the reason they were rejected |
get_trash_events_count_by_date | Counts rejected events per day, to spot a spike |
get_alerts | Lists a project's alerts: credentials, ad platform sync, tracking, rejected event limits |
get_tracking_status | Gives the result of the last check of the tracking subdomain (DNS, SSL certificate) |
get_tracking_script | Gives the exact tracking script to install on the project's website |
get_workspace_alerts | Lists a workspace's alerts: invoice issues, subscription status changes, quota limits |
list_uptime_checks | Reports the availability and response time of your ads' landing pages |
Billing and plan limits
| Tool | Role |
|---|---|
get_workspace_billing | Gives the workspace's plan, subscription status and upcoming invoice |
get_billing_usage | Gives the plan's limits (projects, integrations, monthly interactions…) and the current usage |
get_workspace_limitations | Gives the functional limits of the workspace's plan |
get_project_limitations | Gives the functional limits of the plan a project is on |
Dashboards and audiences
| Tool | Role |
|---|---|
list_dashboards | Lists the project's dashboards |
list_widgets | Lists the widgets of a dashboard and their configuration |
get_widget_data (coming soon) | Returns the data a dashboard widget displays |
list_audiences | Lists the project's saved audiences, with their definition and size |
get_audience | Details a saved audience: full definition, last known size and size history |
preview_audience | Validates an audience definition and returns its size and a sample of users |
Writing data
These tools change your data. Your assistant can ask for your confirmation before calling them (see Access rights).
| Tool | Role |
|---|---|
create_event_type | Creates an event type and the fields its events carry |
update_event_type | Changes an event type: its name, its fields (added, changed or removed one by one) or whether it is attributable |
update_event_state | Sets a state on an event, such as a qualified lead or a signed deal |
update_event_statistic | Sets a statistic of an event, such as a quote amount or a CRM revenue |
ingest_offline_interaction | Records an offline interaction (phone call, store visit, CRM lead) on a campaign of a custom connector |
ingest_event (coming soon) | Sends an event and returns its id, or the reason it was refused |
upsert_custom_ads_campaign (coming soon) | Creates or updates a campaign of a custom connector |
upsert_custom_ads_outlay (coming soon) | Declares the spend of a campaign of a custom connector |
create_interaction_rule (coming soon) | Creates a custom interaction rule |
update_interaction_rule (coming soon) | Changes a custom interaction rule |
delete_interaction_rule (coming soon) | Deletes a custom interaction rule |
reorder_interaction_rules (coming soon) | Changes the order in which the custom interaction rules are evaluated |
trigger_interaction_rules_recompute (coming soon) | Reapplies the custom interaction rules to the project's history |
A change to the custom interaction rules applies retroactively: the project's whole history is recomputed, and the figures attributed to your campaigns change accordingly.
Reading the answers right
Two Webmarketer-specific notions determine whether an answer is right. The assistant is told about them, but keeping them in mind helps you phrase your questions and check its answers.
The attributed date. query_index filters on the date of the marketing interaction, not the date of the
conversion: a purchase made on February 15 and attributed to a click on February 10 shows up on February 10.
get_event_insights, on the other hand, filters on the date the event occurred. See
Attribution dates.
Attribution credits. Attributed values are credits, split across the touchpoints of each conversion path, not
counts: 4,866.39 attributed orders means 4,866.39 credits, not 4,866 orders. See
Attribution models.
- Which Google Ads campaigns generated the most sales last month, with linear attribution?
- Compare the first-click and last-click attribution models on my September leads.
- Why didn't I receive any events yesterday on my project?