{"article":{"id":26998738930972,"url":"https://countly.zendesk.com/api/v2/help_center/en-us/articles/26998738930972.json","html_url":"https://support.countly.com/hc/en-us/articles/26998738930972-Connecting-Countly-to-your-AI-Assistant","author_id":11350148999193,"comments_disabled":true,"draft":false,"promoted":true,"position":0,"vote_sum":0,"vote_count":0,"section_id":360007309132,"created_at":"2026-04-23T17:39:19Z","updated_at":"2026-08-25T16:24:14Z","name":"Connecting Countly to your AI Assistant","title":"Connecting Countly to your AI Assistant","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2026-08-25T16:24:14Z","user_segment_id":null,"permission_group_id":2891852,"content_tag_ids":[],"label_names":[],"body":"<p>You can use Countly with Claude Desktop or VS Code + GitHub Copilot so your AI assistant can work with real analytics, events, crashes, and dashboards.</p><p>Once connected, you can ask things like: </p><ul>\n<li class=\"ck-list-marker-italic\" data-list-item-id=\"e56d39f5013e8890454437221b1c6cee7\"><em>“Show me top events for my app this week.” </em></li>\n<li class=\"ck-list-marker-italic\" data-list-item-id=\"ed04e1f58b9a0999188c3b018089b008d\"><em>“Analyze this code and suggest what I should track.” </em></li>\n<li class=\"ck-list-marker-italic\" data-list-item-id=\"ed987fce660a296378dbdc1a856988de7\"><em>“Which button placement drives better conversion?”</em></li>\n</ul><p>To get more ideas on what you can do check <a href=\"#h_01KPXYCTQZ22FMDQTCCYP6TZPA\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>.</p><p>This article guides you to achieve this by setting up the <strong>Countly MCP Server</strong>.</p><h1 id=\"h_01KPXPTCCD00QQ6Q2AMS4BV7EM\">Getting Started</h1><style>\n  .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n  .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n  .browser-table { width: 100% !important; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n  .browser-table th { text-align: center !important; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n  .browser-table th:first-child { border-radius: 6px 0 0 0; }\n  .browser-table th:last-child { border-radius: 0 6px 0 0; }\n  .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n  .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n  .browser-table td:first-child { border-left: none !important; }\n  .browser-table td:last-child { border-right: none !important; }\n</style>\n<div class=\"callout callout--info\">\n  <p>\n    <strong>Privacy is at our core.</strong> For that reason, if you’re connecting\n    an AI assistant to your Countly data,\n    we recommend using a self-hosted Countly instance alongside a self-hosted\n    or on-premise LLM. If you use a cloud-based AI assistant like Claude Desktop\n    or GitHub Copilot, be aware that your queries will pass through that provider’s\n    infrastructure and ensure this aligns with your data policy.\n  </p>\n</div><p>You'll need the following to get started:</p><ul><li data-list-item-id=\"e10a495a7bccbecd06963e71140c6aef7\">A <strong>Countly auth token</strong>, which you can create via our <strong>Token Manager </strong>on your Countly server <ul>\n<li data-list-item-id=\"e1d17073f50b8b792cdbd9cd4151f6b41\">Check <a href=\"https://support.countly.com/hc/en-us/articles/15331695235481-Navigating-Through-Countly-Dashboard#h_01GRP82V1YQ8K29Q94KZMAK3SG\" target=\"_blank\" rel=\"noopener noreferrer\">this guide</a> for creating a token</li>\n<li data-list-item-id=\"e7718686068624f16161a1e4e843abf33\">For simplest use case configure token for all <strong>endpoints</strong>, <strong>multiple times</strong> and <strong>never expire</strong>.</li>\n</ul>\n</li></ul><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style><div class=\"callout callout--info\"><p>If you know what you want to do, you can limit the token to a <strong>specific endpoint</strong> only (Events, Crashes etc.)<br>If you set an expiration, you will need to create a new token later and update your configuration.</p></div><ul><li data-list-item-id=\"ea05a08a19037eb73ff26f07fc36715e8\">You'll need to have <strong>Node.js</strong> installed <em><strong>(one-time setup)</strong></em> <ul><li data-list-item-id=\"e206507d313d8e95dbdff524279a22c22\">Check <a href=\"https://nodejs.org/en/download\" target=\"_blank\" rel=\"noopener noreferrer\">official instructions</a> to download Node.js</li></ul>\n</li></ul><h2 id=\"h_01KPXQMPNNSHC67B0ST5MFSMZ2\">Self-hosted Countly Users</h2><p>If you use <strong>self-hosted Countly, </strong>we suggest <strong>running MCP locally</strong> or <strong>inside your own infrastructure</strong>. This prevents you from sending your Countly URL and token to external services. </p><h1 id=\"h_01KPXQZZ1SZBVWTXAHPHPG2PXP\">Claude Desktop</h1><p>Claude Desktop is the easiest way to get started. Follow the step-by-step guide below.</p><h2 id=\"h_01KPXS4N6Y48QQTDGA6WR1V2PK\"><strong>Step 1: Open the MCP configuration</strong></h2><p><strong>Option A </strong><em><strong>(recommended)</strong></em><strong>: </strong></p><p>In <strong>Claude Desktop</strong>, go to <em><strong>Settings</strong></em> -&gt; <em><strong>Developer</strong></em> -&gt; <em><strong>Local MCP Servers</strong></em> -&gt; click <em><strong>Edit Config</strong></em><strong>:</strong></p><figure class=\"wysiwyg-image wysiwyg-image-resized\" style=\"width: 80.91%;\"><p><img src=\"https://support.countly.com/hc/article_attachments/26999174200604\" width=\"1185\" height=\"631\"></p></figure><p><strong>Option B </strong><em><strong>(manual)</strong></em><strong>: </strong>open the following file: </p><p><strong>macOS: </strong></p><pre>~/Library/Application Support/Claude/claude_desktop_config.json</pre><p><strong>Windows: </strong></p><pre>%APPDATA%\\Claude\\claude_desktop_config.json</pre><h2 id=\"h_01KPXS4N6Y7099B5HT2ZZCGMQR\"><strong>Step 2: Adding Countly MCP </strong></h2><p><strong>If your config is empty</strong>, paste the following: </p><pre>{\n \"mcpServers\": {\n   \"countly\": {\n     \"command\": \"npx\",\n     \"args\": [\"-y\", \"--prefer-online\", \"countly-mcp-server@latest\"],\n     \"env\": {\n       \"COUNTLY_SERVER_URL\": \"https://your-countly-url.com\",\n       \"COUNTLY_AUTH_TOKEN\": \"YOUR_TOKEN\"\n     }\n   }\n }\n}</pre><p><strong>If you already have other MCP Servers</strong>, just <strong>add Countly inside the existing mcpServers</strong> object. For example:</p><pre>{\n \"mcpServers\": {\n   \"existing-server\": {\n     \"command\": \"...\"\n   },\n   \"countly\": {\n     \"command\": \"npx\",\n     \"args\": [\"-y\", \"--prefer-online\", \"countly-mcp-server@latest\"],\n     \"env\": {\n       \"COUNTLY_SERVER_URL\": \"https://your-countly-url.com\",\n       \"COUNTLY_AUTH_TOKEN\": \"YOUR_TOKEN\"\n     }\n   }\n }\n}</pre><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style><div class=\"callout callout--info\"><p>Replace the <em><strong>https://your-countly-url.com</strong></em><strong> </strong>with your actual Countly URL<strong>, </strong>and <em><strong>YOUR_TOKEN</strong></em> with your Countly auth token and save the file</p></div><h2 id=\"h_01KPXS6TGJMTA3CQQ5XB2NS0SN\"><strong>Step 3: Restart Claude Desktop</strong></h2><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style><div class=\"callout callout--info\"><p><strong class=\"callout__title\">Important: </strong><strong>Fully quit Claude </strong><em><strong>(not just close the window)</strong></em><strong>, then re-open it.</strong></p></div><p>Once reopened, <strong>you</strong> <strong>should see the Countly MCP server now listed</strong>, as shown in the screenshot below:</p><figure class=\"wysiwyg-image wysiwyg-image-resized\" style=\"width: 88.79%;\"><p><img src=\"https://support.countly.com/hc/article_attachments/26999603317148\" width=\"1562\" height=\"630\"></p></figure><h2 id=\"h_01KPXSHMPBQEZJ15AQRXT6C24D\"><strong>Step 4: Verify it works</strong></h2><p>Open a new <em>(or existing) </em>chat, click on the <img src=\"https://support.countly.com/hc/article_attachments/26999720436892\" alt=\"heavy plus sign emoji\" width=\"1\" height=\"1\"><img src=\"https://support.countly.com/hc/article_attachments/26999720436892\" alt=\"heavy plus sign emoji\" width=\"1\" height=\"1\">➕ <em>(plus)</em> icon, and you should see Countly tools listed, like in the screenshot below: </p><figure class=\"wysiwyg-image wysiwyg-image-resized\" style=\"width: 84.52%;\"><p><img src=\"https://support.countly.com/hc/article_attachments/26999680015900\" width=\"966\" height=\"557\"></p></figure><p>You can now try asking questions like <em><strong>\"List my Countly apps\"</strong></em>.  If you get a response, it means the <strong>Countly</strong> <strong>MCP Server was successfully set up</strong>!</p><figure class=\"wysiwyg-image wysiwyg-image-resized\" style=\"width: 83.64%;\"><p><img src=\"https://support.countly.com/hc/article_attachments/27000531869212\" width=\"928\" height=\"308\"></p></figure><h1 id=\"h_01KPXV0XTXWEA13GVQCAD8AQ05\">VS Code + GitHub Copilot</h1><h2 id=\"h_01KPXZGPTWWRWTEVA02EQA2D0X\">Step 1: Open the MCP config file</h2><p>Open <strong>VS Code</strong> and open the <strong>Command Palette, </strong>select <strong>Show and Run Commands:</strong></p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27020599821852\" width=\"639\" height=\"113\"></p></figure><p>Run: <strong>MCP: Open User Configuration, </strong>like in the example below: </p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001478364444\" width=\"1332\" height=\"269\"></p></figure><p>This will open the <strong>mcp.json </strong>file, where you can add the Countly config described in the next step.</p><h2 id=\"h_01KPXZGY5201BVD99W6EMRXXKA\">Step 2: Add Countly config</h2><pre>{\n \"servers\": {\n   \"countly\": {\n     \"type\": \"stdio\",\n     \"command\": \"npx\",\n     \"args\": [\"-y\", \"--prefer-online\", \"countly-mcp-server@latest\"],\n     \"env\": {\n       \"COUNTLY_SERVER_URL\": \"https://your-countly-url.com\",\n       \"COUNTLY_AUTH_TOKEN\": \"YOUR_TOKEN\"\n     }\n   }\n }\n}</pre><h2 id=\"h_01KPXZH76QX3XR0MX2H1VDGNW7\">Step 3: Verify it works</h2><p>Verify that the configuration was set completely. </p><p>Run: <strong>MCP: Show Installed Servers </strong>from your <strong>Command Palette:</strong></p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001729680796\" width=\"879\" height=\"84\"></p></figure><p>You should see \"Countly\" installed, like in the screenshot below:</p><figure class=\"wysiwyg-image wysiwyg-image-resized\" style=\"width: 83.79%;\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001715617180\" width=\"915\" height=\"571\"></p></figure><p>Run: <strong>MCP: List Servers </strong>from your <strong>Command Palette </strong>to check the Countly server's status: </p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001729683996\" width=\"864\" height=\"93\"></p></figure><p>If you see that the <strong>countly</strong> server is <strong>\"stopped\"</strong>: </p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001715617564\" width=\"851\" height=\"39\"></p></figure><p>Click on <strong>countly</strong> and <strong>\"Start Server\"</strong>: </p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001729684380\" width=\"872\" height=\"223\"></p></figure><p>Once started, in your VS Code's output console, you should see the logs similar to the following: </p><pre>2026-04-23 15:11:28.252 [info] Starting server countly\n2026-04-23 15:11:28.253 [info] Connection state: Starting\n2026-04-23 15:11:28.254 [info] Starting server from LocalProcess extension host\n2026-04-23 15:11:28.254 [info] Connection state: Starting\n2026-04-23 15:11:28.254 [info] Connection state: Running</pre><p>Now that the Countly MCP server is running, you can try <span style=\"color: #188038;\"><strong>@countly list my apps</strong> </span>on your <strong>GitHub Copilot chat</strong> inside VS Code: </p><figure class=\"wysiwyg-image\"><p><img src=\"https://support.countly.com/hc/article_attachments/27001736401308\" width=\"1538\" height=\"433\"></p></figure><h1 id=\"h_01KPXYHTEHYVZ9RZXX62NW3HC9\">Advanced Configuration</h1><p>By default, the MCP server exposes the tools available for your Countly instance and token permissions.</p><p>You can <strong>add extra restrictions</strong> to the MCP server configuration using <span style=\"color: #188038;\"><strong>COUNTLY_TOOLS_*</strong></span><strong> environment variables.</strong></p><p>This is useful when you want the AI assistant to: </p><ul>\n<li data-list-item-id=\"e2d7cbca036736d0ec758f1a4f1a443af\">only read data</li>\n<li data-list-item-id=\"e8cd580d830b8bd4fca555bb97a06c13c\">create notes or alerts, but do not delete anything</li>\n<li data-list-item-id=\"e1abde9eadd8031ad0e8b0b5ddf823fb0\">access analytics, but not users or database tools</li>\n<li data-list-item-id=\"e6bdfc62d03117df6e34a128e217109bc\">use broader token permissions, while limiting what MCP exposes</li>\n</ul><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style><div class=\"callout callout--info\"><p>All additional restrictions you add must be placed under the <strong>env section</strong> of your <strong>MCP config file</strong>; this applies to both the Claude Desktop and the VSCode + GitHub Pilot options.</p></div><h2 id=\"h_01KQ02NMGAA6RNC35EXA2ECPYS\">CRUD Permission Values</h2><p>You can change the CRUD permissions the AI can perform. </p><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style>\n  <figure class=\"wysiwyg-table\" style=\"width: 100%;\">\n    <table class=\"browser-table table--color-header\" style=\"margin-left: 0px; margin-right: auto;\">\n      <thead>\n        <tr>\n          <th>Value</th>\n          <th>Meaning</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td>None</td>\n          <td>Disable tools</td>\n        </tr>\n        <tr>\n          <td>R</td>\n          <td>Read only</td>\n        </tr>\n        <tr>\n          <td>CR </td>\n          <td>Create + Read</td>\n        </tr>\n        <tr>\n          <td>CRU</td>\n          <td>Create + Read + Update</td>\n        </tr>\n        <tr>\n          <td>CRUD</td>\n          <td>Create + Read + Update + Delete</td>\n        </tr>\n      </tbody>\n    </table>\n  </figure><p>For example, you can add <span style=\"color: #188038;\"><strong>\"COUNTLY_TOOLS_ALL\": \"R\"</strong></span> to allow read-only access. </p><p>You'll need to add this under the <strong>env </strong>section<strong> </strong>on the MCP's config file:</p><pre>{\n\"servers\": {\n  \"countly\": {\n    \"type\": \"stdio\",\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"--prefer-online\", \"countly-mcp-server@latest\"],\n    \"env\": {\n      \"COUNTLY_SERVER_URL\": \"https://your-countly-url.com\",\n      \"COUNTLY_AUTH_TOKEN\": \"YOUR_TOKEN\",\n      \"COUNTLY_TOOLS_ALL\": \"R\"\n    }\n  }\n}\n}</pre><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style><div class=\"callout callout--info\">\n<h5 id=\"h_01KQ03FQYZR6CSDSFMP9BW2YPS\"><strong class=\"callout__title\">Apply One Rule to Everything</strong></h5>\n<p>To make all MCP tools <strong>read-only</strong>: <span style=\"color: #188038;\"><strong>\"COUNTLY_TOOLS_ALL\": \"R\", </strong></span><br>To <strong>disable</strong> all MCP tools by <strong>default</strong>: <span style=\"color: #188038;\"><strong>\"COUNTLY_TOOLS_ALL\": \"NONE\".</strong></span><br>You can then enable only specific categories.</p>\n</div><h2 id=\"h_01KQ03GM8GVWS9S23QMXNH1PS6\">Enable Selected Categories Only </h2><p>For example, you can allow analytics and events as read-only, but disable everything else:</p><pre>\"COUNTLY_TOOLS_ALL\": \"NONE\",\n\"COUNTLY_TOOLS_ANALYTICS\": \"R\",\n\"COUNTLY_TOOLS_EVENTS\": \"R\",\n\"COUNTLY_TOOLS_APPS\": \"R\"</pre><p>This is a good setup for users who only want to explore analytics.</p><h2 id=\"h_01KQ03KH0N97GEV9PDSM9EQGQE\">Read-only Analytics Setup</h2><p>This allows general read-only access while explicitly disabling more sensitive areas.</p><pre>\"COUNTLY_TOOLS_ALL\": \"R\",\n\"COUNTLY_TOOLS_DATABASE\": \"NONE\",\n\"COUNTLY_TOOLS_DASHBOARD_USERS\": \"NONE\",\n\"COUNTLY_TOOLS_APP_USERS\": \"NONE\"</pre><h2 id=\"h_01KQ03MQ02MHV6TG29N7XTY5WP\">Allow Limited Write Actions</h2><p>For example, you can allow your AI assistant to create and read notes, but not update or delete them: </p><pre>\"COUNTLY_TOOLS_ALL\": \"R\",\n\"COUNTLY_TOOLS_NOTES\": \"CR\"</pre><p>Use this when you want AI to help document findings without modifying existing notes.</p><h2 id=\"h_01KQ03PPRRRW7GKQM0P9RV9EAM\">Allow Crash Workflow Actions</h2><p>This keeps most tools read-only, while allowing crash-related create/read/update actions if supported by your Countly permissions. </p><p>For example:</p><pre>\"COUNTLY_TOOLS_ALL\": \"R\",\n\"COUNTLY_TOOLS_CRASHES\": \"CRU\"</pre><h2 id=\"h_01KQ03T7V4Q6D69GWGBEP7254G\">Token Permissions Still Matter</h2><p>It's important to note that MCP restrictions <strong>do</strong> <strong>not</strong> override Countly token permissions.</p><p>The final access is the more restrictive combination of:</p><ol>\n<li data-list-item-id=\"e4e659e29831b55e9cf6e76f196ccea17\">What your Countly token allows</li>\n<li data-list-item-id=\"ebba668804e6c67d48863a8814fe4c71e\">What MCP server configuration allows</li>\n</ol><p>For example: </p><ul>\n<li data-list-item-id=\"efde9232f610da5e4cef1718d700d3166\">The Auth Token does not allow <strong>delete</strong> </li>\n<li data-list-item-id=\"e38810f40f4d0c55187311d4f739a0a25\">But MCP config says <span style=\"color: #188038;\">CRUD</span>\n</li>\n</ul><p>As a result, <strong>delete will still not work</strong>.</p><h1 id=\"h_01KPXYSGPR8F5T7RE2P2AWE1D0\">Troubleshooting</h1><style>\n    .tab-text-content { border: 1px solid #d8dcde; padding: 20px; border-radius: 6px; background: #fff; }\n    .wysiwyg-code-block { background: #fff; padding: 15px; border-radius: 4px; border: 1px solid #d8dcde; font-family: monospace; white-space: pre; }\n    .wysiwyg-table { overflow-x: auto !important; -webkit-overflow-scrolling: touch; display: block !important; }\n    .browser-table { width: 100% !important; min-width: 500px; table-layout: fixed; border-collapse: separate; border-spacing: 0; border: none !important; outline: none !important; box-shadow: none !important; }\n    .browser-table th { text-align: center; border: none !important; font-size: 14px !important; padding: 12px; background: #23ad6a; color: #ffffff; }\n    .browser-table th:first-child { border-radius: 6px 0 0 0; }\n    .browser-table th:last-child { border-radius: 0 6px 0 0; }\n    .browser-table th + th { border-left: 1px solid rgba(255,255,255,0.3) !important; }\n    .browser-table td { text-align: center; border-top: 1px solid #ddd !important; border-right: 1px solid #ddd !important; border-bottom: none !important; border-left: none !important; padding: 10px; font-size: 14px; color: #333; }\n    .browser-table td:first-child { border-left: none !important; }\n    .browser-table td:last-child { border-right: none !important; }\n    @media (max-width: 640px) {\n      .wysiwyg-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n      .browser-table { min-width: 600px; }\n      .browser-table th, .browser-table td { padding: 10px 8px; font-size: 13px !important; }\n    }\n  </style><div class=\"accordion accordion--default\">\n<div class=\"accordion__item\">\n<div class=\"accordion__item-title\"><strong>No connectors are showing in Claude Desktop</strong></div>\n<div class=\"accordion__item-content\">\n<p>If you don't see any Countly tools available, try the following:</p>\n<ul>\n<li data-list-item-id=\"ec07f5398cba9df732f4ed933e7970cd8\">Restart Claude fully</li>\n<li data-list-item-id=\"e536ec0ef07141ad632b5753613e387dc\">Check the config JSON format</li>\n<li data-list-item-id=\"e610d588128a468bc33aefa930430b657\">Check the token</li>\n</ul>\n</div>\n</div>\n<div class=\"accordion__item\">\n<div class=\"accordion__item-title\"><strong>Authentication Errors</strong></div>\n<div class=\"accordion__item-content\">\n<p>If you're seeing authentication errors, it could be due to:</p>\n<ul>\n<li data-list-item-id=\"ed7c302d80215688e904539332c5ff0c4\">Wrong token</li>\n<li data-list-item-id=\"e66ba965496605aafc5a72f945a31df05\">Expired token</li>\n<li data-list-item-id=\"e599448af3fc81b86d532dcfca64fce87\">Wrong URL</li>\n</ul>\n</div>\n</div>\n<div class=\"accordion__item\">\n<div class=\"accordion__item-title\"><strong>Server connects and works, but it's limited</strong></div>\n<div class=\"accordion__item-content\">If the Countly MCP server is connecting and working but is limited, the token permissions may be too narrow. Check the auth token you created in the <strong>Token Manager</strong> and grant the required scopes.</div>\n</div>\n</div><h1 id=\"h_01KPXZ503NWY5KKD7ZW6MQHZJ0\">Security Notes</h1><ul>\n<li data-list-item-id=\"ee0e4e001542932c1a68775d052b835a3\">\n<strong>Tokens are stored in plain text</strong> in your MCP client's config file; treat the file like a secret.</li>\n<li data-list-item-id=\"ececa4146a88ee79a56f3052e07bd5496\">\n<strong>Don't commit your config to git.</strong> Add it to <code>.gitignore</code> if it lives inside a repo.</li>\n<li data-list-item-id=\"e1e6657a47c96a2e6a92182326f36300e\">\n<strong>Use a dedicated MCP token</strong> created in the Token Manager. Don't reuse a personal API key or a token with broad admin scopes.</li>\n<li data-list-item-id=\"e6d6d3f73ee16956eb980c0dda8578e20\">\n<strong>Revoke the token</strong> in the Token Manager if it's ever exposed, lost, or no longer needed.</li>\n</ul><h1 id=\"h_01KPXYCTQZ22FMDQTCCYP6TZPA\">What can you do with Countly MCP?</h1><figure class=\"wysiwyg-image wysiwyg-image-resized\" style=\"width: 96.55%;\"><p><img src=\"https://support.countly.com/hc/article_attachments/27002006014492\" width=\"946\" height=\"2316\"></p></figure>","user_segment_ids":[]}}