A real Excel file
The result is a downloadable .xlsx workbook with formulas, formatting, charts, tables, validation, and workbook metadata—not a table pasted into chat.
zSpreadsheet plans, builds, styles, calculates, previews, and versions real Excel workbooks from a conversation. The result stays visible and editable throughout the work.

Why it is a super agent
A basic spreadsheet assistant might answer a formula question or return a block of CSV. zSpreadsheet takes responsibility for the finished workbook: its structure, formulas, data, formatting, calculation, file creation, and the experience of reviewing it.
The agent still works inside visible boundaries. It can call only the spreadsheet tools connected to the runtime, saves into the user’s workspace, and shows its progress in the interface. The person can inspect the formula bar, edit the workbook directly, download the file, or continue the conversation.
This is what makes the product a useful ADK-Rust case study. Multiple agents, an MCP capability server, RAG, sessions, streamed events, and artifact storage are assembled around one familiar business result: a workbook someone can open and use.
The result is a downloadable .xlsx workbook with formulas, formatting, charts, tables, validation, and workbook metadata—not a table pasted into chat.
Tool calls stream into the conversation while progressive saves refresh the workbook preview. The person can see the artifact taking shape.
The preview includes a formula bar and direct workbook controls. People can change cells themselves or ask the agent for another pass.
Uploads, active workbook context, agent sessions, and immutable workbook versions remain attached to the user’s workspace.
Follow one workbook
Each stage has a clear responsibility. That separation lets developers change the planning model, workbook tools, styling policy, or storage layer without redesigning the whole product.
Ask for a budget, forecast, pricing model, tracker, operating report, or a change to an existing workbook. Uploaded files can supply the source data.
The planner turns the request into sheets, exact cell locations, formulas, formatting rules, chart ranges, and a save destination.
The writer batches values and formulas through the Excel MCP server. Independent operations can run together, reducing model and tool round trips.
The styling agent applies themes, number formats, borders, tables, charts, and layout. The workbook engine recalculates formulas before saving.
The browser renders the saved workbook, evaluates formulas, supports direct edits, and records a new version without hiding the underlying .xlsx file.
Architecture
The browser is both a conversation interface and a workbook editor. ADK-Rust coordinates the agents and state. MCP gives those agents a controlled connection to the Excel engine that creates the final artifact.
What ADK-Rust v2 contributes
These are source-verified parts of the current implementation. zSpreadsheet does not claim A2A or AWP support today.
Planner, writer, and styler have separate responsibilities while sharing one request and session.
ADK-Rust v2 adapts the 74 MCP tool schemas for Gemini, OpenAI, Anthropic, or DeepSeek at request time.
The application uses ADK-Rust’s rmcp 2.2 re-export, keeping its client and framework on one protocol version.
A connection factory and bounded retry policy can replace the child-process connection when transport failure is recoverable.
The writer and styler can execute independent workbook operations together while dependent work remains ordered.
PostgreSQL stores sessions and events; context compaction keeps longer spreadsheet conversations usable.
ADK-Rust RAG searches uploaded workbook and CSV content before the request reaches the agent workflow.
Agent text, thinking, tool calls, tool results, and completion events become the SSE stream shown in the product UI.
The Rust behind the product
The root agent is a sequential workflow, while the Runner attaches sessions and compaction. The Excel tools arrive through a reconnectable MCP client instead of being hard-coded into the agents.
Read the complete implementation ↗let pipeline = SequentialAgent::new(
"spreadsheet_builder",
vec![
Arc::new(planner),
Arc::new(writer),
Arc::new(styler),
],
);
let runner = Runner::builder()
.app_name("excel_agent")
.agent(Arc::new(pipeline))
.session_service(postgres_sessions)
.compaction_config(compaction)
.build()?;let client = ().serve(
TokioChildProcess::new(Command::new(excel_mcp_server))?
).await?;
let tools = McpToolset::new(client)
.with_connection_factory(factory)
.with_refresh_config(
RefreshConfig::default().with_max_attempts(3)
);Current product boundary

Try the outcome
Start with a business request, watch the agents build it through MCP, inspect the formulas and formatting, then keep the resulting Excel file.