
Matt Brown
July 29, 2026
We put our product marketing brain into an MCP server with Dash and Plotly Cloud
What if you could get an answer to a tricky product question, tailored to your actual messaging framework, not a generic guess. What if, ten minutes before a customer call, you could ask "how do we stack up against Competitor X on ad hoc analysis?" and get back the same nuance our product marketing team would give you, complete with the right talking points and none of the fluff? And what if you could do this right inside Claude Desktop, no separate tool to log into, no tab to switch to?
That was the vision we set out to accomplish, and we built it using Plotly technologies. This post is about how we built it, and everything we ran into along the way.
The Plotly product messaging framework
The core of this project is our product messaging framework. We've been iterating on it for months and storing all of that juicy context in a structure that Claude can crawl easily. The problem is that it lives on one person's computer, but everyone needs access. We could have put it into Confluence and called it a day, but that only solves the content problem. Our vision for this project was to go beyond simple content retrieval and build out a virtual PMM with skills that help our staff brainstorm content, build tailored marketing materials that meet our branding standards, and write content with Plotly's approved tone. Wrapping up all of this into a single service where we can continue to build out that rich context, skills, and connections to our other services is key.
We'll leave the "how" we built that product messaging framework for another blog post, but suffice it to say, it includes target personas, use cases, competitive analysis, feature overviews and benefits, and a large pile of content we've written about the product over time. All exposed as tools an LLM can call. Ask it about a persona, a competitor, a feature, an objection, and it reaches into the same material our PMM team already uses.
The best part is how little stands between "we have this context" and "anyone can use this context." No custom app to build, no UI to design. Connect Claude Desktop to the right MCP server, and everyone who already has an AI client gets a direct line into our messaging framework, with zero new habits to learn.
The "PMM MCP" is born
The MCP server itself came together faster than we expected, largely because Dash shipped native MCP server support in 4.2, and Claude turned out to be an excellent pair for actually building it. Just describe the tools we wanted, iterate on how the responses should be shaped, work through edge cases in the messaging content, and voila. It's ready to roll. We deployed it on Plotly Cloud, flipped the switch, and had a working MCP server in minutes.
Now, how do we get everyone actually using this from inside Claude?
Connecting Claude Desktop to the MCP server
This part turned out to be refreshingly simple, because Claude Desktop already knows how to speak MCP. Our Claude administrator added our new custom MCP endpoint to our list of approved connectors and now anyone at the company can add our messaging server as a custom connector:
- Open Claude Desktop settings â Connectors â Plotly PMM MCP
- Point it at our Plotly Cloud MCP server URL.
- Authorize once when prompted.
That's it. No webhook handler, no bot to babysit, no deploy pipeline of our own to maintain on the client side. Claude Desktop handles the MCP handshake, lists the tools our server exposes, and calls them automatically whenever a question calls for it.
A note on authentication
The Dash MCP server requires an interactive OAuth flow, and today Plotly Cloud doesn't support a static bearer token or service-account shortcut. But the good news is that you donât have to build a custom OAuth client, discovery, Dynamic Client Registration, Authorization Code + PKCE, token storage and refresh, that you'd need if you were wiring this up to some headless service yourself.
Claude Desktop's remote MCP supports OAuth already, and Plotly Cloud facilitates the handshake without any extra code on your part. When someone adds our server as a connector, Claude Desktop performs the OAuth dance on their behalf: it discovers the authorization server, registers itself as a client, and opens a browser window for a one-time consent. From then on, each person's own Claude Desktop holds and refreshes their own token. No shared service identity, no admin-gated setup route, no token store living on a pod that has to survive a redeploy.
In practice, that means the entire chunk of plumbing we would have needed for any other integration path just... isn't there. That's a huge bonus for deploying the MCP server on Plotly Cloud.
Taking it for a spin
With the connector added, asking a question is exactly like asking Claude anything else:
How should I position Plotly Studio to a team of Maintenance Leads at a biopharma manufacturing company?
Claude reaches for the messaging-framework tools on its own, pulls the relevant persona and competitive context, and answers with the same nuance our PMM team would give, without anyone needing to know the tools exist behind the scenes.
What's next
Right now, this lives in Claude Desktop, which covers a lot of ground on its own. But a few ideas keep coming up for where we could take it next:
- Bring it into Slack. A lot of the day's questions happen in the flow of a Slack conversation, not a Claude Desktop window. We've looked at both Slack's own native MCP support and Anthropic's @Claude Slack integration as ways to get there without reinventing much. A more custom route, a thin Dash + Slack Bolt service that forwards questions to Claude, would trade more build effort for more control over things like model choice, system prompt, and response formatting. We haven't picked a direction yet, but it's the most requested next step.
- More sources, same server. The messaging framework is the first thing we've wired up, but nothing about the architecture is specific to it. Sales enablement content, support macros, onboarding docs, any of them could become another tool on the same server, or a server of their own.
- Team-specific skills. Right now the assistant mostly retrieves and reasons over context. We're interested in giving it more opinionated skills, like drafting a first pass at a competitive one-pager or flagging when a claim doesn't match our approved messaging, rather than just answering questions.
- Usage feedback loop. We'd like a lightweight way to see which questions people are actually asking, so the messaging framework itself keeps improving based on real gaps, not guesses.
None of these are committed yet, but they're the shape of where this could go next.
Wrapping up
What started as "wouldn't it be cool to get tailored product answers on demand" turned into a real, working assistant. Anyone at the company can now ask Claude Desktop a product question and get an answer with the nuance our product marketing team would actually give, on the spot, before a customer call, mid-debate in a doc, whenever the question comes up. That's a huge win, not because any single piece of this was novel, but because the whole thing came together fast and is already being used within the company.
And that's really the point of sharing all of this: the hard part was never the AI. Dash's new MCP support means turning almost any data app, dataset, or body of institutional knowledge into a set of tools an LLM can use is now a small project you can deploy in hours, not weeks. Plotly Cloud makes hosting it trivial. And Claude Desktop's native MCP support means the payoff reaches people the moment they add the connector, no extra app to install or webhook to run.
So, what's sitting in your company that only a few people benefit from? A sales playbook. A metrics dashboard nobody outside the data team has the SQL for. A support knowledge base. An onboarding runbook. Any of those could be just a Dash MCP server away from being something everyone can just ask for.