@debugbundle/mcp 0.1.6 → 0.1.7

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/main.cjs +754 -113
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -14470,6 +14470,7 @@ var AlertConditionTypeSchema = external_exports.enum([
14470
14470
  var AlertSchema = external_exports.object({
14471
14471
  alert_id: external_exports.string(),
14472
14472
  project_id: external_exports.string(),
14473
+ created_by_user_id: external_exports.string(),
14473
14474
  service_id: external_exports.string().nullable(),
14474
14475
  channel: AlertChannelSchema,
14475
14476
  condition_type: AlertConditionTypeSchema,
@@ -14595,7 +14596,7 @@ function createAlertApi(client) {
14595
14596
  return expectAlert(
14596
14597
  client.request({
14597
14598
  method: "PATCH",
14598
- path: `/v1/alerts/${input.alertId}`,
14599
+ path: `/v1/alerts/${input.alertId}${buildQuery({ project_id: input.projectId })}`,
14599
14600
  bearerToken: input.bearerToken,
14600
14601
  body
14601
14602
  })
@@ -14604,7 +14605,7 @@ function createAlertApi(client) {
14604
14605
  async deleteAlert(input) {
14605
14606
  const response = await client.request({
14606
14607
  method: "DELETE",
14607
- path: `/v1/alerts/${input.alertId}`,
14608
+ path: `/v1/alerts/${input.alertId}${buildQuery({ project_id: input.projectId })}`,
14608
14609
  bearerToken: input.bearerToken
14609
14610
  });
14610
14611
  if (response.status < 200 || response.status >= 300) {
@@ -14643,9 +14644,9 @@ var BillingSummarySchema = external_exports.object({
14643
14644
  monthly_raw_ingested_events: BillingUsageMetricSchema,
14644
14645
  retained_bundle_cap: BillingUsageMetricSchema,
14645
14646
  monthly_remote_activations: BillingUsageMetricSchema,
14646
- monthly_alert_deliveries: BillingUsageMetricSchema
14647
- }).strict(),
14648
- email_verification_required: external_exports.boolean().optional()
14647
+ monthly_alert_deliveries: BillingUsageMetricSchema,
14648
+ monthly_webhook_deliveries: BillingUsageMetricSchema
14649
+ }).strict()
14649
14650
  }).strict();
14650
14651
  var BillingSummaryResponseSchema = external_exports.object({
14651
14652
  billing: BillingSummarySchema
@@ -14758,6 +14759,7 @@ var ProjectGitHubRepoSchema = external_exports.object({
14758
14759
  var GitHubDispatchRuleSchema = external_exports.object({
14759
14760
  rule_id: external_exports.string(),
14760
14761
  project_id: external_exports.string(),
14762
+ created_by_user_id: external_exports.string(),
14761
14763
  name: external_exports.string(),
14762
14764
  enabled: external_exports.boolean(),
14763
14765
  event_types: external_exports.array(external_exports.string().min(1)),
@@ -14776,7 +14778,7 @@ var GitHubDispatchDeliverySchema = external_exports.object({
14776
14778
  rule_name: external_exports.string(),
14777
14779
  incident_id: external_exports.string(),
14778
14780
  incident_title: external_exports.string(),
14779
- status: external_exports.enum(["pending", "retrying", "delivered", "failed"]),
14781
+ status: external_exports.enum(["pending", "retrying", "delivered", "failed", "skipped"]),
14780
14782
  attempt_count: external_exports.number().int(),
14781
14783
  last_attempt_at: external_exports.string().nullable(),
14782
14784
  last_error: external_exports.string().nullable(),
@@ -14913,19 +14915,21 @@ async function expectNoContent(responsePromise) {
14913
14915
  function createGitHubManagementApi(client) {
14914
14916
  return {
14915
14917
  async getInstallation(input) {
14918
+ const query = input.projectId === void 0 ? "" : `?project_id=${encodeURIComponent(input.projectId)}`;
14916
14919
  return expectInstallation(
14917
14920
  client.request({
14918
14921
  method: "GET",
14919
- path: "/v1/github/installation",
14922
+ path: `/v1/github/installation${query}`,
14920
14923
  bearerToken: input.bearerToken
14921
14924
  })
14922
14925
  );
14923
14926
  },
14924
14927
  async listRepositories(input) {
14928
+ const query = input.projectId === void 0 ? "" : `?project_id=${encodeURIComponent(input.projectId)}`;
14925
14929
  return expectRepositories(
14926
14930
  client.request({
14927
14931
  method: "GET",
14928
- path: "/v1/github/repositories",
14932
+ path: `/v1/github/repositories${query}`,
14929
14933
  bearerToken: input.bearerToken
14930
14934
  })
14931
14935
  );
@@ -15059,6 +15063,11 @@ var ProjectMetricsSchema = external_exports.object({
15059
15063
  var ProjectRecordSchema = external_exports.object({
15060
15064
  project_id: external_exports.string(),
15061
15065
  organization_id: external_exports.string(),
15066
+ owner_user_id: external_exports.string(),
15067
+ owner_email: external_exports.string().email(),
15068
+ relationship: external_exports.enum(["owned", "shared"]),
15069
+ sharing_state: external_exports.enum(["private", "shared_by_you", "shared_with_you"]),
15070
+ effective_role: external_exports.enum(["owner", "admin", "member"]),
15062
15071
  name: external_exports.string(),
15063
15072
  slug: external_exports.string(),
15064
15073
  environment_default: external_exports.string(),
@@ -15076,6 +15085,11 @@ var ProjectCreateResponseSchema = external_exports.object({
15076
15085
  var DeletedProjectRecordSchema = external_exports.object({
15077
15086
  project_id: external_exports.string(),
15078
15087
  organization_id: external_exports.string(),
15088
+ owner_user_id: external_exports.string(),
15089
+ owner_email: external_exports.string().email(),
15090
+ relationship: external_exports.enum(["owned", "shared"]),
15091
+ sharing_state: external_exports.enum(["private", "shared_by_you", "shared_with_you"]),
15092
+ effective_role: external_exports.enum(["owner", "admin", "member"]),
15079
15093
  name: external_exports.string(),
15080
15094
  slug: external_exports.string(),
15081
15095
  environment_default: external_exports.string(),
@@ -15226,6 +15240,34 @@ var IncidentSchema = external_exports.object({
15226
15240
  matched_fields: external_exports.array(external_exports.string()),
15227
15241
  incident_reason: IncidentReasonSchema.optional()
15228
15242
  }).strict();
15243
+ var ImprovementSchema = external_exports.object({
15244
+ improvement_id: external_exports.string(),
15245
+ project_id: external_exports.string(),
15246
+ project_name: external_exports.string(),
15247
+ project_slug: external_exports.string(),
15248
+ service_id: external_exports.string().nullable(),
15249
+ service_name: external_exports.string(),
15250
+ service_runtime: external_exports.string().nullable(),
15251
+ service_framework: external_exports.string().nullable(),
15252
+ environment: external_exports.string(),
15253
+ kind: external_exports.enum(["warning_hotspot", "slow_request", "request_failure_pattern", "recurring_incident", "post_deploy_regression"]),
15254
+ status: external_exports.enum(["open", "resolved", "snoozed"]),
15255
+ severity: external_exports.enum(["low", "medium", "high", "critical"]),
15256
+ confidence: external_exports.number(),
15257
+ fingerprint: external_exports.string(),
15258
+ title: external_exports.string(),
15259
+ summary: external_exports.string(),
15260
+ occurrence_count: external_exports.number().int(),
15261
+ evidence: external_exports.record(external_exports.unknown()),
15262
+ first_detected_at: external_exports.string(),
15263
+ last_detected_at: external_exports.string(),
15264
+ resolved_at: external_exports.string().nullable(),
15265
+ snoozed_until: external_exports.string().nullable(),
15266
+ bundle_generation_number: external_exports.number().int(),
15267
+ bundle_created_at: external_exports.string().nullable(),
15268
+ bundle_updated_at: external_exports.string().nullable(),
15269
+ bundle_failure_reason: external_exports.string().nullable()
15270
+ }).strict();
15229
15271
  var ServiceSchema = external_exports.object({
15230
15272
  service_id: external_exports.string(),
15231
15273
  project_id: external_exports.string(),
@@ -15248,6 +15290,9 @@ var IncidentsResponseSchema = external_exports.object({
15248
15290
  var IncidentResponseSchema = external_exports.object({
15249
15291
  incident: IncidentSchema
15250
15292
  }).strict();
15293
+ var ImprovementResponseSchema = external_exports.object({
15294
+ improvement: ImprovementSchema
15295
+ }).strict();
15251
15296
  var IncidentContextArtifactSchema = external_exports.object({
15252
15297
  status: external_exports.enum(["ready", "pending", "failed"]),
15253
15298
  body: external_exports.unknown().optional(),
@@ -15318,6 +15363,10 @@ var IncidentContextSchema = external_exports.object({
15318
15363
  var ServicesResponseSchema = external_exports.object({
15319
15364
  services: external_exports.array(ServiceSchema)
15320
15365
  }).strict();
15366
+ var ImprovementsResponseSchema = external_exports.object({
15367
+ improvements: external_exports.array(ImprovementSchema),
15368
+ next_cursor: external_exports.string().nullable().optional()
15369
+ }).strict();
15321
15370
  var LogsResponseSchema = external_exports.object({
15322
15371
  logs: external_exports.array(LogSchema),
15323
15372
  next_cursor: external_exports.string().nullable().optional()
@@ -15516,6 +15565,108 @@ function createRetrievalApi(client) {
15516
15565
  bearerToken: input.bearerToken
15517
15566
  })
15518
15567
  );
15568
+ },
15569
+ async listImprovements(input) {
15570
+ const query = new URLSearchParams();
15571
+ if (input.projectId !== void 0) {
15572
+ query.set("project_id", input.projectId);
15573
+ }
15574
+ if (input.environment !== void 0) {
15575
+ query.set("environment", input.environment);
15576
+ }
15577
+ if (input.service !== void 0) {
15578
+ query.set("service", input.service);
15579
+ }
15580
+ if (input.status !== void 0) {
15581
+ query.set("status", input.status);
15582
+ }
15583
+ if (input.severity !== void 0) {
15584
+ query.set("severity", input.severity);
15585
+ }
15586
+ if (input.kind !== void 0) {
15587
+ query.set("kind", input.kind);
15588
+ }
15589
+ if (input.cursor !== void 0) {
15590
+ query.set("cursor", input.cursor);
15591
+ }
15592
+ if (input.limit !== void 0) {
15593
+ query.set("limit", String(input.limit));
15594
+ }
15595
+ const path = query.size > 0 ? `/v1/improvements?${query.toString()}` : "/v1/improvements";
15596
+ const parsed = await expectParsed(
15597
+ client.request({
15598
+ method: "GET",
15599
+ path,
15600
+ bearerToken: input.bearerToken
15601
+ }),
15602
+ ImprovementsResponseSchema
15603
+ );
15604
+ return {
15605
+ improvements: parsed.improvements,
15606
+ next_cursor: parsed.next_cursor ?? null
15607
+ };
15608
+ },
15609
+ async getImprovement(input) {
15610
+ const parsed = await expectParsed(
15611
+ client.request({
15612
+ method: "GET",
15613
+ path: `/v1/improvements/${input.improvementId}`,
15614
+ bearerToken: input.bearerToken
15615
+ }),
15616
+ ImprovementResponseSchema
15617
+ );
15618
+ return parsed.improvement;
15619
+ },
15620
+ async resolveImprovement(input) {
15621
+ const parsed = await expectParsed(
15622
+ client.request({
15623
+ method: "POST",
15624
+ path: `/v1/improvements/${input.improvementId}/resolve`,
15625
+ bearerToken: input.bearerToken
15626
+ }),
15627
+ ImprovementResponseSchema
15628
+ );
15629
+ return parsed.improvement;
15630
+ },
15631
+ async reopenImprovement(input) {
15632
+ const parsed = await expectParsed(
15633
+ client.request({
15634
+ method: "POST",
15635
+ path: `/v1/improvements/${input.improvementId}/reopen`,
15636
+ bearerToken: input.bearerToken
15637
+ }),
15638
+ ImprovementResponseSchema
15639
+ );
15640
+ return parsed.improvement;
15641
+ },
15642
+ async snoozeImprovement(input) {
15643
+ const parsed = await expectParsed(
15644
+ client.request({
15645
+ method: "POST",
15646
+ path: `/v1/improvements/${input.improvementId}/snooze`,
15647
+ bearerToken: input.bearerToken,
15648
+ body: { snoozed_until: input.snoozedUntil }
15649
+ }),
15650
+ ImprovementResponseSchema
15651
+ );
15652
+ return parsed.improvement;
15653
+ },
15654
+ async getImprovementBundle(input) {
15655
+ return await expectParsed(
15656
+ client.request({
15657
+ method: "GET",
15658
+ path: `/v1/projects/${input.projectId}/improvements/${input.improvementId}/bundle`,
15659
+ bearerToken: input.bearerToken
15660
+ }),
15661
+ external_exports.union([
15662
+ PendingStatusSchema,
15663
+ BundleSchema,
15664
+ external_exports.object({
15665
+ status: external_exports.literal("failed"),
15666
+ reason: external_exports.string()
15667
+ }).strict()
15668
+ ])
15669
+ );
15519
15670
  }
15520
15671
  };
15521
15672
  }
@@ -15849,6 +16000,7 @@ var WebhookFiltersSchema = external_exports.object({
15849
16000
  var WebhookSchema = external_exports.object({
15850
16001
  webhook_id: external_exports.string(),
15851
16002
  project_id: external_exports.string(),
16003
+ created_by_user_id: external_exports.string(),
15852
16004
  url: external_exports.string(),
15853
16005
  events: external_exports.array(WebhookEventTypeSchema),
15854
16006
  filters: WebhookFiltersSchema,
@@ -16019,7 +16171,7 @@ function createWebhookApi(client) {
16019
16171
  return expectWebhook(
16020
16172
  client.request({
16021
16173
  method: "GET",
16022
- path: `/v1/webhooks/${input.webhookId}`,
16174
+ path: `/v1/webhooks/${input.webhookId}${buildQuery3({ project_id: input.projectId })}`,
16023
16175
  bearerToken: input.bearerToken
16024
16176
  })
16025
16177
  );
@@ -16041,7 +16193,7 @@ function createWebhookApi(client) {
16041
16193
  return expectWebhook(
16042
16194
  client.request({
16043
16195
  method: "PATCH",
16044
- path: `/v1/webhooks/${input.webhookId}`,
16196
+ path: `/v1/webhooks/${input.webhookId}${buildQuery3({ project_id: input.projectId })}`,
16045
16197
  bearerToken: input.bearerToken,
16046
16198
  body
16047
16199
  })
@@ -16050,7 +16202,7 @@ function createWebhookApi(client) {
16050
16202
  async deleteWebhook(input) {
16051
16203
  const response = await client.request({
16052
16204
  method: "DELETE",
16053
- path: `/v1/webhooks/${input.webhookId}`,
16205
+ path: `/v1/webhooks/${input.webhookId}${buildQuery3({ project_id: input.projectId })}`,
16054
16206
  bearerToken: input.bearerToken
16055
16207
  });
16056
16208
  if (response.status < 200 || response.status >= 300) {
@@ -16068,7 +16220,7 @@ function createWebhookApi(client) {
16068
16220
  return expectWebhookTestDelivery(
16069
16221
  client.request({
16070
16222
  method: "POST",
16071
- path: `/v1/webhooks/${input.webhookId}/test`,
16223
+ path: `/v1/webhooks/${input.webhookId}/test${buildQuery3({ project_id: input.projectId })}`,
16072
16224
  bearerToken: input.bearerToken,
16073
16225
  body
16074
16226
  })
@@ -16078,7 +16230,7 @@ function createWebhookApi(client) {
16078
16230
  return expectWebhookDeliveries(
16079
16231
  client.request({
16080
16232
  method: "GET",
16081
- path: `/v1/webhooks/${input.webhookId}/deliveries${buildQuery3({ limit: input.limit })}`,
16233
+ path: `/v1/webhooks/${input.webhookId}/deliveries${buildQuery3({ project_id: input.projectId, limit: input.limit })}`,
16082
16234
  bearerToken: input.bearerToken
16083
16235
  })
16084
16236
  );
@@ -16087,7 +16239,7 @@ function createWebhookApi(client) {
16087
16239
  return expectRetryDelivery(
16088
16240
  client.request({
16089
16241
  method: "POST",
16090
- path: `/v1/webhooks/${input.webhookId}/deliveries/${input.deliveryId}/retry`,
16242
+ path: `/v1/webhooks/${input.webhookId}/deliveries/${input.deliveryId}/retry${buildQuery3({ project_id: input.projectId })}`,
16091
16243
  bearerToken: input.bearerToken,
16092
16244
  body: {}
16093
16245
  })
@@ -16298,6 +16450,7 @@ var CapturePolicyOverridesSchema = external_exports.object({
16298
16450
  immediate_client_error_statuses: ImmediateClientErrorStatusesSchema.nullable()
16299
16451
  });
16300
16452
  var CapturePolicyResponseSchema = external_exports.object({
16453
+ access_mode: external_exports.enum(["manage", "preview"]),
16301
16454
  policy: ResolvedCapturePolicySchema,
16302
16455
  overrides: CapturePolicyOverridesSchema
16303
16456
  });
@@ -16395,6 +16548,29 @@ function getRequestAnomalyThreshold(input) {
16395
16548
  return null;
16396
16549
  }
16397
16550
 
16551
+ // ../../packages/shared-types/src/improvement-settings.ts
16552
+ var ImprovementBundleSensitivityValues = [
16553
+ "high_confidence",
16554
+ "balanced",
16555
+ "verbose"
16556
+ ];
16557
+ var ImprovementBundleSensitivitySchema = external_exports.enum(ImprovementBundleSensitivityValues);
16558
+ var ImprovementSettingsSchema = external_exports.object({
16559
+ automated_improvement_bundles_enabled: external_exports.boolean(),
16560
+ improvement_bundle_sensitivity: ImprovementBundleSensitivitySchema
16561
+ });
16562
+ var ImprovementSettingsResponseSchema = external_exports.object({
16563
+ access_mode: external_exports.enum(["manage", "preview"]),
16564
+ cloud_automation_available: external_exports.boolean(),
16565
+ settings: ImprovementSettingsSchema
16566
+ });
16567
+ var ImprovementSettingsUpdateSchema = external_exports.object({
16568
+ automated_improvement_bundles_enabled: external_exports.boolean().optional(),
16569
+ improvement_bundle_sensitivity: ImprovementBundleSensitivitySchema.optional()
16570
+ }).refine((input) => Object.keys(input).length > 0, {
16571
+ message: "At least one improvement settings field must be provided."
16572
+ });
16573
+
16398
16574
  // ../../packages/shared-types/src/index.ts
16399
16575
  function createUuidV4() {
16400
16576
  const cryptoSource = globalThis.crypto;
@@ -17661,6 +17837,57 @@ function createCapturePolicyApi(httpClient) {
17661
17837
  };
17662
17838
  }
17663
17839
 
17840
+ // ../cli/src/improvement-settings-commands.ts
17841
+ var ImprovementSettingsApiError = class extends Error {
17842
+ status;
17843
+ constructor(status, message) {
17844
+ super(message);
17845
+ this.name = "ImprovementSettingsApiError";
17846
+ this.status = status;
17847
+ }
17848
+ };
17849
+ function toApiError2(status, body, fallback) {
17850
+ if (typeof body === "object" && body !== null && "error" in body && typeof body.error === "string") {
17851
+ return new ImprovementSettingsApiError(status, body.error);
17852
+ }
17853
+ return new ImprovementSettingsApiError(status, fallback);
17854
+ }
17855
+ function createImprovementSettingsApi(httpClient) {
17856
+ return {
17857
+ async getImprovementSettings(input) {
17858
+ const response = await httpClient.request({
17859
+ method: "GET",
17860
+ path: `/v1/projects/${encodeURIComponent(input.projectId)}/improvement-settings`,
17861
+ bearerToken: input.bearerToken
17862
+ });
17863
+ if (response.status !== 200) {
17864
+ throw toApiError2(response.status, response.body, "Failed to get improvement settings.");
17865
+ }
17866
+ const parsed = ImprovementSettingsResponseSchema.safeParse(response.body);
17867
+ if (!parsed.success) {
17868
+ throw new ImprovementSettingsApiError(500, "Invalid improvement settings response.");
17869
+ }
17870
+ return parsed.data;
17871
+ },
17872
+ async updateImprovementSettings(input) {
17873
+ const response = await httpClient.request({
17874
+ method: "PATCH",
17875
+ path: `/v1/projects/${encodeURIComponent(input.projectId)}/improvement-settings`,
17876
+ bearerToken: input.bearerToken,
17877
+ body: input.update
17878
+ });
17879
+ if (response.status !== 200) {
17880
+ throw toApiError2(response.status, response.body, "Failed to update improvement settings.");
17881
+ }
17882
+ const parsed = ImprovementSettingsResponseSchema.safeParse(response.body);
17883
+ if (!parsed.success) {
17884
+ throw new ImprovementSettingsApiError(500, "Invalid improvement settings response.");
17885
+ }
17886
+ return parsed.data;
17887
+ }
17888
+ };
17889
+ }
17890
+
17664
17891
  // ../cli/src/member-commands.ts
17665
17892
  var MemberApiError = class extends Error {
17666
17893
  status;
@@ -17672,7 +17899,7 @@ var MemberApiError = class extends Error {
17672
17899
  this.code = code;
17673
17900
  }
17674
17901
  };
17675
- function toApiError2(status, body) {
17902
+ function toApiError3(status, body) {
17676
17903
  if (typeof body === "object" && body !== null && "error" in body && typeof body.error === "string") {
17677
17904
  return new MemberApiError(status, body.error);
17678
17905
  }
@@ -17683,68 +17910,68 @@ function createMemberApi(httpClient) {
17683
17910
  async listMembers(input) {
17684
17911
  const response = await httpClient.request({
17685
17912
  method: "GET",
17686
- path: "/v1/organization/members",
17913
+ path: `/v1/projects/${input.projectId}/members`,
17687
17914
  bearerToken: input.bearerToken
17688
17915
  });
17689
17916
  if (response.status !== 200) {
17690
- throw toApiError2(response.status, response.body);
17917
+ throw toApiError3(response.status, response.body);
17691
17918
  }
17692
17919
  return response.body;
17693
17920
  },
17694
17921
  async listInvites(input) {
17695
17922
  const response = await httpClient.request({
17696
17923
  method: "GET",
17697
- path: "/v1/organization/members/invites",
17924
+ path: `/v1/projects/${input.projectId}/invites`,
17698
17925
  bearerToken: input.bearerToken
17699
17926
  });
17700
17927
  if (response.status !== 200) {
17701
- throw toApiError2(response.status, response.body);
17928
+ throw toApiError3(response.status, response.body);
17702
17929
  }
17703
17930
  return response.body;
17704
17931
  },
17705
17932
  async inviteMember(input) {
17706
17933
  const response = await httpClient.request({
17707
17934
  method: "POST",
17708
- path: "/v1/organization/members/invite",
17935
+ path: `/v1/projects/${input.projectId}/invite`,
17709
17936
  bearerToken: input.bearerToken,
17710
17937
  body: { email: input.email, role: input.role }
17711
17938
  });
17712
17939
  if (response.status !== 201) {
17713
- throw toApiError2(response.status, response.body);
17940
+ throw toApiError3(response.status, response.body);
17714
17941
  }
17715
17942
  return response.body;
17716
17943
  },
17717
17944
  async cancelInvite(input) {
17718
17945
  const response = await httpClient.request({
17719
17946
  method: "DELETE",
17720
- path: `/v1/organization/members/invites/${input.inviteId}`,
17947
+ path: `/v1/projects/${input.projectId}/invites/${input.inviteId}`,
17721
17948
  bearerToken: input.bearerToken
17722
17949
  });
17723
17950
  if (response.status !== 200) {
17724
- throw toApiError2(response.status, response.body);
17951
+ throw toApiError3(response.status, response.body);
17725
17952
  }
17726
17953
  return response.body;
17727
17954
  },
17728
17955
  async updateMemberRole(input) {
17729
17956
  const response = await httpClient.request({
17730
17957
  method: "PATCH",
17731
- path: `/v1/organization/members/${input.userId}`,
17958
+ path: `/v1/projects/${input.projectId}/members/${input.userId}`,
17732
17959
  bearerToken: input.bearerToken,
17733
17960
  body: { role: input.role }
17734
17961
  });
17735
17962
  if (response.status !== 200) {
17736
- throw toApiError2(response.status, response.body);
17963
+ throw toApiError3(response.status, response.body);
17737
17964
  }
17738
17965
  return response.body;
17739
17966
  },
17740
17967
  async removeMember(input) {
17741
17968
  const response = await httpClient.request({
17742
17969
  method: "DELETE",
17743
- path: `/v1/organization/members/${input.userId}`,
17970
+ path: `/v1/projects/${input.projectId}/members/${input.userId}`,
17744
17971
  bearerToken: input.bearerToken
17745
17972
  });
17746
17973
  if (response.status !== 200) {
17747
- throw toApiError2(response.status, response.body);
17974
+ throw toApiError3(response.status, response.body);
17748
17975
  }
17749
17976
  return response.body;
17750
17977
  }
@@ -17762,7 +17989,7 @@ var ProbeApiError = class extends Error {
17762
17989
  this.code = code;
17763
17990
  }
17764
17991
  };
17765
- function toApiError3(status, body) {
17992
+ function toApiError4(status, body) {
17766
17993
  if (typeof body === "object" && body !== null && "error" in body && typeof body.error === "string") {
17767
17994
  return new ProbeApiError(status, body.error);
17768
17995
  }
@@ -17793,7 +18020,7 @@ function createProbeApi(httpClient) {
17793
18020
  body
17794
18021
  });
17795
18022
  if (response.status !== 201) {
17796
- throw toApiError3(response.status, response.body);
18023
+ throw toApiError4(response.status, response.body);
17797
18024
  }
17798
18025
  return response.body;
17799
18026
  },
@@ -17804,7 +18031,7 @@ function createProbeApi(httpClient) {
17804
18031
  bearerToken: input.bearerToken
17805
18032
  });
17806
18033
  if (response.status !== 200) {
17807
- throw toApiError3(response.status, response.body);
18034
+ throw toApiError4(response.status, response.body);
17808
18035
  }
17809
18036
  return response.body;
17810
18037
  },
@@ -17816,7 +18043,7 @@ function createProbeApi(httpClient) {
17816
18043
  body: { activation_id: input.activationId }
17817
18044
  });
17818
18045
  if (response.status !== 200) {
17819
- throw toApiError3(response.status, response.body);
18046
+ throw toApiError4(response.status, response.body);
17820
18047
  }
17821
18048
  return response.body;
17822
18049
  }
@@ -19028,6 +19255,181 @@ var STORAGE_SCHEMA_MIGRATIONS = [
19028
19255
  statements: [
19029
19256
  "ALTER TABLE capture_policies ADD COLUMN IF NOT EXISTS immediate_client_error_statuses jsonb"
19030
19257
  ]
19258
+ }),
19259
+ defineStorageSchemaMigration({
19260
+ id: "202605150001_add_user_avatar_columns",
19261
+ description: "Add cached user avatar metadata for GitHub and Gravatar profile images.",
19262
+ statements: [
19263
+ "ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_source text",
19264
+ "ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_object_key text",
19265
+ "ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_content_type text",
19266
+ "ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_updated_at timestamptz"
19267
+ ]
19268
+ }),
19269
+ defineStorageSchemaMigration({
19270
+ id: "202605170001_add_alert_email_digest_queue",
19271
+ description: "Add queued email alert digests and digest items for fixed-window alert batching.",
19272
+ statements: [
19273
+ `
19274
+ CREATE TABLE IF NOT EXISTS alert_email_digests (
19275
+ id uuid PRIMARY KEY,
19276
+ project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
19277
+ recipient text NOT NULL,
19278
+ status text NOT NULL,
19279
+ next_attempt_at timestamptz,
19280
+ claimed_at timestamptz,
19281
+ last_error text,
19282
+ delivered_at timestamptz,
19283
+ created_at timestamptz NOT NULL DEFAULT now(),
19284
+ updated_at timestamptz NOT NULL DEFAULT now()
19285
+ )
19286
+ `,
19287
+ `
19288
+ CREATE UNIQUE INDEX IF NOT EXISTS alert_email_digests_project_recipient_pending_idx
19289
+ ON alert_email_digests (project_id, recipient)
19290
+ WHERE status = 'pending' AND claimed_at IS NULL
19291
+ `,
19292
+ `
19293
+ CREATE INDEX IF NOT EXISTS alert_email_digests_status_next_attempt_idx
19294
+ ON alert_email_digests (status, next_attempt_at)
19295
+ `,
19296
+ `
19297
+ CREATE TABLE IF NOT EXISTS alert_email_digest_items (
19298
+ id uuid PRIMARY KEY,
19299
+ digest_id uuid NOT NULL REFERENCES alert_email_digests(id) ON DELETE CASCADE,
19300
+ alert_id uuid NOT NULL REFERENCES alert_rules(id) ON DELETE CASCADE,
19301
+ project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
19302
+ incident_id uuid NOT NULL REFERENCES incidents(id) ON DELETE CASCADE,
19303
+ condition_type text NOT NULL,
19304
+ dedupe_key text NOT NULL,
19305
+ payload jsonb NOT NULL,
19306
+ created_at timestamptz NOT NULL DEFAULT now(),
19307
+ UNIQUE (alert_id, incident_id, dedupe_key)
19308
+ )
19309
+ `,
19310
+ `
19311
+ CREATE INDEX IF NOT EXISTS alert_email_digest_items_digest_created_idx
19312
+ ON alert_email_digest_items (digest_id, created_at ASC)
19313
+ `
19314
+ ]
19315
+ }),
19316
+ defineStorageSchemaMigration({
19317
+ id: "202605180001_add_skipped_github_dispatch_status",
19318
+ description: "Allow GitHub dispatch delivery history to record rate-limited skips without retrying them.",
19319
+ statements: [
19320
+ "ALTER TABLE github_dispatch_deliveries DROP CONSTRAINT IF EXISTS github_dispatch_deliveries_status_check",
19321
+ "ALTER TABLE github_dispatch_deliveries ADD CONSTRAINT github_dispatch_deliveries_status_check CHECK (status IN ('pending', 'retrying', 'delivered', 'failed', 'skipped'))"
19322
+ ]
19323
+ }),
19324
+ defineStorageSchemaMigration({
19325
+ id: "202605180002_add_project_improvement_settings",
19326
+ description: "Add project-level automated improvement settings columns.",
19327
+ statements: [
19328
+ "ALTER TABLE projects ADD COLUMN IF NOT EXISTS automated_improvement_bundles_enabled boolean NOT NULL DEFAULT true",
19329
+ "ALTER TABLE projects ADD COLUMN IF NOT EXISTS improvement_bundle_sensitivity text NOT NULL DEFAULT 'balanced'",
19330
+ `
19331
+ ALTER TABLE projects
19332
+ DROP CONSTRAINT IF EXISTS projects_improvement_bundle_sensitivity_check
19333
+ `,
19334
+ `
19335
+ ALTER TABLE projects
19336
+ ADD CONSTRAINT projects_improvement_bundle_sensitivity_check
19337
+ CHECK (improvement_bundle_sensitivity IN ('high_confidence', 'balanced', 'verbose'))
19338
+ `
19339
+ ]
19340
+ }),
19341
+ defineStorageSchemaMigration({
19342
+ id: "202605180003_add_improvement_opportunities_and_bundle_generation_shape",
19343
+ description: "Add hosted improvement opportunity storage and allow bundle generations to reference improvements directly.",
19344
+ statements: [
19345
+ `
19346
+ CREATE TABLE IF NOT EXISTS improvement_opportunities (
19347
+ id uuid PRIMARY KEY,
19348
+ project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
19349
+ service_id uuid REFERENCES services(id) ON DELETE SET NULL,
19350
+ service_name text NOT NULL,
19351
+ environment text NOT NULL DEFAULT 'production',
19352
+ kind text NOT NULL,
19353
+ status text NOT NULL DEFAULT 'open',
19354
+ severity text NOT NULL,
19355
+ confidence numeric NOT NULL,
19356
+ fingerprint text NOT NULL,
19357
+ title text NOT NULL,
19358
+ summary text NOT NULL,
19359
+ occurrence_count integer NOT NULL DEFAULT 1,
19360
+ evidence jsonb NOT NULL,
19361
+ first_detected_at timestamptz NOT NULL,
19362
+ last_detected_at timestamptz NOT NULL,
19363
+ last_source_event_id uuid,
19364
+ related_incident_ids uuid[] NOT NULL DEFAULT '{}',
19365
+ bundle_generation_number integer NOT NULL DEFAULT 0,
19366
+ bundle_created_at timestamptz,
19367
+ bundle_updated_at timestamptz,
19368
+ bundle_source_event_id uuid,
19369
+ bundle_failure_reason text,
19370
+ resolved_at timestamptz,
19371
+ resolved_by_user_id uuid REFERENCES users(id) ON DELETE SET NULL,
19372
+ snoozed_until timestamptz,
19373
+ created_at timestamptz NOT NULL DEFAULT now(),
19374
+ updated_at timestamptz NOT NULL DEFAULT now(),
19375
+ UNIQUE (project_id, fingerprint)
19376
+ )
19377
+ `,
19378
+ `
19379
+ CREATE INDEX IF NOT EXISTS improvement_opportunities_project_status_detected_idx
19380
+ ON improvement_opportunities (project_id, status, last_detected_at DESC)
19381
+ `,
19382
+ `
19383
+ CREATE INDEX IF NOT EXISTS improvement_opportunities_project_kind_detected_idx
19384
+ ON improvement_opportunities (project_id, kind, last_detected_at DESC)
19385
+ `,
19386
+ `
19387
+ CREATE INDEX IF NOT EXISTS improvement_opportunities_project_service_env_idx
19388
+ ON improvement_opportunities (project_id, service_id, environment)
19389
+ `,
19390
+ `
19391
+ CREATE TABLE IF NOT EXISTS improvement_opportunity_events (
19392
+ improvement_opportunity_id uuid NOT NULL REFERENCES improvement_opportunities(id) ON DELETE CASCADE,
19393
+ event_id uuid NOT NULL,
19394
+ event_type text NOT NULL,
19395
+ occurred_at timestamptz NOT NULL,
19396
+ PRIMARY KEY (improvement_opportunity_id, event_id)
19397
+ )
19398
+ `,
19399
+ `
19400
+ CREATE INDEX IF NOT EXISTS improvement_opportunity_events_detected_idx
19401
+ ON improvement_opportunity_events (improvement_opportunity_id, occurred_at DESC, event_id DESC)
19402
+ `,
19403
+ "ALTER TABLE bundle_generations ALTER COLUMN incident_id DROP NOT NULL",
19404
+ "ALTER TABLE bundle_generations ADD COLUMN IF NOT EXISTS improvement_opportunity_id uuid REFERENCES improvement_opportunities(id) ON DELETE CASCADE",
19405
+ "ALTER TABLE bundle_generations DROP CONSTRAINT IF EXISTS bundle_generations_incident_id_source_event_id_key",
19406
+ "DROP INDEX IF EXISTS bundle_generations_incident_source_idx",
19407
+ "DROP INDEX IF EXISTS bundle_generations_improvement_source_idx",
19408
+ `
19409
+ CREATE UNIQUE INDEX IF NOT EXISTS bundle_generations_incident_source_idx
19410
+ ON bundle_generations (incident_id, source_event_id)
19411
+ WHERE incident_id IS NOT NULL
19412
+ `,
19413
+ `
19414
+ CREATE UNIQUE INDEX IF NOT EXISTS bundle_generations_improvement_source_idx
19415
+ ON bundle_generations (improvement_opportunity_id, source_event_id)
19416
+ WHERE improvement_opportunity_id IS NOT NULL
19417
+ `,
19418
+ "DROP INDEX IF EXISTS bundle_generations_improvement_generation_idx",
19419
+ `
19420
+ CREATE INDEX IF NOT EXISTS bundle_generations_improvement_generation_idx
19421
+ ON bundle_generations (improvement_opportunity_id, generation_number DESC)
19422
+ WHERE improvement_opportunity_id IS NOT NULL
19423
+ `,
19424
+ "ALTER TABLE bundle_generations DROP CONSTRAINT IF EXISTS bundle_generations_owner_check",
19425
+ `
19426
+ ALTER TABLE bundle_generations
19427
+ ADD CONSTRAINT bundle_generations_owner_check CHECK (
19428
+ (incident_id IS NOT NULL AND improvement_opportunity_id IS NULL AND bundle_type = 'failure')
19429
+ OR (incident_id IS NULL AND improvement_opportunity_id IS NOT NULL AND bundle_type = 'improvement')
19430
+ )
19431
+ `
19432
+ ]
19031
19433
  })
19032
19434
  ];
19033
19435
 
@@ -22074,6 +22476,7 @@ function createAlertMcpTools(api) {
22074
22476
  try {
22075
22477
  const requestInput = {
22076
22478
  bearerToken: String(input["bearerToken"]),
22479
+ projectId: String(input["projectId"]),
22077
22480
  alertId: String(input["alertId"])
22078
22481
  };
22079
22482
  if (typeof input["serviceId"] === "string") {
@@ -22108,6 +22511,7 @@ function createAlertMcpTools(api) {
22108
22511
  return {
22109
22512
  alert: await api.deleteAlert({
22110
22513
  bearerToken: String(input["bearerToken"]),
22514
+ projectId: String(input["projectId"]),
22111
22515
  alertId: String(input["alertId"])
22112
22516
  })
22113
22517
  };
@@ -22255,8 +22659,11 @@ function createGitHubMcpTools(api) {
22255
22659
  async get_github_status(input) {
22256
22660
  try {
22257
22661
  const bearerToken = String(input["bearerToken"]);
22258
- const installation = await api.getInstallation({ bearerToken });
22259
22662
  const projectId = typeof input["projectId"] === "string" ? input["projectId"] : void 0;
22663
+ const installation = await api.getInstallation({
22664
+ bearerToken,
22665
+ ...projectId === void 0 ? {} : { projectId }
22666
+ });
22260
22667
  const repo = projectId === void 0 || api.getProjectRepo === void 0 ? void 0 : await api.getProjectRepo({ bearerToken, projectId });
22261
22668
  return repo === void 0 ? { installation } : { installation, repo };
22262
22669
  } catch (error) {
@@ -22267,7 +22674,8 @@ function createGitHubMcpTools(api) {
22267
22674
  try {
22268
22675
  return {
22269
22676
  repositories: await api.listRepositories({
22270
- bearerToken: String(input["bearerToken"])
22677
+ bearerToken: String(input["bearerToken"]),
22678
+ ...typeof input["projectId"] === "string" ? { projectId: input["projectId"] } : {}
22271
22679
  })
22272
22680
  };
22273
22681
  } catch (error) {
@@ -22403,8 +22811,134 @@ function createGitHubMcpTools(api) {
22403
22811
  };
22404
22812
  }
22405
22813
 
22406
- // src/member-tools.ts
22814
+ // src/improvement-tools.ts
22407
22815
  function mapMcpError6(error) {
22816
+ if (error instanceof RetrievalApiError) {
22817
+ throw new Error(`mcp_tool_error:${error.code}`);
22818
+ }
22819
+ throw new Error("mcp_tool_error:unknown_error");
22820
+ }
22821
+ function requireBearerToken(input) {
22822
+ const bearerToken = input["bearerToken"];
22823
+ if (typeof bearerToken !== "string" || bearerToken.length === 0) {
22824
+ throw new RetrievalApiError(401, "auth_required");
22825
+ }
22826
+ return bearerToken;
22827
+ }
22828
+ function readString2(input, key) {
22829
+ const value = input[key];
22830
+ return typeof value === "string" ? value : "";
22831
+ }
22832
+ function createImprovementMcpTools(api) {
22833
+ return {
22834
+ async list_improvements(input) {
22835
+ try {
22836
+ return await api.listImprovements({
22837
+ bearerToken: requireBearerToken(input),
22838
+ ...typeof input["projectId"] === "string" ? { projectId: input["projectId"] } : {},
22839
+ ...typeof input["environment"] === "string" ? { environment: input["environment"] } : {},
22840
+ ...typeof input["service"] === "string" ? { service: input["service"] } : {},
22841
+ ...typeof input["status"] === "string" ? { status: input["status"] } : {},
22842
+ ...typeof input["severity"] === "string" ? { severity: input["severity"] } : {},
22843
+ ...typeof input["kind"] === "string" ? { kind: input["kind"] } : {},
22844
+ ...typeof input["cursor"] === "string" ? { cursor: input["cursor"] } : {},
22845
+ ...typeof input["limit"] === "number" ? { limit: input["limit"] } : {}
22846
+ });
22847
+ } catch (error) {
22848
+ mapMcpError6(error);
22849
+ }
22850
+ },
22851
+ async get_improvement(input) {
22852
+ try {
22853
+ return await api.getImprovement({
22854
+ bearerToken: requireBearerToken(input),
22855
+ improvementId: readString2(input, "improvementId")
22856
+ });
22857
+ } catch (error) {
22858
+ mapMcpError6(error);
22859
+ }
22860
+ },
22861
+ async get_improvement_bundle(input) {
22862
+ try {
22863
+ return await api.getImprovementBundle({
22864
+ bearerToken: requireBearerToken(input),
22865
+ projectId: readString2(input, "projectId"),
22866
+ improvementId: readString2(input, "improvementId")
22867
+ });
22868
+ } catch (error) {
22869
+ mapMcpError6(error);
22870
+ }
22871
+ },
22872
+ async resolve_improvement(input) {
22873
+ try {
22874
+ return await api.resolveImprovement({
22875
+ bearerToken: requireBearerToken(input),
22876
+ improvementId: readString2(input, "improvementId")
22877
+ });
22878
+ } catch (error) {
22879
+ mapMcpError6(error);
22880
+ }
22881
+ },
22882
+ async reopen_improvement(input) {
22883
+ try {
22884
+ return await api.reopenImprovement({
22885
+ bearerToken: requireBearerToken(input),
22886
+ improvementId: readString2(input, "improvementId")
22887
+ });
22888
+ } catch (error) {
22889
+ mapMcpError6(error);
22890
+ }
22891
+ },
22892
+ async snooze_improvement(input) {
22893
+ try {
22894
+ return await api.snoozeImprovement({
22895
+ bearerToken: requireBearerToken(input),
22896
+ improvementId: readString2(input, "improvementId"),
22897
+ snoozedUntil: readString2(input, "snoozedUntil")
22898
+ });
22899
+ } catch (error) {
22900
+ mapMcpError6(error);
22901
+ }
22902
+ }
22903
+ };
22904
+ }
22905
+
22906
+ // src/improvement-settings-tools.ts
22907
+ function mapMcpError7(error) {
22908
+ if (error instanceof ImprovementSettingsApiError) {
22909
+ throw new Error(`mcp_tool_error:${error.message}`);
22910
+ }
22911
+ throw new Error("mcp_tool_error:unknown_error");
22912
+ }
22913
+ function createImprovementSettingsMcpTools(api) {
22914
+ return {
22915
+ async get_improvement_settings(input) {
22916
+ try {
22917
+ return await api.getImprovementSettings({
22918
+ bearerToken: String(input["bearerToken"]),
22919
+ projectId: String(input["projectId"])
22920
+ });
22921
+ } catch (error) {
22922
+ mapMcpError7(error);
22923
+ }
22924
+ },
22925
+ async update_improvement_settings(input) {
22926
+ try {
22927
+ const update = typeof input["update"] === "object" && input["update"] !== null ? input["update"] : {};
22928
+ return await api.updateImprovementSettings({
22929
+ bearerToken: String(input["bearerToken"]),
22930
+ projectId: String(input["projectId"]),
22931
+ update
22932
+ });
22933
+ } catch (error) {
22934
+ mapMcpError7(error);
22935
+ }
22936
+ }
22937
+ };
22938
+ }
22939
+
22940
+ // src/member-tools.ts
22941
+ function mapMcpError8(error) {
22408
22942
  if (error instanceof MemberApiError) {
22409
22943
  throw new Error(`mcp_tool_error:${error.code}`);
22410
22944
  }
@@ -22412,71 +22946,77 @@ function mapMcpError6(error) {
22412
22946
  }
22413
22947
  function createMemberMcpTools(api) {
22414
22948
  return {
22415
- async list_members(input) {
22949
+ async list_project_members(input) {
22416
22950
  try {
22417
22951
  return await api.listMembers({
22418
- bearerToken: String(input["bearerToken"])
22952
+ bearerToken: String(input["bearerToken"]),
22953
+ projectId: String(input["projectId"])
22419
22954
  });
22420
22955
  } catch (error) {
22421
- mapMcpError6(error);
22956
+ mapMcpError8(error);
22422
22957
  }
22423
22958
  },
22424
- async list_member_invites(input) {
22959
+ async list_project_member_invites(input) {
22425
22960
  try {
22426
22961
  return await api.listInvites({
22427
- bearerToken: String(input["bearerToken"])
22962
+ bearerToken: String(input["bearerToken"]),
22963
+ projectId: String(input["projectId"])
22428
22964
  });
22429
22965
  } catch (error) {
22430
- mapMcpError6(error);
22966
+ mapMcpError8(error);
22431
22967
  }
22432
22968
  },
22433
- async invite_member(input) {
22969
+ async invite_project_member(input) {
22434
22970
  try {
22435
22971
  return await api.inviteMember({
22436
22972
  bearerToken: String(input["bearerToken"]),
22973
+ projectId: String(input["projectId"]),
22437
22974
  email: String(input["email"]),
22438
22975
  role: String(input["role"])
22439
22976
  });
22440
22977
  } catch (error) {
22441
- mapMcpError6(error);
22978
+ mapMcpError8(error);
22442
22979
  }
22443
22980
  },
22444
- async cancel_member_invite(input) {
22981
+ async cancel_project_member_invite(input) {
22445
22982
  try {
22446
22983
  return await api.cancelInvite({
22447
22984
  bearerToken: String(input["bearerToken"]),
22985
+ projectId: String(input["projectId"]),
22448
22986
  inviteId: String(input["inviteId"])
22449
22987
  });
22450
22988
  } catch (error) {
22451
- mapMcpError6(error);
22989
+ mapMcpError8(error);
22452
22990
  }
22453
22991
  },
22454
- async update_member_role(input) {
22992
+ async update_project_member_role(input) {
22455
22993
  try {
22456
22994
  return await api.updateMemberRole({
22457
22995
  bearerToken: String(input["bearerToken"]),
22996
+ projectId: String(input["projectId"]),
22458
22997
  userId: String(input["userId"]),
22459
22998
  role: String(input["role"])
22460
22999
  });
22461
23000
  } catch (error) {
22462
- mapMcpError6(error);
23001
+ mapMcpError8(error);
22463
23002
  }
22464
23003
  },
22465
- async remove_member(input) {
23004
+ async remove_project_member(input) {
22466
23005
  try {
22467
23006
  return await api.removeMember({
22468
23007
  bearerToken: String(input["bearerToken"]),
23008
+ projectId: String(input["projectId"]),
22469
23009
  userId: String(input["userId"])
22470
23010
  });
22471
23011
  } catch (error) {
22472
- mapMcpError6(error);
23012
+ mapMcpError8(error);
22473
23013
  }
22474
23014
  }
22475
23015
  };
22476
23016
  }
22477
23017
 
22478
23018
  // src/probe-tools.ts
22479
- function mapMcpError7(error) {
23019
+ function mapMcpError9(error) {
22480
23020
  if (error instanceof ProbeApiError) {
22481
23021
  throw new Error(`mcp_tool_error:${error.code}`);
22482
23022
  }
@@ -22505,7 +23045,7 @@ function createProbeMcpTools(api) {
22505
23045
  }
22506
23046
  return await api.activateProbe(requestInput);
22507
23047
  } catch (error) {
22508
- mapMcpError7(error);
23048
+ mapMcpError9(error);
22509
23049
  }
22510
23050
  },
22511
23051
  async list_active_probes(input) {
@@ -22515,7 +23055,7 @@ function createProbeMcpTools(api) {
22515
23055
  projectId: String(input["projectId"])
22516
23056
  });
22517
23057
  } catch (error) {
22518
- mapMcpError7(error);
23058
+ mapMcpError9(error);
22519
23059
  }
22520
23060
  },
22521
23061
  async deactivate_probe(input) {
@@ -22526,14 +23066,14 @@ function createProbeMcpTools(api) {
22526
23066
  activationId: String(input["activationId"])
22527
23067
  });
22528
23068
  } catch (error) {
22529
- mapMcpError7(error);
23069
+ mapMcpError9(error);
22530
23070
  }
22531
23071
  }
22532
23072
  };
22533
23073
  }
22534
23074
 
22535
23075
  // src/project-tools.ts
22536
- function mapMcpError8(error) {
23076
+ function mapMcpError10(error) {
22537
23077
  if (error instanceof ProjectManagementApiError) {
22538
23078
  throw new Error(`mcp_tool_error:${error.code}`);
22539
23079
  }
@@ -22551,7 +23091,7 @@ function createProjectMcpTools(api) {
22551
23091
  }
22552
23092
  return { projects: await api.listProjects(requestInput) };
22553
23093
  } catch (error) {
22554
- mapMcpError8(error);
23094
+ mapMcpError10(error);
22555
23095
  }
22556
23096
  },
22557
23097
  async create_project(input) {
@@ -22566,7 +23106,7 @@ function createProjectMcpTools(api) {
22566
23106
  }
22567
23107
  return { project: await api.createProject(requestInput) };
22568
23108
  } catch (error) {
22569
- mapMcpError8(error);
23109
+ mapMcpError10(error);
22570
23110
  }
22571
23111
  },
22572
23112
  async update_project(input) {
@@ -22586,7 +23126,7 @@ function createProjectMcpTools(api) {
22586
23126
  }
22587
23127
  return { project: await api.updateProject(requestInput) };
22588
23128
  } catch (error) {
22589
- mapMcpError8(error);
23129
+ mapMcpError10(error);
22590
23130
  }
22591
23131
  },
22592
23132
  async delete_project(input) {
@@ -22598,7 +23138,7 @@ function createProjectMcpTools(api) {
22598
23138
  })
22599
23139
  };
22600
23140
  } catch (error) {
22601
- mapMcpError8(error);
23141
+ mapMcpError10(error);
22602
23142
  }
22603
23143
  }
22604
23144
  };
@@ -22805,7 +23345,7 @@ async function persistCloudArtifact(directoryPath, fileName, payload, dependenci
22805
23345
  }
22806
23346
 
22807
23347
  // src/retrieval-tools.ts
22808
- function mapMcpError9(error) {
23348
+ function mapMcpError11(error) {
22809
23349
  if (error instanceof RetrievalApiError) {
22810
23350
  throw new Error(`mcp_tool_error:${error.code}`);
22811
23351
  }
@@ -22987,7 +23527,7 @@ function createRetrievalMcpTools(api) {
22987
23527
  incidents: incidents.incidents.map((incident) => attachSourceToRecord(incident, "cloud"))
22988
23528
  };
22989
23529
  } catch (error) {
22990
- mapMcpError9(error);
23530
+ mapMcpError11(error);
22991
23531
  }
22992
23532
  },
22993
23533
  async get_incident(input) {
@@ -23022,7 +23562,7 @@ function createRetrievalMcpTools(api) {
23022
23562
  )
23023
23563
  };
23024
23564
  } catch (error) {
23025
- mapMcpError9(error);
23565
+ mapMcpError11(error);
23026
23566
  }
23027
23567
  },
23028
23568
  async get_incident_context(input) {
@@ -23051,7 +23591,7 @@ function createRetrievalMcpTools(api) {
23051
23591
  "cloud"
23052
23592
  );
23053
23593
  } catch (error) {
23054
- mapMcpError9(error);
23594
+ mapMcpError11(error);
23055
23595
  }
23056
23596
  },
23057
23597
  async resolve_incident(input) {
@@ -23096,7 +23636,7 @@ function createRetrievalMcpTools(api) {
23096
23636
  })()
23097
23637
  };
23098
23638
  } catch (error) {
23099
- mapMcpError9(error);
23639
+ mapMcpError11(error);
23100
23640
  }
23101
23641
  },
23102
23642
  async reopen_incident(input) {
@@ -23141,7 +23681,7 @@ function createRetrievalMcpTools(api) {
23141
23681
  })()
23142
23682
  };
23143
23683
  } catch (error) {
23144
- mapMcpError9(error);
23684
+ mapMcpError11(error);
23145
23685
  }
23146
23686
  },
23147
23687
  async get_bundle(input) {
@@ -23172,7 +23712,7 @@ function createRetrievalMcpTools(api) {
23172
23712
  }
23173
23713
  );
23174
23714
  } catch (error) {
23175
- mapMcpError9(error);
23715
+ mapMcpError11(error);
23176
23716
  }
23177
23717
  },
23178
23718
  async get_logs(input) {
@@ -23192,7 +23732,7 @@ function createRetrievalMcpTools(api) {
23192
23732
  }
23193
23733
  return await api.getLogs(requestInput);
23194
23734
  } catch (error) {
23195
- mapMcpError9(error);
23735
+ mapMcpError11(error);
23196
23736
  }
23197
23737
  },
23198
23738
  async get_reproduction(input) {
@@ -23223,14 +23763,14 @@ function createRetrievalMcpTools(api) {
23223
23763
  }
23224
23764
  );
23225
23765
  } catch (error) {
23226
- mapMcpError9(error);
23766
+ mapMcpError11(error);
23227
23767
  }
23228
23768
  }
23229
23769
  };
23230
23770
  }
23231
23771
 
23232
23772
  // src/services-tools.ts
23233
- function mapMcpError10(error) {
23773
+ function mapMcpError12(error) {
23234
23774
  if (error instanceof RetrievalApiError) {
23235
23775
  throw new Error(`mcp_tool_error:${error.code}`);
23236
23776
  }
@@ -23251,14 +23791,14 @@ function createServicesMcpTools(api) {
23251
23791
  services: await api.listServices(requestInput)
23252
23792
  };
23253
23793
  } catch (error) {
23254
- mapMcpError10(error);
23794
+ mapMcpError12(error);
23255
23795
  }
23256
23796
  }
23257
23797
  };
23258
23798
  }
23259
23799
 
23260
23800
  // src/setup-tools.ts
23261
- function mapMcpError11() {
23801
+ function mapMcpError13() {
23262
23802
  throw new Error("mcp_tool_error:unknown_error");
23263
23803
  }
23264
23804
  function parseJsonOutput2(output) {
@@ -23273,7 +23813,7 @@ async function runJsonCommand2(command) {
23273
23813
  const result = await command();
23274
23814
  return parseJsonOutput2(result.output);
23275
23815
  } catch {
23276
- mapMcpError11();
23816
+ mapMcpError13();
23277
23817
  }
23278
23818
  }
23279
23819
  function createSetupMcpTools(commands) {
@@ -23332,7 +23872,7 @@ function createSetupMcpTools(commands) {
23332
23872
  }
23333
23873
 
23334
23874
  // src/slack-tools.ts
23335
- function mapMcpError12(error) {
23875
+ function mapMcpError14(error) {
23336
23876
  if (error instanceof SlackApiError) {
23337
23877
  throw new Error(`mcp_tool_error:${error.code}`);
23338
23878
  }
@@ -23349,7 +23889,7 @@ function createSlackMcpTools(api) {
23349
23889
  })
23350
23890
  };
23351
23891
  } catch (error) {
23352
- mapMcpError12(error);
23892
+ mapMcpError14(error);
23353
23893
  }
23354
23894
  },
23355
23895
  async get_slack_connect_url(input) {
@@ -23362,7 +23902,7 @@ function createSlackMcpTools(api) {
23362
23902
  })
23363
23903
  };
23364
23904
  } catch (error) {
23365
- mapMcpError12(error);
23905
+ mapMcpError14(error);
23366
23906
  }
23367
23907
  },
23368
23908
  async test_slack_destination(input) {
@@ -23375,7 +23915,7 @@ function createSlackMcpTools(api) {
23375
23915
  })
23376
23916
  };
23377
23917
  } catch (error) {
23378
- mapMcpError12(error);
23918
+ mapMcpError14(error);
23379
23919
  }
23380
23920
  },
23381
23921
  async delete_slack_destination(input) {
@@ -23388,14 +23928,14 @@ function createSlackMcpTools(api) {
23388
23928
  })
23389
23929
  };
23390
23930
  } catch (error) {
23391
- mapMcpError12(error);
23931
+ mapMcpError14(error);
23392
23932
  }
23393
23933
  }
23394
23934
  };
23395
23935
  }
23396
23936
 
23397
23937
  // src/token-tools.ts
23398
- function mapMcpError13(error) {
23938
+ function mapMcpError15(error) {
23399
23939
  if (error instanceof TokenManagementApiError) {
23400
23940
  throw new Error(`mcp_tool_error:${error.code}`);
23401
23941
  }
@@ -23416,7 +23956,7 @@ function createTokenMcpTools(api) {
23416
23956
  tokens: await api.listProjectTokens(requestInput)
23417
23957
  };
23418
23958
  } catch (error) {
23419
- mapMcpError13(error);
23959
+ mapMcpError15(error);
23420
23960
  }
23421
23961
  },
23422
23962
  async create_project_token(input) {
@@ -23429,7 +23969,7 @@ function createTokenMcpTools(api) {
23429
23969
  })
23430
23970
  };
23431
23971
  } catch (error) {
23432
- mapMcpError13(error);
23972
+ mapMcpError15(error);
23433
23973
  }
23434
23974
  },
23435
23975
  async revoke_project_token(input) {
@@ -23442,7 +23982,7 @@ function createTokenMcpTools(api) {
23442
23982
  })
23443
23983
  };
23444
23984
  } catch (error) {
23445
- mapMcpError13(error);
23985
+ mapMcpError15(error);
23446
23986
  }
23447
23987
  },
23448
23988
  async list_member_tokens(input) {
@@ -23457,7 +23997,7 @@ function createTokenMcpTools(api) {
23457
23997
  tokens: await api.listMemberTokens(requestInput)
23458
23998
  };
23459
23999
  } catch (error) {
23460
- mapMcpError13(error);
24000
+ mapMcpError15(error);
23461
24001
  }
23462
24002
  },
23463
24003
  async create_member_token(input) {
@@ -23469,7 +24009,7 @@ function createTokenMcpTools(api) {
23469
24009
  })
23470
24010
  };
23471
24011
  } catch (error) {
23472
- mapMcpError13(error);
24012
+ mapMcpError15(error);
23473
24013
  }
23474
24014
  },
23475
24015
  async revoke_member_token(input) {
@@ -23481,14 +24021,14 @@ function createTokenMcpTools(api) {
23481
24021
  })
23482
24022
  };
23483
24023
  } catch (error) {
23484
- mapMcpError13(error);
24024
+ mapMcpError15(error);
23485
24025
  }
23486
24026
  }
23487
24027
  };
23488
24028
  }
