filechanger-mcp
v0.1.1
Published
MCP server for FileChanger: convert text between document formats, list supported formats, and read the API docs.
Maintainers
Readme
filechanger-mcp
MCP server for FileChanger document conversion. Exposes three tools backed by the FileChanger API:
convert— convert text content between formats (e.g. markdown to html). Binary outputs (docx/epub/odt) use the REST jobs API instead.list_formats— list supported input and output formats.docs— return the FileChanger API documentation as markdown.
It is a thin stdio proxy to the hosted endpoint at https://filechanger.io/mcp; the tools themselves run on FileChanger's servers.
Setup
Get an API key (fc_...) at https://filechanger.io, then add to your MCP client config:
{
"mcpServers": {
"filechanger": {
"command": "npx",
"args": ["-y", "filechanger-mcp"],
"env": { "FILECHANGER_API_KEY": "fc_your_key_here" }
}
}
}Environment
FILECHANGER_API_KEY(required) — your FileChanger API key.FILECHANGER_URL(optional) — override the endpoint. Defaults tohttps://filechanger.io/mcp.
Publishing (npm + official MCP registry)
./publish.sh (run via nix develop -c apps/filechanger/mcp/publish.sh) does the
whole release: version-sync check across package.json/server.json, build + tests,
npm publish (skipped if the version is already up), then mcp-publisher login +
publish to registry.modelcontextprotocol.io under the io.filechanger namespace.
Directories like PulseMCP and Glama crawl the official registry, so no separate
submissions are needed there.
Smithery does not crawl the registry; it lists the hosted endpoint directly (one-time, needs a smithery.ai login):
npx smithery@latest auth login
npx smithery@latest mcp publish "https://filechanger.io/mcp" \
--config-schema apps/filechanger/mcp/smithery.jsonsmithery.json tells Smithery's gateway to prompt users for an fc_ key and
forward it upstream as the x-api-key header, which /mcp already expects.
The scanner needs no auth: initialize and tools/list are open, only tool
calls enforce the key.
Namespace ownership is proven over HTTP: nginx serves the Ed25519 public key at
https://filechanger.io/.well-known/mcp-registry-auth (infra/configuration.nix)
and the script signs the login challenge with the sops-encrypted private key
infra/secrets/mcp-registry-key.pem.
One-time prerequisites: npm login, and the well-known nginx location deployed.
Releases are automatic: infra/update-server.sh runs publish.sh --auto after a
healthy deploy, which patch-bumps package.json + server.json, commits the bump,
publishes, and lays a filechanger-mcp-vX.Y.Z git tag — but only when mcp/ has
actually changed since that tag (unchanged deploys skip publishing entirely, and
a publish failure only warns, it never fails the deploy). For a manual or
non-patch release, bump the version in package.json AND both version fields in
server.json yourself, then run the script with no flags.
Reusing the proxy in another project
src/proxy.ts (JSON-RPC parse + HTTP forward) and src/run.ts (stdio loop)
are project-agnostic, no FileChanger in them. To stand up a stdio proxy for a
different MCP-over-HTTP backend, copy those two files and write your own
index.ts: read your key/URL from env and call forward(line, { url, apiKey,
fetchFn: fetch, brand: "YourApp" }). brand only flavours error messages
(YourApp HTTP 503); it defaults to Upstream. There is no published package
yet, so it is copy-the-two-files until a second consumer earns one.
