OpenFormatDB

org.openformatdbPublished by openformatdb.orgv0.3.0Updated Oct 28, 2026

Identify a file, find open tools for its format, convert it locally with WebAssembly.

Overview

AI-generated overview

Identifies unknown file formats, looks up open tools and specs, and converts files locally with WebAssembly converters.

What you can do
  • Identify a file from its magic bytes, tail bytes, extension or MIME type, ranked by signature strength
  • Search and look up format records: identifiers, software that reads or writes it, grammars, specs, versions and claims
  • Find the cheapest conversion chains between formats, with each step's tool, command and data loss
  • Convert a local file with bundled WebAssembly engines (ImageMagick, resvg, FFmpeg, Pandoc, 7-Zip, GDAL, Assimp)
  • List the aggregated data sources with record counts, licences and snapshot dates
  • Claim a format for documentation and publish findings into the data files, then open a pull request
When to use it
Useful when an assistant meets an unknown or obscure file and needs to know what it is before writing a parser or reverse engineering it, or when it needs an open, local way to convert images, audio, video, documents, archives, geodata or 3D files.
Requirements
Runs locally over stdio via npx, needing Node 22.18 or later. No account or API key. Without a repository checkout it reads the read-only static API of openformatdb.org; OFDB_API_URL can point elsewhere. Writing claims and findings requires a local checkout (OFDB_REPO). Conversion engines (2 to 59 MB) are downloaded once into ~/.cache/openformatdb/engines, configurable with OFDB_ENGINES_DIR.
Before you install
convert_file is the only tool that uses the network (first engine download) and writes outside the checkout, placing converted files next to the input without overwriting. claim_format and publish_findings modify data/formats/ .yaml in the checkout and print git commands but never run git. File bytes are read locally and not uploaded; format lookups go to the remote OpenFormatDB API.

Installation

In SourceWeft

  1. Open OpenFormatDB in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@openformatdb/mcp

MCP server for OpenFormatDB: before an agent writes a parser or reverse engineers a file, it asks what the file is, which software already reads, writes and converts it, and how far the format is documented.

toolwhat it does
identify_file(magic_hex?, tail_hex?, extension?, mime?)candidate formats, ranked: full PRONOM signature (with priorities), prefix, MIME type, extension. The agent reads the bytes itself (xxd -p -l 1024 file, tail -c 512 file | xxd -p); the file never leaves the machine
lookup_format(id | puid | wikidata | mime)full record: identifiers, software (open source first, inherited from the family when marked via), grammars, specification, family and versions, live claims, advice
search_formats(query, category?, status?)ranked matches by name, alias, extension, MIME, PUID or QID
find_conversion(from, to?)cheapest chains of open tools from one format to another (lossless first), each step with its command and what is lost; formats as ids or extensions. Steps with an engine run with convert_file
convert_file(path, to?, output?)converts a file of this machine with open-source converters compiled to WebAssembly: ImageMagick, resvg, FFmpeg, Pandoc, 7-Zip, GDAL, Assimp. Nothing is uploaded; each engine (2 to 59 MB) is downloaded once on first use, pinned and SHA-256 checked, into ~/.cache/openformatdb/engines (OFDB_ENGINES_DIR). Without to, lists what the file can become. Writes next to the input and never overwrites
list_sources()aggregated sources with counts, licences and snapshot dates
claim_format(id | name+category, who, contact, scope, days?)says you are documenting a format (up to 90 days), so nobody duplicates the work
publish_findings(id, patch, release_claim_of?)merges structure, grammars, tools, conversions, spec, identifiers, verification; status only moves forward