23489
24029
 
23490
24030
  // src/webhook-tools.ts
23491
- function mapMcpError14(error) {
24031
+ function mapMcpError16(error) {
23492
24032
  if (error instanceof WebhookApiError) {
23493
24033
  throw new Error(`mcp_tool_error:${error.code}`);
23494
24034
  }
@@ -23509,7 +24049,7 @@ function createWebhookMcpTools(api) {
23509
24049
  webhooks: await api.listWebhooks(requestInput)
23510
24050
  };
23511
24051
  } catch (error) {
23512
- mapMcpError14(error);
24052
+ mapMcpError16(error);
23513
24053
  }
23514
24054
  },
23515
24055
  async create_webhook(input) {
@@ -23530,13 +24070,14 @@ function createWebhookMcpTools(api) {
23530
24070
  webhook: await api.createWebhook(requestInput)
23531
24071
  };
23532
24072
  } catch (error) {
23533
- mapMcpError14(error);
24073
+ mapMcpError16(error);
23534
24074
  }
23535
24075
  },
23536
24076
  async update_webhook(input) {
23537
24077
  try {
23538
24078
  const requestInput = {
23539
24079
  bearerToken: String(input["bearerToken"]),
24080
+ projectId: String(input["projectId"]),
23540
24081
  webhookId: String(input["webhookId"])
23541
24082
  };
23542
24083
  if (typeof input["url"] === "string") {
@@ -23555,7 +24096,7 @@ function createWebhookMcpTools(api) {
23555
24096
  webhook: await api.updateWebhook(requestInput)
23556
24097
  };
23557
24098
  } catch (error) {
23558
- mapMcpError14(error);
24099
+ mapMcpError16(error);
23559
24100
  }
23560
24101
  },
23561
24102
  async delete_webhook(input) {
@@ -23563,17 +24104,19 @@ function createWebhookMcpTools(api) {
23563
24104
  return {
23564
24105
  webhook: await api.deleteWebhook({
23565
24106
  bearerToken: String(input["bearerToken"]),
24107
+ projectId: String(input["projectId"]),
23566
24108
  webhookId: String(input["webhookId"])
23567
24109
  })
23568
24110
  };
23569
24111
  } catch (error) {
23570
- mapMcpError14(error);
24112
+ mapMcpError16(error);
23571
24113
  }
23572
24114
  },
23573
24115
  async test_webhook(input) {
23574
24116
  try {
23575
24117
  const requestInput = {
23576
24118
  bearerToken: String(input["bearerToken"]),
24119
+ projectId: String(input["projectId"]),
23577
24120
  webhookId: String(input["webhookId"])
23578
24121
  };
23579
24122
  if (input["eventType"] === "verification.passed" || input["eventType"] === "verification.failed") {
@@ -23583,13 +24126,14 @@ function createWebhookMcpTools(api) {
23583
24126
  delivery: await api.testWebhook(requestInput)
23584
24127
  };
23585
24128
  } catch (error) {
23586
- mapMcpError14(error);
24129
+ mapMcpError16(error);
23587
24130
  }
23588
24131
  },
23589
24132
  async list_webhook_deliveries(input) {
23590
24133
  try {
23591
24134
  const requestInput = {
23592
24135
  bearerToken: String(input["bearerToken"]),
24136
+ projectId: String(input["projectId"]),
23593
24137
  webhookId: String(input["webhookId"])
23594
24138
  };
23595
24139
  if (typeof input["limit"] === "number") {
@@ -23599,25 +24143,26 @@ function createWebhookMcpTools(api) {
23599
24143
  deliveries: await api.listWebhookDeliveries(requestInput)
23600
24144
  };
23601
24145
  } catch (error) {
23602
- mapMcpError14(error);
24146
+ mapMcpError16(error);
23603
24147
  }
23604
24148
  },
23605
24149
  async retry_webhook_delivery(input) {
23606
24150
  try {
23607
24151
  return await api.retryWebhookDelivery({
23608
24152
  bearerToken: String(input["bearerToken"]),
24153
+ projectId: String(input["projectId"]),
23609
24154
  webhookId: String(input["webhookId"]),
23610
24155
  deliveryId: String(input["deliveryId"])
23611
24156
  });
23612
24157
  } catch (error) {
23613
- mapMcpError14(error);
24158
+ mapMcpError16(error);
23614
24159
  }
23615
24160
  }
23616
24161
  };
23617
24162
  }
23618
24163
 
23619
24164
  // src/weekly-report-tools.ts
23620
- function mapMcpError15(error) {
24165
+ function mapMcpError17(error) {
23621
24166
  if (error instanceof WeeklyReportApiError) {
23622
24167
  throw new Error(`mcp_tool_error:${error.code}`);
23623
24168
  }
@@ -23635,7 +24180,7 @@ function createWeeklyReportMcpTools(api) {
23635
24180
  })
23636
24181
  };
23637
24182
  } catch (error) {
23638
- mapMcpError15(error);
24183
+ mapMcpError17(error);
23639
24184
  }
