@dougis/markdown-lint-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/CONTRIBUTING.md +474 -0
- package/LICENSE +21 -0
- package/README.md +240 -0
- package/USAGE.md +40 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/index.d.ts +22 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +144 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/md001.d.ts +25 -0
- package/dist/rules/md001.d.ts.map +1 -0
- package/dist/rules/md001.js +79 -0
- package/dist/rules/md001.js.map +1 -0
- package/dist/rules/md003.d.ts +41 -0
- package/dist/rules/md003.d.ts.map +1 -0
- package/dist/rules/md003.js +130 -0
- package/dist/rules/md003.js.map +1 -0
- package/dist/rules/md004.d.ts +28 -0
- package/dist/rules/md004.d.ts.map +1 -0
- package/dist/rules/md004.js +79 -0
- package/dist/rules/md004.js.map +1 -0
- package/dist/rules/md005.d.ts +21 -0
- package/dist/rules/md005.d.ts.map +1 -0
- package/dist/rules/md005.js +88 -0
- package/dist/rules/md005.js.map +1 -0
- package/dist/rules/md007.d.ts +21 -0
- package/dist/rules/md007.d.ts.map +1 -0
- package/dist/rules/md007.js +66 -0
- package/dist/rules/md007.js.map +1 -0
- package/dist/rules/md009.d.ts +35 -0
- package/dist/rules/md009.d.ts.map +1 -0
- package/dist/rules/md009.js +122 -0
- package/dist/rules/md009.js.map +1 -0
- package/dist/rules/md010.d.ts +34 -0
- package/dist/rules/md010.d.ts.map +1 -0
- package/dist/rules/md010.js +75 -0
- package/dist/rules/md010.js.map +1 -0
- package/dist/rules/md011.d.ts +30 -0
- package/dist/rules/md011.d.ts.map +1 -0
- package/dist/rules/md011.js +123 -0
- package/dist/rules/md011.js.map +1 -0
- package/dist/rules/md012.d.ts +33 -0
- package/dist/rules/md012.d.ts.map +1 -0
- package/dist/rules/md012.js +125 -0
- package/dist/rules/md012.js.map +1 -0
- package/dist/rules/md013.d.ts +26 -0
- package/dist/rules/md013.d.ts.map +1 -0
- package/dist/rules/md013.js +32 -0
- package/dist/rules/md013.js.map +1 -0
- package/dist/rules/md014.d.ts +29 -0
- package/dist/rules/md014.d.ts.map +1 -0
- package/dist/rules/md014.js +176 -0
- package/dist/rules/md014.js.map +1 -0
- package/dist/rules/md018.d.ts +22 -0
- package/dist/rules/md018.d.ts.map +1 -0
- package/dist/rules/md018.js +27 -0
- package/dist/rules/md018.js.map +1 -0
- package/dist/rules/md019.d.ts +22 -0
- package/dist/rules/md019.d.ts.map +1 -0
- package/dist/rules/md019.js +27 -0
- package/dist/rules/md019.js.map +1 -0
- package/dist/rules/md020.d.ts +22 -0
- package/dist/rules/md020.d.ts.map +1 -0
- package/dist/rules/md020.js +27 -0
- package/dist/rules/md020.js.map +1 -0
- package/dist/rules/md021.d.ts +22 -0
- package/dist/rules/md021.d.ts.map +1 -0
- package/dist/rules/md021.js +27 -0
- package/dist/rules/md021.js.map +1 -0
- package/dist/rules/md022.d.ts +21 -0
- package/dist/rules/md022.d.ts.map +1 -0
- package/dist/rules/md022.js +43 -0
- package/dist/rules/md022.js.map +1 -0
- package/dist/rules/md023.d.ts +21 -0
- package/dist/rules/md023.d.ts.map +1 -0
- package/dist/rules/md023.js +34 -0
- package/dist/rules/md023.js.map +1 -0
- package/dist/rules/md024.d.ts +30 -0
- package/dist/rules/md024.d.ts.map +1 -0
- package/dist/rules/md024.js +123 -0
- package/dist/rules/md024.js.map +1 -0
- package/dist/rules/md025.d.ts +34 -0
- package/dist/rules/md025.d.ts.map +1 -0
- package/dist/rules/md025.js +134 -0
- package/dist/rules/md025.js.map +1 -0
- package/dist/rules/md026.d.ts +21 -0
- package/dist/rules/md026.d.ts.map +1 -0
- package/dist/rules/md026.js +31 -0
- package/dist/rules/md026.js.map +1 -0
- package/dist/rules/md027.d.ts +22 -0
- package/dist/rules/md027.d.ts.map +1 -0
- package/dist/rules/md027.js +27 -0
- package/dist/rules/md027.js.map +1 -0
- package/dist/rules/md028.d.ts +37 -0
- package/dist/rules/md028.d.ts.map +1 -0
- package/dist/rules/md028.js +84 -0
- package/dist/rules/md028.js.map +1 -0
- package/dist/rules/md029.d.ts +30 -0
- package/dist/rules/md029.d.ts.map +1 -0
- package/dist/rules/md029.js +36 -0
- package/dist/rules/md029.js.map +1 -0
- package/dist/rules/md030.d.ts +28 -0
- package/dist/rules/md030.d.ts.map +1 -0
- package/dist/rules/md030.js +76 -0
- package/dist/rules/md030.js.map +1 -0
- package/dist/rules/md031.d.ts +22 -0
- package/dist/rules/md031.d.ts.map +1 -0
- package/dist/rules/md031.js +55 -0
- package/dist/rules/md031.js.map +1 -0
- package/dist/rules/md032.d.ts +21 -0
- package/dist/rules/md032.d.ts.map +1 -0
- package/dist/rules/md032.js +69 -0
- package/dist/rules/md032.js.map +1 -0
- package/dist/rules/md033.d.ts +28 -0
- package/dist/rules/md033.d.ts.map +1 -0
- package/dist/rules/md033.js +34 -0
- package/dist/rules/md033.js.map +1 -0
- package/dist/rules/md034.d.ts +28 -0
- package/dist/rules/md034.d.ts.map +1 -0
- package/dist/rules/md034.js +100 -0
- package/dist/rules/md034.js.map +1 -0
- package/dist/rules/md035.d.ts +23 -0
- package/dist/rules/md035.d.ts.map +1 -0
- package/dist/rules/md035.js +52 -0
- package/dist/rules/md035.js.map +1 -0
- package/dist/rules/md036.d.ts +34 -0
- package/dist/rules/md036.d.ts.map +1 -0
- package/dist/rules/md036.js +112 -0
- package/dist/rules/md036.js.map +1 -0
- package/dist/rules/md037.d.ts +28 -0
- package/dist/rules/md037.d.ts.map +1 -0
- package/dist/rules/md037.js +122 -0
- package/dist/rules/md037.js.map +1 -0
- package/dist/rules/md038.d.ts +28 -0
- package/dist/rules/md038.d.ts.map +1 -0
- package/dist/rules/md038.js +62 -0
- package/dist/rules/md038.js.map +1 -0
- package/dist/rules/md039.d.ts +21 -0
- package/dist/rules/md039.d.ts.map +1 -0
- package/dist/rules/md039.js +34 -0
- package/dist/rules/md039.js.map +1 -0
- package/dist/rules/md040.d.ts +21 -0
- package/dist/rules/md040.d.ts.map +1 -0
- package/dist/rules/md040.js +46 -0
- package/dist/rules/md040.js.map +1 -0
- package/dist/rules/md041.d.ts +33 -0
- package/dist/rules/md041.d.ts.map +1 -0
- package/dist/rules/md041.js +92 -0
- package/dist/rules/md041.js.map +1 -0
- package/dist/rules/md042.d.ts +22 -0
- package/dist/rules/md042.d.ts.map +1 -0
- package/dist/rules/md042.js +50 -0
- package/dist/rules/md042.js.map +1 -0
- package/dist/rules/md043.d.ts +39 -0
- package/dist/rules/md043.d.ts.map +1 -0
- package/dist/rules/md043.js +116 -0
- package/dist/rules/md043.js.map +1 -0
- package/dist/rules/md044.d.ts +40 -0
- package/dist/rules/md044.d.ts.map +1 -0
- package/dist/rules/md044.js +167 -0
- package/dist/rules/md044.js.map +1 -0
- package/dist/rules/md045.d.ts +22 -0
- package/dist/rules/md045.d.ts.map +1 -0
- package/dist/rules/md045.js +57 -0
- package/dist/rules/md045.js.map +1 -0
- package/dist/rules/md046.d.ts +23 -0
- package/dist/rules/md046.d.ts.map +1 -0
- package/dist/rules/md046.js +174 -0
- package/dist/rules/md046.js.map +1 -0
- package/dist/rules/md047.d.ts +22 -0
- package/dist/rules/md047.d.ts.map +1 -0
- package/dist/rules/md047.js +35 -0
- package/dist/rules/md047.js.map +1 -0
- package/dist/rules/md048.d.ts +22 -0
- package/dist/rules/md048.d.ts.map +1 -0
- package/dist/rules/md048.js +80 -0
- package/dist/rules/md048.js.map +1 -0
- package/dist/rules/md049.d.ts +33 -0
- package/dist/rules/md049.d.ts.map +1 -0
- package/dist/rules/md049.js +189 -0
- package/dist/rules/md049.js.map +1 -0
- package/dist/rules/md050.d.ts +22 -0
- package/dist/rules/md050.d.ts.map +1 -0
- package/dist/rules/md050.js +32 -0
- package/dist/rules/md050.js.map +1 -0
- package/dist/rules/md051.d.ts +23 -0
- package/dist/rules/md051.d.ts.map +1 -0
- package/dist/rules/md051.js +63 -0
- package/dist/rules/md051.js.map +1 -0
- package/dist/rules/md052.d.ts +21 -0
- package/dist/rules/md052.d.ts.map +1 -0
- package/dist/rules/md052.js +71 -0
- package/dist/rules/md052.js.map +1 -0
- package/dist/rules/md053.d.ts +21 -0
- package/dist/rules/md053.d.ts.map +1 -0
- package/dist/rules/md053.js +95 -0
- package/dist/rules/md053.js.map +1 -0
- package/dist/rules/md054.d.ts +21 -0
- package/dist/rules/md054.d.ts.map +1 -0
- package/dist/rules/md054.js +87 -0
- package/dist/rules/md054.js.map +1 -0
- package/dist/rules/md055.d.ts +22 -0
- package/dist/rules/md055.d.ts.map +1 -0
- package/dist/rules/md055.js +157 -0
- package/dist/rules/md055.js.map +1 -0
- package/dist/rules/md056.d.ts +21 -0
- package/dist/rules/md056.d.ts.map +1 -0
- package/dist/rules/md056.js +154 -0
- package/dist/rules/md056.js.map +1 -0
- package/dist/rules/md058.d.ts +27 -0
- package/dist/rules/md058.d.ts.map +1 -0
- package/dist/rules/md058.js +71 -0
- package/dist/rules/md058.js.map +1 -0
- package/dist/rules/md059.d.ts +22 -0
- package/dist/rules/md059.d.ts.map +1 -0
- package/dist/rules/md059.js +161 -0
- package/dist/rules/md059.js.map +1 -0
- package/dist/rules/rule-interface.d.ts +51 -0
- package/dist/rules/rule-interface.d.ts.map +1 -0
- package/dist/rules/rule-interface.js +2 -0
- package/dist/rules/rule-interface.js.map +1 -0
- package/dist/server.d.ts +59 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +419 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file.d.ts +39 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +124 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/logger.d.ts +61 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +85 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/safe-match.d.ts +4 -0
- package/dist/utils/safe-match.d.ts.map +1 -0
- package/dist/utils/safe-match.js +51 -0
- package/dist/utils/safe-match.js.map +1 -0
- package/package.json +85 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
// Lazy-load `markdownlint` inside methods to avoid ESM import issues during tests
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { applyRuleFixes, getImplementedRules } from './rules/index';
|
|
7
|
+
import { contentToLines, linesToContent, loadConfiguration, readFile, writeFile, } from './utils/file';
|
|
8
|
+
import logger from './utils/logger';
|
|
9
|
+
/**
|
|
10
|
+
* MCP server for markdownlint functionality
|
|
11
|
+
* Provides tools for linting and fixing markdown files
|
|
12
|
+
*/
|
|
13
|
+
export class MarkdownLintServer {
|
|
14
|
+
server;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the markdownlint MCP server
|
|
17
|
+
*/
|
|
18
|
+
constructor() {
|
|
19
|
+
this.server = new Server({
|
|
20
|
+
name: 'markdownlint-mcp',
|
|
21
|
+
version: '1.0.0',
|
|
22
|
+
}, {
|
|
23
|
+
capabilities: {
|
|
24
|
+
tools: {},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
this.setupToolHandlers();
|
|
28
|
+
// Error handling
|
|
29
|
+
this.server.onerror = error => logger.error('MCP Error', error);
|
|
30
|
+
process.on('SIGINT', async () => {
|
|
31
|
+
await this.server.close();
|
|
32
|
+
process.exit(0);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set up handlers for MCP tool requests
|
|
37
|
+
*/
|
|
38
|
+
setupToolHandlers() {
|
|
39
|
+
// List available tools
|
|
40
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
41
|
+
return {
|
|
42
|
+
tools: [
|
|
43
|
+
{
|
|
44
|
+
name: 'lint_markdown',
|
|
45
|
+
description: 'Analyze a Markdown file and return detailed linting issues',
|
|
46
|
+
inputSchema: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
properties: {
|
|
49
|
+
filePath: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Path to the Markdown file to lint',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
required: ['filePath'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'fix_markdown',
|
|
59
|
+
description: 'Automatically fix ALL possible Markdown issues and return the corrected content',
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
filePath: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'Path to the Markdown file to fix',
|
|
66
|
+
},
|
|
67
|
+
writeFile: {
|
|
68
|
+
type: 'boolean',
|
|
69
|
+
description: 'Whether to write the fixed content back to the file (default: true)',
|
|
70
|
+
default: true,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
required: ['filePath'],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'get_configuration',
|
|
78
|
+
description: 'Display current markdownlint rules and configuration',
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
properties: {},
|
|
82
|
+
additionalProperties: false,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
// Handle tool calls
|
|
89
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
90
|
+
const { name, arguments: args } = request.params;
|
|
91
|
+
try {
|
|
92
|
+
// Type guard for arguments
|
|
93
|
+
if (!args || typeof args !== 'object') {
|
|
94
|
+
throw new McpError(ErrorCode.InvalidParams, 'Invalid arguments provided');
|
|
95
|
+
}
|
|
96
|
+
const typedArgs = args;
|
|
97
|
+
switch (name) {
|
|
98
|
+
case 'lint_markdown':
|
|
99
|
+
if (typeof typedArgs.filePath !== 'string') {
|
|
100
|
+
throw new McpError(ErrorCode.InvalidParams, 'filePath must be a string');
|
|
101
|
+
}
|
|
102
|
+
return await this.lintMarkdown(typedArgs.filePath);
|
|
103
|
+
case 'fix_markdown':
|
|
104
|
+
if (typeof typedArgs.filePath !== 'string') {
|
|
105
|
+
throw new McpError(ErrorCode.InvalidParams, 'filePath must be a string');
|
|
106
|
+
}
|
|
107
|
+
const writeFile = typeof typedArgs.writeFile === 'boolean' ? typedArgs.writeFile : true;
|
|
108
|
+
return await this.fixMarkdown(typedArgs.filePath, writeFile);
|
|
109
|
+
case 'get_configuration':
|
|
110
|
+
return await this.getConfiguration();
|
|
111
|
+
default:
|
|
112
|
+
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (error instanceof McpError) {
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
throw new McpError(ErrorCode.InternalError, `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Lint a markdown file and report issues
|
|
125
|
+
* @param filePath Path to the markdown file
|
|
126
|
+
* @returns MCP content response with linting results
|
|
127
|
+
*/
|
|
128
|
+
async lintMarkdown(filePath) {
|
|
129
|
+
try {
|
|
130
|
+
logger.debug(`Linting markdown file: ${filePath}`);
|
|
131
|
+
// Read file content
|
|
132
|
+
const content = await readFile(filePath);
|
|
133
|
+
// Load configuration (check for .markdownlint.json in file directory or use defaults)
|
|
134
|
+
const config = await loadConfiguration(path.dirname(filePath));
|
|
135
|
+
// Run markdownlint (lazy import to avoid loading ESM into Jest process)
|
|
136
|
+
const md = await import('markdownlint');
|
|
137
|
+
const markdownlintLocal = md.default ?? md;
|
|
138
|
+
const results = markdownlintLocal.sync({
|
|
139
|
+
strings: {
|
|
140
|
+
[filePath]: content,
|
|
141
|
+
},
|
|
142
|
+
config,
|
|
143
|
+
});
|
|
144
|
+
const lintResults = (results[filePath] || []);
|
|
145
|
+
const issues = lintResults.map(r => {
|
|
146
|
+
const rawFix = r
|
|
147
|
+
.fixInfo;
|
|
148
|
+
const fixInfo = (() => {
|
|
149
|
+
if (rawFix && typeof rawFix === 'object') {
|
|
150
|
+
const candidate = rawFix;
|
|
151
|
+
return {
|
|
152
|
+
editColumn: typeof candidate.editColumn === 'number' ? candidate.editColumn : undefined,
|
|
153
|
+
deleteCount: typeof candidate.deleteCount === 'number' ? candidate.deleteCount : undefined,
|
|
154
|
+
insertText: typeof candidate.insertText === 'string' ? candidate.insertText : undefined,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return undefined;
|
|
158
|
+
})();
|
|
159
|
+
return {
|
|
160
|
+
lineNumber: r.lineNumber,
|
|
161
|
+
ruleNames: r.ruleNames,
|
|
162
|
+
ruleDescription: r.ruleNames && r.ruleNames.length > 0 ? r.ruleNames.join('/') : 'Unknown rule',
|
|
163
|
+
errorDetail: r
|
|
164
|
+
.errorDetail,
|
|
165
|
+
fixInfo,
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
logger.info(`Found ${issues.length} issues in ${filePath}`);
|
|
169
|
+
if (issues.length === 0) {
|
|
170
|
+
return {
|
|
171
|
+
content: [
|
|
172
|
+
{
|
|
173
|
+
type: 'text',
|
|
174
|
+
text: `✅ **${path.basename(filePath)}** - No linting issues found!\n\nThe file is compliant with Markdown standards.`,
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Format issues for display
|
|
180
|
+
const issueList = issues
|
|
181
|
+
.map((issue) => `- **Line ${issue.lineNumber}**: ${issue.ruleDescription} (${issue.ruleNames.join('/')})\n ${issue.errorDetail || ''}`)
|
|
182
|
+
.join('\n');
|
|
183
|
+
const fixableCount = issues.filter(issue => issue.fixInfo).length;
|
|
184
|
+
const fixableText = fixableCount > 0
|
|
185
|
+
? `\n\n💡 **${fixableCount} of these issues can be automatically fixed** using the \`fix_markdown\` tool.`
|
|
186
|
+
: '';
|
|
187
|
+
return {
|
|
188
|
+
content: [
|
|
189
|
+
{
|
|
190
|
+
type: 'text',
|
|
191
|
+
text: `## Markdown Linting Results for ${path.basename(filePath)}\n\n**Found ${issues.length} issue(s):**\n\n${issueList}${fixableText}`,
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
logger.error(`Error linting markdown file: ${filePath}`, error);
|
|
198
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
199
|
+
throw new McpError(ErrorCode.InvalidParams, `File not found: ${filePath}`);
|
|
200
|
+
}
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Fix markdown issues in a file
|
|
206
|
+
* @param filePath Path to the markdown file
|
|
207
|
+
* @param writeToFile Whether to write fixes back to the file
|
|
208
|
+
* @returns MCP content response with fix results
|
|
209
|
+
*/
|
|
210
|
+
async fixMarkdown(filePath, writeToFile) {
|
|
211
|
+
try {
|
|
212
|
+
logger.debug(`Fixing markdown file: ${filePath}, writeToFile: ${writeToFile}`);
|
|
213
|
+
// Read file content
|
|
214
|
+
const originalContent = await readFile(filePath);
|
|
215
|
+
// Load configuration
|
|
216
|
+
const config = await loadConfiguration(path.dirname(filePath));
|
|
217
|
+
// Get initial issues count (lazy import)
|
|
218
|
+
const mdInit = await import('markdownlint');
|
|
219
|
+
const markdownlintInit = mdInit.default ??
|
|
220
|
+
mdInit;
|
|
221
|
+
const initialResults = markdownlintInit.sync({
|
|
222
|
+
strings: {
|
|
223
|
+
[filePath]: originalContent,
|
|
224
|
+
},
|
|
225
|
+
config,
|
|
226
|
+
});
|
|
227
|
+
const initialLintResults = (initialResults[filePath] ||
|
|
228
|
+
[]);
|
|
229
|
+
const initialIssues = initialLintResults.map(r => {
|
|
230
|
+
const rawFix = r
|
|
231
|
+
.fixInfo;
|
|
232
|
+
const fixInfo = (() => {
|
|
233
|
+
if (rawFix && typeof rawFix === 'object') {
|
|
234
|
+
const candidate = rawFix;
|
|
235
|
+
return {
|
|
236
|
+
editColumn: typeof candidate.editColumn === 'number' ? candidate.editColumn : undefined,
|
|
237
|
+
deleteCount: typeof candidate.deleteCount === 'number' ? candidate.deleteCount : undefined,
|
|
238
|
+
insertText: typeof candidate.insertText === 'string' ? candidate.insertText : undefined,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return undefined;
|
|
242
|
+
})();
|
|
243
|
+
return {
|
|
244
|
+
lineNumber: r.lineNumber,
|
|
245
|
+
ruleNames: r.ruleNames,
|
|
246
|
+
ruleDescription: r.ruleNames && r.ruleNames.length > 0 ? r.ruleNames.join('/') : 'Unknown rule',
|
|
247
|
+
errorDetail: r
|
|
248
|
+
.errorDetail,
|
|
249
|
+
fixInfo,
|
|
250
|
+
};
|
|
251
|
+
});
|
|
252
|
+
logger.info(`Initial issues count: ${initialIssues.length}`);
|
|
253
|
+
// Split content into lines
|
|
254
|
+
let lines = contentToLines(originalContent);
|
|
255
|
+
let fixesApplied = 0;
|
|
256
|
+
// Get rule names from the issues to apply fixes
|
|
257
|
+
const ruleNames = initialIssues
|
|
258
|
+
.map(issue => issue.ruleNames[0])
|
|
259
|
+
.filter((value, index, self) => self.indexOf(value) === index); // Unique rule names
|
|
260
|
+
logger.debug(`Applying fixes for rules: ${ruleNames.join(', ')}`);
|
|
261
|
+
// Apply our custom rule fixes
|
|
262
|
+
const implementedRuleNames = getImplementedRules();
|
|
263
|
+
const rulesToApply = ruleNames.filter(rule => implementedRuleNames.includes(rule));
|
|
264
|
+
if (rulesToApply.length > 0) {
|
|
265
|
+
const originalLineCount = lines.length;
|
|
266
|
+
lines = applyRuleFixes(lines, rulesToApply);
|
|
267
|
+
// Calculate rough number of fixes applied
|
|
268
|
+
fixesApplied += lines.length - originalLineCount;
|
|
269
|
+
logger.debug(`Applied custom fixes: ${fixesApplied}`);
|
|
270
|
+
}
|
|
271
|
+
// Combine lines back into content
|
|
272
|
+
const currentContent = linesToContent(lines);
|
|
273
|
+
// If content has changed, consider the fixes applied
|
|
274
|
+
if (currentContent !== originalContent) {
|
|
275
|
+
fixesApplied = fixesApplied > 0 ? fixesApplied : 1;
|
|
276
|
+
}
|
|
277
|
+
// Apply markdownlint's built-in fixes if available
|
|
278
|
+
if (fixesApplied === 0) {
|
|
279
|
+
try {
|
|
280
|
+
// Try markdownlint's built-in fix as a fallback
|
|
281
|
+
const mdFix = await import('markdownlint');
|
|
282
|
+
const markdownlintFix = mdFix.default ??
|
|
283
|
+
mdFix;
|
|
284
|
+
const fixResults = markdownlintFix.sync({
|
|
285
|
+
strings: {
|
|
286
|
+
[filePath]: originalContent,
|
|
287
|
+
},
|
|
288
|
+
config,
|
|
289
|
+
fix: true,
|
|
290
|
+
});
|
|
291
|
+
// Avoid indexing by user-provided keys; use first available result
|
|
292
|
+
const firstResult = Object.values(fixResults)[0];
|
|
293
|
+
const fixedContent = firstResult?.[0]?.fixedContent;
|
|
294
|
+
if (fixedContent && fixedContent !== originalContent) {
|
|
295
|
+
lines = contentToLines(fixedContent);
|
|
296
|
+
fixesApplied += 1; // Count one fix per rule applied
|
|
297
|
+
logger.debug('Applied built-in markdownlint fixes');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
logger.error('Error in fallback fix attempt:', err);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Write the fixed content back to file if requested
|
|
305
|
+
if (writeToFile && fixesApplied > 0) {
|
|
306
|
+
await writeFile(filePath, currentContent);
|
|
307
|
+
logger.info(`Wrote fixed content to ${filePath}`);
|
|
308
|
+
}
|
|
309
|
+
// Get final results
|
|
310
|
+
const mdFinal = await import('markdownlint');
|
|
311
|
+
const markdownlintFinal = mdFinal.default ??
|
|
312
|
+
mdFinal;
|
|
313
|
+
const finalResults = markdownlintFinal.sync({
|
|
314
|
+
strings: {
|
|
315
|
+
[filePath]: currentContent,
|
|
316
|
+
},
|
|
317
|
+
config,
|
|
318
|
+
});
|
|
319
|
+
const finalLintResults = (finalResults[filePath] ||
|
|
320
|
+
[]);
|
|
321
|
+
const finalIssues = finalLintResults.map(r => {
|
|
322
|
+
const rawFix = r
|
|
323
|
+
.fixInfo;
|
|
324
|
+
const fixInfo = (() => {
|
|
325
|
+
if (rawFix && typeof rawFix === 'object') {
|
|
326
|
+
const candidate = rawFix;
|
|
327
|
+
return {
|
|
328
|
+
editColumn: typeof candidate.editColumn === 'number' ? candidate.editColumn : undefined,
|
|
329
|
+
deleteCount: typeof candidate.deleteCount === 'number' ? candidate.deleteCount : undefined,
|
|
330
|
+
insertText: typeof candidate.insertText === 'string' ? candidate.insertText : undefined,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
return undefined;
|
|
334
|
+
})();
|
|
335
|
+
return {
|
|
336
|
+
lineNumber: r.lineNumber,
|
|
337
|
+
ruleNames: r.ruleNames,
|
|
338
|
+
ruleDescription: r.ruleNames && r.ruleNames.length > 0 ? r.ruleNames.join('/') : 'Unknown rule',
|
|
339
|
+
errorDetail: r
|
|
340
|
+
.errorDetail,
|
|
341
|
+
fixInfo,
|
|
342
|
+
};
|
|
343
|
+
});
|
|
344
|
+
logger.info(`Final issues count: ${finalIssues.length}`);
|
|
345
|
+
// Generate status report
|
|
346
|
+
let statusText = '';
|
|
347
|
+
if (fixesApplied > 0) {
|
|
348
|
+
statusText = `✅ **Successfully fixed ${fixesApplied} issue(s)**\n\n`;
|
|
349
|
+
}
|
|
350
|
+
if (finalIssues.length > 0) {
|
|
351
|
+
statusText += `⚠️ **${finalIssues.length} issue(s) require manual attention:**\n\n`;
|
|
352
|
+
const remainingList = finalIssues
|
|
353
|
+
.map((issue) => `- **Line ${issue.lineNumber}**: ${issue.ruleDescription} (${issue.ruleNames.join('/')})\n ${issue.errorDetail || ''}`)
|
|
354
|
+
.join('\n');
|
|
355
|
+
statusText += remainingList;
|
|
356
|
+
}
|
|
357
|
+
else if (fixesApplied > 0) {
|
|
358
|
+
statusText += `🎉 **All issues resolved!** The file is now fully compliant with Markdown standards.`;
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
statusText = `✅ **No fixes needed** - The file is already compliant.`;
|
|
362
|
+
}
|
|
363
|
+
if (writeToFile && fixesApplied > 0) {
|
|
364
|
+
statusText += `\n\n📝 **Changes saved to file**`;
|
|
365
|
+
}
|
|
366
|
+
// Add summary
|
|
367
|
+
statusText += `\n\n**Summary:**\n- **Before:** ${initialIssues.length} issues\n- **After:** ${finalIssues.length} issues\n- **Fixed:** ${fixesApplied} issues`;
|
|
368
|
+
return {
|
|
369
|
+
content: [
|
|
370
|
+
{
|
|
371
|
+
type: 'text',
|
|
372
|
+
text: `## Fix Results for ${path.basename(filePath)}\n\n${statusText}${!writeToFile && fixesApplied > 0 ? '\n\n**Preview of fixed content:**\n\n```markdown\n' + currentContent + '\n```' : ''}`,
|
|
373
|
+
},
|
|
374
|
+
],
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
logger.error(`Error fixing markdown file: ${filePath}`, error);
|
|
379
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
380
|
+
throw new McpError(ErrorCode.InvalidParams, `File not found: ${filePath}`);
|
|
381
|
+
}
|
|
382
|
+
throw error;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Get the current markdownlint configuration
|
|
387
|
+
* @returns MCP content response with configuration details
|
|
388
|
+
*/
|
|
389
|
+
async getConfiguration() {
|
|
390
|
+
logger.debug('Getting markdownlint configuration');
|
|
391
|
+
const implementedRules = getImplementedRules();
|
|
392
|
+
return {
|
|
393
|
+
content: [
|
|
394
|
+
{
|
|
395
|
+
type: 'text',
|
|
396
|
+
text: `## Current Markdownlint Configuration\n\n**Active Rules:**\n- Line length limit: 120 characters\n- HTML elements: Allowed\n- First line heading: Not required\n- All other rules: Enabled (default markdownlint ruleset)\n\n**Configuration Source:** Built-in defaults (can be overridden with .markdownlint.json)\n\n**Total Rules:** 30+ standard markdownlint rules covering formatting, consistency, and best practices.\n\n**Auto-Fix Capability:** Automatically fixes ${implementedRules.length} rule violations including ${implementedRules.join(', ')}.`,
|
|
397
|
+
},
|
|
398
|
+
],
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Start the MCP server
|
|
403
|
+
*/
|
|
404
|
+
async run() {
|
|
405
|
+
logger.info('Starting markdownlint MCP server');
|
|
406
|
+
const transport = new StdioServerTransport();
|
|
407
|
+
await this.server.connect(transport);
|
|
408
|
+
logger.info('Markdownlint MCP server running on stdio');
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Create and return a new MarkdownLint server instance
|
|
413
|
+
* @returns A new MarkdownLintServer instance
|
|
414
|
+
*/
|
|
415
|
+
export function createServer() {
|
|
416
|
+
return new MarkdownLintServer();
|
|
417
|
+
}
|
|
418
|
+
export default MarkdownLintServer;
|
|
419
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* markdownlint-mcp type definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Interface for markdownlint issue object
|
|
6
|
+
*/
|
|
7
|
+
export interface MarkdownlintIssue {
|
|
8
|
+
/**
|
|
9
|
+
* Line number where the issue was found
|
|
10
|
+
*/
|
|
11
|
+
lineNumber: number;
|
|
12
|
+
/**
|
|
13
|
+
* Array of rule names that were violated
|
|
14
|
+
*/
|
|
15
|
+
ruleNames: string[];
|
|
16
|
+
/**
|
|
17
|
+
* Human-readable description of the rule
|
|
18
|
+
*/
|
|
19
|
+
ruleDescription: string;
|
|
20
|
+
/**
|
|
21
|
+
* Additional details about the error (optional)
|
|
22
|
+
*/
|
|
23
|
+
errorDetail?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Information for automatic fixing (optional)
|
|
26
|
+
*/
|
|
27
|
+
fixInfo?: {
|
|
28
|
+
/**
|
|
29
|
+
* Column where the edit should start
|
|
30
|
+
*/
|
|
31
|
+
editColumn?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Number of characters to delete
|
|
34
|
+
*/
|
|
35
|
+
deleteCount?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Text to insert at the edit position
|
|
38
|
+
*/
|
|
39
|
+
insertText?: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Interface for tool argument objects
|
|
44
|
+
*/
|
|
45
|
+
export interface ToolArguments {
|
|
46
|
+
/**
|
|
47
|
+
* Path to the markdown file
|
|
48
|
+
*/
|
|
49
|
+
filePath?: unknown;
|
|
50
|
+
/**
|
|
51
|
+
* Whether to write fixes back to the file
|
|
52
|
+
*/
|
|
53
|
+
writeFile?: unknown;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Interface for markdownlint configuration
|
|
57
|
+
*/
|
|
58
|
+
export interface MarkdownlintConfig {
|
|
59
|
+
/**
|
|
60
|
+
* Default configuration flag (enables all rules)
|
|
61
|
+
*/
|
|
62
|
+
default?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Individual rule configurations
|
|
65
|
+
* Keys are rule identifiers like 'MD013'
|
|
66
|
+
*/
|
|
67
|
+
[key: string]: unknown;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Default markdownlint configuration
|
|
71
|
+
* Used when no custom configuration is provided
|
|
72
|
+
*/
|
|
73
|
+
export declare const DEFAULT_CONFIG: MarkdownlintConfig;
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE;QACR;;WAEG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;QAEpB;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;WAEG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,kBAK5B,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* markdownlint-mcp type definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default markdownlint configuration
|
|
6
|
+
* Used when no custom configuration is provided
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_CONFIG = {
|
|
9
|
+
default: true,
|
|
10
|
+
MD013: { line_length: 120 }, // Allow longer lines for modern displays
|
|
11
|
+
MD033: false, // Allow HTML
|
|
12
|
+
MD041: false, // Allow files to not start with H1
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8EH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,yCAAyC;IACtE,KAAK,EAAE,KAAK,EAAE,aAAa;IAC3B,KAAK,EAAE,KAAK,EAAE,mCAAmC;CAClD,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MarkdownlintConfig } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read a file's content
|
|
4
|
+
* @param filePath Path to the file
|
|
5
|
+
* @returns File content as a string
|
|
6
|
+
* @throws Error if file cannot be read
|
|
7
|
+
*/
|
|
8
|
+
export declare function readFile(filePath: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Write content to a file
|
|
11
|
+
* @param filePath Path to the file
|
|
12
|
+
* @param content Content to write
|
|
13
|
+
* @throws Error if file cannot be written
|
|
14
|
+
*/
|
|
15
|
+
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Load markdownlint configuration from file or use defaults
|
|
18
|
+
* @param directory Directory to look for .markdownlint.json
|
|
19
|
+
* @returns Configuration object
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadConfiguration(directory: string): Promise<MarkdownlintConfig>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the default markdownlint configuration
|
|
24
|
+
* @returns Default configuration object
|
|
25
|
+
*/
|
|
26
|
+
export declare function getDefaultConfig(): MarkdownlintConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Convert string content to an array of lines
|
|
29
|
+
* @param content String content to split into lines
|
|
30
|
+
* @returns Array of lines
|
|
31
|
+
*/
|
|
32
|
+
export declare function contentToLines(content: string): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Join an array of lines into a single string
|
|
35
|
+
* @param lines Array of lines to join
|
|
36
|
+
* @returns Joined string
|
|
37
|
+
*/
|
|
38
|
+
export declare function linesToContent(lines: string[]): string;
|
|
39
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBhE;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqDtF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAErD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD"}
|