vizro-mcp 0.1.3__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/.gitignore +5 -0
  2. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/.readthedocs.yaml +2 -4
  3. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/CHANGELOG.md +11 -1
  4. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/PKG-INFO +2 -1
  5. vizro_mcp-0.1.4/docs/assets/images/cursor-tutorial-allowlist-disclaimer.png +0 -0
  6. vizro_mcp-0.1.4/docs/assets/images/cursor-tutorial-multiple-allowlist-additions.png +0 -0
  7. vizro_mcp-0.1.4/docs/assets/images/cursor-tutorial-update-allowlist.png +0 -0
  8. vizro_mcp-0.1.4/docs/assets/images/cursor-tutorial-vizro-mcp-confirmed.png +0 -0
  9. vizro_mcp-0.1.4/docs/assets/images/cursor-tutorial2.png +0 -0
  10. vizro_mcp-0.1.4/docs/assets/images/install-vizro-mcp-vscode-uv.png +0 -0
  11. vizro_mcp-0.1.4/docs/assets/images/looping-data-upload.gif +0 -0
  12. vizro_mcp-0.1.4/docs/assets/images/show-mcp-under-profiles.gif +0 -0
  13. vizro_mcp-0.1.4/docs/assets/images/vscode-tutorial-file-creation.png +0 -0
  14. vizro_mcp-0.1.4/docs/assets/images/vscode-tutorial-permission-grant.png +0 -0
  15. vizro_mcp-0.1.4/docs/assets/images/vscode-tutorial-permisson-request.png +0 -0
  16. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/00-create-workspace.mp4 +0 -0
  17. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/00-prompt-submission.mp4 +0 -0
  18. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/01-blank-dashboard.mp4 +0 -0
  19. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/02-first-chart-first-run.mp4 +0 -0
  20. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/03-first-chart-with-slider.mp4 +0 -0
  21. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/04-first-chart-complete.mp4 +0 -0
  22. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/05-second-chart-first-run.mp4 +0 -0
  23. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/06-second-chart-complete.mp4 +0 -0
  24. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/07-final-dashboard.mp4 +0 -0
  25. vizro_mcp-0.1.4/docs/assets/videos/vs-code-tutorial/08-share-with-pycafe.mp4 +0 -0
  26. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/index.md +4 -0
  27. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/set-up-vizro-mcp-with-cursor.md +15 -1
  28. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/set-up-vizro-mcp-with-vscode.md +23 -1
  29. vizro_mcp-0.1.4/docs/pages/guides/use-data.md +43 -0
  30. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/tutorials/claude-desktop-tutorial.md +2 -2
  31. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/tutorials/cursor-tutorial.md +14 -2
  32. vizro_mcp-0.1.4/docs/pages/tutorials/vs-code-tutorial.md +465 -0
  33. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/hatch.toml +7 -8
  34. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/mkdocs.yml +2 -1
  35. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/pyproject.toml +3 -2
  36. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/__init__.py +1 -1
  37. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/_schemas/schemas.py +2 -2
  38. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/_utils/__init__.py +0 -2
  39. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/_utils/configs.py +2 -2
  40. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/_utils/prompts.py +12 -35
  41. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/_utils/utils.py +2 -2
  42. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/server.py +8 -8
  43. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/tests/unit/vizro_mcp/test_server.py +0 -1
  44. vizro_mcp-0.1.3/docs/assets/images/cursor-tutorial2.png +0 -0
  45. vizro_mcp-0.1.3/docs/pages/guides/use-data.md +0 -19
  46. vizro_mcp-0.1.3/uv.lock +0 -1507
  47. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/.dockerignore +0 -0
  48. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/Dockerfile +0 -0
  49. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/LICENSE.txt +0 -0
  50. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/README.md +0 -0
  51. /vizro_mcp-0.1.3/changelog.d/20250929_131634_maximilian_schulz_0_1_3.md → /vizro_mcp-0.1.4/changelog.d/20260204_090843_maximilian_schulz_0_1_4.md +0 -0
  52. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/changelog.d/new_fragment.md.j2 +0 -0
  53. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/changelog.d/scriv.ini +0 -0
  54. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/chart-context-copy.png +0 -0
  55. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/claude_prompt.png +0 -0
  56. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/claude_validate.png +0 -0
  57. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/claude_working.png +0 -0
  58. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/cursor-tutorial1.png +0 -0
  59. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/cursor-tutorial3.png +0 -0
  60. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/cursor-tutorial4.5.png +0 -0
  61. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/cursor-tutorial4.png +0 -0
  62. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/cursor-tutorial5.png +0 -0
  63. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/cursor-tutorial6.png +0 -0
  64. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/favicon.png +0 -0
  65. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/install-vizro-mcp-cursor-docker.png +0 -0
  66. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/install-vizro-mcp-cursor-uv.png +0 -0
  67. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/pycafe-usage.png +0 -0
  68. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/save-pycafe.png +0 -0
  69. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/share-vizro-project-options.png +0 -0
  70. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/song-decades-iteration1.png +0 -0
  71. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/song-decades-iteration2.png +0 -0
  72. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/song-decades-iteration3.png +0 -0
  73. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/song-top-10-iteration1.png +0 -0
  74. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/two-chart-dashboard-iteration1.png +0 -0
  75. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/two-chart-dashboard-iteration2.png +0 -0
  76. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/use-cursor-prompt-template.png +0 -0
  77. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/vizro-mcp-templates-in-claude.png +0 -0
  78. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/assets/images/vizro-mcp.gif +0 -0
  79. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/API-reference/API-reference.md +0 -0
  80. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/explanation/contribute.md +0 -0
  81. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/explanation/disclaimers.md +0 -0
  82. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/explanation/faqs.md +0 -0
  83. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/create-charts-only.md +0 -0
  84. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/get-live-preview.md +0 -0
  85. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/set-up-vizro-mcp-basics.md +0 -0
  86. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/set-up-vizro-mcp-with-claude.md +0 -0
  87. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/guides/use-prompt-templates.md +0 -0
  88. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/pages/tutorials/first-dashboard-tutorial.md +0 -0
  89. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/docs/stylesheets/extra.css +0 -0
  90. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/glama.json +0 -0
  91. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/_schemas/__init__.py +0 -0
  92. {vizro_mcp-0.1.3 → vizro_mcp-0.1.4}/src/vizro_mcp/py.typed +0 -0