23640
24185
  },
23641
24186
  async create_weekly_report_channel(input) {
@@ -23651,7 +24196,7 @@ function createWeeklyReportMcpTools(api) {
23651
24196
  })
23652
24197
  };
23653
24198
  } catch (error) {
23654
- mapMcpError15(error);
24199
+ mapMcpError17(error);
23655
24200
  }
23656
24201
  },
23657
24202
  async update_weekly_report_channel(input) {
@@ -23666,7 +24211,7 @@ function createWeeklyReportMcpTools(api) {
23666
24211
  })
23667
24212
  };
23668
24213
  } catch (error) {
23669
- mapMcpError15(error);
24214
+ mapMcpError17(error);
23670
24215
  }
23671
24216
  },
23672
24217
  async delete_weekly_report_channel(input) {
@@ -23678,7 +24223,7 @@ function createWeeklyReportMcpTools(api) {
23678
24223
  })
23679
24224
  };
23680
24225
  } catch (error) {
23681
- mapMcpError15(error);
24226
+ mapMcpError17(error);
23682
24227
  }
23683
24228
  }
23684
24229
  };
@@ -23726,6 +24271,7 @@ async function createDefaultMcpTools(input = {}) {
23726
24271
  ...retrievalApi,
23727
24272
  getLogs: (requestInput) => retrievalApi.listLogs(requestInput)
23728
24273
  }),
24274
+ ...createImprovementMcpTools(retrievalApi),
23729
24275
  ...createServicesMcpTools(retrievalApi),
23730
24276
  ...createTokenMcpTools(createTokenManagementApi(httpClient)),
23731
24277
  ...createWebhookMcpTools(createWebhookApi(httpClient)),
@@ -23734,6 +24280,7 @@ async function createDefaultMcpTools(input = {}) {
23734
24280
  ...createAlertMcpTools(createAlertApi(httpClient)),
23735
24281
  ...createProjectMcpTools(createProjectManagementApi(httpClient)),
23736
24282
  ...createCapturePolicyMcpTools(createCapturePolicyApi(httpClient)),
24283
+ ...createImprovementSettingsMcpTools(createImprovementSettingsApi(httpClient)),
23737
24284
  ...createProbeMcpTools(createProbeApi(httpClient)),
23738
24285
  ...createBillingMcpTools(createBillingApi(httpClient)),
23739
24286
  ...createMemberMcpTools(createMemberApi(httpClient)),
@@ -25056,6 +25603,10 @@ var incidentLookupInputSchema = external_exports.object({
25056
25603
  source: sourceSchema,
25057
25604
  incidentId: external_exports.string()
25058
25605
  });
25606
+ var improvementLookupInputSchema = external_exports.object({
25607
+ bearerToken: external_exports.string(),
25608
+ improvementId: external_exports.string()
25609
+ });
25059
25610
  var MCP_TOOL_CATALOG = [
25060
25611
  {
25061
25612
  name: "doctor",
@@ -25169,10 +25720,64 @@ var MCP_TOOL_CATALOG = [
25169
25720
  limit: external_exports.number().optional()
25170
25721
  })
25171
25722
  },
25723
+ {
25724
+ name: "list_improvements",
25725
+ group: "improvements",
25726
+ description: "List hosted improvement opportunities for the current workspace or a specific project.",
25727
+ inputSchema: external_exports.object({
25728
+ bearerToken: external_exports.string(),
25729
+ projectId: external_exports.string().optional(),
25730
+ environment: external_exports.string().optional(),
25731
+ service: external_exports.string().optional(),
25732
+ status: external_exports.string().optional(),
25733
+ severity: external_exports.string().optional(),
25734
+ kind: external_exports.string().optional(),
25735
+ cursor: external_exports.string().optional(),
25736
+ limit: external_exports.number().optional()
25737
+ })
25738
+ },
25739
+ {
25740
+ name: "get_improvement",
25741
+ group: "improvements",
25742
+ description: "Fetch a single hosted improvement opportunity by id.",
25743
+ inputSchema: improvementLookupInputSchema
25744
+ },
25745
+ {
25746
+ name: "get_improvement_bundle",
25747
+ group: "improvements",
25748
+ description: "Fetch the hosted improvement bundle artifact for a project improvement opportunity.",
25749
+ inputSchema: external_exports.object({
25750
+ bearerToken: external_exports.string(),
25751
+ projectId: external_exports.string(),
25752
+ improvementId: external_exports.string()
25753
+ })
25754
+ },
25755
+ {
25756
+ name: "resolve_improvement",
25757
+ group: "improvements",
25758
+ description: "Resolve a hosted improvement opportunity.",
25759
+ inputSchema: improvementLookupInputSchema
25760
+ },
25761
+ {
25762
+ name: "reopen_improvement",
25763
+ group: "improvements",
25764
+ description: "Reopen a hosted improvement opportunity.",
25765
+ inputSchema: improvementLookupInputSchema
25766
+ },
25767
+ {
25768
+ name: "snooze_improvement",
25769
+ group: "improvements",
25770
+ description: "Snooze a hosted improvement opportunity until an ISO8601 timestamp.",
25771
+ inputSchema: external_exports.object({
25772
+ bearerToken: external_exports.string(),
25773
+ improvementId: external_exports.string(),
25774
+ snoozedUntil: external_exports.string()
25775
+ })
25776
+ },
25172
25777
  {
25173
25778
  name: "get_github_status",
25174
25779
  group: "github",
25175
- description: "Get the organization GitHub App installation status and optional project repo assignment.",
25780
+ description: "Get the project GitHub App installation status and optional project repo assignment.",
25176
25781
  inputSchema: external_exports.object({
25177
25782
  bearerToken: external_exports.string(),
25178
25783
  projectId: external_exports.string().optional()
@@ -25181,9 +25786,10 @@ var MCP_TOOL_CATALOG = [
25181
25786
  {
25182
25787
  name: "list_github_repositories",
25183
25788
  group: "github",
25184
- description: "List repositories available to the organization GitHub App installation.",
25789
+ description: "List repositories available to the project GitHub App installation for owner/admin callers.",
25185
25790
  inputSchema: external_exports.object({
25186
- bearerToken: external_exports.string()
25791
+ bearerToken: external_exports.string(),
25792
+ projectId: external_exports.string().optional()
25187
25793
  })
25188
25794
  },
25189
25795
  {
@@ -25249,7 +25855,7 @@ var MCP_TOOL_CATALOG = [
25249
25855
  inputSchema: external_exports.object({
25250
25856
  bearerToken: external_exports.string(),
25251
25857
  projectId: external_exports.string(),
25252
- status: external_exports.enum(["pending", "retrying", "delivered", "failed"]).optional(),
25858
+ status: external_exports.enum(["pending", "retrying", "delivered", "failed", "skipped"]).optional(),
25253
25859
  limit: external_exports.number().optional()
25254
25860
  })
25255
25861
  },
@@ -25369,6 +25975,7 @@ var MCP_TOOL_CATALOG = [
25369
25975
  description: "Update a webhook endpoint.",
25370
25976
  inputSchema: external_exports.object({
25371
25977
  bearerToken: external_exports.string(),
25978
+ projectId: external_exports.string(),
25372
25979
  webhookId: external_exports.string(),
25373
25980
  url: external_exports.string().optional(),
25374
25981
  events: external_exports.array(external_exports.string()).optional(),
@@ -25382,6 +25989,7 @@ var MCP_TOOL_CATALOG = [
25382
25989
  description: "Delete a webhook endpoint.",
25383
25990
  inputSchema: external_exports.object({
25384
25991
  bearerToken: external_exports.string(),
25992
+ projectId: external_exports.string(),
25385
25993
  webhookId: external_exports.string()
25386
25994
  })
25387
25995
  },
@@ -25391,6 +25999,7 @@ var MCP_TOOL_CATALOG = [
25391
25999
  description: "Queue a synthetic webhook delivery.",
25392
26000
  inputSchema: external_exports.object({
25393
26001
  bearerToken: external_exports.string(),
26002
+ projectId: external_exports.string(),
25394
26003
  webhookId: external_exports.string(),
25395
26004
  eventType: verificationEventTypeSchema.optional()
25396
26005
  })
@@ -25401,6 +26010,7 @@ var MCP_TOOL_CATALOG = [
25401
26010
  description: "List deliveries for a webhook endpoint.",
25402
26011
  inputSchema: external_exports.object({
25403
26012
  bearerToken: external_exports.string(),
26013
+ projectId: external_exports.string(),
25404
26014
  webhookId: external_exports.string(),
25405
26015
  limit: external_exports.number().optional()
25406
26016
  })
@@ -25411,6 +26021,7 @@ var MCP_TOOL_CATALOG = [
25411
26021
  description: "Retry a webhook delivery.",
25412
26022
  inputSchema: external_exports.object({
25413
26023
  bearerToken: external_exports.string(),
26024
+ projectId: external_exports.string(),
25414
26025
  webhookId: external_exports.string(),
25415
26026
  deliveryId: external_exports.string()
25416
26027
  })
@@ -25529,6 +26140,7 @@ var MCP_TOOL_CATALOG = [
25529
26140
  description: "Update an alert rule.",
25530
26141
  inputSchema: external_exports.object({
25531
26142
  bearerToken: external_exports.string(),
26143
+ projectId: external_exports.string(),
25532
26144
  alertId: external_exports.string(),
25533
26145
  serviceId: external_exports.string().nullable().optional(),
25534
26146
  channel: external_exports.string().optional(),
@@ -25544,6 +26156,7 @@ var MCP_TOOL_CATALOG = [
25544
26156
  description: "Delete an alert rule.",
25545
26157
  inputSchema: external_exports.object({
25546
26158
  bearerToken: external_exports.string(),
26159
+ projectId: external_exports.string(),
25547
26160
  alertId: external_exports.string()
25548
26161
  })
25549
26162
  },
@@ -25614,6 +26227,28 @@ var MCP_TOOL_CATALOG = [
25614
26227
  })
25615
26228
  })
25616
26229
  },
26230
+ {
26231
+ name: "get_improvement_settings",
26232
+ group: "improvement_settings",
26233
+ description: "Get automated improvement settings for a project.",
26234
+ inputSchema: external_exports.object({
26235
+ bearerToken: external_exports.string(),
26236
+ projectId: external_exports.string()
26237
+ })
26238
+ },
26239
+ {
26240
+ name: "update_improvement_settings",
26241
+ group: "improvement_settings",
26242
+ description: "Update automated improvement settings for a project.",
26243
+ inputSchema: external_exports.object({
26244
+ bearerToken: external_exports.string(),
26245
+ projectId: external_exports.string(),
26246
+ update: external_exports.object({
26247
+ automated_improvement_bundles_enabled: external_exports.boolean().optional(),
26248
+ improvement_bundle_sensitivity: external_exports.enum(["high_confidence", "balanced", "verbose"]).optional()
26249
+ })
26250
+ })
26251
+ },
25617
26252
  {
25618
26253
  name: "activate_probe",
25619
26254
  group: "probes",
@@ -25682,56 +26317,62 @@ var MCP_TOOL_CATALOG = [
25682
26317
  })
25683
26318
  },
25684
26319
  {
25685
- name: "list_members",
26320
+ name: "list_project_members",
25686
26321
  group: "members",
25687
- description: "List organization members.",
26322
+ description: "List members for a project.",
25688
26323
  inputSchema: external_exports.object({
25689
- bearerToken: external_exports.string()
26324
+ bearerToken: external_exports.string(),
26325
+ projectId: external_exports.string()
25690
26326
  })
25691
26327
  },
25692
26328
  {
25693
- name: "list_member_invites",
26329
+ name: "list_project_member_invites",
25694
26330
  group: "members",
25695
- description: "List pending organization invites.",
26331
+ description: "List pending invites for a project.",
25696
26332
  inputSchema: external_exports.object({
25697
- bearerToken: external_exports.string()
26333
+ bearerToken: external_exports.string(),
26334
+ projectId: external_exports.string()
25698
26335
  })
25699
26336
  },
25700
26337
  {
25701
- name: "invite_member",
26338
+ name: "invite_project_member",
25702
26339
  group: "members",
25703
- description: "Invite a member to the organization.",
26340
+ description: "Invite a collaborator to a project.",
25704
26341
  inputSchema: external_exports.object({
25705
26342
  bearerToken: external_exports.string(),
26343
+ projectId: external_exports.string(),
25706
26344
  email: external_exports.string(),
25707
26345
  role: external_exports.string()
25708
26346
  })
25709
26347
  },
25710
26348
  {
25711
- name: "cancel_member_invite",
26349
+ name: "cancel_project_member_invite",
25712
26350
  group: "members",
25713
- description: "Cancel a pending organization invite.",
26351
+ description: "Cancel a pending project invite.",
25714
26352
  inputSchema: external_exports.object({
25715
26353
  bearerToken: external_exports.string(),
26354
+ projectId: external_exports.string(),
25716
26355
  inviteId: external_exports.string()
25717
26356
  })
25718
26357
  },
25719
26358
  {
25720
- name: "update_member_role",
26359
+ name: "update_project_member_role",
25721
26360
  group: "members",
25722
- description: "Update the role of an organization member.",
26361
+ description: "Update the role of a project collaborator.",
25723
26362
  inputSchema: external_exports.object({
25724
26363
  bearerToken: external_exports.string(),
26364
+ projectId: external_exports.string(),
25725
26365
  userId: external_exports.string(),
25726
26366
  role: external_exports.string()
25727
26367
  })
25728
26368
  },
25729
26369
  {
25730
- name: "remove_member",
26370
+ name: "remove_project_member",
25731
26371
  group: "members",
25732
- description: "Remove a member from the organization.",
26372
+ description: "Remove a collaborator from a project.",
25733
26373
  inputSchema: external_exports.object({
25734
26374
  bearerToken: external_exports.string(),
26375
+ projectId: external_exports.string(),
25735
26376
  userId: external_exports.string()
25736
26377
  })
25737
26378
  },