SKILL.md Lint by Moltline
Superseded listing, not a dead server. This entry was imported from an early Glama registration under com.moltlinestudio.mcp; the same server is listed under its official MCP Registry name — use com.moltlinestudio/skillmd-lint. Endpoint unchanged: https://mcp.moltlinestudio.com/skillmd-lint — still live, still free on the free tier. Only this duplicate entry is deprecated.
Server Details
A fully free linter for agent skill files: lint_skill validates YAML frontmatter, structure, size budgets, and safety phrasing with a pass/fail verdict; packaging_check validates zip layout against marketplace rules; plus regex_test, json_validate, diff_texts, and cron_explain for skill authors. No license or account required.
- Status
- Healthy
- Uptime
- 99.9% over 70 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Each tool targets a distinct artifact: cron expressions, text diffs, JSON documents, SKILL.md content, zip layouts, and regex patterns. The descriptions explicitly cross-reference each other with 'Not for X (tool Y does that)' clauses, which eliminates the main overlap risks (lint_skill vs packaging_check, json_validate vs regex_test).
All names are snake_case and readable, but the word order is split: four use noun_verb (cron_explain, json_validate, packaging_check, regex_test) while two use verb_noun (diff_texts, lint_skill). The convention is still predictable enough that an agent can guess a name, but it isn't a single uniform pattern.
Six tools is well-scoped for a SKILL.md linting server: two core checks (lint_skill, packaging_check) plus four small read-only helpers used in the same authoring workflow. Each tool earns its place and none appears redundant.
The linting lifecycle is reasonably covered: inspect content, check archive layout, diff revisions, and validate embedded JSON/regex/cron snippets. Minor gaps remain — there is no tool to read or extract an actual SKILL.md/zip (packaging_check only takes a planned path list) and no auto-fix or suggestion-application step, but agents can work around both.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | A standard 5-field cron string (minute hour day-of-month month day-of-week), e.g. "0 9 * * 1-5"; must be non-empty. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, but the description adds important error semantics: it never raises a protocol error and returns an error object with corrective guidance. It also describes the success response shape and issue reporting, going beyond the annotation metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and example output, followed by usage constraints and error behavior. Most sentences carry weight, though the promotional "FREE." is unnecessary and the response example slightly overlaps the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has rich annotations, full schema coverage, and an output schema, and the description still fills remaining gaps around unsupported cron variants and error handling. An agent has enough information to invoke it correctly and understand what happens on bad input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents that the input must be a non-empty standard 5-field cron string. The description reinforces the 5-field assumption and gives an example, but adds little parameter meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Explain a 5-field cron expression in plain English and flag mistakes." It also explicitly excludes 6-field and seconds-precision variants, so an agent can distinguish the scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case: "Use to read a schedule back in plain English before trusting it." It also states the key exclusion: "Assumes 5-field cron; not for 6-field or seconds-precision variants." This covers both when to use it and when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | The original text (left side of the diff); at most 500000 characters. | |
| b | Yes | The revised text (right side of the diff); at most 500000 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior, but the description adds valuable details beyond them: the 400-line diff cap, the error contract (never raises protocol errors; returns a structured error object), example output shape, and retry safety. These additions help the agent predict behavior and handle failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the structure is logical. However, 'FREE.' is marketing noise, and the explicit 'read-only and idempotent' sentence redundantly repeats annotation hints, adding slight bloat without new value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter diff tool with a rich schema, full annotations, and an output schema, the description covers purpose, usage, return shape, limits, error behavior, and safety. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions and maxLength constraints for both parameters. The description gives a typical input example ('a': old text, 'b': new text) but adds no semantic detail beyond what the schema already provides. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Produce a unified diff between two texts.' It also contextualizes the use case ('comparing two SKILL.md versions') and explicitly distinguishes the tool from risk-judging alternatives. No sibling tool overlaps in function, so the agent can identify it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states clear when-to-use guidance ('Use to show exactly what changed between two versions of a text') and explicit exclusions ('Not for judging the risk of a code change - the codereview server's review_diff does that'). This routes the agent correctly without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The JSON document to validate, as a raw string; must be non-empty. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond annotations: it will not raise a protocol error, it returns a fix-oriented {"error": ...} payload, and retry after correction is safe. That said, "Every call is read-only and idempotent" restates readOnlyHint/idempotentHint verbatim and earns no credit, and the two different error representations ({"valid": false, "error", "line", "column"} vs. {"error"}) are never reconciled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence and the input/output example are well front-loaded, but "FREE." is marketing noise, and the error discussion appears twice with different shapes, forcing the reader to reconcile them. Size is defensible for a validate tool, but the redundancy costs clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input format, success and failure returns, error payloads, and retry safety for a single-parameter tool, and an output schema exists so return values need not have been spelled out. The only real gap is that it never says which error shape applies to which failure class.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema does not: a concrete literal input shown with escaped quotes and the instruction that text must be passed as a raw string. The worked example disambiguates escaping in a way the schema cannot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Validate JSON text and summarize its structure") and immediately bounds the scope with "Reports structure, not conformance to a schema." That negatives the most likely misinterpretation and separates it from regex_test and lint_skill without the agent opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use when JSON may be malformed or its shape is unknown" gives a positive trigger, and "Not for testing a pattern (regex_test)" names the sibling to route away to. Both a when-to-use and a when-not-to-use rule are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The complete SKILL.md file text, frontmatter included; must be non-empty. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally. The description still adds real value: it commits to never raising a protocol error and specifies the exact error envelope shape and an example message, which no annotation conveys. It goes beyond the structured fields, so it earns more than a bare baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and scope, then checks, then return shape, then exclusions and error behavior — logical ordering with no truly wasted sentences. Slight redundancy between the input example and the error example keeps it just short of maximally tight, and the bare 'FREE' fragment adds little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return shape is described (though an output schema exists), error behavior on malformed input is spelled out, the input expectation is unambiguous, and the alternative tool is named. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'content' parameter, so the schema already documents type, minLength, and requiredness, and the baseline of 3 applies. The description's 'Typical input {"content": "<full SKILL.md text>"}' is a concrete example that confirms the whole-file expectation, a marginal addition on top of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('lint one SKILL.md file') and enumerates exactly what is checked: frontmatter fields, description quality, body structure, secret leakage, injection phrasing, size budget. It also names the sibling it is not for (packaging_check), so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit scope ('Use on the full text of one SKILL.md') plus an exclusion and the alternative to use instead ('Not for the surrounding archive layout (packaging_check)'). No inference required to pick this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_paths | Yes | Every file path that will be inside the zip, relative to the zip root, e.g. ["my-skill/SKILL.md"]; at least 1 entry. | |
| marketplace | No | Rule set to apply: "agensi" (SKILL.md at root or one folder deep) or "generic" (junk-file checks only). Default "agensi". | agensi |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, but the description adds a real contract on top: invalid or missing input never raises a protocol error and instead returns {"error": "<what is wrong and how to fix it>"}, with a worked example. It also states retry is always safe after correction, which directly supports error recovery behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then example, then usage and error semantics — good ordering with no filler sentences. It is somewhat long for a two-parameter validator, and the error-handling paragraph repeats the retry point twice, which trims it below maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything an agent needs: what it does, when to use it, what it does not do, the shape of success and failure returns, and cost ('FREE'). With an output schema present, the description need not explain verdict fields further, and it doesn't over-explain them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a concrete example input that shows the expected relative-path format ('my-skill/SKILL.md') and a marketplace value, plus the returned skill_files_found echoing matched skill paths. It does not, however, explain the marketplace rule-set tradeoff beyond restating what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Validate a zip layout plan for a skill marketplace before packaging') with a concrete boundary: it checks layout, not skill content. It explicitly names the sibling it is not (lint_skill), so an agent can separate the two without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit timing ('Use on a planned file layout, before zipping') and an explicit exclusion pointing to the alternative ('Not for the content of a skill file (lint_skill)'). Both the when and the when-not are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | A Python-flavor regular expression as a string, e.g. "v(\\d+)". | |
| samples | Yes | Strings to test the pattern against; only the first 50 are evaluated. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses execution isolation (short-lived, CPU-capped child process that stops catastrophic backtracking), the error contract (never raises a protocol error, returns {"error": ...} with a concrete example), and retry safety. The only redundancy is restating read-only/idempotent, which the annotations already cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the sibling exclusion are front-loaded, and the sandbox/error paragraph earns its place. However, the full input/output example is partially redundant given an output schema exists, and the read-only/idempotent sentence repeats the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a two-parameter read-only tool: purpose, alternative, sandboxing limits, input caps, and the exact error shape are all covered, and return values are handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, but the worked example input clarifies how pattern and samples combine in practice. It adds modest value rather than new syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Test a regular expression against sample strings") and explicitly names the sibling it is not for (json_validate), so an agent can distinguish it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ("confirm a pattern matches what you expect before shipping it") and an explicit exclusion with the alternative tool named ("Not for validating JSON (json_validate)"). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
regex_test2 fields changed- added
Input schema / properties / pattern / maxLengthAdded value: +1000 - added
Input schema / properties / samples / maxItemsAdded value: +50
6 tool updates
- First observed
cron_explain - First observed
diff_texts - First observed
json_validate - First observed
lint_skill - First observed
packaging_check - First observed
regex_test
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePerplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.2Apache 2.0
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs113 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.164 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.