Skip to main content
Glama
nam090320251

Dynamic Excel MCP Server

by nam090320251

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

Related MCP server: Excel MCP Server

๐Ÿ“ฆ Installation

npm install
npm run build

โš™๏ธ Configuration

Create a .env file (copy from .env.example):

For Local (Stdio) Mode:

TRANSPORT_MODE=stdio  # Local MCP client mode
STORAGE_TYPE=local
DEV_STORAGE_PATH=./temp-files
LOG_LEVEL=info

For Remote (HTTP/SSE) Mode:

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):

{
  "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):

{
  "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:

# 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.

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

Tool: generate_excel

The server provides one tool: generate_excel

Input Schema:

{
  "file_name": "report.xlsx",
  "sheets": [
    {
      "name": "Sheet1",
      "columns": [...],
      "data": [...],
      "formatting": {...}
    }
  ],
  "metadata": {...},
  "options": {...}
}

๐Ÿ“š JSON Schema Structure

Column Configuration

{
  "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

{
  "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

# 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:

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:

Available Tools

1 tool
generate_excelA

Generate an Excel file from a structured JSON schema.

Use this tool when the user wants to:

  • Create an Excel file

  • Export data to Excel

  • Generate a report/spreadsheet

  • Download data as .xlsx file

The tool accepts a JSON schema describing the structure, data, and formatting of the Excel file.

Supported features:

  • Multiple sheets

  • Custom column widths and formats

  • Cell styling (fonts, colors, borders, alignment)

  • Data validation

  • Conditional formatting

  • Formulas and totals

  • Charts and images

  • Page setup and printing options

  • Freeze panes, auto-filter

  • Merged cells

  • Grouped rows/columns

  • Sheet protection

Layout types:

  • table: Simple data table (default)

  • report: Formatted report with headers and styling

  • form: Form-style layout

  • dashboard: Dashboard with charts

  • calendar: Calendar view

ParametersJSON Schema
NameRequiredDescriptionDefault
file_nameNoName of the Excel file (e.g., "report.xlsx")
sheetsYesArray of sheet configurations
metadataNoWorkbook metadata
optionsNoOutput options

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists supported features and layout types, which adds some context about capabilities, but it does not disclose critical behavioral traits such as whether the tool creates a file locally or returns a download link, error handling, performance considerations, or any limitations (e.g., file size constraints). For a tool with no annotations and complex functionality, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized, starting with a clear purpose and usage guidelines, followed by supported features and layout types. However, it includes a lengthy list of features that could be condensed or prioritized, and some sentences (e.g., the bullet points under usage) are repetitive. Overall, it is efficient but could be more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (4 parameters, nested objects, no output schema, and no annotations), the description is moderately complete. It covers purpose, usage, features, and layouts, but lacks details on output behavior, error handling, and practical constraints. Without an output schema, it should ideally explain what is returned (e.g., file data or a link), but it does not, leaving gaps for an AI agent to understand full usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by mentioning that the tool 'accepts a JSON schema describing the structure, data, and formatting of the Excel file,' but it does not provide additional syntax, examples, or constraints. With high schema coverage, the baseline is 3, as the description does not compensate with extra param details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Generate an Excel file from a structured JSON schema.' It specifies the verb ('Generate'), resource ('Excel file'), and input type ('structured JSON schema'), making it distinct and unambiguous. With no sibling tools, differentiation is not needed, but the purpose is specific and complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage scenarios: 'Use this tool when the user wants to: - Create an Excel file - Export data to Excel - Generate a report/spreadsheet - Download data as .xlsx file.' This gives clear context for when to use the tool. However, with no sibling tools, there are no alternatives to compare against, so it lacks guidance on when not to use it or what other tools might be available, preventing a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool update
    • First observedgenerate_excel

TDQS

A3.6/5.0
Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap between tools. The single tool 'generate_excel' has a clear and distinct purpose focused on creating Excel files from JSON schemas.

Naming Consistency5/5

Since there is only one tool, naming consistency is inherently perfect. The tool name 'generate_excel' follows a clear verb_noun pattern, and there are no other tools to create inconsistencies.

Tool Count2/5

A single tool for a server named 'Dynamic Excel MCP Server' feels thin and under-scoped. While the tool is feature-rich, the domain suggests operations like reading, updating, or analyzing Excel files, which are missing. This limits the server's utility for comprehensive Excel interactions.

Completeness2/5

The server is severely incomplete for its implied domain of dynamic Excel operations. It only supports generation from JSON schemas, lacking essential CRUD operations such as reading existing files, updating data, or performing analyses. This creates significant gaps that will hinder agent workflows involving Excel beyond initial creation.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nam090320251/dynamic-excel-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server