@gethmy/mcp 2.20.0 → 2.20.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/cli.js +22 -6
- package/dist/index.js +3 -3
- package/package.json +1 -1
- package/src/server.ts +10 -5
- package/src/tui/setup.ts +19 -3
package/dist/cli.js
CHANGED
|
@@ -4190,7 +4190,7 @@ var TOOLS = {
|
|
|
4190
4190
|
}
|
|
4191
4191
|
},
|
|
4192
4192
|
harmony_upload: {
|
|
4193
|
-
description: 'Upload a file in one call. `target: "card_attachment"` attaches a file to a card ' + "(max 5MB; PNG/JPEG/GIF/WebP/HEIC/HEIF/PDF/DOC(X)/XLS(X)/TXT/CSV) — requires cardId. " + '`target: "artifact"` hosts a self-contained HTML doc (text/html, max 2MB) linked to ' + "exactly one of cardId/planId/workspaceId, rendered in-app in a sandboxed iframe. Provide " + "the bytes as `filePath` (local, direct-to-storage) or `base64Data` (small-file fallback). " + "Returns the attachment/artifact + a
|
|
4193
|
+
description: 'Upload a file in one call. `target: "card_attachment"` attaches a file to a card ' + "(max 5MB; PNG/JPEG/GIF/WebP/HEIC/HEIF/PDF/DOC(X)/XLS(X)/TXT/CSV) — requires cardId. " + '`target: "artifact"` hosts a self-contained HTML doc (text/html, max 2MB) linked to ' + "exactly one of cardId/planId/workspaceId, rendered in-app in a sandboxed iframe. Provide " + "the bytes as `filePath` (local, direct-to-storage) or `base64Data` (small-file fallback). " + "Returns the attachment/artifact. An artifact comes back with TWO URLs, and the difference " + "matters: `app_url` is the durable in-app permalink — this is the one to hand a person, it " + "never expires and requires them to log in as a workspace member — while `signed_url` only " + "renders the document in-app and dies within the hour, so never pass it on. To share with " + "someone OUTSIDE the workspace, mint a public link with harmony_share_artifact. Large files " + "on the hosted MCP server: use harmony_request_upload_url + harmony_finalize_upload instead.",
|
|
4194
4194
|
inputSchema: {
|
|
4195
4195
|
type: "object",
|
|
4196
4196
|
properties: {
|
|
@@ -4276,7 +4276,7 @@ var TOOLS = {
|
|
|
4276
4276
|
}
|
|
4277
4277
|
},
|
|
4278
4278
|
harmony_finalize_upload: {
|
|
4279
|
-
description: "Step 2 of the upload handshake. After PUTting the bytes to the signed uploadUrl, call this " + "with the storagePath to validate and register. The server re-downloads the object and " + "enforces size + content-type (magic-byte sniff, never the declared type) + an optional " + 'sha256 integrity check, deleting and failing on any mismatch. `target: "card_attachment"` ' + '(cardId, storagePath, fileName) or `target: "artifact"` (storagePath + the same one of ' + "cardId/planId/workspaceId used for the upload URL). Returns the attachment/artifact + a signed URL
|
|
4279
|
+
description: "Step 2 of the upload handshake. After PUTting the bytes to the signed uploadUrl, call this " + "with the storagePath to validate and register. The server re-downloads the object and " + "enforces size + content-type (magic-byte sniff, never the declared type) + an optional " + 'sha256 integrity check, deleting and failing on any mismatch. `target: "card_attachment"` ' + '(cardId, storagePath, fileName) or `target: "artifact"` (storagePath + the same one of ' + "cardId/planId/workspaceId used for the upload URL). Returns the attachment/artifact + a signed " + "URL; an artifact also carries `app_url`, the durable in-app permalink — hand that one to a " + "person, never the short-lived `signed_url`.",
|
|
4280
4280
|
inputSchema: {
|
|
4281
4281
|
type: "object",
|
|
4282
4282
|
properties: {
|
|
@@ -4330,7 +4330,7 @@ var TOOLS = {
|
|
|
4330
4330
|
}
|
|
4331
4331
|
},
|
|
4332
4332
|
harmony_share_artifact: {
|
|
4333
|
-
description: "Create a public, unauthenticated share link for a hosted artifact. Anyone with the link can view the rendered HTML without a Harmony account. Returns the share token and the full public URL.",
|
|
4333
|
+
description: "Create a public, unauthenticated share link for a hosted artifact. Anyone with the link can view the rendered HTML without a Harmony account. Returns the share token and the full public URL. Only needed for a recipient OUTSIDE the workspace — for a teammate, hand over the `app_url` the upload already returned instead of exposing the document publicly.",
|
|
4334
4334
|
inputSchema: {
|
|
4335
4335
|
type: "object",
|
|
4336
4336
|
properties: {
|
|
@@ -8546,14 +8546,29 @@ ${summary}`);
|
|
|
8546
8546
|
|
|
8547
8547
|
This project uses Harmony for task management. When working on tasks:
|
|
8548
8548
|
|
|
8549
|
+
## Agent identity — always identify as yourself
|
|
8550
|
+
|
|
8551
|
+
Every \`harmony_start_agent_session\` call passes \`agentIdentifier\` + \`agentName\`. **Use your own
|
|
8552
|
+
identity, never a hardcoded one from this file.** AGENTS.md is a cross-runtime convention file, so
|
|
8553
|
+
more than one kind of agent will read it; the board shows agents as teammates, and a session
|
|
8554
|
+
attributed to the wrong runtime misattributes the work in front of the whole team.
|
|
8555
|
+
|
|
8556
|
+
- \`agentIdentifier\` — a stable kebab-case id for the runtime you actually are
|
|
8557
|
+
- \`agentName\` — its human-readable name
|
|
8558
|
+
|
|
8559
|
+
Known values: \`claude-code\` / "Claude Code", \`codex\` / "OpenAI Codex", \`cursor\` / "Cursor",
|
|
8560
|
+
\`claude-desktop\` / "Claude Desktop". If you are a runtime not listed here, use your own name rather
|
|
8561
|
+
than borrowing the closest entry.
|
|
8562
|
+
|
|
8549
8563
|
## Starting Work on a Card
|
|
8550
8564
|
|
|
8551
8565
|
When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
8552
8566
|
|
|
8553
|
-
1. Use \`
|
|
8567
|
+
1. Use \`harmony_get_card\` or \`harmony_search_cards\` to find the card
|
|
8554
8568
|
2. Move the card to "In Progress" using \`harmony_move_card\`
|
|
8555
8569
|
3. Add the "agent" label using \`harmony_add_label_to_card\`
|
|
8556
|
-
4. Start a session with \`harmony_start_agent_session
|
|
8570
|
+
4. Start a session with \`harmony_start_agent_session\`, passing **your own** \`agentIdentifier\` +
|
|
8571
|
+
\`agentName\` (see "Agent identity" above)
|
|
8557
8572
|
5. Show the card details to the user
|
|
8558
8573
|
6. Use \`harmony_generate_prompt\` to get guidance, then implement the solution
|
|
8559
8574
|
7. Update progress periodically with \`harmony_update_agent_progress\`
|
|
@@ -8564,7 +8579,8 @@ When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
|
8564
8579
|
Before implementing a plan or feature, check if it maps to an existing Harmony card:
|
|
8565
8580
|
|
|
8566
8581
|
1. Use \`harmony_search_cards\` with keywords from the task description
|
|
8567
|
-
2. If a match is found, call \`harmony_start_agent_session\`
|
|
8582
|
+
2. If a match is found, call \`harmony_start_agent_session\` with **your own** \`agentIdentifier\` +
|
|
8583
|
+
\`agentName\` (see "Agent identity" above), plus \`moveToColumn: "In Progress"\`, \`addLabels: ["agent"]\`
|
|
8568
8584
|
3. Update progress with \`harmony_update_agent_progress\` at milestones
|
|
8569
8585
|
4. When done, call \`harmony_end_agent_session\` with status: "completed", moveToColumn: "Review"
|
|
8570
8586
|
|
package/dist/index.js
CHANGED
|
@@ -4185,7 +4185,7 @@ var TOOLS = {
|
|
|
4185
4185
|
}
|
|
4186
4186
|
},
|
|
4187
4187
|
harmony_upload: {
|
|
4188
|
-
description: 'Upload a file in one call. `target: "card_attachment"` attaches a file to a card ' + "(max 5MB; PNG/JPEG/GIF/WebP/HEIC/HEIF/PDF/DOC(X)/XLS(X)/TXT/CSV) — requires cardId. " + '`target: "artifact"` hosts a self-contained HTML doc (text/html, max 2MB) linked to ' + "exactly one of cardId/planId/workspaceId, rendered in-app in a sandboxed iframe. Provide " + "the bytes as `filePath` (local, direct-to-storage) or `base64Data` (small-file fallback). " + "Returns the attachment/artifact + a
|
|
4188
|
+
description: 'Upload a file in one call. `target: "card_attachment"` attaches a file to a card ' + "(max 5MB; PNG/JPEG/GIF/WebP/HEIC/HEIF/PDF/DOC(X)/XLS(X)/TXT/CSV) — requires cardId. " + '`target: "artifact"` hosts a self-contained HTML doc (text/html, max 2MB) linked to ' + "exactly one of cardId/planId/workspaceId, rendered in-app in a sandboxed iframe. Provide " + "the bytes as `filePath` (local, direct-to-storage) or `base64Data` (small-file fallback). " + "Returns the attachment/artifact. An artifact comes back with TWO URLs, and the difference " + "matters: `app_url` is the durable in-app permalink — this is the one to hand a person, it " + "never expires and requires them to log in as a workspace member — while `signed_url` only " + "renders the document in-app and dies within the hour, so never pass it on. To share with " + "someone OUTSIDE the workspace, mint a public link with harmony_share_artifact. Large files " + "on the hosted MCP server: use harmony_request_upload_url + harmony_finalize_upload instead.",
|
|
4189
4189
|
inputSchema: {
|
|
4190
4190
|
type: "object",
|
|
4191
4191
|
properties: {
|
|
@@ -4271,7 +4271,7 @@ var TOOLS = {
|
|
|
4271
4271
|
}
|
|
4272
4272
|
},
|
|
4273
4273
|
harmony_finalize_upload: {
|
|
4274
|
-
description: "Step 2 of the upload handshake. After PUTting the bytes to the signed uploadUrl, call this " + "with the storagePath to validate and register. The server re-downloads the object and " + "enforces size + content-type (magic-byte sniff, never the declared type) + an optional " + 'sha256 integrity check, deleting and failing on any mismatch. `target: "card_attachment"` ' + '(cardId, storagePath, fileName) or `target: "artifact"` (storagePath + the same one of ' + "cardId/planId/workspaceId used for the upload URL). Returns the attachment/artifact + a signed URL
|
|
4274
|
+
description: "Step 2 of the upload handshake. After PUTting the bytes to the signed uploadUrl, call this " + "with the storagePath to validate and register. The server re-downloads the object and " + "enforces size + content-type (magic-byte sniff, never the declared type) + an optional " + 'sha256 integrity check, deleting and failing on any mismatch. `target: "card_attachment"` ' + '(cardId, storagePath, fileName) or `target: "artifact"` (storagePath + the same one of ' + "cardId/planId/workspaceId used for the upload URL). Returns the attachment/artifact + a signed " + "URL; an artifact also carries `app_url`, the durable in-app permalink — hand that one to a " + "person, never the short-lived `signed_url`.",
|
|
4275
4275
|
inputSchema: {
|
|
4276
4276
|
type: "object",
|
|
4277
4277
|
properties: {
|
|
@@ -4325,7 +4325,7 @@ var TOOLS = {
|
|
|
4325
4325
|
}
|
|
4326
4326
|
},
|
|
4327
4327
|
harmony_share_artifact: {
|
|
4328
|
-
description: "Create a public, unauthenticated share link for a hosted artifact. Anyone with the link can view the rendered HTML without a Harmony account. Returns the share token and the full public URL.",
|
|
4328
|
+
description: "Create a public, unauthenticated share link for a hosted artifact. Anyone with the link can view the rendered HTML without a Harmony account. Returns the share token and the full public URL. Only needed for a recipient OUTSIDE the workspace — for a teammate, hand over the `app_url` the upload already returned instead of exposing the document publicly.",
|
|
4329
4329
|
inputSchema: {
|
|
4330
4330
|
type: "object",
|
|
4331
4331
|
properties: {
|
package/package.json
CHANGED
package/src/server.ts
CHANGED
|
@@ -1005,9 +1005,12 @@ export const TOOLS = {
|
|
|
1005
1005
|
'`target: "artifact"` hosts a self-contained HTML doc (text/html, max 2MB) linked to ' +
|
|
1006
1006
|
"exactly one of cardId/planId/workspaceId, rendered in-app in a sandboxed iframe. Provide " +
|
|
1007
1007
|
"the bytes as `filePath` (local, direct-to-storage) or `base64Data` (small-file fallback). " +
|
|
1008
|
-
"Returns the attachment/artifact
|
|
1009
|
-
"
|
|
1010
|
-
"
|
|
1008
|
+
"Returns the attachment/artifact. An artifact comes back with TWO URLs, and the difference " +
|
|
1009
|
+
"matters: `app_url` is the durable in-app permalink — this is the one to hand a person, it " +
|
|
1010
|
+
"never expires and requires them to log in as a workspace member — while `signed_url` only " +
|
|
1011
|
+
"renders the document in-app and dies within the hour, so never pass it on. To share with " +
|
|
1012
|
+
"someone OUTSIDE the workspace, mint a public link with harmony_share_artifact. Large files " +
|
|
1013
|
+
"on the hosted MCP server: use harmony_request_upload_url + harmony_finalize_upload instead.",
|
|
1011
1014
|
inputSchema: {
|
|
1012
1015
|
type: "object",
|
|
1013
1016
|
properties: {
|
|
@@ -1119,7 +1122,9 @@ export const TOOLS = {
|
|
|
1119
1122
|
"enforces size + content-type (magic-byte sniff, never the declared type) + an optional " +
|
|
1120
1123
|
'sha256 integrity check, deleting and failing on any mismatch. `target: "card_attachment"` ' +
|
|
1121
1124
|
'(cardId, storagePath, fileName) or `target: "artifact"` (storagePath + the same one of ' +
|
|
1122
|
-
"cardId/planId/workspaceId used for the upload URL). Returns the attachment/artifact + a signed
|
|
1125
|
+
"cardId/planId/workspaceId used for the upload URL). Returns the attachment/artifact + a signed " +
|
|
1126
|
+
"URL; an artifact also carries `app_url`, the durable in-app permalink — hand that one to a " +
|
|
1127
|
+
"person, never the short-lived `signed_url`.",
|
|
1123
1128
|
inputSchema: {
|
|
1124
1129
|
type: "object",
|
|
1125
1130
|
properties: {
|
|
@@ -1182,7 +1187,7 @@ export const TOOLS = {
|
|
|
1182
1187
|
},
|
|
1183
1188
|
harmony_share_artifact: {
|
|
1184
1189
|
description:
|
|
1185
|
-
"Create a public, unauthenticated share link for a hosted artifact. Anyone with the link can view the rendered HTML without a Harmony account. Returns the share token and the full public URL.",
|
|
1190
|
+
"Create a public, unauthenticated share link for a hosted artifact. Anyone with the link can view the rendered HTML without a Harmony account. Returns the share token and the full public URL. Only needed for a recipient OUTSIDE the workspace — for a teammate, hand over the `app_url` the upload already returned instead of exposing the document publicly.",
|
|
1186
1191
|
inputSchema: {
|
|
1187
1192
|
type: "object",
|
|
1188
1193
|
properties: {
|
package/src/tui/setup.ts
CHANGED
|
@@ -515,14 +515,29 @@ async function getAgentFiles(
|
|
|
515
515
|
|
|
516
516
|
This project uses Harmony for task management. When working on tasks:
|
|
517
517
|
|
|
518
|
+
## Agent identity — always identify as yourself
|
|
519
|
+
|
|
520
|
+
Every \`harmony_start_agent_session\` call passes \`agentIdentifier\` + \`agentName\`. **Use your own
|
|
521
|
+
identity, never a hardcoded one from this file.** AGENTS.md is a cross-runtime convention file, so
|
|
522
|
+
more than one kind of agent will read it; the board shows agents as teammates, and a session
|
|
523
|
+
attributed to the wrong runtime misattributes the work in front of the whole team.
|
|
524
|
+
|
|
525
|
+
- \`agentIdentifier\` — a stable kebab-case id for the runtime you actually are
|
|
526
|
+
- \`agentName\` — its human-readable name
|
|
527
|
+
|
|
528
|
+
Known values: \`claude-code\` / "Claude Code", \`codex\` / "OpenAI Codex", \`cursor\` / "Cursor",
|
|
529
|
+
\`claude-desktop\` / "Claude Desktop". If you are a runtime not listed here, use your own name rather
|
|
530
|
+
than borrowing the closest entry.
|
|
531
|
+
|
|
518
532
|
## Starting Work on a Card
|
|
519
533
|
|
|
520
534
|
When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
521
535
|
|
|
522
|
-
1. Use \`
|
|
536
|
+
1. Use \`harmony_get_card\` or \`harmony_search_cards\` to find the card
|
|
523
537
|
2. Move the card to "In Progress" using \`harmony_move_card\`
|
|
524
538
|
3. Add the "agent" label using \`harmony_add_label_to_card\`
|
|
525
|
-
4. Start a session with \`harmony_start_agent_session
|
|
539
|
+
4. Start a session with \`harmony_start_agent_session\`, passing **your own** \`agentIdentifier\` +
|
|
540
|
+
\`agentName\` (see "Agent identity" above)
|
|
526
541
|
5. Show the card details to the user
|
|
527
542
|
6. Use \`harmony_generate_prompt\` to get guidance, then implement the solution
|
|
528
543
|
7. Update progress periodically with \`harmony_update_agent_progress\`
|
|
@@ -533,7 +548,8 @@ When given a card reference (e.g., #42 or a card name), follow this workflow:
|
|
|
533
548
|
Before implementing a plan or feature, check if it maps to an existing Harmony card:
|
|
534
549
|
|
|
535
550
|
1. Use \`harmony_search_cards\` with keywords from the task description
|
|
536
|
-
2. If a match is found, call \`harmony_start_agent_session\`
|
|
551
|
+
2. If a match is found, call \`harmony_start_agent_session\` with **your own** \`agentIdentifier\` +
|
|
552
|
+
\`agentName\` (see "Agent identity" above), plus \`moveToColumn: "In Progress"\`, \`addLabels: ["agent"]\`
|
|
537
553
|
3. Update progress with \`harmony_update_agent_progress\` at milestones
|
|
538
554
|
4. When done, call \`harmony_end_agent_session\` with status: "completed", moveToColumn: "Review"
|
|
539
555
|
|