@@ -37,6 +37,7 @@ share/python-wheels/
37
37
  .installed.cfg
38
38
  *.egg
39
39
  MANIFEST
40
+ vizro-core/cache/*
40
41
 
41
42
  # macOS
42
43
  *.DS_Store
@@ -163,3 +164,7 @@ cython_debug/
163
164
  *.sqlite
164
165
  *.sqlite3
165
166
  *.orc
167
+
168
+ #uv
169
+ # Every library user will have its own lock file
170
+ uv.lock
@@ -8,11 +8,9 @@ version: 2
8
8
  build:
9
9
  os: ubuntu-22.04
10
10
  tools:
11
- python: "3.12"
11
+ python: "3.13"
12
12
  commands:
13
- # Remove the `click` installation constraint once the
14
- # https://github.com/pypa/hatch/issues/2050 is resolved.
15
- - pip install hatch "click<8.3.0"
13
+ - pip install hatch
16
14
  - cd vizro-mcp/ && hatch run docs:pip tree
17
15
  - cd vizro-mcp/ && hatch run docs:build
18
16
  - mkdir --parents $READTHEDOCS_OUTPUT
@@ -1,4 +1,14 @@
1
- <a id='changelog-0.1.3'></a>
1
+ <a id='changelog-0.1.4'></a>
2
+
3
+ # 0.1.4 — 2026-02-04
4
+
5
+ ## Added
6
+
7
+ - Add support for Python 3.14. ([#1484](https://github.com/mckinsey/vizro/pull/1484))
8
+
9
+ ## Changed
10
+
11
+ - Simplified MCP prompts by removing opinionated layout instructions to make the tool more neutral. ([#1535](https://github.com/mckinsey/vizro/pull/1535)) <a id='changelog-0.1.3'></a>
2
12
 
3
13
  # 0.1.3 — 2025-09-29
4
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vizro-mcp
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: MCP server to help create Vizro dashboards and charts
5
5
  Author: Vizro Team
6
6
  License-File: LICENSE.txt
@@ -9,6 +9,7 @@ Classifier: Programming Language :: Python :: 3.10
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
12
13
  Requires-Python: >=3.10
13
14
  Requires-Dist: click>=8.1.7
14
15
  Requires-Dist: httpx>=0.28.1
@@ -32,4 +32,8 @@ Vizro-MCP is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/)
32
32
 
33
33
  - No easy way to connect to real data.
34
34
 
35
+ - :fontawesome-solid-wand-magic-sparkles:{ .lg .middle } __Agent Skills__
36
+
37
+ If your AI development tools support [Agent skills](https://agentskills.io/), we offer [dashboard design and build skills](https://github.com/mckinsey/vizro/tree/main/vizro-e2e-flow) that guide you through a 2-phase workflow: design (requirements, layout, visualization) and build (implementation, testing).
38
+
35
39
  </div>
@@ -26,7 +26,7 @@ Once you have uv or Docker, and have installed the desktop version of Cursor, yo
26
26
 
27
27
  Click the button below:
28
28
 
29
- [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=vizro-mcp&config=eyJjb21tYW5kIjoidXZ4IHZpenJvLW1jcCJ9)
29
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=vizro-mcp&config=eyJjb21tYW5kIjoidXZ4IHZpenJvLW1jcCJ9)
30
30
 
31
31
  The following configuration is added to your `mcp.json` ([see Cursor Settings](https://docs.cursor.com/context/model-context-protocol#configuration-locations)).
32
32
 
@@ -38,6 +38,20 @@ The following configuration is added to your `mcp.json` ([see Cursor Settings](h
38
38
  }
39
39
  ```
40
40
 
41
+ !!! tip "To specify a version of Vizro-MCP"
42
+
43
+ To use a specific version of Vizro-MCP, update the `mcp.json` configuration to instruct `uv` accordingly. For example, to use Vizro-MCP [version 0.1.2](https://github.com/mckinsey/vizro/tree/vizro-mcp-0.1.2), specify the configuration like this:
44
+
45
+ ```json
46
+ {
47
+ "vizro-mcp": {
48
+ "command": "uvx vizro-mcp@0.1.2"
49
+ }
50
+ }
51
+ ```
52
+
53
+ The `uv documentation` contains more information about the [syntax around the `uvx` command version](https://docs.astral.sh/uv/guides/tools/#requesting-specific-versions).
54
+
41
55
  Click "Install" on the Cursor MCP configuration page:
42
56
 
43
57
  ![Install Vizro-MCP on Cursor with uv](../../assets/images/install-vizro-mcp-cursor-uv.png)
@@ -14,7 +14,7 @@ To access Vizro-MCP, you must first install **either [uv](https://docs.astral.sh
14
14
 
15
15
  ## Set up instructions
16
16
 
17
- Once you have uv or Docker, and have installed Visual Studio Code, you need to set up the Vizro-MCP server configuration.
17
+ Once you have uv or Docker, and have installed Microsoft Visual Studio Code, you need to set up the Vizro-MCP server configuration.
18
18
 
19
19
  ### Using uv
20
20
 
@@ -22,6 +22,28 @@ Click the "Install" button below:
22
22
 
23
23
  [![Install with UVX in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=vizro-mcp&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22vizro-mcp%22%5D%7D)
24
24
 
25
+ !!! tip "To specify a version of Vizro-MCP"
26
+
27
+ To use a specific version of Vizro-MCP, update the `mcp.json` configuration to instruct `uv` accordingly. For example, to use Vizro-MCP [version 0.1.2](https://github.com/mckinsey/vizro/tree/vizro-mcp-0.1.2), specify the configuration like this:
28
+
29
+ ```json
30
+ {
31
+ "vizro-mcp": {
32
+ "command": "uvx vizro-mcp@0.1.2"
33
+ }
34
+ }
35
+ ```
36
+
37
+ The `uv documentation` contains more information about the [syntax around the `uvx` command version](https://docs.astral.sh/uv/guides/tools/#requesting-specific-versions).
38
+
39
+ Click "Install" on the MCP configuration page:
40
+
41
+ ![Install Vizro-MCP with uv](../../assets/images/install-vizro-mcp-vscode-uv.png)
42
+
43
+ If the process appears to "hang", you should restart VS Code. You can check that Vizro-MCP is installed by navigating to Code > Settings > Profiles > MCP Servers where you'll see the Vizro-MCP server settings.
44
+
45
+ ![Show where to find MCP settings in VS Code](../../assets/images/show-mcp-under-profiles.gif)
46
+
25
47
  ### Using Docker
26
48
 
27
49
  Click the "Install" button below:
@@ -0,0 +1,43 @@
1
+ # How to use local or remote data
2
+
3
+ You can ask the LLM to create specific dashboards based on local or remote data if you already have an idea of what you want.
4
+
5
+ ## Local data
6
+
7
+ When you are prompting to generate the dashboard code, most MCP hosts will allow you to upload your data into the prompt. Otherwise, you can tell the LLM the filepath of the data it is working with.
8
+
9
+ ### How to set up PyCafe to run the generated dashboard code
10
+
11
+ PyCafe can only run the dashboard code if it can access the data it requires. The MCP host will not open your code in PyCafe if your data is stored locally. However, if you like using PyCafe to review the work in progress, you can prompt the MCP host to open your code in PyCafe. It will open PyCafe with the code, but the dashboard will not display correctly, as shown below.
12
+
13
+ You can then share the data to the PyCafe project by upload as shown. This is the most straightforward way to run a project, but **do not share private data!**.
14
+
15
+ ![Install Vizro-MCP with uv](../../assets/images/looping-data-upload.gif)
16
+
17
+ ### How to run generated code within a Python virtual environment
18
+
19
+ If your data is private or you prefer not to upload it to PyCafe, you can run the code that Vizro-MCP generates for you locally. Often, the MCP host will guide you in how to do this.
20
+
21
+ 1. Save the generated code to a file named, for example `app.py`, ideally in the same folder as the data you are using, as this simplifies the path in the code that accesses the data.
22
+ 1. Modify the path to the data in the code to point from `app.py` to the correct location of the data.
23
+ 1. Within your terminal, open a Python virtual environment that has [Vizro installed into it](https://vizro.readthedocs.io/en/stable/pages/user-guides/install/#verifying-the-installation).
24
+ 1. Navigate to the same folder in the terminal that you have stored `app.py`.
25
+ 1. Type `python app.py` to run the code.
26
+
27
+ This sounds like a complex process but if you use an MCP host like Cursor or VS Code, it will guide you. You can even prompt the host with the steps above and ask it to run through them for you.
28
+
29
+ ## Remote data
30
+
31
+ Example prompts for using remote data could be:
32
+
33
+ > _Create a Vizro dashboard with one page, a scatter chart, and a filter based on `<insert absolute file path or public URL>` data._
34
+
35
+ > _Create a simple two page Vizro dashboard, with first page being a correlation analysis of `<insert absolute file path or public URL>` data, and the second page being a map plot of `<insert absolute file path or public URL>` data_
36
+
37
+ You can find a set of sample CSVs to try out in the [Plotly repository](https://github.com/plotly/datasets/tree/master).
38
+
39
+ You can even ask for dashboard code without providing data:
40
+
41
+ > _Create a Vizro dashboard with one page, a scatter chart, and a filter._
42
+
43
+ In general, it helps to specify Vizro in the prompt and to keep it as precise (and simple) as possible.
@@ -53,9 +53,9 @@ When the LLM is ready, it opens an instance of [PyCafe](https://py.cafe/) and di
53
53
 
54
54
  ![](../../assets/images/song-decades-iteration1.png)
55
55
 
56
- !!! Tip "PyCafe cannot display charts that use local data"
56
+ !!! tip "PyCafe needs access to your data"
57
57
 
58
- Vizro-MCP can only show your chart or dashboard in PyCafe if the data it consumes can be downloaded from a public link. If you use local data, you should copy the generated chart or dashboard code into a `.py` file to run locally, so it can access the data.
58
+ PyCafe can only show your chart or dashboard if it can access the data. This tutorial uses downloadable public data so it is straightforward. But if you are working with data stored on your machine, Claude Desktop will not automatically open PyCafe. Read the guide on [how to use local data](../guides/use-data.md) to find out how to view and interact with the dashboard.
59
59
 
60
60
  ## Iterate the chart
61
61
 
@@ -26,7 +26,7 @@ Can you access Vizro-MCP?
26
26
 
27
27
  You should receive a response similar to the following:
28
28
 
29
- > Yes! I do have access to Vizro-MCP tools. I can see several Vizro MCP functions available that allow me to help you create charts and dashboards using Vizro.
29
+ ![](../../assets/images/cursor-tutorial-vizro-mcp-confirmed.png)
30
30
 
31
31
  ## Strategy
32
32
 
@@ -47,10 +47,22 @@ Here is the prompt as it was typed. Before you submit it, we recommend you check
47
47
 
48
48
  ![](../../assets/images/cursor-tutorial1.png)
49
49
 
50
- Running this prompt in Cursor, we saw the following response. You should see something similar:
50
+ When you submit this prompt to Cursor, you will see some output, which will pause and wait for you to give permission to continue. The pause is a security measure to prevent rogue MCP servers from executing code:
51
51
 
52
52
  ![](../../assets/images/cursor-tutorial2.png)
53
53
 
54
+ You can grant permission for Vizro-MCP tools to run as shown. If you don't want to have to select **Run** each time you submit a prompt, you can add Vizro-MCP's `get_vizro_chart_or_dashboard_plan` tool to the Allowlist by opening the dropdown indicated next to **Ask Every Time**:
55
+
56
+ ![](../../assets/images/cursor-tutorial-update-allowlist.png)
57
+
58
+ When you select **Use Allowlist** you'll be shown the following disclaimer. Select **Continue** to confirm the tool.
59
+
60
+ ![](../../assets/images/cursor-tutorial-allowlist-disclaimer.png)
61
+
62
+ You will be asked to give similar permission for additional Vizro-MCP tools to run, and can similarly add these to the Allowlist. When you have done this, Cursor uses Vizro-MCP to generate some code for the chart requested.
63
+
64
+ ![](../../assets/images/cursor-tutorial-multiple-allowlist-additions.png)
65
+
54
66
  ### Save the code
55
67
 
56
68
  Ask Cursor to save the code into a `.py` file. For convenience, save it in the same directory as the data: