{"_id":"@dougis/markdown-lint-mcp","_rev":"6-9882d54a012a82d89f4ea5453cff7ca4","name":"@dougis/markdown-lint-mcp","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@dougis/markdown-lint-mcp","version":"1.0.0","keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"author":{"name":"Doug Hubbard"},"license":"MIT","_id":"@dougis/markdown-lint-mcp@1.0.0","maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"bin":{"markdown-lint-mcp":"dist/index.js"},"dist":{"shasum":"53f19f0a2ee6dce2e914c4d41a3853348e2d4741","tarball":"https://registry.npmjs.org/@dougis/markdown-lint-mcp/-/markdown-lint-mcp-1.0.0.tgz","fileCount":246,"integrity":"sha512-1jwfL/3RImE1Cn3ZBKsVXml3CWuf+XDPt6c19FqKRDVD7mEzFGRLcRSaMpcnzsXXna7NFvpIj4XnVeiclgTO7g==","signatures":[{"sig":"MEQCIFutH1TXx0C4dR0ktfH3xIegEqzJinB9HuaUOBZrOnweAiB4yWRE8g6YttuhlbrB8yBVxQcm/JSqVnxQ+WIIncJh9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":429608},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=7.0.0","node":">=20.0.0"},"gitHead":"58bb4f0c1b77bcc2f9b78786a8f8edaa81671b19","scripts":{"dev":"tsc --watch & node --watch dist/index.js","lint":"eslint src --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write 'src/**/*.ts'","prepare":"npm run build","version":"npm run format && git add -A src","lint:fix":"eslint src --ext .ts --fix","preversion":"npm run lint","test:watch":"jest --watch","postversion":"git push && git push --tags","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"dougis","email":"doug@dougis.com"},"repository":{"url":"git+https://github.com/dougis-org/markdown-lint-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","directories":{},"_nodeVersion":"25.3.0","dependencies":{"qs":"^6.14.1","body-parser":"^2.2.2","markdownlint":"^0.40.0","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.0.0","ts-jest":"^29.4.0","prettier":"^3.7.0","babel-jest":"^30.2.0","typescript":"^5.9.0","@babel/core":"^7.22.0","@types/jest":"^30.0.0","@types/node":"^25.0.0","@jest/globals":"^30.2.0","@babel/preset-env":"^7.22.0","eslint-plugin-jest":"^29.12.0","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.5.0","@typescript-eslint/parser":"^8.53.0","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown-lint-mcp_1.0.0_1768714459069_0.302155985644057","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dougis/markdown-lint-mcp","version":"1.0.1","keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"author":{"name":"Doug Hubbard"},"license":"MIT","_id":"@dougis/markdown-lint-mcp@1.0.1","maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"bin":{"markdown-lint-mcp":"dist/index.js"},"dist":{"shasum":"6df4f2a24bee3644cf2b1bf60bbe297d8ae03095","tarball":"https://registry.npmjs.org/@dougis/markdown-lint-mcp/-/markdown-lint-mcp-1.0.1.tgz","fileCount":250,"integrity":"sha512-wupQAxM01IPAIpFo+z6QO5awN5hleupUJHkHJ9XdXgjweSiLEc+wBFSE4gand+9NiLxDi8wlZ/rHa2tkQ3ZEOQ==","signatures":[{"sig":"MEQCIFj1ADDitP5CUqjVf9WVoPEi9gdw4Adtrwy8AgtFUv8WAiB6QR6JkLccxJTW30o0ehFqK/6Z2cLY2BJk9qJtclqezA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431221},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=7.0.0","node":">=20.0.0"},"gitHead":"03023b4bd5431d4d53b1fc03a31115188ab70a52","scripts":{"dev":"tsc --watch & node --watch dist/index.js","lint":"eslint src --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write 'src/**/*.ts'","prepare":"npm run build","version":"npm run format && git add -A src","lint:fix":"eslint src --ext .ts --fix","preversion":"npm run lint","test:watch":"jest --watch","postversion":"git push && git push --tags","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"dougis","email":"doug@dougis.com"},"repository":{"url":"git+https://github.com/dougis-org/markdown-lint-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","directories":{},"_nodeVersion":"25.3.0","dependencies":{"qs":"^6.14.1","body-parser":"^2.2.2","markdownlint":"^0.40.0","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.0.0","ts-jest":"^29.4.0","prettier":"^3.7.0","babel-jest":"^30.2.0","typescript":"^5.9.0","@babel/core":"^7.22.0","@types/jest":"^30.0.0","@types/node":"^25.0.0","@jest/globals":"^30.2.0","@babel/preset-env":"^7.22.0","eslint-plugin-jest":"^29.12.0","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.5.0","@typescript-eslint/parser":"^8.53.0","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown-lint-mcp_1.0.1_1768778224399_0.07936611549921935","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dougis/markdown-lint-mcp","version":"1.0.2","keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"author":{"name":"Doug Hubbard"},"license":"MIT","_id":"@dougis/markdown-lint-mcp@1.0.2","maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"bin":{"markdown-lint-mcp":"dist/index.js"},"dist":{"shasum":"a48d6d6603e05a27d9071058d80a1c5652786ff6","tarball":"https://registry.npmjs.org/@dougis/markdown-lint-mcp/-/markdown-lint-mcp-1.0.2.tgz","fileCount":250,"integrity":"sha512-r/JUhgwHwLBj93segxTWukT0RJONvrKMf5uu90IpZXcQyw19ao9Ap8kdhPZO0/uYTxQmOzbHzEWHfkPRtjwsew==","signatures":[{"sig":"MEUCIQCK8IijB0gFkCDak5Y+x5X2XeEqcjVz4j1eWVcVqCMjkAIgdv2KkI4OB02Z4RlCczK93J8dLxbC1Rcl+D3iWKvs+AU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431567},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=7.0.0","node":">=20.0.0"},"gitHead":"ec0b84a09079b7ee3981f8077fcc34e7f7d40c4f","scripts":{"dev":"tsc --watch & node --watch dist/index.js","lint":"eslint src --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write 'src/**/*.ts'","prepare":"npm run build","version":"npm run format && git add -A src","lint:fix":"eslint src --ext .ts --fix","preversion":"npm run lint","test:watch":"jest --watch","postversion":"git push && git push --tags","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"dougis","email":"doug@dougis.com"},"repository":{"url":"git+https://github.com/dougis-org/markdown-lint-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","directories":{},"_nodeVersion":"25.3.0","dependencies":{"qs":"^6.14.1","body-parser":"^2.2.2","markdownlint":"^0.40.0","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.0.0","ts-jest":"^29.4.0","prettier":"^3.7.0","babel-jest":"^30.2.0","typescript":"^5.9.0","@babel/core":"^7.22.0","@types/jest":"^30.0.0","@types/node":"^25.0.0","@jest/globals":"^30.2.0","@babel/preset-env":"^7.22.0","eslint-plugin-jest":"^29.12.0","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.5.0","@typescript-eslint/parser":"^8.53.0","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown-lint-mcp_1.0.2_1768790417830_0.04948635389365097","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@dougis/markdown-lint-mcp","version":"1.0.3","keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"author":{"name":"Doug Hubbard"},"license":"MIT","_id":"@dougis/markdown-lint-mcp@1.0.3","maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"bin":{"markdown-lint-mcp":"dist/index.js"},"dist":{"shasum":"2e50c08711b7f20bdeb33fb23ed5b20ea96d0271","tarball":"https://registry.npmjs.org/@dougis/markdown-lint-mcp/-/markdown-lint-mcp-1.0.3.tgz","fileCount":254,"integrity":"sha512-+0tkaBkoC2XWNbYJI5ZzknLsM2XjdmsBQ7zy9JGMEIS5JlAcZ/T/4w0mJ9k18huDL+U5/bysBrw+6GYbomoevQ==","signatures":[{"sig":"MEQCIHNEi5rBuA+3gFN0HUQuKQa+bngw9tSR6CviP/+OIuEyAiAXyFFWjxBQWys1LJsAPVrVQL8zs1E96r706Cz7A7C1qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436310},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=7.0.0","node":">=20.0.0"},"gitHead":"b72f37c64042e6c82fd2a05bcdc142de8ae3778f","scripts":{"dev":"tsc --watch & node --watch dist/index.js","lint":"eslint src --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write 'src/**/*.ts'","prepare":"npm run build","version":"npm run format && git add -A src","lint:fix":"npm run lint -- --fix","beforePush":"npm test && npm run lint && npm run build","preversion":"npm run lint","test:watch":"jest --watch","postversion":"git push && git push --tags","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"dougis","email":"doug@dougis.com"},"repository":{"url":"git+https://github.com/dougis-org/markdown-lint-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","directories":{},"_nodeVersion":"25.3.0","dependencies":{"qs":"^6.14.1","body-parser":"^2.2.2","markdownlint":"^0.40.0","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.0.0","ts-jest":"^29.4.0","prettier":"^3.7.0","babel-jest":"^30.2.0","typescript":"^5.9.0","@babel/core":"^7.22.0","@types/jest":"^30.0.0","@types/node":"^25.0.0","@jest/globals":"^30.2.0","@babel/preset-env":"^7.22.0","eslint-plugin-jest":"^29.12.0","@semantic-release/git":"^10.0.0","@semantic-release/npm":"^9.0.0","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.5.0","@typescript-eslint/parser":"^8.53.0","@semantic-release/changelog":"^6.0.0","@typescript-eslint/eslint-plugin":"^8.53.0","@semantic-release/commit-analyzer":"^9.0.0","@semantic-release/release-notes-generator":"^10.0.0","conventional-changelog-conventionalcommits":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown-lint-mcp_1.0.3_1769551275851_0.9437053750550239","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@dougis/markdown-lint-mcp","version":"1.0.4","keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"author":{"name":"Doug Hubbard"},"license":"MIT","_id":"@dougis/markdown-lint-mcp@1.0.4","maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"bin":{"markdown-lint-mcp":"dist/index.js"},"dist":{"shasum":"af449c0aa9400f9f26743ef1bfc942ea7e035014","tarball":"https://registry.npmjs.org/@dougis/markdown-lint-mcp/-/markdown-lint-mcp-1.0.4.tgz","fileCount":254,"integrity":"sha512-l2UqCeSuJoNJxjOZfCJUFCDDkdNFpnGHXcvtMOXBtxJRrYfrMr0AJt819QKrLfq12vmTmtRnM7aoSfMTcAhzaQ==","signatures":[{"sig":"MEUCIB1qLOv3BEmb+Wmza83xegYZdFd8Xw6rJtB6tpyn+LeBAiEAvosRuAgzlj5p8rFAbpGW+PuN+E7Oem1r/+PpuJvGqXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":447339},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=7.0.0","node":">=20.0.0"},"gitHead":"5ebf460db3c3ead6b9b8241774f3089ef27d4e8e","scripts":{"dev":"tsc --watch & node --watch dist/index.js","lint":"eslint src --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write 'src/**/*.ts'","prepare":"npm run build","version":"npm run format && git add -A src","lint:fix":"npm run lint -- --fix","beforePush":"npm test && npm run lint && npm run build","preversion":"npm run lint","test:watch":"jest --watch","postversion":"git push && git push --tags","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"dougis","email":"doug@dougis.com"},"repository":{"url":"git+https://github.com/dougis-org/markdown-lint-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","directories":{},"_nodeVersion":"25.3.0","dependencies":{"qs":"^6.14.1","body-parser":"^2.2.2","markdownlint":"^0.40.0","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.0.0","ts-jest":"^29.4.0","prettier":"^3.7.0","babel-jest":"^30.2.0","typescript":"^5.9.0","@babel/core":"^7.22.0","@types/jest":"^30.0.0","@types/node":"^25.0.0","@jest/globals":"^30.2.0","@babel/preset-env":"^7.22.0","eslint-plugin-jest":"^29.12.0","@semantic-release/git":"^10.0.0","@semantic-release/npm":"^13.1.3","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.5.0","@typescript-eslint/parser":"^8.53.0","@semantic-release/changelog":"^6.0.0","@typescript-eslint/eslint-plugin":"^8.53.0","@semantic-release/commit-analyzer":"^9.0.0","@semantic-release/release-notes-generator":"^10.0.0","conventional-changelog-conventionalcommits":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown-lint-mcp_1.0.4_1769823019993_0.7999982321821688","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dougis/markdown-lint-mcp","version":"1.0.5","description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","main":"dist/index.js","type":"module","scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc --watch & node --watch dist/index.js","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"npm run lint -- --fix","format":"prettier --write 'src/**/*.ts'","beforePush":"npm test && npm run lint && npm run build","prepare":"npm run build","prepublishOnly":"npm test && npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"author":{"name":"Doug Hubbard"},"license":"MIT","bin":{"markdown-lint-mcp":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/dougis-org/markdown-lint-mcp.git"},"homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"engines":{"node":">=20.0.0","npm":">=7.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^1.25.2","body-parser":"^2.2.2","markdownlint":"^0.40.0","qs":"^6.14.1"},"devDependencies":{"@babel/core":"^7.22.0","@babel/preset-env":"^7.22.0","@jest/globals":"^30.2.0","@semantic-release/changelog":"^6.0.0","@semantic-release/commit-analyzer":"^9.0.0","@semantic-release/git":"^10.0.0","@semantic-release/npm":"^13.1.3","@semantic-release/release-notes-generator":"^10.0.0","@types/jest":"^30.0.0","@types/node":"^25.0.0","@typescript-eslint/eslint-plugin":"^8.53.0","@typescript-eslint/parser":"^8.53.0","babel-jest":"^30.2.0","conventional-changelog-conventionalcommits":"^7.0.0","eslint":"^9.0.0","eslint-config-prettier":"^10.0.0","eslint-plugin-jest":"^29.12.0","eslint-plugin-prettier":"^5.5.0","jest":"^30.2.0","prettier":"^3.7.0","ts-jest":"^29.4.0","typescript":"^5.9.0"},"gitHead":"0a1e2026664d4dff4d48e314742c4f55bbafeab0","types":"./dist/index.d.ts","_id":"@dougis/markdown-lint-mcp@1.0.5","_nodeVersion":"25.3.0","_npmVersion":"11.10.1","dist":{"integrity":"sha512-iTgEVu7K9hu+Ovu6k13xp5XYJWAHyUl9N0428QchgWShTY7F5JeDEGZHzfzYU0/7ysNL/S1x+DxPAcnRvwzsWg==","shasum":"8313ed9ab6cdc7d45c06d303237078ef24ff51a2","tarball":"https://registry.npmjs.org/@dougis/markdown-lint-mcp/-/markdown-lint-mcp-1.0.5.tgz","fileCount":254,"unpackedSize":446940,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCz9chkXkAm209hkpr4ELxa5V/3Dt4SWf0RdshRlnB4NwIhAKfD61a+JbAblSFj+npxKx82j6SsjLA/cQEdSUAjDhYU"}]},"_npmUser":{"name":"dougis","email":"doug@dougis.com"},"directories":{},"maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/markdown-lint-mcp_1.0.5_1771912269557_0.6818157941208116"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-18T05:34:19.009Z","modified":"2026-02-24T05:51:09.838Z","1.0.0":"2026-01-18T05:34:19.262Z","1.0.1":"2026-01-18T23:17:04.566Z","1.0.2":"2026-01-19T02:40:17.975Z","1.0.3":"2026-01-27T22:01:16.008Z","1.0.4":"2026-01-31T01:30:20.154Z","1.0.5":"2026-02-24T05:51:09.729Z"},"bugs":{"url":"https://github.com/dougis-org/markdown-lint-mcp/issues"},"author":{"name":"Doug Hubbard"},"license":"MIT","homepage":"https://github.com/dougis-org/markdown-lint-mcp#readme","keywords":["mcp","markdown","lint","markdownlint","formatting","validation","model-context-protocol","ai-tools","claude","openai","documentation"],"repository":{"type":"git","url":"git+https://github.com/dougis-org/markdown-lint-mcp.git"},"description":"Model Context Protocol server for markdown linting and formatting, forked from ernestgwilsonii/markdownlint-mcp","maintainers":[{"name":"dougis","email":"doug@dougis.com"}],"readme":"# markdown-lint-mcp\n\nA Model Context Protocol (MCP) server for markdown linting, formatting, and compliance checking.\n\n## Overview\n\nThis MCP server provides AI assistants with the ability to lint, validate, and auto-fix Markdown files to ensure compliance with established Markdown standards and best practices.\n\n## The Problem\n\nWhile many MCP servers exist for converting various file formats **to** Markdown, there was no MCP server specifically designed for **linting and ensuring compliance** of existing Markdown files. This creates a gap in the workflow where Markdown content may be created or converted but not validated for quality and consistency.\n\n## Solution\n\n`markdown-lint-mcp` bridges this gap by providing:\n\n- **Markdown linting** using industry-standard rules\n- **Automatic fixing** of common Markdown issues  \n- **Compliance validation** against established standards\n- **Seamless integration** with MCP-compatible AI assistants\n\n\n## Features\n\n### MCP Tools Provided\n\n1. **`lint_markdown`** - Analyze a Markdown file and return detailed issues\n2. **`fix_markdown`** - Automatically fix Markdown issues and return corrected content\n3. **`get_configuration`** - Display current linting rules and configuration\n\n\n### Standards-Based Approach\n\n- Uses **markdownlint** default ruleset (community standard)\n- Based on **CommonMark specification**\n- Follows **GitHub Flavored Markdown** conventions\n- Supports **all 52 official markdownlint rules**\n\n## Auto-Fixable Rules\n\nOur MCP server can automatically fix 30 out of 52 official markdownlint rules (58%). These rules are deterministic and can be fixed without human judgment:\n\n### Whitespace & Formatting (9 rules)\n- **MD009** - Trailing spaces\n- **MD010** - Hard tabs\n- **MD012** - Multiple consecutive blank lines\n- **MD022** - Headings surrounded by blank lines\n- **MD031** - Fenced code blocks surrounded by blank lines\n- **MD032** - Lists surrounded by blank lines\n- **MD047** - Files should end with single newline\n- **MD058** - Tables surrounded by blank lines\n- **MD027** - Multiple spaces after blockquote symbol\n\n### Heading Formatting (6 rules)\n- **MD018** - No space after hash\n- **MD019** - Multiple spaces after hash\n- **MD020** - No space inside closed ATX\n- **MD021** - Multiple spaces inside closed ATX\n- **MD023** - Headings start at line beginning\n- **MD026** - Trailing punctuation in heading\n\n### List Formatting (4 rules)\n- **MD004** - Unordered list style\n- **MD005** - List item indentation consistency\n- **MD007** - Unordered list indentation\n- **MD030** - Spaces after list markers\n\n### Link & Text Formatting (7 rules)\n- **MD011** - Reversed link syntax\n- **MD034** - Bare URL used\n- **MD037** - Spaces inside emphasis\n- **MD038** - Spaces inside code spans\n- **MD039** - Spaces inside link text\n- **MD049** - Emphasis style\n- **MD050** - Strong style\n\n### Advanced Fixable (4 rules)\n- **MD014** - Dollar signs before commands\n- **MD044** - Proper names capitalization\n- **MD051** - Link fragments validation\n- **MD053** - Unused reference definitions\n\n## Detection-Only Rules\n\nThe following 22 rules (42%) cannot be automatically fixed because they require human judgment, content understanding, or style decisions:\n\n### Structural/Content Rules (12 rules)\n- **MD001** - Heading increment (requires understanding document structure)\n- **MD003** - Heading style consistency (needs style preference decision)\n- **MD013** - Line length (requires content-aware line breaking)\n- **MD024** - Duplicate headings (could break document structure/navigation)\n- **MD025** - Multiple H1s (requires understanding document hierarchy)\n- **MD028** - Blank line in blockquote (ambiguous semantic intent)\n- **MD029** - Ordered list numbering (style preference)\n- **MD035** - Horizontal rule style (style preference)\n- **MD036** - Emphasis as heading (requires semantic understanding)\n- **MD041** - First line H1 (may break existing document structure)\n- **MD043** - Required heading structure (document-specific requirements)\n- **MD046** - Code block style (style preference)\n\n### Content/Language Rules (5 rules)\n- **MD033** - Inline HTML (may be intentional/necessary)\n- **MD040** - Code language specification (requires code language knowledge)\n- **MD045** - Alt text for images (requires understanding image content)\n- **MD059** - Descriptive link text (requires understanding context/purpose)\n- **MD042** - Empty links (may be placeholders or templates)\n\n### Reference/Link Rules (3 rules)\n- **MD052** - Reference links defined (may be external or conditional)\n- **MD054** - Link/image style (style preference)\n- **MD056** - Table column count (may be intentional formatting)\n\n### Table Rules (2 rules)\n- **MD055** - Table pipe style (style preference)\n- **MD048** - Code fence style (style preference)\n\n## Installation\n\n```bash\nnpm install @dougis/markdown-lint-mcp\n```\n\n## Usage\n\n### With Claude Desktop\n\nAdd to your Claude Desktop MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"markdownlint\": {\n\t      \"command\": \"npx\",\n\t      \"args\": [\"@dougis/markdown-lint-mcp\"]\n    }\n  }\n}\n```\n\n### With Other MCP Clients\n\nThis server works with any MCP-compatible client including:\n\n- Claude Desktop\n- Cursor\n- Cline\n- VS Code with MCP support\n\n\n## Example Workflows\n\n### Lint a Markdown File\n\n```text\nUser: \"Please lint my README.md file and tell me what issues exist\"\nAI: Uses lint_markdown tool to analyze and report issues\n```\n\n### Fix Markdown Issues\n\n```text\nUser: \"Fix all the markdown issues in my documentation files\"\nAI: Uses fix_markdown tool to automatically correct problems\n```\n\n### Validate Compliance\n\n```text\nUser: \"Is my markdown compliant with standard formatting rules?\"\nAI: Uses lint_markdown to validate and provide compliance status\n```\n\n## Technical Approach\n\n- **Direct library integration** with `markdownlint` npm package\n- **No external CLI dependencies** required\n- **Cross-platform** support (Windows, macOS, Linux)\n- **Single installation** - no additional tools needed\n- **Efficient processing** via direct API calls\n\n\n## Development Status\n\n🚀 **Production Ready** - This project has reached a high level of maturity with:\n\n1. ✅ **Complete MCP server implementation** with all 52 markdownlint rules\n2. ✅ **Comprehensive testing suite** - 82% coverage (42/51 rules with full tests)\n3. ✅ **522 passing tests** with 100% success rate\n4. ✅ **All Priority 1 rules fully tested** (11/11 critical rules)\n5. 🔄 **Final testing phase** for remaining specialized rules\n6. 📋 **Ready for community testing** and feedback\n\n### Testing Coverage Status\n\nOur test suite demonstrates production quality with extensive validation:\n\n- **✅ 19 test suites** all passing\n- **✅ 522 total tests** with 0 failures\n- **✅ 82% rule coverage** (42 out of 51 rules fully tested)\n- **✅ 100% Priority 1 rules tested** (all critical functionality)\n- **✅ Detection and fix validation** for all tested rules\n- **✅ Edge case and configuration testing** implemented\n\n### Remaining Work (8% of rules)\n\nOnly 9 specialized rules remain to be tested:\n- MD039, MD050, MD051, MD052, MD053, MD054 - Link and styling rules\n- Integration testing for rule combinations\n- Performance testing with large files\n\n\n## Contributing\n\nWe welcome contributions! This project follows MCP best practices and maintains high code quality standards.\n\n### Roadmap\n\n- [x] ✅ Core MCP server implementation\n- [x] ✅ Comprehensive testing suite (82% complete)\n- [x] ✅ Production-quality code with 522 passing tests\n- [ ] 🔄 Complete remaining 9 rules testing\n- [ ] 📚 Enhanced documentation and examples\n- [ ] 🤝 Community feedback integration\n- [ ] 📦 Submission to official MCP collection\n\n\n## License\n\nMIT License - see LICENSE file for details\n\n## Related Projects\n\n- [markdownlint](https://github.com/DavidAnson/markdownlint) - The underlying linting engine\n- [Model Context Protocol](https://modelcontextprotocol.io/) - The protocol this server implements\n- [MCP Servers Collection](https://github.com/modelcontextprotocol/servers) - Official MCP servers\n\n\n## Support\n\nFor issues, questions, or contributions, please use the GitHub issues page.\n","readmeFilename":"README.md"}