# Attriboo MCP documentation

Canonical: https://www.attriboo.com/developers/mcp

Endpoint: https://www.attriboo.com/api/mcp
Transport: Streamable HTTP, stateless.

Connect using a compatible remote MCP client with OAuth, complete sign-in and workspace approval, and initialize the protocol connection before tools/list or tools/call. Default analytics:read reads reports. Website setup needs separately approved analytics:read sites:write and current workspace owner/admin access. A private workspace Bearer key can read reports but cannot use setup tools.

Examples use illustrative values. Replace them with returned IDs and your own dates. Successful content[0].text is JSON data without the REST status/data envelope. Tool failures return isError: true with a readable text message. Authentication failures can happen before a tool executes.

Report dates use UTC, monetary values are integer cents, and report history covers available records in the last 365 days. Keep report selection unchanged when continuing with next_cursor. Shared request limits are 120/minute per credential per server instance. Disconnect in Settings → API & MCP → Connected AI apps.

[OAuth guide](https://www.attriboo.com/developers/oauth) · [Pagination](https://www.attriboo.com/developers/pagination) · [Errors](https://www.attriboo.com/developers/errors)

## list_sites

Find the websites, IDs, currencies and timezones available in the authorized workspace.

Access: Report OAuth or workspace key

### Arguments

No arguments; send {}.

### List the workspace's websites

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_sites",
    "arguments": {}
  }
}
```

Decoded result:

```json
{
  "workspace": "Example workspace",
  "sites": [
    {
      "id": "site_example",
      "domain": "shop.example.com",
      "currency": "USD",
      "name": "Example shop",
      "timezone": "UTC"
    }
  ]
}
```

### Result fields

- workspace: Workspace name.
- sites: Websites available to this connection.
  - id: Website ID.
  - domain: Domain.
  - name: Website name.
  - currency: Website currency.
  - timezone: Saved IANA timezone.

[Full result field definitions](https://www.attriboo.com/developers/sites)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"workspace\": \"Example workspace\",\n  \"sites\": [\n    {\n      \"id\": \"site_example\",\n      \"domain\": \"shop.example.com\",\n      \"currency\": \"USD\",\n      \"name\": \"Example shop\",\n      \"timezone\": \"UTC\"\n    }\n  ]\n}"
    }
  ]
}
```

Call this first when the intended website is unclear. The tool takes an empty arguments object.

## get_overview

Read headline revenue, traffic, conversion and advertising metrics with comparison changes.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read overview

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_overview",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "metrics": {
    "visitors": 100,
    "sessions": 120,
    "pageviews": 240,
    "revenue": 20000,
    "orders": 4,
    "buyers": 4,
    "conversion_rate": 4,
    "revenue_per_visitor": 200,
    "average_order_value": 5000,
    "avg_session_seconds": 60,
    "bounce_rate": 40,
    "live_visitors": 0,
    "ad_spend": 5000,
    "net_profit": 15000,
    "roas": 4,
    "ai_revenue": 5000
  },
  "changes_pct": {
    "revenue": null,
    "visitors": null,
    "orders": null,
    "conversion_rate": null,
    "revenue_per_visitor": null,
    "avg_session": null,
    "bounce_rate": null
  },
  "notes": "Money is in integer cents. changes_pct is the percent change versus the comparison period (null when that period has no data)."
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- metrics: Headline metrics. Revenue, revenue_per_visitor, average_order_value, ad_spend, net_profit and ai_revenue are cents; roas is a ratio or null without spend.
- changes_pct: Percent changes for revenue, visitors, orders, conversion_rate, revenue_per_visitor, avg_session and bounce_rate. Null when no comparison is available.
- notes: Calculation and completeness notes.

