automd-mcp 0.2.0 → 0.2.1
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/dist/index.js +27 -24
- package/package.json +41 -40
- package/LICENSE.md +0 -60
package/dist/index.js
CHANGED
|
@@ -40524,7 +40524,7 @@ function errorResponse(err) {
|
|
|
40524
40524
|
function registerTools(server2) {
|
|
40525
40525
|
server2.registerTool("list_items", {
|
|
40526
40526
|
title: "List Items",
|
|
40527
|
-
description: "List all items (boards, checklists, and
|
|
40527
|
+
description: "List all items (boards, checklists, pages, and knowledge bases) with their task counts. Returns array of {id, name, itemType, projectId, taskCount}."
|
|
40528
40528
|
}, async () => {
|
|
40529
40529
|
try {
|
|
40530
40530
|
const items = await api.listFiles();
|
|
@@ -40535,8 +40535,8 @@ function registerTools(server2) {
|
|
|
40535
40535
|
});
|
|
40536
40536
|
server2.registerTool("get_item", {
|
|
40537
40537
|
title: "Get Item",
|
|
40538
|
-
description: "Get an item (board, checklist, or
|
|
40539
|
-
inputSchema: { itemId: external_exports.string().describe("The item ID") }
|
|
40538
|
+
description: "Get an item (board, checklist, page, or knowledge base) with its columns and tasks",
|
|
40539
|
+
inputSchema: { itemId: external_exports.string().describe("The item ID (obtain from list_items)") }
|
|
40540
40540
|
}, async ({ itemId }) => {
|
|
40541
40541
|
try {
|
|
40542
40542
|
const item = await api.getFile(itemId);
|
|
@@ -40559,11 +40559,11 @@ function registerTools(server2) {
|
|
|
40559
40559
|
});
|
|
40560
40560
|
server2.registerTool("create_item", {
|
|
40561
40561
|
title: "Create Item",
|
|
40562
|
-
description: "Create a new board, checklist, or
|
|
40562
|
+
description: "Create a new board, checklist, page, or knowledge base. Boards use # (H1) for columns and ## (H2) for tasks. Checklists use ## (H2) with [ ]/[x] prefixes. Pages are free-form markdown. Knowledge bases are structured collections of entries (## H2) without checkboxes or progress \u2014 ideal for decisions, patterns, and reference material. All support YAML frontmatter, descriptions, blockquotes (>) for acceptance criteria, and GFM checkboxes for subtasks.",
|
|
40563
40563
|
inputSchema: {
|
|
40564
40564
|
name: external_exports.string().describe("Name for the new item"),
|
|
40565
|
-
itemType: external_exports.enum(["board", "checklist", "page"]).optional().describe("Type of item to create: board (kanban columns), checklist (task list with checkboxes),
|
|
40566
|
-
markdown: external_exports.string().optional().describe("Initial markdown content.
|
|
40565
|
+
itemType: external_exports.enum(["board", "checklist", "page", "knowledge"]).optional().describe("Type of item to create: board (kanban columns), checklist (task list with checkboxes), page (free-form markdown), or knowledge (structured entries without checkboxes/progress). Defaults to board"),
|
|
40566
|
+
markdown: external_exports.string().optional().describe("Initial markdown content. Omit for an empty item. For boards: use # for columns, ## for tasks. For checklists: ## with [ ] prefix. For pages/knowledge: free-form markdown. All types support YAML frontmatter (board:, description:, vocabulary:)."),
|
|
40567
40567
|
projectId: external_exports.string().optional().describe("Project ID to add the item to (optional)")
|
|
40568
40568
|
}
|
|
40569
40569
|
}, async ({ name, itemType, markdown, projectId }) => {
|
|
@@ -40605,10 +40605,10 @@ function registerTools(server2) {
|
|
|
40605
40605
|
});
|
|
40606
40606
|
server2.registerTool("add_task", {
|
|
40607
40607
|
title: "Add Task",
|
|
40608
|
-
description: "Add a new task (H2 heading) to a column. Content supports inline metadata
|
|
40608
|
+
description: "Add a new task (## H2 heading) to a column. Content supports inline metadata: @user #label priority:high|medium|low due:YYYY-MM-DD est:4h knowledge:true. Do not include built-by: manually \u2014 use the agentName parameter.",
|
|
40609
40609
|
inputSchema: {
|
|
40610
40610
|
itemId: external_exports.string().describe("The item ID"),
|
|
40611
|
-
columnId: external_exports.string().describe("The column
|
|
40611
|
+
columnId: external_exports.string().describe("The column ID (found in get_item response columns[].id)"),
|
|
40612
40612
|
content: external_exports.string().describe("Task content with optional inline metadata"),
|
|
40613
40613
|
agentName: external_exports.string().regex(/^[\w-]+$/).optional().describe("Name of the agent making this change (tagged as built-by)")
|
|
40614
40614
|
}
|
|
@@ -40623,10 +40623,10 @@ function registerTools(server2) {
|
|
|
40623
40623
|
});
|
|
40624
40624
|
server2.registerTool("update_task", {
|
|
40625
40625
|
title: "Update Task",
|
|
40626
|
-
description: "Update a task's content",
|
|
40626
|
+
description: "Update a task's title/content text only. For metadata use update_task_metadata, for completion use toggle_task, for position use move_task, for AC use update_acceptance_criteria, for learnings use update_learnings.",
|
|
40627
40627
|
inputSchema: {
|
|
40628
40628
|
itemId: external_exports.string().describe("The item ID"),
|
|
40629
|
-
taskId: external_exports.string().describe("The task ID"),
|
|
40629
|
+
taskId: external_exports.string().describe("The task ID (found in get_item response columns[].tasks[].id)"),
|
|
40630
40630
|
content: external_exports.string().optional().describe("New task content"),
|
|
40631
40631
|
agentName: external_exports.string().regex(/^[\w-]+$/).optional().describe("Name of the agent making this change (tagged as built-by)")
|
|
40632
40632
|
}
|
|
@@ -40647,7 +40647,7 @@ function registerTools(server2) {
|
|
|
40647
40647
|
});
|
|
40648
40648
|
server2.registerTool("toggle_task", {
|
|
40649
40649
|
title: "Toggle Task",
|
|
40650
|
-
description: "Toggle a task between checked and unchecked",
|
|
40650
|
+
description: "Toggle a task between checked [ ] and unchecked [x]. Only applies to tasks with checkbox prefixes. Sets completedAt on check, clears on uncheck.",
|
|
40651
40651
|
inputSchema: {
|
|
40652
40652
|
itemId: external_exports.string().describe("The item ID"),
|
|
40653
40653
|
taskId: external_exports.string().describe("The task ID")
|
|
@@ -40667,7 +40667,7 @@ function registerTools(server2) {
|
|
|
40667
40667
|
itemId: external_exports.string().describe("The item ID"),
|
|
40668
40668
|
taskId: external_exports.string().describe("The task ID"),
|
|
40669
40669
|
targetColumnId: external_exports.string().describe("Target column ID"),
|
|
40670
|
-
targetIndex: external_exports.number().describe("Position in
|
|
40670
|
+
targetIndex: external_exports.number().describe("Position in target column (0-based). Use 0 to place at top. To append, use the column task count from get_item.")
|
|
40671
40671
|
}
|
|
40672
40672
|
}, async ({ itemId, taskId, targetColumnId, targetIndex }) => {
|
|
40673
40673
|
try {
|
|
@@ -40698,7 +40698,7 @@ function registerTools(server2) {
|
|
|
40698
40698
|
});
|
|
40699
40699
|
server2.registerTool("add_column", {
|
|
40700
40700
|
title: "Add Column",
|
|
40701
|
-
description:
|
|
40701
|
+
description: 'Add a new column (# H1 heading) to a board or checklist. Columns group tasks into workflow stages like "To Do", "In Progress", "Done".',
|
|
40702
40702
|
inputSchema: {
|
|
40703
40703
|
itemId: external_exports.string().describe("The item ID"),
|
|
40704
40704
|
title: external_exports.string().describe("Column title")
|
|
@@ -40834,7 +40834,9 @@ function registerTools(server2) {
|
|
|
40834
40834
|
targetColumnId: external_exports.string().optional().describe("Target column (for move)"),
|
|
40835
40835
|
targetIndex: external_exports.number().optional().describe("Target index (for move)"),
|
|
40836
40836
|
displayContent: external_exports.string().optional().describe("Display content (for updateMetadata)"),
|
|
40837
|
-
metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional().describe("Metadata fields (for updateMetadata)")
|
|
40837
|
+
metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional().describe("Metadata fields (for updateMetadata)"),
|
|
40838
|
+
acceptanceCriteria: external_exports.string().nullable().optional().describe("Acceptance criteria text (for updateAcceptanceCriteria). Pass null to remove."),
|
|
40839
|
+
learnings: external_exports.string().nullable().optional().describe("Learnings text (for updateLearnings). Pass null to remove.")
|
|
40838
40840
|
})).describe("Array of task updates to apply")
|
|
40839
40841
|
}
|
|
40840
40842
|
}, async ({ itemId, agentName, updates }) => {
|
|
@@ -40913,7 +40915,7 @@ function registerTools(server2) {
|
|
|
40913
40915
|
});
|
|
40914
40916
|
server2.registerTool("search_context", {
|
|
40915
40917
|
title: "Search Context",
|
|
40916
|
-
description:
|
|
40918
|
+
description: "Search for contextual detail (descriptions, acceptance criteria, learnings) across all items. Returns any task with rich content \u2014 broader than find_knowledge which only returns knowledge:true items. Use this for finding implementation details, past decisions, and context before starting work.",
|
|
40917
40919
|
inputSchema: {
|
|
40918
40920
|
query: external_exports.string().optional().describe("Text to search for across descriptions, AC, learnings, and task content"),
|
|
40919
40921
|
label: external_exports.string().optional().describe("Filter by label (without #). Also matches #tags inside learnings text."),
|
|
@@ -40972,7 +40974,7 @@ function registerTools(server2) {
|
|
|
40972
40974
|
});
|
|
40973
40975
|
server2.registerTool("list_projects", {
|
|
40974
40976
|
title: "List Projects",
|
|
40975
|
-
description: "List all projects"
|
|
40977
|
+
description: "List all projects. Returns array of {id, name, color}. Use project id as projectId in create_item or get_project_items."
|
|
40976
40978
|
}, async () => {
|
|
40977
40979
|
try {
|
|
40978
40980
|
const projects = await api.listProjects();
|
|
@@ -41095,7 +41097,7 @@ function registerTools(server2) {
|
|
|
41095
41097
|
});
|
|
41096
41098
|
server2.registerTool("find_knowledge", {
|
|
41097
41099
|
title: "Find Knowledge",
|
|
41098
|
-
description: "Search for knowledge items
|
|
41100
|
+
description: "Search specifically for curated knowledge items (knowledge:true) and tasks with captured learnings. Use for institutional decisions, patterns, and reference. For broader task history including descriptions, use search_context instead.",
|
|
41099
41101
|
inputSchema: {
|
|
41100
41102
|
query: external_exports.string().optional().describe("Text to search for in knowledge items"),
|
|
41101
41103
|
label: external_exports.string().optional().describe("Filter by label (without #)")
|
|
@@ -41153,7 +41155,7 @@ function registerTools(server2) {
|
|
|
41153
41155
|
description: "Gather all knowledge about a topic and return a structured summary. This collects and organizes existing knowledge items \u2014 it does NOT generate AI content. Returns a paste-ready context brief.",
|
|
41154
41156
|
inputSchema: {
|
|
41155
41157
|
topic: external_exports.string().describe('Topic to synthesize knowledge about (e.g. "authentication", "pricing", "deployment")'),
|
|
41156
|
-
labels: external_exports.string().optional().describe('Comma-separated labels to filter by (e.g. "backend,security")')
|
|
41158
|
+
labels: external_exports.string().optional().describe('Comma-separated labels to filter by (e.g. "backend,security"). Unlike label on other tools which takes a single value, this accepts multiple comma-separated.')
|
|
41157
41159
|
}
|
|
41158
41160
|
}, async ({ topic, labels }) => {
|
|
41159
41161
|
try {
|
|
@@ -41340,12 +41342,13 @@ function registerSystemPrompts(server2) {
|
|
|
41340
41342
|
|
|
41341
41343
|
## Core Concepts
|
|
41342
41344
|
|
|
41343
|
-
AutoMD has
|
|
41345
|
+
AutoMD has four item types:
|
|
41344
41346
|
- **Boards** \u2014 Kanban-style markdown files with columns (H1) and tasks (H2). Each has YAML frontmatter with metadata.
|
|
41345
41347
|
- **Checklists** \u2014 Task lists using ## (H2) headings with [ ]/[x] checkbox prefixes. Great for simple to-do lists and tracking.
|
|
41346
|
-
- **Pages** \u2014 Free-form markdown documents for
|
|
41348
|
+
- **Pages** \u2014 Free-form markdown documents for specs, documentation, and reference material.
|
|
41349
|
+
- **Knowledge Bases** \u2014 Structured collections of knowledge entries (## H2) without checkboxes or progress tracking. Ideal for decisions, patterns, and institutional memory.
|
|
41347
41350
|
|
|
41348
|
-
All
|
|
41351
|
+
All four types support YAML frontmatter, descriptions, acceptance criteria, subtasks, and learnings.
|
|
41349
41352
|
|
|
41350
41353
|
**Knowledge items** are tasks with \`knowledge:true\` \u2014 they store decisions, patterns, references, and institutional memory. They use the same task infrastructure but represent knowledge, not work to be done.
|
|
41351
41354
|
|
|
@@ -41389,7 +41392,7 @@ Description paragraph \u2014 background, context, the "why".
|
|
|
41389
41392
|
- Use \`synthesize_topic\` to assemble context briefs about a topic
|
|
41390
41393
|
|
|
41391
41394
|
## Available Tools
|
|
41392
|
-
- Item management: list_items, get_item, create_item (supports board/checklist/page types), delete_item, rename_item
|
|
41395
|
+
- Item management: list_items, get_item, create_item (supports board/checklist/page/knowledge types), delete_item, rename_item
|
|
41393
41396
|
- Task management: add_task, update_task, toggle_task, move_task, delete_task
|
|
41394
41397
|
- Metadata: update_task_metadata, update_acceptance_criteria, update_learnings
|
|
41395
41398
|
- Knowledge: add_knowledge, update_knowledge, find_knowledge, synthesize_topic, import_memories
|
|
@@ -41433,7 +41436,7 @@ Please:
|
|
|
41433
41436
|
3. Identify any dependencies between subtasks
|
|
41434
41437
|
4. Suggest which subtasks could be parallelized
|
|
41435
41438
|
|
|
41436
|
-
|
|
41439
|
+
Subtasks are GFM checkboxes (\`- [ ] text\`) inside the parent task's content. Use update_task to add them to the parent task's body, or use add_task to create standalone tasks.`
|
|
41437
41440
|
}
|
|
41438
41441
|
}]
|
|
41439
41442
|
};
|
|
@@ -41741,7 +41744,7 @@ Analyze completed tasks and the board state to provide:
|
|
|
41741
41744
|
3. **Action Items** \u2014 Concrete improvements for next iteration
|
|
41742
41745
|
4. **Learnings to Capture** \u2014 Key decisions and patterns worth preserving as knowledge items
|
|
41743
41746
|
|
|
41744
|
-
For each learning worth capturing, provide add_knowledge or
|
|
41747
|
+
For each learning worth capturing, provide add_knowledge tool calls for new knowledge items, or update_learnings tool calls to attach learnings to existing tasks.`
|
|
41745
41748
|
}
|
|
41746
41749
|
}]
|
|
41747
41750
|
};
|
package/package.json
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "automd-mcp",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "MCP server for AutoMD — manage boards, checklists, and pages stored as markdown",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"automd-mcp": "./dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"dist"
|
|
12
|
-
],
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "automd-mcp",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "MCP server for AutoMD — manage boards, checklists, and pages stored as markdown",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"automd-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"dev": "tsx watch src/index.ts",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"build": "tsup",
|
|
17
|
+
"prepublishOnly": "pnpm build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"mcp",
|
|
21
|
+
"model-context-protocol",
|
|
22
|
+
"kanban",
|
|
23
|
+
"markdown",
|
|
24
|
+
"automd",
|
|
25
|
+
"task-management"
|
|
26
|
+
],
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/luka-zivkovic/automd"
|
|
30
|
+
},
|
|
31
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
32
|
+
"author": "Luka Zivkovic",
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
35
|
+
"@types/mdast": "^4.0.4",
|
|
36
|
+
"tsup": "^8.0.0",
|
|
37
|
+
"tsx": "^4.19.0",
|
|
38
|
+
"typescript": "^5.7.2",
|
|
39
|
+
"zod": "^4.3.6"
|
|
40
|
+
}
|
|
41
|
+
}
|
package/LICENSE.md
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# License
|
|
2
|
-
|
|
3
|
-
Portions of this software are licensed as follows:
|
|
4
|
-
|
|
5
|
-
- Content of branches other than the main branch (i.e. "master") is not licensed.
|
|
6
|
-
- Source code files that contain ".ee." in their filename or ".ee" in their dirname are NOT licensed under the Sustainable Use License. To use source code files that contain ".ee." in their filename or ".ee" in their dirname you must hold a valid AutoMD Enterprise License specifically allowing you access to such source code files, as defined in "LICENSE_EE.md".
|
|
7
|
-
- All third party components incorporated into the AutoMD Software are licensed under the original license provided by the owner of the applicable component.
|
|
8
|
-
- Content outside of the above mentioned files or restrictions is available under the "Sustainable Use License" as defined below.
|
|
9
|
-
|
|
10
|
-
# Sustainable Use License
|
|
11
|
-
|
|
12
|
-
Version 1.0
|
|
13
|
-
|
|
14
|
-
## Acceptance
|
|
15
|
-
|
|
16
|
-
By using the software, you agree to all of the terms and conditions below.
|
|
17
|
-
|
|
18
|
-
## Copyright License
|
|
19
|
-
|
|
20
|
-
The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations below.
|
|
21
|
-
|
|
22
|
-
## Limitations
|
|
23
|
-
|
|
24
|
-
You may use or modify the software only for your own internal business purposes or for non-commercial or personal use. You may distribute the software or provide it to others only if you do so free of charge for non-commercial purposes. You may not provide the software to third parties as a hosted or managed service, where the service provides users with access to any substantial set of the features or functionality of the software. You may not move, change, disable, or circumvent the license key functionality in the software, and you may not remove or obscure any functionality in the software that is protected by the license key. You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor's trademarks is subject to applicable law.
|
|
25
|
-
|
|
26
|
-
## Patents
|
|
27
|
-
|
|
28
|
-
The licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
|
|
29
|
-
|
|
30
|
-
## Notices
|
|
31
|
-
|
|
32
|
-
You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms. If you modify the software, you must include in any modified copies of the software a prominent notice stating that you have modified the software.
|
|
33
|
-
|
|
34
|
-
## No Other Rights
|
|
35
|
-
|
|
36
|
-
These terms do not imply any licenses other than those expressly granted in these terms.
|
|
37
|
-
|
|
38
|
-
## Termination
|
|
39
|
-
|
|
40
|
-
If you use the software in violation of these terms, such use is not licensed, and your license will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your license will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your license to terminate automatically and permanently.
|
|
41
|
-
|
|
42
|
-
## No Liability
|
|
43
|
-
|
|
44
|
-
As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.
|
|
45
|
-
|
|
46
|
-
## Definitions
|
|
47
|
-
|
|
48
|
-
The **licensor** is the entity offering these terms, AutoMD (automd.io).
|
|
49
|
-
|
|
50
|
-
The **software** is the software the licensor makes available under these terms, including any portion of it.
|
|
51
|
-
|
|
52
|
-
**You** refers to the individual or entity agreeing to these terms.
|
|
53
|
-
|
|
54
|
-
**Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. Control means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
|
|
55
|
-
|
|
56
|
-
**Your license** is the license granted to you for the software under these terms.
|
|
57
|
-
|
|
58
|
-
**Use** means anything you do with the software requiring your license.
|
|
59
|
-
|
|
60
|
-
**Trademark** means trademarks, service marks, and similar rights.
|