logikonline 9507dc6e68 feat(cli): add manifest generator from existing MCP configs
Add mcp-manifest-generate CLI tool to reverse-engineer manifests from Claude Code settings.json. Infers install methods from command patterns (npx→npm, uvx→pip, .exe→dotnet-tool). Converts --flag args to typed config entries (--api-key→secret). Supports --probe flag to run MCP handshake for real server name/version. Add interactive --init wizard mode. Update schema with additional validation rules. Add comprehensive CLI help and examples to README
2026-04-04 18:53:06 -04:00

mcp-manifest-validate

MCP Manifest

Validate mcp-manifest.json files, test autodiscovery from domains, and generate manifests from existing MCP server configs.

Validate

# Validate a local manifest
npx mcp-manifest-validate ./mcp-manifest.json

# Test autodiscovery from a domain
npx mcp-manifest-validate ironlicensing.com

# Validate from a URL
npx mcp-manifest-validate https://example.com/mcp-manifest.json

# Only test discovery (skip validation)
npx mcp-manifest-validate --discover ironlicensing.com

What It Checks

  1. Discovery — Can the manifest be found via well-known URL or HTML link tag?
  2. Schema — Does it conform to the mcp-manifest spec?
  3. Semantics — Are config keys unique? Do template variables reference real config entries? Does the transport match the endpoint?
  4. Installation — Is the command available on PATH?

Example Output

MCP Manifest Validator
Input: ironlicensing.com

Discovery
  ✓ Manifest found via well-known: https://ironlicensing.com/.well-known/mcp-manifest.json

Schema Validation
  ✓ Valid against mcp-manifest schema v0.1

Server Info
   Name: IronLicensing
   Version: 1.1.0
   Description: Manage IronLicensing products, tiers, features, licenses, and analytics
   Author: IronServices

Installation
   Method: dotnet-tool (IronLicensing.Mcp)
   Command: ironlicensing-mcp
  ✓ "ironlicensing-mcp" found on PATH

Transport
   Type: stdio

Config
   profile [string] (arg: --profile)
   api-key [secret] (env: IRONLICENSING_API_KEY, arg: --api-key)
   base-url [url] (env: IRONLICENSING_BASE_URL, arg: --base-url)

✓ All checks passed

Programmatic Use

import { validateManifest, discover, checkCommand } from 'mcp-manifest-validate';

// Validate a manifest object
const { valid, errors } = validateManifest(manifest);

// Discover from a domain
const { manifest, source, errors } = await discover('ironlicensing.com');

// Check if a command exists
const exists = await checkCommand('ironlicensing-mcp');

Generate

Create mcp-manifest.json from your existing Claude Code MCP server configs:

# List all configured MCP servers
npx mcp-manifest-generate

# Generate manifest for a specific server
npx mcp-manifest-generate --server ironlicensing

# Use a specific settings file
npx mcp-manifest-generate --from-settings ~/.claude/settings.json --server myserver

# Probe the server for name/version via MCP handshake
npx mcp-manifest-generate --server ironlicensing --probe

# Output to file
npx mcp-manifest-generate --server ironlicensing -o mcp-manifest.json

# Generate for all servers
npx mcp-manifest-generate --all

# Raw JSON (for piping)
npx mcp-manifest-generate --server ironlicensing --json

The generator reverse-engineers your existing config:

  • --flag value args become typed config entries (--api-key → type: secret)
  • Environment variables become config entries with env_var field
  • Command patterns infer install method (npx → npm, uvx → pip, .exe → dotnet-tool)
  • --probe runs an MCP initialize handshake to get the real server name and version

Review the generated manifest, fill in the TODO description, and commit.

License

CC0 1.0 — Public domain.

Description
Validate mcp-manifest.json files and test autodiscovery from domains.
http://www.mcp-manifest.dev
Readme 49 KiB
Languages
JavaScript 100%