{"name":"com.moltlinestudio/skillmd-lint","slug":"moltlinestudio-skillmd-lint","title":"SKILL.md Lint","description":"Lint a SKILL.md for frontmatter, structure, secrets and size. All 6 tools free.","url":"https://mcp.market/server/moltlinestudio-skillmd-lint","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T15:00:29.000Z","license":"MIT"},"uptime":{"percent":100,"checks":3,"ok":3,"last_checked_at":"2026-09-20T03:21:10.205Z","last_ok_at":"2026-09-20T03:21:10.205Z","latency_ms":290},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/GarphenGate/moltline-mcp","website":"https://moltlinestudio.com/servers.html#skillmd-lint","version":"1.2.0","remotes":[{"type":"streamable-http","url":"https://mcp.moltlinestudio.com/skillmd-lint"}],"packages":[],"tools":[{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"description":"The JSON document to validate, as a raw string; must be non-empty.","minLength":1,"type":"string"}},"required":["text"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"content":{"description":"The complete SKILL.md file text, frontmatter included; must be non-empty.","minLength":1,"type":"string"}},"required":["content"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-09-20T00:23:50.646Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:23:50.645Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 381ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":5,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.moltlinestudio.com/skillmd-lint","reachable":true,"authRequired":false,"latencyMs":381,"serverInfo":{"name":"skillmd-lint","version":"1.1.0"}}],"packages":[],"repo":{"found":true,"owner":"GarphenGate","repo":"moltline-mcp","archived":false,"pushedAt":"2026-09-19T15:00:29Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/316633241?v=4","ownerCreatedAt":"2026-08-13T15:17:26Z","license":"MIT"},"icon":{"url":"https://moltlinestudio.com/icon-192.png","source":"registry","width":192,"height":192},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T15:00:29.000Z","score":23}}}},"grade_history":[],"reviews":[]}