@codazen/harmonica-mcp 3.9.1 → 3.9.2

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.
Files changed (2) hide show
  1. package/dist/index.js +21 -11
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -26331,6 +26331,16 @@ var normalizeSystemId = (raw) => {
26331
26331
  if (!id) return raw;
26332
26332
  return { ...b, systemId: id };
26333
26333
  };
26334
+ var normalizeSystemIdAndTitle = (raw) => {
26335
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return raw;
26336
+ const b = raw;
26337
+ const id = b["systemId"] || b["projectId"];
26338
+ const title = b["systemTitle"] || b["projectTitle"];
26339
+ const result = { ...b };
26340
+ if (id) result["systemId"] = id;
26341
+ if (title) result["systemTitle"] = title;
26342
+ return result;
26343
+ };
26334
26344
  var BeatApiSchema = external_exports.preprocess(
26335
26345
  (raw) => {
26336
26346
  if (typeof raw !== "object" || raw === null) return raw;
@@ -27248,7 +27258,7 @@ var RevisionClaimsResponseSchema = external_exports.object({
27248
27258
  claims: external_exports.array(RevisionClaimSchema)
27249
27259
  }).passthrough();
27250
27260
  var ProposedRevisionSchema = external_exports.preprocess(
27251
- normalizeSystemId,
27261
+ normalizeSystemIdAndTitle,
27252
27262
  external_exports.object({
27253
27263
  revisionId: external_exports.string(),
27254
27264
  title: external_exports.string(),
@@ -27256,7 +27266,7 @@ var ProposedRevisionSchema = external_exports.preprocess(
27256
27266
  beatId: external_exports.string(),
27257
27267
  beatTitle: external_exports.string().optional(),
27258
27268
  systemId: external_exports.string(),
27259
- projectTitle: external_exports.string().optional()
27269
+ systemTitle: external_exports.string().optional()
27260
27270
  }).passthrough()
27261
27271
  );
27262
27272
  var ReleaseIntervalSchema = external_exports.object({
@@ -27265,7 +27275,7 @@ var ReleaseIntervalSchema = external_exports.object({
27265
27275
  isFallback: external_exports.boolean()
27266
27276
  }).passthrough();
27267
27277
  var EligibleBeatVersionForDropSchema = external_exports.preprocess(
27268
- normalizeSystemId,
27278
+ normalizeSystemIdAndTitle,
27269
27279
  external_exports.object({
27270
27280
  beatVersionId: external_exports.string(),
27271
27281
  title: external_exports.string(),
@@ -27273,7 +27283,7 @@ var EligibleBeatVersionForDropSchema = external_exports.preprocess(
27273
27283
  beatId: external_exports.string(),
27274
27284
  beatTitle: external_exports.string().optional(),
27275
27285
  systemId: external_exports.string(),
27276
- projectTitle: external_exports.string().optional(),
27286
+ systemTitle: external_exports.string().optional(),
27277
27287
  createdAt: external_exports.string(),
27278
27288
  updatedAt: external_exports.string(),
27279
27289
  humanAssignee: external_exports.object({ email: external_exports.string(), name: external_exports.string() }).optional(),
@@ -27627,7 +27637,7 @@ function registerNoteTools(server, ctx, client) {
27627
27637
  );
27628
27638
  server.tool(
27629
27639
  "list_org_notes",
27630
- "List Notes at the organization level (cross-cutting constraints, org-wide decisions, and context that applies to all projects). Filterable by type and status. Use offset/limit to paginate.",
27640
+ "List Notes at the organization level (cross-cutting constraints, org-wide decisions, and context that applies to all systems). Filterable by type and status. Use offset/limit to paginate.",
27631
27641
  {
27632
27642
  noteType: external_exports.enum(NOTE_TYPE_VALUES).optional().describe("Filter by note type"),
27633
27643
  status: external_exports.enum(NOTE_STATUS_VALUES).optional().describe("Filter by status"),
@@ -27653,7 +27663,7 @@ function registerNoteTools(server, ctx, client) {
27653
27663
  );
27654
27664
  server.tool(
27655
27665
  "list_movement_notes",
27656
- "List Notes scoped directly to a Movement (commercial SOW container) \u2014 engagement-level knowledge such as SOW constraints, scope boundaries, and commercial decisions. Not aggregated from projects. Filterable by type and status.",
27666
+ "List Notes scoped directly to a Movement (commercial SOW container) \u2014 engagement-level knowledge such as SOW constraints, scope boundaries, and commercial decisions. Not aggregated from systems. Filterable by type and status.",
27657
27667
  {
27658
27668
  movementId: external_exports.string().min(1).describe("The Movement ID"),
27659
27669
  noteType: external_exports.enum(NOTE_TYPE_VALUES).optional().describe("Filter by note type"),
@@ -28835,7 +28845,7 @@ Error: ${msg}`);
28835
28845
  } catch (err) {
28836
28846
  const msg = err instanceof Error ? err.message : String(err);
28837
28847
  lines.push(`
28838
- Projects created: ${createdProjects.length}`);
28848
+ Systems created: ${createdProjects.length}`);
28839
28849
  lines.unshift(`\u26A0\uFE0F Onboarding batch partially created \u2014 stopped at: system "${p.title}"
28840
28850
  Error: ${msg}`);
28841
28851
  return { content: [{ type: "text", text: lines.join("\n") }] };
@@ -28843,7 +28853,7 @@ Error: ${msg}`);
28843
28853
  }
28844
28854
  if (createdProjects.length > 0) {
28845
28855
  lines.push(`
28846
- Projects (${createdProjects.length}):`);
28856
+ Systems (${createdProjects.length}):`);
28847
28857
  for (const p of createdProjects) lines.push(` [${p.systemId}] ${p.title}`);
28848
28858
  }
28849
28859
  const createdNotes = [];
@@ -31092,10 +31102,10 @@ function registerTeamspaceTools(server, ctx, client) {
31092
31102
  `Created: ${ts.createdAt}`
31093
31103
  ];
31094
31104
  if (tsProjects.length > 0) {
31095
- lines.push("", `Projects (${tsProjects.length}):`);
31105
+ lines.push("", `Systems (${tsProjects.length}):`);
31096
31106
  for (const p of tsProjects) lines.push(` [${p.systemId}] ${p.title} \u2014 ${p.status ?? "unknown"}`);
31097
31107
  } else {
31098
- lines.push("Projects: (none)");
31108
+ lines.push("Systems: (none)");
31099
31109
  }
31100
31110
  if (ts.ensemble && ts.ensemble.length > 0) {
31101
31111
  lines.push("", "Ensemble:");
@@ -34912,7 +34922,7 @@ function loadConfig() {
34912
34922
  };
34913
34923
  }
34914
34924
  async function main() {
34915
- console.error(`[harmonica-mcp] v${"3.9.1"} starting\u2026`);
34925
+ console.error(`[harmonica-mcp] v${"3.9.2"} starting\u2026`);
34916
34926
  const config2 = loadConfig();
34917
34927
  const client = createHttpClient({
34918
34928
  apiBaseUrl: config2.apiBaseUrl,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codazen/harmonica-mcp",
3
- "version": "3.9.1",
3
+ "version": "3.9.2",
4
4
  "description": "MCP server for Harmonica — connect any MCP-compatible AI assistant to Harmonica",
5
5
  "license": "MIT",
6
6
  "bin": {