convert_file is the only tool that reaches the network (an engine's first download) and writes outside the checkout (the converted file). The two write tools change data/formats/<id>.yaml in the checkout and print the git commands to open a pull request; they never run git. Text is screened against POLICY.md (no DRM removal, no keys, no copies of paywalled standards).

Install

sh
npx -y @openformatdb/mcpclaude mcp add openformatdb -- npx -y @openformatdb/mcp     # Claude Code

Release

Bump the version in package.json, server.json and src/server.ts, then run the Release MCP server workflow: it tests, publishes to npm (trusted publishing) and to the MCP Registry as org.openformatdb/openformatdb (secret MCP_REGISTRY_PRIVATE_KEY, whose public half is served at https://openformatdb.org/.well-known/mcp-registry-auth).

Run it

Without a checkout it reads the static API of openformatdb.org (read-only; OFDB_API_URL points elsewhere). From a checkout of the repository it reads the data files and can write:

sh
npm installnpm run mcp                      # stdio; data from this checkoutOFDB_REPO=/path/to/checkout npm run mcp

Claude Code: claude mcp add openformatdb -- node /path/to/openformatdb/packages/mcp/src/server.ts

Needs Node 22.18 or later (TypeScript sources run directly).

Source: packages/mcp/README.md at commit f30b502

Tools

8

identify_file

Identify a file

Candidate formats for a file, ranked: a signature match beats a MIME type, which beats an extension. Read the bytes yourself and pass them as hex; the file never leaves the machine: magic_hex = the first bytes (`xxd -p -l 1024 file`), tail_hex = the last bytes (`tail -c 512 file | xxd -p`) so end-of-file signatures can be checked, whole_file when magic_hex is the entire file. Full PRONOM signatures and their priorities decide between close formats (PNG 1.0 / 1.2 / APNG). Then call lookup_format on the best candidate.

Parametersmimelimittail_hexextensionmagic_hexwhole_file

lookup_format

Look up a format

Full record of a format: identifiers, which software reads or writes it (open source first), grammars, specification, family and versions, live claims, and advice on what to do next. Find it by id, PRONOM PUID, Wikidata QID, or MIME type.

Parametersidmimepuidwikidata

search_formats

Search formats

Ranked formats matching a name, alias, extension, MIME type, PUID or QID, optionally by category or status.

Parameterslimitqueryrequiredstatuscategory

find_conversion

Find a conversion

How to convert a file from one format to another with open tools: the cheapest chains (lossless first), each step with its tool, command and what is lost. Formats as ids or extensions ("docx", "report.wpd"). Without `to`, lists the direct conversions.

Parameterstofromrequiredmax_steps

convert_file

Convert a file locally

Convert a file on this machine to another format with open-source converters compiled to WebAssembly: ImageMagick (images, raw photos), resvg (SVG), FFmpeg (audio, video), Pandoc (documents, markup), 7-Zip (archives), GDAL (geodata), Assimp (3D). Nothing is uploaded. Each engine is downloaded once on first use (2 to 59 MB, pinned versions, SHA-256 checked) into ~/.cache/openformatdb/engines. Call with only `path` to list what the file can become; chains of two engines are planned automatically (svg → png → webp). Writes next to the input unless `output` is given, and never overwrites a file.

Parameterstopathrequiredoutput

list_sources

List sources

Sources aggregated in OpenFormatDB, with record counts, licences and snapshot dates.

Takes no parameters.

claim_format

Claim a format

Say you are reverse engineering or documenting a format, so nobody duplicates the work: adds a claim (who, contact, scope, up to 90 days) to data/formats/<id>.yaml, creating the record if the format is new. Call lookup_format first.

Parametersidwhorequireddaysnameagentscoperequiredcontactrequiredversioncategoryforce_newextensions

publish_findings

Publish findings

Merge what you found into data/formats/<id>.yaml: structure, grammars, tools, conversions, specification, identifiers, verification. Status only moves forward. Optionally release your claim. Then open a pull request.

Parametersidrequiredpatchrequiredallow_downgraderelease_claim_of

Version history

3
  1. v0.3.0LatestOct 25, 2026
  2. v0.2.0Oct 25, 2026
  3. v0.1.0Oct 21, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts