Every question from the business had the same answer from us:
“Sure, we’ll create a dashboard for that.”
New metric? Dashboard.
Different region? Dashboard.
Same data, slightly different view? Yep—another dashboard.
At some point, we stopped building insights and started maintaining screenshots.
This is the story of how we hit that wall—and why we built an MCP (Model Context Protocol) Server instead of yet another dashboard.
It wasn’t one big failure. It was death by a thousand small requests.
Each request was reasonable. Collectively, they were exhausting.
Behind the scenes, we were:
The worst part?
None of this work made the data better.
It only made the surface area larger.
Dashboards are great when:
But real users don’t work like that.
They explore.
They ask follow-ups.
They change their minds mid-conversation.
Dashboards freeze questions in time.
Every new question becomes a Jira ticket.
Every Jira ticket becomes a dashboard.
Every dashboard becomes technical debt.
“Why are we building UI for every question instead of solving the question itself?”
The breakthrough was simple—but uncomfortable:
Most dashboards weren’t unique. The context was.
Same data.
Same metrics.
Same joins.
Different filters.
Different cuts.
Different intent.
So instead of designing screens, we started defining context.
That’s where the MCP (Model Context Protocol) Server came in.
The MCP server is not a BI tool.
It’s not a dashboard engine.
It’s a layer that knows:
It sits between users (or AI) and data and answers one question:
“Given this intent, what insight do you want?”
We moved every important metric into the MCP context.
{
"metric": "revenue",
"definition": "SUM(sales_amount)",
"grain": "monthly",
"currency": "USD"
}
No dashboard-owned logic.
No tribal knowledge.
If revenue logic changes, it changes once.
That alone killed half our dashboard issues.
Here’s a real example.
“Show sales trend for Product X in EU for the last 6 months.”
Response:
Same question becomes intent:
{
"intent": "trend",
"metric": "revenue",
"dimensions": ["month"],
"filters": {
"product": "Product X",
"region": "EU",
"time_range": "last_6_months"
}
}
The MCP server does the boring part.
SELECT month,
SUM(sales_amount) AS revenue
FROM sales
WHERE product = 'Product X'
AND region = 'EU'
AND sale_date >= CURRENT_DATE - INTERVAL '6 months'
GROUP BY month
ORDER BY month;
The difference?
As it should.
Instead of shipping UI, MCP returns meaning.
{
"visualization": "line_chart",
"x": "month",
"y": "revenue",
"data": [...]
}
Frontend renders it.
Tomorrow it might render it differently.
The insight stays the same.
Before:
After:
We didn’t eliminate dashboards.
We demoted them.
An MCP server makes sense if:
If your problem is pretty charts, this won’t help.
If your problem is repeated thinking, it will.
Dashboards feel productive because they’re visible.
But visibility isn’t insight.
By building an MCP (Model Context Protocol) Server, we stopped designing screens for every question and started designing understanding.
And honestly?
This was the moment our analytics stack finally worked with us—not against us.
If your dashboards feel like friction instead of insight, let’s fix that
together.