md-feedback 0.9.9 → 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/README.md +5 -4
- package/dist/mcp-server.js +3 -15
- package/package.json +70 -63
package/README.md
CHANGED
|
@@ -28,22 +28,23 @@ Add to your MCP client config (Claude Code, Cursor, etc.):
|
|
|
28
28
|
|
|
29
29
|
That's it. No install, no setup — `npx` handles everything.
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## 13 MCP Tools
|
|
32
32
|
|
|
33
33
|
| Tool | Description |
|
|
34
34
|
|------|-------------|
|
|
35
35
|
| `get_document_structure` | Full review state: memos, gates, cursor, sections, summary |
|
|
36
36
|
| `list_annotations` | All annotations with type/status/owner/color |
|
|
37
37
|
| `get_review_status` | Annotation counts and session status |
|
|
38
|
-
| `
|
|
38
|
+
| `create_annotation` | Create annotation programmatically with anchor search |
|
|
39
|
+
| `respond_to_memo` | Add AI response to an annotation |
|
|
40
|
+
| `update_memo_status` | Mark a memo as open/answered/wontfix |
|
|
39
41
|
| `update_cursor` | Set plan cursor position (task ID, step, next action) |
|
|
40
42
|
| `evaluate_gates` | Check if merge/release/implement conditions are met |
|
|
41
43
|
| `export_review` | Export for a specific AI tool format |
|
|
42
|
-
| `create_checkpoint` | Save review progress |
|
|
44
|
+
| `create_checkpoint` | Save review progress snapshot |
|
|
43
45
|
| `get_checkpoints` | List all checkpoints |
|
|
44
46
|
| `generate_handoff` | Generate structured handoff document |
|
|
45
47
|
| `pickup_handoff` | Parse existing handoff for session resumption |
|
|
46
|
-
| `create_annotation` | Create annotation programmatically |
|
|
47
48
|
|
|
48
49
|
## How It Works
|
|
49
50
|
|
package/dist/mcp-server.js
CHANGED
|
@@ -21416,6 +21416,7 @@ function reinsertMemosAndResponses(body, memos, responses) {
|
|
|
21416
21416
|
for (const memo of memos) {
|
|
21417
21417
|
const lineIdx = findMemoAnchorLine(lines, memo);
|
|
21418
21418
|
if (lineIdx >= 0) {
|
|
21419
|
+
memo.anchor = `L${lineIdx + 1}|${hashLine(lines[lineIdx])}`;
|
|
21419
21420
|
const existing = memoMap.get(lineIdx) || [];
|
|
21420
21421
|
existing.push(memo);
|
|
21421
21422
|
memoMap.set(lineIdx, existing);
|
|
@@ -21643,19 +21644,6 @@ function getAnnotationCounts(markdown) {
|
|
|
21643
21644
|
else if (color === "blue") questions++;
|
|
21644
21645
|
else highlights++;
|
|
21645
21646
|
}
|
|
21646
|
-
let m;
|
|
21647
|
-
const markRe = /<mark[^>]*style="background-color:\s*([^"]+)"[^>]*>/g;
|
|
21648
|
-
while ((m = markRe.exec(markdown)) !== null) {
|
|
21649
|
-
const hex = m[1].trim();
|
|
21650
|
-
const cn = HEX_TO_COLOR_NAME[hex];
|
|
21651
|
-
if (cn === "red") fixes++;
|
|
21652
|
-
else if (cn === "blue") questions++;
|
|
21653
|
-
else highlights++;
|
|
21654
|
-
}
|
|
21655
|
-
const eqRe = /(?<!`)==(?!.*==.*`)(.+?)==(?!`)/g;
|
|
21656
|
-
while (eqRe.exec(markdown) !== null) {
|
|
21657
|
-
highlights++;
|
|
21658
|
-
}
|
|
21659
21647
|
return { fixes, questions, highlights };
|
|
21660
21648
|
}
|
|
21661
21649
|
function getSectionsWithAnnotations(markdown) {
|
|
@@ -22678,13 +22666,13 @@ function log(msg) {
|
|
|
22678
22666
|
}
|
|
22679
22667
|
var server = new McpServer({
|
|
22680
22668
|
name: "md-feedback",
|
|
22681
|
-
version: "0.
|
|
22669
|
+
version: "1.0.0"
|
|
22682
22670
|
});
|
|
22683
22671
|
registerTools(server);
|
|
22684
22672
|
async function main() {
|
|
22685
22673
|
const transport = new StdioServerTransport();
|
|
22686
22674
|
await server.connect(transport);
|
|
22687
|
-
log(`v${"0.
|
|
22675
|
+
log(`v${"1.0.0"} ready (stdio)`);
|
|
22688
22676
|
}
|
|
22689
22677
|
main().catch((err) => {
|
|
22690
22678
|
log(`fatal: ${err}`);
|
package/package.json
CHANGED
|
@@ -1,63 +1,70 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "md-feedback",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for
|
|
5
|
-
"license": "SUL-1.0",
|
|
6
|
-
"author": "Yeomin Seon",
|
|
7
|
-
"type": "commonjs",
|
|
8
|
-
"bin": {
|
|
9
|
-
"md-feedback": "./bin/md-feedback.cjs"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"dist/mcp-server.js",
|
|
13
|
-
"bin/md-feedback.cjs",
|
|
14
|
-
"README.md"
|
|
15
|
-
],
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "node esbuild.mjs"
|
|
18
|
-
},
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
21
|
-
"zod": "^3.23.0"
|
|
22
|
-
},
|
|
23
|
-
"devDependencies": {
|
|
24
|
-
"esbuild": "^0.24.2",
|
|
25
|
-
"typescript": "^5.7.0"
|
|
26
|
-
},
|
|
27
|
-
"engines": {
|
|
28
|
-
"node": ">=18"
|
|
29
|
-
},
|
|
30
|
-
"repository": {
|
|
31
|
-
"type": "git",
|
|
32
|
-
"url": "https://github.com/yeominux/md-feedback"
|
|
33
|
-
},
|
|
34
|
-
"bugs": {
|
|
35
|
-
"url": "https://github.com/yeominux/md-feedback/issues"
|
|
36
|
-
},
|
|
37
|
-
"homepage": "https://github.com/yeominux/md-feedback#mcp-server",
|
|
38
|
-
"keywords": [
|
|
39
|
-
"mcp",
|
|
40
|
-
"mcp-server",
|
|
41
|
-
"model-context-protocol",
|
|
42
|
-
"markdown",
|
|
43
|
-
"feedback",
|
|
44
|
-
"ai",
|
|
45
|
-
"annotation",
|
|
46
|
-
"review",
|
|
47
|
-
"plan-review",
|
|
48
|
-
"ai-agent",
|
|
49
|
-
"coding-workflow",
|
|
50
|
-
"handoff",
|
|
51
|
-
"session-handoff",
|
|
52
|
-
"structured-feedback",
|
|
53
|
-
"checkpoint",
|
|
54
|
-
"ai-context",
|
|
55
|
-
"ai-coding",
|
|
56
|
-
"claude-code",
|
|
57
|
-
"cursor-ai",
|
|
58
|
-
"vibe-coding",
|
|
59
|
-
"context-engineering",
|
|
60
|
-
"gates",
|
|
61
|
-
"plan-review-tool"
|
|
62
|
-
|
|
63
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "md-feedback",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for markdown plan review — AI agents read annotations, mark tasks done, evaluate quality gates, and generate session handoffs. 13 tools for Claude Code, Cursor, Copilot, and 8 more AI tools.",
|
|
5
|
+
"license": "SUL-1.0",
|
|
6
|
+
"author": "Yeomin Seon",
|
|
7
|
+
"type": "commonjs",
|
|
8
|
+
"bin": {
|
|
9
|
+
"md-feedback": "./bin/md-feedback.cjs"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/mcp-server.js",
|
|
13
|
+
"bin/md-feedback.cjs",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "node esbuild.mjs"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
21
|
+
"zod": "^3.23.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"esbuild": "^0.24.2",
|
|
25
|
+
"typescript": "^5.7.0"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=18"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/yeominux/md-feedback"
|
|
33
|
+
},
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/yeominux/md-feedback/issues"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/yeominux/md-feedback#mcp-server",
|
|
38
|
+
"keywords": [
|
|
39
|
+
"mcp",
|
|
40
|
+
"mcp-server",
|
|
41
|
+
"model-context-protocol",
|
|
42
|
+
"markdown",
|
|
43
|
+
"feedback",
|
|
44
|
+
"ai",
|
|
45
|
+
"annotation",
|
|
46
|
+
"review",
|
|
47
|
+
"plan-review",
|
|
48
|
+
"ai-agent",
|
|
49
|
+
"coding-workflow",
|
|
50
|
+
"handoff",
|
|
51
|
+
"session-handoff",
|
|
52
|
+
"structured-feedback",
|
|
53
|
+
"checkpoint",
|
|
54
|
+
"ai-context",
|
|
55
|
+
"ai-coding",
|
|
56
|
+
"claude-code",
|
|
57
|
+
"cursor-ai",
|
|
58
|
+
"vibe-coding",
|
|
59
|
+
"context-engineering",
|
|
60
|
+
"gates",
|
|
61
|
+
"plan-review-tool",
|
|
62
|
+
"document-annotation",
|
|
63
|
+
"code-review",
|
|
64
|
+
"ai-workflow",
|
|
65
|
+
"copilot",
|
|
66
|
+
"markdown-review",
|
|
67
|
+
"developer-tools",
|
|
68
|
+
"quality-gate"
|
|
69
|
+
]
|
|
70
|
+
}
|