SKILL.md Lint
Server Details
Lint a SKILL.md for frontmatter, structure, secrets and size. All 6 tools free.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- GarphenGate/moltline-mcp
- GitHub Stars
- 0
- Server Listing
- moltline-mcp
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 6 tools
The tools operate on fundamentally different concerns—cron expressions, text comparison, JSON structure, SKILL.md content, file layout, and regex patterns. There is virtually no functional overlap between these tools.
The tools consistently follow the verb_noun snake_case convention (e.g., lint_skill, diff_texts, json_validate). This predictable style makes the toolset very easy to parse and understand.
With 6 tools, the count is well-scoped for a highly specialized 'SKILL.md Lint' server. It provides the necessary breadth (formatting, validation, utility) without becoming bloated.
The set is very comprehensive, covering content linting, packaging rules, text comparison, and syntax validation (JSON/regex). It provides a robust utility belt for working with skill definitions.
Available Tools
6 toolscron_explainCron ExplainARead-onlyIdempotentInspect
Explain a 5-field cron expression in plain English and flag mistakes. FREE.
Typical input {"expression": "0 9 * * 1-5"} returns {"expression": "0 9 * * 1-5", "meaning": "at minute 0; at hour 9; every day of month; every month; day of week 1-5", "issues": ["none"]}; out-of-range fields are listed in "issues".
Use to read a schedule back in plain English before trusting it. Assumes 5-field cron; not for 6-field or seconds-precision variants. Errors: on invalid, missing, or malformed input this tool never raises a protocol error; it returns {"error": ""} (for example {"error": "expected 5 fields, got "}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Inputs: expression (required). Returns: object
diff_textsDiff TextsARead-onlyIdempotentInspect
Produce a unified diff between two texts. FREE.
Useful for comparing two SKILL.md versions. Typical input {"a": "", "b": ""} returns {"changed_lines": N, "diff": "--- \n+++ \n@@ ... @@\n-old line\n+new line"}; identical inputs return {"changed_lines": 0, "diff": "(identical)"}. The diff is capped at 400 lines.
Use to show exactly what changed between two versions of a text. Not for judging the risk of a code change - the codereview server's review_diff does that. Errors: on invalid, missing, or malformed input this tool never raises a protocol error; it returns {"error": ""} (for example {"error": "each text must be at most 500000 characters"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Inputs: a (required), b (required). Returns: object
json_validateJson ValidateARead-onlyIdempotentInspect
Validate JSON text and summarize its structure. FREE.
Typical input {"text": "{"a": [1, 2]}"} returns {"valid": true, "structure": {"a": ["array[2]", "int"]}}; invalid JSON returns {"valid": false, "error": "", "line": N, "column": N} instead.
Use when JSON may be malformed or its shape is unknown. Reports structure, not conformance to a schema. Not for testing a pattern (regex_test). Errors: on invalid, missing, or malformed input this tool never raises a protocol error; it returns {"error": ""} (for example {"error": "text is empty: pass the JSON document as a raw string"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Inputs: text (required). Returns: object
lint_skillLint SkillARead-onlyIdempotentInspect
Lint one SKILL.md file the way marketplaces and agents parse it. FREE.
Checks YAML frontmatter presence and required fields (name, description), description quality, body structure (procedure steps, rules, degradation), secret/credential leakage, injection-style phrasing, and size budget. Typical input {"content": ""} returns {"verdict": "pass" | "pass-with-warnings" | "fail", "errors": ["..."], "warnings": ["..."], "stats": {"body_words": N, "has_frontmatter": bool}}.
Use on the full text of one SKILL.md. Not for the surrounding archive layout (packaging_check). Errors: on invalid, missing, or malformed input this tool never raises a protocol error; it returns {"error": ""} (for example {"error": "content is empty: pass the full SKILL.md text including frontmatter"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Inputs: content (required). Returns: object
packaging_checkPackaging CheckARead-onlyIdempotentInspect
Validate a zip layout plan for a skill marketplace before packaging. FREE.
Checks SKILL.md placement rules and flags junk files. Typical input {"file_paths": ["my-skill/SKILL.md", "my-skill/examples.md"], "marketplace": "agensi"} returns {"verdict": "pass" | "fail", "issues": ["..."], "skill_files_found": ["my-skill/SKILL.md"]}.
Use on a planned file layout, before zipping. Not for the content of a skill file (lint_skill). Errors: on invalid, missing, or malformed input this tool never raises a protocol error; it returns {"error": ""} (for example {"error": "file_paths is empty: list every file that will be inside the zip"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Inputs: file_paths (required), marketplace. Returns: object
regex_testRegex TestARead-onlyIdempotentInspect
Test a regular expression against sample strings. FREE.
Typical input {"pattern": "v(\d+)", "samples": ["v12", "beta"]} returns {"pattern": ..., "results": [{"sample": "v12", "match": true, "matched_text": "v12", "groups": ["12"]}, {"sample": "beta", "match": false, ...}], "match_count": 1}.
Use to confirm a pattern matches what you expect before shipping it. Not for validating JSON (json_validate). The pattern is compiled and run in a short-lived, CPU-capped child process, so a pattern that backtracks catastrophically is stopped instead of stalling the server. Errors: on invalid, missing, or malformed input this tool never raises a protocol error; it returns {"error": ""} (for example {"error": "a sample is too long (max 10000 characters); shorten it and retry"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Inputs: pattern (required), samples (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Related MCP Connectors
Vet an agent skill before you install it: structure, triggers, secrets.
Static linter for CLAUDE.md-style agent constitution files: 10 operational-guardrail checks.
Static linter for CLAUDE.md-style agent constitution files: 10 operational-guardrail checks.
Six checks: llms.txt, llms-full.txt, .md twins, Accept: text/markdown, sitemap.md, alt link. Free.
Related MCP Servers
- AlicenseAqualityCmaintenanceLint agent SKILL.md files and MCP tool schemas to catch issues like missing descriptions, similar skills, unconstrained parameters, and destructive tools without confirmation gates.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables validating SKILL.md files or skill directories through an MCP tool, checking frontmatter shape, name-directory matching, and whether relative links and referenced files exist, returning a deterministic JSON report with verdict and findings.359 npmMIT
- AlicenseBqualityBmaintenanceEnables Cursor and Codex agents to audit Agent Skill structure (frontmatter, broken links, missing files), analyze dependencies for undeclared, unused or vulnerable packages via OSV, and run 28 local bug and code-quality rules with SonarQube-style A–E ratings. It can also optionally pull issues, metrics and quality-gate status from SonarQube or SonarCloud, or scan and upload results.92MIT
- AlicenseNot gradedqualityCmaintenanceStatic security scanner for AI agent skill packages that detects malicious SKILL.md files and bundled scripts before they run.15MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.