@contentful/mcp-tools 0.12.10 → 0.12.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -70,6 +70,8 @@ interface ContentfulConfig {
70
70
  deliveryToken?: string;
71
71
  /** Contentful Delivery API host (used with deliveryToken for custom CDA endpoints) */
72
72
  hostDelivery?: string;
73
+ /** Server-controlled root directory for space export output */
74
+ exportBaseDir?: string;
73
75
  /** Environment IDs that are protected from write/delete operations */
74
76
  protectedEnvironments?: string[];
75
77
  /** Maximum number of IDs allowed in a single bulk-operation tool call. Defaults to 10 when unset. */
@@ -8909,7 +8911,7 @@ declare class ContentfulMcpTools {
8909
8911
  description: string;
8910
8912
  inputParams: {
8911
8913
  organizationId: zod.ZodOptional<zod.ZodString>;
8912
- metricKey: zod.ZodEnum<["api_call_cma", "api_call_cpa", "api_call_cda", "api_call_graphql", "asset_bandwidth", "functions_invocations", "ai_action_invocation", "ai_action_word_count", "ai_consumption_unit"]>;
8914
+ metricKey: zod.ZodEnum<["api_call_cma", "api_call_cpa", "api_call_cda", "api_call_graphql", "asset_bandwidth", "functions_invocations", "ai_action_invocation", "ai_action_word_count", "ai_consumption_unit", "monthly_active_profiles"]>;
8913
8915
  dateGte: zod.ZodString;
8914
8916
  dateLte: zod.ZodString;
8915
8917
  granularity: zod.ZodOptional<zod.ZodEnum<["P1D", "P1M"]>>;
@@ -8925,7 +8927,7 @@ declare class ContentfulMcpTools {
8925
8927
  openWorldHint: boolean;
8926
8928
  };
8927
8929
  tool: (params: {
8928
- metricKey: "api_call_cma" | "api_call_cpa" | "api_call_cda" | "api_call_graphql" | "asset_bandwidth" | "functions_invocations" | "ai_action_invocation" | "ai_action_word_count" | "ai_consumption_unit";
8930
+ metricKey: "api_call_cma" | "api_call_cpa" | "api_call_cda" | "api_call_graphql" | "asset_bandwidth" | "functions_invocations" | "ai_action_invocation" | "ai_action_word_count" | "ai_consumption_unit" | "monthly_active_profiles";
8929
8931
  dateGte: string;
8930
8932
  dateLte: string;
8931
8933
  filter?: Record<string, string | string[]> | undefined;
@@ -10532,9 +10534,7 @@ declare class ContentfulMcpTools {
10532
10534
  export: zod.ZodOptional<zod.ZodObject<{
10533
10535
  spaceId: zod.ZodOptional<zod.ZodString>;
10534
10536
  environmentId: zod.ZodOptional<zod.ZodString>;
10535
- exportDir: zod.ZodOptional<zod.ZodOptional<zod.ZodString>>;
10536
10537
  saveFile: zod.ZodOptional<zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>>;
10537
- contentFile: zod.ZodOptional<zod.ZodOptional<zod.ZodString>>;
10538
10538
  includeDrafts: zod.ZodOptional<zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>>;
10539
10539
  includeArchived: zod.ZodOptional<zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>>;
10540
10540
  skipContentModel: zod.ZodOptional<zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>>;
@@ -10605,14 +10605,11 @@ declare class ContentfulMcpTools {
10605
10605
  }, zod.ZodTypeAny, "passthrough">>>>;
10606
10606
  downloadAssets: zod.ZodOptional<zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>>;
10607
10607
  maxAllowedLimit: zod.ZodOptional<zod.ZodDefault<zod.ZodOptional<zod.ZodNumber>>>;
10608
- errorLogFile: zod.ZodOptional<zod.ZodOptional<zod.ZodString>>;
10609
10608
  useVerboseRenderer: zod.ZodOptional<zod.ZodOptional<zod.ZodBoolean>>;
10610
10609
  }, "strip", zod.ZodTypeAny, {
10611
10610
  spaceId?: string | undefined;
10612
10611
  environmentId?: string | undefined;
10613
- exportDir?: string | undefined;
10614
10612
  saveFile?: boolean | undefined;
10615
- contentFile?: string | undefined;
10616
10613
  includeDrafts?: boolean | undefined;
10617
10614
  includeArchived?: boolean | undefined;
10618
10615
  skipContentModel?: boolean | undefined;
@@ -10627,14 +10624,11 @@ declare class ContentfulMcpTools {
10627
10624
  queryAssets?: unknown;
10628
10625
  downloadAssets?: boolean | undefined;
10629
10626
  maxAllowedLimit?: number | undefined;
10630
- errorLogFile?: string | undefined;
10631
10627
  useVerboseRenderer?: boolean | undefined;
10632
10628
  }, {
10633
10629
  spaceId?: string | undefined;
10634
10630
  environmentId?: string | undefined;
10635
- exportDir?: string | undefined;
10636
10631
  saveFile?: boolean | undefined;
10637
- contentFile?: string | undefined;
10638
10632
  includeDrafts?: boolean | undefined;
10639
10633
  includeArchived?: boolean | undefined;
10640
10634
  skipContentModel?: boolean | undefined;
@@ -10663,7 +10657,6 @@ declare class ContentfulMcpTools {
10663
10657
  }, zod.ZodTypeAny, "passthrough"> | undefined;
10664
10658
  downloadAssets?: boolean | undefined;
10665
10659
  maxAllowedLimit?: number | undefined;
10666
- errorLogFile?: string | undefined;
10667
10660
  useVerboseRenderer?: boolean | undefined;
10668
10661
  }>>;
10669
10662
  import: zod.ZodOptional<zod.ZodObject<{
@@ -10690,10 +10683,9 @@ declare class ContentfulMcpTools {
10690
10683
  environmentId?: string | undefined;
10691
10684
  retryLimit?: number | undefined;
10692
10685
  timeout?: number | undefined;
10693
- contentFile?: string | undefined;
10694
10686
  skipContentModel?: boolean | undefined;
10695
- errorLogFile?: string | undefined;
10696
10687
  useVerboseRenderer?: boolean | undefined;
10688
+ contentFile?: string | undefined;
10697
10689
  contentModelOnly?: boolean | undefined;
10698
10690
  skipLocales?: boolean | undefined;
10699
10691
  skipContentUpdates?: boolean | undefined;
@@ -10702,16 +10694,16 @@ declare class ContentfulMcpTools {
10702
10694
  skipAssetUpdates?: boolean | undefined;
10703
10695
  assetsDirectory?: string | undefined;
10704
10696
  rateLimit?: number | undefined;
10697
+ errorLogFile?: string | undefined;
10705
10698
  }, {
10706
10699
  content?: Record<string, any> | undefined;
10707
10700
  spaceId?: string | undefined;
10708
10701
  environmentId?: string | undefined;
10709
10702
  retryLimit?: number | undefined;
10710
10703
  timeout?: number | undefined;
10711
- contentFile?: string | undefined;
10712
10704
  skipContentModel?: boolean | undefined;
10713
- errorLogFile?: string | undefined;
10714
10705
  useVerboseRenderer?: boolean | undefined;
10706
+ contentFile?: string | undefined;
10715
10707
  contentModelOnly?: boolean | undefined;
10716
10708
  skipLocales?: boolean | undefined;
10717
10709
  skipContentUpdates?: boolean | undefined;
@@ -10720,6 +10712,7 @@ declare class ContentfulMcpTools {
10720
10712
  skipAssetUpdates?: boolean | undefined;
10721
10713
  assetsDirectory?: string | undefined;
10722
10714
  rateLimit?: number | undefined;
10715
+ errorLogFile?: string | undefined;
10723
10716
  }>>;
10724
10717
  };
10725
10718
  annotations: {
@@ -10734,9 +10727,7 @@ declare class ContentfulMcpTools {
10734
10727
  export?: {
10735
10728
  spaceId?: string | undefined;
10736
10729
  environmentId?: string | undefined;
10737
- exportDir?: string | undefined;
10738
10730
  saveFile?: boolean | undefined;
10739
- contentFile?: string | undefined;
10740
10731
  includeDrafts?: boolean | undefined;
10741
10732
  includeArchived?: boolean | undefined;
10742
10733
  skipContentModel?: boolean | undefined;
@@ -10751,7 +10742,6 @@ declare class ContentfulMcpTools {
10751
10742
  queryAssets?: unknown;
10752
10743
  downloadAssets?: boolean | undefined;
10753
10744
  maxAllowedLimit?: number | undefined;
10754
- errorLogFile?: string | undefined;
10755
10745
  useVerboseRenderer?: boolean | undefined;
10756
10746
  } | undefined;
10757
10747
  import?: {
@@ -10760,10 +10750,9 @@ declare class ContentfulMcpTools {
10760
10750
  environmentId?: string | undefined;
10761
10751
  retryLimit?: number | undefined;
10762
10752
  timeout?: number | undefined;
10763
- contentFile?: string | undefined;
10764
10753
  skipContentModel?: boolean | undefined;
10765
- errorLogFile?: string | undefined;
10766
10754
  useVerboseRenderer?: boolean | undefined;
10755
+ contentFile?: string | undefined;
10767
10756
  contentModelOnly?: boolean | undefined;
10768
10757
  skipLocales?: boolean | undefined;
10769
10758
  skipContentUpdates?: boolean | undefined;
@@ -10772,6 +10761,7 @@ declare class ContentfulMcpTools {
10772
10761
  skipAssetUpdates?: boolean | undefined;
10773
10762
  assetsDirectory?: string | undefined;
10774
10763
  rateLimit?: number | undefined;
10764
+ errorLogFile?: string | undefined;
10775
10765
  } | undefined;
10776
10766
  }, extra?: _modelcontextprotocol_sdk_shared_protocol_js.RequestHandlerExtra<_modelcontextprotocol_sdk_types_js.ServerRequest, _modelcontextprotocol_sdk_types_js.ServerNotification>) => Promise<ToolResponse>;
10777
10767
  };
@@ -10782,9 +10772,7 @@ declare class ContentfulMcpTools {
10782
10772
  spaceId: zod.ZodString;
10783
10773
  environmentId: zod.ZodString;
10784
10774
  } & {
10785
- exportDir: zod.ZodOptional<zod.ZodString>;
10786
10775
  saveFile: zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>;
10787
- contentFile: zod.ZodOptional<zod.ZodString>;
10788
10776
  includeDrafts: zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>;
10789
10777
  includeArchived: zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>;
10790
10778
  skipContentModel: zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>;
@@ -10855,7 +10843,6 @@ declare class ContentfulMcpTools {
10855
10843
  }, zod.ZodTypeAny, "passthrough">>>;
10856
10844
  downloadAssets: zod.ZodDefault<zod.ZodOptional<zod.ZodBoolean>>;
10857
10845
  maxAllowedLimit: zod.ZodDefault<zod.ZodOptional<zod.ZodNumber>>;
10858
- errorLogFile: zod.ZodOptional<zod.ZodString>;
10859
10846
  useVerboseRenderer: zod.ZodOptional<zod.ZodBoolean>;
10860
10847
  };
10861
10848
  annotations: {
@@ -10879,11 +10866,8 @@ declare class ContentfulMcpTools {
10879
10866
  contentOnly: boolean;
10880
10867
  downloadAssets: boolean;
10881
10868
  maxAllowedLimit: number;
10882
- exportDir?: string | undefined;
10883
- contentFile?: string | undefined;
10884
10869
  queryEntries?: unknown;
10885
10870
  queryAssets?: unknown;
10886
- errorLogFile?: string | undefined;
10887
10871
  useVerboseRenderer?: boolean | undefined;
10888
10872
  }, extra?: _modelcontextprotocol_sdk_shared_protocol_js.RequestHandlerExtra<_modelcontextprotocol_sdk_types_js.ServerRequest, _modelcontextprotocol_sdk_types_js.ServerNotification>) => Promise<ToolResponse>;
10889
10873
  };
@@ -10930,10 +10914,10 @@ declare class ContentfulMcpTools {
10930
10914
  skipAssetUpdates: boolean;
10931
10915
  rateLimit: number;
10932
10916
  content?: Record<string, any> | undefined;
10933
- contentFile?: string | undefined;
10934
- errorLogFile?: string | undefined;
10935
10917
  useVerboseRenderer?: boolean | undefined;
10918
+ contentFile?: string | undefined;
10936
10919
  assetsDirectory?: string | undefined;
10920
+ errorLogFile?: string | undefined;
10937
10921
  }, extra?: _modelcontextprotocol_sdk_shared_protocol_js.RequestHandlerExtra<_modelcontextprotocol_sdk_types_js.ServerRequest, _modelcontextprotocol_sdk_types_js.ServerNotification>) => Promise<ToolResponse>;
10938
10922
  };
10939
10923
  spaceToSpaceMigrationHandler: {
package/dist/index.js CHANGED
@@ -270,7 +270,7 @@ var InvokeAiActionToolParams = BaseToolSchema.extend({
270
270
  async function pollForCompletion(contentfulClient, params, aiActions, pollInterval = 3e4, maxAttempts = 10) {
271
271
  const completedActions = /* @__PURE__ */ new Map();
272
272
  for (let attempt = 0; attempt < maxAttempts && completedActions.size < aiActions.length; attempt++) {
273
- await new Promise((resolve) => setTimeout(resolve, pollInterval));
273
+ await new Promise((resolve2) => setTimeout(resolve2, pollInterval));
274
274
  await Promise.allSettled(
275
275
  aiActions.filter((action) => !completedActions.has(action.sys.id)).map(async (action) => {
276
276
  try {
@@ -1153,7 +1153,7 @@ async function waitForBulkActionCompletion(contentfulClient, baseParams, bulkAct
1153
1153
  bulkActionId
1154
1154
  });
1155
1155
  while (action.sys.status === "inProgress" || action.sys.status === "created") {
1156
- await new Promise((resolve) => setTimeout(resolve, 1e3));
1156
+ await new Promise((resolve2) => setTimeout(resolve2, 1e3));
1157
1157
  action = await contentfulClient.bulkAction.get({
1158
1158
  ...baseParams,
1159
1159
  bulkActionId
@@ -5626,7 +5626,8 @@ var AGGREGATED_USAGE_METRIC_KEYS = [
5626
5626
  "functions_invocations",
5627
5627
  "ai_action_invocation",
5628
5628
  "ai_action_word_count",
5629
- "ai_consumption_unit"
5629
+ "ai_consumption_unit",
5630
+ "monthly_active_profiles"
5630
5631
  ];
5631
5632
  var FilterValueSchema = z80.union([
5632
5633
  z80.string().min(1),
@@ -5637,7 +5638,7 @@ var GetUsagesToolParams = z80.object({
5637
5638
  "Organization ID. If omitted, falls back to the ORGANIZATION_ID configured on the server."
5638
5639
  ),
5639
5640
  metricKey: z80.enum(AGGREGATED_USAGE_METRIC_KEYS).describe(
5640
- 'Metric to aggregate. Availability depends on the products enabled for the organization. Allowed dimensions per metric (used by "group", "filter", and "order", all in the form sys.dimensions.<name>.sys.<suffix>): api_call_cma / api_call_cpa / api_call_cda / api_call_graphql \u2192 sys.dimensions.space.sys.id. asset_bandwidth \u2192 sys.dimensions.space.sys.id, sys.dimensions.asset.sys.id. functions_invocations \u2192 sys.dimensions.space.sys.id, sys.dimensions.app.sys.id, sys.dimensions.function.sys.id. ai_action_invocation / ai_action_word_count / ai_consumption_unit \u2192 sys.dimensions.space.sys.id, sys.dimensions.ai_action.sys.id, sys.dimensions.model.sys.provider, sys.dimensions.model.sys.id.'
5641
+ 'Metric to aggregate. Availability depends on the products enabled for the organization. Allowed dimensions per metric (used by "group", "filter", and "order", all in the form sys.dimensions.<name>.sys.<suffix>): api_call_cma / api_call_cpa / api_call_cda / api_call_graphql \u2192 sys.dimensions.space.sys.id. asset_bandwidth \u2192 sys.dimensions.space.sys.id, sys.dimensions.asset.sys.id. functions_invocations \u2192 sys.dimensions.space.sys.id, sys.dimensions.app.sys.id, sys.dimensions.function.sys.id. ai_action_invocation / ai_action_word_count / ai_consumption_unit \u2192 sys.dimensions.space.sys.id, sys.dimensions.ai_action.sys.id, sys.dimensions.model.sys.provider, sys.dimensions.model.sys.id. monthly_active_profiles (MAPs) has no dimensions \u2014 do not pass "group", "filter", or "order" with it. MAPs is calendar-month only: use granularity="P1M" ("P1D" is not meaningful for it).'
5641
5642
  ),
5642
5643
  dateGte: z80.string().describe(
5643
5644
  "Start date (inclusive) in ISO-8601 format (YYYY-MM-DD or full date-time). Sent as query param date[gte]. Max lookback: 12 months from now."
@@ -5704,7 +5705,8 @@ function getUsagesTool(config) {
5704
5705
  limit: collection.limit,
5705
5706
  skip: collection.skip,
5706
5707
  metricKey,
5707
- organizationId
5708
+ organizationId,
5709
+ dataLastUpdatedAt: collection.dataLastUpdatedAt
5708
5710
  });
5709
5711
  }
5710
5712
  return withErrorHandling(tool2, "Error retrieving usage");
@@ -5728,6 +5730,10 @@ function createUsageTools(config) {
5728
5730
  };
5729
5731
  }
5730
5732
 
5733
+ // src/tools/jobs/space-to-space-migration/exportSpace.ts
5734
+ import { mkdir, mkdtemp, realpath } from "fs/promises";
5735
+ import { join, resolve } from "path";
5736
+
5731
5737
  // src/tools/jobs/space-to-space-migration/types.ts
5732
5738
  import { z as z82 } from "zod";
5733
5739
 
@@ -5766,11 +5772,7 @@ function stripUnsupportedQueryKeys(knownKeys) {
5766
5772
  };
5767
5773
  }
5768
5774
  var ExportParamsSchema = BaseToolSchema.extend({
5769
- exportDir: z82.string().optional().describe(
5770
- "Directory to save the exported space data (optional, defaults to current directory)"
5771
- ),
5772
5775
  saveFile: z82.boolean().optional().default(true).describe("Save the exported space data to a file"),
5773
- contentFile: z82.string().optional().describe("Custom filename for the exported space data (optional)"),
5774
5776
  includeDrafts: z82.boolean().optional().default(false).describe("Include draft entries in the export"),
5775
5777
  includeArchived: z82.boolean().optional().default(false).describe("Include archived entries in the export"),
5776
5778
  skipContentModel: z82.boolean().optional().default(false).describe("Skip exporting content types"),
@@ -5785,7 +5787,6 @@ var ExportParamsSchema = BaseToolSchema.extend({
5785
5787
  queryAssets: AssetQuerySchema.passthrough().transform(stripUnsupportedQueryKeys(Object.keys(AssetQuerySchema.shape))).optional().describe("Export only assets that match query parameters"),
5786
5788
  downloadAssets: z82.boolean().optional().default(false).describe("Download actual asset files"),
5787
5789
  maxAllowedLimit: z82.number().optional().default(1e3).describe("Maximum number of items per request"),
5788
- errorLogFile: z82.string().optional().describe("Path to error log output file"),
5789
5790
  useVerboseRenderer: z82.boolean().optional().describe("Line-by-line logging, useful for CI")
5790
5791
  });
5791
5792
  var ImportParamsSchema = BaseToolSchema.extend({
@@ -5809,6 +5810,14 @@ var ImportParamsSchema = BaseToolSchema.extend({
5809
5810
  });
5810
5811
 
5811
5812
  // src/tools/jobs/space-to-space-migration/exportSpace.ts
5813
+ var EXPORT_FILE_NAME = "contentful-export.json";
5814
+ var EXPORT_ERROR_LOG_FILE_NAME = "contentful-export-error.log";
5815
+ async function createExportDirectory(baseDir) {
5816
+ const configuredBase = resolve(baseDir ?? process.cwd());
5817
+ await mkdir(configuredBase, { recursive: true });
5818
+ const canonicalBase = await realpath(configuredBase);
5819
+ return mkdtemp(join(canonicalBase, "contentful-export-"));
5820
+ }
5812
5821
  function createExportSpaceTool(config) {
5813
5822
  async function tool2(args) {
5814
5823
  const clientConfig = createClientConfig(config);
@@ -5818,12 +5827,16 @@ function createExportSpaceTool(config) {
5818
5827
  }
5819
5828
  const safeOptions = ExportParamsSchema.parse({
5820
5829
  ...args,
5821
- environmentId: args.environmentId || "master",
5822
- exportDir: args.exportDir || process.cwd(),
5823
- contentFile: args.contentFile || `contentful-export-${args.spaceId}.json`
5830
+ environmentId: args.environmentId || "master"
5824
5831
  });
5832
+ const exportDir = await createExportDirectory(config.exportBaseDir);
5825
5833
  const exportOptions = {
5826
5834
  ...safeOptions,
5835
+ exportDir,
5836
+ contentFile: EXPORT_FILE_NAME,
5837
+ // contentful-export resolves a caller-provided errorLogFile relative to
5838
+ // process.cwd(). Pass an absolute, server-generated path instead.
5839
+ errorLogFile: join(exportDir, EXPORT_ERROR_LOG_FILE_NAME),
5827
5840
  managementToken,
5828
5841
  host: config.host ?? "api.contentful.com",
5829
5842
  ...config.deliveryToken && { deliveryToken: config.deliveryToken },
@@ -5831,15 +5844,11 @@ function createExportSpaceTool(config) {
5831
5844
  };
5832
5845
  try {
5833
5846
  const contentfulExport = await import("contentful-export");
5834
- const path = await import("path");
5835
5847
  const result = await contentfulExport.default(exportOptions);
5836
- const exportPath = path.join(
5837
- exportOptions.exportDir,
5838
- exportOptions.contentFile
5839
- );
5848
+ const exportPath = join(exportDir, EXPORT_FILE_NAME);
5840
5849
  return createSuccessResponse("Space exported successfully", {
5841
- spaceId: args.spaceId,
5842
- environmentId: args.environmentId || "master",
5850
+ spaceId: safeOptions.spaceId,
5851
+ environmentId: safeOptions.environmentId,
5843
5852
  exportPath,
5844
5853
  contentTypes: result.contentTypes?.length || 0,
5845
5854
  entries: result.entries?.length || 0,
@@ -5873,9 +5882,7 @@ spaceId // [string] [required] - ID of the space with source dat
5873
5882
  `,
5874
5883
  optionalParams: `
5875
5884
  environmentId // [string] [default: 'master'] - ID of the environment in the source space
5876
- exportDir // [string] [default: process.cwd()] - Path to export JSON output
5877
5885
  saveFile // [boolean] [default: true] - Save the export as a JSON file
5878
- contentFile // [string] - Filename for exported data
5879
5886
 
5880
5887
  includeDrafts // [boolean] [default: false] - Include drafts in exported entries
5881
5888
  includeArchived // [boolean] [default: false] - Include archived entries
@@ -5894,7 +5901,6 @@ downloadAssets // [boolean] - Download asset files to disk
5894
5901
 
5895
5902
  maxAllowedLimit // [number] [default: 1000] - Page size for requests
5896
5903
 
5897
- errorLogFile // [string] - Path to error log output file
5898
5904
  useVerboseRenderer // [boolean] [default: false] - Line-by-line logging, useful for CI
5899
5905
  `
5900
5906
  },
@@ -6028,17 +6034,18 @@ Once the workflow is started, you will need to call the tools in the following o
6028
6034
  5. import_space
6029
6035
  6. space_to_space_migration_handler with enableWorkflow=false (to conclude the workflow)
6030
6036
 
6031
- ## Path Configuration Best Practices:
6032
- - ALWAYS use consistent path formats throughout the workflow
6037
+ ## Path Configuration:
6038
+ - Export output paths are managed by the server and are not user-configurable.
6039
+ - Use the exportPath returned by export_space as the source content file for the import step.
6033
6040
 
6034
6041
  ### Asset Handling Paths:
6035
- - When downloadAssets=true, the export tool creates an assets directory structure like: exportDir/images.ctfassets.net/
6042
+ - When downloadAssets=true, the export tool creates an assets directory structure next to the returned export file, under: <export directory>/images.ctfassets.net/
6036
6043
  - The import tool expects assetsDirectory to point to the images.ctfassets.net directory, not the parent export directory
6037
6044
 
6038
6045
  Troubleshooting:
6039
6046
  - If the start_space_to_space_migration is not found, try to call it again on behalf of the user.
6040
6047
  - If space_to_space_param_collection or other tools are not found, ask the user to confirm they are ready to proceed, as the tools need to be enabled first.
6041
- - If import fails with path errors, verify that exportDir and assetsDirectory paths are correctly aligned and accessible.
6048
+ - If import fails with path errors, verify that the returned exportPath and assetsDirectory paths are correctly aligned and accessible.
6042
6049
  `;
6043
6050
 
6044
6051
  // src/tools/jobs/space-to-space-migration/migrationHandler.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/mcp-tools",
3
- "version": "0.12.10",
3
+ "version": "0.12.12",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",