Skip to content

ChefJulio/overtooled-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

overtooled-mcp

MCP server for local file conversion, analysis, and image processing. Images, audio, video, documents, and structured data -- all processed locally, nothing uploaded anywhere.

44 supported formats across 5 categories. 7 tools for converting, analyzing, processing, merging, and generating files.

Install

npx overtooled-mcp

Or install globally:

npm install -g overtooled-mcp

Requires Node.js >= 18.

Configure

Claude Code / Claude Desktop

Add to your MCP settings:

{
  "mcpServers": {
    "overtooled": {
      "command": "npx",
      "args": ["-y", "overtooled-mcp"]
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "overtooled": {
      "command": "npx",
      "args": ["-y", "overtooled-mcp"]
    }
  }
}

Tools

convert_file

Convert a file from one format to another.

Parameter Type Required Description
input_path string Yes Absolute path to the source file
output_format string Yes Target format as MIME type (image/png) or extension (png)
output_path string No Output file path. Defaults to input location with new extension
options object No Format-specific options (e.g. { quality: 80 })
input_path: "/photos/vacation.heic"
output_format: "jpg"
options: { quality: 90 }

Returns the output path, input/output sizes, and format-specific metadata (dimensions for images, duration for audio/video, etc.).


analyze_file

Get detailed metadata about any file. For images: dimensions, color space, DPI, EXIF. For audio/video: duration, codec, bitrate, sample rate. For all files: size, format detection, entropy.

Parameter Type Required Description
input_path string Yes Absolute path to the file to analyze
include_exif boolean No Include full EXIF data for images (default: true)
input_path: "/photos/sunset.jpg"

Example output:

{
  "file": "sunset.jpg",
  "size": 2457600,
  "sizeHuman": "2.3 MB",
  "format": "image/jpeg",
  "category": "image",
  "entropy": 7.45,
  "width": 3840,
  "height": 2160,
  "colorSpace": "srgb",
  "dpi": 72,
  "exif": { "Make": "Canon", "Model": "EOS 5D", "FocalLength": 50 }
}

For audio/video files, returns duration, codec, bitrate, sample rate, channels, and stream details.


process_image

Apply one or more image operations: resize, compress, rotate, flip, blur, sharpen, grayscale, negate, strip metadata, or change format. Operations are chained in order.

Parameter Type Required Description
input_path string Yes Absolute path to the source image
output_path string No Output path. Defaults to input_processed.[ext]
operations array Yes Array of operations to apply in order (min 1)

Operations:

Type Parameters Description
resize width, height, fit Scale image. fit: cover, contain, fill, inside (default), outside
compress quality (1-100, default 80) Reduce file size
rotate angle (degrees) Rotate by arbitrary angle
flip -- Flip vertically
flop -- Flip horizontally
blur sigma (0.3-100, default 3) Gaussian blur
sharpen sigma (default 1) Sharpen edges
grayscale -- Convert to grayscale
negate -- Invert colors
strip_metadata -- Remove EXIF and other metadata
format format, quality Convert to jpeg, png, webp, tiff, or avif
input_path: "/photos/large.jpg"
operations: [
  { type: "resize", width: 1280 },
  { type: "compress", quality: 75 },
  { type: "format", format: "webp" }
]

merge_files

Combine multiple files into one. Supports PDF merging, images-to-PDF, text concatenation, and CSV merging.

Parameter Type Required Description
input_paths array Yes Array of absolute file paths (min 2)
output_path string Yes Absolute path for the merged output
mode string No auto (default), pdf_merge, images_to_pdf, concatenate, csv_merge
options.separator string No Separator between concatenated files (default: newline)
options.page_size string No PDF page size: a4 (default), letter, legal
options.landscape boolean No Landscape orientation for PDF (default: false)

Auto-detection: all PDFs -> pdf_merge, all images -> images_to_pdf, all CSVs -> csv_merge, otherwise -> concatenate.

input_paths: ["/docs/ch1.pdf", "/docs/ch2.pdf", "/docs/ch3.pdf"]
output_path: "/docs/combined.pdf"

generate_file

Generate placeholder/test files from scratch. No input file needed.

Parameter Type Required Description
type string Yes text, image, audio, video, or data
output_path string Yes Absolute path for the generated file

Text options (lorem ipsum):

Parameter Type Default Description
text_mode string paragraphs paragraphs, sentences, or words
text_count number 3 Number of units to generate

Image options (placeholder with dimensions label, requires sharp):

Parameter Type Default Description
width number 800 Width in pixels (max 4096)
height number 600 Height in pixels (max 4096)
bg_color string #cccccc Background color (hex)
text_color string #666666 Text color (hex)
label string WIDTHxHEIGHT Custom text overlay
image_format string png png, jpeg, or webp
quality number 92 Quality for JPEG/WebP (1-100)

Audio options (WAV, pure JS -- no ffmpeg needed):

Parameter Type Default Description
audio_type string tone tone, noise, chirp, or silence
frequency number 440 Tone frequency in Hz
duration number 3 Duration in seconds (max 30)
sample_rate number 44100 Sample rate
waveform string sine sine, square, sawtooth, or triangle

Video options (MP4/WebM with test patterns, requires ffmpeg):

Parameter Type Default Description
width number 640 Width in pixels (max 1920)
height number 480 Height in pixels (max 1080)
duration number 3 Duration in seconds (max 30)
fps number 30 Frames per second (max 60)
video_format string mp4 mp4 or webm
video_pattern string solid solid, counter, gradient, or bars (SMPTE)
bg_color string #336699 Background color (hex)
text_color string #ffffff Text color (hex)

Data options (mock JSON/CSV):

Parameter Type Default Description
data_format string json json or csv
data_preset string user-profile user-profile, address-book, employee-list, or products
row_count number 10 Number of rows (max 1000)
type: "image"
output_path: "/tmp/placeholder.png"
width: 1280
height: 720
label: "Hero Image"
type: "audio"
output_path: "/tmp/test-tone.wav"
audio_type: "tone"
frequency: 1000
duration: 5
waveform: "square"

list_formats

List all supported formats, optionally filtered by category or by what a given input format can convert to.

Parameter Type Required Description
category string No Filter by category: image, audio, video, text, document
input_format string No Show only formats this input can convert to (MIME or extension)
category: "image"
input_format: "csv"    # shows what CSV can convert to

get_conversion_options

Get available options and their defaults for a specific output format.

Parameter Type Required Description
output_format string Yes Target format as MIME type or extension
output_format: "mp3"

Returns format info plus configurable options (quality, bitrate, compression level, etc.).

Supported Formats

Images (9 input, 4 output)

Format Input Output Options
PNG yes yes --
JPEG yes yes quality: 1-100 (default 92)
WebP yes yes quality: 1-100 (default 80)
GIF yes -- --
BMP yes -- --
SVG yes -- --
HEIC yes -- --
HEIF yes -- --
TIFF yes yes --

Audio (8 input, 7 output)

Format Input Output Options
WAV yes yes bitDepth: 16/24/32
MP3 yes yes bitrate: 128/192/256/320 kbps
FLAC yes yes compressionLevel: 0-8
OGG yes -- --
AAC yes yes bitrate: 128/192/256/320 kbps
M4A yes yes bitrate: 128/192/256/320 kbps
Opus yes yes bitrate: 64/128/192/256 kbps
AIFF yes yes bitDepth: 16/24/32

Video (6 input, 6 output)

Format Input Output Options
MP4 yes yes crf: 0-51 (default 28), preset, maxHeight
WebM yes yes crf: 0-63 (default 32), preset, maxHeight
MOV yes yes crf: 0-51 (default 28), preset, maxHeight
AVI yes -- --
MKV yes yes crf: 0-51 (default 28), preset, maxHeight
MPEG-TS yes yes crf: 0-51 (default 28), preset, maxHeight
GIF -- yes fps: 5-30 (default 10), maxHeight

Video options: preset (ultrafast/fast/medium/slow), maxHeight (4K/1440/1080/720/480/360), stripAudio (boolean).

Data (9 input, 10 output)

Format Input Output Options
JSON yes yes indent: 0-8 (default 2)
CSV yes yes delimiter: comma/semicolon/pipe
TSV yes yes --
XML yes yes indent: 0-8 (default 2)
YAML yes yes --
TOML yes yes --
INI yes yes --
XLSX yes yes --
SQL -- yes tableName, dialect: insert/create-insert

Markup

Format Input Output
Markdown yes yes
HTML yes yes
Plain Text yes yes

Documents (7 input, 1 output)

Format Input Output Notes
PDF yes yes Also converts to images or plain text
DOCX yes -- Converts to PDF
PPTX yes -- Converts to PDF
ODT yes -- Converts to PDF
ODP yes -- Converts to PDF
ODS yes -- Converts to PDF
RTF yes -- Converts to PDF

Cross-category: All images, structured data, and markup can also convert to PDF.

Conversion Rules

  • Within category: Any input -> all outputs in the same category (excluding same format)
  • To PDF: Images, structured data, and markup can all convert to PDF
  • From PDF: PDF -> images (first page rendered) or plain text (extracted)
  • Documents -> PDF: DOCX, PPTX, ODT, ODP, ODS, RTF all convert to PDF only
  • No cross-category: Audio cannot convert to images, video cannot convert to data, etc.

Dependencies

Required (installed automatically): Text and data conversion works out of the box.

Optional (install for full format support):

Package Enables Install
sharp Image conversion and analysis npm install sharp
ffmpeg-static Audio/video conversion npm install ffmpeg-static
canvas PDF-to-image rendering npm install canvas

If ffmpeg-static is not installed, the server looks for ffmpeg in your system PATH.

Missing optional dependencies produce clear error messages telling you what to install.

Architecture

Ported from Overtooled -- a 179-tool browser utility suite. The conversion engines were adapted from client-side (Canvas, Web Audio, WebCodecs) to Node.js (sharp, FFmpeg, PDFKit).

src/
  server.ts              # MCP server + tool registration
  tools/                 # 7 tool handlers
    convert-file.ts
    analyze-file.ts
    process-image.ts
    merge-files.ts
    generate-file.ts
    list-formats.ts
    get-options.ts
  engines/               # Conversion engines by category
    engine-image.ts      # sharp
    engine-audio.ts      # FFmpeg CLI
    engine-video.ts      # FFmpeg CLI
    engine-text.ts       # Pure JS
    engine-pdf.ts        # PDFKit + pdfjs-dist + mammoth
  registry/
    format-registry.ts   # Format definitions + conversion matrix
  utils/
    mime.ts              # MIME detection from extension
    ffmpeg.ts            # FFmpeg binary resolution
    ffprobe.ts           # Media metadata extraction via ffprobe
    magic-bytes.ts       # File type detection by header bytes

Engines

  • Text engine: Pure JS. JSON, CSV, XML, YAML, TOML, INI, SQL, XLSX, Markdown, HTML. Two-stage conversion: parse input -> JS objects -> serialize output.
  • Image engine: sharp for decode/encode. Handles HEIC, TIFF, SVG natively.
  • Audio engine: FFmpeg CLI with codec selection and bitrate/quality mapping. 5-minute timeout.
  • Video engine: FFmpeg CLI with CRF quality, resolution scaling, GIF palette generation. 10-minute timeout.
  • PDF engine: PDFKit for generation, pdfjs-dist for text extraction, mammoth for DOCX, pdf-lib for merging.

Development

npm run build          # Compile TypeScript
npm run dev            # Watch mode
npm test               # Run tests (vitest)
npm run test:watch     # Watch mode tests
npm run lint           # Type check

License

MIT

About

MCP server for local file conversion - images, audio, video, documents, and data formats. Privacy-first, everything runs locally.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors