harmony-mcp 1.0.3 → 1.0.4

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 CHANGED
@@ -24960,8 +24960,18 @@ class HarmonyApiClient {
24960
24960
  async listProjects(workspaceId) {
24961
24961
  return this.request("GET", `/workspaces/${workspaceId}/projects`);
24962
24962
  }
24963
- async getBoard(projectId) {
24964
- return this.request("GET", `/board/${projectId}`);
24963
+ async getBoard(projectId, options) {
24964
+ const params = new URLSearchParams;
24965
+ if (options?.limit !== undefined)
24966
+ params.set("limit", String(options.limit));
24967
+ if (options?.offset !== undefined)
24968
+ params.set("offset", String(options.offset));
24969
+ if (options?.columnId)
24970
+ params.set("column_id", options.columnId);
24971
+ if (options?.summary)
24972
+ params.set("summary", "true");
24973
+ const query = params.toString() ? `?${params.toString()}` : "";
24974
+ return this.request("GET", `/board/${projectId}${query}`);
24965
24975
  }
24966
24976
  async createCard(projectId, data) {
24967
24977
  return this.request("POST", "/cards", { projectId, ...data });
@@ -24978,6 +24988,9 @@ class HarmonyApiClient {
24978
24988
  async getCard(cardId) {
24979
24989
  return this.request("GET", `/cards/${cardId}`);
24980
24990
  }
24991
+ async getCardByShortId(projectId, shortId) {
24992
+ return this.request("GET", `/projects/${projectId}/cards/${shortId}`);
24993
+ }
24981
24994
  async searchCards(query, options) {
24982
24995
  const params = new URLSearchParams({ q: query });
24983
24996
  if (options?.projectId) {
@@ -25101,15 +25114,26 @@ var TOOLS = {
25101
25114
  }
25102
25115
  },
25103
25116
  harmony_get_card: {
25104
- description: "Get detailed information about a specific card",
25117
+ description: "Get detailed information about a specific card by UUID",
25105
25118
  inputSchema: {
25106
25119
  type: "object",
25107
25120
  properties: {
25108
- cardId: { type: "string", description: "Card ID" }
25121
+ cardId: { type: "string", description: "Card UUID" }
25109
25122
  },
25110
25123
  required: ["cardId"]
25111
25124
  }
25112
25125
  },
25126
+ harmony_get_card_by_short_id: {
25127
+ description: "Get a card by its short ID (e.g., #42) within a project",
25128
+ inputSchema: {
25129
+ type: "object",
25130
+ properties: {
25131
+ projectId: { type: "string", description: "Project ID (optional if context set)" },
25132
+ shortId: { type: "number", description: "Short ID number (e.g., 42 for card #42)" }
25133
+ },
25134
+ required: ["shortId"]
25135
+ }
25136
+ },
25113
25137
  harmony_create_column: {
25114
25138
  description: "Create a new column in a project",
25115
25139
  inputSchema: {
@@ -25224,11 +25248,15 @@ var TOOLS = {
25224
25248
  }
25225
25249
  },
25226
25250
  harmony_get_board: {
25227
- description: "Get the full board state (columns, cards, labels) for a project",
25251
+ description: "Get board state (columns, cards, labels). Use limit/offset for pagination on large boards. Use summary=true for just column counts without card details.",
25228
25252
  inputSchema: {
25229
25253
  type: "object",
25230
25254
  properties: {
25231
- projectId: { type: "string", description: "Project ID (optional if context set)" }
25255
+ projectId: { type: "string", description: "Project ID (optional if context set)" },
25256
+ limit: { type: "number", description: "Max cards to return (default: 50)" },
25257
+ offset: { type: "number", description: "Skip N cards for pagination (default: 0)" },
25258
+ columnId: { type: "string", description: "Filter cards by column ID" },
25259
+ summary: { type: "boolean", description: "Return only columns with card counts, no card details" }
25232
25260
  }
25233
25261
  }
25234
25262
  },
@@ -25481,6 +25509,12 @@ Include: cards moved recently, current in-progress items, blocked or high-priori
25481
25509
  const result = await client2.getCard(cardId);
25482
25510
  return { success: true, ...result };
25483
25511
  }
25512
+ case "harmony_get_card_by_short_id": {
25513
+ const shortId = exports_external.number().int().positive().parse(args.shortId);
25514
+ const projectId = args.projectId || getProjectId();
25515
+ const result = await client2.getCardByShortId(projectId, shortId);
25516
+ return { success: true, ...result };
25517
+ }
25484
25518
  case "harmony_create_column": {
25485
25519
  const name2 = exports_external.string().min(1).parse(args.name);
25486
25520
  const projectId = args.projectId || getProjectId();
@@ -25544,7 +25578,16 @@ Include: cards moved recently, current in-progress items, blocked or high-priori
25544
25578
  }
25545
25579
  case "harmony_get_board": {
25546
25580
  const projectId = getProjectId();
25547
- const result = await client2.getBoard(projectId);
25581
+ const options = {};
25582
+ if (args.limit !== undefined)
25583
+ options.limit = Number(args.limit);
25584
+ if (args.offset !== undefined)
25585
+ options.offset = Number(args.offset);
25586
+ if (args.columnId)
25587
+ options.columnId = String(args.columnId);
25588
+ if (args.summary === true || args.summary === "true")
25589
+ options.summary = true;
25590
+ const result = await client2.getBoard(projectId, options);
25548
25591
  return { success: true, board: result };
25549
25592
  }
25550
25593
  case "harmony_get_workspace_members": {
package/dist/index.js CHANGED
@@ -23102,8 +23102,18 @@ class HarmonyApiClient {
23102
23102
  async listProjects(workspaceId) {
23103
23103
  return this.request("GET", `/workspaces/${workspaceId}/projects`);
23104
23104
  }
23105
- async getBoard(projectId) {
23106
- return this.request("GET", `/board/${projectId}`);
23105
+ async getBoard(projectId, options) {
23106
+ const params = new URLSearchParams;
23107
+ if (options?.limit !== undefined)
23108
+ params.set("limit", String(options.limit));
23109
+ if (options?.offset !== undefined)
23110
+ params.set("offset", String(options.offset));
23111
+ if (options?.columnId)
23112
+ params.set("column_id", options.columnId);
23113
+ if (options?.summary)
23114
+ params.set("summary", "true");
23115
+ const query = params.toString() ? `?${params.toString()}` : "";
23116
+ return this.request("GET", `/board/${projectId}${query}`);
23107
23117
  }
23108
23118
  async createCard(projectId, data) {
23109
23119
  return this.request("POST", "/cards", { projectId, ...data });
@@ -23120,6 +23130,9 @@ class HarmonyApiClient {
23120
23130
  async getCard(cardId) {
23121
23131
  return this.request("GET", `/cards/${cardId}`);
23122
23132
  }
23133
+ async getCardByShortId(projectId, shortId) {
23134
+ return this.request("GET", `/projects/${projectId}/cards/${shortId}`);
23135
+ }
23123
23136
  async searchCards(query, options) {
23124
23137
  const params = new URLSearchParams({ q: query });
23125
23138
  if (options?.projectId) {
@@ -23243,15 +23256,26 @@ var TOOLS = {
23243
23256
  }
23244
23257
  },
23245
23258
  harmony_get_card: {
23246
- description: "Get detailed information about a specific card",
23259
+ description: "Get detailed information about a specific card by UUID",
23247
23260
  inputSchema: {
23248
23261
  type: "object",
23249
23262
  properties: {
23250
- cardId: { type: "string", description: "Card ID" }
23263
+ cardId: { type: "string", description: "Card UUID" }
23251
23264
  },
23252
23265
  required: ["cardId"]
23253
23266
  }
23254
23267
  },
23268
+ harmony_get_card_by_short_id: {
23269
+ description: "Get a card by its short ID (e.g., #42) within a project",
23270
+ inputSchema: {
23271
+ type: "object",
23272
+ properties: {
23273
+ projectId: { type: "string", description: "Project ID (optional if context set)" },
23274
+ shortId: { type: "number", description: "Short ID number (e.g., 42 for card #42)" }
23275
+ },
23276
+ required: ["shortId"]
23277
+ }
23278
+ },
23255
23279
  harmony_create_column: {
23256
23280
  description: "Create a new column in a project",
23257
23281
  inputSchema: {
@@ -23366,11 +23390,15 @@ var TOOLS = {
23366
23390
  }
23367
23391
  },
23368
23392
  harmony_get_board: {
23369
- description: "Get the full board state (columns, cards, labels) for a project",
23393
+ description: "Get board state (columns, cards, labels). Use limit/offset for pagination on large boards. Use summary=true for just column counts without card details.",
23370
23394
  inputSchema: {
23371
23395
  type: "object",
23372
23396
  properties: {
23373
- projectId: { type: "string", description: "Project ID (optional if context set)" }
23397
+ projectId: { type: "string", description: "Project ID (optional if context set)" },
23398
+ limit: { type: "number", description: "Max cards to return (default: 50)" },
23399
+ offset: { type: "number", description: "Skip N cards for pagination (default: 0)" },
23400
+ columnId: { type: "string", description: "Filter cards by column ID" },
23401
+ summary: { type: "boolean", description: "Return only columns with card counts, no card details" }
23374
23402
  }
23375
23403
  }
23376
23404
  },
@@ -23623,6 +23651,12 @@ Include: cards moved recently, current in-progress items, blocked or high-priori
23623
23651
  const result = await client2.getCard(cardId);
23624
23652
  return { success: true, ...result };
23625
23653
  }
23654
+ case "harmony_get_card_by_short_id": {
23655
+ const shortId = exports_external.number().int().positive().parse(args.shortId);
23656
+ const projectId = args.projectId || getProjectId();
23657
+ const result = await client2.getCardByShortId(projectId, shortId);
23658
+ return { success: true, ...result };
23659
+ }
23626
23660
  case "harmony_create_column": {
23627
23661
  const name2 = exports_external.string().min(1).parse(args.name);
23628
23662
  const projectId = args.projectId || getProjectId();
@@ -23686,7 +23720,16 @@ Include: cards moved recently, current in-progress items, blocked or high-priori
23686
23720
  }
23687
23721
  case "harmony_get_board": {
23688
23722
  const projectId = getProjectId();
23689
- const result = await client2.getBoard(projectId);
23723
+ const options = {};
23724
+ if (args.limit !== undefined)
23725
+ options.limit = Number(args.limit);
23726
+ if (args.offset !== undefined)
23727
+ options.offset = Number(args.offset);
23728
+ if (args.columnId)
23729
+ options.columnId = String(args.columnId);
23730
+ if (args.summary === true || args.summary === "true")
23731
+ options.summary = true;
23732
+ const result = await client2.getBoard(projectId, options);
23690
23733
  return { success: true, board: result };
23691
23734
  }
23692
23735
  case "harmony_get_workspace_members": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harmony-mcp",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "MCP server for Harmony Kanban board - enables Claude Code to manage your boards",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "repository": {
15
15
  "type": "git",
16
- "url": "https://github.com/nicholasgriffintn/harmony"
16
+ "url": "git+https://github.com/nicholasgriffintn/harmony.git"
17
17
  },
18
18
  "homepage": "https://gethmy.com",
19
19
  "bugs": {