{"name":"skillmd-lint","description":"Lint SKILL.md files for AI agents: lint_skill validates one file's frontmatter, structure, secrets, and size; packaging_check validates a zip layout plan for skill marketplaces. All tools are free.","url":"https://mcp.moltlinestudio.com/skillmd-lint","transport":"streamable-http","homepage":"https://moltlinestudio.com/servers.html","serverInfo":{"name":"skillmd-lint","version":"1.1.0"},"toolCounts":{"total":6,"free":6,"premium":0},"protocolVersion":"2025-11-25","protocolVersions":["2024-11-05","2025-03-26","2025-06-18","2025-11-25"],"pricing":{"freeTier":{"tools":6,"price":"0","currency":"USD","description":"Free forever. No account, no registration and no credentials are required to call them."},"details":"https://moltlinestudio.com/.well-known/pricing","terms":"https://moltlinestudio.com/terms.html","agentPayment":{"protocol":"x402","resource":"https://moltlinestudio.com/api","network":"eip155:8453","asset":"USDC","amount":"19000000","discovery":"https://moltlinestudio.com/.well-known/x402","description":"GET or POST the resource to receive an HTTP 402 carrying a machine-readable payment demand; retry with the transaction hash in the X-PAYMENT header and the licence key is returned in the response."}},"authentication":{"required":false},"tools":[{"name":"lint_skill","description":"Lint one SKILL.md file the way marketplaces and agents parse it. FREE.\n\nChecks YAML frontmatter presence and required fields (name,\ndescription), description quality, body structure (procedure steps,\nrules, degradation), secret/credential leakage, injection-style\nphrasing, and size budget. Typical input {\"content\": \"<full SKILL.md\ntext>\"} returns {\"verdict\": \"pass\" | \"pass-with-warnings\" | \"fail\",\n\"errors\": [\"...\"], \"warnings\": [\"...\"], \"stats\": {\"body_words\": N,\n\"has_frontmatter\": bool}}.\n\nUse on the full text of one SKILL.md. Not for the surrounding archive\nlayout (packaging_check). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (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.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"content":{"description":"The complete SKILL.md file text, frontmatter included; must be non-empty.","minLength":1,"type":"string"}},"required":["content"],"type":"object"}},{"name":"packaging_check","description":"Validate a zip layout plan for a skill marketplace before packaging. FREE.\n\nChecks SKILL.md placement rules and flags junk files. Typical input\n{\"file_paths\": [\"my-skill/SKILL.md\", \"my-skill/examples.md\"],\n\"marketplace\": \"agensi\"} returns {\"verdict\": \"pass\" | \"fail\",\n\"issues\": [\"...\"], \"skill_files_found\": [\"my-skill/SKILL.md\"]}.\n\nUse on a planned file layout, before zipping. Not for the content of a\nskill file (lint_skill). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (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.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"file_paths":{"description":"Every file path that will be inside the zip, relative to the zip root, e.g. [\"my-skill/SKILL.md\"]; at least 1 entry.","items":{"type":"string"},"minItems":1,"type":"array"},"marketplace":{"default":"agensi","description":"Rule set to apply: \"agensi\" (SKILL.md at root or one folder deep) or \"generic\" (junk-file checks only). Default \"agensi\".","type":"string"}},"required":["file_paths"],"type":"object"}},{"name":"regex_test","description":"Test a regular expression against sample strings. FREE.\n\nTypical input {\"pattern\": \"v(\\\\d+)\", \"samples\": [\"v12\", \"beta\"]}\nreturns {\"pattern\": ..., \"results\": [{\"sample\": \"v12\", \"match\": true,\n\"matched_text\": \"v12\", \"groups\": [\"12\"]}, {\"sample\": \"beta\", \"match\":\nfalse, ...}], \"match_count\": 1}.\n\nUse to confirm a pattern matches what you expect before shipping it. Not\nfor validating JSON (json_validate). The pattern is compiled and run in a\nshort-lived, CPU-capped child process, so a pattern that backtracks\ncatastrophically is stopped instead of stalling the server. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (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.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"pattern":{"description":"A Python-flavor regular expression as a string, e.g. \"v(\\\\d+)\".","maxLength":1000,"type":"string"},"samples":{"description":"Strings to test the pattern against; only the first 50 are evaluated.","items":{"type":"string"},"maxItems":50,"type":"array"}},"required":["pattern","samples"],"type":"object"}},{"name":"json_validate","description":"Validate JSON text and summarize its structure. FREE.\n\nTypical input {\"text\": \"{\\\"a\\\": [1, 2]}\"} returns {\"valid\": true,\n\"structure\": {\"a\": [\"array[2]\", \"int\"]}}; invalid JSON returns\n{\"valid\": false, \"error\": \"<parser message>\", \"line\": N, \"column\": N}\ninstead.\n\nUse when JSON may be malformed or its shape is unknown. Reports structure,\nnot 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\": \"<what is wrong and how to fix it>\"} (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.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"text":{"description":"The JSON document to validate, as a raw string; must be non-empty.","minLength":1,"type":"string"}},"required":["text"],"type":"object"}},{"name":"diff_texts","description":"Produce a unified diff between two texts. FREE.\n\nUseful for comparing two SKILL.md versions. Typical input {\"a\": \"<old\ntext>\", \"b\": \"<new text>\"} returns {\"changed_lines\": N, \"diff\":\n\"--- \\n+++ \\n@@ ... @@\\n-old line\\n+new line\"}; identical inputs\nreturn {\"changed_lines\": 0, \"diff\": \"(identical)\"}. The diff is capped\nat 400 lines.\n\nUse to show exactly what changed between two versions of a text. Not for\njudging the risk of a code change - the codereview server's review_diff\ndoes that. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (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.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"a":{"description":"The original text (left side of the diff); at most 500000 characters.","maxLength":500000,"type":"string"},"b":{"description":"The revised text (right side of the diff); at most 500000 characters.","maxLength":500000,"type":"string"}},"required":["a","b"],"type":"object"}},{"name":"cron_explain","description":"Explain a 5-field cron expression in plain English and flag mistakes. FREE.\n\nTypical input {\"expression\": \"0 9 * * 1-5\"} returns {\"expression\":\n\"0 9 * * 1-5\", \"meaning\": \"at minute 0; at hour 9; every day of month;\nevery month; day of week 1-5\", \"issues\": [\"none\"]}; out-of-range fields\nare listed in \"issues\".\n\nUse to read a schedule back in plain English before trusting it. Assumes\n5-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\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"expected 5 fields, got <value>\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"expression":{"description":"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.","minLength":1,"type":"string"}},"required":["expression"],"type":"object"}}],"resources":[],"prompts":[]}