[Full result field definitions](https://www.attriboo.com/developers/overview)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"metrics\": {\n    \"visitors\": 100,\n    \"sessions\": 120,\n    \"pageviews\": 240,\n    \"revenue\": 20000,\n    \"orders\": 4,\n    \"buyers\": 4,\n    \"conversion_rate\": 4,\n    \"revenue_per_visitor\": 200,\n    \"average_order_value\": 5000,\n    \"avg_session_seconds\": 60,\n    \"bounce_rate\": 40,\n    \"live_visitors\": 0,\n    \"ad_spend\": 5000,\n    \"net_profit\": 15000,\n    \"roas\": 4,\n    \"ai_revenue\": 5000\n  },\n  \"changes_pct\": {\n    \"revenue\": null,\n    \"visitors\": null,\n    \"orders\": null,\n    \"conversion_rate\": null,\n    \"revenue_per_visitor\": null,\n    \"avg_session\": null,\n    \"bounce_rate\": null\n  },\n  \"notes\": \"Money is in integer cents. changes_pct is the percent change versus the comparison period (null when that period has no data).\"\n}"
    }
  ]
}
```

net_profit is recorded revenue less ad spend; it is not accounting profit after every business expense.

Report history covers available records in the last 365 days; collection allowances and reporting capacity are separate.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_timeseries

Read traffic and revenue over daily, weekly, monthly or quarterly buckets.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- granularity: Requested bucket size. Values: daily, weekly, monthly, quarterly. Default: daily.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read time series

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_timeseries",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "granularity": "daily",
  "points": [
    {
      "label": "Oct 1",
      "visitors": 100,
      "revenue": 20000,
      "orders": 4,
      "top_source": "Google Organic",
      "comparison_visitors": null,
      "comparison_revenue": null
    }
  ]
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- granularity: Requested bucket granularity; long ranges may be grouped more coarsely.
- points: Report records. See the fields below.
  - label: Bucket label.
  - from: Optional database bucket inclusive UTC start.
  - to: Optional database bucket exclusive UTC end.
  - gross_sales: Optional gross sales cents for database-backed results.
  - refunds: Optional refund cents for database-backed results.
  - visitors: Visitors in the bucket.
  - revenue: Revenue in cents.
  - orders: Order count.
  - top_source: Leading source or null.
  - comparison_visitors: Comparison visitors or null.
  - comparison_revenue: Comparison revenue in cents or null.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/timeseries)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"granularity\": \"daily\",\n  \"points\": [\n    {\n      \"label\": \"Oct 1\",\n      \"visitors\": 100,\n      \"revenue\": 20000,\n      \"orders\": 4,\n      \"top_source\": \"Google Organic\",\n      \"comparison_visitors\": null,\n      \"comparison_revenue\": null\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Long daily ranges can be grouped weekly, and long weekly ranges monthly. Inspect returned points rather than assuming one point per day.

Larger-site results may also include from, to, gross_sales and refunds per point and a coverage object.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_breakdown

Rank traffic and revenue by any supported breakdown dimension.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- cursor: Opaque next_cursor from the previous result. Keep the same website, dates, report, model, visitor filters and funnel selector.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- limit: Maximum rows on this page. Default: 50.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- report (required): Breakdown dimension. Values: sources, channels, campaigns, pages, hostnames, countries, cities, devices, browsers, os, goals.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read sources

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_breakdown",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none",
      "report": "sources",
      "limit": 50
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "report": "sources",
  "rows": [
    {
      "source": "Google Organic",
      "channel": "Organic Search",
      "visitors": 100,
      "conversions": 4,
      "revenue": 20000,
      "conversion_rate": 4,
      "revenue_per_visitor": 200
    }
  ]
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - source: Source name.
  - channel: Channel group.
  - visitors: Visitors.
  - conversions: Attributed conversion credit; can be fractional.
  - revenue: Attributed revenue in cents.
  - conversion_rate: Percentage.
  - revenue_per_visitor: Cents per visitor.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/sources)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"report\": \"sources\",\n  \"rows\": [\n    {\n      \"source\": \"Google Organic\",\n      \"channel\": \"Organic Search\",\n      \"visitors\": 100,\n      \"conversions\": 4,\n      \"revenue\": 20000,\n      \"conversion_rate\": 4,\n      \"revenue_per_visitor\": 200\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

The selected attribution model changes conversion credit and revenue. Linear credit can split a sale across sources.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_recent_sales

Read recorded payments and refunds, newest first, with observed attribution details.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- cursor: Opaque next_cursor from the previous result. Keep the same website, dates, report, model, visitor filters and funnel selector.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- limit: Maximum rows on this page. Default: 50.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read sales

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_recent_sales",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "sales": [
    {
      "id": "tx_example",
      "provider": "stripe",
      "external_id": "order_123",
      "type": "one_time",
      "amount": 5000,
      "currency": "USD",
      "customer_email": null,
      "transacted_at": "2026-10-01T12:00:00Z",
      "attributed": true,
      "first_touch": "Google Organic",
      "last_touch": "Direct",
      "touches": 2,
      "self_reported_source": null
    }
  ]
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- sales: Report records. See the fields below.
  - id: Stored transaction ID.
  - provider: Payment provider.
  - external_id: Provider transaction ID.
  - type: one_time, subscription_new, subscription_renewal or refund.
  - amount: Signed integer cents; refunds are negative.
  - currency: Transaction currency.
  - customer_email: Customer email or null. Treat as private data.
  - transacted_at: UTC transaction time.
  - attributed: Whether a preceding observed source was linked.
  - first_touch: First source or null.
  - last_touch: Last source or null.
  - touches: Preceding observed touches.
  - self_reported_source: Survey answer or null.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/sales)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"sales\": [\n    {\n      \"id\": \"tx_example\",\n      \"provider\": \"stripe\",\n      \"external_id\": \"order_123\",\n      \"type\": \"one_time\",\n      \"amount\": 5000,\n      \"currency\": \"USD\",\n      \"customer_email\": null,\n      \"transacted_at\": \"2026-10-01T12:00:00Z\",\n      \"attributed\": true,\n      \"first_touch\": \"Google Organic\",\n      \"last_touch\": \"Direct\",\n      \"touches\": 2,\n      \"self_reported_source\": null\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

An unattributed payment is still a payment. Importing history does not recreate unobserved visits.

Keep customer_email and visitor identifiers in authorized private systems.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_funnels

Read independent standard stages, list saved definitions, or inspect an ordered saved funnel.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- cursor: Opaque next_cursor from the previous result. Keep the same website, dates, report, model, visitor filters and funnel selector.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- funnel: Omit for independent standard stages. saved lists definitions; a saved funnel UUID reads ordered results.
- limit: Maximum rows on this page. Default: 50.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read funnels

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_funnels",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "funnels": [
    {
      "name": "All traffic",
      "visitors": 100,
      "buyers": 4,
      "revenue": 20000,
      "conversion_rate": 4,
      "steps": [
        {
          "step": "Visited the site",
          "visitors": 100,
          "pct_of_entry": 100,
          "drop_off_pct": 0
        },
        {
          "step": "Viewed 2+ pages",
          "visitors": 60,
          "pct_of_entry": 60,
          "drop_off_pct": 40
        },
        {
          "step": "Completed a goal",
          "visitors": 15,
          "pct_of_entry": 15,
          "drop_off_pct": 75
        },
        {
          "step": "Purchased",
          "visitors": 4,
          "pct_of_entry": 4,
          "drop_off_pct": 73.3
        }
      ]
    }
  ]
}
```

