Preflight validates your MCP server artifacts against the actual publishing requirements of the MCP Registry, Smithery, and npm before you submit. It exposes a single check_publish_readiness tool that parses your server.json, package.json, smithery.yaml, and other config files, then returns actionable findings tagged with severity, evidence level, and links to the specific directory documentation each rule comes from. Every blocker includes the exact fix. It's pure validation with no rewrites, no LLM calls, and no runtime probing. Reach for it when you're packaging a server for distribution and want to catch policy violations like missing mcpName fields or malformed transport configs before hitting submit. Runs over streamable HTTP or as a direct REST API.
Public tool metadata for what this MCP can expose to an agent.
check_publish_readinessValidate whether an MCP server is publishable on real directories (MCP Registry, Smithery, npm). Provide raw artifact contents. Returns evidence-backed findings with source-linked directory rules.6 paramsValidate whether an MCP server is publishable on real directories (MCP Registry, Smithery, npm). Provide raw artifact contents. Returns evidence-backed findings with source-linked directory rules.
readmestringmanifeststringpackage_jsonstringsmithery_yamlstringpyproject_tomlstringtarget_directoriesarrayValidate whether your MCP server is publishable on real directories.
Preflight checks your server's actual artifacts — server.json, package.json, smithery.yaml — against the documented requirements of the MCP Registry, Smithery, and npm. Every finding includes the evidence found, the directory rule it maps to, and the exact fix.
| Directory | Hard requirements verified |
|---|---|
| MCP Registry | server.json schema, name format, packages/remotes config, transport type, npm mcpName ownership, PyPI README marker |
| Smithery | Streamable HTTP transport, public HTTPS endpoint, server-card presence |
| npm | name, version, entry point (bin/main) |
Each finding is tagged with:
verified_from_artifact (parsed from your file) or inferred (absence of expected input)hard_requirement (submission will fail), directory_convention, or heuristicConnect to the MCP endpoint:
https://skillfoundry.synaplex.ai/products/preflight/mcp/
Call check_publish_readiness with your artifact contents:
{
"manifest": "<your server.json content>",
"package_json": "<your package.json content>",
"target_directories": ["mcp_registry", "npm"]
}
curl -X POST https://skillfoundry.synaplex.ai/products/preflight/api/check \
-H 'Content-Type: application/json' \
-d '{
"manifest": "{\"name\":\"io.github.you/your-server\",\"description\":\"...\",\"version\":\"1.0.0\",\"packages\":[{\"registryType\":\"npm\",\"identifier\":\"@you/your-server\",\"transport\":{\"type\":\"stdio\"}}]}"
}'
All optional — provide as many as you have:
| Field | What it unlocks |
|---|---|
manifest | Raw server.json content — MCP Registry schema validation |
package_json | Raw package.json content — npm checks, mcpName verification |
smithery_yaml | Raw smithery.yaml content — Smithery build config checks |
pyproject_toml | Raw pyproject.toml content — Python package checks |
readme | Raw README content — documentation quality, PyPI mcp-name marker |
target_directories | Array of "mcp_registry", "smithery", "npm" — defaults to all applicable |
{
"mode": "artifact_lint",
"serverName": "io.github.you/your-server",
"transportType": "stdio",
"verdict": "fixable",
"findings": [
{
"severity": "block",
"category": "directory_policy",
"check": "npm packages: package.json has 'mcpName' matching server.json 'name'",
"evidence": "package.json missing 'mcpName' field",
"evidenceLevel": "verified_from_artifact",
"affectedArtifact": "package.json",
"rule": {
"ruleId": "mcpreg-npm-mcpname",
"directory": "mcp_registry",
"type": "hard_requirement",
"sourceUrl": "https://modelcontextprotocol.io/registry/package-types",
"lastReviewed": "2026-04-11",
"policyPackVersion": "0.1.0"
},
"fix": "Add '\"mcpName\": \"io.github.you/your-server\"' to package.json."
}
],
"directoryReadiness": {
"mcp_registry": { "state": "blocked", "hardBlockers": 1, "conventionGaps": 0, "heuristicFlags": 0 },
"npm": { "state": "ready", "hardBlockers": 0, "conventionGaps": 0, "heuristicFlags": 0 }
},
"summary": { "totalChecks": 15, "passed": 13, "warnings": 1, "blockers": 1 },
"notChecked": [
{ "reason": "Live endpoint probing is not yet supported (v1.1)", "whatItWouldVerify": "..." }
]
}
Verdicts:
checks_pass — all checked rules pass for target directoriesfixable — has blockers, but every blocker has a concrete fixnot_ready — fundamental issuesPolicy packs are versioned and derived from directory documentation as of 2026-04-11:
| Path | Method | Purpose |
|---|---|---|
/health | GET | Health check |
/api/check | POST | REST API |
/mcp/ | POST | MCP JSON-RPC (Streamable HTTP) |
/server.json | GET | MCP Registry manifest |
/.well-known/mcp/server-card.json | GET | Smithery server card |
MIT
Built by Skillfoundry.