New in the Dash Docs: Building Dash Apps with AI Coding Assistants

Building Dash Apps with AI Coding Assistants

AI coding assistants are improving quickly, and it can be easy to miss the latest ways to use them with Dash. The new Building Dash Apps with AI Coding Assistants section of the Dash docs has great tips for using tools like Cursor, GitHub Copilot, Codex, and Claude Code to build Dash apps.

The section shows how to set up the Dash Docs MCP so AI assistants can access the current Dash documentation.

There is also a detailed AGENTS.md example covering app structure, callbacks, layouts, charts, component libraries, data handling, and common outdated patterns to avoid. The section also covers publishing AI-generated apps to Plotly Cloud and Dash Enterprise.

If you’re using AI to build Dash apps, it’s worth checking this section regularly. It will continue to improve as both Dash and AI coding tools change.

Shaking the boat a bit on this one :sailboat:︎,

I personally don’t think the documentation belongs on the MCP. I’ll make my arguments as constructive as possible and list out reasons as to why. Their is a lot of shifts taking place thanks to ai , and we are doing a really good job at throwing out stuff at each other but their is no conversation and their was no community input requested on the docs. Maybe I just missed the thread inquiring prior to development. I would have offered this advice prior.

  1. MCP is a terrible host for SEO - to require authentication prior to reading your open source documentation is a way to shoot yourself in the foot. Some will do it. Yeah, you got a few quick leads locked into the cloud service but the unforeseen consequences will kill you. Ai will just from a generative prospective check websites like Matplotlib, Seaborn, Bokeh, and Vega-Altair all four serve complete docs as plain crawlable HTML with no account. > auth dash mcp config route for docs will lose every time.

  2. Let’s talk about the publisher problem, their is currently an epidemic going on as app developers and publishers are being slaughtered. Most people don’t make money in this space and its becoming a growing race to the bottom. The reason, ai reads your app takes what it needs and gives your knowledge, to a user without giving you anything in return. Dash applications are even worse than that because an ai will request a dash application and see its render javascript and be stopped directly in its tracks. Hints why you don’t see many successful dash b2c applications, how is anyone supposed to make a sustainable business or live off an app that cant be read or when it can be read how can a publishers monetize it rather than just handing it away to anyone requesting.

This article does a good job of articulating what i feel like is an important moment

Some institutions will become human-AI hybrids; others where agents outcompete on speed or cost will become agent-only. The volume of agent-agent interaction could plausibly exceed that of human-human and human-agent interactions

The initial issue in my opinion is a 2000’s .com trap, you are creating a single point of failure. You are establishing a monolith of chart data, you are refining an MCP server trying to compete with who? excel? With a single MCP you are stuck eating your own plotly charting library dog food. Yes, you’ll be able to make better charts using the MCP but who cares? Honestly the agent doesn’t. The majority will not install an mcp and the prompt from a chatbot will whip of something thats not dash as you’ll be stuck in a box thats inaccessible to most agentic workflows.

Where as dash is an amazing tool for documentation, think between https://dash-mantine-components.com and https://2plot.dev we can agree on that. Why separate out the the docs from the dash app, like please explain to me why dash.plotly.com is not a dash application? Looks like a static html website running dkk containers. Where as ya’lls llms.txt is just a promotional affirmation about your services. dash.plotly.com/llms.txt is even worse it returns 404. They shipped an account-gated MCP server before shipping the zero-install file.


Auth optional , 402x at the agent

Alrighty, let me make this clear. You do not wan’t to be the only dash cloud provider as lucrative as that might sound in the board meetings ya’ll having, you will end up with a bunch of brain dead chart guppies and a dead company. I personally think the cloud hosting other peoples stuff in this next stage is an unnecessary liability and a race to the bottom in operating costs / overhead but each their own.

The dash framework is more capable than most people realize, enterprise customers like me will start to require their information be stored in their own servers. Every network hosted in isolation, hosting apps able to act as the orchestration system within themselves on the mcp or towards outsiders on the /llms.txt

Your issue is in the architecture ya’ll constructing will lead to a temperature problem within the dash framework as a whole. These agents do much better when working on more than one provider and to allow this to truly evolve you need decentralize and decouple as much as possible more boats launched as isolated individual networks doing weird and different things the better for the dash framework as a whole.

Lets talk about auth, and compare the way i structured authentication within my network and /llms.txt is used as an optional extension /llms.txt?={key}. The goal from my prospective is to allow humans to be able to visit my documentation for free while protecting myself as a publisher from the exploitation of my work from agents. With that at the network level within the requests thanks to the dash-improve-my-llms I’ve focused rails on the SEO and the observability as to track each request as whom is visiting my network and what their intent is:

For instance when a bot visits my network i can spot them and their intent. If a bot requests a sketchy link like /.env I just ban them from the network. Where as if a bot requests dash-improve-my-llms — crawler / SEO companion for Dash apps · llms.txt it will eventually be stopped at the 402 where as it will be presented with the applications robots.txt and an understanding of what the content is behind the 402x gate:

Once the bot receives its 402x response it has a handful of options, it can see that from authentication it can view the documentation for free. It would stop and inquire the user if they would like to create an account and provide a ?key= or the bot if it has a wallet can bypass the authentication and pay $0.05 for the day pass on the subdomain documentation or 0.25 for a day pass on the entire 2plot.ai network.

You watch the other big names in industry you’ll start to see the trend and how things are starting to evolve.

I’m not trying to just be dismissive to what I’m sure what a bit of work. I’m just trying to articulate my concerns. In my opinion the mcp should be used for secure in server communication between trusted agents within network where as the /llms.txt should be the default network to network exchange route.

Also a bonus bug worth reporting about yall’s mcp rollout:

Every setup snippet on yalls /mcp — Claude Code, Cursor, Windsurf, ChatGPT, Claude — gives the URL as:

https://<your-dash-enterprise-server>/_mcp

Looks like the Dash Enterprise placeholder leaked into the public instructions. Nobody following that page can connect to the public server.

Thanks so much for sharing @AnnMarieW ! Excited to see this page evolve, and curious to hear from folks about what they find works well and what doesn’t. Things are moving quickly!

On a personal note, my 3 “desert island prompts” at the moment for any project I use with coding agents are:

1. Use Simplified Technical English (STE) for this conversation, UI elements, and comments.
2. Organize code into files and folders, keeping each file <400 LoC and focussed on just a single function or two, and using folders extensively for organization.
3. Avoid defensive programming

These 3 things are my top pet peeves when it comes to working with coding agents these days. I’ve written a bit more about this in A few dark factory patterns · Chris Parmer, but that’s a longer discussion!

Thanks for the deep dive on this, @PipInstallPython ! MCP is definitely a controversial one, and for good reason. Here are some notes on this topic:

  1. The Dash docs MCP doesn’t expose any additional information from the documentation. In other words, there isn’t any content that we’re only making available to MCP and not to the docs. Totally agreed that having content that was exclusive to MCP wouldn’t be right.
  2. MCP’s value in general - I’ve gone back and forth A LOT about MCP over the last year. For a while, I thought MCP was going to become irrelevant with the advent of coding agents being able to use CLI tools (e.g. curl the docs). However, I now recognize two distinct advantages:
    a. Narrower security footprint: broad tool support and wide open network access is a big exfiltration vector/security risk, so many orgs are only allowing restricted environments for working with AI. MCP is more secure because it’s more restricted: just data exchange rather than arbitrary CLIs. Also, some environments don’t have access to broad tool calls (e.g. Claude Chat vs Claude Code) but can work with MCPs, so MCP integration is a nice way to make data from other environments accessible.
    b. Restrict context/information: Many AI environments have access to web search and our documentation is well indexed, so why use our docs MCP instead of the AI’s web search tools? One reason is that by configuring MCP, many AI tools will have a stronger propensity to actually get information using the MCP server rather than going out and finding it via other methods. For Dash documentation in particular, this means that the AI coding tool will get more info directly from the source (our documentation!) rather than elsewhere.
  3. Dogfooding: MCP support in Dash is broadly available. dash.plotly.com is itself a Dash app, and we like to try out our own features with our own products. Enabling MCP with our Dash documentation site was a nice way for us to try out the feature in a real world use case with LOTS of textual information to see how well the AI does. @nathandrezner was behind this feature, and was very pleasantly surprised with just how much better the AI agents did when authoring with the MCP docs server connected gathering info more exclusively from dash.plotly.com rather than general web search or relying on it’s general knowledge. Since we found it worked pretty well, we decided to make it official.

Such a good point! I’d really like for us to solve this on the framework level somehow. At one point I recall reviewing some code for a project that extended the interpolate_index function in Dash to crawl the dash_html_components structure and create static HTML that would get served on initial page load and then would be swapped out by the dynamic javascript-rendered code. Would love to revive something like this and make it first class in Dash.

Oh actually dash.plotly.com is a Dash application! This was a pretty important project for me when I originally released Dash in the beginning: I wanted Dash to be flexible enough that you could build not just data apps and dashboards, but also beautiful interactive docs.

It’s true! I’m on the fence about llms.txt to be honest. When I’ve inspected web search endpoints in coding agent sessions, I haven’t actually observed it reach out to /llms.txt URLs proactively. It seems to use web search (which just searches our content) and then go directly to the page. It does seem like a good idea though to at least allow users to be able to copy and paste docs directly into a coding agent, or orient coding agents to use that URL proactively. Maintaining it seems a bit tricky - do we have a single one for every single page? Or hand curate a main one that’s essentially like a sitemap? Very open to suggestions here.

As for the sequencing, we built MCP as a general feature for Dash apps first: so that organizations could build internal AI MCP servers with Dash alongside interactive views (and now, interactive agentic analytics with today’s Plotly Studio Embedded launch). Some customers wanted their AI chatbot to be the main interface that they worked out of day in and day out, and have a secure way for that chat interface to reach out to internal data and context through custom apps. Dash with MCP was built for those needs. Then, since we had it, we turned it on for the docs after seeing that it worked pretty dang well!

This is very cool! I’ve seen some chatter about ideas like this around, and it’s awesome to see someone implementing it.


Great feedback all around, thanks for taking the time to write up all of your thoughts :relieved_face:

I hope you realize you have bigger issues than an MCP server. I make it my job to shake everyones hand, I’ve been working beside you for over 6 years. You realize how many times the dash core group has commented on one of my forum posts? 0 You realize how many zoom calls we ever been on? 0

My clients a billion dollar a year engineering firm, I’ve done more for you and for the open source and you’ve sent me interns and none tech people the entire time, you’ve ignored my concerns or constructive feedback as it gets lost in a game of telephone or when i spell them out I’m ignored, without even the respect to respond. This is the first actual message I think you’ve sent me in 6 years other than the occasional heart.

You’ll have one less client, and you have given me a sour taste in my mouth.


  1. Are you using or plan to use the community.plotly forum to train your agents and build products to sell? Because I’d explicitly opt out.

  2. Ya’ll i’ve been talking about this for a year - Ai is not able to read a dash application 😱
    The first way to solve the problem is to not take over a year to respond back that its a problem. Also I’d really like for us to solve this on the framework level somehow, theirs no need I already got the hook for you dash-improve-my-llms

  3. Oh actually dash.plotly.com is a Dash application! This was a pretty important project for me when I originally released Dash in the beginning

  • You did good initially for the time, times have changed. The open source has you beat on better docs imo.
  1. I haven’t actually observed it reach out to /llms.txt, - I have.

  2. Explain to me and us dash framework open source and plotlys role in how ai will play into this further. How is the community being considered. What steps are you taking to make the framework so that the individuals building and contributing into it are protected or considered and we are not having all of our engineering, content being absorbed and monetized for only your benefit?


I don’t have all the answers, but I’ve been working through some and I have enough knowledge to call a spade a spade. This community can’t be ran like a babysitting service. Contributions should be measured and rewarded. Y’all trying to resuscitate something thats been struggling and its been struggling not because of who was the previous community placeholder. Ya’ll have top down leadership / communication issues and that scares me.8 Zezima