Skip to main content
Glama
Wolfe-Jam

Rust MCP Preflight

Rust 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 publish applies: $schema, the server name, and for every package exact versions (no latest, no ranges), the transport and no spaces in the identifier. For cargo packages also the crate version, no fileSha256 and registryBaseUrl. Plus warnings for runtimeHint, mismatched versions, and placeholders left over from mcp-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 github can'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

Related MCP server: mcpaudit

Use it from a terminal or CI

rust-mcp-preflight server.json

It prints one line per check and exits 1 if anything fails:

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

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

License

MIT


About wolfejam

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Audits MCP server configurations and packages for security risks such as typosquats, credential exposure, and malicious code, with zero dependencies and no execution.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables coding agents to preflight MCP server submissions against store rejection causes, publish where automation is allowed, prepare form-based store submissions, and detect listing drift.
    278 npm
    3
    MIT