README.mdโข8.42 kB
# Dynamic Excel MCP Server
Dynamic Excel file generation server using Model Context Protocol (MCP). This server allows LLMs to automatically create Excel files with any structure through dynamic JSON schemas.
## ๐ Features
- โ
Generate Excel files from JSON schemas
- โ
**Dual transport modes**: Local (stdio) and Remote (HTTP/SSE)
- โ
**Deploy anywhere**: VPS, Cloud (AWS, GCP, Heroku), Docker
- โ
Multiple sheets support
- โ
Advanced formatting (styling, borders, colors)
- โ
Data validation and conditional formatting
- โ
Formulas and calculations
- โ
Charts support (limited)
- โ
Page setup and printing options
- โ
S3 and local file storage
- โ
Presigned URLs for secure downloads
- โ
Freeze panes, auto-filter
- โ
Merged cells and row grouping
- โ
API key authentication
- โ
CORS support for web clients
## ๐ฆ Installation
```bash
npm install
npm run build
```
## โ๏ธ Configuration
Create a `.env` file (copy from `.env.example`):
**For Local (Stdio) Mode:**
```env
TRANSPORT_MODE=stdio # Local MCP client mode
STORAGE_TYPE=local
DEV_STORAGE_PATH=./temp-files
LOG_LEVEL=info
```
**For Remote (HTTP/SSE) Mode:**
```env
TRANSPORT_MODE=http # Remote server mode
HTTP_PORT=3000
HTTP_HOST=0.0.0.0
ALLOWED_ORIGINS=* # Or specific domains: https://app.example.com
API_KEY=your-secret-api-key # Optional
STORAGE_TYPE=s3 # or 'local'
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_REGION=ap-southeast-1
S3_BUCKET=your-bucket
PRESIGNED_URL_EXPIRY=3600
LOG_LEVEL=info
```
## ๐ง Usage
### ๐ฅ๏ธ Local Mode (Stdio) - For Claude Desktop
Add to your Claude Desktop or MCP client configuration:
**For macOS** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"excel-generator": {
"command": "node",
"args": ["/absolute/path/to/excel-mcp-server/build/index.js"],
"env": {
"STORAGE_TYPE": "local",
"DEV_STORAGE_PATH": "./temp-files",
"LOG_LEVEL": "info"
}
}
}
}
```
**For Windows** (`%APPDATA%\Claude\claude_desktop_config.json`):
```json
{
"mcpServers": {
"excel-generator": {
"command": "node",
"args": ["C:\\path\\to\\excel-mcp-server\\build\\index.js"],
"env": {
"STORAGE_TYPE": "local",
"DEV_STORAGE_PATH": "./temp-files",
"LOG_LEVEL": "info"
}
}
}
}
```
### ๐ Remote Mode (HTTP/SSE) - For Web Apps & Remote Access
**Start the server:**
```bash
# Using environment variable
TRANSPORT_MODE=http npm start
# Or using npm script
npm run start:http
# Or with .env file configured for http mode
npm start
```
**Server endpoints:**
```
http://localhost:3000/health - Health check
http://localhost:3000/info - Server information
http://localhost:3000/sse - SSE endpoint for MCP clients
```
**Example client usage:**
See `examples/client-example.ts` for a complete TypeScript client example using the MCP SDK.
```typescript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
const transport = new SSEClientTransport(
new URL('http://localhost:3000/sse'),
{
headers: { 'X-API-Key': 'your-api-key' } // If API_KEY is set
}
);
const client = new Client({
name: 'excel-client',
version: '1.0.0',
}, { capabilities: {} });
await client.connect(transport);
const result = await client.callTool({
name: 'generate_excel',
arguments: excelSchema
});
```
**Deployment options:**
- ๐ณ **Docker**: See `DEPLOYMENT.md` for Dockerfile and docker-compose examples
- โ๏ธ **Cloud**: Deploy to AWS, GCP, Heroku, etc.
- ๐ง **VPS**: Use PM2, systemd, or other process managers
- ๐ **Production**: Enable API key auth, configure CORS, use HTTPS
๐ **Full deployment guide**: See [DEPLOYMENT.md](./DEPLOYMENT.md)
### Tool: generate_excel
The server provides one tool: `generate_excel`
**Input Schema:**
```json
{
"file_name": "report.xlsx",
"sheets": [
{
"name": "Sheet1",
"columns": [...],
"data": [...],
"formatting": {...}
}
],
"metadata": {...},
"options": {...}
}
```
## ๐ JSON Schema Structure
### Column Configuration
```json
{
"header": "Column Name",
"key": "data_key",
"width": 20,
"type": "currency",
"format": "#,##0โซ",
"style": {
"font": {"bold": true, "size": 12},
"alignment": {"horizontal": "center"},
"fill": {
"type": "pattern",
"pattern": "solid",
"fgColor": {"argb": "FFFF0000"}
}
}
}
```
### Supported Column Types
- `text`: Plain text
- `number`: Numeric values
- `currency`: Currency format
- `percentage`: Percentage format
- `date`: Date format
- `datetime`: Date and time format
- `boolean`: Boolean values
- `formula`: Excel formulas
### Formatting Options
```json
{
"freeze_panes": "A2",
"auto_filter": true,
"conditional_formatting": [
{
"range": "A2:A100",
"type": "cellIs",
"operator": "greaterThan",
"formulae": [0],
"style": {
"fill": {
"type": "pattern",
"pattern": "solid",
"fgColor": {"argb": "FF90EE90"}
}
}
}
],
"totals_row": {
"column_key": "=SUM(A2:A100)"
},
"merged_cells": ["A1:D1"],
"row_heights": {
"1": 30,
"2": 25
}
}
```
## ๐ Examples
### 1. Simple Data Table
See: `examples/01-simple-table.json`
Creates a basic product table with formatting:
- Freeze panes
- Auto-filter
- Currency formatting
### 2. Financial Report
See: `examples/02-financial-report.json`
Advanced report with:
- Report layout with title
- Conditional formatting
- Percentage calculations
- Formula totals
### 3. Employee Database
See: `examples/03-employee-database.json`
Employee management spreadsheet with:
- Multiple column types
- Date formatting
- Currency display
- Auto-filter
### 4. Multi-Sheet Report
See: `examples/04-multi-sheet-report.json`
Comprehensive report with:
- Multiple sheets
- Summary and detail views
- Cross-sheet consistency
## ๐จ Development
```bash
# Run in development mode (with auto-reload)
npm run dev
# Build TypeScript
npm run build
# Start production server
npm start
# Run tests
npm test
# Lint code
npm run lint
```
## ๐งช Testing with MCP Inspector
Test the server using the MCP Inspector:
```bash
npx @modelcontextprotocol/inspector node build/index.js
```
## ๐ฏ Use Cases
1. **Data Export**: Export database queries to formatted Excel files
2. **Financial Reports**: Generate quarterly/annual financial statements
3. **Inventory Management**: Create product catalogs and stock reports
4. **HR Management**: Employee databases and payroll reports
5. **Sales Analytics**: Sales reports with charts and conditional formatting
6. **Project Tracking**: Project status reports with multiple sheets
## ๐๏ธ Architecture
```
src/
โโโ index.ts # MCP Server entry point
โโโ types/
โ โโโ schema.ts # TypeScript types & Zod schemas
โโโ generators/
โ โโโ base-generator.ts # Abstract base class
โ โโโ basic-generator.ts # Simple tables
โ โโโ report-generator.ts # Reports with styling
โโโ formatters/
โ โโโ cell-formatter.ts # Cell formatting
โ โโโ style-formatter.ts # Styling utilities
โ โโโ formula-builder.ts # Formula generation
โโโ storage/
โ โโโ s3-storage.ts # S3 upload handler
โ โโโ local-storage.ts # Local file system
โโโ validators/
โ โโโ schema-validator.ts # JSON schema validation
โโโ utils/
โโโ logger.ts # Logging utility
โโโ error-handler.ts # Error handling
```
## ๐ Security Notes
- For S3 storage, ensure proper IAM permissions
- Use presigned URLs for temporary file access
- Set appropriate expiry times for download links
- Validate all user inputs through Zod schemas
## ๐ License
MIT
## ๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## ๐ง Support
For issues and questions, please open an issue on GitHub.
## ๐ Acknowledgments
Built with:
- [Model Context Protocol (MCP)](https://github.com/anthropics/mcp)
- [ExcelJS](https://github.com/exceljs/exceljs)
- [Zod](https://github.com/colinhacks/zod)
- [AWS SDK](https://aws.amazon.com/sdk-for-javascript/)