harmony-mcp 1.2.3 → 1.3.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 +1 -1
- package/dist/cli.js +65 -65
- package/dist/init.js +65 -65
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ MCP (Model Context Protocol) server for Harmony Kanban board. Enables AI coding
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **
|
|
7
|
+
- **29 MCP Tools** for full board control (cards, columns, labels, subtasks, links)
|
|
8
8
|
- **Card Linking** - create relationships between cards (blocks, relates_to, duplicates, is_part_of)
|
|
9
9
|
- **Prompt Builder** - generate AI-ready prompts from cards with context
|
|
10
10
|
- **Agent Session Tracking** - track work progress with timer badges
|
package/dist/cli.js
CHANGED
|
@@ -13792,79 +13792,78 @@ import { join, dirname } from "node:path";
|
|
|
13792
13792
|
import { homedir } from "node:os";
|
|
13793
13793
|
var HARMONY_WORKFLOW_PROMPT = `# Harmony Card Workflow
|
|
13794
13794
|
|
|
13795
|
-
|
|
13795
|
+
Start work on a Harmony card. Card reference: $ARGUMENTS
|
|
13796
13796
|
|
|
13797
|
-
##
|
|
13797
|
+
## 1. Find & Fetch Card
|
|
13798
13798
|
|
|
13799
|
-
|
|
13799
|
+
Parse the reference and fetch the card:
|
|
13800
|
+
- \`#42\` or \`42\` → \`harmony_get_card_by_short_id\` with \`shortId: 42\`
|
|
13801
|
+
- UUID → \`harmony_get_card\` with \`cardId\`
|
|
13802
|
+
- Name/text → \`harmony_search_cards\` with \`query\`
|
|
13800
13803
|
|
|
13801
|
-
|
|
13802
|
-
- If it starts with \`#\` followed by numbers (e.g., \`#42\`), use \`harmony_get_card_by_short_id\` with the number
|
|
13803
|
-
- If it looks like a UUID, use \`harmony_get_card\` directly
|
|
13804
|
-
- Otherwise, use \`harmony_search_cards\` to find by name
|
|
13804
|
+
## 2. Get Board State
|
|
13805
13805
|
|
|
13806
|
-
|
|
13806
|
+
Call \`harmony_get_board\` to get columns and labels. From the response:
|
|
13807
|
+
- Find the "In Progress" (or "Progress") column ID
|
|
13808
|
+
- Find the "agent" label ID
|
|
13807
13809
|
|
|
13808
|
-
|
|
13809
|
-
1. Get the board using \`harmony_get_board\` to find the "In Progress" column ID
|
|
13810
|
-
2. Use \`harmony_move_card\` to move the card to "In Progress"
|
|
13810
|
+
## 3. Setup Card for Work
|
|
13811
13811
|
|
|
13812
|
-
|
|
13812
|
+
Execute these in sequence:
|
|
13813
|
+
1. \`harmony_move_card\` → Move to "In Progress" column
|
|
13814
|
+
2. \`harmony_add_label_to_card\` → Add "agent" label
|
|
13815
|
+
3. \`harmony_start_agent_session\`:
|
|
13816
|
+
- \`cardId\`: Card UUID
|
|
13817
|
+
- \`agentIdentifier\`: Your agent identifier
|
|
13818
|
+
- \`agentName\`: Your agent name
|
|
13819
|
+
- \`currentTask\`: "Analyzing card requirements"
|
|
13813
13820
|
|
|
13814
|
-
|
|
13815
|
-
2. Use \`harmony_add_label_to_card\` to add it to the card
|
|
13821
|
+
## 4. Generate Work Prompt
|
|
13816
13822
|
|
|
13817
|
-
|
|
13823
|
+
Call \`harmony_generate_prompt\` with:
|
|
13824
|
+
- \`cardId\` or \`shortId\` (+ \`projectId\` if using shortId)
|
|
13825
|
+
- \`variant\`: Select based on task:
|
|
13826
|
+
- \`"execute"\` (default) → Clear tasks, bug fixes, well-defined work
|
|
13827
|
+
- \`"analysis"\` → Complex features, unclear requirements
|
|
13828
|
+
- \`"draft"\` → Medium complexity, want feedback first
|
|
13818
13829
|
|
|
13819
|
-
|
|
13820
|
-
|
|
13821
|
-
|
|
13822
|
-
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
|
|
13828
|
-
|
|
13829
|
-
|
|
13830
|
-
|
|
13831
|
-
|
|
13832
|
-
|
|
13833
|
-
|
|
13834
|
-
|
|
13835
|
-
|
|
13836
|
-
|
|
13837
|
-
|
|
13838
|
-
|
|
13839
|
-
|
|
13840
|
-
|
|
13841
|
-
|
|
13842
|
-
|
|
13843
|
-
|
|
13844
|
-
|
|
13845
|
-
**
|
|
13846
|
-
|
|
13847
|
-
|
|
13848
|
-
|
|
13849
|
-
|
|
13850
|
-
|
|
13851
|
-
|
|
13852
|
-
|
|
13853
|
-
|
|
13854
|
-
|
|
13855
|
-
|
|
13856
|
-
- \`status\`: "completed"
|
|
13857
|
-
- \`progressPercent\`: 100
|
|
13858
|
-
2. Use \`harmony_move_card\` to move the card to the "Review" column
|
|
13859
|
-
3. Summarize what was accomplished
|
|
13860
|
-
|
|
13861
|
-
## Important Notes
|
|
13862
|
-
- Always read the card description carefully before starting
|
|
13863
|
-
- If the task is unclear, ask for clarification
|
|
13864
|
-
- Make commits as appropriate during implementation
|
|
13865
|
-
- The "agent" label indicates AI is working on the card
|
|
13866
|
-
- Update progress at meaningful milestones, not constantly
|
|
13867
|
-
- If you need to pause work, call \`harmony_end_agent_session\` with \`status: "paused"\`
|
|
13830
|
+
The generated prompt provides role framing, focus areas, subtasks, linked cards, and suggested outputs.
|
|
13831
|
+
|
|
13832
|
+
## 5. Display Card Summary
|
|
13833
|
+
|
|
13834
|
+
Show the user: Card title, short ID, role, priority, labels, due date, description, and subtasks.
|
|
13835
|
+
|
|
13836
|
+
## 6. Implement Solution
|
|
13837
|
+
|
|
13838
|
+
Work on the card following the generated prompt's guidance. Update progress at milestones:
|
|
13839
|
+
- \`harmony_update_agent_progress\` with \`progressPercent\` (0-100), \`currentTask\`, \`status\`, \`blockers\`
|
|
13840
|
+
|
|
13841
|
+
**Progress checkpoints:** 20% (exploration), 50% (implementation), 80% (testing), 100% (done)
|
|
13842
|
+
|
|
13843
|
+
## 7. Complete Work
|
|
13844
|
+
|
|
13845
|
+
When finished:
|
|
13846
|
+
1. \`harmony_end_agent_session\` with \`status: "completed"\`, \`progressPercent: 100\`
|
|
13847
|
+
2. \`harmony_move_card\` to "Review" column
|
|
13848
|
+
3. Summarize accomplishments
|
|
13849
|
+
|
|
13850
|
+
If pausing: \`harmony_end_agent_session\` with \`status: "paused"\`
|
|
13851
|
+
|
|
13852
|
+
## Key Tools Reference
|
|
13853
|
+
|
|
13854
|
+
**Cards:** \`harmony_get_card\`, \`harmony_get_card_by_short_id\`, \`harmony_search_cards\`, \`harmony_create_card\`, \`harmony_update_card\`, \`harmony_move_card\`, \`harmony_delete_card\`, \`harmony_assign_card\`
|
|
13855
|
+
|
|
13856
|
+
**Subtasks:** \`harmony_create_subtask\`, \`harmony_toggle_subtask\`, \`harmony_delete_subtask\`
|
|
13857
|
+
|
|
13858
|
+
**Labels:** \`harmony_add_label_to_card\`, \`harmony_remove_label_from_card\`, \`harmony_create_label\`
|
|
13859
|
+
|
|
13860
|
+
**Links:** \`harmony_add_link_to_card\`, \`harmony_remove_link_from_card\`, \`harmony_get_card_links\`
|
|
13861
|
+
|
|
13862
|
+
**Board:** \`harmony_get_board\`, \`harmony_list_projects\`, \`harmony_get_context\`, \`harmony_set_project_context\`
|
|
13863
|
+
|
|
13864
|
+
**Sessions:** \`harmony_start_agent_session\`, \`harmony_update_agent_progress\`, \`harmony_end_agent_session\`, \`harmony_get_agent_session\`
|
|
13865
|
+
|
|
13866
|
+
**AI:** \`harmony_generate_prompt\`, \`harmony_process_command\`
|
|
13868
13867
|
`;
|
|
13869
13868
|
function ensureDir(dirPath) {
|
|
13870
13869
|
if (!existsSync(dirPath)) {
|
|
@@ -13960,7 +13959,7 @@ When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
|
13960
13959
|
3. Add the "agent" label using \`harmony_add_label_to_card\`
|
|
13961
13960
|
4. Start a session with \`harmony_start_agent_session\` (agentIdentifier: "codex", agentName: "OpenAI Codex")
|
|
13962
13961
|
5. Show the card details to the user
|
|
13963
|
-
6.
|
|
13962
|
+
6. Use \`harmony_generate_prompt\` to get guidance, then implement the solution
|
|
13964
13963
|
7. Update progress periodically with \`harmony_update_agent_progress\`
|
|
13965
13964
|
8. When done, call \`harmony_end_agent_session\` and move to "Review"
|
|
13966
13965
|
|
|
@@ -13971,6 +13970,7 @@ When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
|
13971
13970
|
- \`harmony_add_label_to_card\`, \`harmony_remove_label_from_card\` - Manage labels
|
|
13972
13971
|
- \`harmony_start_agent_session\`, \`harmony_update_agent_progress\`, \`harmony_end_agent_session\` - Track work
|
|
13973
13972
|
- \`harmony_get_board\` - Get board state
|
|
13973
|
+
- \`harmony_generate_prompt\` - Get role-based guidance and focus areas for the card
|
|
13974
13974
|
`;
|
|
13975
13975
|
const agentsPath = join(cwd, "AGENTS.md");
|
|
13976
13976
|
const { created: agentsCreated, skipped: agentsSkipped } = writeFileIfNotExists(agentsPath, agentsContent, force);
|
package/dist/init.js
CHANGED
|
@@ -33,79 +33,78 @@ import { join, dirname } from "node:path";
|
|
|
33
33
|
import { homedir } from "node:os";
|
|
34
34
|
var HARMONY_WORKFLOW_PROMPT = `# Harmony Card Workflow
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Start work on a Harmony card. Card reference: $ARGUMENTS
|
|
37
37
|
|
|
38
|
-
##
|
|
38
|
+
## 1. Find & Fetch Card
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Parse the reference and fetch the card:
|
|
41
|
+
- \`#42\` or \`42\` → \`harmony_get_card_by_short_id\` with \`shortId: 42\`
|
|
42
|
+
- UUID → \`harmony_get_card\` with \`cardId\`
|
|
43
|
+
- Name/text → \`harmony_search_cards\` with \`query\`
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
- If it starts with \`#\` followed by numbers (e.g., \`#42\`), use \`harmony_get_card_by_short_id\` with the number
|
|
44
|
-
- If it looks like a UUID, use \`harmony_get_card\` directly
|
|
45
|
-
- Otherwise, use \`harmony_search_cards\` to find by name
|
|
45
|
+
## 2. Get Board State
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
Call \`harmony_get_board\` to get columns and labels. From the response:
|
|
48
|
+
- Find the "In Progress" (or "Progress") column ID
|
|
49
|
+
- Find the "agent" label ID
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
1. Get the board using \`harmony_get_board\` to find the "In Progress" column ID
|
|
51
|
-
2. Use \`harmony_move_card\` to move the card to "In Progress"
|
|
51
|
+
## 3. Setup Card for Work
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Execute these in sequence:
|
|
54
|
+
1. \`harmony_move_card\` → Move to "In Progress" column
|
|
55
|
+
2. \`harmony_add_label_to_card\` → Add "agent" label
|
|
56
|
+
3. \`harmony_start_agent_session\`:
|
|
57
|
+
- \`cardId\`: Card UUID
|
|
58
|
+
- \`agentIdentifier\`: Your agent identifier
|
|
59
|
+
- \`agentName\`: Your agent name
|
|
60
|
+
- \`currentTask\`: "Analyzing card requirements"
|
|
54
61
|
|
|
55
|
-
|
|
56
|
-
2. Use \`harmony_add_label_to_card\` to add it to the card
|
|
62
|
+
## 4. Generate Work Prompt
|
|
57
63
|
|
|
58
|
-
|
|
64
|
+
Call \`harmony_generate_prompt\` with:
|
|
65
|
+
- \`cardId\` or \`shortId\` (+ \`projectId\` if using shortId)
|
|
66
|
+
- \`variant\`: Select based on task:
|
|
67
|
+
- \`"execute"\` (default) → Clear tasks, bug fixes, well-defined work
|
|
68
|
+
- \`"analysis"\` → Complex features, unclear requirements
|
|
69
|
+
- \`"draft"\` → Medium complexity, want feedback first
|
|
59
70
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- \`status\`: "completed"
|
|
98
|
-
- \`progressPercent\`: 100
|
|
99
|
-
2. Use \`harmony_move_card\` to move the card to the "Review" column
|
|
100
|
-
3. Summarize what was accomplished
|
|
101
|
-
|
|
102
|
-
## Important Notes
|
|
103
|
-
- Always read the card description carefully before starting
|
|
104
|
-
- If the task is unclear, ask for clarification
|
|
105
|
-
- Make commits as appropriate during implementation
|
|
106
|
-
- The "agent" label indicates AI is working on the card
|
|
107
|
-
- Update progress at meaningful milestones, not constantly
|
|
108
|
-
- If you need to pause work, call \`harmony_end_agent_session\` with \`status: "paused"\`
|
|
71
|
+
The generated prompt provides role framing, focus areas, subtasks, linked cards, and suggested outputs.
|
|
72
|
+
|
|
73
|
+
## 5. Display Card Summary
|
|
74
|
+
|
|
75
|
+
Show the user: Card title, short ID, role, priority, labels, due date, description, and subtasks.
|
|
76
|
+
|
|
77
|
+
## 6. Implement Solution
|
|
78
|
+
|
|
79
|
+
Work on the card following the generated prompt's guidance. Update progress at milestones:
|
|
80
|
+
- \`harmony_update_agent_progress\` with \`progressPercent\` (0-100), \`currentTask\`, \`status\`, \`blockers\`
|
|
81
|
+
|
|
82
|
+
**Progress checkpoints:** 20% (exploration), 50% (implementation), 80% (testing), 100% (done)
|
|
83
|
+
|
|
84
|
+
## 7. Complete Work
|
|
85
|
+
|
|
86
|
+
When finished:
|
|
87
|
+
1. \`harmony_end_agent_session\` with \`status: "completed"\`, \`progressPercent: 100\`
|
|
88
|
+
2. \`harmony_move_card\` to "Review" column
|
|
89
|
+
3. Summarize accomplishments
|
|
90
|
+
|
|
91
|
+
If pausing: \`harmony_end_agent_session\` with \`status: "paused"\`
|
|
92
|
+
|
|
93
|
+
## Key Tools Reference
|
|
94
|
+
|
|
95
|
+
**Cards:** \`harmony_get_card\`, \`harmony_get_card_by_short_id\`, \`harmony_search_cards\`, \`harmony_create_card\`, \`harmony_update_card\`, \`harmony_move_card\`, \`harmony_delete_card\`, \`harmony_assign_card\`
|
|
96
|
+
|
|
97
|
+
**Subtasks:** \`harmony_create_subtask\`, \`harmony_toggle_subtask\`, \`harmony_delete_subtask\`
|
|
98
|
+
|
|
99
|
+
**Labels:** \`harmony_add_label_to_card\`, \`harmony_remove_label_from_card\`, \`harmony_create_label\`
|
|
100
|
+
|
|
101
|
+
**Links:** \`harmony_add_link_to_card\`, \`harmony_remove_link_from_card\`, \`harmony_get_card_links\`
|
|
102
|
+
|
|
103
|
+
**Board:** \`harmony_get_board\`, \`harmony_list_projects\`, \`harmony_get_context\`, \`harmony_set_project_context\`
|
|
104
|
+
|
|
105
|
+
**Sessions:** \`harmony_start_agent_session\`, \`harmony_update_agent_progress\`, \`harmony_end_agent_session\`, \`harmony_get_agent_session\`
|
|
106
|
+
|
|
107
|
+
**AI:** \`harmony_generate_prompt\`, \`harmony_process_command\`
|
|
109
108
|
`;
|
|
110
109
|
function ensureDir(dirPath) {
|
|
111
110
|
if (!existsSync(dirPath)) {
|
|
@@ -201,7 +200,7 @@ When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
|
201
200
|
3. Add the "agent" label using \`harmony_add_label_to_card\`
|
|
202
201
|
4. Start a session with \`harmony_start_agent_session\` (agentIdentifier: "codex", agentName: "OpenAI Codex")
|
|
203
202
|
5. Show the card details to the user
|
|
204
|
-
6.
|
|
203
|
+
6. Use \`harmony_generate_prompt\` to get guidance, then implement the solution
|
|
205
204
|
7. Update progress periodically with \`harmony_update_agent_progress\`
|
|
206
205
|
8. When done, call \`harmony_end_agent_session\` and move to "Review"
|
|
207
206
|
|
|
@@ -212,6 +211,7 @@ When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
|
212
211
|
- \`harmony_add_label_to_card\`, \`harmony_remove_label_from_card\` - Manage labels
|
|
213
212
|
- \`harmony_start_agent_session\`, \`harmony_update_agent_progress\`, \`harmony_end_agent_session\` - Track work
|
|
214
213
|
- \`harmony_get_board\` - Get board state
|
|
214
|
+
- \`harmony_generate_prompt\` - Get role-based guidance and focus areas for the card
|
|
215
215
|
`;
|
|
216
216
|
const agentsPath = join(cwd, "AGENTS.md");
|
|
217
217
|
const { created: agentsCreated, skipped: agentsSkipped } = writeFileIfNotExists(agentsPath, agentsContent, force);
|