harmony-mcp 1.3.2 → 1.3.3

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 CHANGED
@@ -23966,23 +23966,11 @@ var RESOURCES = [
23966
23966
  mimeType: "application/json"
23967
23967
  }
23968
23968
  ];
23969
- var PROMPTS = {
23970
- harmony_daily_standup: {
23971
- name: "Daily Standup Summary",
23972
- description: "Generate a summary of recent activity and current work items",
23973
- arguments: [{ name: "projectId", description: "Project to summarize", required: false }]
23974
- },
23975
- harmony_board_cleanup: {
23976
- name: "Board Cleanup Suggestions",
23977
- description: "Identify stale cards and suggest cleanup actions",
23978
- arguments: []
23979
- }
23980
- };
23981
23969
 
23982
23970
  class HarmonyMCPServer {
23983
23971
  server;
23984
23972
  constructor() {
23985
- this.server = new Server({ name: "harmony-mcp", version: "1.0.0" }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
23973
+ this.server = new Server({ name: "harmony-mcp", version: "1.0.0" }, { capabilities: { tools: {}, resources: {} } });
23986
23974
  this.setupHandlers();
23987
23975
  }
23988
23976
  setupHandlers() {
@@ -24030,58 +24018,6 @@ class HarmonyMCPServer {
24030
24018
  }
24031
24019
  throw new Error(`Unknown resource: ${uri}`);
24032
24020
  });
24033
- this.server.setRequestHandler(ListPromptsRequestSchema, async () => ({
24034
- prompts: Object.entries(PROMPTS).map(([name, prompt]) => ({
24035
- name,
24036
- description: prompt.description,
24037
- arguments: prompt.arguments
24038
- }))
24039
- }));
24040
- this.server.setRequestHandler(GetPromptRequestSchema, async (request) => {
24041
- const { name, arguments: args } = request.params;
24042
- if (name === "harmony_daily_standup") {
24043
- const projectId = args?.projectId || getActiveProjectId();
24044
- if (!projectId) {
24045
- return {
24046
- messages: [
24047
- {
24048
- role: "user",
24049
- content: { type: "text", text: "No project context. Please set a project first using harmony_set_project_context." }
24050
- }
24051
- ]
24052
- };
24053
- }
24054
- try {
24055
- const client2 = getClient();
24056
- const board = await client2.getBoard(projectId);
24057
- return {
24058
- messages: [
24059
- {
24060
- role: "user",
24061
- content: {
24062
- type: "text",
24063
- text: `Generate a daily standup summary for this Harmony project board:
24064
-
24065
- ${JSON.stringify(board, null, 2)}
24066
-
24067
- Include: cards moved recently, current in-progress items, blocked or high-priority items, and upcoming due dates.`
24068
- }
24069
- }
24070
- ]
24071
- };
24072
- } catch (error2) {
24073
- return {
24074
- messages: [
24075
- {
24076
- role: "user",
24077
- content: { type: "text", text: `Error: ${error2 instanceof Error ? error2.message : String(error2)}` }
24078
- }
24079
- ]
24080
- };
24081
- }
24082
- }
24083
- throw new Error(`Unknown prompt: ${name}`);
24084
- });
24085
24021
  }
24086
24022
  async handleToolCall(name, args) {
24087
24023
  if (!isConfigured()) {
package/dist/init.js CHANGED
@@ -106,6 +106,94 @@ If pausing: \`harmony_end_agent_session\` with \`status: "paused"\`
106
106
 
107
107
  **AI:** \`harmony_generate_prompt\`, \`harmony_process_command\`
108
108
  `;
109
+ var HARMONY_STANDUP_PROMPT = `# Harmony Daily Standup
110
+
111
+ Generate a daily standup summary for the current project.
112
+
113
+ ## 1. Get Board State
114
+
115
+ Call \`harmony_get_board\` to get the full board state including:
116
+ - All columns and their cards
117
+ - Card priorities, assignees, and due dates
118
+ - Active agent sessions
119
+
120
+ ## 2. Analyze Board
121
+
122
+ Organize the information into standup categories:
123
+
124
+ ### What was completed recently
125
+ - Cards in "Done" or "Review" columns
126
+ - Cards with recent activity (moved, updated)
127
+
128
+ ### What's in progress
129
+ - Cards in "In Progress" column
130
+ - Cards with active agent sessions (show progress %)
131
+ - Who's working on what
132
+
133
+ ### What's blocked or at risk
134
+ - High-priority cards not in progress
135
+ - Overdue cards
136
+ - Cards with blockers
137
+
138
+ ### What's coming up
139
+ - Cards in "To Do" column
140
+ - Upcoming due dates
141
+
142
+ ## 3. Present Summary
143
+
144
+ Format the summary as a clean, readable standup report:
145
+ - Use bullet points for easy scanning
146
+ - Highlight priorities and blockers
147
+ - Include card short IDs for easy reference (e.g., #42)
148
+ - Note any agent work in progress
149
+ `;
150
+ var HARMONY_CLEANUP_PROMPT = `# Harmony Board Cleanup
151
+
152
+ Analyze the board and suggest cleanup actions.
153
+
154
+ ## 1. Get Board State
155
+
156
+ Call \`harmony_get_board\` to get the full board state.
157
+
158
+ ## 2. Identify Issues
159
+
160
+ Look for:
161
+
162
+ ### Stale cards
163
+ - Cards in "In Progress" for too long without updates
164
+ - Cards with past due dates
165
+ - Cards with no recent activity
166
+
167
+ ### Organizational issues
168
+ - Cards missing priorities
169
+ - Cards missing assignees in active columns
170
+ - Empty descriptions on complex cards
171
+
172
+ ### Potential duplicates
173
+ - Cards with similar titles
174
+ - Use \`harmony_search_cards\` if needed to find related cards
175
+
176
+ ## 3. Suggest Actions
177
+
178
+ For each issue found, suggest a specific action:
179
+ - Move stale cards back to backlog
180
+ - Archive completed cards
181
+ - Update missing information
182
+ - Merge or link duplicates
183
+
184
+ Present suggestions as a prioritized list with:
185
+ - Card reference (#ID)
186
+ - Current state
187
+ - Suggested action
188
+ - Why it matters
189
+
190
+ ## 4. Optional: Execute Cleanup
191
+
192
+ If the user approves, execute the suggested actions:
193
+ - Use \`harmony_move_card\` to reorganize
194
+ - Use \`harmony_update_card\` to add missing info
195
+ - Use \`harmony_add_link_to_card\` to link related cards
196
+ `;
109
197
  function ensureDir(dirPath) {
110
198
  if (!existsSync(dirPath)) {
111
199
  mkdirSync(dirPath, { recursive: true });
@@ -164,6 +252,30 @@ ${HARMONY_WORKFLOW_PROMPT.replace("Your agent identifier", "claude-code").replac
164
252
  result.filesCreated.push(commandPath);
165
253
  if (skipped)
166
254
  result.filesSkipped.push(commandPath);
255
+ const standupContent = `---
256
+ description: Generate a daily standup summary for the current Harmony project
257
+ ---
258
+
259
+ ${HARMONY_STANDUP_PROMPT}
260
+ `;
261
+ const standupPath = join(cwd, ".claude", "commands", "hmy-standup.md");
262
+ const standupResult = writeFileIfNotExists(standupPath, standupContent, force);
263
+ if (standupResult.created)
264
+ result.filesCreated.push(standupPath);
265
+ if (standupResult.skipped)
266
+ result.filesSkipped.push(standupPath);
267
+ const cleanupContent = `---
268
+ description: Analyze the Harmony board and suggest cleanup actions for stale cards
269
+ ---
270
+
271
+ ${HARMONY_CLEANUP_PROMPT}
272
+ `;
273
+ const cleanupPath = join(cwd, ".claude", "commands", "hmy-cleanup.md");
274
+ const cleanupResult = writeFileIfNotExists(cleanupPath, cleanupContent, force);
275
+ if (cleanupResult.created)
276
+ result.filesCreated.push(cleanupPath);
277
+ if (cleanupResult.skipped)
278
+ result.filesSkipped.push(cleanupPath);
167
279
  const globalConfigPath = join(homedir(), ".claude", "settings.json");
168
280
  const mcpConfig = {
169
281
  mcpServers: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harmony-mcp",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "MCP server for Harmony Kanban board - enables AI coding agents to manage your boards",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -44,9 +44,11 @@
44
44
  "prepublishOnly": "bun run build"
45
45
  },
46
46
  "dependencies": {
47
+ "@clack/prompts": "^0.9.1",
47
48
  "@modelcontextprotocol/sdk": "^1.0.0",
48
49
  "commander": "^12.0.0",
49
50
  "hono": "^4.0.0",
51
+ "picocolors": "^1.1.1",
50
52
  "zod": "^3.23.0"
51
53
  },
52
54
  "devDependencies": {