Files
mcp-validate/README.md
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

117 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# mcp-manifest-validate
[![MCP Manifest](https://mcp-manifest.dev/media/mcp-manifest-badge-light.svg)](https://mcp-manifest.dev)
Validate `mcp-manifest.json` files, test autodiscovery from domains, and generate manifests from existing MCP server configs.
## Validate
```bash
# 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](https://mcp-manifest.dev)?
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
```js
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:
```bash
# 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.