@bicon/mcp-composer 0.6.0 → 0.7.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.
Files changed (2) hide show
  1. package/dist/index.mjs +147 -5
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -12,7 +12,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
12
12
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
13
 
14
14
  // src/version.ts
15
- var COMPOSER_VERSION = true ? "0.6.0" : readPackageVersion();
15
+ var COMPOSER_VERSION = true ? "0.7.0" : readPackageVersion();
16
16
 
17
17
  // ../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
18
18
  var external_exports = {};
@@ -4170,7 +4170,7 @@ var ListOrganizationMembersResponseItem = objectType({
4170
4170
  "email": stringType(),
4171
4171
  "displayName": stringType().nullable(),
4172
4172
  "role": enumType(["admin", "member", "viewer"]),
4173
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks.")
4173
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups.")
4174
4174
  });
4175
4175
  var ListOrganizationMembersResponse = arrayType(ListOrganizationMembersResponseItem);
4176
4176
  var SyncOrganizationMembersResponse = objectType({
@@ -4180,18 +4180,23 @@ var SyncOrganizationMembersResponse = objectType({
4180
4180
  var GetMyOrganizationAccessResponse = objectType({
4181
4181
  "userId": stringType().describe(`The caller's own local user id (matches AuthorRef.userId on initiatives), so the client can tell its own changes apart from a teammate's \u2014 e.g. to suppress the "updated by X" collaboration banner when an edit echoing back is the caller's own save.`),
4182
4182
  "role": enumType(["admin", "member", "viewer"]),
4183
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks."),
4183
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups."),
4184
4184
  "initiativeLimit": numberType().describe("The most initiatives this organisation may hold, archived ones included. Creating one more answers 507 with code initiative_limit_reached, so the client blocks New, Duplicate and Import up front.")
4185
4185
  });
4186
+ var ListOrganizationDirectoryResponseItem = objectType({
4187
+ "userId": stringType().uuid(),
4188
+ "name": stringType()
4189
+ });
4190
+ var ListOrganizationDirectoryResponse = arrayType(ListOrganizationDirectoryResponseItem);
4186
4191
  var UpdateOrganizationMemberPermissionsParams = objectType({
4187
4192
  "userId": coerce.string().uuid()
4188
4193
  });
4189
4194
  var UpdateOrganizationMemberPermissionsBody = objectType({
4190
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks.")
4195
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups.")
4191
4196
  });
4192
4197
  var UpdateOrganizationMemberPermissionsResponse = objectType({
4193
4198
  "userId": stringType().uuid(),
4194
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks.")
4199
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups.")
4195
4200
  });
4196
4201
  var ListPermissionProfilesResponseItem = objectType({
4197
4202
  "id": stringType().uuid(),
@@ -4298,6 +4303,12 @@ var listSnapshotsResponseInitiativesItemRisksItemReviewDateRegExp = new RegExp("
4298
4303
  var listSnapshotsResponseInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4299
4304
  var listSnapshotsResponseInitiativesItemRisksItemNoteMax = 1e4;
4300
4305
  var listSnapshotsResponseInitiativesItemRisksMax = 50;
4306
+ var listSnapshotsResponseInitiativesItemFollowUpsItemTitleMax = 300;
4307
+ var listSnapshotsResponseInitiativesItemFollowUpsItemAssigneeNameMax = 300;
4308
+ var listSnapshotsResponseInitiativesItemFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4309
+ var listSnapshotsResponseInitiativesItemFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4310
+ var listSnapshotsResponseInitiativesItemFollowUpsItemNoteMax = 1e4;
4311
+ var listSnapshotsResponseInitiativesItemFollowUpsMax = 50;
4301
4312
  var listSnapshotsResponseInitiativesItemDependsOnMax = 1e3;
4302
4313
  var listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
4303
4314
  var listSnapshotsResponseInitiativesItemRequiredSkillsMax = 1e3;
@@ -4523,6 +4534,17 @@ var ListSnapshotsResponseItem = objectType({
4523
4534
  "occurredDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemOccurredDateRegExp).optional(),
4524
4535
  "note": stringType().max(listSnapshotsResponseInitiativesItemRisksItemNoteMax).optional()
4525
4536
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(listSnapshotsResponseInitiativesItemRisksMax).optional(),
4537
+ "followUps": arrayType(objectType({
4538
+ "id": stringType(),
4539
+ "title": stringType().min(1).max(listSnapshotsResponseInitiativesItemFollowUpsItemTitleMax),
4540
+ "assigneeUserId": stringType().uuid().optional(),
4541
+ "assigneeName": stringType().max(listSnapshotsResponseInitiativesItemFollowUpsItemAssigneeNameMax).optional(),
4542
+ "dueDate": stringType().regex(listSnapshotsResponseInitiativesItemFollowUpsItemDueDateRegExp),
4543
+ "doneDate": stringType().regex(listSnapshotsResponseInitiativesItemFollowUpsItemDoneDateRegExp).optional(),
4544
+ "milestoneId": stringType().optional(),
4545
+ "riskId": stringType().optional(),
4546
+ "note": stringType().max(listSnapshotsResponseInitiativesItemFollowUpsItemNoteMax).optional()
4547
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(listSnapshotsResponseInitiativesItemFollowUpsMax).optional(),
4526
4548
  "dependsOn": arrayType(stringType()).max(listSnapshotsResponseInitiativesItemDependsOnMax),
4527
4549
  "requiredSkills": arrayType(objectType({
4528
4550
  "skillId": stringType(),
@@ -4678,6 +4700,12 @@ var createSnapshotBodyInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\
4678
4700
  var createSnapshotBodyInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4679
4701
  var createSnapshotBodyInitiativesItemRisksItemNoteMax = 1e4;
4680
4702
  var createSnapshotBodyInitiativesItemRisksMax = 50;
4703
+ var createSnapshotBodyInitiativesItemFollowUpsItemTitleMax = 300;
4704
+ var createSnapshotBodyInitiativesItemFollowUpsItemAssigneeNameMax = 300;
4705
+ var createSnapshotBodyInitiativesItemFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4706
+ var createSnapshotBodyInitiativesItemFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4707
+ var createSnapshotBodyInitiativesItemFollowUpsItemNoteMax = 1e4;
4708
+ var createSnapshotBodyInitiativesItemFollowUpsMax = 50;
4681
4709
  var createSnapshotBodyInitiativesItemDependsOnMax = 1e3;
4682
4710
  var createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin = 0;
4683
4711
  var createSnapshotBodyInitiativesItemRequiredSkillsMax = 1e3;
@@ -4903,6 +4931,17 @@ var CreateSnapshotBody = objectType({
4903
4931
  "occurredDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemOccurredDateRegExp).optional(),
4904
4932
  "note": stringType().max(createSnapshotBodyInitiativesItemRisksItemNoteMax).optional()
4905
4933
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(createSnapshotBodyInitiativesItemRisksMax).optional(),
4934
+ "followUps": arrayType(objectType({
4935
+ "id": stringType(),
4936
+ "title": stringType().min(1).max(createSnapshotBodyInitiativesItemFollowUpsItemTitleMax),
4937
+ "assigneeUserId": stringType().uuid().optional(),
4938
+ "assigneeName": stringType().max(createSnapshotBodyInitiativesItemFollowUpsItemAssigneeNameMax).optional(),
4939
+ "dueDate": stringType().regex(createSnapshotBodyInitiativesItemFollowUpsItemDueDateRegExp),
4940
+ "doneDate": stringType().regex(createSnapshotBodyInitiativesItemFollowUpsItemDoneDateRegExp).optional(),
4941
+ "milestoneId": stringType().optional(),
4942
+ "riskId": stringType().optional(),
4943
+ "note": stringType().max(createSnapshotBodyInitiativesItemFollowUpsItemNoteMax).optional()
4944
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(createSnapshotBodyInitiativesItemFollowUpsMax).optional(),
4906
4945
  "dependsOn": arrayType(stringType()).max(createSnapshotBodyInitiativesItemDependsOnMax),
4907
4946
  "requiredSkills": arrayType(objectType({
4908
4947
  "skillId": stringType(),
@@ -5064,6 +5103,12 @@ var renameSnapshotResponseInitiativesItemRisksItemReviewDateRegExp = new RegExp(
5064
5103
  var renameSnapshotResponseInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5065
5104
  var renameSnapshotResponseInitiativesItemRisksItemNoteMax = 1e4;
5066
5105
  var renameSnapshotResponseInitiativesItemRisksMax = 50;
5106
+ var renameSnapshotResponseInitiativesItemFollowUpsItemTitleMax = 300;
5107
+ var renameSnapshotResponseInitiativesItemFollowUpsItemAssigneeNameMax = 300;
5108
+ var renameSnapshotResponseInitiativesItemFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5109
+ var renameSnapshotResponseInitiativesItemFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5110
+ var renameSnapshotResponseInitiativesItemFollowUpsItemNoteMax = 1e4;
5111
+ var renameSnapshotResponseInitiativesItemFollowUpsMax = 50;
5067
5112
  var renameSnapshotResponseInitiativesItemDependsOnMax = 1e3;
5068
5113
  var renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
5069
5114
  var renameSnapshotResponseInitiativesItemRequiredSkillsMax = 1e3;
@@ -5289,6 +5334,17 @@ var RenameSnapshotResponse = objectType({
5289
5334
  "occurredDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemOccurredDateRegExp).optional(),
5290
5335
  "note": stringType().max(renameSnapshotResponseInitiativesItemRisksItemNoteMax).optional()
5291
5336
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(renameSnapshotResponseInitiativesItemRisksMax).optional(),
5337
+ "followUps": arrayType(objectType({
5338
+ "id": stringType(),
5339
+ "title": stringType().min(1).max(renameSnapshotResponseInitiativesItemFollowUpsItemTitleMax),
5340
+ "assigneeUserId": stringType().uuid().optional(),
5341
+ "assigneeName": stringType().max(renameSnapshotResponseInitiativesItemFollowUpsItemAssigneeNameMax).optional(),
5342
+ "dueDate": stringType().regex(renameSnapshotResponseInitiativesItemFollowUpsItemDueDateRegExp),
5343
+ "doneDate": stringType().regex(renameSnapshotResponseInitiativesItemFollowUpsItemDoneDateRegExp).optional(),
5344
+ "milestoneId": stringType().optional(),
5345
+ "riskId": stringType().optional(),
5346
+ "note": stringType().max(renameSnapshotResponseInitiativesItemFollowUpsItemNoteMax).optional()
5347
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(renameSnapshotResponseInitiativesItemFollowUpsMax).optional(),
5292
5348
  "dependsOn": arrayType(stringType()).max(renameSnapshotResponseInitiativesItemDependsOnMax),
5293
5349
  "requiredSkills": arrayType(objectType({
5294
5350
  "skillId": stringType(),
@@ -5445,6 +5501,12 @@ var listInitiativesResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2
5445
5501
  var listInitiativesResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5446
5502
  var listInitiativesResponseRisksItemNoteMax = 1e4;
5447
5503
  var listInitiativesResponseRisksMax = 50;
5504
+ var listInitiativesResponseFollowUpsItemTitleMax = 300;
5505
+ var listInitiativesResponseFollowUpsItemAssigneeNameMax = 300;
5506
+ var listInitiativesResponseFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5507
+ var listInitiativesResponseFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5508
+ var listInitiativesResponseFollowUpsItemNoteMax = 1e4;
5509
+ var listInitiativesResponseFollowUpsMax = 50;
5448
5510
  var listInitiativesResponseDependsOnMax = 1e3;
5449
5511
  var listInitiativesResponseRequiredSkillsItemRunFteMin = 0;
5450
5512
  var listInitiativesResponseRequiredSkillsMax = 1e3;
@@ -5664,6 +5726,17 @@ var ListInitiativesResponseItem = objectType({
5664
5726
  "occurredDate": stringType().regex(listInitiativesResponseRisksItemOccurredDateRegExp).optional(),
5665
5727
  "note": stringType().max(listInitiativesResponseRisksItemNoteMax).optional()
5666
5728
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(listInitiativesResponseRisksMax).optional(),
5729
+ "followUps": arrayType(objectType({
5730
+ "id": stringType(),
5731
+ "title": stringType().min(1).max(listInitiativesResponseFollowUpsItemTitleMax),
5732
+ "assigneeUserId": stringType().uuid().optional(),
5733
+ "assigneeName": stringType().max(listInitiativesResponseFollowUpsItemAssigneeNameMax).optional(),
5734
+ "dueDate": stringType().regex(listInitiativesResponseFollowUpsItemDueDateRegExp),
5735
+ "doneDate": stringType().regex(listInitiativesResponseFollowUpsItemDoneDateRegExp).optional(),
5736
+ "milestoneId": stringType().optional(),
5737
+ "riskId": stringType().optional(),
5738
+ "note": stringType().max(listInitiativesResponseFollowUpsItemNoteMax).optional()
5739
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(listInitiativesResponseFollowUpsMax).optional(),
5667
5740
  "dependsOn": arrayType(stringType()).max(listInitiativesResponseDependsOnMax),
5668
5741
  "requiredSkills": arrayType(objectType({
5669
5742
  "skillId": stringType(),
@@ -5816,6 +5889,12 @@ var createInitiativeBodyOneRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2
5816
5889
  var createInitiativeBodyOneRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5817
5890
  var createInitiativeBodyOneRisksItemNoteMax = 1e4;
5818
5891
  var createInitiativeBodyOneRisksMax = 50;
5892
+ var createInitiativeBodyOneFollowUpsItemTitleMax = 300;
5893
+ var createInitiativeBodyOneFollowUpsItemAssigneeNameMax = 300;
5894
+ var createInitiativeBodyOneFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5895
+ var createInitiativeBodyOneFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5896
+ var createInitiativeBodyOneFollowUpsItemNoteMax = 1e4;
5897
+ var createInitiativeBodyOneFollowUpsMax = 50;
5819
5898
  var createInitiativeBodyOneDependsOnMax = 1e3;
5820
5899
  var createInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
5821
5900
  var createInitiativeBodyOneRequiredSkillsMax = 1e3;
@@ -6035,6 +6114,17 @@ var CreateInitiativeBody = objectType({
6035
6114
  "occurredDate": stringType().regex(createInitiativeBodyOneRisksItemOccurredDateRegExp).optional(),
6036
6115
  "note": stringType().max(createInitiativeBodyOneRisksItemNoteMax).optional()
6037
6116
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(createInitiativeBodyOneRisksMax).optional(),
6117
+ "followUps": arrayType(objectType({
6118
+ "id": stringType(),
6119
+ "title": stringType().min(1).max(createInitiativeBodyOneFollowUpsItemTitleMax),
6120
+ "assigneeUserId": stringType().uuid().optional(),
6121
+ "assigneeName": stringType().max(createInitiativeBodyOneFollowUpsItemAssigneeNameMax).optional(),
6122
+ "dueDate": stringType().regex(createInitiativeBodyOneFollowUpsItemDueDateRegExp),
6123
+ "doneDate": stringType().regex(createInitiativeBodyOneFollowUpsItemDoneDateRegExp).optional(),
6124
+ "milestoneId": stringType().optional(),
6125
+ "riskId": stringType().optional(),
6126
+ "note": stringType().max(createInitiativeBodyOneFollowUpsItemNoteMax).optional()
6127
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(createInitiativeBodyOneFollowUpsMax).optional(),
6038
6128
  "dependsOn": arrayType(stringType()).max(createInitiativeBodyOneDependsOnMax),
6039
6129
  "requiredSkills": arrayType(objectType({
6040
6130
  "skillId": stringType(),
@@ -6197,6 +6287,12 @@ var getInitiativeResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-
6197
6287
  var getInitiativeResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6198
6288
  var getInitiativeResponseRisksItemNoteMax = 1e4;
6199
6289
  var getInitiativeResponseRisksMax = 50;
6290
+ var getInitiativeResponseFollowUpsItemTitleMax = 300;
6291
+ var getInitiativeResponseFollowUpsItemAssigneeNameMax = 300;
6292
+ var getInitiativeResponseFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6293
+ var getInitiativeResponseFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6294
+ var getInitiativeResponseFollowUpsItemNoteMax = 1e4;
6295
+ var getInitiativeResponseFollowUpsMax = 50;
6200
6296
  var getInitiativeResponseDependsOnMax = 1e3;
6201
6297
  var getInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6202
6298
  var getInitiativeResponseRequiredSkillsMax = 1e3;
@@ -6416,6 +6512,17 @@ var GetInitiativeResponse = objectType({
6416
6512
  "occurredDate": stringType().regex(getInitiativeResponseRisksItemOccurredDateRegExp).optional(),
6417
6513
  "note": stringType().max(getInitiativeResponseRisksItemNoteMax).optional()
6418
6514
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(getInitiativeResponseRisksMax).optional(),
6515
+ "followUps": arrayType(objectType({
6516
+ "id": stringType(),
6517
+ "title": stringType().min(1).max(getInitiativeResponseFollowUpsItemTitleMax),
6518
+ "assigneeUserId": stringType().uuid().optional(),
6519
+ "assigneeName": stringType().max(getInitiativeResponseFollowUpsItemAssigneeNameMax).optional(),
6520
+ "dueDate": stringType().regex(getInitiativeResponseFollowUpsItemDueDateRegExp),
6521
+ "doneDate": stringType().regex(getInitiativeResponseFollowUpsItemDoneDateRegExp).optional(),
6522
+ "milestoneId": stringType().optional(),
6523
+ "riskId": stringType().optional(),
6524
+ "note": stringType().max(getInitiativeResponseFollowUpsItemNoteMax).optional()
6525
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(getInitiativeResponseFollowUpsMax).optional(),
6419
6526
  "dependsOn": arrayType(stringType()).max(getInitiativeResponseDependsOnMax),
6420
6527
  "requiredSkills": arrayType(objectType({
6421
6528
  "skillId": stringType(),
@@ -6570,6 +6677,12 @@ var updateInitiativeBodyOneRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2
6570
6677
  var updateInitiativeBodyOneRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6571
6678
  var updateInitiativeBodyOneRisksItemNoteMax = 1e4;
6572
6679
  var updateInitiativeBodyOneRisksMax = 50;
6680
+ var updateInitiativeBodyOneFollowUpsItemTitleMax = 300;
6681
+ var updateInitiativeBodyOneFollowUpsItemAssigneeNameMax = 300;
6682
+ var updateInitiativeBodyOneFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6683
+ var updateInitiativeBodyOneFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6684
+ var updateInitiativeBodyOneFollowUpsItemNoteMax = 1e4;
6685
+ var updateInitiativeBodyOneFollowUpsMax = 50;
6573
6686
  var updateInitiativeBodyOneDependsOnMax = 1e3;
6574
6687
  var updateInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
6575
6688
  var updateInitiativeBodyOneRequiredSkillsMax = 1e3;
@@ -6789,6 +6902,17 @@ var UpdateInitiativeBody = objectType({
6789
6902
  "occurredDate": stringType().regex(updateInitiativeBodyOneRisksItemOccurredDateRegExp).optional(),
6790
6903
  "note": stringType().max(updateInitiativeBodyOneRisksItemNoteMax).optional()
6791
6904
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(updateInitiativeBodyOneRisksMax).optional(),
6905
+ "followUps": arrayType(objectType({
6906
+ "id": stringType(),
6907
+ "title": stringType().min(1).max(updateInitiativeBodyOneFollowUpsItemTitleMax),
6908
+ "assigneeUserId": stringType().uuid().optional(),
6909
+ "assigneeName": stringType().max(updateInitiativeBodyOneFollowUpsItemAssigneeNameMax).optional(),
6910
+ "dueDate": stringType().regex(updateInitiativeBodyOneFollowUpsItemDueDateRegExp),
6911
+ "doneDate": stringType().regex(updateInitiativeBodyOneFollowUpsItemDoneDateRegExp).optional(),
6912
+ "milestoneId": stringType().optional(),
6913
+ "riskId": stringType().optional(),
6914
+ "note": stringType().max(updateInitiativeBodyOneFollowUpsItemNoteMax).optional()
6915
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(updateInitiativeBodyOneFollowUpsMax).optional(),
6792
6916
  "dependsOn": arrayType(stringType()).max(updateInitiativeBodyOneDependsOnMax),
6793
6917
  "requiredSkills": arrayType(objectType({
6794
6918
  "skillId": stringType(),
@@ -6948,6 +7072,12 @@ var updateInitiativeResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{
6948
7072
  var updateInitiativeResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6949
7073
  var updateInitiativeResponseRisksItemNoteMax = 1e4;
6950
7074
  var updateInitiativeResponseRisksMax = 50;
7075
+ var updateInitiativeResponseFollowUpsItemTitleMax = 300;
7076
+ var updateInitiativeResponseFollowUpsItemAssigneeNameMax = 300;
7077
+ var updateInitiativeResponseFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7078
+ var updateInitiativeResponseFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7079
+ var updateInitiativeResponseFollowUpsItemNoteMax = 1e4;
7080
+ var updateInitiativeResponseFollowUpsMax = 50;
6951
7081
  var updateInitiativeResponseDependsOnMax = 1e3;
6952
7082
  var updateInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6953
7083
  var updateInitiativeResponseRequiredSkillsMax = 1e3;
@@ -7167,6 +7297,17 @@ var UpdateInitiativeResponse = objectType({
7167
7297
  "occurredDate": stringType().regex(updateInitiativeResponseRisksItemOccurredDateRegExp).optional(),
7168
7298
  "note": stringType().max(updateInitiativeResponseRisksItemNoteMax).optional()
7169
7299
  }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(updateInitiativeResponseRisksMax).optional(),
7300
+ "followUps": arrayType(objectType({
7301
+ "id": stringType(),
7302
+ "title": stringType().min(1).max(updateInitiativeResponseFollowUpsItemTitleMax),
7303
+ "assigneeUserId": stringType().uuid().optional(),
7304
+ "assigneeName": stringType().max(updateInitiativeResponseFollowUpsItemAssigneeNameMax).optional(),
7305
+ "dueDate": stringType().regex(updateInitiativeResponseFollowUpsItemDueDateRegExp),
7306
+ "doneDate": stringType().regex(updateInitiativeResponseFollowUpsItemDoneDateRegExp).optional(),
7307
+ "milestoneId": stringType().optional(),
7308
+ "riskId": stringType().optional(),
7309
+ "note": stringType().max(updateInitiativeResponseFollowUpsItemNoteMax).optional()
7310
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(updateInitiativeResponseFollowUpsMax).optional(),
7170
7311
  "dependsOn": arrayType(stringType()).max(updateInitiativeResponseDependsOnMax),
7171
7312
  "requiredSkills": arrayType(objectType({
7172
7313
  "skillId": stringType(),
@@ -10467,6 +10608,7 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
10467
10608
  }
10468
10609
  if (updates) {
10469
10610
  warnings.push("risks: this file cannot carry risks, and the app will offer it as an update \u2014 any risks the app holds for this initiative are removed. Re-enter them in the app after the import, or add the initiative's details there instead.");
10611
+ warnings.push("followUps: this file cannot carry follow-ups, and the app will offer it as an update \u2014 any follow-ups the app holds for this initiative are removed. Re-enter them in the app after the import, or add the initiative's details there instead.");
10470
10612
  }
10471
10613
  let businessUnit = spec.businessUnit;
10472
10614
  let aiCategory = spec.aiCategory;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bicon/mcp-composer",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "MCP server that helps an AI client compose a valid BICon portfolio initiative and hand it back as an import file (draft-first, no auth, no API calls).",
5
5
  "license": "UNLICENSED",
6
6
  "author": "BICon Establishment",