@mcp-abap-adt/calm-server 0.2.0 → 0.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/CHANGELOG.md CHANGED
@@ -1,5 +1,92 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0 — 2026-05-13
4
+
5
+ Follows `@mcp-abap-adt/calm-client@0.3.0` (issue / PR #3 / #4 there).
6
+ Closes a wider class of the same bug fixed in 0.2.1: every list
7
+ endpoint whose Spring controller takes `@RequestParam UUID projectId`
8
+ must carry `projectId` on the URL, not in OData `$filter`. After the
9
+ earlier deliverables/workstreams fix, two more came out the moment a
10
+ sandbox `projectId` became available: `listTasks` and `listFeatures`.
11
+
12
+ ### Changed (BREAKING for two tool input schemas)
13
+
14
+ - **`calm_features_get_by_display_id`** — `projectId` is now
15
+ `required`. The `getFeatureByDisplayId` endpoint delegates through
16
+ `listFeatures`, which now needs project scope; and the displayId
17
+ itself (`6-123`) is project-scoped anyway, so this matches the
18
+ underlying data model.
19
+
20
+ ### Fixed (internal, no schema impact)
21
+
22
+ - **`calm_tasks_list` / `calm_features_list`** — projectId is now
23
+ forwarded positionally to the calm-client (not stuffed into
24
+ `$filter`), aligning with the server's `?projectId=<uuid>` URL
25
+ contract.
26
+ - **`calm_tasks_list`** — Tasks service rejects every OData query
27
+ parameter (`$select`, `$top`, `$filter` all return 400 "not
28
+ supported yet") despite returning an OData-collection shape. The
29
+ tool now calls `calm.getTasks().list(projectId)` with no query and
30
+ performs status/assignee filtering and limit/offset pagination
31
+ locally. The `fields` arg is kept for API symmetry but accepted as
32
+ a downstream hint only — the full record comes back from the wire.
33
+
34
+ ### Updated
35
+
36
+ - Peer dependency `@mcp-abap-adt/calm-client` bumped `^0.2.0` →
37
+ `^0.3.0`. Required by the projectId-positional signatures on
38
+ `list` / `getByDisplayId`.
39
+
40
+ ### Discovery / debugging
41
+
42
+ - The bug was latent until a borrowed sandbox `projectId` (leaked
43
+ through a public `test_case.projectId`) activated the
44
+ `describeWithProject` integration gate. Five tests failed with the
45
+ same HTTP 400 root cause, plus two more Tasks-only "not supported
46
+ yet" 400s on `$select` / `$top`.
47
+ - The Tasks service's non-OData nature is now documented in the
48
+ source (and via this entry) — future tools targeting `/tasks/*`
49
+ should not assume OData semantics.
50
+
51
+ ### Tests
52
+
53
+ - Updated unit tests for `listFeatures` (URL-based projectId, no
54
+ `$filter` for it), `listTasks` (no OData query at all, client-side
55
+ filter), and `getByDisplayId` (projectId+displayId positional args).
56
+ - Integration sandbox suite now exercises five project-scoped reads
57
+ end-to-end against a borrowed projectId — 230 passed / 2 skipped
58
+ (oauth2 only) / 1 todo.
59
+
60
+ ## 0.2.1 — 2026-05-13
61
+
62
+ Same-day follow-up to 0.2.0: realigns two bonus tools with
63
+ `@mcp-abap-adt/calm-client@0.2.0`, which corrected its
64
+ `listDeliverables` / `listWorkstreams` signatures to require
65
+ `projectId` (see calm-client issue #1 / PR #2).
66
+
67
+ ### Changed (BREAKING for two tool input schemas)
68
+
69
+ - **`calm_tasks_list_deliverables`** — `projectId` is now `required`
70
+ in the input schema. The Tasks service exposes this endpoint with
71
+ `@RequestParam UUID projectId` and rejects calls without it; the
72
+ previous schema treated `projectId` as optional and emitted it as an
73
+ OData `$filter`, which the server ignored (sandbox returned 400,
74
+ live tenant would also 400).
75
+ - **`calm_tasks_list_workstreams`** — same change for symmetry and to
76
+ match the corrected client API. Sandbox happened to tolerate the
77
+ missing param and return an empty page, but a real tenant would 400.
78
+
79
+ ### Updated
80
+
81
+ - Peer dependency `@mcp-abap-adt/calm-client` bumped from `^0.1.0` to
82
+ `^0.2.0`. Required for the corrected method signatures.
83
+
84
+ ### Tests
85
+
86
+ - Unit tests for the two affected bonus tools rewritten to assert
87
+ `INVALID_ARGUMENT` without `projectId` and positional-`projectId`
88
+ forwarding to the client. 225 passed (was 224), 7 skipped, 1 todo.
89
+
3
90
  ## 0.2.0 — 2026-05-13
4
91
 
5
92
  Parity with the consetto-Rust port plus a wider bonus surface, live
@@ -8,7 +8,7 @@ const buildClient_1 = require("./buildClient");
8
8
  const config_1 = require("./config");
9
9
  const stderrLogger_1 = require("./stderrLogger");
10
10
  const PACKAGE_NAME = '@mcp-abap-adt/calm-server';
11
- const PACKAGE_VERSION = '0.2.0';
11
+ const PACKAGE_VERSION = '0.3.0';
12
12
  /**
13
13
  * Entry point for standalone stdio mode. Reads `.env` + env vars,
14
14
  * builds a `CalmClient`, wires all tool groups onto a
@@ -1,6 +1,7 @@
1
1
  import type { IFeature } from '@mcp-abap-adt/calm-client';
2
2
  import type { ICalmHandlerEntry } from '../../registry/types';
3
3
  export interface IGetFeatureByDisplayIdArgs {
4
+ projectId: string;
4
5
  displayId: string;
5
6
  }
6
7
  export declare const getFeatureByDisplayIdTool: ICalmHandlerEntry<IGetFeatureByDisplayIdArgs, IFeature>;
@@ -1 +1 @@
1
- {"version":3,"file":"getFeatureByDisplayId.d.ts","sourceRoot":"","sources":["../../../src/tools/features/getFeatureByDisplayId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAmCD,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CACvD,0BAA0B,EAC1B,QAAQ,CAIT,CAAC"}
1
+ {"version":3,"file":"getFeatureByDisplayId.d.ts","sourceRoot":"","sources":["../../../src/tools/features/getFeatureByDisplayId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAyCD,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CACvD,0BAA0B,EAC1B,QAAQ,CAIT,CAAC"}
@@ -4,11 +4,15 @@ exports.getFeatureByDisplayIdTool = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const definition = {
6
6
  name: 'calm_features_get_by_display_id',
7
- description: 'Fetch a Cloud ALM feature by its human-facing displayId (e.g. "6-123" where 6 is the project number and 123 is the feature sequence). Use when the user references features by display id rather than UUID. Returns the full feature record. Raises NOT_FOUND if no feature matches.',
7
+ description: 'Fetch a Cloud ALM feature by its human-facing displayId (e.g. "6-123" where 6 is the project sequence and 123 is the feature sequence). Requires `projectId` the underlying Features endpoint is project-scoped, and the displayId itself is unique only within a project. Returns the full feature record; raises NOT_FOUND if no feature matches inside that project.',
8
8
  inputSchema: {
9
9
  type: 'object',
10
- required: ['displayId'],
10
+ required: ['projectId', 'displayId'],
11
11
  properties: {
12
+ projectId: {
13
+ type: 'string',
14
+ description: 'Project id the feature belongs to.',
15
+ },
12
16
  displayId: {
13
17
  type: 'string',
14
18
  description: 'Feature displayId, e.g. "6-123".',
@@ -17,14 +21,16 @@ const definition = {
17
21
  },
18
22
  };
19
23
  const handler = async (ctx, args) => {
20
- if (!args?.displayId) {
24
+ if (!args?.projectId || !args?.displayId) {
21
25
  throw new utils_1.CalmToolError({
22
26
  code: 'INVALID_ARGUMENT',
23
- message: 'displayId is required',
27
+ message: 'projectId and displayId are required',
24
28
  });
25
29
  }
26
30
  try {
27
- return await ctx.calm.getFeatures().getByDisplayId(args.displayId);
31
+ return await ctx.calm
32
+ .getFeatures()
33
+ .getByDisplayId(args.projectId, args.displayId);
28
34
  }
29
35
  catch (err) {
30
36
  throw (0, utils_1.mapCalmErrorForTool)(err);
@@ -1 +1 @@
1
- {"version":3,"file":"getFeatureByDisplayId.js","sourceRoot":"","sources":["../../../src/tools/features/getFeatureByDisplayId.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,iCAAiC;IACvC,WAAW,EACT,sRAAsR;IACxR,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;SACF;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAA0D,KAAK,EAC1E,GAAG,EACH,IAAI,EACJ,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,yBAAyB,GAGlC;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"getFeatureByDisplayId.js","sourceRoot":"","sources":["../../../src/tools/features/getFeatureByDisplayId.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAOjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,iCAAiC;IACvC,WAAW,EACT,2WAA2W;IAC7W,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;QACpC,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;SACF;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAA0D,KAAK,EAC1E,GAAG,EACH,IAAI,EACJ,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,sCAAsC;SAChD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI;aAClB,WAAW,EAAE;aACb,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,yBAAyB,GAGlC;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"listFeatures.d.ts","sourceRoot":"","sources":["../../../src/tools/features/listFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAgBrB,QAAA,MAAM,cAAc,uMAgBV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA2GD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAC9C,iBAAiB,EACjB,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAIjC,CAAC"}
1
+ {"version":3,"file":"listFeatures.d.ts","sourceRoot":"","sources":["../../../src/tools/features/listFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAgBrB,QAAA,MAAM,cAAc,uMAgBV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA6GD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAC9C,iBAAiB,EACjB,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAIjC,CAAC"}
@@ -82,7 +82,10 @@ const definition = {
82
82
  function buildQuery(args) {
83
83
  const limit = (0, utils_1.clampListLimit)(args.limit);
84
84
  const offset = args.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
85
- const filter = (0, utils_1.joinAndFilters)(`projectId eq '${(0, utils_1.escapeODataString)(args.projectId)}'`, args.status
85
+ // projectId is now passed positionally to calm.getFeatures().list
86
+ // and ends up on the URL as ?projectId=…; it must NOT also appear
87
+ // in $filter.
88
+ const filter = (0, utils_1.joinAndFilters)(args.status
86
89
  ? `statusCode eq '${(0, utils_1.escapeODataString)(args.status)}'`
87
90
  : undefined, args.priorityCode
88
91
  ? `priorityCode eq '${(0, utils_1.escapeODataString)(args.priorityCode)}'`
@@ -109,7 +112,7 @@ const handler = async (ctx, args) => {
109
112
  }
110
113
  const { query, limit, offset } = buildQuery(args);
111
114
  try {
112
- const collection = await ctx.calm.getFeatures().list(query);
115
+ const collection = await ctx.calm.getFeatures().list(args.projectId, query);
113
116
  return (0, utils_1.toListResponse)(collection, { limit, offset });
114
117
  }
115
118
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"listFeatures.js","sourceRoot":"","sources":["../../../src/tools/features/listFeatures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listFeatures.js","sourceRoot":"","sources":["../../../src/tools/features/listFeatures.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { type IDeliverable } from '@mcp-abap-adt/calm-client';
2
2
  import type { ICalmHandlerEntry } from '../../registry/types';
3
3
  import { type IListResponse } from '../../utils';
4
4
  export interface IListDeliverablesArgs {
5
- projectId?: string;
5
+ projectId: string;
6
6
  limit?: number;
7
7
  offset?: number;
8
8
  withCount?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"listDeliverables.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listDeliverables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuCD,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,CAClD,qBAAqB,EACrB,aAAa,CAAC,YAAY,CAAC,CAI5B,CAAC"}
1
+ {"version":3,"file":"listDeliverables.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listDeliverables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAInB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA6CD,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,CAClD,qBAAqB,EACrB,aAAa,CAAC,YAAY,CAAC,CAI5B,CAAC"}
@@ -5,11 +5,15 @@ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
5
  const utils_1 = require("../../utils");
6
6
  const definition = {
7
7
  name: 'calm_tasks_list_deliverables',
8
- description: 'List Cloud ALM deliverables (the tracked work-product entities tasks can reference). Optionally scope to a project via `projectId`.',
8
+ description: 'List Cloud ALM deliverables (work-product entities tasks can reference) for a project. Requires `projectId` — the Tasks service exposes this endpoint with @RequestParam UUID projectId and rejects calls without it (sandbox behaviour was inconsistent before calm-client 0.2.0; live tenants always 400).',
9
9
  inputSchema: {
10
10
  type: 'object',
11
+ required: ['projectId'],
11
12
  properties: {
12
- projectId: { type: 'string', description: 'Optional project scope.' },
13
+ projectId: {
14
+ type: 'string',
15
+ description: 'Project id (required scope).',
16
+ },
13
17
  limit: { type: 'integer', minimum: 1, maximum: utils_1.MAX_LIST_LIMIT },
14
18
  offset: { type: 'integer', minimum: 0 },
15
19
  withCount: { type: 'boolean' },
@@ -17,18 +21,21 @@ const definition = {
17
21
  },
18
22
  };
19
23
  const handler = async (ctx, args) => {
20
- const limit = (0, utils_1.clampListLimit)(args?.limit);
21
- const offset = args?.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
22
- const filter = (0, utils_1.joinAndFilters)(args?.projectId
23
- ? `projectId eq '${(0, utils_1.escapeODataString)(args.projectId)}'`
24
- : undefined);
24
+ if (!args?.projectId) {
25
+ throw new utils_1.CalmToolError({
26
+ code: 'INVALID_ARGUMENT',
27
+ message: 'projectId is required',
28
+ });
29
+ }
30
+ const limit = (0, utils_1.clampListLimit)(args.limit);
31
+ const offset = args.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
25
32
  let query = calm_client_1.ODataQuery.new().top(limit).skip(offset);
26
- if (filter)
27
- query = query.filter(filter);
28
- if (args?.withCount)
33
+ if (args.withCount)
29
34
  query = query.count();
30
35
  try {
31
- const collection = await ctx.calm.getTasks().listDeliverables(query);
36
+ const collection = await ctx.calm
37
+ .getTasks()
38
+ .listDeliverables(args.projectId, query);
32
39
  return (0, utils_1.toListResponse)(collection, { limit, offset });
33
40
  }
34
41
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"listDeliverables.js","sourceRoot":"","sources":["../../../src/tools/tasks/listDeliverables.ts"],"names":[],"mappings":";;;AAAA,2DAA0E;AAM1E,uCAQqB;AASrB,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,qIAAqI;IACvI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;YACrE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAA,sBAAc,EAC3B,IAAI,EAAE,SAAS;QACb,CAAC,CAAC,iBAAiB,IAAA,yBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,GAAG;QACvD,CAAC,CAAC,SAAS,CACd,CAAC;IACF,IAAI,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE,SAAS;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrE,OAAO,IAAA,sBAAc,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAG7B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"listDeliverables.js","sourceRoot":"","sources":["../../../src/tools/tasks/listDeliverables.ts"],"names":[],"mappings":";;;AAAA,2DAA0E;AAM1E,uCAOqB;AASrB,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,8SAA8S;IAChT,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8BAA8B;aAC5C;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI;aAC9B,QAAQ,EAAE;aACV,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAA,sBAAc,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAG7B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"listTasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listTasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAYrB,QAAA,MAAM,cAAc,kOAiBV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA+DD,eAAO,MAAM,aAAa,EAAE,iBAAiB,CAC3C,cAAc,EACd,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAI9B,CAAC"}
1
+ {"version":3,"file":"listTasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listTasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAYrB,QAAA,MAAM,cAAc,kOAiBV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoED,eAAO,MAAM,aAAa,EAAE,iBAAiB,CAC3C,cAAc,EACd,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAI9B,CAAC"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.listTasksTool = void 0;
4
- const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
4
  const utils_1 = require("../../utils");
6
5
  const DEFAULT_FIELDS = [
7
6
  'id',
@@ -62,21 +61,26 @@ const handler = async (ctx, args) => {
62
61
  }
63
62
  const limit = (0, utils_1.clampListLimit)(args.limit);
64
63
  const offset = args.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
65
- const filter = (0, utils_1.joinAndFilters)(`projectId eq '${(0, utils_1.escapeODataString)(args.projectId)}'`, args.status ? `status eq '${(0, utils_1.escapeODataString)(args.status)}'` : undefined, args.assigneeId
66
- ? `assigneeId eq '${(0, utils_1.escapeODataString)(args.assigneeId)}'`
67
- : undefined);
68
- const fields = args.fields && args.fields.length > 0 ? args.fields : DEFAULT_FIELDS;
69
- let query = calm_client_1.ODataQuery.new()
70
- .select([...fields])
71
- .top(limit)
72
- .skip(offset);
73
- if (filter)
74
- query = query.filter(filter);
75
- if (args.withCount)
76
- query = query.count();
64
+ // The Tasks service controller does NOT accept OData query
65
+ // semantics `$select`, `$top`, and likely `$filter` all return
66
+ // 400 ("not supported yet"). It only honours `?projectId=<uuid>`
67
+ // on the URL. The full row set comes back; status/assignee
68
+ // filtering and pagination/limit happen client-side here.
69
+ const remoteFilters = {
70
+ status: args.status,
71
+ assigneeId: args.assigneeId,
72
+ };
77
73
  try {
78
- const collection = await ctx.calm.getTasks().list(query);
79
- return (0, utils_1.toListResponse)(collection, { limit, offset });
74
+ const collection = await ctx.calm.getTasks().list(args.projectId);
75
+ let all = (collection.value ?? []);
76
+ if (remoteFilters.status !== undefined) {
77
+ all = all.filter((t) => t.status === remoteFilters.status);
78
+ }
79
+ if (remoteFilters.assigneeId !== undefined) {
80
+ all = all.filter((t) => t.assigneeId === remoteFilters.assigneeId);
81
+ }
82
+ const paged = all.slice(offset, offset + limit);
83
+ return (0, utils_1.toListResponse)({ value: paged, '@odata.count': args.withCount ? all.length : undefined }, { limit, offset });
80
84
  }
81
85
  catch (err) {
82
86
  throw (0, utils_1.mapCalmErrorForTool)(err);
@@ -1 +1 @@
1
- {"version":3,"file":"listTasks.js","sourceRoot":"","sources":["../../../src/tools/tasks/listTasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listTasks.js","sourceRoot":"","sources":["../../../src/tools/tasks/listTasks.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { type IWorkstream } from '@mcp-abap-adt/calm-client';
2
2
  import type { ICalmHandlerEntry } from '../../registry/types';
3
3
  import { type IListResponse } from '../../utils';
4
4
  export interface IListWorkstreamsArgs {
5
- projectId?: string;
5
+ projectId: string;
6
6
  limit?: number;
7
7
  offset?: number;
8
8
  withCount?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"listWorkstreams.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listWorkstreams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuCD,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,CACjD,oBAAoB,EACpB,aAAa,CAAC,WAAW,CAAC,CAI3B,CAAC"}
1
+ {"version":3,"file":"listWorkstreams.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listWorkstreams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAInB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA6CD,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,CACjD,oBAAoB,EACpB,aAAa,CAAC,WAAW,CAAC,CAI3B,CAAC"}
@@ -5,11 +5,15 @@ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
5
  const utils_1 = require("../../utils");
6
6
  const definition = {
7
7
  name: 'calm_tasks_list_workstreams',
8
- description: 'List Cloud ALM workstreams (the workstream taxonomy tasks can be grouped under). Optionally scope to a project via `projectId`.',
8
+ description: 'List Cloud ALM workstreams (the grouping taxonomy tasks can be filed under) for a project. Requires `projectId` — same @RequestParam UUID contract as calm_tasks_list_deliverables.',
9
9
  inputSchema: {
10
10
  type: 'object',
11
+ required: ['projectId'],
11
12
  properties: {
12
- projectId: { type: 'string', description: 'Optional project scope.' },
13
+ projectId: {
14
+ type: 'string',
15
+ description: 'Project id (required scope).',
16
+ },
13
17
  limit: { type: 'integer', minimum: 1, maximum: utils_1.MAX_LIST_LIMIT },
14
18
  offset: { type: 'integer', minimum: 0 },
15
19
  withCount: { type: 'boolean' },
@@ -17,18 +21,21 @@ const definition = {
17
21
  },
18
22
  };
19
23
  const handler = async (ctx, args) => {
20
- const limit = (0, utils_1.clampListLimit)(args?.limit);
21
- const offset = args?.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
22
- const filter = (0, utils_1.joinAndFilters)(args?.projectId
23
- ? `projectId eq '${(0, utils_1.escapeODataString)(args.projectId)}'`
24
- : undefined);
24
+ if (!args?.projectId) {
25
+ throw new utils_1.CalmToolError({
26
+ code: 'INVALID_ARGUMENT',
27
+ message: 'projectId is required',
28
+ });
29
+ }
30
+ const limit = (0, utils_1.clampListLimit)(args.limit);
31
+ const offset = args.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
25
32
  let query = calm_client_1.ODataQuery.new().top(limit).skip(offset);
26
- if (filter)
27
- query = query.filter(filter);
28
- if (args?.withCount)
33
+ if (args.withCount)
29
34
  query = query.count();
30
35
  try {
31
- const collection = await ctx.calm.getTasks().listWorkstreams(query);
36
+ const collection = await ctx.calm
37
+ .getTasks()
38
+ .listWorkstreams(args.projectId, query);
32
39
  return (0, utils_1.toListResponse)(collection, { limit, offset });
33
40
  }
34
41
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"listWorkstreams.js","sourceRoot":"","sources":["../../../src/tools/tasks/listWorkstreams.ts"],"names":[],"mappings":";;;AAAA,2DAAyE;AAMzE,uCAQqB;AASrB,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,iIAAiI;IACnI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;YACrE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAA,sBAAc,EAC3B,IAAI,EAAE,SAAS;QACb,CAAC,CAAC,iBAAiB,IAAA,yBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,GAAG;QACvD,CAAC,CAAC,SAAS,CACd,CAAC;IACF,IAAI,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE,SAAS;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACpE,OAAO,IAAA,sBAAc,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,mBAAmB,GAG5B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"listWorkstreams.js","sourceRoot":"","sources":["../../../src/tools/tasks/listWorkstreams.ts"],"names":[],"mappings":";;;AAAA,2DAAyE;AAMzE,uCAOqB;AASrB,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,qLAAqL;IACvL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8BAA8B;aAC5C;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI;aAC9B,QAAQ,EAAE;aACV,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,IAAA,sBAAc,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,mBAAmB,GAG5B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/calm-server",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server + reusable tool primitives for SAP Cloud ALM, backed by @mcp-abap-adt/calm-client.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -63,7 +63,7 @@
63
63
  "tools"
64
64
  ],
65
65
  "peerDependencies": {
66
- "@mcp-abap-adt/calm-client": "^0.1.0",
66
+ "@mcp-abap-adt/calm-client": "^0.3.0",
67
67
  "@mcp-abap-adt/interfaces": "^7.1.0",
68
68
  "@modelcontextprotocol/sdk": "^1.0.0"
69
69
  },
@@ -72,7 +72,7 @@
72
72
  "@mcp-abap-adt/auth-broker": "^1.0.5",
73
73
  "@mcp-abap-adt/auth-providers": "^1.0.5",
74
74
  "@mcp-abap-adt/auth-stores": "^1.0.4",
75
- "@mcp-abap-adt/calm-client": "^0.1.0",
75
+ "@mcp-abap-adt/calm-client": "^0.3.0",
76
76
  "@mcp-abap-adt/interfaces": "^7.1.0",
77
77
  "@mcp-abap-adt/logger": "^0.1.4",
78
78
  "@modelcontextprotocol/sdk": "^1.0.0",