@contentful/mcp-tools 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5979 -0
- package/dist/index.js +3604 -3466
- package/package.json +1 -2
- package/dist/index.js.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/ai-actions/createAiAction.ts","../src/utils/formatters.ts","../src/utils/response.ts","../src/utils/tools.ts","../src/config/env.ts","../src/utils/getVersion.ts","../src/config/contentful.ts","../src/utils/ai-actions.ts","../src/types/aiActionTestCaseSchema.ts","../src/tools/ai-actions/invokeAiAction.ts","../src/tools/ai-actions/getAiActionInvocation.ts","../src/tools/ai-actions/deleteAiAction.ts","../src/tools/ai-actions/getAiAction.ts","../src/tools/ai-actions/listAiActions.ts","../src/utils/summarizer.ts","../src/tools/ai-actions/publishAiAction.ts","../src/tools/ai-actions/unpublishAiAction.ts","../src/tools/ai-actions/updateAiAction.ts","../src/tools/ai-actions/register.ts","../src/tools/assets/uploadAsset.ts","../src/types/taxonomySchema.ts","../src/tools/assets/listAssets.ts","../src/tools/assets/getAsset.ts","../src/tools/assets/updateAsset.ts","../src/tools/assets/deleteAsset.ts","../src/tools/assets/publishAsset.ts","../src/utils/bulkOperations.ts","../src/tools/assets/unpublishAsset.ts","../src/tools/assets/archiveAsset.ts","../src/tools/assets/unarchiveAsset.ts","../src/tools/assets/register.ts","../src/tools/content-types/getContentType.ts","../src/tools/content-types/listContentTypes.ts","../src/tools/content-types/createContentType.ts","../src/types/fieldSchema.ts","../src/types/contentTypeFieldValidationSchema.ts","../src/tools/content-types/updateContentType.ts","../src/tools/content-types/deleteContentType.ts","../src/tools/content-types/publishContentType.ts","../src/tools/content-types/unpublishContentType.ts","../src/tools/content-types/register.ts","../src/tools/context/getInitialContextTool.ts","../src/tools/context/store.ts","../src/tools/context/instructions.ts","../src/tools/context/register.ts","../src/tools/editor-interfaces/listEditorInterfaces.ts","../src/tools/editor-interfaces/getEditorInterface.ts","../src/tools/editor-interfaces/updateEditorInterface.ts","../src/tools/editor-interfaces/register.ts","../src/tools/entries/searchEntries.ts","../src/tools/entries/createEntry.ts","../src/tools/entries/deleteEntry.ts","../src/tools/entries/updateEntry.ts","../src/tools/entries/getEntry.ts","../src/tools/entries/publishEntry.ts","../src/tools/entries/unpublishEntry.ts","../src/tools/entries/archiveEntry.ts","../src/tools/entries/unarchiveEntry.ts","../src/tools/entries/register.ts","../src/tools/environments/createEnvironment.ts","../src/tools/environments/listEnvironments.ts","../src/tools/environments/deleteEnvironment.ts","../src/tools/environments/register.ts","../src/tools/jobs/space-to-space-migration/exportSpace.ts","../src/types/querySchema.ts","../src/tools/jobs/space-to-space-migration/paramCollection.ts","../src/tools/jobs/space-to-space-migration/importSpace.ts","../src/tools/jobs/space-to-space-migration/migrationHandler.ts","../src/tools/jobs/space-to-space-migration/instructions.ts","../src/tools/jobs/space-to-space-migration/register.ts","../src/tools/locales/getLocale.ts","../src/tools/locales/createLocale.ts","../src/tools/locales/listLocales.ts","../src/tools/locales/updateLocale.ts","../src/tools/locales/deleteLocale.ts","../src/tools/locales/register.ts","../src/tools/orgs/listOrgs.ts","../src/tools/orgs/getOrg.ts","../src/tools/orgs/register.ts","../src/tools/spaces/listSpaces.ts","../src/tools/spaces/getSpace.ts","../src/tools/spaces/register.ts","../src/tools/tags/listTags.ts","../src/tools/tags/createTag.ts","../src/tools/tags/register.ts","../src/tools/taxonomies/concept-schemes/createConceptScheme.ts","../src/types/conceptPayloadTypes.ts","../src/tools/taxonomies/concept-schemes/getConceptScheme.ts","../src/tools/taxonomies/concept-schemes/listConceptSchemes.ts","../src/tools/taxonomies/concept-schemes/updateConceptScheme.ts","../src/tools/taxonomies/concept-schemes/deleteConceptScheme.ts","../src/tools/taxonomies/concept-schemes/register.ts","../src/tools/taxonomies/concepts/createConcept.ts","../src/tools/taxonomies/concepts/deleteConcept.ts","../src/tools/taxonomies/concepts/updateConcept.ts","../src/tools/taxonomies/concepts/getConcept.ts","../src/tools/taxonomies/concepts/listConcepts.ts","../src/tools/taxonomies/concepts/register.ts","../src/tools/taxonomies/register.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { VariableType } from '../../utils/ai-actions.js';\nimport { AiActionTestCaseSchema } from '../../types/aiActionTestCaseSchema.js';\n\nexport const CreateAiActionToolParams = BaseToolSchema.extend({\n name: z.string().describe('The name of the AI action'),\n description: z.string().describe('The description of the AI action'),\n instruction: z\n .object({\n template: z.string().describe('The template for the AI action'),\n variables: z\n .array(\n z.object({\n id: z.string().describe('The id of the variable'),\n name: z.string().optional().describe('The name of the variable'),\n type: z\n .nativeEnum(VariableType)\n .describe('The type of the variable'),\n description: z\n .string()\n .optional()\n .describe('The description of the variable'),\n }),\n )\n .describe('Array of variables for the AI action'),\n })\n .describe('The instruction for the AI action'),\n configuration: z\n .object({\n modelType: z.string().describe('The type of model to use'),\n modelTemperature: z.number().describe('The temperature for the model'),\n })\n .describe('The configuration for the AI action'),\n testCases: z\n .array(AiActionTestCaseSchema)\n .optional()\n .describe('Test cases for the AI action'),\n});\n\ntype Params = z.infer<typeof CreateAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId || 'master',\n };\n\n const contentfulClient = createToolClient({\n ...args,\n environmentId: args.environmentId || 'master',\n });\n\n const aiAction = await contentfulClient.aiAction.create(params, {\n name: args.name,\n description: args.description,\n instruction: args.instruction,\n configuration: args.configuration,\n testCases: args.testCases,\n });\n\n return createSuccessResponse('AI action created successfully', { aiAction });\n}\n\nexport const createAiActionTool = withErrorHandling(\n tool,\n 'Error creating AI action',\n);\n","import { XMLBuilder } from 'fast-xml-parser';\n\n/**\n * Formats a response by combining a message with structured data.\n * Converts the provided object to XML format and appends the message.\n */\nexport function formatResponse(\n message: string | null,\n object: Record<string, unknown> = {},\n): string {\n const formattedObject: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(object)) {\n if (!value) continue;\n formattedObject[key] = value;\n }\n\n const builder = new XMLBuilder({\n format: true,\n indentBy: ' ',\n suppressEmptyNode: true,\n ignoreAttributes: false,\n processEntities: false,\n });\n\n const contextString = builder.build(formattedObject);\n\n return `${message}: \\n${contextString}\\n`;\n}\n\n/**\n * Ensures that a value is an array.\n */\nexport function ensureArray<T>(value: T | T[] | null | undefined): T[] {\n if (value === null || value === undefined) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\n/**\n * Pluralizes a string based on a count.\n * Returns singular form for count of 1, plural form otherwise.\n */\nexport function pluralize(\n n: number | unknown[],\n singular: string,\n plural?: string,\n): string {\n const num = Array.isArray(n) ? n.length : n;\n return num === 1 ? singular : plural || `${singular}s`;\n}\n","import type {\n ServerNotification,\n ServerRequest,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { formatResponse } from './formatters.js';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\n\n/**\n * Response type for tool handlers\n */\nexport type ToolResponse = {\n isError?: boolean;\n content: Array<{\n type: 'text';\n text: string;\n }>;\n};\n\n/**\n * Creates a standardized success response\n */\nexport function createSuccessResponse(\n message: string,\n data?: Record<string, unknown>,\n): ToolResponse {\n const text = data ? formatResponse(message, data) : message;\n\n return {\n content: [\n {\n type: 'text',\n text,\n },\n ],\n };\n}\n\n/**\n * Higher-order function that wraps tool handlers with standardized error handling\n */\nexport function withErrorHandling<T extends Record<string, unknown>>(\n handler: (\n params: T,\n extra?: RequestHandlerExtra<ServerRequest, ServerNotification>,\n ) => Promise<ToolResponse>,\n errorPrefix = 'Error',\n): (\n params: T,\n extra?: RequestHandlerExtra<ServerRequest, ServerNotification>,\n) => Promise<ToolResponse> {\n return async (\n params: T,\n extra?: RequestHandlerExtra<ServerRequest, ServerNotification>,\n ) => {\n try {\n return await handler(params, extra);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: `${errorPrefix}: ${errorMessage}`,\n },\n ],\n };\n }\n };\n}\n","import ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../config/contentful.js';\nimport { z } from 'zod';\n\nexport const BaseToolSchema = z.object({\n spaceId: z.string().describe('The ID of the Contentful space'),\n environmentId: z.string().describe('The ID of the Contentful environment'),\n});\n\n/**\n * Creates a Contentful client with the correct configuration based on resource parameters\n *\n * @param params - Tool parameters that may include a resource\n * @returns Configured Contentful client\n */\nexport function createToolClient(params: z.infer<typeof BaseToolSchema>) {\n const clientConfig = getDefaultClientConfig();\n\n if (params.spaceId) {\n clientConfig.space = params.spaceId;\n }\n\n return ctfl.createClient(clientConfig, { type: 'plain' });\n}\n","import dotenv from 'dotenv';\nimport { z } from 'zod';\ndotenv.config();\n\nconst EnvSchema = z.object({\n CONTENTFUL_MANAGEMENT_ACCESS_TOKEN: z\n .string()\n .describe('Contentful CMA token'),\n CONTENTFUL_HOST: z\n .string()\n .optional()\n .default('api.contentful.com')\n .describe('Contentful API host'),\n\n APP_ID: z.string().optional().describe('Contentful App ID'),\n SPACE_ID: z.string().optional().describe('Contentful Space ID'),\n ENVIRONMENT_ID: z\n .string()\n .optional()\n .default('master')\n .describe('Contentful environment ID'),\n ORGANIZATION_ID: z.string().optional().describe('Contentful organization ID'),\n});\n\nexport const env = EnvSchema.safeParse(process.env);\n\nif (!env.success && process.env['TEST_TYPE'] !== 'unit') {\n console.error('Invalid environment variables', env.error.format());\n process.exit(1);\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\n\nexport const getVersion = () => {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Try multiple paths to support both bundled (dist/) and source (src/utils/) contexts\n const possiblePaths = [\n join(__dirname, '../package.json'), // For bundled code (dist/index.js -> package.json)\n join(__dirname, '../../package.json'), // For source code (src/utils/getVersion.ts -> package.json)\n ];\n\n for (const packageJsonPath of possiblePaths) {\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));\n return packageJson.version;\n }\n }\n\n throw new Error('Could not find package.json');\n};\n","import { ClientOptions } from 'contentful-management';\nimport { env } from './env.js';\nimport { getVersion } from '../utils/getVersion.js';\n\n/**\n * Creates a default Contentful client configuration without actually initializing it.\n */\nexport function getDefaultClientConfig(): ClientOptions {\n if (!env.success && process.env['TEST_TYPE'] !== 'unit') {\n throw new Error('Environment variables are not properly configured');\n }\n\n if (!env.data) {\n throw new Error('Environment data is not available');\n }\n\n const clientConfig: ClientOptions = {\n accessToken: env.data.CONTENTFUL_MANAGEMENT_ACCESS_TOKEN,\n host: env.data.CONTENTFUL_HOST,\n space: env.data.SPACE_ID,\n headers: {\n 'X-Contentful-User-Agent-Tool': `contentful-mcp/${getVersion()}`, //Include user agent header for telemetry tracking\n },\n };\n\n return clientConfig;\n}\n","import { z } from 'zod';\n\nexport enum VariableType {\n RESOURCE_LINK = 'ResourceLink',\n TEXT = 'Text',\n STANDARD_INPUT = 'StandardInput',\n LOCALE = 'Locale',\n MEDIA_REFERENCE = 'MediaReference',\n REFERENCE = 'Reference',\n SMART_CONTEXT = 'SmartContext',\n}\n\nexport enum EntityType {\n ENTRY = 'Entry',\n ASSET = 'Asset',\n RESOURCE_LINK = 'ResourceLink',\n}\n\n// Create Zod schema for VariableValue\nexport const VariableValue = z.union([\n z.object({\n id: z.string(),\n value: z.string(),\n }),\n z.object({\n id: z.string(),\n value: z.object({\n entityType: z.nativeEnum(EntityType),\n entityId: z.string(),\n entityPath: z.string(),\n }),\n }),\n z.object({\n id: z.string(),\n value: z.object({\n entityType: z.literal(EntityType.ENTRY),\n entityId: z.string(),\n entityPaths: z.array(z.string()),\n }),\n }),\n]);\n\nexport enum OutputFormat {\n RICH_TEXT = 'RichText',\n MARKDOWN = 'Markdown',\n PLAIN_TEXT = 'PlainText',\n}\n\nexport type InvocationStatus =\n | 'SCHEDULED'\n | 'IN_PROGRESS'\n | 'FAILED'\n | 'COMPLETED'\n | 'CANCELLED';\n\n// Define the shape we expect from the invocation status response\nexport interface InvocationStatusResponse {\n sys: {\n id: string;\n status: InvocationStatus;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n","import { z } from 'zod';\n\n/**\n * Zod schemas for AI Action Test Cases\n *\n * These schemas mirror the `AiActionTestCase` type from contentful-management\n * (see node_modules/contentful-management/dist/typings/entities/ai-action.d.ts)\n *\n * AI Action Test Cases are used to provide sample inputs for testing AI Actions\n * in Contentful. They can be either simple text inputs or references to existing\n * content entries that serve as examples for the AI Action.\n */\n\n/**\n * Schema for text-based test cases\n *\n * Represents a simple text input that can be used to test an AI Action.\n * This is typically used for straightforward prompts or instructions\n * that don't require complex structured data.\n */\nconst TextTestCase = z.object({\n type: z.literal('Text').optional(),\n value: z.string().optional(),\n});\n\n/**\n * Schema for reference-based test cases\n *\n * Represents a test case that references an existing Contentful entry.\n * This is used when the AI Action needs to process structured content\n * or when testing with real-world examples from the content model.\n *\n * The reference includes:\n * - entityPath: The path to access specific fields within the entry\n * - entityType: The type of entity (currently only 'Entry' is supported)\n * - entityId: The unique identifier of the referenced entry\n */\nconst ReferenceTestCase = z.object({\n type: z.literal('Reference').optional(),\n value: z\n .object({\n entityPath: z.string().optional(),\n entityType: z.literal('Entry').optional(),\n entityId: z.string().optional(),\n })\n .optional(),\n});\n\n/**\n * Main schema for AI Action Test Cases\n *\n * This union type represents all possible test case formats for AI Actions.\n * It's used in the AI Action definition to provide sample inputs that can\n * be used to test the AI Action's functionality directly in the Contentful UI\n * or through the API.\n *\n * Test cases help content creators understand how the AI Action works and\n * provide developers with a way to test the AI Action's behavior with\n * representative examples.\n */\nexport const AiActionTestCaseSchema = z.union([\n TextTestCase,\n ReferenceTestCase,\n]);\n\n/**\n * Type derived from the AiActionTestCaseSchema\n *\n * Used for typing variables and parameters throughout the application when\n * working with AI Action test cases. This type ensures that all test cases\n * conform to either the text or reference format required by the Contentful API.\n */\nexport type AiActionTestCase = z.infer<typeof AiActionTestCaseSchema>;\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport {\n OutputFormat,\n VariableValue,\n InvocationStatusResponse,\n} from '../../utils/ai-actions.js';\nimport { InvocationResult } from 'contentful-management/dist/typings/entities/ai-action-invocation.js';\n\nexport const InvokeAiActionToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action to invoke'),\n fields: z.array(\n z.object({\n outputFormat: z\n .nativeEnum(OutputFormat)\n .describe('The output format of the AI action'),\n variables: z\n .array(VariableValue)\n .describe('The variable assignments within the AI action invocation'),\n }),\n ),\n});\n\ntype Params = z.infer<typeof InvokeAiActionToolParams>;\n\nasync function pollForCompletion(\n contentfulClient: ReturnType<typeof createToolClient>,\n params: { spaceId: string; environmentId: string; aiActionId: string },\n aiActions: Array<{ sys: { id: string } }>,\n pollInterval = 30000,\n maxAttempts = 10,\n): Promise<{ actionId: string; content: InvocationResult['content'] }[]> {\n const completedActions = new Map<string, InvocationResult['content']>();\n\n for (\n let attempt = 0;\n attempt < maxAttempts && completedActions.size < aiActions.length;\n attempt++\n ) {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n\n await Promise.allSettled(\n aiActions\n .filter((action) => !completedActions.has(action.sys.id)) //filter out actions that have already been completed\n .map(async (action) => {\n try {\n const invocationStatus =\n await contentfulClient.aiActionInvocation.get({\n ...params,\n invocationId: action.sys.id,\n });\n\n const status = (invocationStatus as InvocationStatusResponse).sys\n .status;\n\n if (status === 'COMPLETED' && invocationStatus.result) {\n completedActions.set(\n action.sys.id,\n invocationStatus.result.content,\n );\n } else if (status === 'FAILED' || status === 'CANCELLED') {\n throw new Error(\n `AI action ${action.sys.id} failed with status ${status}`,\n );\n }\n } catch (error) {\n console.warn(\n `Error checking status for invocation ${action.sys.id}:`,\n error,\n );\n }\n }),\n );\n }\n\n if (completedActions.size < aiActions.length) {\n throw new Error(\n `Polling timeout: ${completedActions.size}/${aiActions.length} actions completed after ${maxAttempts} attempts`,\n );\n }\n\n return Array.from(completedActions.entries()).map(([actionId, content]) => ({\n actionId,\n content,\n }));\n}\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n const aiActions = [];\n\n for (const field of args.fields) {\n const aiAction = await contentfulClient.aiAction.invoke(\n {\n ...params,\n aiActionId: args.aiActionId,\n },\n {\n outputFormat: field.outputFormat,\n variables: field.variables,\n },\n );\n\n aiActions.push(aiAction);\n }\n\n // Poll for completion\n const completedActions = await pollForCompletion(\n contentfulClient,\n { ...params, aiActionId: args.aiActionId },\n aiActions,\n );\n\n return createSuccessResponse('AI action invoked and completed successfully', {\n aiActions: completedActions,\n nextStepsGuidance: `Required next step: Now that the invocation is complete, you will take the next step to complete the workflow. This will involve a CRUD operation that will take action on each of the action returned in the aiActions variable. You will need to use the appropriate tool to do this, choose a tool depending on the type of entity the action was executed on and the description of the Ai Action.`,\n });\n}\n\nexport const invokeAiActionTool = withErrorHandling(\n tool,\n 'Error invoking AI action',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetAiActionInvocationToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action'),\n invocationId: z.string().describe('The ID of the invocation to retrieve'),\n});\n\ntype Params = z.infer<typeof GetAiActionInvocationToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n aiActionId: args.aiActionId,\n invocationId: args.invocationId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const aiActionInvocation =\n await contentfulClient.aiActionInvocation.get(params);\n\n return createSuccessResponse('AI action invocation retrieved successfully', {\n aiActionInvocation,\n });\n}\n\nexport const getAiActionInvocationTool = withErrorHandling(\n tool,\n 'Error retrieving AI action invocation',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const DeleteAiActionToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action to delete'),\n});\n\ntype Params = z.infer<typeof DeleteAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n aiActionId: args.aiActionId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // First, get the AI action to store info for return\n const aiAction = await contentfulClient.aiAction.get(params);\n\n // Delete the AI action\n await contentfulClient.aiAction.delete(params);\n\n return createSuccessResponse('AI action deleted successfully', { aiAction });\n}\n\nexport const deleteAiActionTool = withErrorHandling(\n tool,\n 'Error deleting AI action',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetAiActionToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action to retrieve'),\n});\n\ntype Params = z.infer<typeof GetAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n aiActionId: args.aiActionId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the AI action\n const aiAction = await contentfulClient.aiAction.get(params);\n\n return createSuccessResponse('AI action retrieved successfully', {\n aiAction,\n });\n}\n\nexport const getAiActionTool = withErrorHandling(\n tool,\n 'Error retrieving AI action',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const ListAiActionToolParams = BaseToolSchema.extend({\n limit: z\n .number()\n .optional()\n .describe('Maximum number of AI actions to return (max 3)'),\n skip: z\n .number()\n .optional()\n .describe('Skip this many AI actions for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n order: z.string().optional().describe('Order AI actions by this field'),\n});\n\ntype Params = z.infer<typeof ListAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const aiActions = await contentfulClient.aiAction.getMany({\n ...params,\n query: {\n limit: Math.min(args.limit || 3, 3),\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedAiActions = aiActions.items.map((aiAction) => ({\n id: aiAction.sys.id,\n name: aiAction.name || 'Untitled',\n description: aiAction.description || null,\n instruction: aiAction.instruction || null,\n configuration: aiAction.configuration || null,\n testCases: aiAction.testCases || null,\n createdAt: aiAction.sys.createdAt,\n updatedAt: aiAction.sys.updatedAt,\n publishedVersion: aiAction.sys.publishedVersion,\n }));\n\n const summarized = summarizeData(\n {\n ...aiActions,\n items: summarizedAiActions,\n },\n {\n maxItems: 3,\n remainingMessage:\n 'To see more AI actions, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('AI actions retrieved successfully', {\n aiActions: summarized,\n total: aiActions.total,\n limit: aiActions.limit,\n skip: aiActions.skip,\n });\n}\n\nexport const listAiActionTool = withErrorHandling(\n tool,\n 'Error listing AI actions',\n);\n","export interface SummarizeOptions {\n maxItems?: number;\n indent?: number;\n showTotal?: boolean;\n remainingMessage?: string;\n}\n\nexport const summarizeData = (\n data: unknown,\n options: SummarizeOptions = {},\n): Record<string, unknown> | Array<unknown> => {\n const {\n maxItems = 3,\n remainingMessage = 'To see more items, please ask me to retrieve the next page.',\n } = options;\n\n // Handle Contentful-style responses with items and total\n if (data && typeof data === 'object' && 'items' in data && 'total' in data) {\n const items = data.items;\n const total = data.total;\n\n // Type guard to ensure items is an array and total is a number\n if (!Array.isArray(items) || typeof total !== 'number') {\n return data as Record<string, unknown>;\n }\n\n if (items.length <= maxItems) {\n return data as Record<string, unknown>;\n }\n\n return {\n items: items.slice(0, maxItems),\n total: total,\n showing: maxItems,\n remaining: total - maxItems,\n message: remainingMessage,\n skip: maxItems, // Add skip value for next page\n };\n }\n\n // Handle plain arrays\n if (Array.isArray(data)) {\n if (data.length <= maxItems) {\n return data;\n }\n\n return {\n items: data.slice(0, maxItems),\n total: data.length,\n showing: maxItems,\n remaining: data.length - maxItems,\n message: remainingMessage,\n skip: maxItems, // Add skip value for next page\n };\n }\n\n // Return non-array data as-is (cast to expected return type)\n return data as Record<string, unknown>;\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const PublishAiActionToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action to publish'),\n});\n\ntype Params = z.infer<typeof PublishAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n aiActionId: args.aiActionId,\n };\n\n const contentfulClient = createToolClient(args);\n\n try {\n // Get the AI action first\n const aiAction = await contentfulClient.aiAction.get(params);\n\n // Publish the AI action with the version parameter\n const publishedAiAction = await contentfulClient.aiAction.publish(\n {\n ...params,\n version: aiAction.sys.version,\n },\n aiAction,\n );\n\n return createSuccessResponse('AI action published successfully', {\n version: publishedAiAction.sys.publishedVersion,\n aiActionId: args.aiActionId,\n });\n } catch (error) {\n return createSuccessResponse('AI action publish failed', {\n status: error,\n aiActionId: args.aiActionId,\n });\n }\n}\n\nexport const publishAiActionTool = withErrorHandling(\n tool,\n 'Error publishing AI action',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const UnpublishAiActionToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action to unpublish'),\n});\n\ntype Params = z.infer<typeof UnpublishAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n aiActionId: args.aiActionId,\n };\n\n const contentfulClient = createToolClient(args);\n\n try {\n // Unpublish the AI action\n await contentfulClient.aiAction.unpublish(params);\n\n return createSuccessResponse('AI action unpublished successfully', {\n aiActionId: args.aiActionId,\n });\n } catch (error) {\n return createSuccessResponse('AI action unpublish failed', {\n status: error,\n aiActionId: args.aiActionId,\n });\n }\n}\n\nexport const unpublishAiActionTool = withErrorHandling(\n tool,\n 'Error unpublishing AI action',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { VariableType } from '../../utils/ai-actions.js';\nimport { AiActionTestCaseSchema } from '../../types/aiActionTestCaseSchema.js';\n\nexport const UpdateAiActionToolParams = BaseToolSchema.extend({\n aiActionId: z.string().describe('The ID of the AI action to update'),\n name: z.string().optional().describe('The name of the AI action'),\n description: z\n .string()\n .optional()\n .describe('The description of the AI action'),\n instruction: z\n .object({\n template: z.string().describe('The template for the AI action'),\n variables: z\n .array(\n z.object({\n id: z.string().describe('The id of the variable'),\n name: z.string().optional().describe('The name of the variable'),\n type: z\n .nativeEnum(VariableType)\n .describe('The type of the variable'),\n description: z\n .string()\n .optional()\n .describe('The description of the variable'),\n }),\n )\n .describe('Array of variables for the AI action'),\n })\n .optional()\n .describe('The instruction for the AI action'),\n configuration: z\n .object({\n modelType: z.string().describe('The type of model to use'),\n modelTemperature: z.number().describe('The temperature for the model'),\n })\n .optional()\n .describe('The configuration for the AI action'),\n testCases: z\n .array(AiActionTestCaseSchema)\n .optional()\n .describe('Test cases for the AI action'),\n});\n\ntype Params = z.infer<typeof UpdateAiActionToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n aiActionId: args.aiActionId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get existing AI action, merge fields, and update\n const existingAiAction = await contentfulClient.aiAction.get(params);\n const updatedAiAction = await contentfulClient.aiAction.update(params, {\n ...existingAiAction,\n ...(args.name && { name: args.name }),\n ...(args.description && { description: args.description }),\n ...(args.instruction && { instruction: args.instruction }),\n ...(args.configuration && { configuration: args.configuration }),\n ...(args.testCases && { testCases: args.testCases }),\n });\n\n return createSuccessResponse('AI action updated successfully', {\n updatedAiAction,\n });\n}\n\nexport const updateAiActionTool = withErrorHandling(\n tool,\n 'Error updating AI action',\n);\n","import {\n createAiActionTool,\n CreateAiActionToolParams,\n} from './createAiAction.js';\nimport {\n invokeAiActionTool,\n InvokeAiActionToolParams,\n} from './invokeAiAction.js';\nimport {\n getAiActionInvocationTool,\n GetAiActionInvocationToolParams,\n} from './getAiActionInvocation.js';\nimport {\n deleteAiActionTool,\n DeleteAiActionToolParams,\n} from './deleteAiAction.js';\nimport { getAiActionTool, GetAiActionToolParams } from './getAiAction.js';\nimport { listAiActionTool, ListAiActionToolParams } from './listAiActions.js';\nimport {\n publishAiActionTool,\n PublishAiActionToolParams,\n} from './publishAiAction.js';\nimport {\n unpublishAiActionTool,\n UnpublishAiActionToolParams,\n} from './unpublishAiAction.js';\nimport {\n updateAiActionTool,\n UpdateAiActionToolParams,\n} from './updateAiAction.js';\n\nexport const aiActionTools = {\n createAiAction: {\n title: 'create_ai_action',\n description:\n 'Create a new AI action with clear instructions and well-defined variables. Best practices: (1) Use descriptive names that indicate the action\\'s purpose, (2) Write specific, actionable instructions in the template, (3) Define meaningful variables with clear names like \"sourceContent\", \"targetLocale\", \"entryId\", or \"contentType\", (4) Embed variables into the template using the format {{var.{variableId}}}, (5) Consider the content editor\\'s workflow and make the action intuitive to use. Example variables: content fields to process, locales for translation, reference entries, formatting preferences, or validation rules.',\n inputParams: CreateAiActionToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createAiActionTool,\n },\n invokeAiAction: {\n title: 'invoke_ai_action',\n description:\n 'Invoke an AI action with variables. MANDATORY BULK OPERATIONS: You MUST ALWAYS use bulk operations when processing multiple content pieces by adding multiple items to the fields array - never make separate calls. VARIABLES: Can be (1) String values for simple text input, or (2) Entity references to read from specific entry fields using {\"entityId\": \"entryId\", \"entityPath\": \"fields.fieldName.locale\", \"entityType\": \"Entry\"}. POLLING: Automatically polls every 3 seconds for up to 60 seconds. CRITICAL FOLLOW-UP: After invoking AI actions, you MUST immediately take the next step to complete the workflow. The tool response will provide specific guidance on required next steps - you must follow this guidance.',\n inputParams: InvokeAiActionToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true, // Interacts with external AI services\n },\n tool: invokeAiActionTool,\n },\n getAiActionInvocation: {\n title: 'get_ai_action_invocation',\n description:\n 'Retrieve information about a specific AI action invocation by its ID.',\n inputParams: GetAiActionInvocationToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getAiActionInvocationTool,\n },\n deleteAiAction: {\n title: 'delete_ai_action',\n description: 'Delete a specific AI action from your Contentful space',\n inputParams: DeleteAiActionToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true, // Deleting same item multiple times has same effect\n openWorldHint: false,\n },\n tool: deleteAiActionTool,\n },\n getAiAction: {\n title: 'get_ai_action',\n description:\n 'Retrieve details about a specific AI action including its configuration, instructions, and defined variables',\n inputParams: GetAiActionToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getAiActionTool,\n },\n listAiActions: {\n title: 'list_ai_actions',\n description:\n 'List AI actions in a space. Returns a maximum of 3 items per request. Use skip parameter to paginate through results.',\n inputParams: ListAiActionToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listAiActionTool,\n },\n publishAiAction: {\n title: 'publish_ai_action',\n description:\n 'Publish an AI action to make it available for use in the Contentful web app',\n inputParams: PublishAiActionToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true, // Publishing same item multiple times has same effect\n openWorldHint: false,\n },\n tool: publishAiActionTool,\n },\n unpublishAiAction: {\n title: 'unpublish_ai_action',\n description:\n 'Unpublish an AI action to remove it from use in the Contentful web app',\n inputParams: UnpublishAiActionToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true, // Unpublishing same item multiple times has same effect\n openWorldHint: false,\n },\n tool: unpublishAiActionTool,\n },\n updateAiAction: {\n title: 'update_ai_action',\n description:\n 'Update an existing AI action. Your updates will be merged with the existing AI action data, so you only need to provide the fields you want to change.',\n inputParams: UpdateAiActionToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateAiActionTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { AssetMetadataSchema } from '../../types/taxonomySchema.js';\n\nconst FileSchema = z.object({\n fileName: z.string().describe('The name of the file'),\n contentType: z.string().describe('The MIME type of the file'),\n upload: z.string().optional().describe('The upload URL or file data'),\n});\n\nexport const UploadAssetToolParams = BaseToolSchema.extend({\n title: z.string().describe('The title of the asset'),\n description: z.string().optional().describe('The description of the asset'),\n file: FileSchema.describe('The file information for the asset'),\n metadata: AssetMetadataSchema,\n locale: z\n .string()\n .optional()\n .describe(\n 'The locale for the asset fields (e.g., \"en-US\", \"de-DE\"). Defaults to \"en-US\" if not specified.',\n ),\n});\n\ntype Params = z.infer<typeof UploadAssetToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Prepare asset properties following Contentful's structure\n const locale = args.locale || 'en-US';\n const assetProps = {\n fields: {\n title: { [locale]: args.title },\n description: args.description\n ? { [locale]: args.description }\n : undefined,\n file: { [locale]: args.file },\n },\n metadata: args.metadata,\n };\n\n // Create the asset\n const asset = await contentfulClient.asset.create(params, assetProps);\n\n // Process the asset for all locales\n const processedAsset = await contentfulClient.asset.processForAllLocales(\n params,\n {\n sys: asset.sys,\n fields: asset.fields,\n },\n {},\n );\n\n return createSuccessResponse('Asset uploaded successfully', {\n asset: processedAsset,\n });\n}\n\nexport const uploadAssetTool = withErrorHandling(tool, 'Error uploading asset');\n","import { z } from 'zod';\n\n/**\n * Schema for taxonomy concept validation links\n * Matches Contentful's TaxonomyConceptValidationLink type\n */\nexport const TaxonomyConceptValidationLinkSchema = z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('TaxonomyConcept'),\n id: z.string().describe('The ID of the taxonomy concept'),\n }),\n required: z.boolean().optional(),\n});\n\n/**\n * Schema for taxonomy concept scheme validation links\n * Matches Contentful's TaxonomyConceptSchemeValidationLink type\n */\nexport const TaxonomyConceptSchemeValidationLinkSchema = z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('TaxonomyConceptScheme'),\n id: z.string().describe('The ID of the taxonomy concept scheme'),\n }),\n required: z.boolean().optional(),\n});\n\n/**\n * Union schema for taxonomy validation links\n * Matches the array type expected by Contentful's ContentTypeMetadata.taxonomy\n */\nexport const TaxonomyValidationLinkSchema = z.union([\n TaxonomyConceptValidationLinkSchema,\n TaxonomyConceptSchemeValidationLinkSchema,\n]);\n\n/**\n * Schema for content type metadata\n * Matches Contentful's ContentTypeMetadata type structure\n */\nexport const ContentTypeMetadataSchema = z\n .object({\n taxonomy: z.array(TaxonomyValidationLinkSchema).optional(),\n })\n .optional();\n\n/**\n * Schema for entry type metadata\n * Matches Contentful's MetadataProps type structure\n */\nexport const EntryMetadataSchema = z\n .object({\n tags: z.array(\n z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('Tag'),\n id: z.string(),\n }),\n }),\n ),\n concepts: z\n .array(\n z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('TaxonomyConcept'),\n id: z.string(),\n }),\n }),\n )\n .optional(),\n })\n .optional();\n\n/**\n * Schema for asset type metadata\n * Matches Contentful's asset metadata structure with tags and taxonomy concepts\n */\nexport const AssetMetadataSchema = z\n .object({\n tags: z.array(\n z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('Tag'),\n id: z.string(),\n }),\n }),\n ),\n concepts: z\n .array(\n z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('TaxonomyConcept'),\n id: z.string(),\n }),\n }),\n )\n .optional(),\n })\n .optional();\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const ListAssetsToolParams = BaseToolSchema.extend({\n limit: z\n .number()\n .optional()\n .describe('Maximum number of assets to return (max 3)'),\n skip: z.number().optional().describe('Skip this many assets for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n order: z.string().optional().describe('Order assets by this field'),\n links_to_entry: z\n .string()\n .optional()\n .describe('Find assets that link to the specified entry ID'),\n locale: z\n .string()\n .optional()\n .describe(\n 'The locale to display asset fields in (e.g., \"en-US\", \"de-DE\"). Defaults to \"en-US\" if not specified.',\n ),\n});\n\ntype Params = z.infer<typeof ListAssetsToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const assets = await contentfulClient.asset.getMany({\n ...params,\n query: {\n limit: Math.min(args.limit || 3, 3),\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n ...(args.links_to_entry && { links_to_entry: args.links_to_entry }),\n },\n });\n\n const locale = args.locale || 'en-US';\n\n const summarizedAssets = assets.items.map((asset) => {\n return {\n id: asset.sys.id,\n title: asset.fields.title?.[locale] || 'Untitled',\n description: asset.fields.description?.[locale] || null,\n fileName: asset.fields.file?.[locale]?.fileName || null,\n contentType: asset.fields.file?.[locale]?.contentType || null,\n url: asset.fields.file?.[locale]?.url || null,\n size: asset.fields.file?.[locale]?.details?.['size'] || null,\n createdAt: asset.sys.createdAt,\n updatedAt: asset.sys.updatedAt,\n publishedVersion: asset.sys.publishedVersion,\n locale: locale,\n };\n });\n\n const summarized = summarizeData(\n {\n ...assets,\n items: summarizedAssets,\n },\n {\n maxItems: 3,\n remainingMessage:\n 'To see more assets, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Assets retrieved successfully', {\n assets: summarized,\n total: assets.total,\n limit: assets.limit,\n skip: assets.skip,\n });\n}\n\nexport const listAssetsTool = withErrorHandling(tool, 'Error listing assets');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetAssetToolParams = BaseToolSchema.extend({\n assetId: z.string().describe('The ID of the asset to retrieve'),\n});\n\ntype Params = z.infer<typeof GetAssetToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n assetId: args.assetId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the asset\n const asset = await contentfulClient.asset.get(params);\n\n return createSuccessResponse('Asset retrieved successfully', { asset });\n}\n\nexport const getAssetTool = withErrorHandling(tool, 'Error retrieving asset');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { AssetMetadataSchema } from '../../types/taxonomySchema.js';\n\nexport const UpdateAssetToolParams = BaseToolSchema.extend({\n assetId: z.string().describe('The ID of the asset to update'),\n fields: z\n .record(z.any())\n .describe(\n 'The field values to update. Keys should be field IDs and values should be the field content. Will be merged with existing fields.',\n ),\n metadata: AssetMetadataSchema,\n});\n\ntype Params = z.infer<typeof UpdateAssetToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n assetId: args.assetId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get existing asset, merge fields, and update\n const existingAsset = await contentfulClient.asset.get(params);\n\n const allTags = [\n ...(existingAsset.metadata?.tags || []),\n ...(args.metadata?.tags || []),\n ];\n\n const allConcepts = [\n ...(existingAsset.metadata?.concepts || []),\n ...(args.metadata?.concepts || []),\n ];\n\n const updatedAsset = await contentfulClient.asset.update(params, {\n ...existingAsset,\n fields: { ...existingAsset.fields, ...args.fields },\n metadata: {\n tags: allTags,\n concepts: allConcepts,\n },\n });\n\n return createSuccessResponse('Asset updated successfully', { updatedAsset });\n}\n\nexport const updateAssetTool = withErrorHandling(tool, 'Error updating asset');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const DeleteAssetToolParams = BaseToolSchema.extend({\n assetId: z.string().describe('The ID of the asset to delete'),\n});\n\ntype Params = z.infer<typeof DeleteAssetToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n assetId: args.assetId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // First, get the asset to store info for return\n const asset = await contentfulClient.asset.get(params);\n\n // Delete the asset\n await contentfulClient.asset.delete(params);\n\n return createSuccessResponse('Asset deleted successfully', { asset });\n}\n\nexport const deleteAssetTool = withErrorHandling(tool, 'Error deleting asset');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport {\n BulkOperationParams,\n createAssetVersionedLinks,\n createEntitiesCollection,\n waitForBulkActionCompletion,\n} from '../../utils/bulkOperations.js';\n\nexport const PublishAssetToolParams = BaseToolSchema.extend({\n assetId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the asset to publish (string) or an array of asset IDs (up to 100 assets)',\n ),\n});\n\ntype Params = z.infer<typeof PublishAssetToolParams>;\n\nasync function tool(args: Params) {\n const baseParams: BulkOperationParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const assetIds = Array.isArray(args.assetId) ? args.assetId : [args.assetId];\n\n // For single asset, use individual publish\n if (assetIds.length === 1) {\n try {\n const assetId = assetIds[0];\n const params = {\n ...baseParams,\n assetId,\n };\n\n // Get the asset first\n const asset = await contentfulClient.asset.get(params);\n\n // Publish the asset\n const publishedAsset = await contentfulClient.asset.publish(\n params,\n asset,\n );\n\n return createSuccessResponse('Asset published successfully', {\n status: publishedAsset.sys.status,\n assetId,\n });\n } catch (error) {\n return createSuccessResponse('Asset publish failed', {\n status: error,\n assetId: assetIds[0],\n });\n }\n }\n\n // For multiple assets, use bulk action API\n // Get the current version of each asset\n const entityVersions = await createAssetVersionedLinks(\n contentfulClient,\n baseParams,\n assetIds,\n );\n\n // Create the collection object\n const entitiesCollection = createEntitiesCollection(entityVersions);\n\n // Create the bulk action\n const bulkAction = await contentfulClient.bulkAction.publish(baseParams, {\n entities: entitiesCollection,\n });\n\n // Wait for the bulk action to complete\n const action = await waitForBulkActionCompletion(\n contentfulClient,\n baseParams,\n bulkAction.sys.id,\n );\n\n return createSuccessResponse('Asset(s) published successfully', {\n status: action.sys.status,\n assetIds,\n });\n}\n\nexport const publishAssetTool = withErrorHandling(\n tool,\n 'Error publishing asset',\n);\n","// Common types and utilities for Contentful bulk operations\nimport type { PlainClientAPI } from 'contentful-management';\n\nexport interface VersionedLink {\n sys: {\n type: 'Link';\n linkType: 'Entry' | 'Asset';\n id: string;\n version: number;\n };\n}\n\nexport interface UnversionedLink {\n sys: {\n type: 'Link';\n linkType: 'Entry' | 'Asset';\n id: string;\n };\n}\n\nexport interface Collection<T> {\n sys: {\n type: 'Array';\n };\n items: T[];\n}\n\nexport interface BulkActionResponse {\n sys: {\n id: string;\n status: string;\n };\n succeeded?: Array<{\n sys: {\n id: string;\n type: string;\n };\n }>;\n failed?: Array<{\n sys: {\n id: string;\n type: string;\n };\n error?: unknown;\n }>;\n error?: unknown;\n}\n\nexport interface BulkOperationParams {\n spaceId: string;\n environmentId: string;\n}\n\n// Helper function to wait for bulk action completion\nexport async function waitForBulkActionCompletion(\n contentfulClient: PlainClientAPI,\n baseParams: BulkOperationParams,\n bulkActionId: string,\n): Promise<BulkActionResponse> {\n let action = (await contentfulClient.bulkAction.get({\n ...baseParams,\n bulkActionId,\n })) as unknown as BulkActionResponse;\n\n while (\n action.sys.status === 'inProgress' ||\n action.sys.status === 'created'\n ) {\n await new Promise((resolve) => setTimeout(resolve, 1000));\n action = (await contentfulClient.bulkAction.get({\n ...baseParams,\n bulkActionId,\n })) as unknown as BulkActionResponse;\n }\n\n return action;\n}\n\n// Helper function to create versioned links for entries\nexport async function createEntryVersionedLinks(\n contentfulClient: PlainClientAPI,\n baseParams: BulkOperationParams,\n entryIds: string[],\n): Promise<VersionedLink[]> {\n return Promise.all(\n entryIds.map(async (entryId) => {\n const currentEntry = await contentfulClient.entry.get({\n ...baseParams,\n entryId,\n });\n\n return {\n sys: {\n type: 'Link' as const,\n linkType: 'Entry' as const,\n id: entryId,\n version: currentEntry.sys.version,\n },\n };\n }),\n );\n}\n\n// Helper function to create unversioned links for entries (used for unpublish operations)\nexport async function createEntryUnversionedLinks(\n contentfulClient: PlainClientAPI,\n baseParams: BulkOperationParams,\n entryIds: string[],\n): Promise<UnversionedLink[]> {\n // For unpublish operations, we don't need to fetch entries since we only need IDs\n // But we should validate they exist first\n await Promise.all(\n entryIds.map(async (entryId) => {\n await contentfulClient.entry.get({\n ...baseParams,\n entryId,\n });\n }),\n );\n\n return entryIds.map((entryId) => ({\n sys: {\n type: 'Link' as const,\n linkType: 'Entry' as const,\n id: entryId,\n },\n }));\n}\n\n// Helper function to create versioned links for assets\nexport async function createAssetVersionedLinks(\n contentfulClient: PlainClientAPI,\n baseParams: BulkOperationParams,\n assetIds: string[],\n): Promise<VersionedLink[]> {\n return Promise.all(\n assetIds.map(async (assetId) => {\n const currentAsset = await contentfulClient.asset.get({\n ...baseParams,\n assetId,\n });\n\n return {\n sys: {\n type: 'Link' as const,\n linkType: 'Asset' as const,\n id: assetId,\n version: currentAsset.sys.version,\n },\n };\n }),\n );\n}\n\n// Helper function to create unversioned links for assets (used for unpublish operations)\nexport async function createAssetUnversionedLinks(\n contentfulClient: PlainClientAPI,\n baseParams: BulkOperationParams,\n assetIds: string[],\n): Promise<UnversionedLink[]> {\n // For unpublish operations, we don't need to fetch assets since we only need IDs\n // But we should validate they exist first\n await Promise.all(\n assetIds.map(async (assetId) => {\n await contentfulClient.asset.get({\n ...baseParams,\n assetId,\n });\n }),\n );\n\n return assetIds.map((assetId) => ({\n sys: {\n type: 'Link' as const,\n linkType: 'Asset' as const,\n id: assetId,\n },\n }));\n}\n\n// Helper function to create collection from versioned links\nexport function createEntitiesCollection(\n entities: VersionedLink[],\n): Collection<VersionedLink>;\nexport function createEntitiesCollection(\n entities: UnversionedLink[],\n): Collection<UnversionedLink>;\nexport function createEntitiesCollection(\n entities: VersionedLink[] | UnversionedLink[],\n): Collection<VersionedLink | UnversionedLink> {\n return {\n sys: {\n type: 'Array',\n },\n items: entities,\n };\n}\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport {\n BulkOperationParams,\n createEntitiesCollection,\n waitForBulkActionCompletion,\n createAssetUnversionedLinks,\n} from '../../utils/bulkOperations.js';\n\nexport const UnpublishAssetToolParams = BaseToolSchema.extend({\n assetId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the asset to unpublish (string) or an array of asset IDs (up to 100 assets)',\n ),\n});\n\ntype Params = z.infer<typeof UnpublishAssetToolParams>;\n\nasync function tool(args: Params) {\n const baseParams: BulkOperationParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const assetIds = Array.isArray(args.assetId) ? args.assetId : [args.assetId];\n\n // For single asset, use individual unpublish for simplicity\n if (assetIds.length === 1) {\n try {\n const assetId = assetIds[0];\n const params = {\n ...baseParams,\n assetId,\n };\n\n // Get the asset first\n const asset = await contentfulClient.asset.get(params);\n\n // Unpublish the asset\n const unpublishedAsset = await contentfulClient.asset.unpublish(\n params,\n asset,\n );\n\n return createSuccessResponse('Asset unpublished successfully', {\n status: unpublishedAsset.sys.status,\n assetId,\n });\n } catch (error) {\n return createSuccessResponse('Asset unpublish failed', {\n status: error,\n assetId: assetIds[0],\n });\n }\n }\n\n // For multiple assets, use bulk action API\n // Get the unversioned links for each asset (unpublish doesn't need version info)\n const assetLinks = await createAssetUnversionedLinks(\n contentfulClient,\n baseParams,\n assetIds,\n );\n\n // Create the collection object\n const entitiesCollection = createEntitiesCollection(assetLinks);\n\n // Create the bulk action\n const bulkAction = await contentfulClient.bulkAction.unpublish(baseParams, {\n entities: entitiesCollection,\n });\n\n // Wait for the bulk action to complete\n const action = await waitForBulkActionCompletion(\n contentfulClient,\n baseParams,\n bulkAction.sys.id,\n );\n\n return createSuccessResponse('Asset(s) unpublished successfully', {\n status: action.sys.status,\n assetIds,\n });\n}\n\nexport const unpublishAssetTool = withErrorHandling(\n tool,\n 'Error unpublishing asset',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const ArchiveAssetToolParams = BaseToolSchema.extend({\n assetId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the asset to archive (string) or an array of asset IDs (up to 100 assets)',\n ),\n});\n\ntype Params = z.infer<typeof ArchiveAssetToolParams>;\n\nasync function tool(args: Params) {\n const baseParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const assetIds = Array.isArray(args.assetId) ? args.assetId : [args.assetId];\n\n // Track successfully archived assets\n const successfullyArchived: string[] = [];\n\n // Process each asset sequentially, stopping at first failure\n for (const assetId of assetIds) {\n try {\n const params = {\n ...baseParams,\n assetId,\n };\n\n // Archive the asset - will throw on error\n await contentfulClient.asset.archive(params);\n successfullyArchived.push(assetId);\n } catch (error) {\n // Enhance error with context about successful operations\n const errorMessage =\n successfullyArchived.length > 0\n ? `Failed to archive asset '${assetId}' after successfully archiving ${successfullyArchived.length} asset(s): [${successfullyArchived.join(', ')}]. Original error: ${error instanceof Error ? error.message : String(error)}`\n : `Failed to archive asset '${assetId}': ${error instanceof Error ? error.message : String(error)}`;\n\n throw new Error(errorMessage);\n }\n }\n\n if (assetIds.length === 1) {\n return createSuccessResponse('Asset archived successfully', {\n assetId: assetIds[0],\n });\n } else {\n return createSuccessResponse(\n `Successfully archived ${assetIds.length} assets`,\n {\n archivedCount: assetIds.length,\n assetIds,\n },\n );\n }\n}\n\nexport const archiveAssetTool = withErrorHandling(\n tool,\n 'Error archiving asset',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const UnarchiveAssetToolParams = BaseToolSchema.extend({\n assetId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the asset to unarchive (string) or an array of asset IDs (up to 100 assets)',\n ),\n});\n\ntype Params = z.infer<typeof UnarchiveAssetToolParams>;\n\nasync function tool(args: Params) {\n const baseParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const assetIds = Array.isArray(args.assetId) ? args.assetId : [args.assetId];\n\n // Track successfully unarchived assets\n const successfullyUnarchived: string[] = [];\n\n // Process each asset sequentially, stopping at first failure\n for (const assetId of assetIds) {\n try {\n const params = {\n ...baseParams,\n assetId,\n };\n\n // Unarchive the asset - will throw on error\n await contentfulClient.asset.unarchive(params);\n successfullyUnarchived.push(assetId);\n } catch (error) {\n // Enhance error with context about successful operations\n const errorMessage =\n successfullyUnarchived.length > 0\n ? `Failed to unarchive asset '${assetId}' after successfully unarchiving ${successfullyUnarchived.length} asset(s): [${successfullyUnarchived.join(', ')}]. Original error: ${error instanceof Error ? error.message : String(error)}`\n : `Failed to unarchive asset '${assetId}': ${error instanceof Error ? error.message : String(error)}`;\n\n throw new Error(errorMessage);\n }\n }\n\n if (assetIds.length === 1) {\n return createSuccessResponse('Asset unarchived successfully', {\n assetId: assetIds[0],\n });\n } else {\n return createSuccessResponse(\n `Successfully unarchived ${assetIds.length} assets`,\n {\n unarchivedCount: assetIds.length,\n assetIds,\n },\n );\n }\n}\n\nexport const unarchiveAssetTool = withErrorHandling(\n tool,\n 'Error unarchiving asset',\n);\n","import { uploadAssetTool, UploadAssetToolParams } from './uploadAsset.js';\nimport { listAssetsTool, ListAssetsToolParams } from './listAssets.js';\nimport { getAssetTool, GetAssetToolParams } from './getAsset.js';\nimport { updateAssetTool, UpdateAssetToolParams } from './updateAsset.js';\nimport { deleteAssetTool, DeleteAssetToolParams } from './deleteAsset.js';\nimport { publishAssetTool, PublishAssetToolParams } from './publishAsset.js';\nimport {\n unpublishAssetTool,\n UnpublishAssetToolParams,\n} from './unpublishAsset.js';\nimport { archiveAssetTool, ArchiveAssetToolParams } from './archiveAsset.js';\nimport {\n unarchiveAssetTool,\n UnarchiveAssetToolParams,\n} from './unarchiveAsset.js';\n\nexport const assetTools = {\n uploadAsset: {\n title: 'upload_asset',\n description: 'Upload a new asset',\n inputParams: UploadAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: uploadAssetTool,\n },\n listAssets: {\n title: 'list_assets',\n description:\n 'List assets in a space. Returns a maximum of 3 items per request. Use skip parameter to paginate through results.',\n inputParams: ListAssetsToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listAssetsTool,\n },\n getAsset: {\n title: 'get_asset',\n description: 'Retrieve an asset',\n inputParams: GetAssetToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getAssetTool,\n },\n updateAsset: {\n title: 'update_asset',\n description: 'Update an asset',\n inputParams: UpdateAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateAssetTool,\n },\n deleteAsset: {\n title: 'delete_asset',\n description: 'Delete an asset',\n inputParams: DeleteAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteAssetTool,\n },\n publishAsset: {\n title: 'publish_asset',\n description:\n 'Publish an asset or multiple assets. Accepts either a single assetId (string) or an array of assetIds (up to 100 assets). For a single asset, it uses the standard publish operation. For multiple assets, it automatically uses bulk publishing.',\n inputParams: PublishAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: publishAssetTool,\n },\n unpublishAsset: {\n title: 'unpublish_asset',\n description:\n 'Unpublish an asset or multiple assets. Accepts either a single assetId (string) or an array of assetIds (up to 100 assets). For a single asset, it uses the standard unpublish operation. For multiple assets, it automatically uses bulk unpublishing.',\n inputParams: UnpublishAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: unpublishAssetTool,\n },\n archiveAsset: {\n title: 'archive_asset',\n description:\n 'Archive an asset or multiple assets. Archives assets that are no longer needed but should be preserved. Assets must be unpublished before they can be archived. Accepts either a single assetId (string) or an array of assetIds (up to 100 assets). For multiple assets, processes each one sequentially as a pseudo-bulk operation.',\n inputParams: ArchiveAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: archiveAssetTool,\n },\n unarchiveAsset: {\n title: 'unarchive_asset',\n description:\n 'Unarchive an asset or multiple assets. Restores archived assets, making them available for editing and publishing again. Accepts either a single assetId (string) or an array of assetIds (up to 100 assets). For multiple assets, processes each one sequentially as a pseudo-bulk operation.',\n inputParams: UnarchiveAssetToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: unarchiveAssetTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetContentTypeToolParams = BaseToolSchema.extend({\n contentTypeId: z\n .string()\n .describe('The ID of the content type to retrieve details for'),\n});\n\ntype Params = z.infer<typeof GetContentTypeToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the content type details\n const contentType = await contentfulClient.contentType.get({\n ...params,\n contentTypeId: args.contentTypeId,\n });\n\n return createSuccessResponse('Content type retrieved successfully', {\n contentType,\n });\n}\n\nexport const getContentTypeTool = withErrorHandling(\n tool,\n 'Error retrieving content type',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const ListContentTypesToolParams = BaseToolSchema.extend({\n limit: z\n .number()\n .optional()\n .describe('Maximum number of content types to return (max 10)'),\n skip: z\n .number()\n .optional()\n .describe('Skip this many content types for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n order: z.string().optional().describe('Order content types by this field'),\n});\n\ntype Params = z.infer<typeof ListContentTypesToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const contentTypes = await contentfulClient.contentType.getMany({\n ...params,\n query: {\n limit: Math.min(args.limit || 10, 10),\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedContentTypes = contentTypes.items.map((contentType) => ({\n ...contentType,\n id: contentType.sys.id,\n fieldsCount: contentType.fields.length,\n }));\n\n const summarized = summarizeData(\n {\n ...contentTypes,\n items: summarizedContentTypes,\n },\n {\n maxItems: 10,\n remainingMessage:\n 'To see more content types, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Content types retrieved successfully', {\n contentTypes: summarized,\n total: contentTypes.total,\n limit: contentTypes.limit,\n skip: contentTypes.skip,\n });\n}\n\nexport const listContentTypesTool = withErrorHandling(\n tool,\n 'Error listing content types',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { FieldSchema } from '../../types/fieldSchema.js';\nimport { ContentTypeMetadataSchema } from '../../types/taxonomySchema.js';\n\nexport const CreateContentTypeToolParams = BaseToolSchema.extend({\n name: z.string().describe('The name of the content type'),\n displayField: z.string().describe('The field ID to use as the display field'),\n description: z\n .string()\n .optional()\n .describe('Description of the content type'),\n contentTypeId: z\n .string()\n .optional()\n .describe(\n 'Optional ID for the content type. If provided, will use createWithId method',\n ),\n fields: z\n .array(FieldSchema)\n .describe('Array of field definitions for the content type'),\n metadata: ContentTypeMetadataSchema,\n});\n\ntype Params = z.infer<typeof CreateContentTypeToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const contentTypeData = {\n name: args.name,\n displayField: args.displayField,\n description: args.description,\n fields: args.fields,\n metadata: args.metadata,\n };\n\n // Create the content type with or without ID\n const contentType = args.contentTypeId\n ? await contentfulClient.contentType.createWithId(\n { ...params, contentTypeId: args.contentTypeId },\n contentTypeData,\n )\n : await contentfulClient.contentType.create(params, contentTypeData);\n\n return createSuccessResponse('Content type created successfully', {\n contentType,\n });\n}\n\nexport const createContentTypeTool = withErrorHandling(\n tool,\n 'Error creating content type',\n);\n","import { z } from 'zod';\nimport { ContentTypeFieldValidationSchema } from './contentTypeFieldValidationSchema.js';\nexport const FieldSchema = z.object({\n id: z.string().describe('The field ID'),\n name: z.string().describe('The field name'),\n type: z\n .string()\n .describe(\n 'The field type (e.g., \"Symbol\", \"Text\", \"Integer\", \"Boolean\", \"Date\", \"Location\", \"Link\", \"Array\", \"Object\")',\n ),\n required: z.boolean().describe('Whether the field is required'),\n localized: z.boolean().describe('Whether the field is localized'),\n disabled: z.boolean().optional().describe('Whether the field is disabled'),\n omitted: z\n .boolean()\n .optional()\n .describe('Whether the field is omitted from the API response'),\n validations: z\n .array(ContentTypeFieldValidationSchema)\n .optional()\n .describe('Field validations'),\n settings: z.record(z.any()).optional().describe('Field-specific settings'),\n defaultValue: z.any().optional().describe('Default value for the field'),\n linkType: z\n .string()\n .optional()\n .describe('Link type for Link fields (e.g., \"Entry\", \"Asset\")'),\n items: z\n .object({\n type: z.string(),\n linkType: z.string().optional(),\n validations: z.array(ContentTypeFieldValidationSchema).optional(),\n })\n .optional()\n .describe('Items configuration for Array fields'),\n});\n","import { z } from 'zod';\nimport { INLINES, BLOCKS } from '@contentful/rich-text-types';\n\n/**\n * Zod schemas for Content Type Field Validation\n *\n * These schemas mirror the `ContentTypeFieldValidation` from contentful-management\n * (see node_modules/contentful-management/dist/typings/entities/content-type-fields.d.ts)\n *\n * They define the validation rules that can be applied to content type fields\n * in Contentful, such as size limits, allowed content types for references,\n * date ranges, regular expressions, etc.\n */\n\n/**\n * Schema for numeric range validation\n * Used to validate numeric fields with minimum and maximum constraints\n */\nconst NumRange = z.object({\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\n/**\n * Schema for date range validation\n * Used to validate date fields with minimum and maximum date constraints\n */\nconst DateRange = z.object({\n min: z.string().optional(),\n max: z.string().optional(),\n});\n\n/**\n * Schema for regular expression validation\n * Defines a pattern and flags for validating text with regular expressions\n */\nconst RegExpSchema = z.object({\n pattern: z.string(),\n flags: z.string(),\n});\n\n/**\n * Schema for validating image dimensions in assets\n * Allows specifying width and height constraints\n */\nconst AssetImageDimensions = z.object({\n width: NumRange.optional(),\n height: NumRange.optional(),\n});\n\n/**\n * Schema for external resource references\n * Used for linking to resources outside of Contentful\n */\nexport const ExternalResource = z.object({\n type: z.string(),\n});\n\n/**\n * Schema for Contentful entry resources\n * Used for linking to specific content types within Contentful\n */\nexport const ContentfulEntryResource = z.object({\n type: z.literal('Contentful:Entry'),\n source: z.string(),\n contentTypes: z.array(z.string()),\n});\n\n/**\n * Union of allowed resource types for content linking\n * Can be either Contentful entries or external resources\n */\nexport const ContentTypeAllowedResources = z.union([\n ContentfulEntryResource,\n ExternalResource,\n]);\n\n/**\n * Schema for validating nodes in rich text fields\n * Defines validations for embedded entries, assets, and other node types\n */\nconst NodesValidation = z.record(\n z\n .array(\n z.object({\n // subset of ContentTypeFieldValidation used for node validations\n size: NumRange.optional(),\n linkContentType: z.array(z.string()).optional(),\n message: z.string().nullable().optional(),\n }),\n )\n .or(\n z.object({\n validations: z.array(\n z.object({\n size: NumRange.optional(),\n message: z.string().nullable().optional(),\n }),\n ),\n allowedResources: z.array(ContentTypeAllowedResources),\n }),\n ),\n);\n\n/**\n * Main schema for content type field validation\n *\n * This comprehensive schema defines all possible validation rules that can be\n * applied to content type fields in Contentful, including:\n * - Link validations (content types, MIME types)\n * - Value constraints (allowed values, size limits, ranges)\n * - Text validations (regular expressions)\n * - Rich text validations (allowed node types, marks)\n * - Asset validations (file size, image dimensions)\n * - Custom error messages\n */\nexport const ContentTypeFieldValidationSchema = z.object({\n linkContentType: z.array(z.string()).optional(),\n in: z.array(z.union([z.string(), z.number()])).optional(),\n linkMimetypeGroup: z.array(z.string()).optional(),\n enabledNodeTypes: z\n .array(z.union([z.nativeEnum(BLOCKS), z.nativeEnum(INLINES)]))\n .optional(),\n enabledMarks: z.array(z.string()).optional(),\n unique: z.boolean().optional(),\n size: NumRange.optional(),\n range: NumRange.optional(),\n dateRange: DateRange.optional(),\n regexp: RegExpSchema.optional(),\n message: z.string().nullable().optional(),\n prohibitRegexp: RegExpSchema.optional(),\n assetImageDimensions: AssetImageDimensions.optional(),\n assetFileSize: NumRange.optional(),\n nodes: NodesValidation.optional(),\n});\n\n/**\n * Type derived from the ContentTypeFieldValidationSchema\n * Used for typing variables and parameters throughout the application\n */\nexport type ContentTypeFieldValidation = z.infer<\n typeof ContentTypeFieldValidationSchema\n>;\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { FieldSchema } from '../../types/fieldSchema.js';\nimport { ContentTypeMetadataSchema } from '../../types/taxonomySchema.js';\nimport { ContentFields } from 'contentful-management';\n\nexport const UpdateContentTypeToolParams = BaseToolSchema.extend({\n contentTypeId: z.string().describe('The ID of the content type to update'),\n name: z.string().optional().describe('The name of the content type'),\n displayField: z\n .string()\n .optional()\n .describe('The field ID to use as the display field'),\n description: z\n .string()\n .optional()\n .describe('Description of the content type'),\n fields: z\n .array(FieldSchema)\n .optional()\n .describe(\n 'Array of field definitions for the content type. Will be merged with existing fields.',\n ),\n metadata: ContentTypeMetadataSchema,\n});\n\ntype Params = z.infer<typeof UpdateContentTypeToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n contentTypeId: args.contentTypeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the current content type\n const currentContentType = await contentfulClient.contentType.get(params);\n\n // Use the new fields if provided, otherwise keep existing fields\n const fields = args.fields || currentContentType.fields;\n\n // If fields are provided, ensure we're not removing any required field metadata\n if (args.fields) {\n const existingFieldsMap = currentContentType.fields.reduce(\n (acc: Record<string, ContentFields>, field: ContentFields) => {\n acc[field.id] = field;\n return acc;\n },\n {},\n );\n\n // Ensure each field has all required metadata\n fields.forEach((field: ContentFields) => {\n const existingField = existingFieldsMap[field.id];\n if (existingField) {\n // Preserve validations if not explicitly changed\n field.validations = field.validations || existingField.validations;\n\n // Preserve required flag if not explicitly set, default to false\n field.required =\n field.required !== undefined\n ? field.required\n : existingField.required || false;\n\n // Preserve link type for Link fields\n if (\n field.type === 'Link' &&\n !field.linkType &&\n existingField.linkType\n ) {\n field.linkType = existingField.linkType;\n }\n\n // Preserve items for Array fields\n if (field.type === 'Array' && !field.items && existingField.items) {\n field.items = existingField.items;\n }\n } else {\n // For new fields, ensure required is a boolean\n field.required = field.required || false;\n }\n });\n }\n\n // Update the content type\n const contentType = await contentfulClient.contentType.update(params, {\n ...currentContentType,\n name: args.name || currentContentType.name,\n description: args.description || currentContentType.description,\n displayField: args.displayField || currentContentType.displayField,\n fields: fields as typeof currentContentType.fields,\n metadata: args.metadata || currentContentType.metadata,\n });\n\n return createSuccessResponse('Content type updated successfully', {\n contentType,\n });\n}\n\nexport const updateContentTypeTool = withErrorHandling(\n tool,\n 'Error updating content type',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const DeleteContentTypeToolParams = BaseToolSchema.extend({\n contentTypeId: z.string().describe('The ID of the content type to delete'),\n});\n\ntype Params = z.infer<typeof DeleteContentTypeToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n contentTypeId: args.contentTypeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Delete the content type\n await contentfulClient.contentType.delete(params);\n\n return createSuccessResponse('Content type deleted successfully', {\n contentTypeId: args.contentTypeId,\n });\n}\n\nexport const deleteContentTypeTool = withErrorHandling(\n tool,\n 'Error deleting content type',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const PublishContentTypeToolParams = BaseToolSchema.extend({\n contentTypeId: z.string().describe('The ID of the content type to publish'),\n});\n\ntype Params = z.infer<typeof PublishContentTypeToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n contentTypeId: args.contentTypeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the content type first\n const currentContentType = await contentfulClient.contentType.get(params);\n\n // Publish the content type\n const contentType = await contentfulClient.contentType.publish(\n params,\n currentContentType,\n );\n\n return createSuccessResponse('Content type published successfully', {\n contentType,\n });\n}\n\nexport const publishContentTypeTool = withErrorHandling(\n tool,\n 'Error publishing content type',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const UnpublishContentTypeToolParams = BaseToolSchema.extend({\n contentTypeId: z.string().describe('The ID of the content type to unpublish'),\n});\n\ntype Params = z.infer<typeof UnpublishContentTypeToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n contentTypeId: args.contentTypeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Unpublish the content type\n const contentType = await contentfulClient.contentType.unpublish(params);\n\n return createSuccessResponse('Content type unpublished successfully', {\n contentType,\n });\n}\n\nexport const unpublishContentTypeTool = withErrorHandling(\n tool,\n 'Error unpublishing content type',\n);\n","import {\n getContentTypeTool,\n GetContentTypeToolParams,\n} from './getContentType.js';\nimport {\n listContentTypesTool,\n ListContentTypesToolParams,\n} from './listContentTypes.js';\nimport {\n createContentTypeTool,\n CreateContentTypeToolParams,\n} from './createContentType.js';\nimport {\n updateContentTypeTool,\n UpdateContentTypeToolParams,\n} from './updateContentType.js';\nimport {\n deleteContentTypeTool,\n DeleteContentTypeToolParams,\n} from './deleteContentType.js';\nimport {\n publishContentTypeTool,\n PublishContentTypeToolParams,\n} from './publishContentType.js';\nimport {\n unpublishContentTypeTool,\n UnpublishContentTypeToolParams,\n} from './unpublishContentType.js';\n\nexport const contentTypeTools = {\n getContentType: {\n title: 'get_content_type',\n description: 'Get details about a specific Contentful content type',\n inputParams: GetContentTypeToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getContentTypeTool,\n },\n listContentTypes: {\n title: 'list_content_types',\n description:\n 'List content types in a space. Returns a maximum of 10 items per request. Use skip parameter to paginate through results.',\n inputParams: ListContentTypesToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listContentTypesTool,\n },\n createContentType: {\n title: 'create_content_type',\n description: 'Create a new content type',\n inputParams: CreateContentTypeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createContentTypeTool,\n },\n updateContentType: {\n title: 'update_content_type',\n description:\n 'Update an existing content type. The handler will merge your field updates with existing content type data, so you only need to provide the fields and properties you want to change.',\n inputParams: UpdateContentTypeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateContentTypeTool,\n },\n deleteContentType: {\n title: 'delete_content_type',\n description: 'Delete a content type',\n inputParams: DeleteContentTypeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteContentTypeTool,\n },\n publishContentType: {\n title: 'publish_content_type',\n description: 'Publish a content type',\n inputParams: PublishContentTypeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: publishContentTypeTool,\n },\n unpublishContentType: {\n title: 'unpublish_content_type',\n description: 'Unpublish a content type',\n inputParams: UnpublishContentTypeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: unpublishContentTypeTool,\n },\n};\n","import { z } from 'zod';\nimport { outdent } from 'outdent';\nimport { contextStore } from './store.js';\nimport { withErrorHandling } from '../../utils/response.js';\nimport { MCP_INSTRUCTIONS } from './instructions.js';\nimport { env } from '../../config/env.js';\n\nexport const GetInitialContextToolParams = z.object({});\n\ntype Params = z.infer<typeof GetInitialContextToolParams>;\n\nexport function hasInitialContext(): boolean {\n return contextStore.hasInitialContext();\n}\n\nasync function tool(_params: Params) {\n const config = {\n space: env.data?.SPACE_ID,\n environment: env.data?.ENVIRONMENT_ID,\n organization: env.data?.ORGANIZATION_ID,\n };\n\n const configInfo = `Current Contentful Configuration:\n - Space ID: ${config.space}\n - Environment ID: ${config.environment}\n - Organization ID: ${config.organization}`;\n\n const todaysDate = new Date().toLocaleDateString('en-US');\n\n const message = outdent`\n ${MCP_INSTRUCTIONS}\n\n This is the initial context for your Contentful instance:\n\n <context>\n ${configInfo}\n </content>\n\n <todaysDate>${todaysDate}</todaysDate>\n `;\n\n contextStore.setInitialContextLoaded();\n\n return {\n content: [\n {\n type: 'text' as const,\n text: message,\n },\n ],\n };\n}\n\nexport const getInitialContextTool = withErrorHandling(\n tool,\n 'Error getting initial context',\n);\n","interface InitialContext {\n hasGlobalContext: boolean;\n}\n\nclass ContextStore {\n private context: InitialContext = {\n hasGlobalContext: false,\n };\n\n setInitialContextLoaded(): void {\n this.context.hasGlobalContext = true;\n }\n\n hasInitialContext(): boolean {\n return this.context.hasGlobalContext;\n }\n\n resetInitialContext(): void {\n this.context.hasGlobalContext = false;\n }\n}\n\nexport const contextStore = new ContextStore();\n","export const MCP_INSTRUCTIONS = `You are a helpful assistant integrated with Contentful through the Model Context Protocol (MCP).\n\n# Core Agent Principles\n\n## IMPORTANT FIRST STEP:\n- Always call get_initial_context first to initialize your connection before using any other tools\n- This is required for all operations and will give you essential information about the current Contentful environment\n\n## Key Principles:\n- **Persistence**: Keep going until the user's query is completely resolved. Only end your turn when you are sure the problem is solved.\n- **Tool Usage**: If you are not sure about content or schema structure, use your tools to gather relevant information. Do NOT guess or make up answers.\n- **Planning**: Plan your approach before each tool call, and reflect on the outcomes of previous tool calls.\n- **Resource Clarification**: ALWAYS ask the user which resource to work with if there are multiple resources available. Never assume or guess which resource to use.\n- **Error Handling**: NEVER apologize for errors when making tool calls. Instead, immediately try a different approach or tool call. You may briefly inform the user what you're doing, but never say sorry.\n\n# Content Handling\n\n## Content-Type-First Approach:\n- **ALWAYS check the content type first** when users ask about finding or editing specific content types (e.g., \"Where can I edit our pricing page?\")\n- Use get_content_types proactively to understand what content types exist before attempting queries\n- This prevents failed queries and immediately reveals relevant content types (e.g., discovering a \\`pricingPage\\` type when asked about pricing)\n- Match user requests to the appropriate content types in the entry\n- If a user asks to create a field that doesn't match the content type (e.g., \"writer\" when the content type has \"author\"), suggest the correct type\n\n## entry Creation Limits:\n- A user is only allowed to create/edit/mutate a maximum of 5 (five) entries at a time\n- For multiple entry creation, use the 'async' parameter (set to true) for better performance\n- Only use async=true when creating more than one entry in a single conversation\n\n# Searching for Content\n\n## Content-Type-First Search Strategy:\n- **Content-Type-first approach**: When users ask about specific content (e.g., \"pricing page\", \"blog posts\"), use get_content_type first to discover relevant content types\n- This immediately reveals the correct content types and prevents wasted time on failed queries\n- After understanding the content type, use search_entries to search for content based on the correct content types and field names\n- If a query returns no results, retry 2-3 times with modified queries by adjusting filters, relaxing constraints, or trying alternative field names\n- When retrying queries, consider using more general terms, removing specific filters, or checking for typos in field names\n\n## Handling Multi-Step Queries:\n- For requests involving related entities (e.g., \"Find blog posts by Magnus\"), use a multi-step approach\n- ALWAYS check the content type structure first to understand fields and references\n- First, query for the referenced entity (e.g., author) to find its ID or confirm its existence\n- If multiple entities match (e.g., several authors named \"Magnus\"), query them all and display them to the user\n- Then use the found ID(s) to query for the primary content (e.g., blog posts referencing that author)\n- For references in Contentful, remember to use the proper reference format\n- Verify fields in the content type before constructing queries (single reference vs. array of references)\n\n## Entry Management:\n- For entry creation, use create_entry with clear instructions\n- Use entry_action for operations like publishing, unpublishing, deleting, or discarding entries\n- Use update_entry for content modifications with AI assistance\n- Use patch_entry for precise, direct modifications without AI generation (one operation at a time)\n- Use transform_entry when preserving rich text formatting is crucial\n- Use translate_entry specifically for language translation tasks\n- Use transform_image for AI-powered image operations\n- Always verify entry existence before attempting to modify it\n\n# Migration Strategies\n- Use the space_to_space migration workflow to help a user when they want to migrate content from one space to another. Start this workflow by calling the start_space_to_space_migration tool.\n- You do not need to fetch content types (ex. list_content_types tool) or entries (ex. search_entries tool) prior to starting the migration workflow. Once the user states they want to start the migration workflow, you simply need to call the start_space_to_space_migration tool.\n\n# Error Handling and Debugging\n\n## Error Response Strategy:\n- If you encounter an error, explain what went wrong clearly\n- Suggest potential solutions or alternatives\n- Make sure to check entry existence, field requirements, and permission issues\n- Try different approaches immediately rather than stopping at the first error\n\n## Common Issues to Check:\n- entry existence and permissions\n- Required field validation\n- Correct field types (array vs single reference)\n\n# Response Format and Communication\n\n## General Guidelines:\n- Keep your responses concise but thorough\n- Format complex data for readability using markdown\n- Focus on completing the requested tasks efficiently\n- Provide context from entries when relevant\n- When displaying entries, show the most important fields first\n\n## Before Using Tools:\nBefore running a tool:\n1. Think about what information you need to gather\n2. Determine the right tool and parameters to use\n3. Briefly communicate to the user what you're about to do in a conversational tone\n\n## Problem-Solving Strategy:\n1. **Understand the request**: Analyze what the user is asking for and identify necessary entry types and fields\n2. **Resource identification**: If multiple resources are available, ALWAYS ask which resource to work with\n3. **Plan your approach**: Determine which tools you'll need and in which order\n4. **Execute with tools**: Use appropriate tools to query, create, or update entries\n5. **Verify results**: Check if results match what the user requested and make adjustments if needed\n6. **Respond clearly**: Present results in a clear, concise format\n\n# Best Practices\n\n## Content Management:\n- When creating content, follow the content type structure exactly\n- Always verify entry existence before attempting to modify it\n- Remind users that entry operations can affect live content\n\n## Efficiency Tips:\n- Suggest appropriate entry types based on user needs\n- Recommend efficient ways to structure content\n- Explain how Contentful features like content types, entries, and references work\n- Help users understand the relationship between spaces, environments, and content types\n\n## Bulk Actions:\n- If making multiple calls to the same tool, ALWAYS check and see whether that tool supports bulk operations first, and condense them into a single call if possible.\n\nYou have access to powerful tools that can help you work with Contentful effectively. Always start with get_initial_context, check the schema when needed, clarify resources when multiple exist, and take action to complete user requests fully.`;\n","import {\n getInitialContextTool,\n GetInitialContextToolParams,\n} from './getInitialContextTool.js';\n\nexport const contextTools = {\n getInitialContext: {\n title: 'get_initial_context',\n description:\n 'IMPORTANT: This tool must be called before using any other tools. It will get initial context and usage instructions for this MCP server. ',\n inputParams: GetInitialContextToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getInitialContextTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const ListEditorInterfacesToolParams = BaseToolSchema.extend({});\n\ntype Params = z.infer<typeof ListEditorInterfacesToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const editorInterfaces =\n await contentfulClient.editorInterface.getMany(params);\n\n const summarizedInterfaces = editorInterfaces.items.map(\n (editorInterface) => ({\n contentTypeId: editorInterface.sys.contentType.sys.id,\n version: editorInterface.sys.version,\n controlsCount: editorInterface.controls?.length || 0,\n }),\n );\n\n const summarized = summarizeData(\n {\n ...editorInterfaces,\n items: summarizedInterfaces,\n },\n {\n maxItems: 20,\n remainingMessage:\n 'This list includes all editor interfaces in the environment.',\n },\n );\n\n return createSuccessResponse('Editor interfaces retrieved successfully', {\n editorInterfaces: summarized,\n total: editorInterfaces.total,\n limit: editorInterfaces.limit,\n skip: editorInterfaces.skip,\n });\n}\n\nexport const listEditorInterfacesTool = withErrorHandling(\n tool,\n 'Error listing editor interfaces',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetEditorInterfaceToolParams = BaseToolSchema.extend({\n contentTypeId: z\n .string()\n .describe(\n 'The ID of the content type to retrieve the editor interface for',\n ),\n});\n\ntype Params = z.infer<typeof GetEditorInterfaceToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n contentTypeId: args.contentTypeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const editorInterface = await contentfulClient.editorInterface.get(params);\n\n return createSuccessResponse('Editor interface retrieved successfully', {\n editorInterface,\n });\n}\n\nexport const getEditorInterfaceTool = withErrorHandling(\n tool,\n 'Error retrieving editor interface',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { EditorInterfaceProps } from 'contentful-management';\n\n// Define control schema for editor interface controls\nconst ControlSchema = z.object({\n fieldId: z.string().describe('The field ID this control applies to'),\n widgetId: z.string().describe('The widget ID to use for this field'),\n widgetNamespace: z\n .enum(['builtin', 'extension', 'app', 'editor-builtin'])\n .optional()\n .describe(\n 'The namespace of the widget (builtin, extension, app, or editor-builtin)',\n ),\n settings: z\n .record(z.any())\n .optional()\n .describe('Settings object for the widget'),\n});\n\n// Define sidebar schema\nconst SidebarItemSchema = z.object({\n widgetId: z.string().describe('The widget ID for the sidebar item'),\n widgetNamespace: z\n .enum(['sidebar-builtin', 'extension', 'app'])\n .describe('The namespace of the sidebar widget'),\n settings: z\n .record(z.any())\n .optional()\n .describe('Settings object for the sidebar widget'),\n disabled: z\n .boolean()\n .optional()\n .describe('Whether the sidebar item is disabled'),\n});\n\n// Define editor layout schema\nconst EditorLayoutItemSchema = z.object({\n fieldId: z.string().describe('The field ID'),\n settings: z\n .record(z.any())\n .optional()\n .describe('Layout settings for the field'),\n});\n\nconst EditorLayoutSchema = z.object({\n items: z\n .array(EditorLayoutItemSchema)\n .optional()\n .describe('Array of editor layout items'),\n});\n\n// Define groupControl schema\nconst GroupControlSchema = z.object({\n groupId: z.string().describe('The group ID'),\n widgetId: z.string().describe('The widget ID for the group control'),\n widgetNamespace: z\n .enum(['builtin', 'extension', 'app'])\n .optional()\n .describe('The namespace of the group control widget'),\n settings: z\n .record(z.any())\n .optional()\n .describe('Settings object for the group control'),\n});\n\nexport const UpdateEditorInterfaceToolParams = BaseToolSchema.extend({\n contentTypeId: z\n .string()\n .describe('The ID of the content type to update the editor interface for'),\n controls: z\n .array(ControlSchema)\n .optional()\n .describe(\n 'Array of control definitions for fields in the content type. Each control defines which widget to use for a field.',\n ),\n sidebar: z\n .array(SidebarItemSchema)\n .optional()\n .describe('Array of sidebar widget configurations'),\n editorLayout: z\n .array(EditorLayoutSchema)\n .optional()\n .describe('Editor layout configuration for organizing fields'),\n groupControls: z\n .array(GroupControlSchema)\n .optional()\n .describe('Array of group control definitions for field groups'),\n});\n\ntype Params = z.infer<typeof UpdateEditorInterfaceToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n contentTypeId: args.contentTypeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the current editor interface\n const currentEditorInterface =\n await contentfulClient.editorInterface.get(params);\n\n // Build the update payload\n const updatePayload: Record<string, unknown> = {\n ...currentEditorInterface,\n };\n\n // Update only the fields that are provided\n if (args.controls !== undefined) {\n updatePayload['controls'] = args.controls;\n }\n\n if (args.sidebar !== undefined) {\n updatePayload['sidebar'] = args.sidebar;\n }\n\n if (args.editorLayout !== undefined) {\n updatePayload['editorLayout'] = args.editorLayout;\n }\n\n if (args.groupControls !== undefined) {\n updatePayload['groupControls'] = args.groupControls;\n }\n\n // Update the editor interface\n const editorInterface = await contentfulClient.editorInterface.update(\n params,\n updatePayload as EditorInterfaceProps,\n );\n\n return createSuccessResponse('Editor interface updated successfully', {\n editorInterface,\n });\n}\n\nexport const updateEditorInterfaceTool = withErrorHandling(\n tool,\n 'Error updating editor interface',\n);\n","import {\n listEditorInterfacesTool,\n ListEditorInterfacesToolParams,\n} from './listEditorInterfaces.js';\nimport {\n getEditorInterfaceTool,\n GetEditorInterfaceToolParams,\n} from './getEditorInterface.js';\nimport {\n updateEditorInterfaceTool,\n UpdateEditorInterfaceToolParams,\n} from './updateEditorInterface.js';\n\nexport const editorInterfaceTools = {\n listEditorInterfaces: {\n title: 'list_editor_interfaces',\n description:\n 'Get all editor interfaces of a space. Returns configuration for how content types are displayed and edited in the Contentful web app, including field controls, sidebars, and layout settings.',\n inputParams: ListEditorInterfacesToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listEditorInterfacesTool,\n },\n getEditorInterface: {\n title: 'get_editor_interface',\n description:\n 'Get the editor interface for a specific content type. Returns detailed configuration including field controls (widgets), sidebar widgets, editor layout, and group controls that define how the content type is displayed and edited in the Contentful web app.',\n inputParams: GetEditorInterfaceToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getEditorInterfaceTool,\n },\n updateEditorInterface: {\n title: 'update_editor_interface',\n description:\n 'Update the editor interface for a content type. Allows customization of field controls (widgets), sidebar widgets, editor layout, and group controls. Only provide the properties you want to change - existing values will be preserved for unprovided fields.',\n inputParams: UpdateEditorInterfaceToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateEditorInterfaceTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const SearchEntriesToolParams = BaseToolSchema.extend({\n query: z.object({\n content_type: z.string().optional().describe('Filter by content type'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n links_to_entry: z\n .string()\n .optional()\n .describe('Find entries that link to the specified entry ID'),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of entries to return'),\n skip: z.number().optional().describe('Skip this many entries'),\n order: z.string().optional().describe('Order entries by this field'),\n }),\n});\n\ntype Params = z.infer<typeof SearchEntriesToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const entries = await contentfulClient.entry.getMany({\n ...params,\n query: {\n ...args.query,\n limit: Math.min(args.query.limit || 3, 3),\n skip: args.query.skip || 0,\n },\n });\n\n const summarized = summarizeData(entries, {\n maxItems: 3,\n remainingMessage:\n 'To see more entries, please ask me to retrieve the next page.',\n });\n\n return createSuccessResponse('Entries retrieved successfully', {\n entries: summarized,\n });\n}\n\nexport const searchEntriesTool = withErrorHandling(\n tool,\n 'Error deleting dataset',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { EntryMetadataSchema } from '../../types/taxonomySchema.js';\n\nexport const CreateEntryToolParams = BaseToolSchema.extend({\n contentTypeId: z\n .string()\n .describe('The ID of the content type to create an entry for'),\n fields: z\n .record(z.any())\n .describe(\n 'The field values for the new entry. Keys should be field IDs and values should be the field content.',\n ),\n metadata: EntryMetadataSchema,\n});\n\ntype Params = z.infer<typeof CreateEntryToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n const newEntry = await contentfulClient.entry.create(\n {\n ...params,\n contentTypeId: args.contentTypeId,\n },\n {\n fields: args.fields,\n ...(args.metadata ? { metadata: args.metadata } : {}),\n },\n );\n\n //return info about the entry that was created\n return createSuccessResponse('Entry created successfully', { newEntry });\n}\n\nexport const createEntryTool = withErrorHandling(tool, 'Error creating entry');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const DeleteEntryToolParams = BaseToolSchema.extend({\n entryId: z.string().describe('The ID of the entry to delete'),\n});\n\ntype Params = z.infer<typeof DeleteEntryToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n entryId: args.entryId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // First, get the entry to check its status\n const entry = await contentfulClient.entry.get(params);\n\n // Delete the entry\n await contentfulClient.entry.delete(params);\n\n //return info about the entry that was deleted\n return createSuccessResponse('Entry deleted successfully', { entry });\n}\n\nexport const deleteEntryTool = withErrorHandling(tool, 'Error deleting entry');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { EntryMetadataSchema } from '../../types/taxonomySchema.js';\n\nexport const UpdateEntryToolParams = BaseToolSchema.extend({\n entryId: z.string().describe('The ID of the entry to update'),\n fields: z\n .record(z.any())\n .describe(\n 'The field values to update. Keys should be field IDs and values should be the field content. Will be merged with existing fields.',\n ),\n metadata: EntryMetadataSchema,\n});\n\ntype Params = z.infer<typeof UpdateEntryToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n entryId: args.entryId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // First, get the existing entry\n const existingEntry = await contentfulClient.entry.get(params);\n\n // Merge the provided fields with existing fields\n const mergedFields = {\n ...existingEntry.fields,\n ...args.fields,\n };\n\n const allTags = [\n ...(existingEntry.metadata?.tags || []),\n ...(args.metadata?.tags || []),\n ];\n\n const allConcepts = [\n ...(existingEntry.metadata?.concepts || []),\n ...(args.metadata?.concepts || []),\n ];\n\n // Update the entry with merged fields\n const updatedEntry = await contentfulClient.entry.update(params, {\n ...existingEntry,\n fields: mergedFields,\n metadata: {\n tags: allTags,\n concepts: allConcepts,\n },\n });\n\n //return info about the entry that was updated\n return createSuccessResponse('Entry updated successfully', { updatedEntry });\n}\n\nexport const updateEntryTool = withErrorHandling(tool, 'Error updating entry');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetEntryToolParams = BaseToolSchema.extend({\n entryId: z.string().describe('The ID of the entry to retrieve'),\n});\n\ntype Params = z.infer<typeof GetEntryToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n entryId: args.entryId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the entry\n const entry = await contentfulClient.entry.get(params);\n\n return createSuccessResponse('Entry retrieved successfully', { entry });\n}\n\nexport const getEntryTool = withErrorHandling(tool, 'Error retrieving entry');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport {\n BulkOperationParams,\n createEntryVersionedLinks,\n createEntitiesCollection,\n waitForBulkActionCompletion,\n} from '../../utils/bulkOperations.js';\n\nexport const PublishEntryToolParams = BaseToolSchema.extend({\n entryId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the entry to publish (string) or an array of entry IDs (up to 100 entries)',\n ),\n});\n\ntype Params = z.infer<typeof PublishEntryToolParams>;\n\nasync function tool(args: Params) {\n const baseParams: BulkOperationParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const entryIds = Array.isArray(args.entryId) ? args.entryId : [args.entryId];\n\n // For single entry, use individual publish for simplicity\n if (entryIds.length === 1) {\n const entryId = entryIds[0];\n const params = {\n ...baseParams,\n entryId,\n };\n\n // Get the entry first\n const entry = await contentfulClient.entry.get(params);\n\n // Publish the entry\n const publishedEntry = await contentfulClient.entry.publish(params, entry);\n\n return createSuccessResponse('Entry published successfully', {\n status: publishedEntry.sys.status,\n entryId,\n });\n }\n\n // For multiple entries, use bulk action API\n // Get the current version of each entry\n const entityVersions = await createEntryVersionedLinks(\n contentfulClient,\n baseParams,\n entryIds,\n );\n\n // Create the collection object\n const entitiesCollection = createEntitiesCollection(entityVersions);\n\n // Create the bulk action\n const bulkAction = await contentfulClient.bulkAction.publish(baseParams, {\n entities: entitiesCollection,\n });\n\n // Wait for the bulk action to complete\n const action = await waitForBulkActionCompletion(\n contentfulClient,\n baseParams,\n bulkAction.sys.id,\n );\n\n return createSuccessResponse('Entry(s) published successfully', {\n status: action.sys.status,\n entryIds,\n });\n}\n\nexport const publishEntryTool = withErrorHandling(\n tool,\n 'Error publishing entry',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport {\n BulkOperationParams,\n createEntryUnversionedLinks,\n createEntitiesCollection,\n waitForBulkActionCompletion,\n} from '../../utils/bulkOperations.js';\n\nexport const UnpublishEntryToolParams = BaseToolSchema.extend({\n entryId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the entry to unpublish (string) or an array of entry IDs (up to 100 entries)',\n ),\n});\n\ntype Params = z.infer<typeof UnpublishEntryToolParams>;\n\nasync function tool(args: Params) {\n const baseParams: BulkOperationParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const entryIds = Array.isArray(args.entryId) ? args.entryId : [args.entryId];\n\n // For single entry, use individual unpublish for simplicity\n if (entryIds.length === 1) {\n const entryId = entryIds[0];\n const params = {\n ...baseParams,\n entryId,\n };\n\n // Get the entry first\n const entry = await contentfulClient.entry.get(params);\n\n // Unpublish the entry\n const unpublishedEntry = await contentfulClient.entry.unpublish(\n params,\n entry,\n );\n\n return createSuccessResponse('Entry unpublished successfully', {\n status: unpublishedEntry.sys.status,\n entryId,\n });\n }\n\n // For multiple entries, use bulk action API\n // Get the unversioned links for each entry (unpublish doesn't need version info)\n const entityLinks = await createEntryUnversionedLinks(\n contentfulClient,\n baseParams,\n entryIds,\n );\n\n // Create the collection object\n const entitiesCollection = createEntitiesCollection(entityLinks);\n\n // Create the bulk action\n const bulkAction = await contentfulClient.bulkAction.unpublish(baseParams, {\n entities: entitiesCollection,\n });\n\n // Wait for the bulk action to complete\n const action = await waitForBulkActionCompletion(\n contentfulClient,\n baseParams,\n bulkAction.sys.id,\n );\n\n return createSuccessResponse('Entry(s) unpublished successfully', {\n status: action.sys.status,\n entryIds,\n });\n}\n\nexport const unpublishEntryTool = withErrorHandling(\n tool,\n 'Error unpublishing entry',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const ArchiveEntryToolParams = BaseToolSchema.extend({\n entryId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the entry to archive (string) or an array of entry IDs (up to 100 entries)',\n ),\n});\n\ntype Params = z.infer<typeof ArchiveEntryToolParams>;\n\nasync function tool(args: Params) {\n const baseParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const entryIds = Array.isArray(args.entryId) ? args.entryId : [args.entryId];\n\n // Track successfully archived entries\n const successfullyArchived: string[] = [];\n\n // Process each entry sequentially, stopping at first failure\n for (const entryId of entryIds) {\n try {\n const params = {\n ...baseParams,\n entryId,\n };\n\n // Archive the entry - will throw on error\n await contentfulClient.entry.archive(params);\n successfullyArchived.push(entryId);\n } catch (error) {\n // Enhance error with context about successful operations\n const errorMessage =\n successfullyArchived.length > 0\n ? `Failed to archive entry '${entryId}' after successfully archiving ${successfullyArchived.length} entry(s): [${successfullyArchived.join(', ')}]. Original error: ${error instanceof Error ? error.message : String(error)}`\n : `Failed to archive entry '${entryId}': ${error instanceof Error ? error.message : String(error)}`;\n\n throw new Error(errorMessage);\n }\n }\n\n if (entryIds.length === 1) {\n return createSuccessResponse('Entry archived successfully', {\n entryId: entryIds[0],\n });\n } else {\n return createSuccessResponse(\n `Successfully archived ${entryIds.length} entries`,\n {\n archivedCount: entryIds.length,\n entryIds,\n },\n );\n }\n}\n\nexport const archiveEntryTool = withErrorHandling(\n tool,\n 'Error archiving entry',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const UnarchiveEntryToolParams = BaseToolSchema.extend({\n entryId: z\n .union([z.string(), z.array(z.string()).max(100)])\n .describe(\n 'The ID of the entry to unarchive (string) or an array of entry IDs (up to 100 entries)',\n ),\n});\n\ntype Params = z.infer<typeof UnarchiveEntryToolParams>;\n\nasync function tool(args: Params) {\n const baseParams = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Normalize input to always be an array\n const entryIds = Array.isArray(args.entryId) ? args.entryId : [args.entryId];\n\n // Track successfully unarchived entries\n const successfullyUnarchived: string[] = [];\n\n // Process each entry sequentially, stopping at first failure\n for (const entryId of entryIds) {\n try {\n const params = {\n ...baseParams,\n entryId,\n };\n\n // Unarchive the entry - will throw on error\n await contentfulClient.entry.unarchive(params);\n successfullyUnarchived.push(entryId);\n } catch (error) {\n // Enhance error with context about successful operations\n const errorMessage =\n successfullyUnarchived.length > 0\n ? `Failed to unarchive entry '${entryId}' after successfully unarchiving ${successfullyUnarchived.length} entry(s): [${successfullyUnarchived.join(', ')}]. Original error: ${error instanceof Error ? error.message : String(error)}`\n : `Failed to unarchive entry '${entryId}': ${error instanceof Error ? error.message : String(error)}`;\n\n throw new Error(errorMessage);\n }\n }\n\n if (entryIds.length === 1) {\n return createSuccessResponse('Entry unarchived successfully', {\n entryId: entryIds[0],\n });\n } else {\n return createSuccessResponse(\n `Successfully unarchived ${entryIds.length} entries`,\n {\n unarchivedCount: entryIds.length,\n entryIds,\n },\n );\n }\n}\n\nexport const unarchiveEntryTool = withErrorHandling(\n tool,\n 'Error unarchiving entry',\n);\n","import { searchEntriesTool, SearchEntriesToolParams } from './searchEntries.js';\nimport { createEntryTool, CreateEntryToolParams } from './createEntry.js';\nimport { deleteEntryTool, DeleteEntryToolParams } from './deleteEntry.js';\nimport { updateEntryTool, UpdateEntryToolParams } from './updateEntry.js';\nimport { getEntryTool, GetEntryToolParams } from './getEntry.js';\nimport { publishEntryTool, PublishEntryToolParams } from './publishEntry.js';\nimport {\n unpublishEntryTool,\n UnpublishEntryToolParams,\n} from './unpublishEntry.js';\nimport { archiveEntryTool, ArchiveEntryToolParams } from './archiveEntry.js';\nimport {\n unarchiveEntryTool,\n UnarchiveEntryToolParams,\n} from './unarchiveEntry.js';\n\nexport const entryTools = {\n searchEntries: {\n title: 'search_entries',\n description: 'Search for specific entries in your Contentful space',\n inputParams: SearchEntriesToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: searchEntriesTool,\n },\n createEntry: {\n title: 'create_entry',\n description:\n \"Create a new entry in Contentful. Before executing this function, you need to know the contentTypeId (not the content type NAME) and the fields of that contentType. You can get the fields definition by using the GET_CONTENT_TYPE tool. IMPORTANT: All field values MUST include a locale key (e.g., 'en-US') for each value, like: { title: { 'en-US': 'My Title' } }. Every field in Contentful requires a locale even for single-language content. TAGS: To add tags to an entry, include a metadata object with a tags array. Each tag should be an object with sys.type='Link', sys.linkType='Tag', and sys.id='tagId'. Example: { metadata: { tags: [{ sys: { type: 'Link', linkType: 'Tag', id: 'myTagId' } }] } }.\",\n inputParams: CreateEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createEntryTool,\n },\n getEntry: {\n title: 'get_entry',\n description: 'Retrieve an existing entry',\n inputParams: GetEntryToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getEntryTool,\n },\n updateEntry: {\n title: 'update_entry',\n description:\n \"Update an existing entry. The handler will merge your field updates with the existing entry fields, so you only need to provide the fields you want to change. However, for multiple-locale fields, all existing locales must be included in the update. IMPORTANT: All field values MUST include a locale key (e.g., 'en-US') for each value, like: { title: { 'en-US': 'My Updated Title' } }. Every field in Contentful requires a locale even for single-language content. When updating entries with multiple locales, always include all existing locales in the update to prevent overwriting with empty values. RICH TEXT FIELDS: When updating rich text fields, ALL text nodes MUST include a 'marks' property (can be empty array [] for no formatting). Text nodes with formatting need appropriate marks: { nodeType: 'text', value: 'Bold text', marks: [{ type: 'bold' }], data: {} }.\",\n inputParams: UpdateEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateEntryTool,\n },\n deleteEntry: {\n title: 'delete_entry',\n description: 'Delete a specific content entry from your Contentful space',\n inputParams: DeleteEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteEntryTool,\n },\n publishEntry: {\n title: 'publish_entry',\n description:\n 'Publish an entry or multiple entries. Accepts either a single entryId (string) or an array of entryIds (up to 100 entries). For a single entry, it uses the standard publish operation. For multiple entries, it automatically uses bulk publishing.',\n inputParams: PublishEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: publishEntryTool,\n },\n unpublishEntry: {\n title: 'unpublish_entry',\n description:\n 'Unpublish an entry or multiple entries. Accepts either a single entryId (string) or an array of entryIds (up to 100 entries). For a single entry, it uses the standard unpublish operation. For multiple entries, it automatically uses bulk unpublishing.',\n inputParams: UnpublishEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: unpublishEntryTool,\n },\n archiveEntry: {\n title: 'archive_entry',\n description:\n 'Archive an entry or multiple entries. Archives entries that are no longer needed but should be preserved. Entries must be unpublished before they can be archived. Accepts either a single entryId (string) or an array of entryIds (up to 100 entries). For multiple entries, processes each one sequentially as a pseudo-bulk operation.',\n inputParams: ArchiveEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: archiveEntryTool,\n },\n unarchiveEntry: {\n title: 'unarchive_entry',\n description:\n 'Unarchive an entry or multiple entries. Restores archived entries, making them available for editing and publishing again. Accepts either a single entryId (string) or an array of entryIds (up to 100 entries). For multiple entries, processes each one sequentially as a pseudo-bulk operation.',\n inputParams: UnarchiveEntryToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: unarchiveEntryTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const CreateEnvironmentToolParams = BaseToolSchema.extend({\n environmentId: z.string().describe('The ID of the environment to create'),\n name: z.string().describe('The name of the environment to create'),\n});\n\ntype Params = z.infer<typeof CreateEnvironmentToolParams>;\n\nasync function tool(args: Params) {\n const contentfulClient = createToolClient(args);\n\n // Create the environment\n const environment = await contentfulClient.environment.createWithId(\n {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n },\n {\n name: args.name,\n },\n );\n\n return createSuccessResponse('Environment created successfully', {\n environment,\n });\n}\n\nexport const createEnvironmentTool = withErrorHandling(\n tool,\n 'Error creating environment',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\n// Extend BaseToolSchema but make environmentId optional since it's not needed for listing\nexport const ListEnvironmentsToolParams = BaseToolSchema.extend({\n environmentId: z\n .string()\n .optional()\n .describe(\n 'The ID of the Contentful environment (not required for listing)',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of environments to return (max 10)'),\n skip: z\n .number()\n .optional()\n .describe('Skip this many environments for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n order: z.string().optional().describe('Order environments by this field'),\n});\n\ntype Params = z.infer<typeof ListEnvironmentsToolParams>;\n\nasync function tool(args: Params) {\n const clientArgs = {\n spaceId: args.spaceId,\n environmentId: args.environmentId || 'master',\n };\n\n const contentfulClient = createToolClient(clientArgs);\n\n const environments = await contentfulClient.environment.getMany({\n spaceId: args.spaceId,\n query: {\n limit: Math.min(args.limit || 10, 10),\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedEnvironments = environments.items.map((environment) => ({\n id: environment.sys.id,\n name: environment.name,\n status: environment.sys.status?.sys?.id || 'unknown',\n createdAt: environment.sys.createdAt,\n updatedAt: environment.sys.updatedAt,\n }));\n\n const summarized = summarizeData(\n {\n ...environments,\n items: summarizedEnvironments,\n },\n {\n maxItems: 10,\n remainingMessage:\n 'To see more environments, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Environments retrieved successfully', {\n environments: summarized,\n total: environments.total,\n limit: environments.limit,\n skip: environments.skip,\n });\n}\n\nexport const listEnvironmentsTool = withErrorHandling(\n tool,\n 'Error listing environments',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const DeleteEnvironmentToolParams = BaseToolSchema.extend({\n environmentId: z.string().describe('The ID of the environment to delete'),\n});\n\ntype Params = z.infer<typeof DeleteEnvironmentToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Delete the environment\n await contentfulClient.environment.delete(params);\n\n return createSuccessResponse('Environment deleted successfully', {\n environmentId: args.environmentId,\n });\n}\n\nexport const deleteEnvironmentTool = withErrorHandling(\n tool,\n 'Error deleting environment',\n);\n","import {\n createEnvironmentTool,\n CreateEnvironmentToolParams,\n} from './createEnvironment.js';\nimport {\n listEnvironmentsTool,\n ListEnvironmentsToolParams,\n} from './listEnvironments.js';\nimport {\n deleteEnvironmentTool,\n DeleteEnvironmentToolParams,\n} from './deleteEnvironment.js';\n\nexport const environmentTools = {\n createEnvironment: {\n title: 'create_environment',\n description: 'Create a new environment',\n inputParams: CreateEnvironmentToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createEnvironmentTool,\n },\n listEnvironments: {\n title: 'list_environments',\n description: 'List all environments in a space',\n inputParams: ListEnvironmentsToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listEnvironmentsTool,\n },\n deleteEnvironment: {\n title: 'delete_environment',\n description: 'Delete an environment',\n inputParams: DeleteEnvironmentToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteEnvironmentTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport { BaseToolSchema } from '../../../utils/tools.js';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport {\n EntryQuerySchema,\n AssetQuerySchema,\n} from '../../../types/querySchema.js';\nimport path from 'path';\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\nconst contentfulExport = require('contentful-export');\n\nexport const ExportSpaceToolParams = BaseToolSchema.extend({\n exportDir: z\n .string()\n .optional()\n .describe(\n 'Directory to save the exported space data (optional, defaults to current directory)',\n ),\n saveFile: z\n .boolean()\n .optional()\n .default(true)\n .describe('Save the exported space data to a file'),\n contentFile: z\n .string()\n .optional()\n .describe('Custom filename for the exported space data (optional)'),\n includeDrafts: z\n .boolean()\n .optional()\n .default(false)\n .describe('Include draft entries in the export'),\n includeArchived: z\n .boolean()\n .optional()\n .default(false)\n .describe('Include archived entries in the export'),\n skipContentModel: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip exporting content types'),\n skipEditorInterfaces: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip exporting editor interfaces'),\n skipContent: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip exporting entries and assets'),\n skipRoles: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip exporting roles and permissions'),\n skipTags: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip exporting tags'),\n skipWebhooks: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip exporting webhooks'),\n stripTags: z\n .boolean()\n .optional()\n .default(false)\n .describe('Untag assets and entries'),\n contentOnly: z\n .boolean()\n .optional()\n .default(false)\n .describe('Only export assets and entries'),\n queryEntries: EntryQuerySchema.optional().describe(\n 'Export only entries that match query parameters',\n ),\n queryAssets: AssetQuerySchema.optional().describe(\n 'Export only assets that match query parameters',\n ),\n downloadAssets: z\n .boolean()\n .optional()\n .default(false)\n .describe('Download actual asset files'),\n maxAllowedLimit: z\n .number()\n .optional()\n .default(1000)\n .describe('Maximum number of items per request'),\n deliveryToken: z\n .string()\n .optional()\n .describe('CDA token to export only published content (excludes tags)'),\n host: z.string().optional().describe('Management API host'),\n hostDelivery: z.string().optional().describe('Delivery API host'),\n proxy: z.string().optional().describe('HTTP/HTTPS proxy config'),\n rawProxy: z\n .boolean()\n .optional()\n .describe('Pass raw proxy config directly to Axios'),\n headers: z\n .record(z.string())\n .optional()\n .describe('Additional headers to include in requests'),\n errorLogFile: z.string().optional().describe('Path to error log output file'),\n useVerboseRenderer: z\n .boolean()\n .optional()\n .describe('Line-by-line logging, useful for CI'),\n config: z\n .string()\n .optional()\n .describe('Path to a JSON config file with all options'),\n});\n\ntype Params = z.infer<typeof ExportSpaceToolParams>;\n\nasync function tool(args: Params) {\n // Get management token from the same config used by other MCP tools\n const clientConfig = getDefaultClientConfig();\n const managementToken = clientConfig.accessToken;\n\n if (!managementToken) {\n throw new Error('Contentful management token is not configured');\n }\n\n // Consolidate args with defaults and additional required fields\n const exportOptions = {\n ...args,\n managementToken,\n environmentId: args.environmentId || 'master',\n exportDir: args.exportDir || process.cwd(),\n contentFile: args.contentFile || `contentful-export-${args.spaceId}.json`,\n };\n\n try {\n const result = await contentfulExport(exportOptions);\n\n const exportPath = path.join(\n exportOptions.exportDir,\n exportOptions.contentFile,\n );\n\n return createSuccessResponse('Space exported successfully', {\n spaceId: args.spaceId,\n environmentId: args.environmentId || 'master',\n exportPath,\n contentTypes: result.contentTypes?.length || 0,\n entries: result.entries?.length || 0,\n assets: result.assets?.length || 0,\n locales: result.locales?.length || 0,\n tags: result.tags?.length || 0,\n webhooks: result.webhooks?.length || 0,\n roles: result.roles?.length || 0,\n editorInterfaces: result.editorInterfaces?.length || 0,\n });\n } catch (error) {\n throw new Error(\n `Failed to export space: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nexport const createExportSpaceTool = withErrorHandling(\n tool,\n 'Error exporting space',\n);\n","import { z } from 'zod';\n\n/**\n * Shared query schema for entries - used by searchEntries, exportSpace, etc.\n */\nexport const EntryQuerySchema = z.object({\n content_type: z.string().optional().describe('Filter by content type'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n links_to_entry: z\n .string()\n .optional()\n .describe('Find entries that link to the specified entry ID'),\n limit: z.number().optional().describe('Maximum number of entries to return'),\n skip: z.number().optional().describe('Skip this many entries'),\n order: z.string().optional().describe('Order entries by this field'),\n});\n\n/**\n * Shared query schema for assets - used by listAssets, exportSpace, etc.\n */\nexport const AssetQuerySchema = z.object({\n mimetype_group: z.string().optional().describe('Filter by MIME type group'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n limit: z.number().optional().describe('Maximum number of assets to return'),\n skip: z.number().optional().describe('Skip this many assets'),\n order: z.string().optional().describe('Order assets by this field'),\n});\n\nexport type EntryQuery = z.infer<typeof EntryQuerySchema>;\nexport type AssetQuery = z.infer<typeof AssetQuerySchema>;\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport { BaseToolSchema } from '../../../utils/tools.js';\nimport {\n EntryQuerySchema,\n AssetQuerySchema,\n} from '../../../types/querySchema.js';\n\nexport const ParamCollectionToolParams = BaseToolSchema.extend({\n confirmation: z\n .boolean()\n .optional()\n .describe(\n 'User confirmation that they are ready to proceed with the workflow',\n ),\n\n export: z\n .object({\n spaceId: z\n .string()\n .optional()\n .describe('ID of the space with source data'),\n environmentId: z\n .string()\n .optional()\n .describe('ID of the environment in the source space'),\n deliveryToken: z\n .string()\n .optional()\n .describe('CDA token to export only published content (excludes tags)'),\n\n exportDir: z.string().optional().describe('Path to export JSON output'),\n saveFile: z\n .boolean()\n .optional()\n .describe('Save the export as a JSON file'),\n contentFile: z.string().optional().describe('Filename for exported data'),\n\n includeDrafts: z\n .boolean()\n .optional()\n .describe('Include drafts in exported entries'),\n includeArchived: z\n .boolean()\n .optional()\n .describe('Include archived entries'),\n skipContentModel: z\n .boolean()\n .optional()\n .describe('Skip exporting content models'),\n skipEditorInterfaces: z\n .boolean()\n .optional()\n .describe('Skip exporting editor interfaces'),\n skipContent: z\n .boolean()\n .optional()\n .describe('Skip exporting entries and assets'),\n skipRoles: z\n .boolean()\n .optional()\n .describe('Skip exporting roles and permissions'),\n skipTags: z.boolean().optional().describe('Skip exporting tags'),\n skipWebhooks: z.boolean().optional().describe('Skip exporting webhooks'),\n stripTags: z\n .boolean()\n .optional()\n .describe('Remove tags from entries and assets'),\n contentOnly: z\n .boolean()\n .optional()\n .describe('Export only entries and assets'),\n\n queryEntries: EntryQuerySchema.optional().describe(\n 'Export only entries that match query parameters',\n ),\n queryAssets: AssetQuerySchema.optional().describe(\n 'Export only assets that match query parameters',\n ),\n downloadAssets: z\n .boolean()\n .optional()\n .describe('Download asset files to disk'),\n\n host: z.string().optional().describe('Management API host'),\n hostDelivery: z.string().optional().describe('Delivery API host'),\n proxy: z.string().optional().describe('HTTP/HTTPS proxy config'),\n rawProxy: z\n .boolean()\n .optional()\n .describe('Pass raw proxy config directly to Axios'),\n maxAllowedLimit: z.number().optional().describe('Page size for requests'),\n headers: z\n .record(z.any())\n .optional()\n .describe('Additional headers to include in requests'),\n\n errorLogFile: z\n .string()\n .optional()\n .describe('Path to error log output file'),\n useVerboseRenderer: z\n .boolean()\n .optional()\n .describe('Line-by-line logging, useful for CI'),\n config: z\n .string()\n .optional()\n .describe('Path to a JSON config file with all options'),\n })\n .optional(),\n\n import: z\n .object({\n spaceId: z.string().optional().describe('ID of the space to import into'),\n environmentId: z\n .string()\n .optional()\n .describe('Target environment in destination space'),\n contentFile: z\n .string()\n .optional()\n .describe('Path to JSON file containing the content to import'),\n content: z\n .record(z.any())\n .optional()\n .describe(\n 'JS object containing import content (must match expected structure)',\n ),\n\n contentModelOnly: z\n .boolean()\n .optional()\n .describe('Import only content types'),\n skipContentModel: z\n .boolean()\n .optional()\n .describe('Skip importing content types and locales'),\n skipLocales: z.boolean().optional().describe('Skip importing locales'),\n skipContentUpdates: z\n .boolean()\n .optional()\n .describe('Do not update existing content'),\n skipContentPublishing: z\n .boolean()\n .optional()\n .describe('Create but do not publish content'),\n\n uploadAssets: z\n .boolean()\n .optional()\n .describe('Upload asset files (requires assetsDirectory)'),\n skipAssetUpdates: z\n .boolean()\n .optional()\n .describe('Do not update existing assets'),\n assetsDirectory: z\n .string()\n .optional()\n .describe('Path to directory containing exported asset files'),\n timeout: z\n .number()\n .optional()\n .describe('Time between retries during asset processing (ms)'),\n retryLimit: z\n .number()\n .optional()\n .describe('Max retries for asset processing'),\n\n host: z.string().optional().describe('Management API host'),\n proxy: z\n .string()\n .optional()\n .describe('HTTP/HTTPS proxy string (host:port or user:pass@host:port)'),\n rawProxy: z\n .boolean()\n .optional()\n .describe('Pass proxy config directly to Axios'),\n rateLimit: z\n .number()\n .optional()\n .describe('Max requests per second to the API'),\n headers: z\n .record(z.any())\n .optional()\n .describe('Additional headers to attach to requests'),\n\n errorLogFile: z.string().optional().describe('Path to error log file'),\n useVerboseRenderer: z\n .boolean()\n .optional()\n .describe('Line-by-line progress output (good for CI)'),\n config: z\n .string()\n .optional()\n .describe('Path to config JSON file (merged with CLI args)'),\n })\n .optional(),\n});\n\ntype Params = z.infer<typeof ParamCollectionToolParams>;\n\nconst paramCollectionConfig = {\n export: {\n requiredParams: `\nspaceId // [string] [required] - ID of the space with source data\n `,\n optionalParams: `\nenvironmentId // [string] [default: 'master'] - ID of the environment in the source space\ndeliveryToken // [string] - CDA token to export only published content (excludes tags)\n\nexportDir // [string] [default: process.cwd()] - Path to export JSON output\nsaveFile // [boolean] [default: true] - Save the export as a JSON file\ncontentFile // [string] - Filename for exported data\n\nincludeDrafts // [boolean] [default: false] - Include drafts in exported entries\nincludeArchived // [boolean] [default: false] - Include archived entries\nskipContentModel // [boolean] [default: false] - Skip exporting content models\nskipEditorInterfaces // [boolean] [default: false] - Skip exporting editor interfaces\nskipContent // [boolean] [default: false] - Skip exporting entries and assets\nskipRoles // [boolean] [default: false] - Skip exporting roles and permissions\nskipTags // [boolean] [default: false] - Skip exporting tags\nskipWebhooks // [boolean] [default: false] - Skip exporting webhooks\nstripTags // [boolean] [default: false] - Remove tags from entries and assets\ncontentOnly // [boolean] [default: false] - Export only entries and assets\n\nqueryEntries // [array] - Export only entries that match query parameters\nqueryAssets // [array] - Export only assets that match query parameters\ndownloadAssets // [boolean] - Download asset files to disk\n\nhost // [string] [default: 'api.contentful.com'] - Management API host\nhostDelivery // [string] [default: 'cdn.contentful.com'] - Delivery API host\nproxy // [string] - HTTP/HTTPS proxy config\nrawProxy // [boolean] - Pass raw proxy config directly to Axios\nmaxAllowedLimit // [number] [default: 1000] - Page size for requests\nheaders // [object] - Additional headers to include in requests\n\nerrorLogFile // [string] - Path to error log output file\nuseVerboseRenderer // [boolean] [default: false] - Line-by-line logging, useful for CI\nconfig // [string] - Path to a JSON config file with all options\n `,\n },\n import: {\n requiredParams: `\nspaceId // [string] [required] - ID of the space to import into\nmanagementToken // [string] [required] - Contentful Management API token\n `,\n optionalParams: `\nenvironmentId // [string] [default: 'master'] - Target environment in destination space\ncontentFile // [string] - Path to JSON file containing the content to import\ncontent // [object] - JS object containing import content (must match expected structure)\n\ncontentModelOnly // [boolean] [default: false] - Import only content types\nskipContentModel // [boolean] [default: false] - Skip importing content types and locales\nskipLocales // [boolean] [default: false] - Skip importing locales\nskipContentUpdates // [boolean] [default: false] - Do not update existing content\nskipContentPublishing // [boolean] [default: false] - Create but do not publish content\n\nuploadAssets // [boolean] [default: false] - Upload asset files (requires assetsDirectory)\nskipAssetUpdates // [boolean] [default: false] - Do not update existing assets\nassetsDirectory // [string] - Path to directory containing exported asset files\ntimeout // [number] [default: 3000] - Time between retries during asset processing (ms)\nretryLimit // [number] [default: 10] - Max retries for asset processing\n\nhost // [string] [default: 'api.contentful.com'] - Management API host\nproxy // [string] - HTTP/HTTPS proxy string (host:port or user:pass@host:port)\nrawProxy // [boolean] - Pass proxy config directly to Axios\nrateLimit // [number] [default: 7] - Max requests per second to the API\nheaders // [object] - Additional headers to attach to requests\n\nerrorLogFile // [string] - Path to error log file\nuseVerboseRenderer // [boolean] [default: false] - Line-by-line progress output (good for CI)\nconfig // [string] - Path to config JSON file (merged with CLI args)\n `,\n },\n};\n\nasync function tool(args: Params) {\n // Extract export and import parameters, filtering out undefined values\n const exportParams = args.export\n ? Object.fromEntries(\n Object.entries(args.export).filter(([, value]) => value !== undefined),\n )\n : {};\n\n const importParams = args.import\n ? Object.fromEntries(\n Object.entries(args.import).filter(([, value]) => value !== undefined),\n )\n : {};\n\n const params = {\n export: Object.keys(exportParams).length > 0 ? exportParams : undefined,\n import: Object.keys(importParams).length > 0 ? importParams : undefined,\n };\n\n // If user has confirmed, return ready-to-proceed response\n if (args.confirmation === true) {\n return createSuccessResponse('User ready to proceed with workflow', {\n message:\n 'User has confirmed they are ready to proceed with the space-to-space migration workflow.',\n workflowParams: params,\n nextStep:\n 'Proceed with the migration workflow using the collected parameters.',\n });\n }\n\n // Otherwise, return parameter collection response\n return createSuccessResponse('Param collection tool', {\n instructions: `\n Help the user collect the correct parameters for the space to space migration workflow.\n Call this tool repeatedly until the user feels they are ready to start the workflow.\n\n Help them understand the required and optional parameters for the export and import tools.\n Help them understand the instructions for the export and import tools.\n Help them understand the available params for the export and import tools, ensure you list at all the optional params not just the required ones.\n\n Continue to build the parameters passed into this tool until the user passes a confirmation that they are ready to start the workflow.\n `,\n availableParams: paramCollectionConfig,\n currentParams: params,\n });\n}\n\nexport const createParamCollectionTool = withErrorHandling(\n tool,\n 'Error creating param collection tool',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport { BaseToolSchema } from '../../../utils/tools.js';\nimport { createRequire } from 'module';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\n\nconst require = createRequire(import.meta.url);\nconst contentfulImport = require('contentful-import');\n\nexport const ImportSpaceToolParams = BaseToolSchema.extend({\n contentFile: z\n .string()\n .optional()\n .describe('Path to JSON file containing the content to import'),\n content: z\n .record(z.any())\n .optional()\n .describe(\n 'JS object containing import content (must match expected structure)',\n ),\n contentModelOnly: z\n .boolean()\n .optional()\n .default(false)\n .describe('Import only content types'),\n skipContentModel: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip importing content types and locales'),\n skipLocales: z\n .boolean()\n .optional()\n .default(false)\n .describe('Skip importing locales'),\n skipContentUpdates: z\n .boolean()\n .optional()\n .default(false)\n .describe('Do not update existing content'),\n skipContentPublishing: z\n .boolean()\n .optional()\n .default(false)\n .describe('Create but do not publish content'),\n uploadAssets: z\n .boolean()\n .optional()\n .default(false)\n .describe('Upload asset files (requires assetsDirectory)'),\n skipAssetUpdates: z\n .boolean()\n .optional()\n .default(false)\n .describe('Do not update existing assets'),\n assetsDirectory: z\n .string()\n .optional()\n .describe('Path to directory containing exported asset files'),\n timeout: z\n .number()\n .optional()\n .default(3000)\n .describe('Time between retries during asset processing (ms)'),\n retryLimit: z\n .number()\n .optional()\n .default(10)\n .describe('Max retries for asset processing'),\n host: z.string().optional().describe('Management API host'),\n proxy: z\n .string()\n .optional()\n .describe('HTTP/HTTPS proxy string (host:port or user:pass@host:port)'),\n rawProxy: z\n .boolean()\n .optional()\n .describe('Pass proxy config directly to Axios'),\n rateLimit: z\n .number()\n .optional()\n .default(7)\n .describe('Max requests per second to the API'),\n headers: z\n .record(z.any())\n .optional()\n .describe('Additional headers to attach to requests'),\n errorLogFile: z.string().optional().describe('Path to error log file'),\n useVerboseRenderer: z\n .boolean()\n .optional()\n .describe('Line-by-line progress output (good for CI)'),\n config: z\n .string()\n .optional()\n .describe('Path to config JSON file (merged with CLI args)'),\n});\n\ntype Params = z.infer<typeof ImportSpaceToolParams>;\n\nasync function tool(args: Params) {\n // Get management token from the same config used by other MCP tools\n const clientConfig = getDefaultClientConfig();\n const managementToken = clientConfig.accessToken;\n\n if (!managementToken) {\n throw new Error('Contentful management token is not configured');\n }\n\n // Consolidate args with defaults and additional required fields\n const importOptions = {\n ...args,\n managementToken,\n environmentId: args.environmentId || 'master',\n };\n\n try {\n const result = await contentfulImport(importOptions);\n\n return createSuccessResponse('Space imported successfully', {\n spaceId: args.spaceId,\n environmentId: args.environmentId || 'master',\n contentTypes: result.contentTypes?.length || 0,\n entries: result.entries?.length || 0,\n assets: result.assets?.length || 0,\n locales: result.locales?.length || 0,\n tags: result.tags?.length || 0,\n webhooks: result.webhooks?.length || 0,\n roles: result.roles?.length || 0,\n editorInterfaces: result.editorInterfaces?.length || 0,\n });\n } catch (error) {\n throw new Error(\n `Failed to import space: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nexport const createImportSpaceTool = withErrorHandling(\n tool,\n 'Error importing space',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport { BaseToolSchema } from '../../../utils/tools.js';\nimport type { RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { S2S_MIGRATION_INSTRUCTIONS } from './instructions.js';\n\nexport const S2S_TEARDOWN_INSTRUCTIONS = `\nThe space to space migration workflow has been concluded and all related tools have been disabled.\n\nThe workflow is now complete. You can start a new migration workflow by calling space_to_space_migration_handler with enableWorkflow=true if needed.\n`;\n\nexport const SpaceToSpaceMigrationHandlerToolParams = BaseToolSchema.extend({\n enableWorkflow: z\n .boolean()\n .describe(\n 'Set to true to enable the workflow tools, false to disable them and conclude the workflow',\n ),\n});\n\ntype Params = z.infer<typeof SpaceToSpaceMigrationHandlerToolParams>;\n\nexport const makeSpaceToSpaceMigrationHandlerTool = (\n tools: RegisteredTool[],\n) => {\n async function tool(args: Params) {\n const { enableWorkflow } = args;\n\n if (enableWorkflow) {\n // Enable all workflow tools\n tools.forEach((tool) => {\n if (tool) {\n tool.enable();\n }\n });\n\n return createSuccessResponse(\n 'Space to space migration workflow started.',\n {\n enableWorkflow,\n instructions: S2S_MIGRATION_INSTRUCTIONS,\n },\n );\n } else {\n // Disable all workflow tools (but not the handler itself)\n tools.forEach((tool) => {\n if (tool) {\n tool.disable();\n }\n });\n\n return createSuccessResponse(\n 'Space to space migration workflow concluded.',\n {\n enableWorkflow,\n instructions: S2S_TEARDOWN_INSTRUCTIONS,\n },\n );\n }\n }\n\n return withErrorHandling(\n tool,\n 'Error managing space to space migration workflow',\n );\n};\n","export const S2S_MIGRATION_INSTRUCTIONS = `\nYou are a helpful assistant that can help with space to space migration.\n\nYou will be given a list of tools that can be used to migrate a space to another space.\n\n## Workflow Management:\nThe space to space migration workflow is managed by a single unified tool: **space_to_space_migration_handler**\n\n- To **start** the workflow: Call space_to_space_migration_handler with enableWorkflow=true\n- To **conclude** the workflow: Call space_to_space_migration_handler with enableWorkflow=false\n\nOnce the workflow is started, you will need to call the tools in the following order:\n\n1. space_to_space_migration_handler with enableWorkflow=true (already confirmed by the user)\n2. IMPORTANT: After starting the workflow, you MUST ask the user for confirmation before proceeding to the next step. The enabled tools will not appear until the agent is reprompted by the user.\n3. space_to_space_param_collection (only call after user confirms they are ready to proceed)\n4. export_space \n5. import_space\n6. space_to_space_migration_handler with enableWorkflow=false (to conclude the workflow)\n\n## Path Configuration Best Practices:\n- ALWAYS use consistent path formats throughout the workflow\n\n### Asset Handling Paths:\n- When downloadAssets=true, the export tool creates an assets directory structure like: exportDir/images.ctfassets.net/\n- The import tool expects assetsDirectory to point to the images.ctfassets.net directory, not the parent export directory\n\nTroubleshooting:\n- If the start_space_to_space_migration is not found, try to call it again on behalf of the user.\n- 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.\n- If import fails with path errors, verify that exportDir and assetsDirectory paths are correctly aligned and accessible.\n`;\n","import { createExportSpaceTool, ExportSpaceToolParams } from './exportSpace.js';\nimport {\n ParamCollectionToolParams,\n createParamCollectionTool,\n} from './paramCollection.js';\nimport { ImportSpaceToolParams, createImportSpaceTool } from './importSpace.js';\nimport {\n SpaceToSpaceMigrationHandlerToolParams,\n makeSpaceToSpaceMigrationHandlerTool,\n} from './migrationHandler.js';\n\nexport const jobTools = {\n spaceToSpaceParamCollection: {\n title: 'space_to_space_param_collection',\n description:\n 'Collect parameters for the space to space migration workflow. This tool should ALWAYS start with confirmation false, until the user confirms they are ready to proceed with the workflow. Do not assume they use wants to proceed with the workflow until they explicitly say so.',\n inputParams: ParamCollectionToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: createParamCollectionTool,\n },\n exportSpace: {\n title: 'export_space',\n description: 'Export a space to a file',\n inputParams: ExportSpaceToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: createExportSpaceTool,\n },\n importSpace: {\n title: 'import_space',\n description:\n 'Import a space from a file. Step 4 of the space to space migration workflow.',\n inputParams: ImportSpaceToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createImportSpaceTool,\n },\n spaceToSpaceMigrationHandler: {\n title: 'space_to_space_migration_handler',\n description:\n 'Enable or disable the space to space migration workflow tools. Set enableWorkflow=true to start, false to conclude the workflow.',\n inputParams: SpaceToSpaceMigrationHandlerToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: makeSpaceToSpaceMigrationHandlerTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const GetLocaleToolParams = BaseToolSchema.extend({\n localeId: z.string().describe('The ID of the locale to retrieve'),\n});\n\ntype Params = z.infer<typeof GetLocaleToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n localeId: args.localeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Get the locale\n const locale = await contentfulClient.locale.get(params);\n\n return createSuccessResponse('Locale retrieved successfully', { locale });\n}\n\nexport const getLocaleTool = withErrorHandling(tool, 'Error retrieving locale');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const CreateLocaleToolParams = BaseToolSchema.extend({\n name: z.string().describe('The name of the locale'),\n code: z.string().describe('The locale code (e.g., \"en-US\")'),\n fallbackCode: z\n .string()\n .nullable()\n .describe(\n 'The locale code to fallback to when there is no content for the current locale',\n ),\n contentDeliveryApi: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'If the content under this locale should be available on the CDA (for public reading)',\n ),\n contentManagementApi: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'If the content under this locale should be available on the CMA (for editing)',\n ),\n default: z\n .boolean()\n .optional()\n .default(false)\n .describe('If this is the default locale'),\n optional: z\n .boolean()\n .optional()\n .default(false)\n .describe('If the locale needs to be filled in on entries or not'),\n});\n\ntype Params = z.infer<typeof CreateLocaleToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // Create the locale\n const newLocale = await contentfulClient.locale.create(params, {\n name: args.name,\n code: args.code,\n fallbackCode: args.fallbackCode,\n contentDeliveryApi: args.contentDeliveryApi,\n contentManagementApi: args.contentManagementApi,\n optional: args.optional,\n });\n\n return createSuccessResponse('Locale created successfully', { newLocale });\n}\n\nexport const createLocaleTool = withErrorHandling(\n tool,\n 'Error creating locale',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const ListLocaleToolParams = BaseToolSchema.extend({\n limit: z.number().optional().describe('Maximum number of locales to return'),\n skip: z.number().optional().describe('Skip this many locales for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n order: z.string().optional().describe('Order locales by this field'),\n});\n\ntype Params = z.infer<typeof ListLocaleToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const locales = await contentfulClient.locale.getMany({\n ...params,\n query: {\n limit: args.limit || 100,\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedLocales = locales.items.map((locale) => ({\n id: locale.sys.id,\n name: locale.name,\n code: locale.code,\n fallbackCode: locale.fallbackCode || null,\n contentDeliveryApi: locale.contentDeliveryApi,\n contentManagementApi: locale.contentManagementApi,\n default: locale.default,\n optional: locale.optional,\n createdAt: locale.sys.createdAt,\n updatedAt: locale.sys.updatedAt,\n version: locale.sys.version,\n }));\n\n const summarized = summarizeData(\n {\n ...locales,\n items: summarizedLocales,\n },\n {\n maxItems: 10,\n remainingMessage:\n 'To see more locales, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Locales retrieved successfully', {\n locales: summarized,\n total: locales.total,\n limit: locales.limit,\n skip: locales.skip,\n });\n}\n\nexport const listLocaleTool = withErrorHandling(tool, 'Error listing locales');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const UpdateLocaleToolParams = BaseToolSchema.extend({\n localeId: z.string().describe('The ID of the locale to update'),\n fields: z.object({\n name: z.string().optional().describe('The name of the locale'),\n // NOTE: internal_code changes are not allowed\n code: z.string().optional().describe('The code of the locale'),\n fallbackCode: z\n .string()\n .optional()\n .describe(\n 'The locale code to fallback to when there is no content for the current locale',\n ),\n contentDeliveryApi: z\n .boolean()\n .optional()\n .describe(\n 'If the content under this locale should be available on the CDA (for public reading)',\n ),\n contentManagementApi: z\n .boolean()\n .optional()\n .describe(\n 'If the content under this locale should be available on the CMA (for editing)',\n ),\n optional: z\n .boolean()\n .optional()\n .describe('If the locale needs to be filled in on entries or not'),\n }),\n});\n\ntype Params = z.infer<typeof UpdateLocaleToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n localeId: args.localeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // First, get the existing locale\n const existingLocale = await contentfulClient.locale.get(params);\n\n // Remove read-only fields (nternal_code cannot be updated)\n delete (existingLocale as { internal_code?: string }).internal_code;\n\n // Build update data with only provided fields, merging with existing locale\n const updateData = { ...existingLocale, ...args.fields };\n\n // Update the locale with merged data\n const updatedLocale = await contentfulClient.locale.update(\n params,\n updateData,\n );\n\n return createSuccessResponse('Locale updated successfully', {\n updatedLocale,\n });\n}\n\nexport const updateLocaleTool = withErrorHandling(\n tool,\n 'Error updating locale',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const DeleteLocaleToolParams = BaseToolSchema.extend({\n localeId: z.string().describe('The ID of the locale to delete'),\n});\n\ntype Params = z.infer<typeof DeleteLocaleToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n localeId: args.localeId,\n };\n\n const contentfulClient = createToolClient(args);\n\n // First, get the locale to check its current state\n const locale = await contentfulClient.locale.get(params);\n\n // Delete the locale\n await contentfulClient.locale.delete(params);\n\n // Return info about the locale that was deleted\n return createSuccessResponse('Locale deleted successfully', { locale });\n}\n\nexport const deleteLocaleTool = withErrorHandling(\n tool,\n 'Error deleting locale',\n);\n","import { getLocaleTool, GetLocaleToolParams } from './getLocale.js';\nimport { createLocaleTool, CreateLocaleToolParams } from './createLocale.js';\nimport { listLocaleTool, ListLocaleToolParams } from './listLocales.js';\nimport { updateLocaleTool, UpdateLocaleToolParams } from './updateLocale.js';\nimport { deleteLocaleTool, DeleteLocaleToolParams } from './deleteLocale.js';\n\nexport const localeTools = {\n getLocale: {\n title: 'get_locale',\n description: 'Retrieve a specific locale from your Contentful environment',\n inputParams: GetLocaleToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getLocaleTool,\n },\n createLocale: {\n title: 'create_locale',\n description:\n 'Create a new locale in your Contentful environment. A locale defines a language-region pair (e.g., \"en-US\" for English United States). You can specify fallback behavior, API availability settings, and whether the locale is optional for content editors. Note: setting \\'default\\' is currently not supported.',\n inputParams: CreateLocaleToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createLocaleTool,\n },\n listLocales: {\n title: 'list_locales',\n description:\n 'List all locales in your Contentful environment. Returns locale information including language codes, fallback settings, and API availability.',\n inputParams: ListLocaleToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listLocaleTool,\n },\n updateLocale: {\n title: 'update_locale',\n description:\n 'Update an existing locale in your Contentful environment. You can modify the locale name, code, fallback behavior, API availability settings, and whether the locale is optional for content editors. Only provide the fields you want to change. IMPORTANT: internal_code cannot be updated.',\n inputParams: UpdateLocaleToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateLocaleTool,\n },\n deleteLocale: {\n title: 'delete_locale',\n description:\n 'Delete a specific locale from your Contentful environment. This operation permanently removes the locale and cannot be undone.',\n inputParams: DeleteLocaleToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteLocaleTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../config/contentful.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\n// For listing organizations, we don't need spaceId or environmentId parameters\nexport const ListOrgsToolParams = z.object({\n limit: z\n .number()\n .optional()\n .describe('Maximum number of organizations to return (max 10)'),\n skip: z\n .number()\n .optional()\n .describe('Skip this many organizations for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n order: z.string().optional().describe('Order organizations by this field'),\n});\n\ntype Params = z.infer<typeof ListOrgsToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for listing all organizations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're listing organizations at the account level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n const organizations = await contentfulClient.organization.getAll({\n query: {\n limit: Math.min(args.limit || 10, 10),\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedOrganizations = organizations.items.map((org) => ({\n id: org.sys.id,\n name: org.name,\n createdAt: org.sys.createdAt,\n updatedAt: org.sys.updatedAt,\n }));\n\n const summarized = summarizeData(\n {\n ...organizations,\n items: summarizedOrganizations,\n },\n {\n maxItems: 10,\n remainingMessage:\n 'To see more organizations, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Organizations retrieved successfully', {\n organizations: summarized,\n total: organizations.total,\n limit: organizations.limit,\n skip: organizations.skip,\n });\n}\n\nexport const listOrgsTool = withErrorHandling(\n tool,\n 'Error listing organizations',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../config/contentful.js';\n\nexport const GetOrgToolParams = z.object({\n organizationId: z.string().describe('The ID of the organization to retrieve'),\n});\n\ntype Params = z.infer<typeof GetOrgToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Get the organization\n const organization = await contentfulClient.organization.get({\n organizationId: args.organizationId,\n });\n\n return createSuccessResponse('Organization retrieved successfully', {\n organization,\n });\n}\n\nexport const getOrgTool = withErrorHandling(\n tool,\n 'Error retrieving organization',\n);\n","import { ListOrgsToolParams, listOrgsTool } from './listOrgs.js';\nimport { GetOrgToolParams, getOrgTool } from './getOrg.js';\n\nexport const orgTools = {\n listOrgs: {\n title: 'list_orgs',\n description: 'List all organizations that the user has access to',\n inputParams: ListOrgsToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listOrgsTool,\n },\n getOrg: {\n title: 'get_org',\n description: 'Get details of a specific organization',\n inputParams: GetOrgToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getOrgTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../config/contentful.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\n// For listing spaces, we don't need spaceId or environmentId parameters\nexport const ListSpacesToolParams = z.object({\n limit: z\n .number()\n .optional()\n .describe('Maximum number of spaces to return (max 10)'),\n skip: z.number().optional().describe('Skip this many spaces for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n order: z.string().optional().describe('Order spaces by this field'),\n});\n\ntype Params = z.infer<typeof ListSpacesToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for listing all spaces\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're listing all spaces\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n const spaces = await contentfulClient.space.getMany({\n query: {\n limit: Math.min(args.limit || 10, 10),\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedSpaces = spaces.items.map((space) => ({\n id: space.sys.id,\n name: space.name,\n createdAt: space.sys.createdAt,\n updatedAt: space.sys.updatedAt,\n }));\n\n const summarized = summarizeData(\n {\n ...spaces,\n items: summarizedSpaces,\n },\n {\n maxItems: 10,\n remainingMessage:\n 'To see more spaces, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Spaces retrieved successfully', {\n spaces: summarized,\n total: spaces.total,\n limit: spaces.limit,\n skip: spaces.skip,\n });\n}\n\nexport const listSpacesTool = withErrorHandling(tool, 'Error listing spaces');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../config/contentful.js';\n\nexport const GetSpaceToolParams = z.object({\n spaceId: z.string().describe('The ID of the space to retrieve'),\n});\n\ntype Params = z.infer<typeof GetSpaceToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we'll specify it in the get call\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Get the space\n const space = await contentfulClient.space.get({\n spaceId: args.spaceId,\n });\n\n return createSuccessResponse('Space retrieved successfully', { space });\n}\n\nexport const getSpaceTool = withErrorHandling(tool, 'Error retrieving space');\n","import { listSpacesTool, ListSpacesToolParams } from './listSpaces.js';\nimport { getSpaceTool, GetSpaceToolParams } from './getSpace.js';\n\nexport const spaceTools = {\n listSpaces: {\n title: 'list_spaces',\n description: 'List all available spaces',\n inputParams: ListSpacesToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listSpacesTool,\n },\n getSpace: {\n title: 'get_space',\n description: 'Get details of a space',\n inputParams: GetSpaceToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getSpaceTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\nimport { summarizeData } from '../../utils/summarizer.js';\n\nexport const ListTagsToolParams = BaseToolSchema.extend({\n limit: z.number().optional().describe('Maximum number of tags to return'),\n skip: z.number().optional().describe('Skip this many tags for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n order: z.string().optional().describe('Order tags by this field'),\n});\n\ntype Params = z.infer<typeof ListTagsToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n };\n\n const contentfulClient = createToolClient(args);\n\n const tags = await contentfulClient.tag.getMany({\n ...params,\n query: {\n limit: args.limit || 100,\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedTags = tags.items.map((tag) => ({\n id: tag.sys.id,\n name: tag.name,\n visibility: tag.sys.visibility,\n createdAt: tag.sys.createdAt,\n updatedAt: tag.sys.updatedAt,\n }));\n\n const summarized = summarizeData(\n {\n ...tags,\n items: summarizedTags,\n },\n {\n maxItems: 100,\n remainingMessage:\n 'To see more tags, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Tags retrieved successfully', {\n tags: summarized,\n total: tags.total,\n limit: tags.limit,\n skip: tags.skip,\n });\n}\n\nexport const listTagsTool = withErrorHandling(tool, 'Error listing tags');\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../utils/response.js';\nimport { BaseToolSchema, createToolClient } from '../../utils/tools.js';\n\nexport const CreateTagToolParams = BaseToolSchema.extend({\n name: z.string().describe('The name of the tag'),\n id: z.string().describe('The ID of the tag'),\n visibility: z\n .enum(['public', 'private'])\n .describe('The visibility of the tag. Default to private if not specified'),\n});\n\ntype Params = z.infer<typeof CreateTagToolParams>;\n\nasync function tool(args: Params) {\n const params = {\n spaceId: args.spaceId,\n environmentId: args.environmentId,\n tagId: args.id,\n };\n\n const contentfulClient = createToolClient(args);\n\n const newTag = await contentfulClient.tag.createWithId(params, {\n name: args.name,\n sys: { visibility: args.visibility },\n });\n\n return createSuccessResponse('Tag created successfully', { newTag });\n}\n\nexport const createTagTool = withErrorHandling(tool, 'Error creating tag');\n","import { listTagsTool, ListTagsToolParams } from './listTags.js';\nimport { createTagTool, CreateTagToolParams } from './createTag.js';\n\nexport const tagTools = {\n listTags: {\n title: 'list_tags',\n description:\n 'List all tags in a space. Returns all tags that exist in a given environment.',\n inputParams: ListTagsToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listTagsTool,\n },\n createTag: {\n title: 'create_tag',\n description:\n 'Creates a new tag and returns it. Both name and ID must be unique to each environment. Tag names can be modified after creation, but the tag ID cannot. The tag visibility can be set to public or private, defaulting to private if not specified.',\n inputParams: CreateTagToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createTagTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport {\n ConceptSchemePayload,\n TaxonomyConceptLinkSchema,\n} from '../../../types/conceptPayloadTypes.js';\n\nexport const CreateConceptSchemeToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptSchemeId: z\n .string()\n .optional()\n .describe(\n 'Optional user-defined ID for the concept scheme. If not provided, Contentful will generate one automatically.',\n ),\n prefLabel: z\n .record(z.string())\n .describe('The preferred label for the concept scheme (localized)'),\n uri: z\n .string()\n .nullable()\n .optional()\n .describe('The URI for the concept scheme'),\n definition: z\n .record(z.string().nullable())\n .optional()\n .describe('Definition of the concept scheme (localized)'),\n editorialNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Editorial note for the concept scheme (localized)'),\n historyNote: z\n .record(z.string().nullable())\n .optional()\n .describe('History note for the concept scheme (localized)'),\n example: z\n .record(z.string().nullable())\n .optional()\n .describe('Example for the concept scheme (localized)'),\n note: z\n .record(z.string().nullable())\n .optional()\n .describe('General note for the concept scheme (localized)'),\n scopeNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Scope note for the concept scheme (localized)'),\n topConcepts: z\n .array(TaxonomyConceptLinkSchema)\n .optional()\n .describe('Links to top-level concepts in this scheme'),\n});\n\ntype Params = z.infer<typeof CreateConceptSchemeToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept scheme operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Build the concept scheme payload by filtering out undefined values\n const conceptSchemePayload: ConceptSchemePayload = {\n prefLabel: args.prefLabel,\n ...Object.fromEntries(\n Object.entries({\n uri: args.uri,\n definition: args.definition,\n editorialNote: args.editorialNote,\n historyNote: args.historyNote,\n example: args.example,\n note: args.note,\n scopeNote: args.scopeNote,\n topConcepts: args.topConcepts,\n }).filter(([, value]) => value !== undefined),\n ),\n };\n\n const newConceptScheme = args.conceptSchemeId\n ? await contentfulClient.conceptScheme.createWithId(\n {\n organizationId: args.organizationId,\n conceptSchemeId: args.conceptSchemeId,\n },\n conceptSchemePayload,\n )\n : await contentfulClient.conceptScheme.create(\n { organizationId: args.organizationId },\n conceptSchemePayload,\n );\n\n return createSuccessResponse('Concept scheme created successfully', {\n newConceptScheme,\n });\n}\n\nexport const createConceptSchemeTool = withErrorHandling(\n tool,\n 'Error creating concept scheme',\n);\n","/**\n * Shared type definitions for taxonomy concept and concept scheme payloads\n * Used across create, update, and other taxonomy operations\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema for taxonomy concept link validation\n * Used for broader and related concept relationships\n */\nexport const TaxonomyConceptLinkSchema = z.object({\n sys: z.object({\n type: z.literal('Link'),\n linkType: z.literal('TaxonomyConcept'),\n id: z.string(),\n }),\n});\n\n/**\n * Interface for taxonomy concept link\n * Used in broader and related concept relationships\n */\nexport interface TaxonomyConceptLink {\n sys: {\n type: 'Link';\n linkType: 'TaxonomyConcept';\n id: string;\n };\n}\n\n/**\n * Base interface for concept payload containing all possible concept fields\n * Used for both creation and update operations\n */\nexport interface ConceptPayload {\n prefLabel: Record<string, string>;\n uri?: string | null;\n altLabels?: Record<string, string[]>;\n hiddenLabels?: Record<string, string[]>;\n definition?: Record<string, string | null>;\n editorialNote?: Record<string, string | null>;\n historyNote?: Record<string, string | null>;\n example?: Record<string, string | null>;\n note?: Record<string, string | null>;\n scopeNote?: Record<string, string | null>;\n notations?: string[];\n broader?: TaxonomyConceptLink[];\n related?: TaxonomyConceptLink[];\n}\n\n/**\n * Interface for concept scheme payload\n * Used for concept scheme creation operations\n */\nexport interface ConceptSchemePayload {\n prefLabel: Record<string, string>;\n uri?: string | null;\n definition?: Record<string, string | null>;\n editorialNote?: Record<string, string | null>;\n historyNote?: Record<string, string | null>;\n example?: Record<string, string | null>;\n note?: Record<string, string | null>;\n scopeNote?: Record<string, string | null>;\n topConcepts?: TaxonomyConceptLink[];\n}\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\n\nexport const GetConceptSchemeToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptSchemeId: z\n .string()\n .describe('The ID of the concept scheme to retrieve'),\n});\n\ntype Params = z.infer<typeof GetConceptSchemeToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept scheme operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n const params = {\n organizationId: args.organizationId,\n conceptSchemeId: args.conceptSchemeId,\n };\n\n // Get the concept scheme\n const conceptScheme = await contentfulClient.conceptScheme.get(params);\n\n return createSuccessResponse('Concept scheme retrieved successfully', {\n conceptScheme,\n });\n}\n\nexport const getConceptSchemeTool = withErrorHandling(\n tool,\n 'Error retrieving concept scheme',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport { summarizeData } from '../../../utils/summarizer.js';\n\nexport const ListConceptSchemesToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of concept schemes to return'),\n skip: z\n .number()\n .optional()\n .describe('Skip this many concept schemes for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n order: z.string().optional().describe('Order concept schemes by this field'),\n});\n\ntype Params = z.infer<typeof ListConceptSchemesToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept scheme operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n const conceptSchemes = await contentfulClient.conceptScheme.getMany({\n organizationId: args.organizationId,\n query: {\n limit: args.limit || 10,\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedConceptSchemes = conceptSchemes.items.map(\n (conceptScheme) => ({\n id: conceptScheme.sys.id,\n prefLabel: conceptScheme.prefLabel || {},\n uri: conceptScheme.uri || null,\n definition: conceptScheme.definition || null,\n topConcepts: conceptScheme.topConcepts || [],\n createdAt: conceptScheme.sys.createdAt,\n updatedAt: conceptScheme.sys.updatedAt,\n version: conceptScheme.sys.version,\n }),\n );\n\n const summarized = summarizeData(\n {\n ...conceptSchemes,\n items: summarizedConceptSchemes,\n },\n {\n maxItems: 10,\n remainingMessage:\n 'To see more concept schemes, please ask me to retrieve the next page using the skip parameter.',\n },\n );\n\n return createSuccessResponse('Concept schemes retrieved successfully', {\n conceptSchemes: summarized,\n total:\n (conceptSchemes as { total?: number }).total ||\n conceptSchemes.items.length,\n limit: (conceptSchemes as { limit?: number }).limit || args.limit || 10,\n skip: (conceptSchemes as { skip?: number }).skip || args.skip || 0,\n });\n}\n\nexport const listConceptSchemesTool = withErrorHandling(\n tool,\n 'Error listing concept schemes',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport { TaxonomyConceptLinkSchema } from '../../../types/conceptPayloadTypes.js';\n\nexport const UpdateConceptSchemeToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptSchemeId: z\n .string()\n .describe('The ID of the concept scheme to update'),\n version: z.number().describe('The current version of the concept scheme'),\n prefLabel: z\n .record(z.string())\n .optional()\n .describe('The preferred label for the concept scheme (localized)'),\n uri: z\n .string()\n .nullable()\n .optional()\n .describe('The URI for the concept scheme'),\n definition: z\n .record(z.string().nullable())\n .optional()\n .describe('Definition of the concept scheme (localized)'),\n editorialNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Editorial note for the concept scheme (localized)'),\n historyNote: z\n .record(z.string().nullable())\n .optional()\n .describe('History note for the concept scheme (localized)'),\n example: z\n .record(z.string().nullable())\n .optional()\n .describe('Example for the concept scheme (localized)'),\n note: z\n .record(z.string().nullable())\n .optional()\n .describe('General note for the concept scheme (localized)'),\n scopeNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Scope note for the concept scheme (localized)'),\n topConcepts: z\n .array(TaxonomyConceptLinkSchema)\n .optional()\n .describe('Links to top-level concepts in this scheme'),\n addConcept: z\n .string()\n .optional()\n .describe(\n 'ID of a concept to add to this scheme (adds to both concepts and topConcepts)',\n ),\n});\n\ntype Params = z.infer<typeof UpdateConceptSchemeToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept scheme operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n const params = {\n organizationId: args.organizationId,\n conceptSchemeId: args.conceptSchemeId,\n };\n\n // Build JSON Patch operations for the fields that were provided\n const fieldMappings = {\n prefLabel: '/prefLabel',\n definition: '/definition',\n editorialNote: '/editorialNote',\n historyNote: '/historyNote',\n example: '/example',\n note: '/note',\n scopeNote: '/scopeNote',\n topConcepts: '/topConcepts',\n } as const;\n\n const patchOperations: Array<{\n op: string;\n path: string;\n value?: unknown;\n }> = [];\n\n // Handle regular fields with replace operation\n Object.entries(fieldMappings).forEach(([field, path]) => {\n const value = args[field as keyof typeof fieldMappings];\n if (value !== undefined) {\n patchOperations.push({\n op: 'replace',\n path,\n value,\n });\n }\n });\n\n // Handle URI field specially (can be removed when null)\n if (args.uri !== undefined) {\n patchOperations.push({\n op: args.uri === null ? 'remove' : 'replace',\n path: '/uri',\n ...(args.uri !== null && { value: args.uri }),\n });\n }\n\n // Handle adding a concept to the scheme\n if (args.addConcept) {\n const conceptLink = {\n sys: {\n id: args.addConcept,\n linkType: 'TaxonomyConcept',\n type: 'Link',\n },\n };\n // Add to concepts array\n patchOperations.push({\n op: 'add',\n path: '/concepts/-',\n value: conceptLink,\n });\n // Add to topConcepts array\n patchOperations.push({\n op: 'add',\n path: '/topConcepts/-',\n value: conceptLink,\n });\n }\n\n // Update the concept scheme using JSON Patch\n const updatedConceptScheme = await contentfulClient.conceptScheme.update(\n {\n ...params,\n version: args.version,\n },\n patchOperations,\n );\n\n return createSuccessResponse('Concept scheme updated successfully', {\n updatedConceptScheme,\n });\n}\n\nexport const updateConceptSchemeTool = withErrorHandling(\n tool,\n 'Error updating concept scheme',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\n\nexport const DeleteConceptSchemeToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptSchemeId: z\n .string()\n .describe('The ID of the concept scheme to delete'),\n version: z.number().describe('The version of the concept scheme to delete'),\n});\n\ntype Params = z.infer<typeof DeleteConceptSchemeToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept scheme operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Delete the concept scheme\n await contentfulClient.conceptScheme.delete({\n organizationId: args.organizationId,\n conceptSchemeId: args.conceptSchemeId,\n version: args.version,\n });\n\n return createSuccessResponse('Concept scheme deleted successfully', {\n conceptSchemeId: args.conceptSchemeId,\n });\n}\n\nexport const deleteConceptSchemeTool = withErrorHandling(\n tool,\n 'Error deleting concept scheme',\n);\n","import {\n createConceptSchemeTool,\n CreateConceptSchemeToolParams,\n} from './createConceptScheme.js';\nimport {\n getConceptSchemeTool,\n GetConceptSchemeToolParams,\n} from './getConceptScheme.js';\nimport {\n listConceptSchemesTool,\n ListConceptSchemesToolParams,\n} from './listConceptSchemes.js';\nimport {\n updateConceptSchemeTool,\n UpdateConceptSchemeToolParams,\n} from './updateConceptScheme.js';\nimport {\n deleteConceptSchemeTool,\n DeleteConceptSchemeToolParams,\n} from './deleteConceptScheme.js';\n\nexport const conceptSchemeTools = {\n createConceptScheme: {\n title: 'create_concept_scheme',\n description:\n 'Create a new taxonomy concept scheme in Contentful. Concept schemes organize related concepts and provide hierarchical structure for taxonomy management. The prefLabel is required and should be localized. You can optionally provide a conceptSchemeId for a user-defined ID, or let Contentful generate one automatically. You can also include definitions, notes, and references to top-level concepts.',\n inputParams: CreateConceptSchemeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createConceptSchemeTool,\n },\n getConceptScheme: {\n title: 'get_concept_scheme',\n description:\n 'Retrieve a specific taxonomy concept scheme from Contentful. Returns the complete concept scheme with all its properties including prefLabel, definition, topConcepts, and other metadata.',\n inputParams: GetConceptSchemeToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getConceptSchemeTool,\n },\n listConceptSchemes: {\n title: 'list_concept_schemes',\n description:\n 'List taxonomy concept schemes in a Contentful organization. Supports pagination and filtering options. Returns a summarized view of concept schemes with essential information.',\n inputParams: ListConceptSchemesToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listConceptSchemesTool,\n },\n updateConceptScheme: {\n title: 'update_concept_scheme',\n description:\n 'Update a taxonomy concept scheme in Contentful. Requires the concept scheme ID and version number for optimistic concurrency control. You can update any combination of fields - only the fields you provide will be changed, while others remain unchanged. Use this to modify labels, definitions, relationships, and other concept scheme properties.',\n inputParams: UpdateConceptSchemeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateConceptSchemeTool,\n },\n deleteConceptScheme: {\n title: 'delete_concept_scheme',\n description:\n 'Delete a taxonomy concept scheme from Contentful. Requires the concept scheme ID and version number for optimistic concurrency control. This operation permanently removes the concept scheme and cannot be undone.',\n inputParams: DeleteConceptSchemeToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteConceptSchemeTool,\n },\n};\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport {\n TaxonomyConceptLinkSchema,\n type ConceptPayload,\n} from '../../../types/conceptPayloadTypes.js';\n\nexport const CreateConceptToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptId: z\n .string()\n .optional()\n .describe(\n 'Optional user-defined ID for the concept. If not provided, Contentful will generate one automatically.',\n ),\n prefLabel: z\n .record(z.string())\n .describe('The preferred label for the concept (localized)'),\n uri: z.string().nullable().optional().describe('The URI for the concept'),\n altLabels: z\n .record(z.array(z.string()))\n .optional()\n .describe('Alternative labels for the concept (localized)'),\n hiddenLabels: z\n .record(z.array(z.string()))\n .optional()\n .describe('Hidden labels for the concept (localized)'),\n definition: z\n .record(z.string().nullable())\n .optional()\n .describe('Definition of the concept (localized)'),\n editorialNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Editorial note for the concept (localized)'),\n historyNote: z\n .record(z.string().nullable())\n .optional()\n .describe('History note for the concept (localized)'),\n example: z\n .record(z.string().nullable())\n .optional()\n .describe('Example for the concept (localized)'),\n note: z\n .record(z.string().nullable())\n .optional()\n .describe('General note for the concept (localized)'),\n scopeNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Scope note for the concept (localized)'),\n notations: z\n .array(z.string())\n .optional()\n .describe('Notations for the concept'),\n broader: z\n .array(TaxonomyConceptLinkSchema)\n .optional()\n .describe('Links to broader concepts'),\n related: z\n .array(TaxonomyConceptLinkSchema)\n .optional()\n .describe('Links to related concepts'),\n});\n\ntype Params = z.infer<typeof CreateConceptToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Build the concept payload using the shared type\n const conceptPayload: ConceptPayload = {\n prefLabel: args.prefLabel,\n ...(args.uri !== undefined && { uri: args.uri }),\n ...(args.altLabels && { altLabels: args.altLabels }),\n ...(args.hiddenLabels && { hiddenLabels: args.hiddenLabels }),\n ...(args.definition && { definition: args.definition }),\n ...(args.editorialNote && { editorialNote: args.editorialNote }),\n ...(args.historyNote && { historyNote: args.historyNote }),\n ...(args.example && { example: args.example }),\n ...(args.note && { note: args.note }),\n ...(args.scopeNote && { scopeNote: args.scopeNote }),\n ...(args.notations && { notations: args.notations }),\n ...(args.broader && { broader: args.broader }),\n ...(args.related && { related: args.related }),\n };\n\n const newConcept = args.conceptId\n ? await contentfulClient.concept.createWithId(\n { organizationId: args.organizationId, conceptId: args.conceptId },\n conceptPayload,\n )\n : await contentfulClient.concept.create(\n { organizationId: args.organizationId },\n conceptPayload,\n );\n\n return createSuccessResponse('Concept created successfully', { newConcept });\n}\n\nexport const createConceptTool = withErrorHandling(\n tool,\n 'Error creating concept',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\n\nexport const DeleteConceptToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptId: z.string().describe('The ID of the concept to delete'),\n version: z.number().describe('The version of the concept to delete'),\n});\n\ntype Params = z.infer<typeof DeleteConceptToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Delete the concept\n await contentfulClient.concept.delete({\n organizationId: args.organizationId,\n conceptId: args.conceptId,\n version: args.version,\n });\n\n return createSuccessResponse('Concept deleted successfully', {\n conceptId: args.conceptId,\n });\n}\n\nexport const deleteConceptTool = withErrorHandling(\n tool,\n 'Error deleting concept',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport {\n TaxonomyConceptLinkSchema,\n type ConceptPayload,\n} from '../../../types/conceptPayloadTypes.js';\n\nexport const UpdateConceptToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptId: z.string().describe('The ID of the concept to update'),\n version: z.number().describe('The current version of the concept'),\n prefLabel: z\n .record(z.string())\n .optional()\n .describe('The preferred label for the concept (localized)'),\n uri: z.string().nullable().optional().describe('The URI for the concept'),\n altLabels: z\n .record(z.array(z.string()))\n .optional()\n .describe('Alternative labels for the concept (localized)'),\n hiddenLabels: z\n .record(z.array(z.string()))\n .optional()\n .describe('Hidden labels for the concept (localized)'),\n definition: z\n .record(z.string().nullable())\n .optional()\n .describe('Definition of the concept (localized)'),\n editorialNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Editorial note for the concept (localized)'),\n historyNote: z\n .record(z.string().nullable())\n .optional()\n .describe('History note for the concept (localized)'),\n example: z\n .record(z.string().nullable())\n .optional()\n .describe('Example for the concept (localized)'),\n note: z\n .record(z.string().nullable())\n .optional()\n .describe('General note for the concept (localized)'),\n scopeNote: z\n .record(z.string().nullable())\n .optional()\n .describe('Scope note for the concept (localized)'),\n notations: z\n .array(z.string())\n .optional()\n .describe('Notations for the concept'),\n broader: z\n .array(TaxonomyConceptLinkSchema)\n .optional()\n .describe('Links to broader concepts'),\n related: z\n .array(TaxonomyConceptLinkSchema)\n .optional()\n .describe('Links to related concepts'),\n});\n\ntype Params = z.infer<typeof UpdateConceptToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // First, get the existing concept\n const existingConcept = await contentfulClient.concept.get({\n organizationId: args.organizationId,\n conceptId: args.conceptId,\n });\n\n // Build the updated concept payload by merging existing data with provided updates\n const updatedPayload: ConceptPayload = {\n prefLabel: args.prefLabel ?? existingConcept.prefLabel,\n uri: args.uri !== undefined ? args.uri : existingConcept.uri,\n altLabels: args.altLabels ?? existingConcept.altLabels,\n hiddenLabels: args.hiddenLabels ?? existingConcept.hiddenLabels,\n definition: args.definition ?? existingConcept.definition,\n editorialNote: args.editorialNote ?? existingConcept.editorialNote,\n historyNote: args.historyNote ?? existingConcept.historyNote,\n example: args.example ?? existingConcept.example,\n note: args.note ?? existingConcept.note,\n scopeNote: args.scopeNote ?? existingConcept.scopeNote,\n notations: args.notations ?? existingConcept.notations,\n broader: args.broader ?? existingConcept.broader,\n related: args.related ?? existingConcept.related,\n };\n\n // Update the concept using the PUT method\n const updatedConcept = await contentfulClient.concept.updatePut(\n {\n organizationId: args.organizationId,\n conceptId: args.conceptId,\n version: args.version,\n },\n updatedPayload,\n );\n\n return createSuccessResponse('Concept updated successfully', {\n updatedConcept,\n });\n}\n\nexport const updateConceptTool = withErrorHandling(\n tool,\n 'Error updating concept',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\n\nexport const GetConceptToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptId: z.string().describe('The ID of the concept to retrieve'),\n});\n\ntype Params = z.infer<typeof GetConceptToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n const concept = await contentfulClient.concept.get({\n organizationId: args.organizationId,\n conceptId: args.conceptId,\n });\n\n return createSuccessResponse('Concept retrieved successfully', { concept });\n}\n\nexport const getConceptTool = withErrorHandling(\n tool,\n 'Error retrieving concept',\n);\n","import { z } from 'zod';\nimport {\n createSuccessResponse,\n withErrorHandling,\n} from '../../../utils/response.js';\nimport ctfl from 'contentful-management';\nimport { getDefaultClientConfig } from '../../../config/contentful.js';\nimport { summarizeData } from '../../../utils/summarizer.js';\n\nexport const ListConceptsToolParams = z.object({\n organizationId: z.string().describe('The ID of the Contentful organization'),\n conceptId: z\n .string()\n .optional()\n .describe('The ID of the concept (required for descendants/ancestors)'),\n limit: z.number().optional().describe('Maximum number of concepts to return'),\n skip: z\n .number()\n .optional()\n .describe('Skip this many concepts for pagination'),\n select: z\n .string()\n .optional()\n .describe('Comma-separated list of fields to return'),\n include: z\n .number()\n .optional()\n .describe('Include this many levels of linked entries'),\n order: z.string().optional().describe('Order concepts by this field'),\n getDescendants: z\n .boolean()\n .optional()\n .describe('Get descendants of the specified concept (requires conceptId)'),\n getAncestors: z\n .boolean()\n .optional()\n .describe('Get ancestors of the specified concept (requires conceptId)'),\n getTotalOnly: z\n .boolean()\n .optional()\n .describe('Get only the total number of concepts without full data'),\n});\n\ntype Params = z.infer<typeof ListConceptsToolParams>;\n\nasync function tool(args: Params) {\n // Create a client without space-specific configuration for concept operations\n const clientConfig = getDefaultClientConfig();\n // Remove space from config since we're working at the organization level\n delete clientConfig.space;\n const contentfulClient = ctfl.createClient(clientConfig, { type: 'plain' });\n\n // Validate required parameters for specific operations\n if ((args.getDescendants || args.getAncestors) && !args.conceptId) {\n throw new Error(\n 'conceptId is required when getting descendants or ancestors',\n );\n }\n\n // Handle getTotalOnly - return just the total count\n if (args.getTotalOnly) {\n const total = await contentfulClient.concept.getTotal({\n organizationId: args.organizationId,\n });\n return createSuccessResponse('Total concepts retrieved successfully', {\n total,\n });\n }\n\n // Handle getDescendants\n if (args.getDescendants) {\n const descendants = await contentfulClient.concept.getDescendants({\n organizationId: args.organizationId,\n conceptId: args.conceptId!,\n ...(args.limit && { limit: args.limit }),\n ...(args.skip && { skip: args.skip }),\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n });\n\n const summarizedDescendants = descendants.items.map((concept) => ({\n sys: concept.sys,\n prefLabel: concept.prefLabel,\n uri: concept.uri,\n broader: concept.broader,\n related: concept.related,\n }));\n\n const responseData = summarizeData({\n ...descendants,\n items: summarizedDescendants,\n });\n\n return createSuccessResponse(\n 'Concept descendants retrieved successfully',\n responseData as Record<string, unknown>,\n );\n }\n\n // Handle getAncestors\n if (args.getAncestors) {\n const ancestors = await contentfulClient.concept.getAncestors({\n organizationId: args.organizationId,\n conceptId: args.conceptId!,\n ...(args.limit && { limit: args.limit }),\n ...(args.skip && { skip: args.skip }),\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n });\n\n const summarizedAncestors = ancestors.items.map((concept) => ({\n sys: concept.sys,\n prefLabel: concept.prefLabel,\n uri: concept.uri,\n broader: concept.broader,\n related: concept.related,\n }));\n\n const responseData = summarizeData({\n ...ancestors,\n items: summarizedAncestors,\n });\n\n return createSuccessResponse(\n 'Concept ancestors retrieved successfully',\n responseData as Record<string, unknown>,\n );\n }\n\n // Default behavior - get all concepts\n const concepts = await contentfulClient.concept.getMany({\n organizationId: args.organizationId,\n query: {\n limit: args.limit || 10,\n skip: args.skip || 0,\n ...(args.select && { select: args.select }),\n ...(args.include && { include: args.include }),\n ...(args.order && { order: args.order }),\n },\n });\n\n const summarizedConcepts = concepts.items.map((concept) => ({\n sys: concept.sys,\n prefLabel: concept.prefLabel,\n uri: concept.uri,\n broader: concept.broader,\n related: concept.related,\n }));\n\n const responseData = summarizeData({\n ...concepts,\n items: summarizedConcepts,\n });\n\n return createSuccessResponse(\n 'Concepts retrieved successfully',\n responseData as Record<string, unknown>,\n );\n}\n\nexport const listConceptsTool = withErrorHandling(\n tool,\n 'Error retrieving concepts',\n);\n","import { createConceptTool, CreateConceptToolParams } from './createConcept.js';\nimport { deleteConceptTool, DeleteConceptToolParams } from './deleteConcept.js';\nimport { updateConceptTool, UpdateConceptToolParams } from './updateConcept.js';\nimport { getConceptTool, GetConceptToolParams } from './getConcept.js';\nimport { listConceptsTool, ListConceptsToolParams } from './listConcepts.js';\n\nexport const conceptTools = {\n createConcept: {\n title: 'create_concept',\n description:\n 'Create a new taxonomy concept in Contentful. Concepts are used to organize and categorize content within taxonomies. The prefLabel is required and should be localized. You can optionally provide a conceptId for a user-defined ID, or let Contentful generate one automatically. You can also include definitions, notes, relationships to other concepts, and various metadata fields.',\n inputParams: CreateConceptToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: createConceptTool,\n },\n getConcept: {\n title: 'get_concept',\n description:\n 'Retrieve a specific taxonomy concept from Contentful. Returns the complete concept with all its properties including prefLabel, definition, relationships, and other metadata.',\n inputParams: GetConceptToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: getConceptTool,\n },\n listConcepts: {\n title: 'list_concepts',\n description:\n 'List taxonomy concepts in a Contentful organization. Supports multiple modes: (1) Default - list all concepts with pagination and filtering, (2) getTotalOnly - return only the total count of concepts, (3) getDescendants - get descendants of a specific concept (requires conceptId), (4) getAncestors - get ancestors of a specific concept (requires conceptId). Returns summarized view of concepts with essential information.',\n inputParams: ListConceptsToolParams.shape,\n annotations: {\n readOnlyHint: true,\n openWorldHint: false,\n },\n tool: listConceptsTool,\n },\n updateConcept: {\n title: 'update_concept',\n description:\n 'Update a taxonomy concept in Contentful. Requires the concept ID and version number for optimistic concurrency control. You can update any combination of fields - only the fields you provide will be changed, while others remain unchanged. Use this to modify labels, definitions, relationships, and other concept properties.',\n inputParams: UpdateConceptToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n tool: updateConceptTool,\n },\n deleteConcept: {\n title: 'delete_concept',\n description:\n 'Delete a taxonomy concept from Contentful. Requires the concept ID and version number for optimistic concurrency control. This operation permanently removes the concept and cannot be undone.',\n inputParams: DeleteConceptToolParams.shape,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n tool: deleteConceptTool,\n },\n};\n","import { conceptSchemeTools } from './concept-schemes/register.js';\nimport { conceptTools } from './concepts/register.js';\n\nexport const taxonomyTools = {\n ...conceptSchemeTools,\n ...conceptTools,\n};\n"],"mappings":"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","names":["z","__filename","__dirname","z","z","VariableType","EntityType","OutputFormat","z","z","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","z","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","require","z","tool","z","z","tool","z","createRequire","require","createRequire","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","z","tool","z","z","tool","z","ctfl","z","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","path","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","z","ctfl","z","tool","ctfl","responseData"]}
|