MCP Specification Format
FigRecipe provides an MCP (Model Context Protocol) server that allows AI agents to create figures declaratively. This page documents the specification format.
Starting the MCP Server
# Start the MCP server
figrecipe mcp start
# Or using FastMCP directly
fastmcp run figrecipe._mcp.server:mcp
Basic Specification Structure
The declarative specification is a dictionary/YAML with these main sections:
# Figure configuration
figure:
figsize: [width, height] # in inches
dpi: 100
facecolor: "white"
# Plot data (list of plot specifications)
plots:
- type: "line" # Plot type
x: [1, 2, 3, 4, 5] # X data
y: [1, 4, 9, 16, 25] # Y data
label: "quadratic" # Legend label
color: "blue" # Line color
linewidth: 2 # Line width
# Axis labels and title
xlabel: "X Axis"
ylabel: "Y Axis"
title: "My Plot"
# Axis limits (optional)
xlim: [0, 10]
ylim: [0, 30]
# Legend configuration
legend:
loc: "upper left"
frameon: true
Plot Types
Line Plot
plots:
- type: line
x: [0, 1, 2, 3, 4]
y: [0, 1, 4, 9, 16]
color: "blue"
linewidth: 2
linestyle: "-" # "-", "--", "-.", ":"
marker: "o" # "o", "s", "^", "v", etc.
markersize: 5
label: "data"
Scatter Plot
plots:
- type: scatter
x: [1, 2, 3, 4, 5]
y: [2, 4, 1, 5, 3]
c: [0.1, 0.3, 0.5, 0.7, 0.9] # Color values
cmap: "viridis" # Colormap
s: 50 # Marker size
alpha: 0.8 # Transparency
edgecolors: "black"
Bar Plot
plots:
- type: bar
x: ["A", "B", "C", "D"]
height: [10, 20, 15, 25]
color: "steelblue"
edgecolor: "black"
width: 0.8
yerr: [1, 2, 1.5, 2.5] # Error bars
capsize: 5
# Horizontal bar plot
plots:
- type: barh
y: ["A", "B", "C", "D"]
width: [10, 20, 15, 25]
Histogram
plots:
- type: hist
x: [1.2, 1.5, 2.1, 2.3, ...] # Data values
bins: 30 # Number of bins
color: "steelblue"
edgecolor: "white"
alpha: 0.7
density: false # Normalize to density
Box Plot
plots:
- type: boxplot
data: [[1,2,3], [4,5,6], [7,8,9]] # List of datasets
labels: ["A", "B", "C"]
notch: false
vert: true
Violin Plot
plots:
- type: violinplot
data: [[1,2,3], [4,5,6], [7,8,9]]
positions: [1, 2, 3]
showmeans: true
showmedians: true
Image/Heatmap
plots:
- type: imshow
data: [[1,2,3], [4,5,6], [7,8,9]] # 2D array
cmap: "viridis"
aspect: "auto"
vmin: 0
vmax: 10
interpolation: "nearest"
Contour Plot
plots:
- type: contourf
X: [[...], [...]] # 2D meshgrid X
Y: [[...], [...]] # 2D meshgrid Y
Z: [[...], [...]] # 2D data values
levels: 20
cmap: "coolwarm"
Fill Between
plots:
- type: fill_between
x: [0, 1, 2, 3, 4]
y1: [0, 1, 2, 1, 0]
y2: 0 # Can be scalar or array
alpha: 0.3
color: "blue"
Error Bar
plots:
- type: errorbar
x: [1, 2, 3, 4, 5]
y: [10, 20, 15, 25, 18]
yerr: [1, 2, 1.5, 2, 1.8]
xerr: [0.5, 0.5, 0.5, 0.5, 0.5]
fmt: "o"
capsize: 5
CSV Data Input
Instead of inline data, you can reference CSV columns:
plots:
- type: scatter
data_file: "experiment_data.csv"
x_column: "time_seconds"
y_column: "signal_amplitude"
c_column: "temperature" # Optional color column
cmap: "coolwarm"
label: "Experiment 1"
Statistical Annotations
Add significance brackets with p-values:
stat_annotations:
- group1_idx: 0 # Index of first group
group2_idx: 1 # Index of second group
p_value: 0.003 # P-value to display
test: "t-test" # Test name (optional)
stars: true # Show as stars (true) or number (false)
- group1_idx: 0
group2_idx: 2
p_value: 0.05
text: "ns" # Custom text instead of p-value
Multi-Panel Figures
Using Axes Array
# Define subplots structure
subplots:
nrows: 2
ncols: 2
figsize: [10, 8]
# Per-axis specifications
axes:
- position: [0, 0] # Row, column
plots:
- type: line
x: [0, 1, 2, 3]
y: [0, 1, 4, 9]
xlabel: "X"
ylabel: "Y"
title: "Panel A"
- position: [0, 1]
plots:
- type: scatter
x: [1, 2, 3, 4]
y: [4, 2, 5, 1]
title: "Panel B"
MCP Tool Reference
plt_plot
Create a figure from specification:
result = plt_plot(
spec={...}, # Specification dict
output_path="fig.png",
dpi=300,
save_recipe=True # Also save as .yaml
)
plt_reproduce
Reproduce from saved recipe:
result = plt_reproduce(
recipe_path="fig.yaml",
output_path="reproduced.png",
format="png",
dpi=300
)
plt_compose
Combine multiple figures:
result = plt_compose(
sources=["panel_a.png", "panel_b.png"],
output_path="combined.png",
layout="horizontal", # or "vertical", "grid"
gap_mm=5.0,
panel_labels=True,
label_style="uppercase"
)
plt_info
Get recipe information:
info = plt_info(recipe_path="fig.yaml", verbose=True)
plt_validate
Validate reproduction fidelity:
result = plt_validate(
recipe_path="fig.yaml",
mse_threshold=100.0
)
plt_crop
Crop whitespace from figure:
result = plt_crop(
input_path="fig.png",
output_path="fig_cropped.png",
margin_mm=1.0
)
plt_extract_data
Extract plotted data from recipe:
data = plt_extract_data(recipe_path="fig.yaml")
# Returns: {call_id: {'x': [...], 'y': [...], ...}}
plt_list_styles
List available style presets:
styles = plt_list_styles()
# Returns: {"presets": ["default", ...], "count": N}
plt_get_plot_types
Get supported plot types:
types = plt_get_plot_types()
# Returns: {"plot_types": [...], "categories": {...}}
Diagram Tools
diagram_create
Create a diagram from YAML specification:
result = diagram_create(
spec_dict={...}, # Or spec_path="diagram.yaml"
)
# Returns: {"mermaid": "...", "graphviz": "..."}
diagram_render
Render diagram to image:
result = diagram_render(
spec_path="diagram.yaml",
output_path="diagram.png",
format="png", # png, svg, pdf
backend="auto", # mermaid-cli, graphviz, mermaid.ink
scale=2.0
)
diagram_compile_mermaid
Compile to Mermaid format:
result = diagram_compile_mermaid(
spec_path="diagram.yaml",
output_path="diagram.mmd"
)
diagram_compile_graphviz
Compile to Graphviz DOT format:
result = diagram_compile_graphviz(
spec_path="diagram.yaml",
output_path="diagram.dot"
)
diagram_list_presets
List available diagram presets:
presets = diagram_list_presets()
# Returns: {"workflow": ..., "decision": ..., "pipeline": ..., "scientific": ...}
diagram_get_backends
Check rendering backend availability:
backends = diagram_get_backends()
# Returns availability and installation instructions
All MCP Tools Summary
Tool |
Description |
|---|---|
plt_plot |
Create figure from declarative spec |
plt_reproduce |
Reproduce figure from recipe |
plt_compose |
Combine multiple figures |
plt_info |
Get recipe information |
plt_validate |
Validate reproduction fidelity |
plt_crop |
Crop whitespace from image |
plt_extract_data |
Extract plotted data arrays |
plt_list_styles |
List style presets |
plt_get_plot_types |
Get supported plot types |
diagram_create |
Create diagram from spec |
diagram_render |
Render diagram to image |
diagram_compile_mermaid |
Compile to Mermaid format |
diagram_compile_graphviz |
Compile to Graphviz format |
diagram_list_presets |
List diagram presets |
diagram_get_preset |
Get preset configuration |
diagram_get_backends |
Check backend availability |
diagram_split |
Split large diagram into parts |
diagram_get_paper_modes |
Get paper layout modes |