### List saved definitions

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_funnels",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none",
      "funnel": "saved"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "kind": "saved_definitions",
  "funnels": [],
  "next_cursor": null,
  "coverage": {
    "complete": true,
    "total_rows": 0,
    "returned_rows": 0
  }
}
```

### Read an ordered saved funnel

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_funnels",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none",
      "funnel": "11111111-1111-4111-8111-111111111111"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "kind": "saved",
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "definition": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "Checkout",
    "steps": [
      {
        "kind": "page",
        "match": "equals",
        "value": "/pricing"
      },
      {
        "kind": "purchase"
      }
    ]
  },
  "rows": [
    {
      "label": "Visited /pricing",
      "visitors": 100,
      "pctOfFirst": 100,
      "pctOfPrevious": 100,
      "revCents": 20000,
      "topSource": "Google Organic"
    },
    {
      "label": "Purchased",
      "visitors": 4,
      "pctOfFirst": 4,
      "pctOfPrevious": 4,
      "revCents": 20000,
      "topSource": "Google Organic"
    }
  ],
  "coverage": {
    "complete": true,
    "total_rows": 2,
    "returned_rows": 2
  }
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- steps_definition: Standard stage labels, when no saved funnel is selected.
- kind: saved_definitions or saved for a selected saved-funnel request.
- definition: Exact saved funnel definition when funnel=ID.
- rows: Ordered saved-funnel results when funnel=ID; label, visitors, pctOfFirst, pctOfPrevious, revCents and topSource.
- funnels: Standard cohorts, or saved definitions when funnel=saved. For funnel=ID use definition and rows instead.
  - name: Cohort name.
  - visitors: Entry cohort visitors.
  - buyers: Buyers in the cohort.
  - revenue: Cohort revenue in cents.
  - conversion_rate: Buyer percentage.
  - steps: Independent stage counts, with step, visitors, pct_of_entry and drop_off_pct.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/funnels)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"funnels\": [\n    {\n      \"name\": \"All traffic\",\n      \"visitors\": 100,\n      \"buyers\": 4,\n      \"revenue\": 20000,\n      \"conversion_rate\": 4,\n      \"steps\": [\n        {\n          \"step\": \"Visited the site\",\n          \"visitors\": 100,\n          \"pct_of_entry\": 100,\n          \"drop_off_pct\": 0\n        },\n        {\n          \"step\": \"Viewed 2+ pages\",\n          \"visitors\": 60,\n          \"pct_of_entry\": 60,\n          \"drop_off_pct\": 40\n        },\n        {\n          \"step\": \"Completed a goal\",\n          \"visitors\": 15,\n          \"pct_of_entry\": 15,\n          \"drop_off_pct\": 75\n        },\n        {\n          \"step\": \"Purchased\",\n          \"visitors\": 4,\n          \"pct_of_entry\": 4,\n          \"drop_off_pct\": 73.3\n        }\n      ]\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Standard stages independently count entry-cohort members; they do not require the stages to happen in order.

funnel=saved returns kind: saved_definitions, funnels, next_cursor and coverage. Each definition includes id, name and steps.

funnel=ID returns kind: saved, period, definition, rows and coverage. Each ordered row has label, visitors, pctOfFirst, pctOfPrevious, revCents and topSource. Saved funnels have two to eight steps; a selected funnel has no cursor.

Definitions are read-only through the public API. Create and edit them in the dashboard.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_ai_search

Keep crawler activity, referred human visitors and revenue credit separate for each AI engine.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read ai search

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_ai_search",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "engines": [
    {
      "engine": "ChatGPT",
      "bot_crawls": 20,
      "visitors": 10,
      "attributed_buyers": 1,
      "attributed_revenue": 5000,
      "conversion_rate": 10,
      "revenue_per_visitor": 500,
      "top_page": "/pricing"
    }
  ]
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- engines: Report records. See the fields below.
  - engine: ChatGPT, Perplexity, Claude, Gemini or Copilot.
  - bot_crawls: Crawler requests.
  - visitors: Referred human visitors.
  - attributed_buyers: Attributed conversion credit; can be fractional.
  - attributed_revenue: Attributed revenue in cents.
  - conversion_rate: Attributed buyers divided by visitors, percent.
  - revenue_per_visitor: Cents per referred visitor.
  - top_page: Leading page or null.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/ai-search)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"engines\": [\n    {\n      \"engine\": \"ChatGPT\",\n      \"bot_crawls\": 20,\n      \"visitors\": 10,\n      \"attributed_buyers\": 1,\n      \"attributed_revenue\": 5000,\n      \"conversion_rate\": 10,\n      \"revenue_per_visitor\": 500,\n      \"top_page\": \"/pricing\"\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Examples show one engine for brevity. Actual reports include the supported engines.

Crawls do not prove citations or visits. Never call crawls divided by visitors a conversion rate.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_time_to_purchase

Group purchases by time since a preceding recorded entry visit.

Access: Report OAuth or workspace key

### Arguments

- compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- from: Inclusive start date. Supply to as well.
- model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- site: Website ID or domain. Required when the workspace has more than one website.
- to: Inclusive end date. Supply from as well.

### Read time to purchase

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_time_to_purchase",
    "arguments": {
      "site": "site_example",
      "from": "2026-10-01",
      "to": "2026-10-07",
      "compare": "none"
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "period": {
    "from": "2026-10-01T00:00:00.000Z",
    "to": "2026-10-08T00:00:00.000Z",
    "label": "Custom",
    "compare": "none",
    "attribution_model": "first_touch"
  },
  "buckets": [
    {
      "label": "Same day",
      "orders": 4,
      "revenue": 20000,
      "share_pct": 100,
      "avg_touches": 2
    }
  ]
}
```

### Result fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- buckets: Report records. See the fields below.
  - label: Same day, 1–3, 4–7, 8–30 or 30+ days.
  - orders: Order count.
  - revenue: Revenue in cents.
  - share_pct: Percentage of included orders.
  - avg_touches: Average observed touches.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/time-to-purchase)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"period\": {\n    \"from\": \"2026-10-01T00:00:00.000Z\",\n    \"to\": \"2026-10-08T00:00:00.000Z\",\n    \"label\": \"Custom\",\n    \"compare\": \"none\",\n    \"attribution_model\": \"first_touch\"\n  },\n  \"buckets\": [\n    {\n      \"label\": \"Same day\",\n      \"orders\": 4,\n      \"revenue\": 20000,\n      \"share_pct\": 100,\n      \"avg_touches\": 2\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Examples show one bucket for brevity. Refunds and payments without a preceding recorded entry visit are excluded.

Report tools return the report data directly inside MCP text content. They do not add the REST status/data envelope.

With multiple websites and no site argument, this report tool returns needs_site: true and the available websites. Choose a real website and call it again.

## get_realtime

Read visitors active in the last five minutes.

Access: Report OAuth or workspace key

### Arguments

- cursor: Opaque next_cursor from the previous result. Keep the same website, dates, report, model, visitor filters and funnel selector.
- filters: JSON array of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
  - dim: string Values: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal.
  - op: string Values: is, is_not.
  - value: string
- limit: Maximum rows on this page. Default: 50.
- site: Website ID or domain. Required when the workspace has more than one website.

### Read the current five-minute window

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_realtime",
    "arguments": {
      "site": "site_example",
      "limit": 50
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD"
  },
  "window_minutes": 5,
  "live_visitors": 1,
  "visitors": [
    {
      "visitor_id": "v_example",
      "country_code": "US",
      "city": "New York",
      "source": "Google Organic",
      "page": "/pricing",
      "device": "Desktop",
      "seconds_ago": 12
    }
  ]
}
```

### Result fields

- site: Website ID, domain and currency.
- window_minutes: Fixed five-minute live window.
- live_visitors: Total live visitors, including later pages.
- visitors: Report records. See the fields below.
  - visitor_id: Observed visitor ID.
  - country_code: Country or null.
  - city: City or null.
  - source: Recorded source.
  - page: Latest path.
  - device: Device type.
  - seconds_ago: Seconds since last activity.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full result field definitions](https://www.attriboo.com/developers/realtime)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\"\n  },\n  \"window_minutes\": 5,\n  \"live_visitors\": 1,\n  \"visitors\": [\n    {\n      \"visitor_id\": \"v_example\",\n      \"country_code\": \"US\",\n      \"city\": \"New York\",\n      \"source\": \"Google Organic\",\n      \"page\": \"/pricing\",\n      \"device\": \"Desktop\",\n      \"seconds_ago\": 12\n    }\n  ]\n}"
    }
  ]
}
```

Money is integer cents in site.currency. Percentages use a 0–100 scale.

This is a fixed five-minute live window. period=realtime on other reports instead selects the last 30 minutes.

Continuation pages retain the original live window. Reload the first page for a fresh current window.

This tool takes site, limit and cursor, plus filters when available; it does not take a report date range. Reload the first page for current activity.

## create_website

Add a website, or reuse its existing domain, within the workspace's current plan.

Access: Setup OAuth and workspace owner/admin

### Arguments

- confirm (required): Confirm the website details with the account holder before sending true.
- currency: Supported three-letter currency. Default: USD.
- domain (required): Public domain or HTTP(S) address. Normalized to a lowercase domain without www, credentials or a port.
- name: Website name; defaults to domain.
- timezone: IANA timezone. Default: UTC.

### Create a website

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_website",
    "arguments": {
      "domain": "shop.example.com",
      "name": "Example shop",
      "currency": "USD",
      "timezone": "UTC",
      "confirm": true
    }
  }
}
```

Decoded result:

```json
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD",
    "name": "Example shop",
    "timezone": "UTC"
  },
  "created": true
}
```

### Result fields

- site: Returned website details.
- created: Whether a website was created.

[Full result field definitions](https://www.attriboo.com/developers/create-website)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": {\n    \"id\": \"site_example\",\n    \"domain\": \"shop.example.com\",\n    \"currency\": \"USD\",\n    \"name\": \"Example shop\",\n    \"timezone\": \"UTC\"\n  },\n  \"created\": true\n}"
    }
  ]
}
```

Requires an OAuth connection with analytics:read sites:write and current workspace owner/admin access. Workspace keys cannot use this endpoint.

Does not buy an upgrade. A website plan limit returns 403. Always use the returned site rather than inventing an ID.

## get_tracking_script

Retrieve an installation snippet for the actual website and its saved privacy choices.

Access: Setup OAuth and workspace owner/admin

### Arguments

- format: Installation format. Values: html, gtm, nextjs, astro, nuxt, jsx, gatsby, docusaurus, drupal. Default: html.
- site: Website ID or domain. Required when the workspace has more than one website.

### Get tracking script

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_tracking_script",
    "arguments": {
      "site": "site_example",
      "format": "html"
    }
  }
}
```

Decoded result:

```json
{
  "site": "site_example",
  "domain": "shop.example.com",
  "format": "html",
  "script": "<script defer data-auto-identify=\"false\" data-consent=\"required\" data-site-id=\"site_example\" src=\"https://www.attriboo.com/t.js\"></script>",
  "preferences": {
    "mode": "standard",
    "consent": "required",
    "captureEmails": false,
    "visitorEstimates": false
  },
  "installation_guide": "https://www.attriboo.com/docs/installation",
  "next": "Install once using the matching platform guide. Publish the change, respect the site's consent setup, then check received activity. The snippet contains no private API key."
}
```

### Result fields

- site: Website ID.
- domain: Website domain.
- format: Selected format.
- script: Complete snippet to install once.
- preferences: Saved mode, consent, captureEmails and visitorEstimates.
- installation_guide: Matching documentation entry point.
- next: Next installation step.

[Full result field definitions](https://www.attriboo.com/developers/tracking-script)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": \"site_example\",\n  \"domain\": \"shop.example.com\",\n  \"format\": \"html\",\n  \"script\": \"<script defer data-auto-identify=\\\"false\\\" data-consent=\\\"required\\\" data-site-id=\\\"site_example\\\" src=\\\"https://www.attriboo.com/t.js\\\"></script>\",\n  \"preferences\": {\n    \"mode\": \"standard\",\n    \"consent\": \"required\",\n    \"captureEmails\": false,\n    \"visitorEstimates\": false\n  },\n  \"installation_guide\": \"https://www.attriboo.com/docs/installation\",\n  \"next\": \"Install once using the matching platform guide. Publish the change, respect the site's consent setup, then check received activity. The snippet contains no private API key.\"\n}"
    }
  ]
}
```

Path parameter site is a returned website ID or domain. Requires setup OAuth and workspace owner/admin access, even though this is a GET.

Use the exact returned script: attributes change with saved privacy choices. Publish the installation before verification.

## verify_installation

Check whether Attriboo has received tracking activity for this website.

Access: Setup OAuth and workspace owner/admin

### Arguments

- site: Website ID or domain. Required when the workspace has more than one website.

### Verify received activity

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "verify_installation",
    "arguments": {
      "site": "site_example"
    }
  }
}
```

Decoded result:

```json
{
  "site": "site_example",
  "domain": "shop.example.com",
  "collection_paused": false,
  "tracking_seen": false,
  "verified_at": null,
  "last_event_at": null,
  "status": "waiting",
  "checked_at": "2026-10-08T12:00:00.000Z",
  "meaning": "This checks records received by Attriboo. It does not inspect your published code, prove a deployment, or verify a payment connection."
}
```

### Result fields

- site: Website ID.
- domain: Website domain.
- collection_paused: Whether collection is paused.
- tracking_seen: Whether script_verified_at has been set.
- verified_at: Verification timestamp, or null.
- last_event_at: Latest received event timestamp, or null.
- status: paused, activity_received or waiting. Values: paused, activity_received, waiting.
- checked_at: Time this check ran.
- meaning: Explanation of verification limits.

[Full result field definitions](https://www.attriboo.com/developers/verify-installation)

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"site\": \"site_example\",\n  \"domain\": \"shop.example.com\",\n  \"collection_paused\": false,\n  \"tracking_seen\": false,\n  \"verified_at\": null,\n  \"last_event_at\": null,\n  \"status\": \"waiting\",\n  \"checked_at\": \"2026-10-08T12:00:00.000Z\",\n  \"meaning\": \"This checks records received by Attriboo. It does not inspect your published code, prove a deployment, or verify a payment connection.\"\n}"
    }
  ]
}
```

Path parameter site is a website ID or domain. Requires setup OAuth and workspace owner/admin access.

waiting and paused are not successful tracking checks. This endpoint does not inspect deployed code or verify payment connections.

## get_changelog

Read Attriboo's release notes, newest first, through an authenticated MCP connection.

Access: Report OAuth or workspace key

### Arguments

- limit: Maximum entries. Default: 30.

### Read recent release notes

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_changelog",
    "arguments": {
      "limit": 5
    }
  }
}
```

Decoded result:

```json
[
  {
    "date": "2026-10-01",
    "category": "New",
    "title": "Example release",
    "summary": null
  }
]
```

### Result fields

- result[]: Newest release notes first.
  - date: Release date, YYYY-MM-DD.
  - category: New, Improved or Fixed.
  - title: Release title.
  - summary: Optional release detail.

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "[\n  {\n    \"date\": \"2026-10-01\",\n    \"category\": \"New\",\n    \"title\": \"Example release\",\n    \"summary\": null\n  }\n]"
    }
  ]
}
```

Even public release notes require an authenticated MCP connection. The REST changelog endpoint can be read without authentication.

Returns an array with date, category, title and summary. It does not include the REST changelog link field.

## search_help_articles

Find public help articles by words in their title, summary, keywords or Markdown content.

Access: Report OAuth or workspace key

### Arguments

- query: Words to find. Omit or send an empty string to list all articles.

### Search installation help

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_help_articles",
    "arguments": {
      "query": "installation"
    }
  }
}
```

Decoded result:

```json
[
  {
    "slug": "installation",
    "category": "installation",
    "title": "Install Attriboo on your website",
    "summary": "Choose the matching platform installation guide.",
    "reviewed_at": "2026-10-31",
    "url": "https://www.attriboo.com/docs/installation",
    "markdown_url": "https://www.attriboo.com/docs/markdown/installation.md"
  }
]
```

### Result fields

- result[]: Matching article summaries.
  - slug: Exact help article slug.
  - category: Help category identifier.
  - title: Article title.
  - summary: Short description.
  - reviewed_at: Reviewed date or null; not a fabricated modification timestamp.
  - url: Canonical public HTML page.
  - markdown_url: Public Markdown URL.

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "[\n  {\n    \"slug\": \"installation\",\n    \"category\": \"installation\",\n    \"title\": \"Install Attriboo on your website\",\n    \"summary\": \"Choose the matching platform installation guide.\",\n    \"reviewed_at\": \"2026-10-31\",\n    \"url\": \"https://www.attriboo.com/docs/installation\",\n    \"markdown_url\": \"https://www.attriboo.com/docs/markdown/installation.md\"\n  }\n]"
    }
  ]
}
```

All search words must match; matching is case-insensitive. Returns a list of slug, category, title, summary, reviewed_at, url and markdown_url.

Use a returned slug with get_help_article. Reviewed dates can be null. The response example illustrates the shape rather than a guaranteed current search result.

## get_help_article

Retrieve one complete help article as Markdown using a returned slug.

Access: Report OAuth or workspace key

### Arguments

- slug (required): Exact article slug returned by search_help_articles.

### Read an installation guide

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_help_article",
    "arguments": {
      "slug": "installation"
    }
  }
}
```

Decoded result:

```json
{
  "slug": "installation",
  "category": "installation",
  "title": "Install Attriboo on your website",
  "summary": "Choose the matching platform installation guide.",
  "content_markdown": "# Install Attriboo on your website\n\nThe complete guide is returned here.",
  "reviewed_at": "2026-10-31",
  "url": "https://www.attriboo.com/docs/installation",
  "markdown_url": "https://www.attriboo.com/docs/markdown/installation.md"
}
```

### Result fields

- slug: Exact help article slug.
- category: Help category identifier.
- title: Article title.
- summary: Short description.
- reviewed_at: Reviewed date or null; not a fabricated modification timestamp.
- url: Canonical public HTML page.
- markdown_url: Public Markdown URL.
- content_markdown: Full article Markdown, with code, tables, images and links preserved.

### MCP result wrapper

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"slug\": \"installation\",\n  \"category\": \"installation\",\n  \"title\": \"Install Attriboo on your website\",\n  \"summary\": \"Choose the matching platform installation guide.\",\n  \"content_markdown\": \"# Install Attriboo on your website\\n\\nThe complete guide is returned here.\",\n  \"reviewed_at\": \"2026-10-31\",\n  \"url\": \"https://www.attriboo.com/docs/installation\",\n  \"markdown_url\": \"https://www.attriboo.com/docs/markdown/installation.md\"\n}"
    }
  ]
}
```

Returns slug, category, title, summary, content_markdown, reviewed_at, url and markdown_url. The Markdown example is shortened for readability; actual content_markdown contains the full guide.

An unknown slug returns isError: true with a readable message. Help content is also available publicly through the HTML and Markdown help pages.
