← ClicsCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Clics
Snapshot Sep 30, 2026 · 22:55 UTC · version 2.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "chatgpt",
"description": "Use Clics through the remote MCP connector in ChatGPT. Use when a user wants ChatGPT to query Clics analytics, inspect or manage Clics projects, goals, funnels, sessions, AI crawler activity, or set up browser and AI crawler tracking from a connected Clics workspace.",
"included_files": [],
"skill_md_contents": "---\nname: chatgpt\ndescription: Use Clics through the remote MCP connector in ChatGPT. Use when a user wants ChatGPT to query Clics analytics, inspect or manage Clics projects, goals, funnels, sessions, AI crawler activity, or set up browser and AI crawler tracking from a connected Clics workspace.\n---\n\n# ChatGPT Clics Remote MCP\n\nUse the Clics remote MCP connector in ChatGPT.\n\n## Connection\n\nThe remote MCP endpoint is:\n\n```txt\nhttps://api.clics.dev/v1/mcp\n```\n\nIn ChatGPT, the user connects Clics from Plugins or Connectors, signs in to\nClics, and selects a workspace.\n\nConfirm the connected tool list before calling a tool. If the connector is not\nconnected, ask the user to connect Clics in ChatGPT first.\n\n## Tool Workflow\n\nStart with `list_projects` unless the user already gave a `project_id`.\n\nUse project tools before analytics tools:\n\n1. Resolve the project with `list_projects` or `get_project`.\n2. If there is no project, follow Empty Workspace Setup.\n3. Use goals, funnels, sessions, stats, or AI crawler tools against that project.\n4. Report the project name or `project_id`, date range, filters, and environment.\n\n## Tools\n\n### Projects\n\nUse projects to choose the analytics scope and to set up tracking.\n\n| Tool | Use it for | Main input |\n| --- | --- | --- |\n| `list_projects` | List workspace projects. Call this first when no project is known. | none |\n| `get_project` | Inspect one project. | `project_id` |\n| `create_project` | Create a project for a new site. | `name`, `website_url`, optional `allow_localhost` |\n| `update_project` | Rename a project or update its domain/dev setting. | `project_id`, optional `name`, `website_url`, `allow_localhost` |\n| `delete_project` | Delete a project. Confirm intent first because analytics data is tied to it. | `project_id` |\n\nExample:\n\n```json\n{\n \"name\": \"Acme\",\n \"website_url\": \"https://acme.com\",\n \"allow_localhost\": true\n}\n```\n\n### Goals\n\nUse goals to track conversions.\n\n| Tool | Use it for | Main input |\n| --- | --- | --- |\n| `list_goals` | List goals for a project. | `project_id` |\n| `create_goal` | Create a conversion goal. | `project_id`, `env_id`, `goal_type`, `display_name`, `rule` |\n| `update_goal` | Update a goal. | `goal_id`, optional `display_name`, `goal_type`, `rule` |\n| `delete_goal` | Delete a goal. | `goal_id` |\n\nGoal types and rules:\n\n| Type | Rule |\n| --- | --- |\n| `page` | `{ \"page_path\": \"/signup\" }` |\n| `event` | `{ \"event_name\": \"purchase\" }` |\n| `outbound` | `{ \"outbound_url\": \"https://partner.example.com/signup\" }` |\n| `scroll_depth` | `{ \"page_path\": \"/pricing\", \"scroll_depth_threshold\": 75 }` |\n\n### Funnels\n\nUse funnels to measure ordered conversion paths.\n\n| Tool | Use it for | Main input |\n| --- | --- | --- |\n| `list_funnels` | List funnels for a project. | `project_id` |\n| `get_funnel` | Inspect one funnel definition. | `funnel_id` |\n| `create_funnel` | Create a funnel with ordered steps. | `project_id`, `name`, `steps`, optional conversion window and filters |\n| `update_funnel` | Update a funnel definition. | `funnel_id`, optional `name`, `conversion_window`, `steps` |\n| `delete_funnel` | Delete a funnel. | `funnel_id` |\n\nFunnel conversion window units:\n\n```txt\nseconds, minutes, hours, days, weeks, months\n```\n\nFunnel filter fields:\n\n```txt\ncountry, device, browser, os, page, event, hostname, referrer,\nutm_source, utm_medium, utm_campaign, utm_term, utm_content\n```\n\nFunnel filter operators:\n\n```txt\nis, is_not, contains, not_contains\n```\n\n### Sessions\n\nUse sessions to inspect individual visits and their events.\n\n| Tool | Use it for | Main input |\n| --- | --- | --- |\n| `list_sessions` | List recent sessions with optional domain, date range, and pagination. | `project_id`, optional `domain`, `date_range`, `start`, `end`, `cursor`, `limit` |\n| `get_session` | Inspect one session. | `project_id`, `session_id` |\n| `list_session_events` | List events in one session. | `project_id`, `session_id` |\n\n### Stats\n\nUse `query_stats` for dashboard-style analytics.\n\nMain input:\n\n- `project_id`: required Clics project ID.\n- `metrics`: required non-empty array of metric enums.\n- `date_range`: required period preset string, or `[start, end]` ISO8601 pair.\n- `domain`: optional domain filter. Schemes, paths, and ports are stripped by the API. Omit it for all production domains, or pass `localhost` for development traffic.\n- `timezone`: optional IANA timezone. Defaults to `UTC`.\n- `dimensions`: optional grouping. Use one time dimension, or up to two non-time breakdown dimensions.\n- `filters`: optional tuples in `[operator, dimension, values]` format.\n- `order_by`: optional tuples in `[field, direction]` format.\n- `include`: optional object with `previous_period` and `total_rows`.\n- `pagination`: optional object with `limit` and `offset`.\n\nMetrics:\n\n```txt\nvisitors, visits, pageviews, bounce_rate, visit_duration,\nviews_per_visit, conversion_rate, events\n```\n\nKPI and time-series metrics:\n\n```txt\nvisitors, visits, pageviews, bounce_rate, visit_duration, views_per_visit\n```\n\nBreakdown metrics:\n\n```txt\nvisitors, pageviews, conversion_rate, events\n```\n\nDimensions:\n\n```txt\nevent:page, event:hostname, event:name, event:outbound_url,\nvisit:country, visit:device, visit:browser, visit:os, visit:referrer,\nreferrer:ai_provider,\nvisit:utm_source, visit:utm_medium, visit:utm_campaign, visit:utm_term,\nvisit:utm_content,\ntime, time:hour, time:day\n```\n\nTime dimension presets:\n\n```txt\ntime, time:hour, time:day\n```\n\nUse only one time dimension at a time. Do not combine a time dimension with\nbreakdown dimensions.\n\nFilter-only dimension:\n\n```txt\nevent:goal\n```\n\nStats filter operators:\n\n```txt\nis, is_not, contains, contains_not\n```\n\nStats filter shape:\n\n```json\n[\"is\", \"visit:country\", [\"US\", \"FR\"]]\n```\n\nThe first item is the operator, the second item is a filter dimension, and the\nthird item is a string array of accepted values.\n\nStats filter dimensions:\n\n```txt\nevent:page, event:hostname, event:goal, event:name, event:outbound_url,\nvisit:country, visit:device, visit:browser, visit:os, visit:referrer,\nreferrer:ai_provider,\nvisit:utm_source, visit:utm_medium, visit:utm_campaign, visit:utm_term,\nvisit:utm_content\n```\n\nStats order shape:\n\n```json\n[\"visitors\", \"desc\"]\n```\n\nThe first item is any metric or query dimension. The second item is `asc` or\n`desc`.\n\nStats include shape:\n\n```json\n{\n \"previous_period\": true,\n \"total_rows\": true\n}\n```\n\n`previous_period` is useful for KPI queries without dimensions. `total_rows` is\nuseful with paginated breakdowns.\n\nStats pagination shape:\n\n```json\n{\n \"limit\": 50,\n \"offset\": 0\n}\n```\n\n`limit` must be between 1 and 1000. `offset` must be 0 or greater.\n\nExample:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"date_range\": \"last7days\",\n \"metrics\": [\"visitors\", \"pageviews\"],\n \"dimensions\": [\"time:day\"],\n \"timezone\": \"Europe/Paris\"\n}\n```\n\n### AI Crawler Analytics\n\nUse `get_ai_crawler_analytics` to inspect AI crawler activity. AI crawler\nanalytics are production-only; use no environment argument.\n\nMain input:\n\n- `project_id`\n- optional `date_range`\n- optional `timezone`\n- optional filters: `category`, `provider`, `crawler`, `status`\n- optional operators: `provider_op`, `crawler_op`, `status_op`\n\nAI crawler categories:\n\n```txt\nanswer_fetch, search_index, training\n```\n\nAI crawler filter operators:\n\n```txt\nis, is_not\n```\n\nAI crawler providers:\n\n```txt\nOpenAI, Anthropic, Perplexity, Google, Microsoft, Mistral, Amazon,\nDuckDuckGo, Apple, Moonshot AI, Common Crawl\n```\n\nAI crawlers:\n\n```txt\nChatGPT-User, OAI-SearchBot, GPTBot,\nClaude-User, Claude-SearchBot, ClaudeBot,\nPerplexity-User, PerplexityBot,\nGoogle-Agent, Google-GeminiNotebook, Google-NotebookLM,\nGoogle-Read-Aloud, Google-InspectionTool, Googlebot, GoogleOther,\nGoogle-CloudVertexBot,\nBingbot, msnbot,\nMistralAI-User, MistralAI-Index,\nAmzn-User, Amzn-SearchBot, Amazonbot,\nDuckAssistBot,\nApplebot,\nKimi-User, Kimi-SearchBot, KimiBot,\nCCBot\n```\n\nExample:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"date_range\": \"last30days\",\n \"timezone\": \"Europe/Paris\",\n \"provider\": \"OpenAI\",\n \"provider_op\": \"is\",\n \"category\": \"answer_fetch\"\n}\n```\n\n## Input Shapes\n\nThese examples mirror the remote MCP tool schemas. Use the live tool schema as\nthe final source of truth if ChatGPT shows a field-level schema.\n\n### Project Inputs\n\n`list_projects` accepts optional pagination:\n\n```json\n{\n \"limit\": 20,\n \"cursor\": \"next_cursor\"\n}\n```\n\n`get_project` and `delete_project`:\n\n```json\n{\n \"project_id\": \"project_123\"\n}\n```\n\n`create_project`:\n\n```json\n{\n \"name\": \"Acme Marketing\",\n \"website_url\": \"example.com\",\n \"allow_localhost\": false\n}\n```\n\n`update_project` requires `project_id` and at least one field to change:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"name\": \"Acme\",\n \"website_url\": \"acme.com\",\n \"allow_localhost\": true\n}\n```\n\n### Goal Inputs\n\n`list_goals`:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"env_id\": \"production\"\n}\n```\n\n`create_goal` uses `display_name` and `goal_type`:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"env_id\": \"production\",\n \"display_name\": \"Signup\",\n \"goal_type\": \"page\",\n \"rule\": {\n \"page_path\": \"/signup\"\n }\n}\n```\n\n`update_goal` does not take `project_id`. Pass `goal_id` and at least one field:\n\n```json\n{\n \"goal_id\": \"goal_123\",\n \"display_name\": \"Trial signup\",\n \"rule\": {\n \"page_path\": \"/thank-you\"\n }\n}\n```\n\n`delete_goal`:\n\n```json\n{\n \"goal_id\": \"goal_123\"\n}\n```\n\n### Funnel Inputs\n\n`list_funnels` accepts optional pagination:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"env_id\": \"production\",\n \"limit\": 20,\n \"cursor\": \"next_cursor\"\n}\n```\n\n`get_funnel` and `delete_funnel` use only `funnel_id`:\n\n```json\n{\n \"funnel_id\": \"funnel_123\"\n}\n```\n\n`create_funnel` requires at least two ordered steps. Each step needs a name and\nat least one filter:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"env_id\": \"production\",\n \"name\": \"Checkout\",\n \"conversion_window\": {\n \"value\": 7,\n \"unit\": \"days\"\n },\n \"steps\": [\n {\n \"name\": \"Cart\",\n \"filters\": [\n {\n \"filter_type\": \"page\",\n \"operator\": \"is\",\n \"values\": [\"/cart\"]\n }\n ]\n },\n {\n \"name\": \"Purchase\",\n \"filters\": [\n {\n \"filter_type\": \"page\",\n \"operator\": \"is\",\n \"values\": [\"/thanks\"]\n }\n ]\n }\n ]\n}\n```\n\n`update_funnel` does not take `project_id`. Pass `funnel_id` and at least one\nfield:\n\n```json\n{\n \"funnel_id\": \"funnel_123\",\n \"name\": \"Updated checkout\"\n}\n```\n\n### Session Inputs\n\n`list_sessions`:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"domain\": \"example.com\",\n \"date_range\": \"last7days\",\n \"limit\": 20,\n \"cursor\": \"next_cursor\"\n}\n```\n\nFor a custom session range, pass both `start` and `end`; when both are set,\n`date_range` is ignored:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-03\"\n}\n```\n\n`get_session` and `list_session_events`:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"session_id\": \"session_123\",\n \"date_range\": \"allTime\"\n}\n```\n\n### Stats Inputs\n\n`query_stats` takes the full stats request body. `date_range` is either a\npreset string or a two-item `[start, end]` ISO8601 array.\n\nComplete accepted input fields:\n\n```txt\nproject_id, domain, timezone, metrics, date_range, dimensions, filters,\norder_by, include, pagination\n```\n\nStats date range presets:\n\n```txt\nlast24h, last7days, last30days, last3months, last12months,\nmonthToDate, quarterToDate, yearToDate, allTime\n```\n\nStats time dimension presets:\n\n```txt\ntime, time:hour, time:day\n```\n\nUse `time:hour` for hourly series, `time:day` for daily series, and `time`\nonly when the dashboard-level aggregate time bucket is wanted. Do not combine\nthese with country/device/page/referrer/event breakdown dimensions.\n\nKPI query:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"domain\": \"example.com\",\n \"timezone\": \"Europe/Paris\",\n \"metrics\": [\"visitors\", \"pageviews\", \"bounce_rate\"],\n \"date_range\": \"last30days\",\n \"include\": {\n \"previous_period\": true\n }\n}\n```\n\nTime-series query:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"timezone\": \"Europe/Paris\",\n \"metrics\": [\"visitors\", \"visits\", \"pageviews\"],\n \"date_range\": \"last7days\",\n \"dimensions\": [\"time:day\"],\n \"order_by\": [[\"time:day\", \"asc\"]]\n}\n```\n\nBreakdown query with filters, sort, and pagination:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"metrics\": [\"visitors\", \"pageviews\"],\n \"date_range\": [\"2026-09-01T00:00:00Z\", \"2026-09-03T23:59:59Z\"],\n \"dimensions\": [\"visit:country\"],\n \"filters\": [[\"is\", \"visit:device\", [\"desktop\"]]],\n \"order_by\": [[\"visitors\", \"desc\"]],\n \"pagination\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}\n```\n\n### AI Crawler Inputs\n\n`get_ai_crawler_analytics` uses production implicitly. `provider` and `crawler`\nmay be a single enum value or a non-empty array of enum values. Use\n`provider_op`, `crawler_op`, and `status_op` for filter operators.\n\n```json\n{\n \"project_id\": \"project_123\",\n \"date_range\": \"last30days\",\n \"timezone\": \"Europe/Paris\",\n \"category\": \"answer_fetch\",\n \"provider\": [\"OpenAI\", \"Anthropic\"],\n \"provider_op\": \"is\",\n \"crawler\": \"GPTBot\",\n \"crawler_op\": \"is_not\",\n \"status\": \"200\",\n \"status_op\": \"is\",\n \"breakdown_limit\": 50,\n \"filter_values_limit\": 200\n}\n```\n\nFor a custom AI crawler range, pass `start` and `end`:\n\n```json\n{\n \"project_id\": \"project_123\",\n \"start\": \"2026-09-01T00:00:00Z\",\n \"end\": \"2026-09-03T23:59:59Z\"\n}\n```\n\n## Shared Presets\n\nEnvironment values:\n\n```txt\nproduction, development\n```\n\n`env_id` is used by goals and funnels. Default to `production` when the user\ndoes not specify an environment. `query_stats` does not take `env_id`; use its\n`domain` field, or pass `localhost` as the domain for development traffic.\n\nDate range presets:\n\n```txt\nlast24h, last7days, last30days, last3months, last12months,\nmonthToDate, quarterToDate, yearToDate, allTime\n```\n\nFor a custom range, pass the explicit start and end dates in the format expected\nby the tool schema.\n\nTimezone values are IANA timezones, for example:\n\n```txt\nUTC, Europe/Paris, Europe/London, America/New_York, America/Los_Angeles\n```\n\n## Empty Workspace Setup\n\nStart by calling `list_projects` when the user asks to inspect analytics and no\nproject is known. If the workspace has no projects, pause analytics work and\nask the user for:\n\n- project name\n- production website domain\n- whether localhost tracking should be allowed for development\n\nCreate the project with `create_project`. After creation, use the returned\n`project_id` in the setup instructions.\n\n## Browser Tracking Setup\n\nAfter creating the project, help the user install browser tracking. Read:\n\n```txt\nhttps://docs.clics.dev/installation-guides\n```\n\nChoose the section that matches the user's framework. If the framework or entry\nfile is unclear, ask where the app shell, root layout, or HTML head lives.\n\nGive the user the browser tracking snippet with the real `project_id` already\nfilled in:\n\n```html\n<script\n defer\n data-project-id=\"<project_id>\"\n src=\"https://clics.dev/tracker.js\"\n></script>\n```\n\nFor Next.js, use the same `project_id` in `next/script`:\n\n```tsx\n<Script\n strategy=\"afterInteractive\"\n src=\"https://clics.dev/tracker.js\"\n data-project-id=\"<project_id>\"\n/>\n```\n\nHelp the user place the snippet in the correct file, then tell them to open the\nsite and check the Clics dashboard for the first pageview.\n\n## AI Crawler Tracking Setup\n\nAI crawler analytics uses a separate server-side setup. Read:\n\n```txt\nhttps://docs.clics.dev/installation-guides/ai-crawler-tracking\n```\n\nIdentify the section for the user's runtime, such as Next.js, TanStack Start,\nHono, Express, Cloudflare, or a generic Fetch handler. Help the user add the\nserver-side tracking code and the required project-scoped crawler token.\n\nUse `get_ai_crawler_analytics` after setup to verify crawler activity when data\nis available. Report that AI crawler analytics are production-only.\n\n## Reporting\n\nWhen reporting analytics, state:\n\n- project used\n- date range\n- timezone when provided\n- filters applied\n- environment when the tool accepts `env_id`\n- domain when the tool accepts `domain`\n- for AI crawler analytics, production is implied\n\nWhen a result is empty, say whether the workspace has no project, the project\nhas no data for that date range, or the filters removed all rows.\n"
}SHA-256: c17c34c1b78e8c9af2968577013d96696f238643e4edfaa91962ad9fddc21d7f