MCP Changelog
Every customer-visible change to the Attribution MCP tools — new tools, new or changed parameters, changed output — newest first, dated by release.
This page records every change to the Attribution MCP tools that you or your AI assistant could notice: a tool added or removed, a parameter added or changed, output that looks different, a fix to numbers that were wrong. Entries are grouped by the date the change reached production, newest first, and each one names the tool it affects. Each entry is marked with the tool's status today: (stable) for tools on the MCP Tools page; and (preview) or (experimental) for tools still in testing and not enabled for customer projects. Entries about the server, about every report tool at once, or about a tool that no longer exists carry no marker.
For what each tool does today, see MCP Tools. For connecting an assistant, see Attribution MCP Server.
Unreleased
get_first_time_purchasers_report(stable) — Changed: the report now runs with the view's attribution type, as the dashboard does, instead of always backward. On a forward view each period holds what its visits went on to produce, so the latest periods keep growing; the line under the title names the Look-forward Scope, and a Lifetime view adds the same note as the other reports.get_timeframe_report(preview) — Changed: the same; the report follows the view's attribution type instead of always running backward.- Report tools — Fixed: the note under a Lifetime report's title said that periods do not add up. They do, because a visit's share does not depend on the date range it is read in, and the note now says so. It also says that the attribution model changes a Lifetime report's totals, not only how they split across channels.
2026-10-10
- Connections — Changed: an assistant's connection no longer expires after 30 minutes idle, is no longer limited to 25 per account, and carries on through server restarts and deploys without reconnecting. The server now also speaks MCP protocol revision 2026-07-28, alongside 2025-11-25.
- Server — Changed: the connection now requests the
project:writescope alongside the read scopes, used only for saved views. A connection approved earlier keeps working as before; log out and reconnect to approve saved-view management. create_project_view,update_project_view,delete_project_view(experimental) — Added. Saved-view management: an assistant can create a view, change or delete the views it created, and report through them in the same conversation. Views a person made in the dashboard, and the Default view, are never changed, and every view an assistant creates carries the assistant's name (the connected app, for example Claude); the dashboard lists those views below a divider and shows them read-only, so people can select and delete them but not change them.get_dashboard_report,get_dashboard_comparison,get_cohort_report,get_paths_report(stable) — Fixed: a report on a view whose Look-forward Scope is Lifetime ran with Date range instead, so its numbers differed from the dashboard's for the same view. It now runs with the view's scope. The line under the report title names the scope for forward attribution, and a Lifetime report adds a short note on reading its numbers, with a link to Attribution types.get_channel_performance_report(preview) — Fixed: the same; a Lifetime view's report now runs with Lifetime, names the scope under the title and adds the same note.request_report(preview) — Fixed: a request on a Lifetime view now carries the view's scope, so it runs with the same settings as the dashboard. A request carries only the setting its attribution type reads: the Look-forward Scope for forward attribution, the lookback window for backward.get_project_context(stable) — Changed: the current view's settings list its Look-forward Scope, Date range or Lifetime, when the view uses forward attribution.list_project_views(stable) — Changed: each view now includes itslook_forward_scope,date_rangeorlifetime.get_conversion_paths,get_aggregated_paths_csv(preview) — Changed: new optionallook_forward_scopeparameter,date_range(the default) orlifetime, sent with forward attribution only;lookback_windowis now sent with backward attribution only, the one that reads it.get_visits,get_conversions,get_revenues,get_revenue_cohort,get_conversion_overlap,get_individual_paths,get_individual_paths_csv,get_visitor_conv_rev_report(experimental) — Changed: the same optionallook_forward_scopeparameter, and the same rule for which of the two settings is sent.- Report tools — Changed: a
startorendthat is not a calendar day inYYYY-MM-DDform, astartlater than theend, or one of the two without the other is now refused before the report runs, naming the problem. A reversed range used to run as an empty report under a reversed heading, and a lone date was silently dropped in favour of the view's saved range. get_dashboard_report,get_dashboard_comparison,get_first_time_purchasers_report(stable) — Changed: a channel or filter you scope to that had no activity in the window is now named in a warning line instead of silently missing from the table, and when none of the scoped IDs had activity the output says so. Such rows were never there: a channel with no visits, spend, conversions or revenue has no row, the same as on the dashboard until you click "show zeros".get_timeframe_report(preview) — Changed: the same warning line for a scoped channel with no activity in the window.get_first_time_purchasers_report(stable) — Changed: a window with no purchases and no ad spend at all now returns a one-line message saying so, instead of a Summary of zeros.get_filter_tree_markdown(stable) — Added: adepthparameter.1returns the channels only;2, the default, returns the channels and their first level as before.- Report tools — Fixed: a report that took longer than about a minute could be cut off before it finished, and the assistant saw a closed-connection error instead of the report. The connection now stays open for the report's full four-minute limit.
- Rate limits — Changed: a rate-limited request's error now carries the JSON-RPC code
-32010instead of-32029, a number the 2026-07-28 protocol reserves for itself. The HTTP 429 status, theRetry-Afterheader and therate_limitederror name are unchanged, so a client that backs off on those needs no change. - Tools outside your connection — Changed: calling a tool the connection does not have now returns a protocol error rather than a tool result saying the tool was not found.
- Project, filter and report tools — Fixed: a channel or campaign name containing a Unicode line separator, as pasted from an Instagram caption, made some assistants fail to read the response and report a parse error instead of the data. Such characters are now replaced with a space in tool output.
whoami(stable) — Changed: the Connection section shows a request ID, which Attribution support can match to that call in the server's logs, instead of a session ID. The Session state section is now Project cache: the currency and event-name list the server has kept for your project, and how long ago each was fetched.
2026-10-01
get_filtered_properties,get_filtered_property_values(experimental) — Fixed: every call failed, because neither the filter nor the conversion event reached the reporting API.start,end,conversion_event_nameandfilter_idare now required, andfilter_idtakes a number.filter_group_idis removed; pass one filter ID instead.get_event_property_values(experimental) — Fixed: the tool always returned an empty list, because it could not name the event the values belong to.conversion_event_nameis now required, along withstartandend.
2026-09-28
get_project_context(stable) — Changed: the current view's settings now carry the labels the dashboard uses, Attribution Model, Conversion Event, Attribution Type and Lookback Window, and the lookback window is listed only when the view uses backward attribution. A forward view shows no lookback figure, because forward attribution never reads it.get_dashboard_report,get_dashboard_comparison,get_cohort_report,get_first_time_purchasers_report(stable) — Changed: the line under the report title now names the attribution model, conversion event and attribution type the report ran with, using the same labels asget_project_context, and shows the lookback window only for backward attribution. For the dashboard report and the comparison this line had been missing altogether.get_channel_performance_report,get_timeframe_report(preview) — Changed: the same line under the report title, with the lookback window shown only for backward attribution.get_paths_report(stable) — Changed: the model and conversion event under the report title use the same labels as the other reports.
2026-09-25
- Deprecated tools — Changed: a deprecated tool no longer appears in the assistant's tool list. A connection made after this change never sees
list_attribution_models; an assistant that connected earlier and still carries it gets the same answer as before, behind the deprecation notice, until it reconnects. list_attribution_models(stable) — Deprecated. Useget_project_contextinstead; its output is now part of that response. Still answers, behind a deprecation notice, until removed.get_project_context(stable) — Changed: the response gains an Attribution Models section with the attribution models, each with its identifier and definition.
2026-09-22
get_dashboard_report,get_dashboard_comparison,get_first_time_purchasers_report(stable) — Changed: channels and filters hidden on the saved view are no longer left out of the report rows. Hiding a row on the dashboard is a display choice, so the rows now add up to the Total, and the assistant can scope a report to a hidden channel by its ID instead of being told the ID was ignored.get_timeframe_report(preview) — Changed: the same; hidden channels and filters now appear in the rows.list_project_views(stable) — Changed: the hidden filter and hidden channel lists are no longer part of the response, which is much smaller on views that hide many rows. Every setting a report inherits is still there.whoami(stable) — Changed: the session state block no longer lists active report IDs. The server no longer tracks in-flight reports per session; nothing else in the output changed.
2026-09-17
get_project_context(stable) — Fixed and Changed: the view marked (default) was whichever view happened to be listed first, and the Default View Settings block described that view. The list now marks the view you last selected in the dashboard as (current), and the settings block is headed Current View Settings with that view's name and ID, so the assistant can pass the rightview_idto report tools.get_project_context(stable) — Changed: the revenue group catalog now lists All Revenue with ID-1, next to Conversion Event (0) and your own groups, and the current view's revenue group always shows its ID, including when it is All Revenue.request_report(preview) — Changed:revenue_group_idaccepts-1to run a report on All Revenue, even when the saved view uses another group. Before, All Revenue could only be reached by omitting the parameter, which fell back to the view's group.
2026-09-16
get_dashboard_report,get_dashboard_comparison,get_cohort_report,get_first_time_purchasers_report(stable) — Fixed: the link at the top of each report did not open your dashboard. It now opens the same report on your Attribution dashboard.request_report(preview) — Fixed: the same; the link returned with the report now points at your dashboard.
2026-09-11
- Documentation — Published a full reference entry for every tool: what it does, an example question, parameters, and what comes back. This changelog starts with a catch-up of the changes released since July 2026.
2026-09-10
whoami(stable) — Added. A session tool, always available, that reports which account and project your assistant is connected to, the scopes it was granted, when its access token expires, and the exact list of tools it can currently see. Ask for it when a tool you expect seems to be missing.
2026-09-09
- All report tools — Changed: a parameter the tool does not support is now rejected with an error naming it, instead of being silently ignored. Previously a misspelled parameter could run the report on the view's saved setting while the assistant believed its override had applied.
- All report tools — Fixed: reports now apply every filter and every channel excluded on the saved view, matching your dashboard. Previously only the first excluded filter was applied and excluded channels were not applied at all, so projects with exclusions could see traffic the dashboard hides.
get_cohort_report,get_first_time_purchasers_report(stable) — Changed: the saved view's aggregation period is now honored when no period is passed, the way the dashboard does it. Precedence is an explicit parameter, then the view, then the tool's default.get_timeframe_report,get_channel_performance_report(preview) — Changed: the same aggregation-period precedence applies here.get_timeframe_report(preview) — Fixed: the report showed every metric as zero and no time breakdown. It now returns a Summary, a By Channel table and one period table per channel, keeps the view's conversion event, and aggregates wide windows more coarsely (Day becomes Week past 100 days, anything finer than Month becomes Month past 385 days) with a note when that happens.get_channel_performance_report(preview) — Fixed: the report always answered "No data found". It now returns spend, revenue, ROAS and profit per channel and per period, with a Summary block. It carries no visits or conversions; useget_dashboard_reportfor those.get_cohort_report(stable) — Fixed: cohort rows and age columns are labelled with the period the report actually ran with, instead of always "Month".get_first_time_purchasers_report(stable) — Changed: the report is refused up front, with an explanation, on a view that filters by an event property, because it cannot be computed for such views. Previously it failed silently in the background.request_report(preview) — Changed: the report type is now a fixed list of nine; event names are matched case-insensitively;date_presetand the view's saved date range are accepted instead of requiring explicit dates; the aggregation period is routed to the key each report type reads and supplied when required, sotime_periodandfirst_time_purchasersrequests no longer fail in the background; unsupported combinations (wrong period key, request-time filtering on report types that cannot take it, an unknown revenue group) are refused with an explanation; the response echoes the resolved window, period and scope.download_report(preview) — Changed: money is returned in major units with the currency stamped on the response; abbreviated metric keys are expanded to full names; a payload with no report carries a note explaining why; large payloads keep totals and the period legend even when cut off.download_report_csv(preview) — Changed: takes onlyreport_idand checks that the report is ready before downloading. Previously an unfinished report printed an all-zero sheet. Dashboard reports only.- Server — Changed: rate-limit and session-cap rejections are returned as structured errors your assistant can read, with the retry delay in both the
Retry-Afterheader and the message.
2026-08-05
get_paths_report(stable) — Added. Aggregated conversion paths, the dashboard's Common Paths view: a Summary block plus one row per journey pattern with conversions, share, revenue, average time to conversion and the touchpoint sequence. Supports channel or filter granularity, collapsing repeated touchpoints, path search, and an optional journey-flow diagram.get_first_time_purchasers_report(stable) — Changed: the report now breaks each top-level channel down by period in a single table per channel, and leaves out periods with no activity.- All report tools — Fixed: a view with a hand-picked saved date range was silently reported as the last 30 days when no dates were given. The saved range is now used. When a date preset cannot be resolved, the report falls back to the last 30 days and says so in the output.
2026-07-21
- Report tools that accept
filter_ids/filter_group_ids— Fixed: scoping now returns the requested channel's rows (the channel, its sub-filters, and parent rows for context) instead of every row in the project. IDs that do not resolve are called out in the output, and the call errors instead of running unscoped when none resolve.
2026-07-02
- All tools — Changed: assistants connected to Attribution are now held to a stricter floor — never state a figure that did not come from a tool response, and flag before a high-stakes recommendation that Attribution warrants the data it returns, not the conclusions drawn from it.
- Server — Fixed: access tokens are now issued for the server's canonical address, so clients that verify the token audience connect without error.
2026-06-16
get_cohort_report(stable) — Changed: renders the cohort matrix properly — one row per acquisition cohort with revenue accumulating across the age columns — and can be scoped to a single channel or filter.get_dashboard_comparison(stable) — Changed: both date ranges are validated up front and refused with an explanation when they cannot be used, and the output now says when a date preset could not be resolved and a fallback range was used instead.
2026-06-10
get_dashboard_comparison(stable) — Added. Compares two periods side by side and returns the change per channel in both dollars and percent, with the biggest gains and drops called out. Ask for it whenever the question is "versus last month" rather than "how did we do".logout(stable) — Added. Ends your assistant's Attribution session on request.get_dashboard_report(stable) — Changed: the report now opens with a Summary block, carries a ROAS column, and can be scoped to particular channels or filters.- All tools — Changed: the set of tools an assistant sees is now decided per project, so a project advertises only the tools available to it.
2026-05-18
- All report tools — Changed: a report call now takes a saved view plus a small set of overrides — conversion event, attribution model, and the date range. Everything else, including attribution type, lookback window, traffic option, cutoff event and revenue group, is read from the view, so a view id on its own reproduces exactly what that view shows in the dashboard.
2026-04-29
- Report tools that return a dashboard link — Fixed: the link handed back with a report now uses the same report key as the dashboard, and a channel performance link carries all three of the reports its page draws, so the page opens complete instead of partly empty. Path reports no longer return a link, having no dashboard page to open.
2026-04-22
authenticate— Removed. Connecting is now a standard OAuth flow your MCP client runs on its own; there is no tool to call first.- Server — Changed: the server requests a narrower set of OAuth scopes.
2026-04-02
log_report_issue(stable) — Added. Reports a problem with a report's numbers back to Attribution from inside the conversation.
2026-04-01
get_cohort_report,get_first_time_purchasers_report(stable) — Added. Revenue accumulation by acquisition cohort, and a first-time-purchaser view of conversions and revenue.list_attribution_models(stable) — Added. Lists the attribution models a report can be run with.get_timeframe_report,get_channel_performance_report(preview) — Added. Metrics over time, and spend, revenue and ROAS per channel and period.download_report_csv,get_aggregated_paths_csv(preview) — Added. CSV downloads of reports and aggregated conversion paths.
2026-03-31
- Initial release. The first Attribution MCP server, with thirty-six tools.
get_dashboard_report(stable) — Added. The marketing P&L by channel, and the tool most questions route to.get_project_context,list_project_views(stable) — Added. Project orientation: saved views, conversion events and the channel tree in one call.get_filter_tree,get_filter_tree_markdown,list_event_names(stable) — Added. The channel hierarchy and the project's event names.request_report,get_report_status,get_reports_status,download_report,get_refresh_status(preview) — Added. The low-level report chain, for report types the high-level tools do not cover.get_project,get_usage(preview) — Added. Project and account details.get_conversion_paths(preview) — Added. Aggregated multi-touch conversion paths.authenticate— Added. A browser sign-in flow, replaced by standard OAuth on 2026-04-22.
Updated 2 days ago
