About Rust MCP Preflight
Rust MCP Preflight is a validation tool for Rust MCP server publishers preparing a Registry listing. It checks the README marker, `server.json`, and server-name rules before publishing, and can run from a terminal, CI, or an MCP client.
Key features
- 01Checks the crates.io README marker
- 02Validates `server.json` publish rules
- 03Checks name validity and namespace login
- 04Reports existing Registry listings
- 05Supports CLI, CI, and MCP use
Use cases
- 01Validate a listing before publication
- 02Catch README marker formatting issues
- 03Check package metadata in CI
- 04Review server-name namespace requirements
MCP support
It offers MCP clients `preflight`, `check_server_json`, `check_readme`, and `check_name` tools for validating listing requirements.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMERust MCP Preflight
Check an MCP Registry listing before you publish it.
mcp-publisher validate checks the shape of server.json. It doesn't check that the registry will accept your package: that only happens at mcp-publisher publish, after the crate version is already on crates.io and can't be changed. Rust MCP Preflight runs those checks first.
- The README line. Fetches the README crates.io serves for the exact crate version and looks for
mcp-name: <your server name>, matched the way the registry matches it (ported from the registry's own validator). Catches the line hidden in an HTML comment (crates.io strips comments), the line glued to the next word, and a near miss such as the wrong case. - server.json. The rules
mcp-publisher publishapplies:$schema, the server name, and for every package exact versions (nolatest, no ranges), the transport and no spaces in the identifier. For cargo packages also the crate version, nofileSha256andregistryBaseUrl. Plus warnings forruntimeHint, mismatched versions, and placeholders left over frommcp-publisher init. - The server name. The rules publish applies, whether it's already listed, and which login its namespace needs (including GitHub organizations, which
login githubcan't publish to yet).
It only reads: crates.io, the official registry and the GitHub users API. It publishes nothing and needs no keys.
Install
cargo install rust-mcp-preflight
The first install compiles from source and takes a few minutes.
Use it from a terminal or CI
rust-mcp-preflight server.json
It prints one line per check. It exits 0 when ready, 1 if anything fails, and 2 if the file can't be read:
Preflight: server.json
PASS name "io.github.VoidNullable/lific" is a valid server name
PASS packages[0]: cargo crate "lific"
WARN VoidNullable is a GitHub organization: `mcp-publisher login github` can't publish to org namespaces yet (registry #1468). ...
INFO already listed: latest 2.11.1 (active). Your next publish needs a new version number
PASS README of lific 2.11.1 on crates.io contains `mcp-name: io.github.VoidNullable/lific`
Ready: no failures, 1 warning(s).
Use it from an MCP client
claude mcp add preflight -- rust-mcp-preflight
{ "mcpServers": { "preflight": { "command": "rust-mcp-preflight" } } }
| Tool | What it checks |
|---|---|
preflight | Everything below, from the text of server.json |
check_server_json | The publish rules (offline) |
check_readme | The mcp-name: line in one crate version's README on crates.io |
check_name | The name's publish rules, listing and namespace login |
A result with a FAIL has isError set, like the CLI's exit 1: the check ran, and the listing isn't ready.
Where it fits
The order is: cargo publish (with the line in the README), then rust-mcp-preflight server.json, then mcp-publisher login github and mcp-publisher publish.
The full walk-through: Listing a Rust MCP server in the official MCP Registry.
The README check and the crates.io rules are for cargo packages. Other package types (npm, PyPI, mcpb and so on) get the shared rules, and their registry's own checks are listed as not run.
If crates.io or the README can't be reached, the README counts as not checked and the result is a failure, so a CI run never passes on a README it didn't see.
Listed and live? Get a free report on the whole server, not just the listing: wolfejam.dev/#worth-it
Links
- Repository: https://github.com/Wolfe-Jam/rust-mcp-preflight
mcp-name: io.github.Wolfe-Jam/rust-mcp-preflight
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.