Skip to main content
Glama
test-files-mcp

test-files-mcp

by Zulelee

Test Files MCP

Generate test files directly from your AI coding assistant.

Need a 20 MB JPEG? A 100,000-row CSV? A corrupted PDF? Ask your MCP client and Test Files MCP creates it locally.

One-click install

Add to Cursor Add to Claude

Client

What happens when you click

Cursor

Opens Cursor and prompts you to add the MCP server

Claude Desktop

Downloads test-files-mcp.mcpb — double-click it to install

Claude Desktop has no URL deeplink for MCP JSON config. The .mcpb bundle is Anthropic's official one-click install format for local servers.

Open Settings → Developer → Edit Config and add:

{
  "mcpServers": {
    "test-files": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/Zulelee/test-files-mcp",
        "test-files-mcp"
      ]
    }
  }
}

Related MCP server: nano-banana-mcp

Why this exists

Testing file uploads, parsers, validators, and storage limits usually means hunting for sample files or writing one-off scripts. Test Files MCP lets you describe what you need in plain language and get a real file on disk with useful metadata back.

Features

  • Dummy files — exact byte sizes (1 byte to GB-scale, within limits)

  • Images — JPEG, PNG, WEBP, BMP with dimensions, patterns, and approximate target sizes

  • PDFs — multi-page, blank or with fixture text, approximate target sizes

  • CSV — streamed generation up to 1M rows

  • JSON — valid or intentionally malformed fixtures

  • ZIP archives — empty, flat, or nested

  • WAV audio — tones or silence at configurable duration

  • Corrupted files — truncate, bad headers, garbage bytes, wrong extensions

  • Edge-case filenames — spaces, unicode, long names, hidden files

  • File inspection — size, MIME type, SHA256, image/audio metadata

Example prompts

Tell your MCP client things like:

Create a 25 MB JPEG

Generate a CSV with 500,000 rows

Create a corrupted PDF

Give me a 30-second WAV

Create an empty ZIP

Generate a weird filename for upload testing

Installation

From Git (replace Zulelee with your GitHub username or org):

uvx --from git+https://github.com/Zulelee/test-files-mcp test-files-mcp

After publishing to PyPI:

uvx test-files-mcp

From source

git clone https://github.com/Zulelee/test-files-mcp
cd test-files-mcp
uv sync
uv run test-files-mcp

Cursor setup

This repository follows the Agent Plugins standard. Plugin components live at the repo root:

.plugin/plugin.json      # Portable manifest
.cursor-plugin/plugin.json
.mcp.json               # MCP server (stdio via uv)
skills/                 # Agent skills
commands/               # Slash commands
agents/                 # Subagents
rules/                  # Project rules
hooks/hooks.json        # Lifecycle hooks
.lsp.json               # Python LSP config

Add to your Cursor MCP settings (.cursor/mcp.json or Cursor Settings → MCP):

{
  "mcpServers": {
    "test-files": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/Zulelee/test-files-mcp",
        "test-files-mcp"
      ]
    }
  }
}

For local development:

{
  "mcpServers": {
    "test-files": {
      "command": "uv",
      "args": ["run", "test-files-mcp"],
      "cwd": "/path/to/test-files-mcp"
    }
  }
}

Claude Desktop setup

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "test-files": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/Zulelee/test-files-mcp",
        "test-files-mcp"
      ]
    }
  }
}

Available MCP tools

Tool

Description

create_dummy_file_tool

Generic file with exact byte size

create_image_tool

JPEG, PNG, WEBP, BMP images

create_pdf_tool

Multi-page PDF fixtures

create_csv_tool

CSV with synthetic rows (streamed)

create_json_tool

Valid or malformed JSON

create_archive_tool

ZIP archives

create_audio_tool

WAV audio (tone or silence)

create_corrupted_file_tool

Corrupted copy of a file

create_edge_case_filename_tool

Files with tricky filenames

inspect_file_tool

Inspect file metadata

Configuration

Set environment variables to customize behavior:

Variable

Default

Description

TEST_FILES_OUTPUT_DIR

./test-files-output/

Default output directory

TEST_FILES_MAX_FILE_SIZE_MB

250

Maximum file size (MB)

TEST_FILES_MAX_CSV_ROWS

1000000

Maximum CSV rows

TEST_FILES_MAX_PDF_PAGES

1000

Maximum PDF pages

TEST_FILES_MAX_IMAGE_DIMENSION

12000

Max image width/height

TEST_FILES_MAX_AUDIO_DURATION_SECONDS

600

Max audio duration

Generated files are written to the output directory and returned as absolute paths.

Safety limits

This MCP intentionally generates large files. Requests exceeding configured limits return a clear error — values are never silently clamped.

Example error:

Requested file size is 500 MB, but the configured maximum is 250 MB.
Set TEST_FILES_MAX_FILE_SIZE_MB to increase the limit.

Development

git clone https://github.com/Zulelee/test-files-mcp
cd test-files-mcp
uv sync --group dev

Running tests

uv run pytest
uv run ruff check src tests

Rebuild Claude Desktop bundle

mcpb pack . dist/test-files-mcp.mcpb

Regenerate install badge URLs after changing MCP config:

uv run python scripts/generate-install-badges.py

MCP Inspector

uv run mcp dev src/test_files_mcp/server.py

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Suggested topics for the repository:

mcp, model-context-protocol, python, testing, developer-tools, test-data, fixtures, qa, cursor, claude, file-upload, open-source

License

MIT — see LICENSE.

Available Tools

10 tools
create_archive_toolA

Generate a ZIP archive test fixture.

Examples: empty ZIP, ZIP with 100 files, nested directory structure.

Inputs: seed, empty, files, nested, +5 more. Returns: result

create_audio_toolB

Generate a WAV audio test fixture.

Examples: 30-second silent WAV, 5-second 440 Hz tone.

Inputs: silence, tone_hz, channels, filename, +4 more. Returns: result

create_corrupted_file_toolB

Create a corrupted copy of a file for testing error handling. Never modifies the original.

Examples: corrupted JPEG, PDF truncated at 70%, ZIP with random bytes, PNG with wrong extension.

Inputs: seed, filename, severity, file_type, +4 more. Returns: result

create_csv_toolB

Generate a CSV test fixture with synthetic data, streamed to disk.

Examples: 0 rows, 100,000 rows, 1,000,000 rows (within configured limits).

Inputs: rows, seed, columns, headers, +6 more. Returns: result

create_dummy_file_toolA

Create a dummy file of a requested size for testing file uploads, storage limits, validators, APIs, and other file-handling code.

Examples: 1 byte file, 500 KB, 20 MB, 1 GB (within configured limits). Content can be random bytes, zeros, or repeating text.

Inputs: seed, content, size_kb, size_mb, +4 more. Returns: result

create_edge_case_filename_toolB

Generate a file with an edge-case filename for upload/path testing.

Cases: spaces, unicode, very_long, multiple_dots, uppercase_extension, no_extension, hidden.

Inputs: case, extension, overwrite, size_bytes, +1 more. Returns: result

create_image_toolA

Generate a test image (JPEG, PNG, WEBP, BMP) with configurable dimensions, patterns, and approximate target file size.

Examples: 8000x8000 JPEG, approximately 20 MB JPEG, checkerboard PNG.

Inputs: seed, width, format, height, +8 more. Returns: result

create_json_toolB

Generate a JSON test fixture. Set malformed=true for intentionally invalid JSON.

Examples: valid JSON array, malformed JSON with trailing comma or missing bracket.

Inputs: seed, depth, items, pretty, +4 more. Returns: result

create_pdf_toolB

Generate a PDF test fixture with a specified number of pages.

Examples: 100 blank pages, 200-page PDF with sample text, ~30 MB PDF.

Inputs: blank, pages, filename, overwrite, +4 more. Returns: result

inspect_file_toolA

Inspect a generated test file and return metadata (size, MIME type, SHA256, etc.).

Inputs: path (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool maps to a distinct fixture category—generic dummy bytes, specific formats, corrupted files, edge-case filenames, and inspection—so an agent can select by intended purpose without ambiguity. Although corrupted-file and format-specific tools both generate files for error handling, the valid-vs-corrupted distinction is clear.

    Naming Consistency5/5

    All creation tools follow a consistent create_<format>_tool pattern (e.g. create_pdf_tool, create_archive_tool), with inspect_file_tool as the one inspect_* verb. This makes the API predictable and easy to navigate.

    Tool Count5/5

    Ten tools is well-scoped for a test-fixture generator: nine creators cover generic and format-specific cases plus an inspector. None seem redundant or excessive.

    Completeness4/5

    The set covers common fixture generation needs: arbitrary dummy files, specific formats, malformed/corrupted variants, difficult filenames, and metadata inspection. Missing cleanup/removal of generated fixtures and a few formats like video/docx are minor gaps, but core workflows are covered.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers