DEV Community

Cover image for Cristalyse - The Only Flutter Chart Package with MCP Support Built In
Rudi K. 🧠
Rudi K. 🧠

Posted on

Cristalyse - The Only Flutter Chart Package with MCP Support Built In

How Cristalyse is pioneering AI-assisted chart development in Flutter


As Flutter developers, we've all been there: you're deep in the flow, building out your data visualization, when you hit a wall. "How do I add dual Y-axes again?" or "What was the syntax for that bubble chart mapping?" You alt-tab to docs, lose your train of thought, and your productivity takes a hit.

What if your AI coding assistant could answer these questions directly in your IDE, with complete knowledge of your chart library's API? That's exactly what we've built with Cristalyse v1.6.1 - the first Flutter chart package with built-in Model Context Protocol (MCP) support.

What Makes This Groundbreaking?

MCP isn't just another feature - it's a fundamental shift in how we think about developer tooling. Instead of treating documentation as a separate resource, MCP creates a direct bridge between your coding environment and the knowledge base of your tools.

For Flutter chart development, this means:

  • Zero context switching between IDE and documentation
  • Instant access to working code examples
  • Real-time guidance on complex APIs like grammar of graphics
  • Contextual help that understands what you're trying to build

The Technical Foundation: Why Charts Need This Most

Building charts isn't like implementing typical Flutter widgets. Chart libraries, especially ones implementing grammar of graphics (like Cristalyse), have inherently complex APIs:

// This is just a simple scatter plot, but look at the API surface:
CristalyseChart()
  .data(salesData)
  .mapping(x: 'quarter', y: 'revenue', color: 'region', size: 'growth')
  .geomPoint(size: 8.0, alpha: 0.7, shape: PointShape.circle)
  .scaleXContinuous(domain: [0, 4])
  .scaleYContinuous(format: NumberFormat.currency())
  .scaleColorDiscrete(palette: CustomPalette.business)
  .scaleSizeLinear(range: [5, 20])
  .theme(ChartTheme.professional())
  .animate(duration: Duration(milliseconds: 1200))
  .interaction(
    tooltip: TooltipConfig(
      builder: (point) => Container(
        padding: EdgeInsets.all(8),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('Q${point.getValue('quarter')}'),
            Text('Revenue: ${currencyFormat.format(point.getValue('revenue'))}'),
            Text('Region: ${point.getValue('region')}'),
          ],
        ),
      ),
    ),
  )
  .build();
Enter fullscreen mode Exit fullscreen mode

That's a lot of moving parts. And this is still a relatively simple example. When you factor in:

  • Multiple geometry layers
  • Custom scales and transformations
  • Complex interaction handling
  • Animation coordination
  • Theme customization
  • Data preprocessing

The cognitive load becomes substantial. This is where AI assistance becomes genuinely valuable, not just convenient.

How MCP Works Under the Hood

The Model Context Protocol creates a standardized way for AI applications to connect to external knowledge sources. Here's the technical flow:

graph LR
    A[Your IDE] --> B[AI Assistant]
    B --> C[MCP Client]
    C --> D[HTTPS Request]
    D --> E[Cristalyse MCP Server]
    E --> F[Documentation DB]
    F --> E
    E --> D
    D --> C
    C --> B
    B --> A
Enter fullscreen mode Exit fullscreen mode

When you ask your AI assistant about Cristalyse:

  1. Query Processing: Your question gets sent to the AI assistant
  2. MCP Resolution: The assistant identifies this as a Cristalyse-related query
  3. Server Connection: Makes a secure HTTPS request to https://docs.cristalyse.com/mcp
  4. Knowledge Retrieval: Our MCP server returns relevant documentation, examples, and API references
  5. Response Generation: The AI assistant combines this knowledge with its understanding to give you a complete answer

Setting Up MCP: The Developer Experience

The setup is intentionally frictionless. For most AI coding assistants, it's just adding one line to your MCP configuration:

Cursor/Windsurf/Warp:

{
  "mcpServers": {
    "cristalyse_docs": {
      "url": "https://docs.cristalyse.com/mcp"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Claude Code CLI:

claude mcp add --transport http cristalyse_docs https://docs.cristalyse.com/mcp
Enter fullscreen mode Exit fullscreen mode

Claude Web/Desktop:

Adding Cristalyse MCP to Claude

Add a custom connector with URL: https://docs.cristalyse.com/mcp

Cristalyse MCP added to Claude

That's it. No API keys, no authentication complexity, no additional dependencies.

Real-World Impact: Before vs After

Let me show you the difference with a concrete example. Say you want to build a dual Y-axis chart comparing revenue and customer count over time.

Before MCP:

  1. Remember that Cristalyse supports dual Y-axis (if you remember at all)
  2. Open documentation in browser
  3. Search for "dual Y-axis" or "secondary axis"
  4. Find the relevant API methods
  5. Look for code examples
  6. Copy/paste and adapt to your data
  7. Debug inevitable syntax issues
  8. Repeat for styling, interactions, etc.

With MCP:
Simply ask in your IDE: "Show me how to create a dual Y-axis chart with Cristalyse where left axis shows revenue and right axis shows customer count, both animated"

Your AI assistant responds immediately:

CristalyseChart()
  .data(businessData)
  .mapping(x: 'month', y: 'revenue', y2: 'customers')
  .geomLine(color: Colors.blue)
  .geomLine(yAxis: YAxis.secondary, color: Colors.green) 
  .scaleYContinuous(
    format: NumberFormat.currency(),
    title: "'Revenue ($)',"
  )
  .scaleY2Continuous(
    format: NumberFormat.decimalPattern(),
    title: "'Customer Count',"
  )
  .theme(ChartTheme.business())
  .animate(duration: Duration(milliseconds: 1500))
  .build();
Enter fullscreen mode Exit fullscreen mode

The AI can even explain the key concepts: "The y2 mapping creates a secondary Y-axis, and yAxis: YAxis.secondary tells the second line geometry to use that axis..."

Why Grammar of Graphics + AI is Powerful

Cristalyse implements the grammar of graphics paradigm (think ggplot2 for Flutter). This creates an interesting synergy with AI assistance:

Composable APIs benefit from guided assembly. Grammar of graphics is all about layering components:

  • Data + Mappings + Geometries + Scales + Themes = Chart

AI can help you navigate these layers intelligently:

// Ask: "I have sales data with categories, how do I make a stacked bar chart?"
// AI understands you need:

CristalyseChart()
  .data(salesData)
  .mapping(x: 'quarter', y: 'amount', fill: 'category')
  // ^ AI knows 'fill' creates the stacking
  .geomBar(position: Position.stack)
  // ^ AI knows Position.stack is needed for stacking
  .scaleYContinuous(format: NumberFormat.currency())
  .scaleColorDiscrete(palette: CustomPalette.categorical)
  .theme(ChartTheme.minimal())
  .build();
Enter fullscreen mode Exit fullscreen mode

Complex data transformations become approachable. When you're dealing with:

  • Multi-dimensional data mapping
  • Statistical transformations
  • Custom scales and color palettes
  • Animation coordination

Having an AI assistant that understands the grammar makes these advanced features accessible to developers who might otherwise stick to basic charts.

The Technical Implementation: Building an MCP Server

For other package maintainers interested in implementing MCP support, here's what's involved:

1. MCP Server Architecture
Our MCP server is a lightweight HTTP service that provides:

  • Document search and retrieval
  • Code example matching
  • API reference lookup
  • Context-aware responses

2. Documentation Structure
We structure our docs for optimal MCP consumption:

## Bubble Charts
Description: Multi-dimensional data visualization...
Enter fullscreen mode Exit fullscreen mode

Basic Usage

CristalyseChart()
  .data(data)
  .mapping(x: 'x', y: 'y', size: 'size')
  .geomBubble()
  .build();
Enter fullscreen mode Exit fullscreen mode

3. Response Optimization
The MCP server returns structured responses that AI assistants can parse effectively:

  • Code examples with syntax highlighting
  • API references with parameter details
  • Best practices and common patterns
  • Error handling guidance

Performance Considerations

You might wonder about the performance impact of MCP queries. In practice:

Latency: ~200-500ms for most queries (similar to searching docs manually)
Caching: Responses are cached by AI assistants
Offline fallback: AI assistants still have their base training knowledge
Rate limiting: Built-in protections prevent abuse

The performance is more than acceptable for the productivity gains you get.

Future Implications: The AI-Native Development Era

MCP support in Cristalyse isn't just about convenience - it's a glimpse into how developer tooling will evolve:

Domain-Specific AI Assistance: Instead of generic coding help, you get expert-level guidance in specialized domains like data visualization.

Contextual Code Generation: AI assistants can generate more sophisticated code because they understand the full API surface and best practices.

Interactive Documentation: The line between documentation and development environment disappears.

Collaborative Development: AI becomes a true pair programming partner that knows your tools as well as you do.

Real-World Examples

Here are some queries developers are already using:

Complex Data Handling:
"I have time series data with multiple metrics. How do I create a line chart where each metric has its own Y-axis scale and color?"

Performance Optimization:

"What's the best way to handle large datasets in Cristalyse? Show me data downsampling and virtualization techniques."

Advanced Interactions:
"How do I implement custom tooltips that show related data when hovering over a point in a scatter plot?"

Theme Customization:
"Create a dark theme for my charts that matches my app's brand colors with proper contrast ratios."

Getting Started Today

Ready to experience AI-assisted chart development? Here's your quickstart:

  1. Install Cristalyse: flutter pub add cristalyse

  2. Set up MCP in your AI coding assistant (choose one):

   // Cursor/Windsurf/Warp
   "cristalyse_docs": {"url": "https://docs.cristalyse.com/mcp"}
Enter fullscreen mode Exit fullscreen mode
   # Claude Code CLI
   claude mcp add --transport http cristalyse_docs https://docs.cristalyse.com/mcp
Enter fullscreen mode Exit fullscreen mode
  1. Start building: Ask your AI assistant anything about Cristalyse

  2. Share your experience: We're actively improving based on developer feedback

What's Next?

This is just the beginning. We're working on:

Enhanced AI Training: Better understanding of chart design principles and data visualization best practices.

Interactive Examples: AI-generated examples that adapt to your specific data structure.

Performance Guidance: AI assistant that can analyze your chart code and suggest optimizations.

Integration Recommendations: Smart suggestions for integrating charts with your existing Flutter app architecture.

The Bigger Picture

Cristalyse's MCP integration represents a new category of developer tooling: AI-native libraries. These aren't just packages with good documentation - they're designed from the ground up to work seamlessly with AI development workflows.

As the Flutter ecosystem evolves, I believe we'll see more packages adopting similar approaches. The combination of powerful, well-designed APIs and AI assistance that deeply understands those APIs will define the next generation of developer productivity tools.

The question isn't whether AI will change how we write code - it's whether our tools will evolve to make that change as powerful as possible.


Want to try Cristalyse with MCP support? Check out our setup guide and start building charts that write themselves.

Links:


Have you tried AI-assisted development with domain-specific tools? What has your experience been? Let me know in the comments!

Top comments (0)