@burdenoff/mcp-libs 2026.825.2 → 2026.825.3
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/{chunk-YOSQUY3M.js → chunk-BSNL65PZ.js} +2 -2
- package/dist/{chunk-YOSQUY3M.js.map → chunk-BSNL65PZ.js.map} +1 -1
- package/dist/{chunk-RHWHUY5Y.js → chunk-QQYJVKJE.js} +3 -3
- package/dist/{chunk-RHWHUY5Y.js.map → chunk-QQYJVKJE.js.map} +1 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/modules/adaptercloud/index.cjs.map +1 -1
- package/dist/modules/adaptercloud/index.js +1 -1
- package/dist/modules/artistrybase/index.cjs.map +1 -1
- package/dist/modules/artistrybase/index.js +1 -1
- package/dist/modules/assethandler/index.cjs.map +1 -1
- package/dist/modules/assethandler/index.js +1 -1
- package/dist/modules/atheletebridge/index.cjs.map +1 -1
- package/dist/modules/atheletebridge/index.js +1 -1
- package/dist/modules/auth/index.cjs.map +1 -1
- package/dist/modules/auth/index.js +3 -3
- package/dist/modules/billing/index.cjs.map +1 -1
- package/dist/modules/billing/index.js +1 -1
- package/dist/modules/brainyrich/index.cjs +13 -3
- package/dist/modules/brainyrich/index.cjs.map +1 -1
- package/dist/modules/brainyrich/index.js +14 -4
- package/dist/modules/brainyrich/index.js.map +1 -1
- package/dist/modules/buildmyiq/index.cjs.map +1 -1
- package/dist/modules/buildmyiq/index.js +1 -1
- package/dist/modules/channels/index.cjs.map +1 -1
- package/dist/modules/channels/index.js +1 -1
- package/dist/modules/collabkin/index.cjs.map +1 -1
- package/dist/modules/collabkin/index.js +1 -1
- package/dist/modules/comradecircle/index.cjs.map +1 -1
- package/dist/modules/comradecircle/index.js +1 -1
- package/dist/modules/conversations/index.cjs.map +1 -1
- package/dist/modules/conversations/index.js +1 -1
- package/dist/modules/coolandlovely/index.cjs.map +1 -1
- package/dist/modules/coolandlovely/index.js +1 -1
- package/dist/modules/cosmicintersection/index.cjs.map +1 -1
- package/dist/modules/cosmicintersection/index.js +1 -1
- package/dist/modules/crewfoundry/index.cjs.map +1 -1
- package/dist/modules/crewfoundry/index.js +1 -1
- package/dist/modules/devportal/index.cjs.map +1 -1
- package/dist/modules/devportal/index.js +1 -1
- package/dist/modules/ecoimpacthub/index.cjs.map +1 -1
- package/dist/modules/ecoimpacthub/index.js +1 -1
- package/dist/modules/eventfullymanaged/index.cjs.map +1 -1
- package/dist/modules/eventfullymanaged/index.js +1 -1
- package/dist/modules/export/index.cjs.map +1 -1
- package/dist/modules/export/index.js +1 -1
- package/dist/modules/files/index.cjs.map +1 -1
- package/dist/modules/files/index.js +1 -1
- package/dist/modules/ggnomad/index.cjs.map +1 -1
- package/dist/modules/ggnomad/index.js +1 -1
- package/dist/modules/govcitizenhub/index.cjs.map +1 -1
- package/dist/modules/govcitizenhub/index.js +1 -1
- package/dist/modules/groups/index.cjs.map +1 -1
- package/dist/modules/groups/index.js +1 -1
- package/dist/modules/headshotmarketing/index.cjs.map +1 -1
- package/dist/modules/headshotmarketing/index.js +1 -1
- package/dist/modules/health/index.cjs.map +1 -1
- package/dist/modules/health/index.js +1 -1
- package/dist/modules/hookmovies/index.cjs.map +1 -1
- package/dist/modules/hookmovies/index.js +1 -1
- package/dist/modules/housingvista/index.cjs.map +1 -1
- package/dist/modules/housingvista/index.js +1 -1
- package/dist/modules/integrations/index.cjs.map +1 -1
- package/dist/modules/integrations/index.js +1 -1
- package/dist/modules/intelwatchtower/index.cjs.map +1 -1
- package/dist/modules/intelwatchtower/index.js +1 -1
- package/dist/modules/kadaikodi/index.cjs.map +1 -1
- package/dist/modules/kadaikodi/index.js +1 -1
- package/dist/modules/labsofscience/index.cjs.map +1 -1
- package/dist/modules/labsofscience/index.js +1 -1
- package/dist/modules/manufacturedops/index.cjs.map +1 -1
- package/dist/modules/manufacturedops/index.js +1 -1
- package/dist/modules/movethewheels/index.cjs.map +1 -1
- package/dist/modules/movethewheels/index.js +1 -1
- package/dist/modules/mybodyshield/index.cjs.map +1 -1
- package/dist/modules/mybodyshield/index.js +1 -1
- package/dist/modules/notifications/index.cjs.map +1 -1
- package/dist/modules/notifications/index.js +1 -1
- package/dist/modules/organizations/index.cjs.map +1 -1
- package/dist/modules/organizations/index.js +1 -1
- package/dist/modules/planmagnet/index.cjs.map +1 -1
- package/dist/modules/planmagnet/index.js +1 -1
- package/dist/modules/products/index.cjs.map +1 -1
- package/dist/modules/products/index.js +1 -1
- package/dist/modules/proserviceworld/index.cjs.map +1 -1
- package/dist/modules/proserviceworld/index.js +1 -1
- package/dist/modules/rbac/index.cjs.map +1 -1
- package/dist/modules/rbac/index.js +1 -1
- package/dist/modules/sandbox/index.cjs.map +1 -1
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs.map +1 -1
- package/dist/modules/scheduler/index.js +1 -1
- package/dist/modules/security/index.cjs.map +1 -1
- package/dist/modules/security/index.js +1 -1
- package/dist/modules/semanticfed/index.cjs.map +1 -1
- package/dist/modules/semanticfed/index.js +1 -1
- package/dist/modules/store/index.cjs.map +1 -1
- package/dist/modules/store/index.js +1 -1
- package/dist/modules/subscriberbot/index.cjs.map +1 -1
- package/dist/modules/subscriberbot/index.js +1 -1
- package/dist/modules/support/index.cjs.map +1 -1
- package/dist/modules/support/index.js +1 -1
- package/dist/modules/tags/index.cjs.map +1 -1
- package/dist/modules/tags/index.js +1 -1
- package/dist/modules/technospam/index.cjs.map +1 -1
- package/dist/modules/technospam/index.js +1 -1
- package/dist/modules/theculturepost/index.cjs.map +1 -1
- package/dist/modules/theculturepost/index.js +1 -1
- package/dist/modules/theglobalfuel/index.cjs.map +1 -1
- package/dist/modules/theglobalfuel/index.js +1 -1
- package/dist/modules/timecampus/index.cjs.map +1 -1
- package/dist/modules/timecampus/index.js +1 -1
- package/dist/modules/tours/index.cjs.map +1 -1
- package/dist/modules/tours/index.js +1 -1
- package/dist/modules/vibecontrols/index.cjs.map +1 -1
- package/dist/modules/vibecontrols/index.js +2 -2
- package/dist/modules/workspaces/index.cjs.map +1 -1
- package/dist/modules/workspaces/index.js +1 -1
- package/package.json +28 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/planmagnet/operations.ts","../../../src/modules/planmagnet/tools/shared.ts","../../../src/modules/planmagnet/tools/projects.ts","../../../src/modules/planmagnet/tools/workitems.ts","../../../src/modules/planmagnet/tools/sprints.ts","../../../src/modules/planmagnet/tools/boards.ts","../../../src/modules/planmagnet/tools/milestones.ts","../../../src/modules/planmagnet/tools/dependencies.ts","../../../src/modules/planmagnet/tools/budgets.ts","../../../src/modules/planmagnet/tools/risks.ts","../../../src/modules/planmagnet/tools/releases.ts","../../../src/modules/planmagnet/tools/qualitygates.ts","../../../src/modules/planmagnet/tools/roadmaps.ts","../../../src/modules/planmagnet/tools/timetracking.ts","../../../src/modules/planmagnet/tools/automations.ts","../../../src/modules/planmagnet/tools/features.ts","../../../src/modules/planmagnet/tools/customfields.ts","../../../src/modules/planmagnet/tools/templates.ts","../../../src/modules/planmagnet/tools/sync.ts","../../../src/modules/planmagnet/tools/uisessions.ts","../../../src/modules/planmagnet/resources.ts","../../../src/modules/planmagnet/prompts.ts","../../../src/modules/planmagnet/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n | { _meta?: { progressToken?: string | number } }\n | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the PlanMagnet MCP module.\n *\n * PlanMagnet is the strategic project / portfolio / work-management product\n * (future-products ecosystem). Backend subgraph:\n * ~/products/wspace/planmagnet/wspace-planmagnet-svc/ (Hive service name\n * `planmagnet`).\n *\n * All operations run against the WORKSPACE gateway. Unlike kadaikodi (whose\n * list queries scope purely via gateway headers), every PlanMagnet list /\n * collection query takes an EXPLICIT `workspaceId: ID!` argument and uses\n * cursor pagination (`PlanmagnetPaginationInput { first, after, last, before }`)\n * returning `{ items, totalCount, pageInfo }`. Single-entity getters take only\n * `id: ID!`. Mutations and root field names are product-prefixed (`planmagnet*`)\n * and are called here by their EXACT real names.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi / vibecontrols module operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Shared list page-info fragment\n// ---------------------------------------------------------------------------\n\nconst PAGE_INFO = `\n totalCount\n pageInfo { hasNextPage hasPreviousPage startCursor endCursor totalCount }\n`;\n\n// ---------------------------------------------------------------------------\n// Field fragments (scalar-first; a few cheap nested selections where useful)\n// ---------------------------------------------------------------------------\n\nexport const PROJECT_FIELDS = `\n id key name description status methodology ownerId programId defaultAssigneeId\n startDate endDate tags tagsV2 metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const PROGRAM_FIELDS = `\n id name description status ownerId budgetTotal currency startDate endDate\n tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const PORTFOLIO_FIELDS = `\n id name description status ownerId alignment alignmentLabel budgetTotal currency\n fiscalPeriod tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const PORTFOLIO_OVERVIEW_FIELDS = `\n portfolioId totalPrograms totalProjects projectsByStatus atRiskCount\n overdueMilestones totalBudget totalSpent budgetUtilization healthScore\n`;\n\nexport const WORKITEM_FIELDS = `\n id key title description type status priority projectId sprintId parentId\n assigneeId reporterId storyPoints estimateMinutes timeSpentMinutes dueDate\n labels tags sortOrder metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const SPRINT_FIELDS = `\n id name goal status projectId capacity velocity startDate endDate sortOrder\n metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const BOARD_COLUMN_FIELDS = `\n id boardId name type mappedStatus sortOrder wipLimit metadata createdAt updatedAt\n`;\n\nexport const BOARD_FIELDS = `\n id name description type projectId isDefault metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n columns { ${BOARD_COLUMN_FIELDS} }\n`;\n\nexport const MILESTONE_FIELDS = `\n id name description status projectId ownerId dueDate completedAt sortOrder\n tagsV2 metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const DEPENDENCY_FIELDS = `\n id sourceWorkItemId targetWorkItemId type status description metadata\n workspaceId createdBy createdAt updatedAt\n`;\n\nexport const BUDGET_EXPENSE_FIELDS = `\n id budgetId amount category description date referenceUrl workItemId metadata\n createdBy createdAt updatedAt\n`;\n\nexport const BUDGET_FIELDS = `\n id name description status projectId currency plannedAmount spentAmount\n remainingAmount periodStart periodEnd approverId approvedAt metadata\n workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const RISK_FIELDS = `\n id title description category severity status impact likelihood riskScore\n projectId ownerId mitigationPlan contingencyPlan dueDate resolvedAt tags\n metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const RISK_MATRIX_FIELDS = `\n projectId totalRisks bySeverity byStatus matrix averageRiskScore\n`;\n\nexport const RELEASE_FIELDS = `\n id name version description status projectId ownerId plannedDate releasedAt\n releaseNotes tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const QUALITY_GATE_FIELDS = `\n id name description status projectId milestoneId phase criteria reviewNotes\n reviewerId reviewedAt sortOrder metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const ROADMAP_ITEM_FIELDS = `\n id roadmapId title description status projectId milestoneId workItemId\n startDate endDate color swimlane sortOrder metadata createdBy createdAt updatedAt\n`;\n\nexport const ROADMAP_FIELDS = `\n id name description type isPublic ownerId metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n`;\n\nexport const TIME_ENTRY_FIELDS = `\n id workItemId projectId userId date durationMinutes description billingType\n billingRate status startTime endTime timesheetId metadata workspaceId\n createdBy createdAt updatedAt\n`;\n\nexport const TIMESHEET_FIELDS = `\n id userId status periodStart periodEnd totalMinutes billableMinutes approverId\n approvedAt rejectionReason metadata workspaceId createdBy createdAt updatedAt\n`;\n\nexport const AUTOMATION_RULE_FIELDS = `\n id name description status projectId triggerType triggerConfig conditions\n actions executionCount lastExecutedAt sortOrder metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n`;\n\nexport const AUTOMATION_EXECUTION_FIELDS = `\n id ruleId status executedAt completedAt durationMs result errorMessage triggerData\n`;\n\nexport const FEATURE_REQUEST_FIELDS = `\n id title description status projectId submittedBy businessValue effortEstimate\n priorityScore voteCount workItemId tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const COMPETITOR_FIELDS = `\n id name description website tags metadata workspaceId createdBy createdAt updatedAt\n`;\n\nexport const FEATURE_VOTE_FIELDS = `\n id featureRequestId voterId weight comment createdAt\n`;\n\nexport const CUSTOM_FIELD_DEF_FIELDS = `\n id name description fieldType isRequired projectId options defaultValue\n validationRules sortOrder metadata workspaceId createdBy createdAt updatedAt\n`;\n\nexport const CUSTOM_FIELD_VALUE_FIELDS = `\n id definitionId workItemId value setBy createdAt updatedAt\n`;\n\nexport const TEMPLATE_FIELDS = `\n id name description category isBuiltIn isPublished configuration boardConfig\n sprintConfig customFieldsConfig usageCount tags metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n`;\n\nexport const EXTERNAL_SYNC_FIELDS = `\n id projectId provider direction status externalProjectId externalProjectUrl\n connectionConfig fieldMapping syncFilters lastSyncedAt lastSyncError\n totalItemsSynced metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const EXTERNAL_MAPPING_FIELDS = `\n id syncId internalId internalType externalId externalType externalUrl\n lastSyncDirection lastSyncedAt metadata createdAt updatedAt\n`;\n\nexport const SYNC_RESULT_FIELDS = `\n syncId success itemsCreated itemsUpdated itemsSkipped errorCount errors\n durationMs syncedAt\n`;\n\nexport const UI_SESSION_FIELDS = `\n id userId state metadata workspaceId createdAt updatedAt\n`;\n\n// ===========================================================================\n// Projects\n// ===========================================================================\n\nexport const GET_PROJECT = `\n query PlanmagnetProject($id: ID!) {\n planmagnetProject(id: $id) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const LIST_PROJECTS = `\n query PlanmagnetProjects(\n $workspaceId: ID!\n $filter: PlanmagnetProjectFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProjects(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${PROJECT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROJECT = `\n mutation PlanmagnetCreateProject($input: PlanmagnetCreateProjectInput!) {\n planmagnetCreateProject(input: $input) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const UPDATE_PROJECT = `\n mutation PlanmagnetUpdateProject($id: ID!, $input: PlanmagnetUpdateProjectInput!) {\n planmagnetUpdateProject(id: $id, input: $input) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const DELETE_PROJECT = `\n mutation PlanmagnetDeleteProject($id: ID!) {\n planmagnetDeleteProject(id: $id)\n }\n`;\n\n// ===========================================================================\n// Programs\n// ===========================================================================\n\nexport const GET_PROGRAM = `\n query PlanmagnetProgram($id: ID!) {\n planmagnetProgram(id: $id) { ${PROGRAM_FIELDS} }\n }\n`;\n\nexport const LIST_PROGRAMS = `\n query PlanmagnetPrograms(\n $workspaceId: ID!\n $filter: PlanmagnetProgramFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetPrograms(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${PROGRAM_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROGRAM = `\n mutation PlanmagnetCreateProgram($input: PlanmagnetCreateProgramInput!) {\n planmagnetCreateProgram(input: $input) { ${PROGRAM_FIELDS} }\n }\n`;\n\nexport const UPDATE_PROGRAM = `\n mutation PlanmagnetUpdateProgram($id: ID!, $input: PlanmagnetUpdateProgramInput!) {\n planmagnetUpdateProgram(id: $id, input: $input) { ${PROGRAM_FIELDS} }\n }\n`;\n\nexport const DELETE_PROGRAM = `\n mutation PlanmagnetDeleteProgram($id: ID!) {\n planmagnetDeleteProgram(id: $id)\n }\n`;\n\n// ===========================================================================\n// Portfolios\n// ===========================================================================\n\nexport const GET_PORTFOLIO = `\n query PlanmagnetPortfolio($id: ID!) {\n planmagnetPortfolio(id: $id) { ${PORTFOLIO_FIELDS} }\n }\n`;\n\nexport const PORTFOLIO_OVERVIEW = `\n query PlanmagnetPortfolioOverview($portfolioId: ID!) {\n planmagnetPortfolioOverview(portfolioId: $portfolioId) { ${PORTFOLIO_OVERVIEW_FIELDS} }\n }\n`;\n\nexport const LIST_PORTFOLIOS = `\n query PlanmagnetPortfolios(\n $workspaceId: ID!\n $filter: PlanmagnetPortfolioFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetPortfolios(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${PORTFOLIO_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PORTFOLIO = `\n mutation PlanmagnetCreatePortfolio($input: PlanmagnetCreatePortfolioInput!) {\n planmagnetCreatePortfolio(input: $input) { ${PORTFOLIO_FIELDS} }\n }\n`;\n\nexport const UPDATE_PORTFOLIO = `\n mutation PlanmagnetUpdatePortfolio($id: ID!, $input: PlanmagnetUpdatePortfolioInput!) {\n planmagnetUpdatePortfolio(id: $id, input: $input) { ${PORTFOLIO_FIELDS} }\n }\n`;\n\nexport const DELETE_PORTFOLIO = `\n mutation PlanmagnetDeletePortfolio($id: ID!) {\n planmagnetDeletePortfolio(id: $id)\n }\n`;\n\n// ===========================================================================\n// Work items\n// ===========================================================================\n\nexport const GET_WORKITEM = `\n query PlanmagnetWorkItem($id: ID!) {\n planmagnetWorkItem(id: $id) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const LIST_WORKITEMS = `\n query PlanmagnetWorkItems(\n $workspaceId: ID!\n $filter: PlanmagnetWorkItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${WORKITEM_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_WORKITEM = `\n mutation PlanmagnetCreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {\n planmagnetCreateWorkItem(input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const UPDATE_WORKITEM = `\n mutation PlanmagnetUpdateWorkItem($id: ID!, $input: PlanmagnetUpdateWorkItemInput!) {\n planmagnetUpdateWorkItem(id: $id, input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const DELETE_WORKITEM = `\n mutation PlanmagnetDeleteWorkItem($id: ID!) {\n planmagnetDeleteWorkItem(id: $id)\n }\n`;\n\nexport const ASSIGN_WORKITEM = `\n mutation PlanmagnetAssignWorkItem($id: ID!, $input: PlanmagnetAssignWorkItemInput!) {\n planmagnetAssignWorkItem(id: $id, input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const BULK_UPDATE_WORKITEMS = `\n mutation PlanmagnetBulkUpdateWorkItems($input: PlanmagnetBulkUpdateWorkItemsInput!) {\n planmagnetBulkUpdateWorkItems(input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const MOVE_WORKITEM = `\n mutation PlanmagnetMoveWorkItem($id: ID!, $input: PlanmagnetMoveWorkItemInput!) {\n planmagnetMoveWorkItem(id: $id, input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Sprints\n// ===========================================================================\n\nexport const GET_SPRINT = `\n query PlanmagnetSprint($id: ID!) {\n planmagnetSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const LIST_SPRINTS = `\n query PlanmagnetSprints(\n $workspaceId: ID!\n $filter: PlanmagnetSprintFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetSprints(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${SPRINT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_SPRINT = `\n mutation PlanmagnetCreateSprint($input: PlanmagnetCreateSprintInput!) {\n planmagnetCreateSprint(input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const UPDATE_SPRINT = `\n mutation PlanmagnetUpdateSprint($id: ID!, $input: PlanmagnetUpdateSprintInput!) {\n planmagnetUpdateSprint(id: $id, input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const DELETE_SPRINT = `\n mutation PlanmagnetDeleteSprint($id: ID!) {\n planmagnetDeleteSprint(id: $id)\n }\n`;\n\nexport const START_SPRINT = `\n mutation PlanmagnetStartSprint($id: ID!) {\n planmagnetStartSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const COMPLETE_SPRINT = `\n mutation PlanmagnetCompleteSprint($id: ID!) {\n planmagnetCompleteSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const CANCEL_SPRINT = `\n mutation PlanmagnetCancelSprint($id: ID!) {\n planmagnetCancelSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const ADD_WORKITEMS_TO_SPRINT = `\n mutation PlanmagnetAddWorkItemsToSprint($id: ID!, $input: PlanmagnetSprintWorkItemsInput!) {\n planmagnetAddWorkItemsToSprint(id: $id, input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const REMOVE_WORKITEMS_FROM_SPRINT = `\n mutation PlanmagnetRemoveWorkItemsFromSprint($id: ID!, $input: PlanmagnetSprintWorkItemsInput!) {\n planmagnetRemoveWorkItemsFromSprint(id: $id, input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Boards + columns\n// ===========================================================================\n\nexport const GET_BOARD = `\n query PlanmagnetBoard($id: ID!) {\n planmagnetBoard(id: $id) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const LIST_BOARDS = `\n query PlanmagnetBoards(\n $workspaceId: ID!\n $filter: PlanmagnetBoardFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetBoards(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${BOARD_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_BOARD = `\n mutation PlanmagnetCreateBoard($input: PlanmagnetCreateBoardInput!) {\n planmagnetCreateBoard(input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const UPDATE_BOARD = `\n mutation PlanmagnetUpdateBoard($id: ID!, $input: PlanmagnetUpdateBoardInput!) {\n planmagnetUpdateBoard(id: $id, input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const DELETE_BOARD = `\n mutation PlanmagnetDeleteBoard($id: ID!) {\n planmagnetDeleteBoard(id: $id)\n }\n`;\n\nexport const MOVE_CARD = `\n mutation PlanmagnetMoveCard($boardId: ID!, $input: PlanmagnetMoveCardInput!) {\n planmagnetMoveCard(boardId: $boardId, input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const REORDER_COLUMNS = `\n mutation PlanmagnetReorderColumns($boardId: ID!, $input: PlanmagnetReorderColumnsInput!) {\n planmagnetReorderColumns(boardId: $boardId, input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const CREATE_BOARD_COLUMN = `\n mutation PlanmagnetCreateBoardColumn($input: PlanmagnetCreateBoardColumnInput!) {\n planmagnetCreateBoardColumn(input: $input) { ${BOARD_COLUMN_FIELDS} }\n }\n`;\n\nexport const UPDATE_BOARD_COLUMN = `\n mutation PlanmagnetUpdateBoardColumn($id: ID!, $input: PlanmagnetUpdateBoardColumnInput!) {\n planmagnetUpdateBoardColumn(id: $id, input: $input) { ${BOARD_COLUMN_FIELDS} }\n }\n`;\n\nexport const DELETE_BOARD_COLUMN = `\n mutation PlanmagnetDeleteBoardColumn($id: ID!) {\n planmagnetDeleteBoardColumn(id: $id)\n }\n`;\n\n// ===========================================================================\n// Milestones\n// ===========================================================================\n\nexport const GET_MILESTONE = `\n query PlanmagnetMilestone($id: ID!) {\n planmagnetMilestone(id: $id) { ${MILESTONE_FIELDS} }\n }\n`;\n\nexport const LIST_MILESTONES = `\n query PlanmagnetMilestones(\n $workspaceId: ID!\n $filter: PlanmagnetMilestoneFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetMilestones(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${MILESTONE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MILESTONE = `\n mutation PlanmagnetCreateMilestone($input: PlanmagnetCreateMilestoneInput!) {\n planmagnetCreateMilestone(input: $input) { ${MILESTONE_FIELDS} }\n }\n`;\n\nexport const UPDATE_MILESTONE = `\n mutation PlanmagnetUpdateMilestone($id: ID!, $input: PlanmagnetUpdateMilestoneInput!) {\n planmagnetUpdateMilestone(id: $id, input: $input) { ${MILESTONE_FIELDS} }\n }\n`;\n\nexport const DELETE_MILESTONE = `\n mutation PlanmagnetDeleteMilestone($id: ID!) {\n planmagnetDeleteMilestone(id: $id)\n }\n`;\n\n// ===========================================================================\n// Dependencies\n// ===========================================================================\n\nexport const GET_DEPENDENCY = `\n query PlanmagnetDependency($id: ID!) {\n planmagnetDependency(id: $id) { ${DEPENDENCY_FIELDS} }\n }\n`;\n\nexport const LIST_DEPENDENCIES = `\n query PlanmagnetDependencies(\n $workspaceId: ID!\n $filter: PlanmagnetDependencyFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetDependencies(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${DEPENDENCY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_DEPENDENCY = `\n mutation PlanmagnetCreateDependency($input: PlanmagnetCreateDependencyInput!) {\n planmagnetCreateDependency(input: $input) { ${DEPENDENCY_FIELDS} }\n }\n`;\n\nexport const UPDATE_DEPENDENCY = `\n mutation PlanmagnetUpdateDependency($id: ID!, $input: PlanmagnetUpdateDependencyInput!) {\n planmagnetUpdateDependency(id: $id, input: $input) { ${DEPENDENCY_FIELDS} }\n }\n`;\n\nexport const DELETE_DEPENDENCY = `\n mutation PlanmagnetDeleteDependency($id: ID!) {\n planmagnetDeleteDependency(id: $id)\n }\n`;\n\n// ===========================================================================\n// Budgets + expenses\n// ===========================================================================\n\nexport const GET_BUDGET = `\n query PlanmagnetBudget($id: ID!) {\n planmagnetBudget(id: $id) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const LIST_BUDGETS = `\n query PlanmagnetBudgets(\n $workspaceId: ID!\n $filter: PlanmagnetBudgetFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetBudgets(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${BUDGET_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_BUDGET = `\n mutation PlanmagnetCreateBudget($input: PlanmagnetCreateBudgetInput!) {\n planmagnetCreateBudget(input: $input) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const UPDATE_BUDGET = `\n mutation PlanmagnetUpdateBudget($id: ID!, $input: PlanmagnetUpdateBudgetInput!) {\n planmagnetUpdateBudget(id: $id, input: $input) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const DELETE_BUDGET = `\n mutation PlanmagnetDeleteBudget($id: ID!) {\n planmagnetDeleteBudget(id: $id)\n }\n`;\n\nexport const APPROVE_BUDGET = `\n mutation PlanmagnetApproveBudget($id: ID!) {\n planmagnetApproveBudget(id: $id) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const LIST_BUDGET_EXPENSES = `\n query PlanmagnetBudgetExpenses(\n $workspaceId: ID!\n $filter: PlanmagnetBudgetExpenseFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetBudgetExpenses(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${BUDGET_EXPENSE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const LOG_EXPENSE = `\n mutation PlanmagnetLogExpense($input: PlanmagnetLogExpenseInput!) {\n planmagnetLogExpense(input: $input) { ${BUDGET_EXPENSE_FIELDS} }\n }\n`;\n\nexport const UPDATE_EXPENSE = `\n mutation PlanmagnetUpdateExpense($id: ID!, $input: PlanmagnetUpdateExpenseInput!) {\n planmagnetUpdateExpense(id: $id, input: $input) { ${BUDGET_EXPENSE_FIELDS} }\n }\n`;\n\nexport const DELETE_EXPENSE = `\n mutation PlanmagnetDeleteExpense($id: ID!) {\n planmagnetDeleteExpense(id: $id)\n }\n`;\n\n// ===========================================================================\n// Risks\n// ===========================================================================\n\nexport const GET_RISK = `\n query PlanmagnetRisk($id: ID!) {\n planmagnetRisk(id: $id) { ${RISK_FIELDS} }\n }\n`;\n\nexport const RISK_MATRIX = `\n query PlanmagnetRiskMatrix($projectId: ID!) {\n planmagnetRiskMatrix(projectId: $projectId) { ${RISK_MATRIX_FIELDS} }\n }\n`;\n\nexport const LIST_RISKS = `\n query PlanmagnetRisks(\n $workspaceId: ID!\n $filter: PlanmagnetRiskFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRisks(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${RISK_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_RISK = `\n mutation PlanmagnetCreateRisk($input: PlanmagnetCreateRiskInput!) {\n planmagnetCreateRisk(input: $input) { ${RISK_FIELDS} }\n }\n`;\n\nexport const UPDATE_RISK = `\n mutation PlanmagnetUpdateRisk($id: ID!, $input: PlanmagnetUpdateRiskInput!) {\n planmagnetUpdateRisk(id: $id, input: $input) { ${RISK_FIELDS} }\n }\n`;\n\nexport const DELETE_RISK = `\n mutation PlanmagnetDeleteRisk($id: ID!) {\n planmagnetDeleteRisk(id: $id)\n }\n`;\n\n// ===========================================================================\n// Releases\n// ===========================================================================\n\nexport const GET_RELEASE = `\n query PlanmagnetRelease($id: ID!) {\n planmagnetRelease(id: $id) { ${RELEASE_FIELDS} }\n }\n`;\n\nexport const LIST_RELEASES = `\n query PlanmagnetReleases(\n $workspaceId: ID!\n $filter: PlanmagnetReleaseFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetReleases(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${RELEASE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_RELEASE = `\n mutation PlanmagnetCreateRelease($input: PlanmagnetCreateReleaseInput!) {\n planmagnetCreateRelease(input: $input) { ${RELEASE_FIELDS} }\n }\n`;\n\nexport const UPDATE_RELEASE = `\n mutation PlanmagnetUpdateRelease($id: ID!, $input: PlanmagnetUpdateReleaseInput!) {\n planmagnetUpdateRelease(id: $id, input: $input) { ${RELEASE_FIELDS} }\n }\n`;\n\nexport const DELETE_RELEASE = `\n mutation PlanmagnetDeleteRelease($id: ID!) {\n planmagnetDeleteRelease(id: $id)\n }\n`;\n\n// ===========================================================================\n// Quality gates\n// ===========================================================================\n\nexport const GET_QUALITY_GATE = `\n query PlanmagnetQualityGate($id: ID!) {\n planmagnetQualityGate(id: $id) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\nexport const LIST_QUALITY_GATES = `\n query PlanmagnetQualityGates(\n $workspaceId: ID!\n $filter: PlanmagnetQualityGateFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetQualityGates(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${QUALITY_GATE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_QUALITY_GATE = `\n mutation PlanmagnetCreateQualityGate($input: PlanmagnetCreateQualityGateInput!) {\n planmagnetCreateQualityGate(input: $input) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\nexport const UPDATE_QUALITY_GATE = `\n mutation PlanmagnetUpdateQualityGate($id: ID!, $input: PlanmagnetUpdateQualityGateInput!) {\n planmagnetUpdateQualityGate(id: $id, input: $input) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\nexport const DELETE_QUALITY_GATE = `\n mutation PlanmagnetDeleteQualityGate($id: ID!) {\n planmagnetDeleteQualityGate(id: $id)\n }\n`;\n\nexport const REVIEW_QUALITY_GATE = `\n mutation PlanmagnetReviewQualityGate($id: ID!, $input: PlanmagnetReviewQualityGateInput!) {\n planmagnetReviewQualityGate(id: $id, input: $input) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Roadmaps + roadmap items\n// ===========================================================================\n\nexport const GET_ROADMAP = `\n query PlanmagnetRoadmap($id: ID!) {\n planmagnetRoadmap(id: $id) { ${ROADMAP_FIELDS} }\n }\n`;\n\nexport const LIST_ROADMAPS = `\n query PlanmagnetRoadmaps(\n $workspaceId: ID!\n $filter: PlanmagnetRoadmapFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRoadmaps(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${ROADMAP_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_ROADMAP = `\n mutation PlanmagnetCreateRoadmap($input: PlanmagnetCreateRoadmapInput!) {\n planmagnetCreateRoadmap(input: $input) { ${ROADMAP_FIELDS} }\n }\n`;\n\nexport const UPDATE_ROADMAP = `\n mutation PlanmagnetUpdateRoadmap($id: ID!, $input: PlanmagnetUpdateRoadmapInput!) {\n planmagnetUpdateRoadmap(id: $id, input: $input) { ${ROADMAP_FIELDS} }\n }\n`;\n\nexport const DELETE_ROADMAP = `\n mutation PlanmagnetDeleteRoadmap($id: ID!) {\n planmagnetDeleteRoadmap(id: $id)\n }\n`;\n\nexport const GET_ROADMAP_ITEM = `\n query PlanmagnetRoadmapItem($id: ID!) {\n planmagnetRoadmapItem(id: $id) { ${ROADMAP_ITEM_FIELDS} }\n }\n`;\n\nexport const LIST_ROADMAP_ITEMS = `\n query PlanmagnetRoadmapItems(\n $workspaceId: ID!\n $filter: PlanmagnetRoadmapItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRoadmapItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${ROADMAP_ITEM_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_ROADMAP_ITEM = `\n mutation PlanmagnetCreateRoadmapItem($input: PlanmagnetCreateRoadmapItemInput!) {\n planmagnetCreateRoadmapItem(input: $input) { ${ROADMAP_ITEM_FIELDS} }\n }\n`;\n\nexport const UPDATE_ROADMAP_ITEM = `\n mutation PlanmagnetUpdateRoadmapItem($id: ID!, $input: PlanmagnetUpdateRoadmapItemInput!) {\n planmagnetUpdateRoadmapItem(id: $id, input: $input) { ${ROADMAP_ITEM_FIELDS} }\n }\n`;\n\nexport const DELETE_ROADMAP_ITEM = `\n mutation PlanmagnetDeleteRoadmapItem($id: ID!) {\n planmagnetDeleteRoadmapItem(id: $id)\n }\n`;\n\n// ===========================================================================\n// Time tracking — time entries + timesheets\n// ===========================================================================\n\nexport const GET_TIME_ENTRY = `\n query PlanmagnetTimeEntry($id: ID!) {\n planmagnetTimeEntry(id: $id) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const LIST_TIME_ENTRIES = `\n query PlanmagnetTimeEntries(\n $workspaceId: ID!\n $filter: PlanmagnetTimeEntryFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetTimeEntries(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${TIME_ENTRY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_TIME_ENTRY = `\n mutation PlanmagnetCreateTimeEntry($input: PlanmagnetCreateTimeEntryInput!) {\n planmagnetCreateTimeEntry(input: $input) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const UPDATE_TIME_ENTRY = `\n mutation PlanmagnetUpdateTimeEntry($id: ID!, $input: PlanmagnetUpdateTimeEntryInput!) {\n planmagnetUpdateTimeEntry(id: $id, input: $input) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const DELETE_TIME_ENTRY = `\n mutation PlanmagnetDeleteTimeEntry($id: ID!) {\n planmagnetDeleteTimeEntry(id: $id)\n }\n`;\n\nexport const LOG_TIME = `\n mutation PlanmagnetLogTime($input: PlanmagnetLogTimeInput!) {\n planmagnetLogTime(input: $input) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const GET_TIMESHEET = `\n query PlanmagnetTimesheet($id: ID!) {\n planmagnetTimesheet(id: $id) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const LIST_TIMESHEETS = `\n query PlanmagnetTimesheets(\n $workspaceId: ID!\n $filter: PlanmagnetTimesheetFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetTimesheets(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${TIMESHEET_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_TIMESHEET = `\n mutation PlanmagnetCreateTimesheet($input: PlanmagnetCreateTimesheetInput!) {\n planmagnetCreateTimesheet(input: $input) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const SUBMIT_TIMESHEET = `\n mutation PlanmagnetSubmitTimesheet($id: ID!) {\n planmagnetSubmitTimesheet(id: $id) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const APPROVE_TIMESHEET = `\n mutation PlanmagnetApproveTimesheet($id: ID!) {\n planmagnetApproveTimesheet(id: $id) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const REJECT_TIMESHEET = `\n mutation PlanmagnetRejectTimesheet($id: ID!, $reason: String) {\n planmagnetRejectTimesheet(id: $id, reason: $reason) { ${TIMESHEET_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Automations — rules + executions\n// ===========================================================================\n\nexport const GET_AUTOMATION_RULE = `\n query PlanmagnetAutomationRule($id: ID!) {\n planmagnetAutomationRule(id: $id) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const LIST_AUTOMATION_RULES = `\n query PlanmagnetAutomationRules(\n $workspaceId: ID!\n $filter: PlanmagnetAutomationRuleFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetAutomationRules(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${AUTOMATION_RULE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_AUTOMATION_RULE = `\n mutation PlanmagnetCreateAutomationRule($input: PlanmagnetCreateAutomationRuleInput!) {\n planmagnetCreateAutomationRule(input: $input) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const UPDATE_AUTOMATION_RULE = `\n mutation PlanmagnetUpdateAutomationRule($id: ID!, $input: PlanmagnetUpdateAutomationRuleInput!) {\n planmagnetUpdateAutomationRule(id: $id, input: $input) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const DELETE_AUTOMATION_RULE = `\n mutation PlanmagnetDeleteAutomationRule($id: ID!) {\n planmagnetDeleteAutomationRule(id: $id)\n }\n`;\n\nexport const TOGGLE_AUTOMATION_RULE = `\n mutation PlanmagnetToggleAutomationRule($id: ID!, $status: AutomationStatus!) {\n planmagnetToggleAutomationRule(id: $id, status: $status) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const EXECUTE_AUTOMATION_RULE = `\n mutation PlanmagnetExecuteAutomationRule($id: ID!, $triggerData: JSON) {\n planmagnetExecuteAutomationRule(id: $id, triggerData: $triggerData) { ${AUTOMATION_EXECUTION_FIELDS} }\n }\n`;\n\nexport const LIST_AUTOMATION_EXECUTIONS = `\n query PlanmagnetAutomationExecutions(\n $workspaceId: ID!\n $filter: PlanmagnetAutomationExecutionFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetAutomationExecutions(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${AUTOMATION_EXECUTION_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\n// ===========================================================================\n// Features — feature requests, votes, competitors\n// ===========================================================================\n\nexport const GET_FEATURE_REQUEST = `\n query PlanmagnetFeatureRequest($id: ID!) {\n planmagnetFeatureRequest(id: $id) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const LIST_FEATURE_REQUESTS = `\n query PlanmagnetFeatureRequests(\n $workspaceId: ID!\n $filter: PlanmagnetFeatureRequestFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetFeatureRequests(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${FEATURE_REQUEST_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_FEATURE_REQUEST = `\n mutation PlanmagnetCreateFeatureRequest($input: PlanmagnetCreateFeatureRequestInput!) {\n planmagnetCreateFeatureRequest(input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const UPDATE_FEATURE_REQUEST = `\n mutation PlanmagnetUpdateFeatureRequest($id: ID!, $input: PlanmagnetUpdateFeatureRequestInput!) {\n planmagnetUpdateFeatureRequest(id: $id, input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const DELETE_FEATURE_REQUEST = `\n mutation PlanmagnetDeleteFeatureRequest($id: ID!) {\n planmagnetDeleteFeatureRequest(id: $id)\n }\n`;\n\nexport const VOTE_ON_FEATURE = `\n mutation PlanmagnetVoteOnFeature($featureRequestId: ID!, $input: PlanmagnetVoteOnFeatureInput) {\n planmagnetVoteOnFeature(featureRequestId: $featureRequestId, input: $input) { ${FEATURE_VOTE_FIELDS} }\n }\n`;\n\nexport const REMOVE_FEATURE_VOTE = `\n mutation PlanmagnetRemoveFeatureVote($featureRequestId: ID!) {\n planmagnetRemoveFeatureVote(featureRequestId: $featureRequestId)\n }\n`;\n\nexport const LINK_COMPETITOR_TO_FEATURE = `\n mutation PlanmagnetLinkCompetitorToFeature($input: PlanmagnetLinkCompetitorInput!) {\n planmagnetLinkCompetitorToFeature(input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const UNLINK_COMPETITOR_FROM_FEATURE = `\n mutation PlanmagnetUnlinkCompetitorFromFeature($input: PlanmagnetLinkCompetitorInput!) {\n planmagnetUnlinkCompetitorFromFeature(input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const GET_COMPETITOR = `\n query PlanmagnetCompetitor($id: ID!) {\n planmagnetCompetitor(id: $id) { ${COMPETITOR_FIELDS} }\n }\n`;\n\nexport const LIST_COMPETITORS = `\n query PlanmagnetCompetitors(\n $workspaceId: ID!\n $filter: PlanmagnetCompetitorFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetCompetitors(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${COMPETITOR_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_COMPETITOR = `\n mutation PlanmagnetCreateCompetitor($input: PlanmagnetCreateCompetitorInput!) {\n planmagnetCreateCompetitor(input: $input) { ${COMPETITOR_FIELDS} }\n }\n`;\n\nexport const UPDATE_COMPETITOR = `\n mutation PlanmagnetUpdateCompetitor($id: ID!, $input: PlanmagnetUpdateCompetitorInput!) {\n planmagnetUpdateCompetitor(id: $id, input: $input) { ${COMPETITOR_FIELDS} }\n }\n`;\n\nexport const DELETE_COMPETITOR = `\n mutation PlanmagnetDeleteCompetitor($id: ID!) {\n planmagnetDeleteCompetitor(id: $id)\n }\n`;\n\n// ===========================================================================\n// Custom fields — definitions + values\n// ===========================================================================\n\nexport const GET_CUSTOM_FIELD_DEFINITION = `\n query PlanmagnetCustomFieldDefinition($id: ID!) {\n planmagnetCustomFieldDefinition(id: $id) { ${CUSTOM_FIELD_DEF_FIELDS} }\n }\n`;\n\nexport const LIST_CUSTOM_FIELD_DEFINITIONS = `\n query PlanmagnetCustomFieldDefinitions(\n $workspaceId: ID!\n $filter: PlanmagnetCustomFieldDefinitionFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetCustomFieldDefinitions(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${CUSTOM_FIELD_DEF_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_CUSTOM_FIELD_DEFINITION = `\n mutation PlanmagnetCreateCustomFieldDefinition($input: PlanmagnetCreateCustomFieldDefinitionInput!) {\n planmagnetCreateCustomFieldDefinition(input: $input) { ${CUSTOM_FIELD_DEF_FIELDS} }\n }\n`;\n\nexport const UPDATE_CUSTOM_FIELD_DEFINITION = `\n mutation PlanmagnetUpdateCustomFieldDefinition($id: ID!, $input: PlanmagnetUpdateCustomFieldDefinitionInput!) {\n planmagnetUpdateCustomFieldDefinition(id: $id, input: $input) { ${CUSTOM_FIELD_DEF_FIELDS} }\n }\n`;\n\nexport const DELETE_CUSTOM_FIELD_DEFINITION = `\n mutation PlanmagnetDeleteCustomFieldDefinition($id: ID!) {\n planmagnetDeleteCustomFieldDefinition(id: $id)\n }\n`;\n\nexport const LIST_CUSTOM_FIELD_VALUES = `\n query PlanmagnetCustomFieldValues(\n $workspaceId: ID!\n $filter: PlanmagnetCustomFieldValueFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetCustomFieldValues(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${CUSTOM_FIELD_VALUE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const SET_CUSTOM_FIELD_VALUE = `\n mutation PlanmagnetSetCustomFieldValue($input: PlanmagnetSetCustomFieldValueInput!) {\n planmagnetSetCustomFieldValue(input: $input) { ${CUSTOM_FIELD_VALUE_FIELDS} }\n }\n`;\n\nexport const REMOVE_CUSTOM_FIELD_VALUE = `\n mutation PlanmagnetRemoveCustomFieldValue($definitionId: ID!, $workItemId: ID!) {\n planmagnetRemoveCustomFieldValue(definitionId: $definitionId, workItemId: $workItemId)\n }\n`;\n\n// ===========================================================================\n// Project templates\n// ===========================================================================\n\nexport const GET_TEMPLATE = `\n query PlanmagnetProjectTemplate($id: ID!) {\n planmagnetProjectTemplate(id: $id) { ${TEMPLATE_FIELDS} }\n }\n`;\n\nexport const LIST_TEMPLATES = `\n query PlanmagnetProjectTemplates(\n $workspaceId: ID!\n $filter: PlanmagnetProjectTemplateFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProjectTemplates(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${TEMPLATE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_TEMPLATE = `\n mutation PlanmagnetCreateProjectTemplate($input: PlanmagnetCreateProjectTemplateInput!) {\n planmagnetCreateProjectTemplate(input: $input) { ${TEMPLATE_FIELDS} }\n }\n`;\n\nexport const UPDATE_TEMPLATE = `\n mutation PlanmagnetUpdateProjectTemplate($id: ID!, $input: PlanmagnetUpdateProjectTemplateInput!) {\n planmagnetUpdateProjectTemplate(id: $id, input: $input) { ${TEMPLATE_FIELDS} }\n }\n`;\n\nexport const DELETE_TEMPLATE = `\n mutation PlanmagnetDeleteProjectTemplate($id: ID!) {\n planmagnetDeleteProjectTemplate(id: $id)\n }\n`;\n\nexport const APPLY_TEMPLATE = `\n mutation PlanmagnetApplyTemplate($input: PlanmagnetApplyTemplateInput!) {\n planmagnetApplyTemplate(input: $input) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const CREATE_TEMPLATE_FROM_PROJECT = `\n mutation PlanmagnetCreateTemplateFromProject($projectId: ID!, $name: String!, $description: String) {\n planmagnetCreateTemplateFromProject(projectId: $projectId, name: $name, description: $description) {\n ${TEMPLATE_FIELDS}\n }\n }\n`;\n\n// ===========================================================================\n// External sync — syncs, mappings, import/export\n// ===========================================================================\n\nexport const GET_EXTERNAL_SYNC = `\n query PlanmagnetExternalSync($id: ID!) {\n planmagnetExternalSync(id: $id) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const LIST_EXTERNAL_SYNCS = `\n query PlanmagnetExternalSyncs(\n $workspaceId: ID!\n $filter: PlanmagnetExternalSyncFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetExternalSyncs(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${EXTERNAL_SYNC_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_EXTERNAL_SYNC = `\n mutation PlanmagnetCreateExternalSync($input: PlanmagnetCreateExternalSyncInput!) {\n planmagnetCreateExternalSync(input: $input) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const UPDATE_EXTERNAL_SYNC = `\n mutation PlanmagnetUpdateExternalSync($id: ID!, $input: PlanmagnetUpdateExternalSyncInput!) {\n planmagnetUpdateExternalSync(id: $id, input: $input) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const DELETE_EXTERNAL_SYNC = `\n mutation PlanmagnetDeleteExternalSync($id: ID!) {\n planmagnetDeleteExternalSync(id: $id)\n }\n`;\n\nexport const PAUSE_EXTERNAL_SYNC = `\n mutation PlanmagnetPauseExternalSync($id: ID!) {\n planmagnetPauseExternalSync(id: $id) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const RESUME_EXTERNAL_SYNC = `\n mutation PlanmagnetResumeExternalSync($id: ID!) {\n planmagnetResumeExternalSync(id: $id) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const START_SYNC = `\n mutation PlanmagnetStartSync($id: ID!) {\n planmagnetStartSync(id: $id) { ${SYNC_RESULT_FIELDS} }\n }\n`;\n\nexport const LIST_EXTERNAL_MAPPINGS = `\n query PlanmagnetExternalMappings(\n $workspaceId: ID!\n $filter: PlanmagnetExternalMappingFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetExternalMappings(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${EXTERNAL_MAPPING_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const EXPORT_TO_EXTERNAL = `\n mutation PlanmagnetExportToExternal($input: PlanmagnetExportToExternalInput!) {\n planmagnetExportToExternal(input: $input) { ${SYNC_RESULT_FIELDS} }\n }\n`;\n\nexport const IMPORT_FROM_EXTERNAL = `\n mutation PlanmagnetImportFromExternal($input: PlanmagnetImportFromExternalInput!) {\n planmagnetImportFromExternal(input: $input) { ${SYNC_RESULT_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// UI sessions\n// ===========================================================================\n\nexport const GET_OR_CREATE_UI_SESSION = `\n query PlanmagnetGetOrCreateUISession($workspaceId: ID!) {\n planmagnetGetOrCreateUISession(workspaceId: $workspaceId) { ${UI_SESSION_FIELDS} }\n }\n`;\n\nexport const LIST_UI_SESSIONS = `\n query PlanmagnetUiSessions(\n $workspaceId: ID!\n $filter: PlanmagnetUISessionFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetUiSessions(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${UI_SESSION_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const UPDATE_UI_SESSION = `\n mutation PlanmagnetUpdateUISession($input: PlanmagnetUISessionViewStateInput!) {\n planmagnetUpdateUISession(input: $input) { ${UI_SESSION_FIELDS} }\n }\n`;\n\nexport const DELETE_UI_SESSION = `\n mutation PlanmagnetDeleteUISession($id: ID!) {\n planmagnetDeleteUISession(id: $id)\n }\n`;\n","/**\n * Shared zod schemas + helpers for the PlanMagnet tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values (enum values are UPPER_SNAKE in\n * this schema). JSON scalar inputs (metadata, criteria, actions, conditions,\n * triggerConfig, connectionConfig, fieldMapping, value, state, …) are modelled\n * as permissive object records — the backend accepts arbitrary JSON, but a\n * record shape gives the LLM a typed hint.\n *\n * PlanMagnet list queries use cursor pagination (`PlanmagnetPaginationInput\n * { first, after, last, before }`); `buildPagination` assembles the common\n * forward-pagination shape from the flat `first` / `after` tool inputs.\n */\n\nimport { z } from 'zod';\n\n// ── Permissive JSON scalar ─────────────────────────────────────────────────\n\n/** Permissive JSON-object schema for `JSON` scalar object inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n\n/** Permissive JSON value (object OR array) for `JSON` scalars that may be arrays. */\nexport const JsonValue = z.union([JsonObject, z.array(z.unknown())]);\n\n// ── Pagination ─────────────────────────────────────────────────────────────\n\n/** Flat forward-pagination inputs shared by every list tool. */\nexport const paginationInputShape = {\n first: z\n .number()\n .int()\n .optional()\n .describe('Page size — number of items to fetch (cursor forward)'),\n after: z\n .string()\n .optional()\n .describe('Opaque cursor; fetch items after this cursor (pageInfo.endCursor)'),\n} as const;\n\n/** Build a `PlanmagnetPaginationInput` from flat first/after inputs (undefined when empty). */\nexport function buildPagination(\n first?: number,\n after?: string,\n): { first?: number; after?: string } | undefined {\n const pagination: { first?: number; after?: string } = {};\n if (first !== undefined) pagination.first = first;\n if (after !== undefined) pagination.after = after;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\n// ── Enums ──────────────────────────────────────────────────────────────────\n\nexport const ProjectStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'CANCELLED', 'COMPLETED', 'ON_HOLD', 'PLANNING'])\n .describe('Lifecycle status of a project or program');\n\nexport const ProjectMethodologyEnum = z\n .enum(['AGILE', 'CUSTOM', 'HYBRID', 'KANBAN', 'SCRUM', 'WATERFALL'])\n .describe('Project delivery methodology');\n\nexport const PortfolioStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'CLOSED', 'ON_HOLD'])\n .describe('Lifecycle status of a portfolio');\n\nexport const StrategicAlignmentEnum = z\n .enum([\n 'COMPLIANCE',\n 'COST_REDUCTION',\n 'CUSTOM',\n 'CUSTOMER_SATISFACTION',\n 'INNOVATION',\n 'MARKET_EXPANSION',\n 'OPERATIONAL_EXCELLENCE',\n 'REVENUE_GROWTH',\n 'RISK_MITIGATION',\n ])\n .describe('Strategic alignment category of a portfolio');\n\nexport const WorkItemTypeEnum = z\n .enum(['BUG', 'EPIC', 'STORY', 'SUB_TASK', 'TASK'])\n .describe('Type of a work item (epic > story > task/bug > sub-task)');\n\nexport const WorkItemStatusEnum = z\n .enum(['BACKLOG', 'CANCELLED', 'DONE', 'IN_PROGRESS', 'IN_REVIEW', 'TESTING', 'TODO'])\n .describe('Workflow status of a work item');\n\nexport const WorkItemPriorityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM', 'NONE'])\n .describe('Priority level of a work item');\n\nexport const SprintStatusEnum = z\n .enum(['ACTIVE', 'CANCELLED', 'COMPLETED', 'PLANNING', 'REVIEW'])\n .describe('Lifecycle status of a sprint');\n\nexport const BoardTypeEnum = z.enum(['CUSTOM', 'KANBAN', 'SCRUM']).describe('Type of a board');\n\nexport const BoardColumnTypeEnum = z\n .enum(['CUSTOM', 'DONE', 'IN_PROGRESS', 'TODO'])\n .describe('Type/role of a board column');\n\nexport const MilestoneStatusEnum = z\n .enum(['CANCELLED', 'COMPLETED', 'IN_PROGRESS', 'MISSED', 'PENDING'])\n .describe('Lifecycle status of a milestone');\n\nexport const DependencyTypeEnum = z\n .enum([\n 'BLOCKED_BY',\n 'BLOCKS',\n 'CAUSED_BY',\n 'CAUSES',\n 'DUPLICATED_BY',\n 'DUPLICATES',\n 'RELATES_TO',\n ])\n .describe('Type of a work-item dependency relationship');\n\nexport const DependencyStatusEnum = z\n .enum(['ACTIVE', 'REMOVED', 'RESOLVED'])\n .describe('Status of a dependency');\n\nexport const BudgetStatusEnum = z\n .enum(['ACTIVE', 'APPROVED', 'CLOSED', 'DRAFT', 'EXCEEDED'])\n .describe('Status of a budget');\n\nexport const RiskSeverityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM', 'NEGLIGIBLE'])\n .describe('Severity classification of a risk');\n\nexport const RiskStatusEnum = z\n .enum(['ACCEPTED', 'ANALYZING', 'CLOSED', 'IDENTIFIED', 'MITIGATING', 'RESOLVED'])\n .describe('Lifecycle status of a risk');\n\nexport const ReleaseStatusEnum = z\n .enum(['CANCELLED', 'DRAFT', 'IN_PROGRESS', 'PLANNING', 'READY', 'RELEASED', 'ROLLED_BACK'])\n .describe('Lifecycle status of a release');\n\nexport const QualityGateStatusEnum = z\n .enum(['FAILED', 'IN_REVIEW', 'PASSED', 'PENDING', 'WAIVED'])\n .describe('Review status of a quality gate');\n\nexport const RoadmapTypeEnum = z\n .enum(['CUSTOM', 'GANTT', 'SWIMLANE', 'TIMELINE'])\n .describe('Visualization type of a roadmap');\n\nexport const RoadmapItemStatusEnum = z\n .enum(['AT_RISK', 'CANCELLED', 'COMPLETED', 'DELAYED', 'IN_PROGRESS', 'PLANNED'])\n .describe('Status of a roadmap item');\n\nexport const BillingTypeEnum = z\n .enum(['BILLABLE', 'INTERNAL', 'NON_BILLABLE'])\n .describe('Billing classification of a time entry');\n\nexport const TimeEntryStatusEnum = z\n .enum(['APPROVED', 'DRAFT', 'REJECTED', 'SUBMITTED'])\n .describe('Status of a time entry or timesheet');\n\nexport const AutomationStatusEnum = z\n .enum(['ACTIVE', 'DISABLED', 'ERROR', 'PAUSED'])\n .describe('Status of an automation rule');\n\nexport const AutomationTriggerTypeEnum = z\n .enum([\n 'MANUAL',\n 'MILESTONE_DUE',\n 'SCHEDULE',\n 'SPRINT_COMPLETED',\n 'SPRINT_STARTED',\n 'WEBHOOK',\n 'WORK_ITEM_ASSIGNED',\n 'WORK_ITEM_CREATED',\n 'WORK_ITEM_STATUS_CHANGED',\n 'WORK_ITEM_UPDATED',\n ])\n .describe('Trigger type that fires an automation rule');\n\nexport const AutomationExecutionStatusEnum = z\n .enum(['FAILURE', 'PENDING', 'RUNNING', 'SKIPPED', 'SUCCESS'])\n .describe('Status of an automation execution');\n\nexport const FeatureRequestStatusEnum = z\n .enum([\n 'COMPLETED',\n 'DECLINED',\n 'DUPLICATE',\n 'IN_PROGRESS',\n 'PLANNED',\n 'SUBMITTED',\n 'UNDER_REVIEW',\n ])\n .describe('Status of a feature request');\n\nexport const CustomFieldTypeEnum = z\n .enum([\n 'BOOLEAN',\n 'DATE',\n 'EMAIL',\n 'JSON',\n 'LABEL',\n 'MULTI_SELECT',\n 'NUMBER',\n 'SELECT',\n 'TEXT',\n 'URL',\n 'USER',\n ])\n .describe('Data type of a custom field definition');\n\nexport const SyncProviderEnum = z\n .enum([\n 'ASANA',\n 'AZURE_DEVOPS',\n 'CLICKUP',\n 'CUSTOM',\n 'GITHUB',\n 'GITLAB',\n 'JIRA',\n 'LINEAR',\n 'SHORTCUT',\n 'TRELLO',\n ])\n .describe('External tool provider for a sync');\n\nexport const SyncDirectionEnum = z\n .enum(['BIDIRECTIONAL', 'INBOUND', 'OUTBOUND'])\n .describe('Direction of an external sync');\n\nexport const SyncStatusEnum = z\n .enum(['DISABLED', 'FAILED', 'IDLE', 'PAUSED', 'SUCCESS', 'SYNCING'])\n .describe('Status of an external sync');\n","/**\n * PlanMagnet project + program + portfolio tools — the top-level planning\n * hierarchy (portfolio > program > project).\n *\n * Surface (16): projects_{get,list,create,update,delete},\n * programs_{get,list,create,update,delete},\n * portfolios_{get,list,overview,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n ProjectStatusEnum,\n ProjectMethodologyEnum,\n PortfolioStatusEnum,\n StrategicAlignmentEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerProjectTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Projects ───────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_get')),\n {\n title: 'Get Project',\n description: 'Fetch a single PlanMagnet project by ID.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetProject: Record<string, unknown> | null;\n }>(ops.GET_PROJECT, { id });\n if (!data.planmagnetProject) return errorResult(`Project ${id} not found`);\n return jsonResult(data.planmagnetProject);\n } catch (error) {\n ctx.logger.error('planmagnet projects_get failed', { error: String(error) });\n return errorResult(\n `Failed to get project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_list')),\n {\n title: 'List Projects',\n description:\n 'List projects in a workspace with optional status/methodology/program/owner/text filters and cursor pagination.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n status: ProjectStatusEnum.optional().describe('Filter by status'),\n methodology: ProjectMethodologyEnum.optional().describe('Filter by methodology'),\n programId: z.string().optional().describe('Filter by parent program ID'),\n ownerId: z.string().optional().describe('Filter by owner actor ID'),\n search: z.string().optional().describe('Free-text search across name/description'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, status, methodology, programId, ownerId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (status !== undefined) filter.status = status;\n if (methodology !== undefined) filter.methodology = methodology;\n if (programId !== undefined) filter.programId = programId;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (search !== undefined) filter.search = search;\n\n const data = await ctx.gql.workspace.request<{\n planmagnetProjects: Record<string, unknown>;\n }>(ops.LIST_PROJECTS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetProjects);\n } catch (error) {\n ctx.logger.error('planmagnet projects_list failed', { error: String(error) });\n return errorResult(\n `Failed to list projects: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_create')),\n {\n title: 'Create Project',\n description:\n 'Create a new project. `key` is the work-item prefix (e.g. PROJ); `ownerId` is required.',\n inputSchema: {\n name: z.string().min(1).describe('Project name'),\n key: z.string().min(1).describe('Project key / work-item prefix (e.g. PROJ)'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Project description'),\n methodology: ProjectMethodologyEnum.optional().describe('Delivery methodology'),\n status: ProjectStatusEnum.optional().describe('Initial status'),\n programId: z.string().optional().describe('Parent program ID'),\n defaultAssigneeId: z.string().optional().describe('Default assignee actor ID'),\n startDate: z.string().optional().describe('Planned start date (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Planned end date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Legacy string tags'),\n tagsV2: JsonObject.optional().describe('Canonical universal-tag JSON ([{key,value}])'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n name: args.name,\n key: args.key,\n ownerId: args.ownerId,\n };\n for (const k of [\n 'description',\n 'methodology',\n 'status',\n 'programId',\n 'defaultAssigneeId',\n 'startDate',\n 'endDate',\n 'tags',\n 'tagsV2',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateProject: Record<string, unknown>;\n }>(ops.CREATE_PROJECT, { input });\n return jsonResult(data.planmagnetCreateProject);\n } catch (error) {\n ctx.logger.error('planmagnet projects_create failed', { error: String(error) });\n return errorResult(\n `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_update')),\n {\n title: 'Update Project',\n description: 'Update a project. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Project ID'),\n name: z.string().optional().describe('Updated name'),\n key: z.string().optional().describe('Updated key'),\n description: z.string().optional().describe('Updated description'),\n status: ProjectStatusEnum.optional().describe('Updated status'),\n methodology: ProjectMethodologyEnum.optional().describe('Updated methodology'),\n ownerId: z.string().optional().describe('Updated owner actor ID'),\n programId: z.string().optional().describe('Updated parent program ID'),\n defaultAssigneeId: z.string().optional().describe('Updated default assignee'),\n startDate: z.string().optional().describe('Updated start date (ISO-8601)'),\n endDate: z.string().optional().describe('Updated end date (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Updated legacy tags'),\n tagsV2: JsonObject.optional().describe('Updated universal-tag JSON'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable project field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateProject: Record<string, unknown>;\n }>(ops.UPDATE_PROJECT, { id, input });\n return jsonResult(data.planmagnetUpdateProject);\n } catch (error) {\n ctx.logger.error('planmagnet projects_update failed', { error: String(error) });\n return errorResult(\n `Failed to update project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_delete')),\n {\n title: 'Delete Project',\n description: 'Soft-delete a project by ID.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteProject: boolean }>(\n ops.DELETE_PROJECT,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteProject });\n } catch (error) {\n ctx.logger.error('planmagnet projects_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Programs ───────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_get')),\n {\n title: 'Get Program',\n description: 'Fetch a single program by ID.',\n inputSchema: { id: z.string().describe('Program ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetProgram: Record<string, unknown> | null;\n }>(ops.GET_PROGRAM, { id });\n if (!data.planmagnetProgram) return errorResult(`Program ${id} not found`);\n return jsonResult(data.planmagnetProgram);\n } catch (error) {\n ctx.logger.error('planmagnet programs_get failed', { error: String(error) });\n return errorResult(\n `Failed to get program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_list')),\n {\n title: 'List Programs',\n description: 'List programs in a workspace with optional status/owner/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n status: ProjectStatusEnum.optional().describe('Filter by status'),\n ownerId: z.string().optional().describe('Filter by owner actor ID'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, status, ownerId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (status !== undefined) filter.status = status;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetPrograms: Record<string, unknown>;\n }>(ops.LIST_PROGRAMS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetPrograms);\n } catch (error) {\n ctx.logger.error('planmagnet programs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list programs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_create')),\n {\n title: 'Create Program',\n description: 'Create a new program (a grouping of related projects).',\n inputSchema: {\n name: z.string().min(1).describe('Program name'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Program description'),\n status: ProjectStatusEnum.optional().describe('Initial status'),\n budgetTotal: z.number().optional().describe('Total allocated budget'),\n currency: z.string().optional().describe('Budget currency code'),\n startDate: z.string().optional().describe('Planned start date (ISO-8601)'),\n endDate: z.string().optional().describe('Planned end date (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { name: args.name, ownerId: args.ownerId };\n for (const k of [\n 'description',\n 'status',\n 'budgetTotal',\n 'currency',\n 'startDate',\n 'endDate',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateProgram: Record<string, unknown>;\n }>(ops.CREATE_PROGRAM, { input });\n return jsonResult(data.planmagnetCreateProgram);\n } catch (error) {\n ctx.logger.error('planmagnet programs_create failed', { error: String(error) });\n return errorResult(\n `Failed to create program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_update')),\n {\n title: 'Update Program',\n description: 'Update a program. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Program ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n status: ProjectStatusEnum.optional().describe('Updated status'),\n ownerId: z.string().optional().describe('Updated owner'),\n budgetTotal: z.number().optional().describe('Updated budget'),\n currency: z.string().optional().describe('Updated currency'),\n startDate: z.string().optional().describe('Updated start date'),\n endDate: z.string().optional().describe('Updated end date'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable program field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateProgram: Record<string, unknown>;\n }>(ops.UPDATE_PROGRAM, { id, input });\n return jsonResult(data.planmagnetUpdateProgram);\n } catch (error) {\n ctx.logger.error('planmagnet programs_update failed', { error: String(error) });\n return errorResult(\n `Failed to update program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_delete')),\n {\n title: 'Delete Program',\n description: 'Soft-delete a program by ID.',\n inputSchema: { id: z.string().describe('Program ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteProgram: boolean }>(\n ops.DELETE_PROGRAM,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteProgram });\n } catch (error) {\n ctx.logger.error('planmagnet programs_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Portfolios ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_get')),\n {\n title: 'Get Portfolio',\n description: 'Fetch a single portfolio by ID.',\n inputSchema: { id: z.string().describe('Portfolio ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetPortfolio: Record<string, unknown> | null;\n }>(ops.GET_PORTFOLIO, { id });\n if (!data.planmagnetPortfolio) return errorResult(`Portfolio ${id} not found`);\n return jsonResult(data.planmagnetPortfolio);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_get failed', { error: String(error) });\n return errorResult(\n `Failed to get portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_list')),\n {\n title: 'List Portfolios',\n description:\n 'List portfolios in a workspace with optional status/alignment/owner/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n status: PortfolioStatusEnum.optional().describe('Filter by status'),\n alignment: StrategicAlignmentEnum.optional().describe('Filter by strategic alignment'),\n ownerId: z.string().optional().describe('Filter by owner'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, status, alignment, ownerId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (status !== undefined) filter.status = status;\n if (alignment !== undefined) filter.alignment = alignment;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetPortfolios: Record<string, unknown>;\n }>(ops.LIST_PORTFOLIOS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetPortfolios);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_list failed', { error: String(error) });\n return errorResult(\n `Failed to list portfolios: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_overview')),\n {\n title: 'Portfolio Overview',\n description:\n 'Aggregated health/metrics overview for a portfolio (projects by status, at-risk count, overdue milestones, budget utilization, health score).',\n inputSchema: { portfolioId: z.string().describe('Portfolio ID') },\n },\n async ({ portfolioId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetPortfolioOverview: Record<string, unknown>;\n }>(ops.PORTFOLIO_OVERVIEW, { portfolioId });\n return jsonResult(data.planmagnetPortfolioOverview);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_overview failed', { error: String(error) });\n return errorResult(\n `Failed to get portfolio overview: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_create')),\n {\n title: 'Create Portfolio',\n description: 'Create a new portfolio (strategic grouping of programs and projects).',\n inputSchema: {\n name: z.string().min(1).describe('Portfolio name'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Portfolio description'),\n status: PortfolioStatusEnum.optional().describe('Initial status'),\n alignment: StrategicAlignmentEnum.optional().describe('Strategic alignment'),\n alignmentLabel: z\n .string()\n .optional()\n .describe('Custom alignment label (when alignment=CUSTOM)'),\n budgetTotal: z.number().optional().describe('Total allocated budget'),\n currency: z.string().optional().describe('Budget currency code'),\n fiscalPeriod: z.string().optional().describe('Fiscal year / planning period'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { name: args.name, ownerId: args.ownerId };\n for (const k of [\n 'description',\n 'status',\n 'alignment',\n 'alignmentLabel',\n 'budgetTotal',\n 'currency',\n 'fiscalPeriod',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreatePortfolio: Record<string, unknown>;\n }>(ops.CREATE_PORTFOLIO, { input });\n return jsonResult(data.planmagnetCreatePortfolio);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_create failed', { error: String(error) });\n return errorResult(\n `Failed to create portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_update')),\n {\n title: 'Update Portfolio',\n description: 'Update a portfolio. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Portfolio ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n status: PortfolioStatusEnum.optional().describe('Updated status'),\n alignment: StrategicAlignmentEnum.optional().describe('Updated alignment'),\n alignmentLabel: z.string().optional().describe('Updated alignment label'),\n budgetTotal: z.number().optional().describe('Updated budget'),\n currency: z.string().optional().describe('Updated currency'),\n fiscalPeriod: z.string().optional().describe('Updated fiscal period'),\n ownerId: z.string().optional().describe('Updated owner'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable portfolio field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdatePortfolio: Record<string, unknown>;\n }>(ops.UPDATE_PORTFOLIO, { id, input });\n return jsonResult(data.planmagnetUpdatePortfolio);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_update failed', { error: String(error) });\n return errorResult(\n `Failed to update portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_delete')),\n {\n title: 'Delete Portfolio',\n description: 'Delete a portfolio by ID.',\n inputSchema: { id: z.string().describe('Portfolio ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeletePortfolio: boolean }>(\n ops.DELETE_PORTFOLIO,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeletePortfolio });\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet work-item tools — the core unit of work (epic > story >\n * task/bug > sub-task).\n *\n * Surface (8): work_items_{get,list,create,update,delete,assign,bulk_update,move}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n WorkItemTypeEnum,\n WorkItemStatusEnum,\n WorkItemPriorityEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerWorkItemTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_get')),\n {\n title: 'Get Work Item',\n description: 'Fetch a single work item by ID.',\n inputSchema: { id: z.string().describe('Work item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetWorkItem: Record<string, unknown> | null;\n }>(ops.GET_WORKITEM, { id });\n if (!data.planmagnetWorkItem) return errorResult(`Work item ${id} not found`);\n return jsonResult(data.planmagnetWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_get failed', { error: String(error) });\n return errorResult(\n `Failed to get work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_list')),\n {\n title: 'List Work Items',\n description:\n 'List work items in a workspace with optional project/sprint/parent/assignee/reporter/type/status/priority/text filters and cursor pagination.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n sprintId: z.string().optional().describe('Filter by sprint ID'),\n parentId: z.string().optional().describe('Filter by parent work item ID'),\n assigneeId: z.string().optional().describe('Filter by assignee actor ID'),\n reporterId: z.string().optional().describe('Filter by reporter actor ID'),\n type: WorkItemTypeEnum.optional().describe('Filter by type'),\n status: WorkItemStatusEnum.optional().describe('Filter by status'),\n priority: WorkItemPriorityEnum.optional().describe('Filter by priority'),\n search: z.string().optional().describe('Free-text search across title/description'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'projectId',\n 'sprintId',\n 'parentId',\n 'assigneeId',\n 'reporterId',\n 'type',\n 'status',\n 'priority',\n 'search',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetWorkItems: Record<string, unknown>;\n }>(ops.LIST_WORKITEMS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetWorkItems);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_list failed', { error: String(error) });\n return errorResult(\n `Failed to list work items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_create')),\n {\n title: 'Create Work Item',\n description: 'Create a new work item under a project. `type` and `title` are required.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n title: z.string().min(1).describe('Work item title'),\n type: WorkItemTypeEnum.describe('Work item type'),\n description: z.string().optional().describe('Detailed description'),\n status: WorkItemStatusEnum.optional().describe('Initial status'),\n priority: WorkItemPriorityEnum.optional().describe('Priority level'),\n assigneeId: z.string().optional().describe('Assignee actor ID'),\n reporterId: z.string().optional().describe('Reporter actor ID'),\n parentId: z.string().optional().describe('Parent work item ID (for sub-tasks)'),\n sprintId: z.string().optional().describe('Sprint to place into'),\n storyPoints: z.number().int().optional().describe('Story points estimate'),\n estimateMinutes: z.number().int().optional().describe('Time estimate in minutes'),\n dueDate: z.string().optional().describe('Due date (ISO-8601 DateTime)'),\n sortOrder: z.number().int().optional().describe('Sort order within lists'),\n labels: z.array(z.string()).optional().describe('Labels'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n title: args.title,\n type: args.type,\n };\n for (const k of [\n 'description',\n 'status',\n 'priority',\n 'assigneeId',\n 'reporterId',\n 'parentId',\n 'sprintId',\n 'storyPoints',\n 'estimateMinutes',\n 'dueDate',\n 'sortOrder',\n 'labels',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateWorkItem: Record<string, unknown>;\n }>(ops.CREATE_WORKITEM, { input });\n return jsonResult(data.planmagnetCreateWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_create failed', { error: String(error) });\n return errorResult(\n `Failed to create work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_update')),\n {\n title: 'Update Work Item',\n description: 'Update a work item. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Work item ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n type: WorkItemTypeEnum.optional().describe('Updated type'),\n status: WorkItemStatusEnum.optional().describe('Updated status'),\n priority: WorkItemPriorityEnum.optional().describe('Updated priority'),\n assigneeId: z.string().optional().describe('Updated assignee'),\n reporterId: z.string().optional().describe('Updated reporter'),\n parentId: z.string().optional().describe('Updated parent'),\n sprintId: z.string().optional().describe('Updated sprint'),\n storyPoints: z.number().int().optional().describe('Updated story points'),\n estimateMinutes: z.number().int().optional().describe('Updated estimate minutes'),\n timeSpentMinutes: z.number().int().optional().describe('Updated time spent minutes'),\n dueDate: z.string().optional().describe('Updated due date (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n labels: z.array(z.string()).optional().describe('Updated labels'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable work-item field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateWorkItem: Record<string, unknown>;\n }>(ops.UPDATE_WORKITEM, { id, input });\n return jsonResult(data.planmagnetUpdateWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_update failed', { error: String(error) });\n return errorResult(\n `Failed to update work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_delete')),\n {\n title: 'Delete Work Item',\n description: 'Soft-delete a work item by ID.',\n inputSchema: { id: z.string().describe('Work item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteWorkItem: boolean }>(\n ops.DELETE_WORKITEM,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteWorkItem });\n } catch (error) {\n ctx.logger.error('planmagnet work_items_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_assign')),\n {\n title: 'Assign Work Item',\n description: 'Assign a work item to an actor.',\n inputSchema: {\n id: z.string().describe('Work item ID'),\n assigneeId: z.string().min(1).describe('Assignee actor ID'),\n },\n },\n async ({ id, assigneeId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetAssignWorkItem: Record<string, unknown>;\n }>(ops.ASSIGN_WORKITEM, { id, input: { assigneeId } });\n return jsonResult(data.planmagnetAssignWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_assign failed', { error: String(error) });\n return errorResult(\n `Failed to assign work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_bulk_update')),\n {\n title: 'Bulk Update Work Items',\n description:\n 'Update multiple work items at once (status/priority/assignee/sprint/labels) by their IDs.',\n inputSchema: {\n ids: z.array(z.string()).min(1).describe('Work item IDs to update'),\n status: WorkItemStatusEnum.optional().describe('New status'),\n priority: WorkItemPriorityEnum.optional().describe('New priority'),\n assigneeId: z.string().optional().describe('New assignee'),\n sprintId: z.string().optional().describe('New sprint'),\n labels: z.array(z.string()).optional().describe('New labels'),\n },\n },\n async ({ ids, status, priority, assigneeId, sprintId, labels }) => {\n try {\n const input: Record<string, unknown> = { ids };\n if (status !== undefined) input.status = status;\n if (priority !== undefined) input.priority = priority;\n if (assigneeId !== undefined) input.assigneeId = assigneeId;\n if (sprintId !== undefined) input.sprintId = sprintId;\n if (labels !== undefined) input.labels = labels;\n const data = await ctx.gql.workspace.request<{\n planmagnetBulkUpdateWorkItems: Array<Record<string, unknown>>;\n }>(ops.BULK_UPDATE_WORKITEMS, { input });\n return jsonResult(data.planmagnetBulkUpdateWorkItems);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_bulk_update failed', { error: String(error) });\n return errorResult(\n `Failed to bulk update work items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_move')),\n {\n title: 'Move Work Item',\n description: 'Move a work item to a different status, sprint, and/or position.',\n inputSchema: {\n id: z.string().describe('Work item ID'),\n status: WorkItemStatusEnum.optional().describe('Target status'),\n sprintId: z.string().optional().describe('Target sprint ID'),\n sortOrder: z.number().int().optional().describe('Target sort order'),\n },\n },\n async ({ id, status, sprintId, sortOrder }) => {\n try {\n const input: Record<string, unknown> = {};\n if (status !== undefined) input.status = status;\n if (sprintId !== undefined) input.sprintId = sprintId;\n if (sortOrder !== undefined) input.sortOrder = sortOrder;\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No move specified — provide at least one of status/sprintId/sortOrder',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetMoveWorkItem: Record<string, unknown>;\n }>(ops.MOVE_WORKITEM, { id, input });\n return jsonResult(data.planmagnetMoveWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_move failed', { error: String(error) });\n return errorResult(\n `Failed to move work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet sprint tools — time-boxed iterations + their lifecycle.\n *\n * Surface (10): sprints_{get,list,create,update,delete,start,complete,cancel,\n * add_work_items,remove_work_items}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, SprintStatusEnum, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerSprintTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_get')),\n {\n title: 'Get Sprint',\n description: 'Fetch a single sprint by ID.',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetSprint: Record<string, unknown> | null;\n }>(ops.GET_SPRINT, { id });\n if (!data.planmagnetSprint) return errorResult(`Sprint ${id} not found`);\n return jsonResult(data.planmagnetSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_get failed', { error: String(error) });\n return errorResult(\n `Failed to get sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_list')),\n {\n title: 'List Sprints',\n description: 'List sprints in a workspace with optional project/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n status: SprintStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetSprints: Record<string, unknown>;\n }>(ops.LIST_SPRINTS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetSprints);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_list failed', { error: String(error) });\n return errorResult(\n `Failed to list sprints: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_create')),\n {\n title: 'Create Sprint',\n description: 'Create a new sprint under a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Sprint name'),\n goal: z.string().optional().describe('Sprint goal'),\n capacity: z.number().int().optional().describe('Sprint capacity in story points'),\n startDate: z.string().optional().describe('Sprint start date (ISO-8601)'),\n endDate: z.string().optional().describe('Sprint end date (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { projectId: args.projectId, name: args.name };\n for (const k of [\n 'goal',\n 'capacity',\n 'startDate',\n 'endDate',\n 'sortOrder',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateSprint: Record<string, unknown>;\n }>(ops.CREATE_SPRINT, { input });\n return jsonResult(data.planmagnetCreateSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_create failed', { error: String(error) });\n return errorResult(\n `Failed to create sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_update')),\n {\n title: 'Update Sprint',\n description: 'Update a sprint. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Sprint ID'),\n name: z.string().optional().describe('Updated name'),\n goal: z.string().optional().describe('Updated goal'),\n capacity: z.number().int().optional().describe('Updated capacity'),\n velocity: z.number().int().optional().describe('Updated velocity (completed story points)'),\n startDate: z.string().optional().describe('Updated start date'),\n endDate: z.string().optional().describe('Updated end date'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable sprint field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateSprint: Record<string, unknown>;\n }>(ops.UPDATE_SPRINT, { id, input });\n return jsonResult(data.planmagnetUpdateSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_update failed', { error: String(error) });\n return errorResult(\n `Failed to update sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_delete')),\n {\n title: 'Delete Sprint',\n description: 'Soft-delete a sprint by ID.',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteSprint: boolean }>(\n ops.DELETE_SPRINT,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteSprint });\n } catch (error) {\n ctx.logger.error('planmagnet sprints_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_start')),\n {\n title: 'Start Sprint',\n description: 'Start a sprint (transition to ACTIVE).',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetStartSprint: Record<string, unknown>;\n }>(ops.START_SPRINT, { id });\n return jsonResult(data.planmagnetStartSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_start failed', { error: String(error) });\n return errorResult(\n `Failed to start sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_complete')),\n {\n title: 'Complete Sprint',\n description: 'Complete a sprint (transition to COMPLETED).',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCompleteSprint: Record<string, unknown>;\n }>(ops.COMPLETE_SPRINT, { id });\n return jsonResult(data.planmagnetCompleteSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_complete failed', { error: String(error) });\n return errorResult(\n `Failed to complete sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_cancel')),\n {\n title: 'Cancel Sprint',\n description: 'Cancel a sprint (transition to CANCELLED).',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCancelSprint: Record<string, unknown>;\n }>(ops.CANCEL_SPRINT, { id });\n return jsonResult(data.planmagnetCancelSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_cancel failed', { error: String(error) });\n return errorResult(\n `Failed to cancel sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_add_work_items')),\n {\n title: 'Add Work Items to Sprint',\n description: 'Add one or more work items to a sprint.',\n inputSchema: {\n id: z.string().describe('Sprint ID'),\n workItemIds: z.array(z.string()).min(1).describe('Work item IDs to add'),\n },\n },\n async ({ id, workItemIds }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetAddWorkItemsToSprint: Record<string, unknown>;\n }>(ops.ADD_WORKITEMS_TO_SPRINT, { id, input: { workItemIds } });\n return jsonResult(data.planmagnetAddWorkItemsToSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_add_work_items failed', { error: String(error) });\n return errorResult(\n `Failed to add work items to sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_remove_work_items')),\n {\n title: 'Remove Work Items from Sprint',\n description: 'Remove one or more work items from a sprint.',\n inputSchema: {\n id: z.string().describe('Sprint ID'),\n workItemIds: z.array(z.string()).min(1).describe('Work item IDs to remove'),\n },\n },\n async ({ id, workItemIds }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRemoveWorkItemsFromSprint: Record<string, unknown>;\n }>(ops.REMOVE_WORKITEMS_FROM_SPRINT, { id, input: { workItemIds } });\n return jsonResult(data.planmagnetRemoveWorkItemsFromSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_remove_work_items failed', { error: String(error) });\n return errorResult(\n `Failed to remove work items from sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet board + column tools — visual kanban/scrum boards.\n *\n * Surface (10): boards_{get,list,create,update,delete,move_card,reorder_columns},\n * boards_{create,update,delete}_column.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n BoardTypeEnum,\n BoardColumnTypeEnum,\n WorkItemStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerBoardTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_get')),\n {\n title: 'Get Board',\n description: 'Fetch a single board by ID, including its columns.',\n inputSchema: { id: z.string().describe('Board ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetBoard: Record<string, unknown> | null;\n }>(ops.GET_BOARD, { id });\n if (!data.planmagnetBoard) return errorResult(`Board ${id} not found`);\n return jsonResult(data.planmagnetBoard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_get failed', { error: String(error) });\n return errorResult(\n `Failed to get board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_list')),\n {\n title: 'List Boards',\n description: 'List boards in a workspace with optional project/type/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n type: BoardTypeEnum.optional().describe('Filter by board type'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, type, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (type !== undefined) filter.type = type;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{ planmagnetBoards: Record<string, unknown> }>(\n ops.LIST_BOARDS,\n {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n },\n );\n return jsonResult(data.planmagnetBoards);\n } catch (error) {\n ctx.logger.error('planmagnet boards_list failed', { error: String(error) });\n return errorResult(\n `Failed to list boards: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_create')),\n {\n title: 'Create Board',\n description: 'Create a new board under a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Board name'),\n type: BoardTypeEnum.describe('Board type (KANBAN/SCRUM/CUSTOM)'),\n description: z.string().optional().describe('Board description'),\n isDefault: z.boolean().optional().describe('Set as the default board for the project'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n type: args.type,\n };\n for (const k of ['description', 'isDefault', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateBoard: Record<string, unknown>;\n }>(ops.CREATE_BOARD, { input });\n return jsonResult(data.planmagnetCreateBoard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_create failed', { error: String(error) });\n return errorResult(\n `Failed to create board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_update')),\n {\n title: 'Update Board',\n description: 'Update a board. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Board ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n type: BoardTypeEnum.optional().describe('Updated type'),\n isDefault: z.boolean().optional().describe('Updated default flag'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable board field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateBoard: Record<string, unknown>;\n }>(ops.UPDATE_BOARD, { id, input });\n return jsonResult(data.planmagnetUpdateBoard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_update failed', { error: String(error) });\n return errorResult(\n `Failed to update board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_delete')),\n {\n title: 'Delete Board',\n description: 'Delete a board by ID.',\n inputSchema: { id: z.string().describe('Board ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteBoard: boolean }>(\n ops.DELETE_BOARD,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteBoard });\n } catch (error) {\n ctx.logger.error('planmagnet boards_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_move_card')),\n {\n title: 'Move Board Card',\n description: 'Move a card (work item) to a different column and/or position on a board.',\n inputSchema: {\n boardId: z.string().describe('Board ID'),\n workItemId: z.string().describe('Work item (card) ID'),\n targetColumnId: z.string().describe('Destination column ID'),\n sortOrder: z.number().int().optional().describe('Target position within the column'),\n },\n },\n async ({ boardId, workItemId, targetColumnId, sortOrder }) => {\n try {\n const input: Record<string, unknown> = { workItemId, targetColumnId };\n if (sortOrder !== undefined) input.sortOrder = sortOrder;\n const data = await ctx.gql.workspace.request<{\n planmagnetMoveCard: Record<string, unknown>;\n }>(ops.MOVE_CARD, { boardId, input });\n return jsonResult(data.planmagnetMoveCard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_move_card failed', { error: String(error) });\n return errorResult(\n `Failed to move card: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_reorder_columns')),\n {\n title: 'Reorder Board Columns',\n description:\n 'Reorder the columns on a board by supplying the new ordered list of column IDs.',\n inputSchema: {\n boardId: z.string().describe('Board ID'),\n columnIds: z.array(z.string()).min(1).describe('Ordered column IDs (new order)'),\n },\n },\n async ({ boardId, columnIds }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetReorderColumns: Record<string, unknown>;\n }>(ops.REORDER_COLUMNS, { boardId, input: { columnIds } });\n return jsonResult(data.planmagnetReorderColumns);\n } catch (error) {\n ctx.logger.error('planmagnet boards_reorder_columns failed', { error: String(error) });\n return errorResult(\n `Failed to reorder columns: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_create_column')),\n {\n title: 'Create Board Column',\n description: 'Create a column on a board representing a workflow stage.',\n inputSchema: {\n boardId: z.string().min(1).describe('Parent board ID'),\n name: z.string().min(1).describe('Column name'),\n type: BoardColumnTypeEnum.describe('Column type (TODO/IN_PROGRESS/DONE/CUSTOM)'),\n mappedStatus: WorkItemStatusEnum.optional().describe(\n 'Work-item status this column maps to',\n ),\n sortOrder: z.number().int().optional().describe('Sort order within the board'),\n wipLimit: z.number().int().optional().describe('Work-in-progress limit (0 = unlimited)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n boardId: args.boardId,\n name: args.name,\n type: args.type,\n };\n for (const k of ['mappedStatus', 'sortOrder', 'wipLimit', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateBoardColumn: Record<string, unknown>;\n }>(ops.CREATE_BOARD_COLUMN, { input });\n return jsonResult(data.planmagnetCreateBoardColumn);\n } catch (error) {\n ctx.logger.error('planmagnet boards_create_column failed', { error: String(error) });\n return errorResult(\n `Failed to create board column: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_update_column')),\n {\n title: 'Update Board Column',\n description: 'Update a board column. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Board column ID'),\n name: z.string().optional().describe('Updated name'),\n type: BoardColumnTypeEnum.optional().describe('Updated type'),\n mappedStatus: WorkItemStatusEnum.optional().describe('Updated mapped status'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n wipLimit: z.number().int().optional().describe('Updated WIP limit'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable column field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateBoardColumn: Record<string, unknown>;\n }>(ops.UPDATE_BOARD_COLUMN, { id, input });\n return jsonResult(data.planmagnetUpdateBoardColumn);\n } catch (error) {\n ctx.logger.error('planmagnet boards_update_column failed', { error: String(error) });\n return errorResult(\n `Failed to update board column: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_delete_column')),\n {\n title: 'Delete Board Column',\n description: 'Delete a board column by ID.',\n inputSchema: { id: z.string().describe('Board column ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteBoardColumn: boolean }>(\n ops.DELETE_BOARD_COLUMN,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteBoardColumn });\n } catch (error) {\n ctx.logger.error('planmagnet boards_delete_column failed', { error: String(error) });\n return errorResult(\n `Failed to delete board column: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet milestone tools — project timeline checkpoints.\n *\n * Surface (5): milestones_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n MilestoneStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerMilestoneTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_get')),\n {\n title: 'Get Milestone',\n description: 'Fetch a single milestone by ID.',\n inputSchema: { id: z.string().describe('Milestone ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetMilestone: Record<string, unknown> | null;\n }>(ops.GET_MILESTONE, { id });\n if (!data.planmagnetMilestone) return errorResult(`Milestone ${id} not found`);\n return jsonResult(data.planmagnetMilestone);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_get failed', { error: String(error) });\n return errorResult(\n `Failed to get milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_list')),\n {\n title: 'List Milestones',\n description:\n 'List milestones in a workspace with optional project/owner/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n ownerId: z.string().optional().describe('Filter by owner'),\n status: MilestoneStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, ownerId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetMilestones: Record<string, unknown>;\n }>(ops.LIST_MILESTONES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetMilestones);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_list failed', { error: String(error) });\n return errorResult(\n `Failed to list milestones: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_create')),\n {\n title: 'Create Milestone',\n description: 'Create a new milestone under a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Milestone name'),\n description: z.string().optional().describe('Description'),\n status: MilestoneStatusEnum.optional().describe('Initial status'),\n ownerId: z.string().optional().describe('Owner actor ID'),\n dueDate: z.string().optional().describe('Target due date (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n tags: z.array(z.string()).optional().describe('Legacy string tags'),\n tagsV2: JsonObject.optional().describe('Canonical universal-tag JSON'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { projectId: args.projectId, name: args.name };\n for (const k of [\n 'description',\n 'status',\n 'ownerId',\n 'dueDate',\n 'sortOrder',\n 'tags',\n 'tagsV2',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateMilestone: Record<string, unknown>;\n }>(ops.CREATE_MILESTONE, { input });\n return jsonResult(data.planmagnetCreateMilestone);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_create failed', { error: String(error) });\n return errorResult(\n `Failed to create milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_update')),\n {\n title: 'Update Milestone',\n description: 'Update a milestone. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Milestone ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n status: MilestoneStatusEnum.optional().describe('Updated status'),\n ownerId: z.string().optional().describe('Updated owner'),\n dueDate: z.string().optional().describe('Updated due date'),\n completedAt: z.string().optional().describe('Completion timestamp (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n tags: z.array(z.string()).optional().describe('Updated legacy tags'),\n tagsV2: JsonObject.optional().describe('Updated universal-tag JSON'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable milestone field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateMilestone: Record<string, unknown>;\n }>(ops.UPDATE_MILESTONE, { id, input });\n return jsonResult(data.planmagnetUpdateMilestone);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_update failed', { error: String(error) });\n return errorResult(\n `Failed to update milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_delete')),\n {\n title: 'Delete Milestone',\n description: 'Delete a milestone by ID.',\n inputSchema: { id: z.string().describe('Milestone ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteMilestone: boolean }>(\n ops.DELETE_MILESTONE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteMilestone });\n } catch (error) {\n ctx.logger.error('planmagnet milestones_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet work-item dependency tools — typed relationships between\n * work items (blocks, blocked_by, relates_to, …).\n *\n * Surface (5): dependencies_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n DependencyTypeEnum,\n DependencyStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerDependencyTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_get')),\n {\n title: 'Get Dependency',\n description: 'Fetch a single work-item dependency by ID.',\n inputSchema: { id: z.string().describe('Dependency ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetDependency: Record<string, unknown> | null;\n }>(ops.GET_DEPENDENCY, { id });\n if (!data.planmagnetDependency) return errorResult(`Dependency ${id} not found`);\n return jsonResult(data.planmagnetDependency);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_get failed', { error: String(error) });\n return errorResult(\n `Failed to get dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_list')),\n {\n title: 'List Dependencies',\n description:\n 'List work-item dependencies in a workspace with optional source/target/type/status filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n sourceWorkItemId: z.string().optional().describe('Filter by source work item ID'),\n targetWorkItemId: z.string().optional().describe('Filter by target work item ID'),\n type: DependencyTypeEnum.optional().describe('Filter by dependency type'),\n status: DependencyStatusEnum.optional().describe('Filter by status'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, sourceWorkItemId, targetWorkItemId, type, status, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (sourceWorkItemId !== undefined) filter.sourceWorkItemId = sourceWorkItemId;\n if (targetWorkItemId !== undefined) filter.targetWorkItemId = targetWorkItemId;\n if (type !== undefined) filter.type = type;\n if (status !== undefined) filter.status = status;\n const data = await ctx.gql.workspace.request<{\n planmagnetDependencies: Record<string, unknown>;\n }>(ops.LIST_DEPENDENCIES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetDependencies);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_list failed', { error: String(error) });\n return errorResult(\n `Failed to list dependencies: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_create')),\n {\n title: 'Create Dependency',\n description: 'Create a typed dependency between two work items.',\n inputSchema: {\n sourceWorkItemId: z.string().min(1).describe('Source work item ID'),\n targetWorkItemId: z.string().min(1).describe('Target work item ID'),\n type: DependencyTypeEnum.describe('Dependency type'),\n description: z.string().optional().describe('Optional description'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ sourceWorkItemId, targetWorkItemId, type, description, metadata }) => {\n try {\n const input: Record<string, unknown> = { sourceWorkItemId, targetWorkItemId, type };\n if (description !== undefined) input.description = description;\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateDependency: Record<string, unknown>;\n }>(ops.CREATE_DEPENDENCY, { input });\n return jsonResult(data.planmagnetCreateDependency);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_create failed', { error: String(error) });\n return errorResult(\n `Failed to create dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_update')),\n {\n title: 'Update Dependency',\n description: 'Update a dependency. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Dependency ID'),\n type: DependencyTypeEnum.optional().describe('Updated type'),\n status: DependencyStatusEnum.optional().describe('Updated status'),\n description: z.string().optional().describe('Updated description'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable dependency field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateDependency: Record<string, unknown>;\n }>(ops.UPDATE_DEPENDENCY, { id, input });\n return jsonResult(data.planmagnetUpdateDependency);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_update failed', { error: String(error) });\n return errorResult(\n `Failed to update dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_delete')),\n {\n title: 'Delete Dependency',\n description: 'Remove a dependency by ID.',\n inputSchema: { id: z.string().describe('Dependency ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteDependency: boolean }>(\n ops.DELETE_DEPENDENCY,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteDependency });\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet budget + expense tools — project financial tracking.\n *\n * Surface (10): budgets_{get,list,create,update,delete,approve},\n * budgets_{list_expenses,log_expense,update_expense,delete_expense}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, BudgetStatusEnum, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerBudgetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_get')),\n {\n title: 'Get Budget',\n description: 'Fetch a single budget by ID.',\n inputSchema: { id: z.string().describe('Budget ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetBudget: Record<string, unknown> | null;\n }>(ops.GET_BUDGET, { id });\n if (!data.planmagnetBudget) return errorResult(`Budget ${id} not found`);\n return jsonResult(data.planmagnetBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_list')),\n {\n title: 'List Budgets',\n description: 'List budgets in a workspace with optional project/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n status: BudgetStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetBudgets: Record<string, unknown>;\n }>(ops.LIST_BUDGETS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetBudgets);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list budgets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_create')),\n {\n title: 'Create Budget',\n description: 'Create a new budget for a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Budget name'),\n currency: z.string().min(1).describe('Currency code (e.g. USD)'),\n plannedAmount: z.number().describe('Total planned amount'),\n description: z.string().optional().describe('Description'),\n periodStart: z.string().optional().describe('Budget period start (ISO-8601)'),\n periodEnd: z.string().optional().describe('Budget period end (ISO-8601)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n currency: args.currency,\n plannedAmount: args.plannedAmount,\n };\n for (const k of ['description', 'periodStart', 'periodEnd', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateBudget: Record<string, unknown>;\n }>(ops.CREATE_BUDGET, { input });\n return jsonResult(data.planmagnetCreateBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_update')),\n {\n title: 'Update Budget',\n description: 'Update a budget. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Budget ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n currency: z.string().optional().describe('Updated currency'),\n plannedAmount: z.number().optional().describe('Updated planned amount'),\n status: BudgetStatusEnum.optional().describe('Updated status'),\n periodStart: z.string().optional().describe('Updated period start'),\n periodEnd: z.string().optional().describe('Updated period end'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable budget field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateBudget: Record<string, unknown>;\n }>(ops.UPDATE_BUDGET, { id, input });\n return jsonResult(data.planmagnetUpdateBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_update failed', { error: String(error) });\n return errorResult(\n `Failed to update budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_delete')),\n {\n title: 'Delete Budget',\n description: 'Delete a budget by ID.',\n inputSchema: { id: z.string().describe('Budget ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteBudget: boolean }>(\n ops.DELETE_BUDGET,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteBudget });\n } catch (error) {\n ctx.logger.error('planmagnet budgets_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_approve')),\n {\n title: 'Approve Budget',\n description: 'Approve a budget by ID.',\n inputSchema: { id: z.string().describe('Budget ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetApproveBudget: Record<string, unknown>;\n }>(ops.APPROVE_BUDGET, { id });\n return jsonResult(data.planmagnetApproveBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_approve failed', { error: String(error) });\n return errorResult(\n `Failed to approve budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_list_expenses')),\n {\n title: 'List Budget Expenses',\n description: 'List expenses logged against budgets in a workspace, with optional filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n budgetId: z.string().optional().describe('Filter by budget ID'),\n category: z.string().optional().describe('Filter by expense category'),\n dateFrom: z.string().optional().describe('Filter expenses on/after this date (ISO-8601)'),\n dateTo: z.string().optional().describe('Filter expenses on/before this date (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, budgetId, category, dateFrom, dateTo, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (budgetId !== undefined) filter.budgetId = budgetId;\n if (category !== undefined) filter.category = category;\n if (dateFrom !== undefined) filter.dateFrom = dateFrom;\n if (dateTo !== undefined) filter.dateTo = dateTo;\n const data = await ctx.gql.workspace.request<{\n planmagnetBudgetExpenses: Record<string, unknown>;\n }>(ops.LIST_BUDGET_EXPENSES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetBudgetExpenses);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_list_expenses failed', { error: String(error) });\n return errorResult(\n `Failed to list budget expenses: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_log_expense')),\n {\n title: 'Log Budget Expense',\n description: 'Log an expense against a budget.',\n inputSchema: {\n budgetId: z.string().min(1).describe('Parent budget ID'),\n amount: z.number().describe('Expense amount'),\n date: z.string().describe('Date of expense (ISO-8601 DateTime)'),\n description: z.string().min(1).describe('Expense description'),\n category: z.string().optional().describe('Expense category'),\n referenceUrl: z.string().optional().describe('Receipt or reference URL'),\n workItemId: z.string().optional().describe('Associated work item ID'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n budgetId: args.budgetId,\n amount: args.amount,\n date: args.date,\n description: args.description,\n };\n for (const k of ['category', 'referenceUrl', 'workItemId', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetLogExpense: Record<string, unknown>;\n }>(ops.LOG_EXPENSE, { input });\n return jsonResult(data.planmagnetLogExpense);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_log_expense failed', { error: String(error) });\n return errorResult(\n `Failed to log expense: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_update_expense')),\n {\n title: 'Update Budget Expense',\n description: 'Update a logged expense. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Expense ID'),\n amount: z.number().optional().describe('Updated amount'),\n date: z.string().optional().describe('Updated date (ISO-8601)'),\n description: z.string().optional().describe('Updated description'),\n category: z.string().optional().describe('Updated category'),\n referenceUrl: z.string().optional().describe('Updated reference URL'),\n workItemId: z.string().optional().describe('Updated associated work item'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable expense field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateExpense: Record<string, unknown>;\n }>(ops.UPDATE_EXPENSE, { id, input });\n return jsonResult(data.planmagnetUpdateExpense);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_update_expense failed', { error: String(error) });\n return errorResult(\n `Failed to update expense: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_delete_expense')),\n {\n title: 'Delete Budget Expense',\n description: 'Delete a logged expense by ID.',\n inputSchema: { id: z.string().describe('Expense ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteExpense: boolean }>(\n ops.DELETE_EXPENSE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteExpense });\n } catch (error) {\n ctx.logger.error('planmagnet budgets_delete_expense failed', { error: String(error) });\n return errorResult(\n `Failed to delete expense: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet risk tools — project risk register + risk matrix.\n *\n * Surface (7): risks_{get,list,matrix,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n RiskSeverityEnum,\n RiskStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerRiskTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_get')),\n {\n title: 'Get Risk',\n description: 'Fetch a single risk by ID.',\n inputSchema: { id: z.string().describe('Risk ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRisk: Record<string, unknown> | null;\n }>(ops.GET_RISK, { id });\n if (!data.planmagnetRisk) return errorResult(`Risk ${id} not found`);\n return jsonResult(data.planmagnetRisk);\n } catch (error) {\n ctx.logger.error('planmagnet risks_get failed', { error: String(error) });\n return errorResult(\n `Failed to get risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_list')),\n {\n title: 'List Risks',\n description:\n 'List risks in a workspace with optional project/owner/category/severity/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n ownerId: z.string().optional().describe('Filter by owner'),\n category: z.string().optional().describe('Filter by category'),\n severity: RiskSeverityEnum.optional().describe('Filter by severity'),\n status: RiskStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'projectId',\n 'ownerId',\n 'category',\n 'severity',\n 'status',\n 'search',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{ planmagnetRisks: Record<string, unknown> }>(\n ops.LIST_RISKS,\n {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n },\n );\n return jsonResult(data.planmagnetRisks);\n } catch (error) {\n ctx.logger.error('planmagnet risks_list failed', { error: String(error) });\n return errorResult(\n `Failed to list risks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_matrix')),\n {\n title: 'Risk Matrix',\n description:\n 'Aggregated risk matrix for a project — distribution across likelihood and impact, plus counts by severity/status and average risk score.',\n inputSchema: { projectId: z.string().describe('Project ID') },\n },\n async ({ projectId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRiskMatrix: Record<string, unknown>;\n }>(ops.RISK_MATRIX, { projectId });\n return jsonResult(data.planmagnetRiskMatrix);\n } catch (error) {\n ctx.logger.error('planmagnet risks_matrix failed', { error: String(error) });\n return errorResult(\n `Failed to get risk matrix: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_create')),\n {\n title: 'Create Risk',\n description:\n 'Register a new risk. `impact` and `likelihood` are 1-5 scores; `severity` is required.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n title: z.string().min(1).describe('Risk title'),\n severity: RiskSeverityEnum.describe('Risk severity'),\n impact: z.number().int().min(1).max(5).describe('Impact score (1-5)'),\n likelihood: z.number().int().min(1).max(5).describe('Likelihood score (1-5)'),\n description: z.string().optional().describe('Detailed description'),\n category: z.string().optional().describe('Risk category'),\n ownerId: z.string().optional().describe('Owner actor ID responsible for mitigation'),\n mitigationPlan: z.string().optional().describe('Mitigation plan'),\n contingencyPlan: z.string().optional().describe('Contingency plan'),\n dueDate: z.string().optional().describe('Due date for mitigation (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n title: args.title,\n severity: args.severity,\n impact: args.impact,\n likelihood: args.likelihood,\n };\n for (const k of [\n 'description',\n 'category',\n 'ownerId',\n 'mitigationPlan',\n 'contingencyPlan',\n 'dueDate',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRisk: Record<string, unknown>;\n }>(ops.CREATE_RISK, { input });\n return jsonResult(data.planmagnetCreateRisk);\n } catch (error) {\n ctx.logger.error('planmagnet risks_create failed', { error: String(error) });\n return errorResult(\n `Failed to create risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_update')),\n {\n title: 'Update Risk',\n description: 'Update a risk. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Risk ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n category: z.string().optional().describe('Updated category'),\n severity: RiskSeverityEnum.optional().describe('Updated severity'),\n status: RiskStatusEnum.optional().describe('Updated status'),\n impact: z.number().int().min(1).max(5).optional().describe('Updated impact (1-5)'),\n likelihood: z.number().int().min(1).max(5).optional().describe('Updated likelihood (1-5)'),\n ownerId: z.string().optional().describe('Updated owner'),\n mitigationPlan: z.string().optional().describe('Updated mitigation plan'),\n contingencyPlan: z.string().optional().describe('Updated contingency plan'),\n dueDate: z.string().optional().describe('Updated due date'),\n resolvedAt: z.string().optional().describe('Resolution timestamp (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable risk field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRisk: Record<string, unknown>;\n }>(ops.UPDATE_RISK, { id, input });\n return jsonResult(data.planmagnetUpdateRisk);\n } catch (error) {\n ctx.logger.error('planmagnet risks_update failed', { error: String(error) });\n return errorResult(\n `Failed to update risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_delete')),\n {\n title: 'Delete Risk',\n description: 'Delete a risk by ID.',\n inputSchema: { id: z.string().describe('Risk ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRisk: boolean }>(\n ops.DELETE_RISK,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRisk });\n } catch (error) {\n ctx.logger.error('planmagnet risks_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet release tools — versioned deliverables bundling work items.\n *\n * Surface (5): releases_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, ReleaseStatusEnum, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerReleaseTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_get')),\n {\n title: 'Get Release',\n description: 'Fetch a single release by ID.',\n inputSchema: { id: z.string().describe('Release ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRelease: Record<string, unknown> | null;\n }>(ops.GET_RELEASE, { id });\n if (!data.planmagnetRelease) return errorResult(`Release ${id} not found`);\n return jsonResult(data.planmagnetRelease);\n } catch (error) {\n ctx.logger.error('planmagnet releases_get failed', { error: String(error) });\n return errorResult(\n `Failed to get release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_list')),\n {\n title: 'List Releases',\n description: 'List releases in a workspace with optional project/owner/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n ownerId: z.string().optional().describe('Filter by owner'),\n status: ReleaseStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, ownerId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetReleases: Record<string, unknown>;\n }>(ops.LIST_RELEASES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetReleases);\n } catch (error) {\n ctx.logger.error('planmagnet releases_list failed', { error: String(error) });\n return errorResult(\n `Failed to list releases: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_create')),\n {\n title: 'Create Release',\n description: 'Create a new release for a project. `version` and `name` are required.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Release name'),\n version: z.string().min(1).describe('Release version (e.g. 1.2.0)'),\n description: z.string().optional().describe('Description'),\n status: ReleaseStatusEnum.optional().describe('Initial status'),\n ownerId: z.string().optional().describe('Owner actor ID'),\n plannedDate: z.string().optional().describe('Planned release date (ISO-8601)'),\n releaseNotes: z.string().optional().describe('Release notes (markdown)'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n version: args.version,\n };\n for (const k of [\n 'description',\n 'status',\n 'ownerId',\n 'plannedDate',\n 'releaseNotes',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRelease: Record<string, unknown>;\n }>(ops.CREATE_RELEASE, { input });\n return jsonResult(data.planmagnetCreateRelease);\n } catch (error) {\n ctx.logger.error('planmagnet releases_create failed', { error: String(error) });\n return errorResult(\n `Failed to create release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_update')),\n {\n title: 'Update Release',\n description: 'Update a release. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Release ID'),\n name: z.string().optional().describe('Updated name'),\n version: z.string().optional().describe('Updated version'),\n description: z.string().optional().describe('Updated description'),\n status: ReleaseStatusEnum.optional().describe('Updated status'),\n ownerId: z.string().optional().describe('Updated owner'),\n plannedDate: z.string().optional().describe('Updated planned date'),\n releasedAt: z.string().optional().describe('Actual release date (ISO-8601)'),\n releaseNotes: z.string().optional().describe('Updated release notes'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable release field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRelease: Record<string, unknown>;\n }>(ops.UPDATE_RELEASE, { id, input });\n return jsonResult(data.planmagnetUpdateRelease);\n } catch (error) {\n ctx.logger.error('planmagnet releases_update failed', { error: String(error) });\n return errorResult(\n `Failed to update release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_delete')),\n {\n title: 'Delete Release',\n description: 'Delete a release by ID.',\n inputSchema: { id: z.string().describe('Release ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRelease: boolean }>(\n ops.DELETE_RELEASE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRelease });\n } catch (error) {\n ctx.logger.error('planmagnet releases_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet quality-gate tools — phase checkpoints that must be passed.\n *\n * Surface (6): quality_gates_{get,list,create,update,delete,review}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n QualityGateStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerQualityGateTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_get')),\n {\n title: 'Get Quality Gate',\n description: 'Fetch a single quality gate by ID.',\n inputSchema: { id: z.string().describe('Quality gate ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetQualityGate: Record<string, unknown> | null;\n }>(ops.GET_QUALITY_GATE, { id });\n if (!data.planmagnetQualityGate) return errorResult(`Quality gate ${id} not found`);\n return jsonResult(data.planmagnetQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_get failed', { error: String(error) });\n return errorResult(\n `Failed to get quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_list')),\n {\n title: 'List Quality Gates',\n description:\n 'List quality gates in a workspace with optional project/milestone/phase/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n milestoneId: z.string().optional().describe('Filter by linked milestone ID'),\n phase: z.string().optional().describe('Filter by phase'),\n status: QualityGateStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of ['projectId', 'milestoneId', 'phase', 'status', 'search'] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetQualityGates: Record<string, unknown>;\n }>(ops.LIST_QUALITY_GATES, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetQualityGates);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_list failed', { error: String(error) });\n return errorResult(\n `Failed to list quality gates: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_create')),\n {\n title: 'Create Quality Gate',\n description:\n 'Create a quality gate for a project. `criteria` is a JSON array of checks that must be met.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Gate name'),\n criteria: JsonValue.describe('Criteria JSON array (checks that must be met)'),\n description: z.string().optional().describe('Description'),\n milestoneId: z.string().optional().describe('Linked milestone ID'),\n phase: z.string().optional().describe('Phase or stage this gate belongs to'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n criteria: args.criteria,\n };\n for (const k of ['description', 'milestoneId', 'phase', 'sortOrder', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateQualityGate: Record<string, unknown>;\n }>(ops.CREATE_QUALITY_GATE, { input });\n return jsonResult(data.planmagnetCreateQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_create failed', { error: String(error) });\n return errorResult(\n `Failed to create quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_update')),\n {\n title: 'Update Quality Gate',\n description: 'Update a quality gate. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Quality gate ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n criteria: JsonValue.optional().describe('Updated criteria JSON array'),\n milestoneId: z.string().optional().describe('Updated linked milestone'),\n phase: z.string().optional().describe('Updated phase'),\n status: QualityGateStatusEnum.optional().describe('Updated status'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable quality-gate field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateQualityGate: Record<string, unknown>;\n }>(ops.UPDATE_QUALITY_GATE, { id, input });\n return jsonResult(data.planmagnetUpdateQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_update failed', { error: String(error) });\n return errorResult(\n `Failed to update quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_delete')),\n {\n title: 'Delete Quality Gate',\n description: 'Delete a quality gate by ID.',\n inputSchema: { id: z.string().describe('Quality gate ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteQualityGate: boolean }>(\n ops.DELETE_QUALITY_GATE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteQualityGate });\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_review')),\n {\n title: 'Review Quality Gate',\n description: 'Review a quality gate — pass, fail, or waive it, with optional review notes.',\n inputSchema: {\n id: z.string().describe('Quality gate ID'),\n status: QualityGateStatusEnum.describe('Review outcome (PASSED/FAILED/WAIVED/IN_REVIEW)'),\n reviewNotes: z.string().optional().describe('Review notes'),\n },\n },\n async ({ id, status, reviewNotes }) => {\n try {\n const input: Record<string, unknown> = { status };\n if (reviewNotes !== undefined) input.reviewNotes = reviewNotes;\n const data = await ctx.gql.workspace.request<{\n planmagnetReviewQualityGate: Record<string, unknown>;\n }>(ops.REVIEW_QUALITY_GATE, { id, input });\n return jsonResult(data.planmagnetReviewQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_review failed', { error: String(error) });\n return errorResult(\n `Failed to review quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet roadmap + roadmap-item tools — strategic timeline visualization.\n *\n * Surface (10): roadmaps_{get,list,create,update,delete},\n * roadmaps_{get,list,create,update,delete}_item(s).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n RoadmapTypeEnum,\n RoadmapItemStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerRoadmapTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Roadmaps ───────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_get')),\n {\n title: 'Get Roadmap',\n description: 'Fetch a single roadmap by ID.',\n inputSchema: { id: z.string().describe('Roadmap ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmap: Record<string, unknown> | null;\n }>(ops.GET_ROADMAP, { id });\n if (!data.planmagnetRoadmap) return errorResult(`Roadmap ${id} not found`);\n return jsonResult(data.planmagnetRoadmap);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_get failed', { error: String(error) });\n return errorResult(\n `Failed to get roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_list')),\n {\n title: 'List Roadmaps',\n description: 'List roadmaps in a workspace with optional type/owner/public/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n type: RoadmapTypeEnum.optional().describe('Filter by roadmap type'),\n ownerId: z.string().optional().describe('Filter by owner'),\n isPublic: z.boolean().optional().describe('Filter by public/shared flag'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, type, ownerId, isPublic, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (type !== undefined) filter.type = type;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (isPublic !== undefined) filter.isPublic = isPublic;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmaps: Record<string, unknown>;\n }>(ops.LIST_ROADMAPS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetRoadmaps);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_list failed', { error: String(error) });\n return errorResult(\n `Failed to list roadmaps: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_create')),\n {\n title: 'Create Roadmap',\n description: 'Create a new roadmap.',\n inputSchema: {\n name: z.string().min(1).describe('Roadmap name'),\n type: RoadmapTypeEnum.describe('Visualization type (TIMELINE/GANTT/SWIMLANE/CUSTOM)'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Description'),\n isPublic: z.boolean().optional().describe('Whether the roadmap is publicly shared'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n name: args.name,\n type: args.type,\n ownerId: args.ownerId,\n };\n for (const k of ['description', 'isPublic', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRoadmap: Record<string, unknown>;\n }>(ops.CREATE_ROADMAP, { input });\n return jsonResult(data.planmagnetCreateRoadmap);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_create failed', { error: String(error) });\n return errorResult(\n `Failed to create roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_update')),\n {\n title: 'Update Roadmap',\n description: 'Update a roadmap. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Roadmap ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n type: RoadmapTypeEnum.optional().describe('Updated type'),\n isPublic: z.boolean().optional().describe('Updated public flag'),\n ownerId: z.string().optional().describe('Updated owner'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable roadmap field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRoadmap: Record<string, unknown>;\n }>(ops.UPDATE_ROADMAP, { id, input });\n return jsonResult(data.planmagnetUpdateRoadmap);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_update failed', { error: String(error) });\n return errorResult(\n `Failed to update roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_delete')),\n {\n title: 'Delete Roadmap',\n description: 'Delete a roadmap by ID.',\n inputSchema: { id: z.string().describe('Roadmap ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRoadmap: boolean }>(\n ops.DELETE_ROADMAP,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRoadmap });\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Roadmap items ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_get_item')),\n {\n title: 'Get Roadmap Item',\n description: 'Fetch a single roadmap item by ID.',\n inputSchema: { id: z.string().describe('Roadmap item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmapItem: Record<string, unknown> | null;\n }>(ops.GET_ROADMAP_ITEM, { id });\n if (!data.planmagnetRoadmapItem) return errorResult(`Roadmap item ${id} not found`);\n return jsonResult(data.planmagnetRoadmapItem);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_get_item failed', { error: String(error) });\n return errorResult(\n `Failed to get roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_list_items')),\n {\n title: 'List Roadmap Items',\n description:\n 'List roadmap items in a workspace with optional roadmap/project/milestone/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n roadmapId: z.string().optional().describe('Filter by roadmap ID'),\n projectId: z.string().optional().describe('Filter by project ID'),\n milestoneId: z.string().optional().describe('Filter by milestone ID'),\n status: RoadmapItemStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of ['roadmapId', 'projectId', 'milestoneId', 'status', 'search'] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmapItems: Record<string, unknown>;\n }>(ops.LIST_ROADMAP_ITEMS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetRoadmapItems);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_list_items failed', { error: String(error) });\n return errorResult(\n `Failed to list roadmap items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_create_item')),\n {\n title: 'Create Roadmap Item',\n description: 'Add an item to a roadmap timeline.',\n inputSchema: {\n roadmapId: z.string().min(1).describe('Parent roadmap ID'),\n title: z.string().min(1).describe('Item title'),\n description: z.string().optional().describe('Description'),\n status: RoadmapItemStatusEnum.optional().describe('Initial status'),\n projectId: z.string().optional().describe('Linked project ID'),\n milestoneId: z.string().optional().describe('Linked milestone ID'),\n workItemId: z.string().optional().describe('Linked work item ID (typically an epic)'),\n startDate: z.string().optional().describe('Start date on timeline (ISO-8601)'),\n endDate: z.string().optional().describe('End date on timeline (ISO-8601)'),\n color: z.string().optional().describe('Color for visual display'),\n swimlane: z.string().optional().describe('Swimlane / row identifier'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { roadmapId: args.roadmapId, title: args.title };\n for (const k of [\n 'description',\n 'status',\n 'projectId',\n 'milestoneId',\n 'workItemId',\n 'startDate',\n 'endDate',\n 'color',\n 'swimlane',\n 'sortOrder',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRoadmapItem: Record<string, unknown>;\n }>(ops.CREATE_ROADMAP_ITEM, { input });\n return jsonResult(data.planmagnetCreateRoadmapItem);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_create_item failed', { error: String(error) });\n return errorResult(\n `Failed to create roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_update_item')),\n {\n title: 'Update Roadmap Item',\n description: 'Update a roadmap item. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Roadmap item ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n status: RoadmapItemStatusEnum.optional().describe('Updated status'),\n projectId: z.string().optional().describe('Updated project link'),\n milestoneId: z.string().optional().describe('Updated milestone link'),\n workItemId: z.string().optional().describe('Updated work-item link'),\n startDate: z.string().optional().describe('Updated start date'),\n endDate: z.string().optional().describe('Updated end date'),\n color: z.string().optional().describe('Updated color'),\n swimlane: z.string().optional().describe('Updated swimlane'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable roadmap-item field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRoadmapItem: Record<string, unknown>;\n }>(ops.UPDATE_ROADMAP_ITEM, { id, input });\n return jsonResult(data.planmagnetUpdateRoadmapItem);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_update_item failed', { error: String(error) });\n return errorResult(\n `Failed to update roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_delete_item')),\n {\n title: 'Delete Roadmap Item',\n description: 'Delete a roadmap item by ID.',\n inputSchema: { id: z.string().describe('Roadmap item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRoadmapItem: boolean }>(\n ops.DELETE_ROADMAP_ITEM,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRoadmapItem });\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_delete_item failed', { error: String(error) });\n return errorResult(\n `Failed to delete roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet time-tracking tools — time entries + timesheets.\n *\n * Surface (12): time_entries_{get,list,create,update,delete,log},\n * timesheets_{get,list,create,submit,approve,reject}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n BillingTypeEnum,\n TimeEntryStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerTimeTrackingTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Time entries ───────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_get')),\n {\n title: 'Get Time Entry',\n description: 'Fetch a single time entry by ID.',\n inputSchema: { id: z.string().describe('Time entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetTimeEntry: Record<string, unknown> | null;\n }>(ops.GET_TIME_ENTRY, { id });\n if (!data.planmagnetTimeEntry) return errorResult(`Time entry ${id} not found`);\n return jsonResult(data.planmagnetTimeEntry);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_get failed', { error: String(error) });\n return errorResult(\n `Failed to get time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_list')),\n {\n title: 'List Time Entries',\n description:\n 'List time entries in a workspace with optional project/work-item/user/timesheet/billing/status/date filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n workItemId: z.string().optional().describe('Filter by work item ID'),\n userId: z.string().optional().describe('Filter by user actor ID'),\n timesheetId: z.string().optional().describe('Filter by timesheet ID'),\n billingType: BillingTypeEnum.optional().describe('Filter by billing type'),\n status: TimeEntryStatusEnum.optional().describe('Filter by status'),\n dateFrom: z.string().optional().describe('On/after date (ISO-8601)'),\n dateTo: z.string().optional().describe('On/before date (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'projectId',\n 'workItemId',\n 'userId',\n 'timesheetId',\n 'billingType',\n 'status',\n 'dateFrom',\n 'dateTo',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetTimeEntries: Record<string, unknown>;\n }>(ops.LIST_TIME_ENTRIES, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetTimeEntries);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_list failed', { error: String(error) });\n return errorResult(\n `Failed to list time entries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_create')),\n {\n title: 'Create Time Entry',\n description: 'Create a detailed time entry against a work item.',\n inputSchema: {\n projectId: z.string().min(1).describe('Project ID'),\n workItemId: z.string().min(1).describe('Work item this time is logged against'),\n date: z.string().describe('Date the work was performed (ISO-8601 DateTime)'),\n durationMinutes: z.number().int().describe('Duration in minutes'),\n description: z.string().optional().describe('Description of work performed'),\n billingType: BillingTypeEnum.optional().describe('Billing type'),\n billingRate: z.number().optional().describe('Billing rate per hour'),\n startTime: z.string().optional().describe('Start time (ISO-8601, clock-in/out)'),\n endTime: z.string().optional().describe('End time (ISO-8601, clock-in/out)'),\n timesheetId: z.string().optional().describe('Timesheet to attach this entry to'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n workItemId: args.workItemId,\n date: args.date,\n durationMinutes: args.durationMinutes,\n };\n for (const k of [\n 'description',\n 'billingType',\n 'billingRate',\n 'startTime',\n 'endTime',\n 'timesheetId',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateTimeEntry: Record<string, unknown>;\n }>(ops.CREATE_TIME_ENTRY, { input });\n return jsonResult(data.planmagnetCreateTimeEntry);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_create failed', { error: String(error) });\n return errorResult(\n `Failed to create time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_update')),\n {\n title: 'Update Time Entry',\n description: 'Update a time entry. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Time entry ID'),\n date: z.string().optional().describe('Updated date'),\n durationMinutes: z.number().int().optional().describe('Updated duration in minutes'),\n description: z.string().optional().describe('Updated description'),\n billingType: BillingTypeEnum.optional().describe('Updated billing type'),\n billingRate: z.number().optional().describe('Updated billing rate'),\n startTime: z.string().optional().describe('Updated start time'),\n endTime: z.string().optional().describe('Updated end time'),\n status: TimeEntryStatusEnum.optional().describe('Updated status'),\n workItemId: z.string().optional().describe('Updated work item'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable time-entry field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateTimeEntry: Record<string, unknown>;\n }>(ops.UPDATE_TIME_ENTRY, { id, input });\n return jsonResult(data.planmagnetUpdateTimeEntry);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_update failed', { error: String(error) });\n return errorResult(\n `Failed to update time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_delete')),\n {\n title: 'Delete Time Entry',\n description: 'Delete a time entry by ID.',\n inputSchema: { id: z.string().describe('Time entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteTimeEntry: boolean }>(\n ops.DELETE_TIME_ENTRY,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteTimeEntry });\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_log')),\n {\n title: 'Quick Log Time',\n description: 'Quickly log time against a work item (lighter-weight than a full time entry).',\n inputSchema: {\n projectId: z.string().min(1).describe('Project ID'),\n workItemId: z.string().min(1).describe('Work item ID'),\n date: z.string().describe('Date (ISO-8601 DateTime)'),\n durationMinutes: z.number().int().describe('Duration in minutes'),\n description: z.string().optional().describe('Description'),\n billingType: BillingTypeEnum.optional().describe('Billing type'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n workItemId: args.workItemId,\n date: args.date,\n durationMinutes: args.durationMinutes,\n };\n for (const k of ['description', 'billingType', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetLogTime: Record<string, unknown>;\n }>(ops.LOG_TIME, { input });\n return jsonResult(data.planmagnetLogTime);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_log failed', { error: String(error) });\n return errorResult(\n `Failed to log time: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Timesheets ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_get')),\n {\n title: 'Get Timesheet',\n description: 'Fetch a single timesheet by ID, including its entries.',\n inputSchema: { id: z.string().describe('Timesheet ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetTimesheet: Record<string, unknown> | null;\n }>(ops.GET_TIMESHEET, { id });\n if (!data.planmagnetTimesheet) return errorResult(`Timesheet ${id} not found`);\n return jsonResult(data.planmagnetTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_list')),\n {\n title: 'List Timesheets',\n description: 'List timesheets in a workspace with optional user/status/period filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n userId: z.string().optional().describe('Filter by user actor ID'),\n status: TimeEntryStatusEnum.optional().describe('Filter by status'),\n periodStart: z.string().optional().describe('Filter by period start (ISO-8601)'),\n periodEnd: z.string().optional().describe('Filter by period end (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, userId, status, periodStart, periodEnd, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (userId !== undefined) filter.userId = userId;\n if (status !== undefined) filter.status = status;\n if (periodStart !== undefined) filter.periodStart = periodStart;\n if (periodEnd !== undefined) filter.periodEnd = periodEnd;\n const data = await ctx.gql.workspace.request<{\n planmagnetTimesheets: Record<string, unknown>;\n }>(ops.LIST_TIMESHEETS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetTimesheets);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list timesheets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_create')),\n {\n title: 'Create Timesheet',\n description: 'Create a timesheet for a time period (for the calling user).',\n inputSchema: {\n periodStart: z.string().describe('Period start date (ISO-8601 DateTime)'),\n periodEnd: z.string().describe('Period end date (ISO-8601 DateTime)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ periodStart, periodEnd, metadata }) => {\n try {\n const input: Record<string, unknown> = { periodStart, periodEnd };\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateTimesheet: Record<string, unknown>;\n }>(ops.CREATE_TIMESHEET, { input });\n return jsonResult(data.planmagnetCreateTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_submit')),\n {\n title: 'Submit Timesheet',\n description: 'Submit a timesheet for approval.',\n inputSchema: { id: z.string().describe('Timesheet ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetSubmitTimesheet: Record<string, unknown>;\n }>(ops.SUBMIT_TIMESHEET, { id });\n return jsonResult(data.planmagnetSubmitTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_submit failed', { error: String(error) });\n return errorResult(\n `Failed to submit timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_approve')),\n {\n title: 'Approve Timesheet',\n description: 'Approve a submitted timesheet.',\n inputSchema: { id: z.string().describe('Timesheet ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetApproveTimesheet: Record<string, unknown>;\n }>(ops.APPROVE_TIMESHEET, { id });\n return jsonResult(data.planmagnetApproveTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_approve failed', { error: String(error) });\n return errorResult(\n `Failed to approve timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_reject')),\n {\n title: 'Reject Timesheet',\n description: 'Reject a submitted timesheet, with an optional reason.',\n inputSchema: {\n id: z.string().describe('Timesheet ID'),\n reason: z.string().optional().describe('Rejection reason'),\n },\n },\n async ({ id, reason }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRejectTimesheet: Record<string, unknown>;\n }>(ops.REJECT_TIMESHEET, { id, reason });\n return jsonResult(data.planmagnetRejectTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_reject failed', { error: String(error) });\n return errorResult(\n `Failed to reject timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet automation tools — rules + executions.\n *\n * Surface (8): automation_{get,list,create,update,delete,toggle,execute},\n * automation_list_executions.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n AutomationStatusEnum,\n AutomationTriggerTypeEnum,\n AutomationExecutionStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerAutomationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_get')),\n {\n title: 'Get Automation Rule',\n description: 'Fetch a single automation rule by ID.',\n inputSchema: { id: z.string().describe('Automation rule ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetAutomationRule: Record<string, unknown> | null;\n }>(ops.GET_AUTOMATION_RULE, { id });\n if (!data.planmagnetAutomationRule) return errorResult(`Automation rule ${id} not found`);\n return jsonResult(data.planmagnetAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_get failed', { error: String(error) });\n return errorResult(\n `Failed to get automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_list')),\n {\n title: 'List Automation Rules',\n description:\n 'List automation rules in a workspace with optional project/trigger-type/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n triggerType: AutomationTriggerTypeEnum.optional().describe('Filter by trigger type'),\n status: AutomationStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, triggerType, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (triggerType !== undefined) filter.triggerType = triggerType;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetAutomationRules: Record<string, unknown>;\n }>(ops.LIST_AUTOMATION_RULES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetAutomationRules);\n } catch (error) {\n ctx.logger.error('planmagnet automation_list failed', { error: String(error) });\n return errorResult(\n `Failed to list automation rules: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_create')),\n {\n title: 'Create Automation Rule',\n description:\n 'Create an automation rule. `triggerConfig` and `actions` are JSON; `conditions` is an optional JSON array.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Rule name'),\n triggerType: AutomationTriggerTypeEnum.describe('Trigger type'),\n triggerConfig: JsonValue.describe('Trigger configuration JSON'),\n actions: JsonValue.describe('Actions to execute (JSON array)'),\n conditions: JsonValue.optional().describe('Conditions that must be met (JSON array)'),\n description: z.string().optional().describe('Rule description'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n triggerType: args.triggerType,\n triggerConfig: args.triggerConfig,\n actions: args.actions,\n };\n for (const k of ['conditions', 'description', 'sortOrder', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateAutomationRule: Record<string, unknown>;\n }>(ops.CREATE_AUTOMATION_RULE, { input });\n return jsonResult(data.planmagnetCreateAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_create failed', { error: String(error) });\n return errorResult(\n `Failed to create automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_update')),\n {\n title: 'Update Automation Rule',\n description: 'Update an automation rule. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Automation rule ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n triggerType: AutomationTriggerTypeEnum.optional().describe('Updated trigger type'),\n triggerConfig: JsonValue.optional().describe('Updated trigger configuration JSON'),\n actions: JsonValue.optional().describe('Updated actions JSON array'),\n conditions: JsonValue.optional().describe('Updated conditions JSON array'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable automation field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateAutomationRule: Record<string, unknown>;\n }>(ops.UPDATE_AUTOMATION_RULE, { id, input });\n return jsonResult(data.planmagnetUpdateAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_update failed', { error: String(error) });\n return errorResult(\n `Failed to update automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_delete')),\n {\n title: 'Delete Automation Rule',\n description: 'Delete an automation rule by ID.',\n inputSchema: { id: z.string().describe('Automation rule ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteAutomationRule: boolean }>(\n ops.DELETE_AUTOMATION_RULE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteAutomationRule });\n } catch (error) {\n ctx.logger.error('planmagnet automation_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_toggle')),\n {\n title: 'Toggle Automation Rule',\n description: 'Activate or pause an automation rule by setting its status.',\n inputSchema: {\n id: z.string().describe('Automation rule ID'),\n status: AutomationStatusEnum.describe('New status (ACTIVE/PAUSED/DISABLED/ERROR)'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetToggleAutomationRule: Record<string, unknown>;\n }>(ops.TOGGLE_AUTOMATION_RULE, { id, status });\n return jsonResult(data.planmagnetToggleAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_toggle failed', { error: String(error) });\n return errorResult(\n `Failed to toggle automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_execute')),\n {\n title: 'Execute Automation Rule',\n description: 'Manually execute an automation rule with optional trigger data.',\n inputSchema: {\n id: z.string().describe('Automation rule ID'),\n triggerData: JsonObject.optional().describe('Trigger data JSON to drive the execution'),\n },\n },\n async ({ id, triggerData }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetExecuteAutomationRule: Record<string, unknown>;\n }>(ops.EXECUTE_AUTOMATION_RULE, { id, triggerData });\n return jsonResult(data.planmagnetExecuteAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_execute failed', { error: String(error) });\n return errorResult(\n `Failed to execute automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_list_executions')),\n {\n title: 'List Automation Executions',\n description:\n 'List automation rule executions in a workspace with optional rule/status/date filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n ruleId: z.string().optional().describe('Filter by automation rule ID'),\n status: AutomationExecutionStatusEnum.optional().describe('Filter by execution status'),\n executedAfter: z.string().optional().describe('Executed on/after (ISO-8601)'),\n executedBefore: z.string().optional().describe('Executed on/before (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, ruleId, status, executedAfter, executedBefore, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (ruleId !== undefined) filter.ruleId = ruleId;\n if (status !== undefined) filter.status = status;\n if (executedAfter !== undefined) filter.executedAfter = executedAfter;\n if (executedBefore !== undefined) filter.executedBefore = executedBefore;\n const data = await ctx.gql.workspace.request<{\n planmagnetAutomationExecutions: Record<string, unknown>;\n }>(ops.LIST_AUTOMATION_EXECUTIONS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetAutomationExecutions);\n } catch (error) {\n ctx.logger.error('planmagnet automation_list_executions failed', { error: String(error) });\n return errorResult(\n `Failed to list automation executions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet feature-request + competitor tools — product discovery surface.\n *\n * Surface (14): features_{get,list,create,update,delete,vote,\n * remove_vote,link_competitor,unlink_competitor},\n * competitors_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n FeatureRequestStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerFeatureTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Feature requests ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_get')),\n {\n title: 'Get Feature Request',\n description: 'Fetch a single feature request by ID.',\n inputSchema: { id: z.string().describe('Feature request ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetFeatureRequest: Record<string, unknown> | null;\n }>(ops.GET_FEATURE_REQUEST, { id });\n if (!data.planmagnetFeatureRequest) return errorResult(`Feature request ${id} not found`);\n return jsonResult(data.planmagnetFeatureRequest);\n } catch (error) {\n ctx.logger.error('planmagnet features_get failed', { error: String(error) });\n return errorResult(\n `Failed to get feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_list')),\n {\n title: 'List Feature Requests',\n description:\n 'List feature requests in a workspace with optional project/status/submitter/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n status: FeatureRequestStatusEnum.optional().describe('Filter by status'),\n submittedBy: z.string().optional().describe('Filter by submitter actor ID'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, status, submittedBy, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (status !== undefined) filter.status = status;\n if (submittedBy !== undefined) filter.submittedBy = submittedBy;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetFeatureRequests: Record<string, unknown>;\n }>(ops.LIST_FEATURE_REQUESTS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetFeatureRequests);\n } catch (error) {\n ctx.logger.error('planmagnet features_list failed', { error: String(error) });\n return errorResult(\n `Failed to list feature requests: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_create')),\n {\n title: 'Create Feature Request',\n description: 'Create a new feature request.',\n inputSchema: {\n title: z.string().min(1).describe('Feature title'),\n description: z.string().optional().describe('Detailed description'),\n projectId: z.string().optional().describe('Parent project ID'),\n status: FeatureRequestStatusEnum.optional().describe('Initial status'),\n businessValue: z.number().int().optional().describe('Business value rating (1-10)'),\n effortEstimate: z\n .string()\n .optional()\n .describe('Effort estimate (T-shirt: XS, S, M, L, XL)'),\n workItemId: z.string().optional().describe('Linked work item ID'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { title: args.title };\n for (const k of [\n 'description',\n 'projectId',\n 'status',\n 'businessValue',\n 'effortEstimate',\n 'workItemId',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateFeatureRequest: Record<string, unknown>;\n }>(ops.CREATE_FEATURE_REQUEST, { input });\n return jsonResult(data.planmagnetCreateFeatureRequest);\n } catch (error) {\n ctx.logger.error('planmagnet features_create failed', { error: String(error) });\n return errorResult(\n `Failed to create feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_update')),\n {\n title: 'Update Feature Request',\n description: 'Update a feature request. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Feature request ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n projectId: z.string().optional().describe('Updated project link'),\n status: FeatureRequestStatusEnum.optional().describe('Updated status'),\n businessValue: z.number().int().optional().describe('Updated business value'),\n effortEstimate: z.string().optional().describe('Updated effort estimate'),\n workItemId: z.string().optional().describe('Updated work-item link'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable feature field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateFeatureRequest: Record<string, unknown>;\n }>(ops.UPDATE_FEATURE_REQUEST, { id, input });\n return jsonResult(data.planmagnetUpdateFeatureRequest);\n } catch (error) {\n ctx.logger.error('planmagnet features_update failed', { error: String(error) });\n return errorResult(\n `Failed to update feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_delete')),\n {\n title: 'Delete Feature Request',\n description: 'Delete a feature request by ID.',\n inputSchema: { id: z.string().describe('Feature request ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteFeatureRequest: boolean }>(\n ops.DELETE_FEATURE_REQUEST,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteFeatureRequest });\n } catch (error) {\n ctx.logger.error('planmagnet features_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_vote')),\n {\n title: 'Vote on Feature',\n description: 'Cast a vote on a feature request, with optional weight and comment.',\n inputSchema: {\n featureRequestId: z.string().describe('Feature request ID'),\n weight: z.number().int().optional().describe('Vote weight (default 1)'),\n comment: z.string().optional().describe('Optional vote comment'),\n },\n },\n async ({ featureRequestId, weight, comment }) => {\n try {\n const input: Record<string, unknown> = {};\n if (weight !== undefined) input.weight = weight;\n if (comment !== undefined) input.comment = comment;\n const data = await ctx.gql.workspace.request<{\n planmagnetVoteOnFeature: Record<string, unknown>;\n }>(ops.VOTE_ON_FEATURE, {\n featureRequestId,\n input: Object.keys(input).length > 0 ? input : undefined,\n });\n return jsonResult(data.planmagnetVoteOnFeature);\n } catch (error) {\n ctx.logger.error('planmagnet features_vote failed', { error: String(error) });\n return errorResult(\n `Failed to vote on feature: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_remove_vote')),\n {\n title: 'Remove Feature Vote',\n description: 'Remove the calling actor’s vote from a feature request.',\n inputSchema: { featureRequestId: z.string().describe('Feature request ID') },\n },\n async ({ featureRequestId }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetRemoveFeatureVote: boolean }>(\n ops.REMOVE_FEATURE_VOTE,\n { featureRequestId },\n );\n return jsonResult({ featureRequestId, removed: data.planmagnetRemoveFeatureVote });\n } catch (error) {\n ctx.logger.error('planmagnet features_remove_vote failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to remove feature vote: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_link_competitor')),\n {\n title: 'Link Competitor to Feature',\n description: 'Link a competitor to a feature request.',\n inputSchema: {\n featureRequestId: z.string().describe('Feature request ID'),\n competitorId: z.string().describe('Competitor ID'),\n },\n },\n async ({ featureRequestId, competitorId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetLinkCompetitorToFeature: Record<string, unknown>;\n }>(ops.LINK_COMPETITOR_TO_FEATURE, { input: { featureRequestId, competitorId } });\n return jsonResult(data.planmagnetLinkCompetitorToFeature);\n } catch (error) {\n ctx.logger.error('planmagnet features_link_competitor failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to link competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_unlink_competitor')),\n {\n title: 'Unlink Competitor from Feature',\n description: 'Unlink a competitor from a feature request.',\n inputSchema: {\n featureRequestId: z.string().describe('Feature request ID'),\n competitorId: z.string().describe('Competitor ID'),\n },\n },\n async ({ featureRequestId, competitorId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetUnlinkCompetitorFromFeature: Record<string, unknown>;\n }>(ops.UNLINK_COMPETITOR_FROM_FEATURE, { input: { featureRequestId, competitorId } });\n return jsonResult(data.planmagnetUnlinkCompetitorFromFeature);\n } catch (error) {\n ctx.logger.error('planmagnet features_unlink_competitor failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to unlink competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Competitors ────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_get')),\n {\n title: 'Get Competitor',\n description: 'Fetch a single competitor by ID.',\n inputSchema: { id: z.string().describe('Competitor ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCompetitor: Record<string, unknown> | null;\n }>(ops.GET_COMPETITOR, { id });\n if (!data.planmagnetCompetitor) return errorResult(`Competitor ${id} not found`);\n return jsonResult(data.planmagnetCompetitor);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_get failed', { error: String(error) });\n return errorResult(\n `Failed to get competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_list')),\n {\n title: 'List Competitors',\n description: 'List competitors in a workspace with optional text search.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetCompetitors: Record<string, unknown>;\n }>(ops.LIST_COMPETITORS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetCompetitors);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list competitors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_create')),\n {\n title: 'Create Competitor',\n description: 'Create a competitor entry.',\n inputSchema: {\n name: z.string().min(1).describe('Competitor name'),\n description: z.string().optional().describe('Description / notes'),\n website: z.string().optional().describe('Competitor website URL'),\n tags: z.array(z.string()).optional().describe('Tags for categorization'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ name, description, website, tags, metadata }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (description !== undefined) input.description = description;\n if (website !== undefined) input.website = website;\n if (tags !== undefined) input.tags = tags;\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateCompetitor: Record<string, unknown>;\n }>(ops.CREATE_COMPETITOR, { input });\n return jsonResult(data.planmagnetCreateCompetitor);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_update')),\n {\n title: 'Update Competitor',\n description: 'Update a competitor. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Competitor ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n website: z.string().optional().describe('Updated website'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable competitor field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateCompetitor: Record<string, unknown>;\n }>(ops.UPDATE_COMPETITOR, { id, input });\n return jsonResult(data.planmagnetUpdateCompetitor);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_update failed', { error: String(error) });\n return errorResult(\n `Failed to update competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_delete')),\n {\n title: 'Delete Competitor',\n description: 'Delete a competitor by ID.',\n inputSchema: { id: z.string().describe('Competitor ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteCompetitor: boolean }>(\n ops.DELETE_COMPETITOR,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteCompetitor });\n } catch (error) {\n ctx.logger.error('planmagnet competitors_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet custom-field tools — definitions + per-work-item values.\n *\n * Surface (8): custom_fields_{get,list,create,update,delete}_definition(s),\n * custom_fields_{list_values,set_value,remove_value}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n CustomFieldTypeEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerCustomFieldTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Definitions ────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_get_definition')),\n {\n title: 'Get Custom Field Definition',\n description: 'Fetch a single custom field definition by ID.',\n inputSchema: { id: z.string().describe('Custom field definition ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCustomFieldDefinition: Record<string, unknown> | null;\n }>(ops.GET_CUSTOM_FIELD_DEFINITION, { id });\n if (!data.planmagnetCustomFieldDefinition)\n return errorResult(`Custom field definition ${id} not found`);\n return jsonResult(data.planmagnetCustomFieldDefinition);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_get_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to get custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_list_definitions')),\n {\n title: 'List Custom Field Definitions',\n description:\n 'List custom field definitions in a workspace with optional project/field-type/required/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n fieldType: CustomFieldTypeEnum.optional().describe('Filter by field type'),\n isRequired: z.boolean().optional().describe('Filter by required flag'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, fieldType, isRequired, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (fieldType !== undefined) filter.fieldType = fieldType;\n if (isRequired !== undefined) filter.isRequired = isRequired;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetCustomFieldDefinitions: Record<string, unknown>;\n }>(ops.LIST_CUSTOM_FIELD_DEFINITIONS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetCustomFieldDefinitions);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_list_definitions failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to list custom field definitions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_create_definition')),\n {\n title: 'Create Custom Field Definition',\n description:\n 'Create a custom field definition on a project. For SELECT/MULTI_SELECT types provide `options` JSON.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Field name'),\n fieldType: CustomFieldTypeEnum.describe('Field data type'),\n description: z.string().optional().describe('Field description'),\n isRequired: z.boolean().optional().describe('Whether this field is required'),\n options: JsonValue.optional().describe('Options JSON for SELECT/MULTI_SELECT'),\n defaultValue: JsonValue.optional().describe('Default value (JSON-encoded)'),\n validationRules: JsonValue.optional().describe('Validation rules (JSON-encoded)'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n fieldType: args.fieldType,\n };\n for (const k of [\n 'description',\n 'isRequired',\n 'options',\n 'defaultValue',\n 'validationRules',\n 'sortOrder',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateCustomFieldDefinition: Record<string, unknown>;\n }>(ops.CREATE_CUSTOM_FIELD_DEFINITION, { input });\n return jsonResult(data.planmagnetCreateCustomFieldDefinition);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_create_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to create custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_update_definition')),\n {\n title: 'Update Custom Field Definition',\n description: 'Update a custom field definition. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Custom field definition ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n fieldType: CustomFieldTypeEnum.optional().describe('Updated field type'),\n isRequired: z.boolean().optional().describe('Updated required flag'),\n options: JsonValue.optional().describe('Updated options JSON'),\n defaultValue: JsonValue.optional().describe('Updated default value JSON'),\n validationRules: JsonValue.optional().describe('Updated validation rules JSON'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable definition field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateCustomFieldDefinition: Record<string, unknown>;\n }>(ops.UPDATE_CUSTOM_FIELD_DEFINITION, { id, input });\n return jsonResult(data.planmagnetUpdateCustomFieldDefinition);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_update_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to update custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_delete_definition')),\n {\n title: 'Delete Custom Field Definition',\n description: 'Delete a custom field definition by ID.',\n inputSchema: { id: z.string().describe('Custom field definition ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetDeleteCustomFieldDefinition: boolean;\n }>(ops.DELETE_CUSTOM_FIELD_DEFINITION, { id });\n return jsonResult({ id, deleted: data.planmagnetDeleteCustomFieldDefinition });\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_delete_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to delete custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Values ─────────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_list_values')),\n {\n title: 'List Custom Field Values',\n description:\n 'List custom field values in a workspace with optional definition/work-item filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n definitionId: z.string().optional().describe('Filter by definition ID'),\n workItemId: z.string().optional().describe('Filter by work item ID'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, definitionId, workItemId, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (definitionId !== undefined) filter.definitionId = definitionId;\n if (workItemId !== undefined) filter.workItemId = workItemId;\n const data = await ctx.gql.workspace.request<{\n planmagnetCustomFieldValues: Record<string, unknown>;\n }>(ops.LIST_CUSTOM_FIELD_VALUES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetCustomFieldValues);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_list_values failed', { error: String(error) });\n return errorResult(\n `Failed to list custom field values: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_set_value')),\n {\n title: 'Set Custom Field Value',\n description: 'Set a custom field value on a work item.',\n inputSchema: {\n definitionId: z.string().describe('Custom field definition ID'),\n workItemId: z.string().describe('Work item ID'),\n value: JsonValue.describe('The value to store (JSON-encoded)'),\n },\n },\n async ({ definitionId, workItemId, value }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetSetCustomFieldValue: Record<string, unknown>;\n }>(ops.SET_CUSTOM_FIELD_VALUE, { input: { definitionId, workItemId, value } });\n return jsonResult(data.planmagnetSetCustomFieldValue);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_set_value failed', { error: String(error) });\n return errorResult(\n `Failed to set custom field value: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_remove_value')),\n {\n title: 'Remove Custom Field Value',\n description: 'Remove a custom field value from a work item.',\n inputSchema: {\n definitionId: z.string().describe('Custom field definition ID'),\n workItemId: z.string().describe('Work item ID'),\n },\n },\n async ({ definitionId, workItemId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRemoveCustomFieldValue: boolean;\n }>(ops.REMOVE_CUSTOM_FIELD_VALUE, { definitionId, workItemId });\n return jsonResult({\n definitionId,\n workItemId,\n removed: data.planmagnetRemoveCustomFieldValue,\n });\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_remove_value failed', { error: String(error) });\n return errorResult(\n `Failed to remove custom field value: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet project-template tools — reusable project blueprints.\n *\n * Surface (7): templates_{get,list,create,update,delete,create_from_project} + projects_apply_template.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, JsonValue, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerTemplateTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_get')),\n {\n title: 'Get Project Template',\n description: 'Fetch a single project template by ID.',\n inputSchema: { id: z.string().describe('Project template ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetProjectTemplate: Record<string, unknown> | null;\n }>(ops.GET_TEMPLATE, { id });\n if (!data.planmagnetProjectTemplate) return errorResult(`Project template ${id} not found`);\n return jsonResult(data.planmagnetProjectTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet templates_get failed', { error: String(error) });\n return errorResult(\n `Failed to get project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_list')),\n {\n title: 'List Project Templates',\n description:\n 'List project templates in a workspace with optional category/published/built-in/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n category: z.string().optional().describe('Filter by category'),\n isPublished: z.boolean().optional().describe('Filter by published flag'),\n isBuiltIn: z.boolean().optional().describe('Filter by built-in flag'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, category, isPublished, isBuiltIn, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (category !== undefined) filter.category = category;\n if (isPublished !== undefined) filter.isPublished = isPublished;\n if (isBuiltIn !== undefined) filter.isBuiltIn = isBuiltIn;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetProjectTemplates: Record<string, unknown>;\n }>(ops.LIST_TEMPLATES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetProjectTemplates);\n } catch (error) {\n ctx.logger.error('planmagnet templates_list failed', { error: String(error) });\n return errorResult(\n `Failed to list project templates: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_create')),\n {\n title: 'Create Project Template',\n description:\n 'Create a reusable project template. `configuration` is the core JSON blueprint.',\n inputSchema: {\n name: z.string().min(1).describe('Template name'),\n configuration: JsonValue.describe(\n 'Template configuration JSON (project settings, work-item types, …)',\n ),\n description: z.string().optional().describe('Description'),\n category: z.string().optional().describe('Template category'),\n isPublished: z.boolean().optional().describe('Whether the template is published'),\n boardConfig: JsonValue.optional().describe('Board layout configuration JSON'),\n sprintConfig: JsonValue.optional().describe('Default sprint configuration JSON'),\n customFieldsConfig: JsonValue.optional().describe(\n 'Custom field definitions to create (JSON)',\n ),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n name: args.name,\n configuration: args.configuration,\n };\n for (const k of [\n 'description',\n 'category',\n 'isPublished',\n 'boardConfig',\n 'sprintConfig',\n 'customFieldsConfig',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateProjectTemplate: Record<string, unknown>;\n }>(ops.CREATE_TEMPLATE, { input });\n return jsonResult(data.planmagnetCreateProjectTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet templates_create failed', { error: String(error) });\n return errorResult(\n `Failed to create project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_update')),\n {\n title: 'Update Project Template',\n description: 'Update a project template. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Project template ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n category: z.string().optional().describe('Updated category'),\n isPublished: z.boolean().optional().describe('Updated published flag'),\n configuration: JsonValue.optional().describe('Updated configuration JSON'),\n boardConfig: JsonValue.optional().describe('Updated board configuration JSON'),\n sprintConfig: JsonValue.optional().describe('Updated sprint configuration JSON'),\n customFieldsConfig: JsonValue.optional().describe(\n 'Updated custom-fields configuration JSON',\n ),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable template field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateProjectTemplate: Record<string, unknown>;\n }>(ops.UPDATE_TEMPLATE, { id, input });\n return jsonResult(data.planmagnetUpdateProjectTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet templates_update failed', { error: String(error) });\n return errorResult(\n `Failed to update project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_delete')),\n {\n title: 'Delete Project Template',\n description: 'Delete a project template by ID.',\n inputSchema: { id: z.string().describe('Project template ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteProjectTemplate: boolean }>(\n ops.DELETE_TEMPLATE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteProjectTemplate });\n } catch (error) {\n ctx.logger.error('planmagnet templates_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_apply_template')),\n {\n title: 'Apply Project Template',\n description: 'Apply a template to create a new project.',\n inputSchema: {\n templateId: z.string().describe('Source template ID'),\n projectName: z.string().min(1).describe('Name for the new project'),\n ownerId: z.string().min(1).describe('Owner actor ID for the new project'),\n projectDescription: z.string().optional().describe('Description for the new project'),\n },\n },\n async ({ templateId, projectName, ownerId, projectDescription }) => {\n try {\n const input: Record<string, unknown> = { templateId, projectName, ownerId };\n if (projectDescription !== undefined) input.projectDescription = projectDescription;\n const data = await ctx.gql.workspace.request<{\n planmagnetApplyTemplate: Record<string, unknown>;\n }>(ops.APPLY_TEMPLATE, { input });\n return jsonResult(data.planmagnetApplyTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet projects_apply_template failed', { error: String(error) });\n return errorResult(\n `Failed to apply project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_create_from_project')),\n {\n title: 'Create Template from Project',\n description: 'Create a reusable template from an existing project.',\n inputSchema: {\n projectId: z.string().describe('Source project ID'),\n name: z.string().min(1).describe('Template name'),\n description: z.string().optional().describe('Template description'),\n },\n },\n async ({ projectId, name, description }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateTemplateFromProject: Record<string, unknown>;\n }>(ops.CREATE_TEMPLATE_FROM_PROJECT, { projectId, name, description });\n return jsonResult(data.planmagnetCreateTemplateFromProject);\n } catch (error) {\n ctx.logger.error('planmagnet templates_create_from_project failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to create template from project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet external-sync tools — connect projects to external tools\n * (Jira, GitHub, Linear, …) plus import/export.\n *\n * Surface (11): sync_{get,list,create,update,delete,pause,resume,start},\n * sync_list_mappings, sync_export, sync_import.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n SyncProviderEnum,\n SyncDirectionEnum,\n SyncStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerSyncTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_get')),\n {\n title: 'Get External Sync',\n description: 'Fetch a single external sync configuration by ID.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetExternalSync: Record<string, unknown> | null;\n }>(ops.GET_EXTERNAL_SYNC, { id });\n if (!data.planmagnetExternalSync) return errorResult(`External sync ${id} not found`);\n return jsonResult(data.planmagnetExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_get failed', { error: String(error) });\n return errorResult(\n `Failed to get external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_list')),\n {\n title: 'List External Syncs',\n description:\n 'List external syncs in a workspace with optional project/provider/direction/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n provider: SyncProviderEnum.optional().describe('Filter by provider'),\n direction: SyncDirectionEnum.optional().describe('Filter by sync direction'),\n status: SyncStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of ['projectId', 'provider', 'direction', 'status', 'search'] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetExternalSyncs: Record<string, unknown>;\n }>(ops.LIST_EXTERNAL_SYNCS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetExternalSyncs);\n } catch (error) {\n ctx.logger.error('planmagnet sync_list failed', { error: String(error) });\n return errorResult(\n `Failed to list external syncs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_create')),\n {\n title: 'Create External Sync',\n description:\n 'Create an external sync configuration connecting a project to an external tool.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n provider: SyncProviderEnum.describe('External provider'),\n direction: SyncDirectionEnum.describe('Sync direction'),\n externalProjectId: z.string().min(1).describe('External project/board identifier'),\n connectionConfig: JsonValue.describe(\n 'Connection configuration JSON (credentials ref, endpoint, …)',\n ),\n externalProjectUrl: z.string().optional().describe('External project URL'),\n fieldMapping: JsonValue.optional().describe('Field mapping configuration JSON'),\n syncFilters: JsonValue.optional().describe('Sync filter rules JSON (which items to sync)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n provider: args.provider,\n direction: args.direction,\n externalProjectId: args.externalProjectId,\n connectionConfig: args.connectionConfig,\n };\n for (const k of [\n 'externalProjectUrl',\n 'fieldMapping',\n 'syncFilters',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateExternalSync: Record<string, unknown>;\n }>(ops.CREATE_EXTERNAL_SYNC, { input });\n return jsonResult(data.planmagnetCreateExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_create failed', { error: String(error) });\n return errorResult(\n `Failed to create external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_update')),\n {\n title: 'Update External Sync',\n description: 'Update an external sync. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('External sync ID'),\n direction: SyncDirectionEnum.optional().describe('Updated direction'),\n externalProjectId: z.string().optional().describe('Updated external project ID'),\n externalProjectUrl: z.string().optional().describe('Updated external project URL'),\n connectionConfig: JsonValue.optional().describe('Updated connection configuration JSON'),\n fieldMapping: JsonValue.optional().describe('Updated field mapping JSON'),\n syncFilters: JsonValue.optional().describe('Updated sync filters JSON'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable sync field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateExternalSync: Record<string, unknown>;\n }>(ops.UPDATE_EXTERNAL_SYNC, { id, input });\n return jsonResult(data.planmagnetUpdateExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_update failed', { error: String(error) });\n return errorResult(\n `Failed to update external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_delete')),\n {\n title: 'Delete External Sync',\n description: 'Delete an external sync configuration by ID.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteExternalSync: boolean }>(\n ops.DELETE_EXTERNAL_SYNC,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteExternalSync });\n } catch (error) {\n ctx.logger.error('planmagnet sync_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_pause')),\n {\n title: 'Pause External Sync',\n description: 'Pause a sync.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetPauseExternalSync: Record<string, unknown>;\n }>(ops.PAUSE_EXTERNAL_SYNC, { id });\n return jsonResult(data.planmagnetPauseExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_pause failed', { error: String(error) });\n return errorResult(\n `Failed to pause external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_resume')),\n {\n title: 'Resume External Sync',\n description: 'Resume a paused sync.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetResumeExternalSync: Record<string, unknown>;\n }>(ops.RESUME_EXTERNAL_SYNC, { id });\n return jsonResult(data.planmagnetResumeExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_resume failed', { error: String(error) });\n return errorResult(\n `Failed to resume external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_start')),\n {\n title: 'Start Sync',\n description: 'Start a sync operation; returns the sync result.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetStartSync: Record<string, unknown>;\n }>(ops.START_SYNC, { id });\n return jsonResult(data.planmagnetStartSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_start failed', { error: String(error) });\n return errorResult(\n `Failed to start sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_list_mappings')),\n {\n title: 'List External Mappings',\n description:\n 'List external mappings (internal-entity ↔ external-counterpart) in a workspace with optional filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n syncId: z.string().optional().describe('Filter by sync configuration ID'),\n internalId: z.string().optional().describe('Filter by internal entity ID'),\n internalType: z\n .string()\n .optional()\n .describe('Filter by internal type (workitem/sprint/project)'),\n externalId: z.string().optional().describe('Filter by external entity ID'),\n externalType: z.string().optional().describe('Filter by external entity type'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'syncId',\n 'internalId',\n 'internalType',\n 'externalId',\n 'externalType',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetExternalMappings: Record<string, unknown>;\n }>(ops.LIST_EXTERNAL_MAPPINGS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetExternalMappings);\n } catch (error) {\n ctx.logger.error('planmagnet sync_list_mappings failed', { error: String(error) });\n return errorResult(\n `Failed to list external mappings: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_export')),\n {\n title: 'Export to External',\n description:\n 'Export items to an external tool via a sync configuration. Provide specific `internalIds` or set `exportAll`.',\n inputSchema: {\n syncId: z.string().describe('Sync configuration ID'),\n internalIds: z\n .array(z.string())\n .optional()\n .describe('Specific internal entity IDs to export'),\n exportAll: z.boolean().optional().describe('Export all eligible items'),\n },\n },\n async ({ syncId, internalIds, exportAll }) => {\n try {\n const input: Record<string, unknown> = { syncId };\n if (internalIds !== undefined) input.internalIds = internalIds;\n if (exportAll !== undefined) input.exportAll = exportAll;\n const data = await ctx.gql.workspace.request<{\n planmagnetExportToExternal: Record<string, unknown>;\n }>(ops.EXPORT_TO_EXTERNAL, { input });\n return jsonResult(data.planmagnetExportToExternal);\n } catch (error) {\n ctx.logger.error('planmagnet sync_export failed', { error: String(error) });\n return errorResult(\n `Failed to export to external: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_import')),\n {\n title: 'Import from External',\n description:\n 'Import items from an external tool via a sync configuration. Provide specific `externalIds` or set `importAll`.',\n inputSchema: {\n syncId: z.string().describe('Sync configuration ID'),\n externalIds: z\n .array(z.string())\n .optional()\n .describe('Specific external entity IDs to import'),\n importAll: z.boolean().optional().describe('Import all eligible items'),\n },\n },\n async ({ syncId, externalIds, importAll }) => {\n try {\n const input: Record<string, unknown> = { syncId };\n if (externalIds !== undefined) input.externalIds = externalIds;\n if (importAll !== undefined) input.importAll = importAll;\n const data = await ctx.gql.workspace.request<{\n planmagnetImportFromExternal: Record<string, unknown>;\n }>(ops.IMPORT_FROM_EXTERNAL, { input });\n return jsonResult(data.planmagnetImportFromExternal);\n } catch (error) {\n ctx.logger.error('planmagnet sync_import failed', { error: String(error) });\n return errorResult(\n `Failed to import from external: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet UI-session tools — persisted per-user view state.\n *\n * Surface (4): ui_sessions_{list,get_or_create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, JsonValue, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerUiSessionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_list')),\n {\n title: 'List UI Sessions',\n description: 'List persisted UI sessions for the current user in a workspace.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n userId: z.string().optional().describe('Filter by user actor ID'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, userId, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (userId !== undefined) filter.userId = userId;\n const data = await ctx.gql.workspace.request<{\n planmagnetUiSessions: Record<string, unknown>;\n }>(ops.LIST_UI_SESSIONS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetUiSessions);\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_list failed', { error: String(error) });\n return errorResult(\n `Failed to list UI sessions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_get_or_create')),\n {\n title: 'Get or Create UI Session',\n description: 'Get (or lazily create) the UI session for the current user in a workspace.',\n inputSchema: { workspaceId: z.string().describe('Workspace ID (required)') },\n },\n async ({ workspaceId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetGetOrCreateUISession: Record<string, unknown>;\n }>(ops.GET_OR_CREATE_UI_SESSION, { workspaceId });\n return jsonResult(data.planmagnetGetOrCreateUISession);\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_get_or_create failed', { error: String(error) });\n return errorResult(\n `Failed to get/create UI session: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_update')),\n {\n title: 'Update UI Session',\n description: 'Update the current user’s UI-session view state.',\n inputSchema: {\n viewState: JsonValue.describe('Persisted view state JSON (filters, columns, sort, …)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ viewState, metadata }) => {\n try {\n const input: Record<string, unknown> = { viewState };\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateUISession: Record<string, unknown>;\n }>(ops.UPDATE_UI_SESSION, { input });\n return jsonResult(data.planmagnetUpdateUISession);\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_update failed', { error: String(error) });\n return errorResult(\n `Failed to update UI session: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_delete')),\n {\n title: 'Delete UI Session',\n description: 'Delete a UI session by ID.',\n inputSchema: { id: z.string().describe('UI session ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteUISession: boolean }>(\n ops.DELETE_UI_SESSION,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteUISession });\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete UI session: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { LIST_PROJECTS } from './operations.js';\n\n/**\n * Read-only PlanMagnet MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n *\n * PlanMagnet collection queries require an explicit `workspaceId`; the\n * data-backed `projects` resource resolves it from the configured / stored\n * workspace context (auth store, then config). When unavailable it returns an\n * informative error payload rather than throwing.\n */\nexport function registerPlanmagnetResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const projectsUri = track(mcpResourceUri(ctx.productName, 'projects'));\n\n const resolveWorkspaceId = (): string | undefined =>\n ctx.auth.read()?.workspaceId ?? ctx.config.read().workspaceId;\n\n // <product>://schema — domain overview\n server.registerResource(\n 'planmagnet-schema',\n schemaUri,\n {\n title: 'PlanMagnet Domain Schema',\n description:\n 'Overview of the PlanMagnet project-management domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# PlanMagnet Domain (Overview)\n\nStrategic project / portfolio / work-management product.\n\n## Planning hierarchy\nPortfolio > Program > Project > (Work Items, Sprints, Boards, Milestones, …)\n\n## Entities\n- Portfolio / Program / PlanmagnetProject — planning hierarchy\n- WorkItem (+WorkItemDependency) — epics/stories/tasks/bugs/sub-tasks\n- Sprint — time-boxed iterations\n- Board (+BoardColumn) — kanban/scrum visual boards\n- Milestone — timeline checkpoints\n- PlanmagnetBudget (+BudgetExpense) — financial tracking\n- Risk — risk register (+ risk matrix)\n- Release — versioned deliverables\n- QualityGate — phase checkpoints\n- Roadmap (+RoadmapItem) — strategic timelines\n- PlanmagnetTimeEntry / PlanmagnetTimesheet — time tracking\n- AutomationRule (+AutomationExecution) — automation\n- FeatureRequest (+FeatureVote) / Competitor — product discovery\n- CustomFieldDefinition (+CustomFieldValue) — extensible fields\n- ProjectTemplate — reusable blueprints\n- ExternalSync (+ExternalMapping) — integrations (Jira, GitHub, Linear, …)\n- PlanmagnetUISession — persisted per-user view state\n\n## Key enums\n- WorkItemType: BUG, EPIC, STORY, SUB_TASK, TASK\n- WorkItemStatus: BACKLOG, TODO, IN_PROGRESS, IN_REVIEW, TESTING, DONE, CANCELLED\n- WorkItemPriority: NONE, LOW, MEDIUM, HIGH, CRITICAL\n- SprintStatus: PLANNING, ACTIVE, REVIEW, COMPLETED, CANCELLED\n- PlanmagnetProjectStatus: PLANNING, ACTIVE, ON_HOLD, COMPLETED, ARCHIVED, CANCELLED\n- RiskSeverity: NEGLIGIBLE, LOW, MEDIUM, HIGH, CRITICAL\n- QualityGateStatus: PENDING, IN_REVIEW, PASSED, FAILED, WAIVED\n\n## Conventions\nAll collection queries require an explicit \\`workspaceId\\` and use cursor\npagination ({ first, after }) returning { items, totalCount, pageInfo }.\nAll run against the WORKSPACE gateway. The subgraph has no public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://projects — projects in the configured workspace\n server.registerResource(\n 'planmagnet-projects',\n projectsUri,\n {\n title: 'PlanMagnet Projects',\n description: 'The first page of projects in the configured/stored workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${projectsUri} requested`);\n const workspaceId = resolveWorkspaceId();\n if (!workspaceId) {\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify({\n error:\n 'No workspaceId configured. Set the workspace context (auth/select-workspace) or use planmagnet_projects_list with an explicit workspaceId.',\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetProjects: unknown }>(\n LIST_PROJECTS,\n {\n workspaceId,\n pagination: { first: 50 },\n },\n );\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify(data.planmagnetProjects, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * PlanMagnet MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerPlanmagnetPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'project-setup'));\n const sprintName = track(mcpPromptName(p, 'sprint-planning'));\n\n // <product>-project-setup — stand up a project + board + first sprint\n server.registerPrompt(\n setupName,\n {\n title: 'Project Setup',\n description:\n 'Guide for standing up a new PlanMagnet project end to end: create the project, add a board, open a sprint, and seed the backlog with work items.',\n argsSchema: {\n workspaceId: z.string().optional().describe('Workspace ID to operate in'),\n name: z.string().optional().describe('Project name'),\n },\n },\n ({ workspaceId, name }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { workspaceId, name });\n const wsNote = workspaceId\n ? `Use workspaceId \"${workspaceId}\" for all list/collection calls.`\n : 'Ask the user for the workspaceId — every list/collection tool requires it.';\n const nameNote = name\n ? `Use the project name \"${name}\".`\n : 'Ask the user for the project name.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me set up a new PlanMagnet project. ${wsNote}\n\n1. **Create Project**: Use ${p}_projects_create. ${nameNote} Provide a unique \\`key\\` (work-item prefix, e.g. PROJ), an \\`ownerId\\`, and optionally a \\`methodology\\` (AGILE/SCRUM/KANBAN/…).\n2. **Add a Board**: Use ${p}_boards_create with the new projectId and type=KANBAN (or SCRUM). Add columns with ${p}_boards_create_column (TODO → IN_PROGRESS → DONE).\n3. **Open a Sprint**: Use ${p}_sprints_create, then ${p}_sprints_start when ready.\n4. **Seed the Backlog**: Use ${p}_work_items_create for each epic/story/task (set type + priority). Optionally place them into the sprint with ${p}_sprints_add_work_items.\n5. **Verify**: Use ${p}_work_items_list (workspaceId + projectId) to confirm the backlog.\n\nShow results at each step and confirm before starting the sprint.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-sprint-planning — run a sprint planning + triage session\n server.registerPrompt(\n sprintName,\n {\n title: 'Sprint Planning',\n description:\n 'Workflow for planning and running a sprint: review the backlog, prioritize, fill the sprint, track risks, and monitor progress.',\n argsSchema: {\n workspaceId: z.string().optional().describe('Workspace ID'),\n projectId: z.string().optional().describe('Project ID to plan for'),\n },\n },\n ({ workspaceId, projectId }) => {\n ctx.logger.debug(`Prompt ${sprintName} called`, { workspaceId, projectId });\n const wsNote = workspaceId\n ? `Use workspaceId \"${workspaceId}\".`\n : 'Ask the user for the workspaceId (required by all list tools).';\n const projNote = projectId\n ? `Plan project \"${projectId}\".`\n : `First list projects with ${p}_projects_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run a PlanMagnet sprint-planning session. ${wsNote} ${projNote}\n\n1. **Backlog Review**: Use ${p}_work_items_list filtered by projectId and status=BACKLOG/TODO to see candidate work.\n2. **Prioritize**: Adjust priorities with ${p}_work_items_update (or ${p}_work_items_bulk_update for many at once).\n3. **Open/Confirm Sprint**: Use ${p}_sprints_list to find the planning sprint, or ${p}_sprints_create. Add chosen items with ${p}_sprints_add_work_items, then ${p}_sprints_start.\n4. **Capacity & Dependencies**: Check ${p}_dependencies_list for blockers; resolve ordering before commit.\n5. **Risks**: Review ${p}_risks_matrix (projectId) and triage high-severity risks.\n6. **Track**: During the sprint use ${p}_work_items_move to advance items and ${p}_sprints_complete at the end.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * PlanMagnet module — domain module for the future-products ecosystem program.\n *\n * Covers the wspace-planmagnet-svc @key-entity surface (projects, programs,\n * portfolios, work items, sprints, boards/columns, milestones, dependencies,\n * budgets/expenses, risks, releases, quality gates, roadmaps/items, time\n * tracking, automations, feature requests/competitors, custom fields,\n * project templates, external sync, UI sessions) grouped into per-entity\n * sub-APIs. Mirrors the kadaikodi / crewfoundry module structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/planmagnet/wspace-planmagnet-svc/\n * (Hive service name `planmagnet`). All operations run against the WORKSPACE\n * gateway. Every collection query takes an EXPLICIT `workspaceId: ID!` argument\n * and uses cursor pagination ({ first, after }).\n *\n * The subgraph exposes only the federation noops `_planmagnetPing` /\n * `_planmagnetService` / `_planmagnetVersion` (no @public health field), so\n * there is intentionally NO health command/tool.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerProjectTools } from './tools/projects.js';\nimport { registerWorkItemTools } from './tools/workitems.js';\nimport { registerSprintTools } from './tools/sprints.js';\nimport { registerBoardTools } from './tools/boards.js';\nimport { registerMilestoneTools } from './tools/milestones.js';\nimport { registerDependencyTools } from './tools/dependencies.js';\nimport { registerBudgetTools } from './tools/budgets.js';\nimport { registerRiskTools } from './tools/risks.js';\nimport { registerReleaseTools } from './tools/releases.js';\nimport { registerQualityGateTools } from './tools/qualitygates.js';\nimport { registerRoadmapTools } from './tools/roadmaps.js';\nimport { registerTimeTrackingTools } from './tools/timetracking.js';\nimport { registerAutomationTools } from './tools/automations.js';\nimport { registerFeatureTools } from './tools/features.js';\nimport { registerCustomFieldTools } from './tools/customfields.js';\nimport { registerTemplateTools } from './tools/templates.js';\nimport { registerSyncTools } from './tools/sync.js';\nimport { registerUiSessionTools } from './tools/uisessions.js';\nimport { registerPlanmagnetResources } from './resources.js';\nimport { registerPlanmagnetPrompts } from './prompts.js';\n\nconst planmagnetModule: McpModule = {\n id: 'planmagnet',\n version: '0.0.1',\n displayName: 'PlanMagnet',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerProjectTools(server, ctx, trackTool);\n registerWorkItemTools(server, ctx, trackTool);\n registerSprintTools(server, ctx, trackTool);\n registerBoardTools(server, ctx, trackTool);\n registerMilestoneTools(server, ctx, trackTool);\n registerDependencyTools(server, ctx, trackTool);\n registerBudgetTools(server, ctx, trackTool);\n registerRiskTools(server, ctx, trackTool);\n registerReleaseTools(server, ctx, trackTool);\n registerQualityGateTools(server, ctx, trackTool);\n registerRoadmapTools(server, ctx, trackTool);\n registerTimeTrackingTools(server, ctx, trackTool);\n registerAutomationTools(server, ctx, trackTool);\n registerFeatureTools(server, ctx, trackTool);\n registerCustomFieldTools(server, ctx, trackTool);\n registerTemplateTools(server, ctx, trackTool);\n registerSyncTools(server, ctx, trackTool);\n registerUiSessionTools(server, ctx, trackTool);\n\n registerPlanmagnetResources(server, ctx, trackResource);\n registerPlanmagnetPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default planmagnetModule;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/planmagnet/operations.ts","../../../src/modules/planmagnet/tools/shared.ts","../../../src/modules/planmagnet/tools/projects.ts","../../../src/modules/planmagnet/tools/workitems.ts","../../../src/modules/planmagnet/tools/sprints.ts","../../../src/modules/planmagnet/tools/boards.ts","../../../src/modules/planmagnet/tools/milestones.ts","../../../src/modules/planmagnet/tools/dependencies.ts","../../../src/modules/planmagnet/tools/budgets.ts","../../../src/modules/planmagnet/tools/risks.ts","../../../src/modules/planmagnet/tools/releases.ts","../../../src/modules/planmagnet/tools/qualitygates.ts","../../../src/modules/planmagnet/tools/roadmaps.ts","../../../src/modules/planmagnet/tools/timetracking.ts","../../../src/modules/planmagnet/tools/automations.ts","../../../src/modules/planmagnet/tools/features.ts","../../../src/modules/planmagnet/tools/customfields.ts","../../../src/modules/planmagnet/tools/templates.ts","../../../src/modules/planmagnet/tools/sync.ts","../../../src/modules/planmagnet/tools/uisessions.ts","../../../src/modules/planmagnet/resources.ts","../../../src/modules/planmagnet/prompts.ts","../../../src/modules/planmagnet/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n { _meta?: { progressToken?: string | number } } | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the PlanMagnet MCP module.\n *\n * PlanMagnet is the strategic project / portfolio / work-management product\n * (future-products ecosystem). Backend subgraph:\n * ~/products/wspace/planmagnet/wspace-planmagnet-svc/ (Hive service name\n * `planmagnet`).\n *\n * All operations run against the WORKSPACE gateway. Unlike kadaikodi (whose\n * list queries scope purely via gateway headers), every PlanMagnet list /\n * collection query takes an EXPLICIT `workspaceId: ID!` argument and uses\n * cursor pagination (`PlanmagnetPaginationInput { first, after, last, before }`)\n * returning `{ items, totalCount, pageInfo }`. Single-entity getters take only\n * `id: ID!`. Mutations and root field names are product-prefixed (`planmagnet*`)\n * and are called here by their EXACT real names.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi / vibecontrols module operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Shared list page-info fragment\n// ---------------------------------------------------------------------------\n\nconst PAGE_INFO = `\n totalCount\n pageInfo { hasNextPage hasPreviousPage startCursor endCursor totalCount }\n`;\n\n// ---------------------------------------------------------------------------\n// Field fragments (scalar-first; a few cheap nested selections where useful)\n// ---------------------------------------------------------------------------\n\nexport const PROJECT_FIELDS = `\n id key name description status methodology ownerId programId defaultAssigneeId\n startDate endDate tags tagsV2 metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const PROGRAM_FIELDS = `\n id name description status ownerId budgetTotal currency startDate endDate\n tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const PORTFOLIO_FIELDS = `\n id name description status ownerId alignment alignmentLabel budgetTotal currency\n fiscalPeriod tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const PORTFOLIO_OVERVIEW_FIELDS = `\n portfolioId totalPrograms totalProjects projectsByStatus atRiskCount\n overdueMilestones totalBudget totalSpent budgetUtilization healthScore\n`;\n\nexport const WORKITEM_FIELDS = `\n id key title description type status priority projectId sprintId parentId\n assigneeId reporterId storyPoints estimateMinutes timeSpentMinutes dueDate\n labels tags sortOrder metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const SPRINT_FIELDS = `\n id name goal status projectId capacity velocity startDate endDate sortOrder\n metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const BOARD_COLUMN_FIELDS = `\n id boardId name type mappedStatus sortOrder wipLimit metadata createdAt updatedAt\n`;\n\nexport const BOARD_FIELDS = `\n id name description type projectId isDefault metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n columns { ${BOARD_COLUMN_FIELDS} }\n`;\n\nexport const MILESTONE_FIELDS = `\n id name description status projectId ownerId dueDate completedAt sortOrder\n tagsV2 metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const DEPENDENCY_FIELDS = `\n id sourceWorkItemId targetWorkItemId type status description metadata\n workspaceId createdBy createdAt updatedAt\n`;\n\nexport const BUDGET_EXPENSE_FIELDS = `\n id budgetId amount category description date referenceUrl workItemId metadata\n createdBy createdAt updatedAt\n`;\n\nexport const BUDGET_FIELDS = `\n id name description status projectId currency plannedAmount spentAmount\n remainingAmount periodStart periodEnd approverId approvedAt metadata\n workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const RISK_FIELDS = `\n id title description category severity status impact likelihood riskScore\n projectId ownerId mitigationPlan contingencyPlan dueDate resolvedAt tags\n metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const RISK_MATRIX_FIELDS = `\n projectId totalRisks bySeverity byStatus matrix averageRiskScore\n`;\n\nexport const RELEASE_FIELDS = `\n id name version description status projectId ownerId plannedDate releasedAt\n releaseNotes tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const QUALITY_GATE_FIELDS = `\n id name description status projectId milestoneId phase criteria reviewNotes\n reviewerId reviewedAt sortOrder metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const ROADMAP_ITEM_FIELDS = `\n id roadmapId title description status projectId milestoneId workItemId\n startDate endDate color swimlane sortOrder metadata createdBy createdAt updatedAt\n`;\n\nexport const ROADMAP_FIELDS = `\n id name description type isPublic ownerId metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n`;\n\nexport const TIME_ENTRY_FIELDS = `\n id workItemId projectId userId date durationMinutes description billingType\n billingRate status startTime endTime timesheetId metadata workspaceId\n createdBy createdAt updatedAt\n`;\n\nexport const TIMESHEET_FIELDS = `\n id userId status periodStart periodEnd totalMinutes billableMinutes approverId\n approvedAt rejectionReason metadata workspaceId createdBy createdAt updatedAt\n`;\n\nexport const AUTOMATION_RULE_FIELDS = `\n id name description status projectId triggerType triggerConfig conditions\n actions executionCount lastExecutedAt sortOrder metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n`;\n\nexport const AUTOMATION_EXECUTION_FIELDS = `\n id ruleId status executedAt completedAt durationMs result errorMessage triggerData\n`;\n\nexport const FEATURE_REQUEST_FIELDS = `\n id title description status projectId submittedBy businessValue effortEstimate\n priorityScore voteCount workItemId tags metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const COMPETITOR_FIELDS = `\n id name description website tags metadata workspaceId createdBy createdAt updatedAt\n`;\n\nexport const FEATURE_VOTE_FIELDS = `\n id featureRequestId voterId weight comment createdAt\n`;\n\nexport const CUSTOM_FIELD_DEF_FIELDS = `\n id name description fieldType isRequired projectId options defaultValue\n validationRules sortOrder metadata workspaceId createdBy createdAt updatedAt\n`;\n\nexport const CUSTOM_FIELD_VALUE_FIELDS = `\n id definitionId workItemId value setBy createdAt updatedAt\n`;\n\nexport const TEMPLATE_FIELDS = `\n id name description category isBuiltIn isPublished configuration boardConfig\n sprintConfig customFieldsConfig usageCount tags metadata workspaceId\n createdBy updatedBy createdAt updatedAt\n`;\n\nexport const EXTERNAL_SYNC_FIELDS = `\n id projectId provider direction status externalProjectId externalProjectUrl\n connectionConfig fieldMapping syncFilters lastSyncedAt lastSyncError\n totalItemsSynced metadata workspaceId createdBy updatedBy createdAt updatedAt\n`;\n\nexport const EXTERNAL_MAPPING_FIELDS = `\n id syncId internalId internalType externalId externalType externalUrl\n lastSyncDirection lastSyncedAt metadata createdAt updatedAt\n`;\n\nexport const SYNC_RESULT_FIELDS = `\n syncId success itemsCreated itemsUpdated itemsSkipped errorCount errors\n durationMs syncedAt\n`;\n\nexport const UI_SESSION_FIELDS = `\n id userId state metadata workspaceId createdAt updatedAt\n`;\n\n// ===========================================================================\n// Projects\n// ===========================================================================\n\nexport const GET_PROJECT = `\n query PlanmagnetProject($id: ID!) {\n planmagnetProject(id: $id) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const LIST_PROJECTS = `\n query PlanmagnetProjects(\n $workspaceId: ID!\n $filter: PlanmagnetProjectFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProjects(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${PROJECT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROJECT = `\n mutation PlanmagnetCreateProject($input: PlanmagnetCreateProjectInput!) {\n planmagnetCreateProject(input: $input) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const UPDATE_PROJECT = `\n mutation PlanmagnetUpdateProject($id: ID!, $input: PlanmagnetUpdateProjectInput!) {\n planmagnetUpdateProject(id: $id, input: $input) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const DELETE_PROJECT = `\n mutation PlanmagnetDeleteProject($id: ID!) {\n planmagnetDeleteProject(id: $id)\n }\n`;\n\n// ===========================================================================\n// Programs\n// ===========================================================================\n\nexport const GET_PROGRAM = `\n query PlanmagnetProgram($id: ID!) {\n planmagnetProgram(id: $id) { ${PROGRAM_FIELDS} }\n }\n`;\n\nexport const LIST_PROGRAMS = `\n query PlanmagnetPrograms(\n $workspaceId: ID!\n $filter: PlanmagnetProgramFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetPrograms(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${PROGRAM_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROGRAM = `\n mutation PlanmagnetCreateProgram($input: PlanmagnetCreateProgramInput!) {\n planmagnetCreateProgram(input: $input) { ${PROGRAM_FIELDS} }\n }\n`;\n\nexport const UPDATE_PROGRAM = `\n mutation PlanmagnetUpdateProgram($id: ID!, $input: PlanmagnetUpdateProgramInput!) {\n planmagnetUpdateProgram(id: $id, input: $input) { ${PROGRAM_FIELDS} }\n }\n`;\n\nexport const DELETE_PROGRAM = `\n mutation PlanmagnetDeleteProgram($id: ID!) {\n planmagnetDeleteProgram(id: $id)\n }\n`;\n\n// ===========================================================================\n// Portfolios\n// ===========================================================================\n\nexport const GET_PORTFOLIO = `\n query PlanmagnetPortfolio($id: ID!) {\n planmagnetPortfolio(id: $id) { ${PORTFOLIO_FIELDS} }\n }\n`;\n\nexport const PORTFOLIO_OVERVIEW = `\n query PlanmagnetPortfolioOverview($portfolioId: ID!) {\n planmagnetPortfolioOverview(portfolioId: $portfolioId) { ${PORTFOLIO_OVERVIEW_FIELDS} }\n }\n`;\n\nexport const LIST_PORTFOLIOS = `\n query PlanmagnetPortfolios(\n $workspaceId: ID!\n $filter: PlanmagnetPortfolioFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetPortfolios(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${PORTFOLIO_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PORTFOLIO = `\n mutation PlanmagnetCreatePortfolio($input: PlanmagnetCreatePortfolioInput!) {\n planmagnetCreatePortfolio(input: $input) { ${PORTFOLIO_FIELDS} }\n }\n`;\n\nexport const UPDATE_PORTFOLIO = `\n mutation PlanmagnetUpdatePortfolio($id: ID!, $input: PlanmagnetUpdatePortfolioInput!) {\n planmagnetUpdatePortfolio(id: $id, input: $input) { ${PORTFOLIO_FIELDS} }\n }\n`;\n\nexport const DELETE_PORTFOLIO = `\n mutation PlanmagnetDeletePortfolio($id: ID!) {\n planmagnetDeletePortfolio(id: $id)\n }\n`;\n\n// ===========================================================================\n// Work items\n// ===========================================================================\n\nexport const GET_WORKITEM = `\n query PlanmagnetWorkItem($id: ID!) {\n planmagnetWorkItem(id: $id) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const LIST_WORKITEMS = `\n query PlanmagnetWorkItems(\n $workspaceId: ID!\n $filter: PlanmagnetWorkItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${WORKITEM_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_WORKITEM = `\n mutation PlanmagnetCreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {\n planmagnetCreateWorkItem(input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const UPDATE_WORKITEM = `\n mutation PlanmagnetUpdateWorkItem($id: ID!, $input: PlanmagnetUpdateWorkItemInput!) {\n planmagnetUpdateWorkItem(id: $id, input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const DELETE_WORKITEM = `\n mutation PlanmagnetDeleteWorkItem($id: ID!) {\n planmagnetDeleteWorkItem(id: $id)\n }\n`;\n\nexport const ASSIGN_WORKITEM = `\n mutation PlanmagnetAssignWorkItem($id: ID!, $input: PlanmagnetAssignWorkItemInput!) {\n planmagnetAssignWorkItem(id: $id, input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const BULK_UPDATE_WORKITEMS = `\n mutation PlanmagnetBulkUpdateWorkItems($input: PlanmagnetBulkUpdateWorkItemsInput!) {\n planmagnetBulkUpdateWorkItems(input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\nexport const MOVE_WORKITEM = `\n mutation PlanmagnetMoveWorkItem($id: ID!, $input: PlanmagnetMoveWorkItemInput!) {\n planmagnetMoveWorkItem(id: $id, input: $input) { ${WORKITEM_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Sprints\n// ===========================================================================\n\nexport const GET_SPRINT = `\n query PlanmagnetSprint($id: ID!) {\n planmagnetSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const LIST_SPRINTS = `\n query PlanmagnetSprints(\n $workspaceId: ID!\n $filter: PlanmagnetSprintFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetSprints(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${SPRINT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_SPRINT = `\n mutation PlanmagnetCreateSprint($input: PlanmagnetCreateSprintInput!) {\n planmagnetCreateSprint(input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const UPDATE_SPRINT = `\n mutation PlanmagnetUpdateSprint($id: ID!, $input: PlanmagnetUpdateSprintInput!) {\n planmagnetUpdateSprint(id: $id, input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const DELETE_SPRINT = `\n mutation PlanmagnetDeleteSprint($id: ID!) {\n planmagnetDeleteSprint(id: $id)\n }\n`;\n\nexport const START_SPRINT = `\n mutation PlanmagnetStartSprint($id: ID!) {\n planmagnetStartSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const COMPLETE_SPRINT = `\n mutation PlanmagnetCompleteSprint($id: ID!) {\n planmagnetCompleteSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const CANCEL_SPRINT = `\n mutation PlanmagnetCancelSprint($id: ID!) {\n planmagnetCancelSprint(id: $id) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const ADD_WORKITEMS_TO_SPRINT = `\n mutation PlanmagnetAddWorkItemsToSprint($id: ID!, $input: PlanmagnetSprintWorkItemsInput!) {\n planmagnetAddWorkItemsToSprint(id: $id, input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\nexport const REMOVE_WORKITEMS_FROM_SPRINT = `\n mutation PlanmagnetRemoveWorkItemsFromSprint($id: ID!, $input: PlanmagnetSprintWorkItemsInput!) {\n planmagnetRemoveWorkItemsFromSprint(id: $id, input: $input) { ${SPRINT_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Boards + columns\n// ===========================================================================\n\nexport const GET_BOARD = `\n query PlanmagnetBoard($id: ID!) {\n planmagnetBoard(id: $id) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const LIST_BOARDS = `\n query PlanmagnetBoards(\n $workspaceId: ID!\n $filter: PlanmagnetBoardFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetBoards(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${BOARD_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_BOARD = `\n mutation PlanmagnetCreateBoard($input: PlanmagnetCreateBoardInput!) {\n planmagnetCreateBoard(input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const UPDATE_BOARD = `\n mutation PlanmagnetUpdateBoard($id: ID!, $input: PlanmagnetUpdateBoardInput!) {\n planmagnetUpdateBoard(id: $id, input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const DELETE_BOARD = `\n mutation PlanmagnetDeleteBoard($id: ID!) {\n planmagnetDeleteBoard(id: $id)\n }\n`;\n\nexport const MOVE_CARD = `\n mutation PlanmagnetMoveCard($boardId: ID!, $input: PlanmagnetMoveCardInput!) {\n planmagnetMoveCard(boardId: $boardId, input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const REORDER_COLUMNS = `\n mutation PlanmagnetReorderColumns($boardId: ID!, $input: PlanmagnetReorderColumnsInput!) {\n planmagnetReorderColumns(boardId: $boardId, input: $input) { ${BOARD_FIELDS} }\n }\n`;\n\nexport const CREATE_BOARD_COLUMN = `\n mutation PlanmagnetCreateBoardColumn($input: PlanmagnetCreateBoardColumnInput!) {\n planmagnetCreateBoardColumn(input: $input) { ${BOARD_COLUMN_FIELDS} }\n }\n`;\n\nexport const UPDATE_BOARD_COLUMN = `\n mutation PlanmagnetUpdateBoardColumn($id: ID!, $input: PlanmagnetUpdateBoardColumnInput!) {\n planmagnetUpdateBoardColumn(id: $id, input: $input) { ${BOARD_COLUMN_FIELDS} }\n }\n`;\n\nexport const DELETE_BOARD_COLUMN = `\n mutation PlanmagnetDeleteBoardColumn($id: ID!) {\n planmagnetDeleteBoardColumn(id: $id)\n }\n`;\n\n// ===========================================================================\n// Milestones\n// ===========================================================================\n\nexport const GET_MILESTONE = `\n query PlanmagnetMilestone($id: ID!) {\n planmagnetMilestone(id: $id) { ${MILESTONE_FIELDS} }\n }\n`;\n\nexport const LIST_MILESTONES = `\n query PlanmagnetMilestones(\n $workspaceId: ID!\n $filter: PlanmagnetMilestoneFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetMilestones(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${MILESTONE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MILESTONE = `\n mutation PlanmagnetCreateMilestone($input: PlanmagnetCreateMilestoneInput!) {\n planmagnetCreateMilestone(input: $input) { ${MILESTONE_FIELDS} }\n }\n`;\n\nexport const UPDATE_MILESTONE = `\n mutation PlanmagnetUpdateMilestone($id: ID!, $input: PlanmagnetUpdateMilestoneInput!) {\n planmagnetUpdateMilestone(id: $id, input: $input) { ${MILESTONE_FIELDS} }\n }\n`;\n\nexport const DELETE_MILESTONE = `\n mutation PlanmagnetDeleteMilestone($id: ID!) {\n planmagnetDeleteMilestone(id: $id)\n }\n`;\n\n// ===========================================================================\n// Dependencies\n// ===========================================================================\n\nexport const GET_DEPENDENCY = `\n query PlanmagnetDependency($id: ID!) {\n planmagnetDependency(id: $id) { ${DEPENDENCY_FIELDS} }\n }\n`;\n\nexport const LIST_DEPENDENCIES = `\n query PlanmagnetDependencies(\n $workspaceId: ID!\n $filter: PlanmagnetDependencyFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetDependencies(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${DEPENDENCY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_DEPENDENCY = `\n mutation PlanmagnetCreateDependency($input: PlanmagnetCreateDependencyInput!) {\n planmagnetCreateDependency(input: $input) { ${DEPENDENCY_FIELDS} }\n }\n`;\n\nexport const UPDATE_DEPENDENCY = `\n mutation PlanmagnetUpdateDependency($id: ID!, $input: PlanmagnetUpdateDependencyInput!) {\n planmagnetUpdateDependency(id: $id, input: $input) { ${DEPENDENCY_FIELDS} }\n }\n`;\n\nexport const DELETE_DEPENDENCY = `\n mutation PlanmagnetDeleteDependency($id: ID!) {\n planmagnetDeleteDependency(id: $id)\n }\n`;\n\n// ===========================================================================\n// Budgets + expenses\n// ===========================================================================\n\nexport const GET_BUDGET = `\n query PlanmagnetBudget($id: ID!) {\n planmagnetBudget(id: $id) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const LIST_BUDGETS = `\n query PlanmagnetBudgets(\n $workspaceId: ID!\n $filter: PlanmagnetBudgetFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetBudgets(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${BUDGET_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_BUDGET = `\n mutation PlanmagnetCreateBudget($input: PlanmagnetCreateBudgetInput!) {\n planmagnetCreateBudget(input: $input) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const UPDATE_BUDGET = `\n mutation PlanmagnetUpdateBudget($id: ID!, $input: PlanmagnetUpdateBudgetInput!) {\n planmagnetUpdateBudget(id: $id, input: $input) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const DELETE_BUDGET = `\n mutation PlanmagnetDeleteBudget($id: ID!) {\n planmagnetDeleteBudget(id: $id)\n }\n`;\n\nexport const APPROVE_BUDGET = `\n mutation PlanmagnetApproveBudget($id: ID!) {\n planmagnetApproveBudget(id: $id) { ${BUDGET_FIELDS} }\n }\n`;\n\nexport const LIST_BUDGET_EXPENSES = `\n query PlanmagnetBudgetExpenses(\n $workspaceId: ID!\n $filter: PlanmagnetBudgetExpenseFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetBudgetExpenses(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${BUDGET_EXPENSE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const LOG_EXPENSE = `\n mutation PlanmagnetLogExpense($input: PlanmagnetLogExpenseInput!) {\n planmagnetLogExpense(input: $input) { ${BUDGET_EXPENSE_FIELDS} }\n }\n`;\n\nexport const UPDATE_EXPENSE = `\n mutation PlanmagnetUpdateExpense($id: ID!, $input: PlanmagnetUpdateExpenseInput!) {\n planmagnetUpdateExpense(id: $id, input: $input) { ${BUDGET_EXPENSE_FIELDS} }\n }\n`;\n\nexport const DELETE_EXPENSE = `\n mutation PlanmagnetDeleteExpense($id: ID!) {\n planmagnetDeleteExpense(id: $id)\n }\n`;\n\n// ===========================================================================\n// Risks\n// ===========================================================================\n\nexport const GET_RISK = `\n query PlanmagnetRisk($id: ID!) {\n planmagnetRisk(id: $id) { ${RISK_FIELDS} }\n }\n`;\n\nexport const RISK_MATRIX = `\n query PlanmagnetRiskMatrix($projectId: ID!) {\n planmagnetRiskMatrix(projectId: $projectId) { ${RISK_MATRIX_FIELDS} }\n }\n`;\n\nexport const LIST_RISKS = `\n query PlanmagnetRisks(\n $workspaceId: ID!\n $filter: PlanmagnetRiskFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRisks(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${RISK_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_RISK = `\n mutation PlanmagnetCreateRisk($input: PlanmagnetCreateRiskInput!) {\n planmagnetCreateRisk(input: $input) { ${RISK_FIELDS} }\n }\n`;\n\nexport const UPDATE_RISK = `\n mutation PlanmagnetUpdateRisk($id: ID!, $input: PlanmagnetUpdateRiskInput!) {\n planmagnetUpdateRisk(id: $id, input: $input) { ${RISK_FIELDS} }\n }\n`;\n\nexport const DELETE_RISK = `\n mutation PlanmagnetDeleteRisk($id: ID!) {\n planmagnetDeleteRisk(id: $id)\n }\n`;\n\n// ===========================================================================\n// Releases\n// ===========================================================================\n\nexport const GET_RELEASE = `\n query PlanmagnetRelease($id: ID!) {\n planmagnetRelease(id: $id) { ${RELEASE_FIELDS} }\n }\n`;\n\nexport const LIST_RELEASES = `\n query PlanmagnetReleases(\n $workspaceId: ID!\n $filter: PlanmagnetReleaseFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetReleases(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${RELEASE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_RELEASE = `\n mutation PlanmagnetCreateRelease($input: PlanmagnetCreateReleaseInput!) {\n planmagnetCreateRelease(input: $input) { ${RELEASE_FIELDS} }\n }\n`;\n\nexport const UPDATE_RELEASE = `\n mutation PlanmagnetUpdateRelease($id: ID!, $input: PlanmagnetUpdateReleaseInput!) {\n planmagnetUpdateRelease(id: $id, input: $input) { ${RELEASE_FIELDS} }\n }\n`;\n\nexport const DELETE_RELEASE = `\n mutation PlanmagnetDeleteRelease($id: ID!) {\n planmagnetDeleteRelease(id: $id)\n }\n`;\n\n// ===========================================================================\n// Quality gates\n// ===========================================================================\n\nexport const GET_QUALITY_GATE = `\n query PlanmagnetQualityGate($id: ID!) {\n planmagnetQualityGate(id: $id) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\nexport const LIST_QUALITY_GATES = `\n query PlanmagnetQualityGates(\n $workspaceId: ID!\n $filter: PlanmagnetQualityGateFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetQualityGates(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${QUALITY_GATE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_QUALITY_GATE = `\n mutation PlanmagnetCreateQualityGate($input: PlanmagnetCreateQualityGateInput!) {\n planmagnetCreateQualityGate(input: $input) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\nexport const UPDATE_QUALITY_GATE = `\n mutation PlanmagnetUpdateQualityGate($id: ID!, $input: PlanmagnetUpdateQualityGateInput!) {\n planmagnetUpdateQualityGate(id: $id, input: $input) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\nexport const DELETE_QUALITY_GATE = `\n mutation PlanmagnetDeleteQualityGate($id: ID!) {\n planmagnetDeleteQualityGate(id: $id)\n }\n`;\n\nexport const REVIEW_QUALITY_GATE = `\n mutation PlanmagnetReviewQualityGate($id: ID!, $input: PlanmagnetReviewQualityGateInput!) {\n planmagnetReviewQualityGate(id: $id, input: $input) { ${QUALITY_GATE_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Roadmaps + roadmap items\n// ===========================================================================\n\nexport const GET_ROADMAP = `\n query PlanmagnetRoadmap($id: ID!) {\n planmagnetRoadmap(id: $id) { ${ROADMAP_FIELDS} }\n }\n`;\n\nexport const LIST_ROADMAPS = `\n query PlanmagnetRoadmaps(\n $workspaceId: ID!\n $filter: PlanmagnetRoadmapFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRoadmaps(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${ROADMAP_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_ROADMAP = `\n mutation PlanmagnetCreateRoadmap($input: PlanmagnetCreateRoadmapInput!) {\n planmagnetCreateRoadmap(input: $input) { ${ROADMAP_FIELDS} }\n }\n`;\n\nexport const UPDATE_ROADMAP = `\n mutation PlanmagnetUpdateRoadmap($id: ID!, $input: PlanmagnetUpdateRoadmapInput!) {\n planmagnetUpdateRoadmap(id: $id, input: $input) { ${ROADMAP_FIELDS} }\n }\n`;\n\nexport const DELETE_ROADMAP = `\n mutation PlanmagnetDeleteRoadmap($id: ID!) {\n planmagnetDeleteRoadmap(id: $id)\n }\n`;\n\nexport const GET_ROADMAP_ITEM = `\n query PlanmagnetRoadmapItem($id: ID!) {\n planmagnetRoadmapItem(id: $id) { ${ROADMAP_ITEM_FIELDS} }\n }\n`;\n\nexport const LIST_ROADMAP_ITEMS = `\n query PlanmagnetRoadmapItems(\n $workspaceId: ID!\n $filter: PlanmagnetRoadmapItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRoadmapItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${ROADMAP_ITEM_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_ROADMAP_ITEM = `\n mutation PlanmagnetCreateRoadmapItem($input: PlanmagnetCreateRoadmapItemInput!) {\n planmagnetCreateRoadmapItem(input: $input) { ${ROADMAP_ITEM_FIELDS} }\n }\n`;\n\nexport const UPDATE_ROADMAP_ITEM = `\n mutation PlanmagnetUpdateRoadmapItem($id: ID!, $input: PlanmagnetUpdateRoadmapItemInput!) {\n planmagnetUpdateRoadmapItem(id: $id, input: $input) { ${ROADMAP_ITEM_FIELDS} }\n }\n`;\n\nexport const DELETE_ROADMAP_ITEM = `\n mutation PlanmagnetDeleteRoadmapItem($id: ID!) {\n planmagnetDeleteRoadmapItem(id: $id)\n }\n`;\n\n// ===========================================================================\n// Time tracking — time entries + timesheets\n// ===========================================================================\n\nexport const GET_TIME_ENTRY = `\n query PlanmagnetTimeEntry($id: ID!) {\n planmagnetTimeEntry(id: $id) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const LIST_TIME_ENTRIES = `\n query PlanmagnetTimeEntries(\n $workspaceId: ID!\n $filter: PlanmagnetTimeEntryFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetTimeEntries(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${TIME_ENTRY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_TIME_ENTRY = `\n mutation PlanmagnetCreateTimeEntry($input: PlanmagnetCreateTimeEntryInput!) {\n planmagnetCreateTimeEntry(input: $input) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const UPDATE_TIME_ENTRY = `\n mutation PlanmagnetUpdateTimeEntry($id: ID!, $input: PlanmagnetUpdateTimeEntryInput!) {\n planmagnetUpdateTimeEntry(id: $id, input: $input) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const DELETE_TIME_ENTRY = `\n mutation PlanmagnetDeleteTimeEntry($id: ID!) {\n planmagnetDeleteTimeEntry(id: $id)\n }\n`;\n\nexport const LOG_TIME = `\n mutation PlanmagnetLogTime($input: PlanmagnetLogTimeInput!) {\n planmagnetLogTime(input: $input) { ${TIME_ENTRY_FIELDS} }\n }\n`;\n\nexport const GET_TIMESHEET = `\n query PlanmagnetTimesheet($id: ID!) {\n planmagnetTimesheet(id: $id) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const LIST_TIMESHEETS = `\n query PlanmagnetTimesheets(\n $workspaceId: ID!\n $filter: PlanmagnetTimesheetFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetTimesheets(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${TIMESHEET_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_TIMESHEET = `\n mutation PlanmagnetCreateTimesheet($input: PlanmagnetCreateTimesheetInput!) {\n planmagnetCreateTimesheet(input: $input) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const SUBMIT_TIMESHEET = `\n mutation PlanmagnetSubmitTimesheet($id: ID!) {\n planmagnetSubmitTimesheet(id: $id) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const APPROVE_TIMESHEET = `\n mutation PlanmagnetApproveTimesheet($id: ID!) {\n planmagnetApproveTimesheet(id: $id) { ${TIMESHEET_FIELDS} }\n }\n`;\n\nexport const REJECT_TIMESHEET = `\n mutation PlanmagnetRejectTimesheet($id: ID!, $reason: String) {\n planmagnetRejectTimesheet(id: $id, reason: $reason) { ${TIMESHEET_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// Automations — rules + executions\n// ===========================================================================\n\nexport const GET_AUTOMATION_RULE = `\n query PlanmagnetAutomationRule($id: ID!) {\n planmagnetAutomationRule(id: $id) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const LIST_AUTOMATION_RULES = `\n query PlanmagnetAutomationRules(\n $workspaceId: ID!\n $filter: PlanmagnetAutomationRuleFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetAutomationRules(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${AUTOMATION_RULE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_AUTOMATION_RULE = `\n mutation PlanmagnetCreateAutomationRule($input: PlanmagnetCreateAutomationRuleInput!) {\n planmagnetCreateAutomationRule(input: $input) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const UPDATE_AUTOMATION_RULE = `\n mutation PlanmagnetUpdateAutomationRule($id: ID!, $input: PlanmagnetUpdateAutomationRuleInput!) {\n planmagnetUpdateAutomationRule(id: $id, input: $input) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const DELETE_AUTOMATION_RULE = `\n mutation PlanmagnetDeleteAutomationRule($id: ID!) {\n planmagnetDeleteAutomationRule(id: $id)\n }\n`;\n\nexport const TOGGLE_AUTOMATION_RULE = `\n mutation PlanmagnetToggleAutomationRule($id: ID!, $status: AutomationStatus!) {\n planmagnetToggleAutomationRule(id: $id, status: $status) { ${AUTOMATION_RULE_FIELDS} }\n }\n`;\n\nexport const EXECUTE_AUTOMATION_RULE = `\n mutation PlanmagnetExecuteAutomationRule($id: ID!, $triggerData: JSON) {\n planmagnetExecuteAutomationRule(id: $id, triggerData: $triggerData) { ${AUTOMATION_EXECUTION_FIELDS} }\n }\n`;\n\nexport const LIST_AUTOMATION_EXECUTIONS = `\n query PlanmagnetAutomationExecutions(\n $workspaceId: ID!\n $filter: PlanmagnetAutomationExecutionFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetAutomationExecutions(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${AUTOMATION_EXECUTION_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\n// ===========================================================================\n// Features — feature requests, votes, competitors\n// ===========================================================================\n\nexport const GET_FEATURE_REQUEST = `\n query PlanmagnetFeatureRequest($id: ID!) {\n planmagnetFeatureRequest(id: $id) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const LIST_FEATURE_REQUESTS = `\n query PlanmagnetFeatureRequests(\n $workspaceId: ID!\n $filter: PlanmagnetFeatureRequestFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetFeatureRequests(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${FEATURE_REQUEST_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_FEATURE_REQUEST = `\n mutation PlanmagnetCreateFeatureRequest($input: PlanmagnetCreateFeatureRequestInput!) {\n planmagnetCreateFeatureRequest(input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const UPDATE_FEATURE_REQUEST = `\n mutation PlanmagnetUpdateFeatureRequest($id: ID!, $input: PlanmagnetUpdateFeatureRequestInput!) {\n planmagnetUpdateFeatureRequest(id: $id, input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const DELETE_FEATURE_REQUEST = `\n mutation PlanmagnetDeleteFeatureRequest($id: ID!) {\n planmagnetDeleteFeatureRequest(id: $id)\n }\n`;\n\nexport const VOTE_ON_FEATURE = `\n mutation PlanmagnetVoteOnFeature($featureRequestId: ID!, $input: PlanmagnetVoteOnFeatureInput) {\n planmagnetVoteOnFeature(featureRequestId: $featureRequestId, input: $input) { ${FEATURE_VOTE_FIELDS} }\n }\n`;\n\nexport const REMOVE_FEATURE_VOTE = `\n mutation PlanmagnetRemoveFeatureVote($featureRequestId: ID!) {\n planmagnetRemoveFeatureVote(featureRequestId: $featureRequestId)\n }\n`;\n\nexport const LINK_COMPETITOR_TO_FEATURE = `\n mutation PlanmagnetLinkCompetitorToFeature($input: PlanmagnetLinkCompetitorInput!) {\n planmagnetLinkCompetitorToFeature(input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const UNLINK_COMPETITOR_FROM_FEATURE = `\n mutation PlanmagnetUnlinkCompetitorFromFeature($input: PlanmagnetLinkCompetitorInput!) {\n planmagnetUnlinkCompetitorFromFeature(input: $input) { ${FEATURE_REQUEST_FIELDS} }\n }\n`;\n\nexport const GET_COMPETITOR = `\n query PlanmagnetCompetitor($id: ID!) {\n planmagnetCompetitor(id: $id) { ${COMPETITOR_FIELDS} }\n }\n`;\n\nexport const LIST_COMPETITORS = `\n query PlanmagnetCompetitors(\n $workspaceId: ID!\n $filter: PlanmagnetCompetitorFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetCompetitors(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${COMPETITOR_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_COMPETITOR = `\n mutation PlanmagnetCreateCompetitor($input: PlanmagnetCreateCompetitorInput!) {\n planmagnetCreateCompetitor(input: $input) { ${COMPETITOR_FIELDS} }\n }\n`;\n\nexport const UPDATE_COMPETITOR = `\n mutation PlanmagnetUpdateCompetitor($id: ID!, $input: PlanmagnetUpdateCompetitorInput!) {\n planmagnetUpdateCompetitor(id: $id, input: $input) { ${COMPETITOR_FIELDS} }\n }\n`;\n\nexport const DELETE_COMPETITOR = `\n mutation PlanmagnetDeleteCompetitor($id: ID!) {\n planmagnetDeleteCompetitor(id: $id)\n }\n`;\n\n// ===========================================================================\n// Custom fields — definitions + values\n// ===========================================================================\n\nexport const GET_CUSTOM_FIELD_DEFINITION = `\n query PlanmagnetCustomFieldDefinition($id: ID!) {\n planmagnetCustomFieldDefinition(id: $id) { ${CUSTOM_FIELD_DEF_FIELDS} }\n }\n`;\n\nexport const LIST_CUSTOM_FIELD_DEFINITIONS = `\n query PlanmagnetCustomFieldDefinitions(\n $workspaceId: ID!\n $filter: PlanmagnetCustomFieldDefinitionFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetCustomFieldDefinitions(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${CUSTOM_FIELD_DEF_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_CUSTOM_FIELD_DEFINITION = `\n mutation PlanmagnetCreateCustomFieldDefinition($input: PlanmagnetCreateCustomFieldDefinitionInput!) {\n planmagnetCreateCustomFieldDefinition(input: $input) { ${CUSTOM_FIELD_DEF_FIELDS} }\n }\n`;\n\nexport const UPDATE_CUSTOM_FIELD_DEFINITION = `\n mutation PlanmagnetUpdateCustomFieldDefinition($id: ID!, $input: PlanmagnetUpdateCustomFieldDefinitionInput!) {\n planmagnetUpdateCustomFieldDefinition(id: $id, input: $input) { ${CUSTOM_FIELD_DEF_FIELDS} }\n }\n`;\n\nexport const DELETE_CUSTOM_FIELD_DEFINITION = `\n mutation PlanmagnetDeleteCustomFieldDefinition($id: ID!) {\n planmagnetDeleteCustomFieldDefinition(id: $id)\n }\n`;\n\nexport const LIST_CUSTOM_FIELD_VALUES = `\n query PlanmagnetCustomFieldValues(\n $workspaceId: ID!\n $filter: PlanmagnetCustomFieldValueFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetCustomFieldValues(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${CUSTOM_FIELD_VALUE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const SET_CUSTOM_FIELD_VALUE = `\n mutation PlanmagnetSetCustomFieldValue($input: PlanmagnetSetCustomFieldValueInput!) {\n planmagnetSetCustomFieldValue(input: $input) { ${CUSTOM_FIELD_VALUE_FIELDS} }\n }\n`;\n\nexport const REMOVE_CUSTOM_FIELD_VALUE = `\n mutation PlanmagnetRemoveCustomFieldValue($definitionId: ID!, $workItemId: ID!) {\n planmagnetRemoveCustomFieldValue(definitionId: $definitionId, workItemId: $workItemId)\n }\n`;\n\n// ===========================================================================\n// Project templates\n// ===========================================================================\n\nexport const GET_TEMPLATE = `\n query PlanmagnetProjectTemplate($id: ID!) {\n planmagnetProjectTemplate(id: $id) { ${TEMPLATE_FIELDS} }\n }\n`;\n\nexport const LIST_TEMPLATES = `\n query PlanmagnetProjectTemplates(\n $workspaceId: ID!\n $filter: PlanmagnetProjectTemplateFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProjectTemplates(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${TEMPLATE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_TEMPLATE = `\n mutation PlanmagnetCreateProjectTemplate($input: PlanmagnetCreateProjectTemplateInput!) {\n planmagnetCreateProjectTemplate(input: $input) { ${TEMPLATE_FIELDS} }\n }\n`;\n\nexport const UPDATE_TEMPLATE = `\n mutation PlanmagnetUpdateProjectTemplate($id: ID!, $input: PlanmagnetUpdateProjectTemplateInput!) {\n planmagnetUpdateProjectTemplate(id: $id, input: $input) { ${TEMPLATE_FIELDS} }\n }\n`;\n\nexport const DELETE_TEMPLATE = `\n mutation PlanmagnetDeleteProjectTemplate($id: ID!) {\n planmagnetDeleteProjectTemplate(id: $id)\n }\n`;\n\nexport const APPLY_TEMPLATE = `\n mutation PlanmagnetApplyTemplate($input: PlanmagnetApplyTemplateInput!) {\n planmagnetApplyTemplate(input: $input) { ${PROJECT_FIELDS} }\n }\n`;\n\nexport const CREATE_TEMPLATE_FROM_PROJECT = `\n mutation PlanmagnetCreateTemplateFromProject($projectId: ID!, $name: String!, $description: String) {\n planmagnetCreateTemplateFromProject(projectId: $projectId, name: $name, description: $description) {\n ${TEMPLATE_FIELDS}\n }\n }\n`;\n\n// ===========================================================================\n// External sync — syncs, mappings, import/export\n// ===========================================================================\n\nexport const GET_EXTERNAL_SYNC = `\n query PlanmagnetExternalSync($id: ID!) {\n planmagnetExternalSync(id: $id) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const LIST_EXTERNAL_SYNCS = `\n query PlanmagnetExternalSyncs(\n $workspaceId: ID!\n $filter: PlanmagnetExternalSyncFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetExternalSyncs(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${EXTERNAL_SYNC_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_EXTERNAL_SYNC = `\n mutation PlanmagnetCreateExternalSync($input: PlanmagnetCreateExternalSyncInput!) {\n planmagnetCreateExternalSync(input: $input) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const UPDATE_EXTERNAL_SYNC = `\n mutation PlanmagnetUpdateExternalSync($id: ID!, $input: PlanmagnetUpdateExternalSyncInput!) {\n planmagnetUpdateExternalSync(id: $id, input: $input) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const DELETE_EXTERNAL_SYNC = `\n mutation PlanmagnetDeleteExternalSync($id: ID!) {\n planmagnetDeleteExternalSync(id: $id)\n }\n`;\n\nexport const PAUSE_EXTERNAL_SYNC = `\n mutation PlanmagnetPauseExternalSync($id: ID!) {\n planmagnetPauseExternalSync(id: $id) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const RESUME_EXTERNAL_SYNC = `\n mutation PlanmagnetResumeExternalSync($id: ID!) {\n planmagnetResumeExternalSync(id: $id) { ${EXTERNAL_SYNC_FIELDS} }\n }\n`;\n\nexport const START_SYNC = `\n mutation PlanmagnetStartSync($id: ID!) {\n planmagnetStartSync(id: $id) { ${SYNC_RESULT_FIELDS} }\n }\n`;\n\nexport const LIST_EXTERNAL_MAPPINGS = `\n query PlanmagnetExternalMappings(\n $workspaceId: ID!\n $filter: PlanmagnetExternalMappingFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetExternalMappings(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${EXTERNAL_MAPPING_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const EXPORT_TO_EXTERNAL = `\n mutation PlanmagnetExportToExternal($input: PlanmagnetExportToExternalInput!) {\n planmagnetExportToExternal(input: $input) { ${SYNC_RESULT_FIELDS} }\n }\n`;\n\nexport const IMPORT_FROM_EXTERNAL = `\n mutation PlanmagnetImportFromExternal($input: PlanmagnetImportFromExternalInput!) {\n planmagnetImportFromExternal(input: $input) { ${SYNC_RESULT_FIELDS} }\n }\n`;\n\n// ===========================================================================\n// UI sessions\n// ===========================================================================\n\nexport const GET_OR_CREATE_UI_SESSION = `\n query PlanmagnetGetOrCreateUISession($workspaceId: ID!) {\n planmagnetGetOrCreateUISession(workspaceId: $workspaceId) { ${UI_SESSION_FIELDS} }\n }\n`;\n\nexport const LIST_UI_SESSIONS = `\n query PlanmagnetUiSessions(\n $workspaceId: ID!\n $filter: PlanmagnetUISessionFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetUiSessions(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items { ${UI_SESSION_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const UPDATE_UI_SESSION = `\n mutation PlanmagnetUpdateUISession($input: PlanmagnetUISessionViewStateInput!) {\n planmagnetUpdateUISession(input: $input) { ${UI_SESSION_FIELDS} }\n }\n`;\n\nexport const DELETE_UI_SESSION = `\n mutation PlanmagnetDeleteUISession($id: ID!) {\n planmagnetDeleteUISession(id: $id)\n }\n`;\n","/**\n * Shared zod schemas + helpers for the PlanMagnet tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values (enum values are UPPER_SNAKE in\n * this schema). JSON scalar inputs (metadata, criteria, actions, conditions,\n * triggerConfig, connectionConfig, fieldMapping, value, state, …) are modelled\n * as permissive object records — the backend accepts arbitrary JSON, but a\n * record shape gives the LLM a typed hint.\n *\n * PlanMagnet list queries use cursor pagination (`PlanmagnetPaginationInput\n * { first, after, last, before }`); `buildPagination` assembles the common\n * forward-pagination shape from the flat `first` / `after` tool inputs.\n */\n\nimport { z } from 'zod';\n\n// ── Permissive JSON scalar ─────────────────────────────────────────────────\n\n/** Permissive JSON-object schema for `JSON` scalar object inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n\n/** Permissive JSON value (object OR array) for `JSON` scalars that may be arrays. */\nexport const JsonValue = z.union([JsonObject, z.array(z.unknown())]);\n\n// ── Pagination ─────────────────────────────────────────────────────────────\n\n/** Flat forward-pagination inputs shared by every list tool. */\nexport const paginationInputShape = {\n first: z\n .number()\n .int()\n .optional()\n .describe('Page size — number of items to fetch (cursor forward)'),\n after: z\n .string()\n .optional()\n .describe('Opaque cursor; fetch items after this cursor (pageInfo.endCursor)'),\n} as const;\n\n/** Build a `PlanmagnetPaginationInput` from flat first/after inputs (undefined when empty). */\nexport function buildPagination(\n first?: number,\n after?: string,\n): { first?: number; after?: string } | undefined {\n const pagination: { first?: number; after?: string } = {};\n if (first !== undefined) pagination.first = first;\n if (after !== undefined) pagination.after = after;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\n// ── Enums ──────────────────────────────────────────────────────────────────\n\nexport const ProjectStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'CANCELLED', 'COMPLETED', 'ON_HOLD', 'PLANNING'])\n .describe('Lifecycle status of a project or program');\n\nexport const ProjectMethodologyEnum = z\n .enum(['AGILE', 'CUSTOM', 'HYBRID', 'KANBAN', 'SCRUM', 'WATERFALL'])\n .describe('Project delivery methodology');\n\nexport const PortfolioStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'CLOSED', 'ON_HOLD'])\n .describe('Lifecycle status of a portfolio');\n\nexport const StrategicAlignmentEnum = z\n .enum([\n 'COMPLIANCE',\n 'COST_REDUCTION',\n 'CUSTOM',\n 'CUSTOMER_SATISFACTION',\n 'INNOVATION',\n 'MARKET_EXPANSION',\n 'OPERATIONAL_EXCELLENCE',\n 'REVENUE_GROWTH',\n 'RISK_MITIGATION',\n ])\n .describe('Strategic alignment category of a portfolio');\n\nexport const WorkItemTypeEnum = z\n .enum(['BUG', 'EPIC', 'STORY', 'SUB_TASK', 'TASK'])\n .describe('Type of a work item (epic > story > task/bug > sub-task)');\n\nexport const WorkItemStatusEnum = z\n .enum(['BACKLOG', 'CANCELLED', 'DONE', 'IN_PROGRESS', 'IN_REVIEW', 'TESTING', 'TODO'])\n .describe('Workflow status of a work item');\n\nexport const WorkItemPriorityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM', 'NONE'])\n .describe('Priority level of a work item');\n\nexport const SprintStatusEnum = z\n .enum(['ACTIVE', 'CANCELLED', 'COMPLETED', 'PLANNING', 'REVIEW'])\n .describe('Lifecycle status of a sprint');\n\nexport const BoardTypeEnum = z.enum(['CUSTOM', 'KANBAN', 'SCRUM']).describe('Type of a board');\n\nexport const BoardColumnTypeEnum = z\n .enum(['CUSTOM', 'DONE', 'IN_PROGRESS', 'TODO'])\n .describe('Type/role of a board column');\n\nexport const MilestoneStatusEnum = z\n .enum(['CANCELLED', 'COMPLETED', 'IN_PROGRESS', 'MISSED', 'PENDING'])\n .describe('Lifecycle status of a milestone');\n\nexport const DependencyTypeEnum = z\n .enum([\n 'BLOCKED_BY',\n 'BLOCKS',\n 'CAUSED_BY',\n 'CAUSES',\n 'DUPLICATED_BY',\n 'DUPLICATES',\n 'RELATES_TO',\n ])\n .describe('Type of a work-item dependency relationship');\n\nexport const DependencyStatusEnum = z\n .enum(['ACTIVE', 'REMOVED', 'RESOLVED'])\n .describe('Status of a dependency');\n\nexport const BudgetStatusEnum = z\n .enum(['ACTIVE', 'APPROVED', 'CLOSED', 'DRAFT', 'EXCEEDED'])\n .describe('Status of a budget');\n\nexport const RiskSeverityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM', 'NEGLIGIBLE'])\n .describe('Severity classification of a risk');\n\nexport const RiskStatusEnum = z\n .enum(['ACCEPTED', 'ANALYZING', 'CLOSED', 'IDENTIFIED', 'MITIGATING', 'RESOLVED'])\n .describe('Lifecycle status of a risk');\n\nexport const ReleaseStatusEnum = z\n .enum(['CANCELLED', 'DRAFT', 'IN_PROGRESS', 'PLANNING', 'READY', 'RELEASED', 'ROLLED_BACK'])\n .describe('Lifecycle status of a release');\n\nexport const QualityGateStatusEnum = z\n .enum(['FAILED', 'IN_REVIEW', 'PASSED', 'PENDING', 'WAIVED'])\n .describe('Review status of a quality gate');\n\nexport const RoadmapTypeEnum = z\n .enum(['CUSTOM', 'GANTT', 'SWIMLANE', 'TIMELINE'])\n .describe('Visualization type of a roadmap');\n\nexport const RoadmapItemStatusEnum = z\n .enum(['AT_RISK', 'CANCELLED', 'COMPLETED', 'DELAYED', 'IN_PROGRESS', 'PLANNED'])\n .describe('Status of a roadmap item');\n\nexport const BillingTypeEnum = z\n .enum(['BILLABLE', 'INTERNAL', 'NON_BILLABLE'])\n .describe('Billing classification of a time entry');\n\nexport const TimeEntryStatusEnum = z\n .enum(['APPROVED', 'DRAFT', 'REJECTED', 'SUBMITTED'])\n .describe('Status of a time entry or timesheet');\n\nexport const AutomationStatusEnum = z\n .enum(['ACTIVE', 'DISABLED', 'ERROR', 'PAUSED'])\n .describe('Status of an automation rule');\n\nexport const AutomationTriggerTypeEnum = z\n .enum([\n 'MANUAL',\n 'MILESTONE_DUE',\n 'SCHEDULE',\n 'SPRINT_COMPLETED',\n 'SPRINT_STARTED',\n 'WEBHOOK',\n 'WORK_ITEM_ASSIGNED',\n 'WORK_ITEM_CREATED',\n 'WORK_ITEM_STATUS_CHANGED',\n 'WORK_ITEM_UPDATED',\n ])\n .describe('Trigger type that fires an automation rule');\n\nexport const AutomationExecutionStatusEnum = z\n .enum(['FAILURE', 'PENDING', 'RUNNING', 'SKIPPED', 'SUCCESS'])\n .describe('Status of an automation execution');\n\nexport const FeatureRequestStatusEnum = z\n .enum([\n 'COMPLETED',\n 'DECLINED',\n 'DUPLICATE',\n 'IN_PROGRESS',\n 'PLANNED',\n 'SUBMITTED',\n 'UNDER_REVIEW',\n ])\n .describe('Status of a feature request');\n\nexport const CustomFieldTypeEnum = z\n .enum([\n 'BOOLEAN',\n 'DATE',\n 'EMAIL',\n 'JSON',\n 'LABEL',\n 'MULTI_SELECT',\n 'NUMBER',\n 'SELECT',\n 'TEXT',\n 'URL',\n 'USER',\n ])\n .describe('Data type of a custom field definition');\n\nexport const SyncProviderEnum = z\n .enum([\n 'ASANA',\n 'AZURE_DEVOPS',\n 'CLICKUP',\n 'CUSTOM',\n 'GITHUB',\n 'GITLAB',\n 'JIRA',\n 'LINEAR',\n 'SHORTCUT',\n 'TRELLO',\n ])\n .describe('External tool provider for a sync');\n\nexport const SyncDirectionEnum = z\n .enum(['BIDIRECTIONAL', 'INBOUND', 'OUTBOUND'])\n .describe('Direction of an external sync');\n\nexport const SyncStatusEnum = z\n .enum(['DISABLED', 'FAILED', 'IDLE', 'PAUSED', 'SUCCESS', 'SYNCING'])\n .describe('Status of an external sync');\n","/**\n * PlanMagnet project + program + portfolio tools — the top-level planning\n * hierarchy (portfolio > program > project).\n *\n * Surface (16): projects_{get,list,create,update,delete},\n * programs_{get,list,create,update,delete},\n * portfolios_{get,list,overview,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n ProjectStatusEnum,\n ProjectMethodologyEnum,\n PortfolioStatusEnum,\n StrategicAlignmentEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerProjectTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Projects ───────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_get')),\n {\n title: 'Get Project',\n description: 'Fetch a single PlanMagnet project by ID.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetProject: Record<string, unknown> | null;\n }>(ops.GET_PROJECT, { id });\n if (!data.planmagnetProject) return errorResult(`Project ${id} not found`);\n return jsonResult(data.planmagnetProject);\n } catch (error) {\n ctx.logger.error('planmagnet projects_get failed', { error: String(error) });\n return errorResult(\n `Failed to get project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_list')),\n {\n title: 'List Projects',\n description:\n 'List projects in a workspace with optional status/methodology/program/owner/text filters and cursor pagination.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n status: ProjectStatusEnum.optional().describe('Filter by status'),\n methodology: ProjectMethodologyEnum.optional().describe('Filter by methodology'),\n programId: z.string().optional().describe('Filter by parent program ID'),\n ownerId: z.string().optional().describe('Filter by owner actor ID'),\n search: z.string().optional().describe('Free-text search across name/description'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, status, methodology, programId, ownerId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (status !== undefined) filter.status = status;\n if (methodology !== undefined) filter.methodology = methodology;\n if (programId !== undefined) filter.programId = programId;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (search !== undefined) filter.search = search;\n\n const data = await ctx.gql.workspace.request<{\n planmagnetProjects: Record<string, unknown>;\n }>(ops.LIST_PROJECTS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetProjects);\n } catch (error) {\n ctx.logger.error('planmagnet projects_list failed', { error: String(error) });\n return errorResult(\n `Failed to list projects: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_create')),\n {\n title: 'Create Project',\n description:\n 'Create a new project. `key` is the work-item prefix (e.g. PROJ); `ownerId` is required.',\n inputSchema: {\n name: z.string().min(1).describe('Project name'),\n key: z.string().min(1).describe('Project key / work-item prefix (e.g. PROJ)'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Project description'),\n methodology: ProjectMethodologyEnum.optional().describe('Delivery methodology'),\n status: ProjectStatusEnum.optional().describe('Initial status'),\n programId: z.string().optional().describe('Parent program ID'),\n defaultAssigneeId: z.string().optional().describe('Default assignee actor ID'),\n startDate: z.string().optional().describe('Planned start date (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Planned end date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Legacy string tags'),\n tagsV2: JsonObject.optional().describe('Canonical universal-tag JSON ([{key,value}])'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n name: args.name,\n key: args.key,\n ownerId: args.ownerId,\n };\n for (const k of [\n 'description',\n 'methodology',\n 'status',\n 'programId',\n 'defaultAssigneeId',\n 'startDate',\n 'endDate',\n 'tags',\n 'tagsV2',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateProject: Record<string, unknown>;\n }>(ops.CREATE_PROJECT, { input });\n return jsonResult(data.planmagnetCreateProject);\n } catch (error) {\n ctx.logger.error('planmagnet projects_create failed', { error: String(error) });\n return errorResult(\n `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_update')),\n {\n title: 'Update Project',\n description: 'Update a project. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Project ID'),\n name: z.string().optional().describe('Updated name'),\n key: z.string().optional().describe('Updated key'),\n description: z.string().optional().describe('Updated description'),\n status: ProjectStatusEnum.optional().describe('Updated status'),\n methodology: ProjectMethodologyEnum.optional().describe('Updated methodology'),\n ownerId: z.string().optional().describe('Updated owner actor ID'),\n programId: z.string().optional().describe('Updated parent program ID'),\n defaultAssigneeId: z.string().optional().describe('Updated default assignee'),\n startDate: z.string().optional().describe('Updated start date (ISO-8601)'),\n endDate: z.string().optional().describe('Updated end date (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Updated legacy tags'),\n tagsV2: JsonObject.optional().describe('Updated universal-tag JSON'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable project field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateProject: Record<string, unknown>;\n }>(ops.UPDATE_PROJECT, { id, input });\n return jsonResult(data.planmagnetUpdateProject);\n } catch (error) {\n ctx.logger.error('planmagnet projects_update failed', { error: String(error) });\n return errorResult(\n `Failed to update project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_delete')),\n {\n title: 'Delete Project',\n description: 'Soft-delete a project by ID.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteProject: boolean }>(\n ops.DELETE_PROJECT,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteProject });\n } catch (error) {\n ctx.logger.error('planmagnet projects_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Programs ───────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_get')),\n {\n title: 'Get Program',\n description: 'Fetch a single program by ID.',\n inputSchema: { id: z.string().describe('Program ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetProgram: Record<string, unknown> | null;\n }>(ops.GET_PROGRAM, { id });\n if (!data.planmagnetProgram) return errorResult(`Program ${id} not found`);\n return jsonResult(data.planmagnetProgram);\n } catch (error) {\n ctx.logger.error('planmagnet programs_get failed', { error: String(error) });\n return errorResult(\n `Failed to get program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_list')),\n {\n title: 'List Programs',\n description: 'List programs in a workspace with optional status/owner/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n status: ProjectStatusEnum.optional().describe('Filter by status'),\n ownerId: z.string().optional().describe('Filter by owner actor ID'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, status, ownerId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (status !== undefined) filter.status = status;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetPrograms: Record<string, unknown>;\n }>(ops.LIST_PROGRAMS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetPrograms);\n } catch (error) {\n ctx.logger.error('planmagnet programs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list programs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_create')),\n {\n title: 'Create Program',\n description: 'Create a new program (a grouping of related projects).',\n inputSchema: {\n name: z.string().min(1).describe('Program name'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Program description'),\n status: ProjectStatusEnum.optional().describe('Initial status'),\n budgetTotal: z.number().optional().describe('Total allocated budget'),\n currency: z.string().optional().describe('Budget currency code'),\n startDate: z.string().optional().describe('Planned start date (ISO-8601)'),\n endDate: z.string().optional().describe('Planned end date (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { name: args.name, ownerId: args.ownerId };\n for (const k of [\n 'description',\n 'status',\n 'budgetTotal',\n 'currency',\n 'startDate',\n 'endDate',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateProgram: Record<string, unknown>;\n }>(ops.CREATE_PROGRAM, { input });\n return jsonResult(data.planmagnetCreateProgram);\n } catch (error) {\n ctx.logger.error('planmagnet programs_create failed', { error: String(error) });\n return errorResult(\n `Failed to create program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_update')),\n {\n title: 'Update Program',\n description: 'Update a program. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Program ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n status: ProjectStatusEnum.optional().describe('Updated status'),\n ownerId: z.string().optional().describe('Updated owner'),\n budgetTotal: z.number().optional().describe('Updated budget'),\n currency: z.string().optional().describe('Updated currency'),\n startDate: z.string().optional().describe('Updated start date'),\n endDate: z.string().optional().describe('Updated end date'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable program field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateProgram: Record<string, unknown>;\n }>(ops.UPDATE_PROGRAM, { id, input });\n return jsonResult(data.planmagnetUpdateProgram);\n } catch (error) {\n ctx.logger.error('planmagnet programs_update failed', { error: String(error) });\n return errorResult(\n `Failed to update program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'programs_delete')),\n {\n title: 'Delete Program',\n description: 'Soft-delete a program by ID.',\n inputSchema: { id: z.string().describe('Program ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteProgram: boolean }>(\n ops.DELETE_PROGRAM,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteProgram });\n } catch (error) {\n ctx.logger.error('planmagnet programs_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete program: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Portfolios ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_get')),\n {\n title: 'Get Portfolio',\n description: 'Fetch a single portfolio by ID.',\n inputSchema: { id: z.string().describe('Portfolio ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetPortfolio: Record<string, unknown> | null;\n }>(ops.GET_PORTFOLIO, { id });\n if (!data.planmagnetPortfolio) return errorResult(`Portfolio ${id} not found`);\n return jsonResult(data.planmagnetPortfolio);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_get failed', { error: String(error) });\n return errorResult(\n `Failed to get portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_list')),\n {\n title: 'List Portfolios',\n description:\n 'List portfolios in a workspace with optional status/alignment/owner/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n status: PortfolioStatusEnum.optional().describe('Filter by status'),\n alignment: StrategicAlignmentEnum.optional().describe('Filter by strategic alignment'),\n ownerId: z.string().optional().describe('Filter by owner'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, status, alignment, ownerId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (status !== undefined) filter.status = status;\n if (alignment !== undefined) filter.alignment = alignment;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetPortfolios: Record<string, unknown>;\n }>(ops.LIST_PORTFOLIOS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetPortfolios);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_list failed', { error: String(error) });\n return errorResult(\n `Failed to list portfolios: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_overview')),\n {\n title: 'Portfolio Overview',\n description:\n 'Aggregated health/metrics overview for a portfolio (projects by status, at-risk count, overdue milestones, budget utilization, health score).',\n inputSchema: { portfolioId: z.string().describe('Portfolio ID') },\n },\n async ({ portfolioId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetPortfolioOverview: Record<string, unknown>;\n }>(ops.PORTFOLIO_OVERVIEW, { portfolioId });\n return jsonResult(data.planmagnetPortfolioOverview);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_overview failed', { error: String(error) });\n return errorResult(\n `Failed to get portfolio overview: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_create')),\n {\n title: 'Create Portfolio',\n description: 'Create a new portfolio (strategic grouping of programs and projects).',\n inputSchema: {\n name: z.string().min(1).describe('Portfolio name'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Portfolio description'),\n status: PortfolioStatusEnum.optional().describe('Initial status'),\n alignment: StrategicAlignmentEnum.optional().describe('Strategic alignment'),\n alignmentLabel: z\n .string()\n .optional()\n .describe('Custom alignment label (when alignment=CUSTOM)'),\n budgetTotal: z.number().optional().describe('Total allocated budget'),\n currency: z.string().optional().describe('Budget currency code'),\n fiscalPeriod: z.string().optional().describe('Fiscal year / planning period'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { name: args.name, ownerId: args.ownerId };\n for (const k of [\n 'description',\n 'status',\n 'alignment',\n 'alignmentLabel',\n 'budgetTotal',\n 'currency',\n 'fiscalPeriod',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreatePortfolio: Record<string, unknown>;\n }>(ops.CREATE_PORTFOLIO, { input });\n return jsonResult(data.planmagnetCreatePortfolio);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_create failed', { error: String(error) });\n return errorResult(\n `Failed to create portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_update')),\n {\n title: 'Update Portfolio',\n description: 'Update a portfolio. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Portfolio ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n status: PortfolioStatusEnum.optional().describe('Updated status'),\n alignment: StrategicAlignmentEnum.optional().describe('Updated alignment'),\n alignmentLabel: z.string().optional().describe('Updated alignment label'),\n budgetTotal: z.number().optional().describe('Updated budget'),\n currency: z.string().optional().describe('Updated currency'),\n fiscalPeriod: z.string().optional().describe('Updated fiscal period'),\n ownerId: z.string().optional().describe('Updated owner'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable portfolio field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdatePortfolio: Record<string, unknown>;\n }>(ops.UPDATE_PORTFOLIO, { id, input });\n return jsonResult(data.planmagnetUpdatePortfolio);\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_update failed', { error: String(error) });\n return errorResult(\n `Failed to update portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'portfolios_delete')),\n {\n title: 'Delete Portfolio',\n description: 'Delete a portfolio by ID.',\n inputSchema: { id: z.string().describe('Portfolio ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeletePortfolio: boolean }>(\n ops.DELETE_PORTFOLIO,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeletePortfolio });\n } catch (error) {\n ctx.logger.error('planmagnet portfolios_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete portfolio: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet work-item tools — the core unit of work (epic > story >\n * task/bug > sub-task).\n *\n * Surface (8): work_items_{get,list,create,update,delete,assign,bulk_update,move}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n WorkItemTypeEnum,\n WorkItemStatusEnum,\n WorkItemPriorityEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerWorkItemTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_get')),\n {\n title: 'Get Work Item',\n description: 'Fetch a single work item by ID.',\n inputSchema: { id: z.string().describe('Work item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetWorkItem: Record<string, unknown> | null;\n }>(ops.GET_WORKITEM, { id });\n if (!data.planmagnetWorkItem) return errorResult(`Work item ${id} not found`);\n return jsonResult(data.planmagnetWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_get failed', { error: String(error) });\n return errorResult(\n `Failed to get work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_list')),\n {\n title: 'List Work Items',\n description:\n 'List work items in a workspace with optional project/sprint/parent/assignee/reporter/type/status/priority/text filters and cursor pagination.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n sprintId: z.string().optional().describe('Filter by sprint ID'),\n parentId: z.string().optional().describe('Filter by parent work item ID'),\n assigneeId: z.string().optional().describe('Filter by assignee actor ID'),\n reporterId: z.string().optional().describe('Filter by reporter actor ID'),\n type: WorkItemTypeEnum.optional().describe('Filter by type'),\n status: WorkItemStatusEnum.optional().describe('Filter by status'),\n priority: WorkItemPriorityEnum.optional().describe('Filter by priority'),\n search: z.string().optional().describe('Free-text search across title/description'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'projectId',\n 'sprintId',\n 'parentId',\n 'assigneeId',\n 'reporterId',\n 'type',\n 'status',\n 'priority',\n 'search',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetWorkItems: Record<string, unknown>;\n }>(ops.LIST_WORKITEMS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetWorkItems);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_list failed', { error: String(error) });\n return errorResult(\n `Failed to list work items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_create')),\n {\n title: 'Create Work Item',\n description: 'Create a new work item under a project. `type` and `title` are required.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n title: z.string().min(1).describe('Work item title'),\n type: WorkItemTypeEnum.describe('Work item type'),\n description: z.string().optional().describe('Detailed description'),\n status: WorkItemStatusEnum.optional().describe('Initial status'),\n priority: WorkItemPriorityEnum.optional().describe('Priority level'),\n assigneeId: z.string().optional().describe('Assignee actor ID'),\n reporterId: z.string().optional().describe('Reporter actor ID'),\n parentId: z.string().optional().describe('Parent work item ID (for sub-tasks)'),\n sprintId: z.string().optional().describe('Sprint to place into'),\n storyPoints: z.number().int().optional().describe('Story points estimate'),\n estimateMinutes: z.number().int().optional().describe('Time estimate in minutes'),\n dueDate: z.string().optional().describe('Due date (ISO-8601 DateTime)'),\n sortOrder: z.number().int().optional().describe('Sort order within lists'),\n labels: z.array(z.string()).optional().describe('Labels'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n title: args.title,\n type: args.type,\n };\n for (const k of [\n 'description',\n 'status',\n 'priority',\n 'assigneeId',\n 'reporterId',\n 'parentId',\n 'sprintId',\n 'storyPoints',\n 'estimateMinutes',\n 'dueDate',\n 'sortOrder',\n 'labels',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateWorkItem: Record<string, unknown>;\n }>(ops.CREATE_WORKITEM, { input });\n return jsonResult(data.planmagnetCreateWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_create failed', { error: String(error) });\n return errorResult(\n `Failed to create work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_update')),\n {\n title: 'Update Work Item',\n description: 'Update a work item. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Work item ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n type: WorkItemTypeEnum.optional().describe('Updated type'),\n status: WorkItemStatusEnum.optional().describe('Updated status'),\n priority: WorkItemPriorityEnum.optional().describe('Updated priority'),\n assigneeId: z.string().optional().describe('Updated assignee'),\n reporterId: z.string().optional().describe('Updated reporter'),\n parentId: z.string().optional().describe('Updated parent'),\n sprintId: z.string().optional().describe('Updated sprint'),\n storyPoints: z.number().int().optional().describe('Updated story points'),\n estimateMinutes: z.number().int().optional().describe('Updated estimate minutes'),\n timeSpentMinutes: z.number().int().optional().describe('Updated time spent minutes'),\n dueDate: z.string().optional().describe('Updated due date (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n labels: z.array(z.string()).optional().describe('Updated labels'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable work-item field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateWorkItem: Record<string, unknown>;\n }>(ops.UPDATE_WORKITEM, { id, input });\n return jsonResult(data.planmagnetUpdateWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_update failed', { error: String(error) });\n return errorResult(\n `Failed to update work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_delete')),\n {\n title: 'Delete Work Item',\n description: 'Soft-delete a work item by ID.',\n inputSchema: { id: z.string().describe('Work item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteWorkItem: boolean }>(\n ops.DELETE_WORKITEM,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteWorkItem });\n } catch (error) {\n ctx.logger.error('planmagnet work_items_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_assign')),\n {\n title: 'Assign Work Item',\n description: 'Assign a work item to an actor.',\n inputSchema: {\n id: z.string().describe('Work item ID'),\n assigneeId: z.string().min(1).describe('Assignee actor ID'),\n },\n },\n async ({ id, assigneeId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetAssignWorkItem: Record<string, unknown>;\n }>(ops.ASSIGN_WORKITEM, { id, input: { assigneeId } });\n return jsonResult(data.planmagnetAssignWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_assign failed', { error: String(error) });\n return errorResult(\n `Failed to assign work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_bulk_update')),\n {\n title: 'Bulk Update Work Items',\n description:\n 'Update multiple work items at once (status/priority/assignee/sprint/labels) by their IDs.',\n inputSchema: {\n ids: z.array(z.string()).min(1).describe('Work item IDs to update'),\n status: WorkItemStatusEnum.optional().describe('New status'),\n priority: WorkItemPriorityEnum.optional().describe('New priority'),\n assigneeId: z.string().optional().describe('New assignee'),\n sprintId: z.string().optional().describe('New sprint'),\n labels: z.array(z.string()).optional().describe('New labels'),\n },\n },\n async ({ ids, status, priority, assigneeId, sprintId, labels }) => {\n try {\n const input: Record<string, unknown> = { ids };\n if (status !== undefined) input.status = status;\n if (priority !== undefined) input.priority = priority;\n if (assigneeId !== undefined) input.assigneeId = assigneeId;\n if (sprintId !== undefined) input.sprintId = sprintId;\n if (labels !== undefined) input.labels = labels;\n const data = await ctx.gql.workspace.request<{\n planmagnetBulkUpdateWorkItems: Array<Record<string, unknown>>;\n }>(ops.BULK_UPDATE_WORKITEMS, { input });\n return jsonResult(data.planmagnetBulkUpdateWorkItems);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_bulk_update failed', { error: String(error) });\n return errorResult(\n `Failed to bulk update work items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_items_move')),\n {\n title: 'Move Work Item',\n description: 'Move a work item to a different status, sprint, and/or position.',\n inputSchema: {\n id: z.string().describe('Work item ID'),\n status: WorkItemStatusEnum.optional().describe('Target status'),\n sprintId: z.string().optional().describe('Target sprint ID'),\n sortOrder: z.number().int().optional().describe('Target sort order'),\n },\n },\n async ({ id, status, sprintId, sortOrder }) => {\n try {\n const input: Record<string, unknown> = {};\n if (status !== undefined) input.status = status;\n if (sprintId !== undefined) input.sprintId = sprintId;\n if (sortOrder !== undefined) input.sortOrder = sortOrder;\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No move specified — provide at least one of status/sprintId/sortOrder',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetMoveWorkItem: Record<string, unknown>;\n }>(ops.MOVE_WORKITEM, { id, input });\n return jsonResult(data.planmagnetMoveWorkItem);\n } catch (error) {\n ctx.logger.error('planmagnet work_items_move failed', { error: String(error) });\n return errorResult(\n `Failed to move work item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet sprint tools — time-boxed iterations + their lifecycle.\n *\n * Surface (10): sprints_{get,list,create,update,delete,start,complete,cancel,\n * add_work_items,remove_work_items}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, SprintStatusEnum, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerSprintTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_get')),\n {\n title: 'Get Sprint',\n description: 'Fetch a single sprint by ID.',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetSprint: Record<string, unknown> | null;\n }>(ops.GET_SPRINT, { id });\n if (!data.planmagnetSprint) return errorResult(`Sprint ${id} not found`);\n return jsonResult(data.planmagnetSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_get failed', { error: String(error) });\n return errorResult(\n `Failed to get sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_list')),\n {\n title: 'List Sprints',\n description: 'List sprints in a workspace with optional project/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n status: SprintStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetSprints: Record<string, unknown>;\n }>(ops.LIST_SPRINTS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetSprints);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_list failed', { error: String(error) });\n return errorResult(\n `Failed to list sprints: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_create')),\n {\n title: 'Create Sprint',\n description: 'Create a new sprint under a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Sprint name'),\n goal: z.string().optional().describe('Sprint goal'),\n capacity: z.number().int().optional().describe('Sprint capacity in story points'),\n startDate: z.string().optional().describe('Sprint start date (ISO-8601)'),\n endDate: z.string().optional().describe('Sprint end date (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { projectId: args.projectId, name: args.name };\n for (const k of [\n 'goal',\n 'capacity',\n 'startDate',\n 'endDate',\n 'sortOrder',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateSprint: Record<string, unknown>;\n }>(ops.CREATE_SPRINT, { input });\n return jsonResult(data.planmagnetCreateSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_create failed', { error: String(error) });\n return errorResult(\n `Failed to create sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_update')),\n {\n title: 'Update Sprint',\n description: 'Update a sprint. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Sprint ID'),\n name: z.string().optional().describe('Updated name'),\n goal: z.string().optional().describe('Updated goal'),\n capacity: z.number().int().optional().describe('Updated capacity'),\n velocity: z.number().int().optional().describe('Updated velocity (completed story points)'),\n startDate: z.string().optional().describe('Updated start date'),\n endDate: z.string().optional().describe('Updated end date'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable sprint field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateSprint: Record<string, unknown>;\n }>(ops.UPDATE_SPRINT, { id, input });\n return jsonResult(data.planmagnetUpdateSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_update failed', { error: String(error) });\n return errorResult(\n `Failed to update sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_delete')),\n {\n title: 'Delete Sprint',\n description: 'Soft-delete a sprint by ID.',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteSprint: boolean }>(\n ops.DELETE_SPRINT,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteSprint });\n } catch (error) {\n ctx.logger.error('planmagnet sprints_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_start')),\n {\n title: 'Start Sprint',\n description: 'Start a sprint (transition to ACTIVE).',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetStartSprint: Record<string, unknown>;\n }>(ops.START_SPRINT, { id });\n return jsonResult(data.planmagnetStartSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_start failed', { error: String(error) });\n return errorResult(\n `Failed to start sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_complete')),\n {\n title: 'Complete Sprint',\n description: 'Complete a sprint (transition to COMPLETED).',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCompleteSprint: Record<string, unknown>;\n }>(ops.COMPLETE_SPRINT, { id });\n return jsonResult(data.planmagnetCompleteSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_complete failed', { error: String(error) });\n return errorResult(\n `Failed to complete sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_cancel')),\n {\n title: 'Cancel Sprint',\n description: 'Cancel a sprint (transition to CANCELLED).',\n inputSchema: { id: z.string().describe('Sprint ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCancelSprint: Record<string, unknown>;\n }>(ops.CANCEL_SPRINT, { id });\n return jsonResult(data.planmagnetCancelSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_cancel failed', { error: String(error) });\n return errorResult(\n `Failed to cancel sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_add_work_items')),\n {\n title: 'Add Work Items to Sprint',\n description: 'Add one or more work items to a sprint.',\n inputSchema: {\n id: z.string().describe('Sprint ID'),\n workItemIds: z.array(z.string()).min(1).describe('Work item IDs to add'),\n },\n },\n async ({ id, workItemIds }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetAddWorkItemsToSprint: Record<string, unknown>;\n }>(ops.ADD_WORKITEMS_TO_SPRINT, { id, input: { workItemIds } });\n return jsonResult(data.planmagnetAddWorkItemsToSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_add_work_items failed', { error: String(error) });\n return errorResult(\n `Failed to add work items to sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sprints_remove_work_items')),\n {\n title: 'Remove Work Items from Sprint',\n description: 'Remove one or more work items from a sprint.',\n inputSchema: {\n id: z.string().describe('Sprint ID'),\n workItemIds: z.array(z.string()).min(1).describe('Work item IDs to remove'),\n },\n },\n async ({ id, workItemIds }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRemoveWorkItemsFromSprint: Record<string, unknown>;\n }>(ops.REMOVE_WORKITEMS_FROM_SPRINT, { id, input: { workItemIds } });\n return jsonResult(data.planmagnetRemoveWorkItemsFromSprint);\n } catch (error) {\n ctx.logger.error('planmagnet sprints_remove_work_items failed', { error: String(error) });\n return errorResult(\n `Failed to remove work items from sprint: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet board + column tools — visual kanban/scrum boards.\n *\n * Surface (10): boards_{get,list,create,update,delete,move_card,reorder_columns},\n * boards_{create,update,delete}_column.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n BoardTypeEnum,\n BoardColumnTypeEnum,\n WorkItemStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerBoardTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_get')),\n {\n title: 'Get Board',\n description: 'Fetch a single board by ID, including its columns.',\n inputSchema: { id: z.string().describe('Board ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetBoard: Record<string, unknown> | null;\n }>(ops.GET_BOARD, { id });\n if (!data.planmagnetBoard) return errorResult(`Board ${id} not found`);\n return jsonResult(data.planmagnetBoard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_get failed', { error: String(error) });\n return errorResult(\n `Failed to get board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_list')),\n {\n title: 'List Boards',\n description: 'List boards in a workspace with optional project/type/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n type: BoardTypeEnum.optional().describe('Filter by board type'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, type, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (type !== undefined) filter.type = type;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{ planmagnetBoards: Record<string, unknown> }>(\n ops.LIST_BOARDS,\n {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n },\n );\n return jsonResult(data.planmagnetBoards);\n } catch (error) {\n ctx.logger.error('planmagnet boards_list failed', { error: String(error) });\n return errorResult(\n `Failed to list boards: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_create')),\n {\n title: 'Create Board',\n description: 'Create a new board under a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Board name'),\n type: BoardTypeEnum.describe('Board type (KANBAN/SCRUM/CUSTOM)'),\n description: z.string().optional().describe('Board description'),\n isDefault: z.boolean().optional().describe('Set as the default board for the project'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n type: args.type,\n };\n for (const k of ['description', 'isDefault', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateBoard: Record<string, unknown>;\n }>(ops.CREATE_BOARD, { input });\n return jsonResult(data.planmagnetCreateBoard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_create failed', { error: String(error) });\n return errorResult(\n `Failed to create board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_update')),\n {\n title: 'Update Board',\n description: 'Update a board. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Board ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n type: BoardTypeEnum.optional().describe('Updated type'),\n isDefault: z.boolean().optional().describe('Updated default flag'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable board field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateBoard: Record<string, unknown>;\n }>(ops.UPDATE_BOARD, { id, input });\n return jsonResult(data.planmagnetUpdateBoard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_update failed', { error: String(error) });\n return errorResult(\n `Failed to update board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_delete')),\n {\n title: 'Delete Board',\n description: 'Delete a board by ID.',\n inputSchema: { id: z.string().describe('Board ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteBoard: boolean }>(\n ops.DELETE_BOARD,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteBoard });\n } catch (error) {\n ctx.logger.error('planmagnet boards_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete board: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_move_card')),\n {\n title: 'Move Board Card',\n description: 'Move a card (work item) to a different column and/or position on a board.',\n inputSchema: {\n boardId: z.string().describe('Board ID'),\n workItemId: z.string().describe('Work item (card) ID'),\n targetColumnId: z.string().describe('Destination column ID'),\n sortOrder: z.number().int().optional().describe('Target position within the column'),\n },\n },\n async ({ boardId, workItemId, targetColumnId, sortOrder }) => {\n try {\n const input: Record<string, unknown> = { workItemId, targetColumnId };\n if (sortOrder !== undefined) input.sortOrder = sortOrder;\n const data = await ctx.gql.workspace.request<{\n planmagnetMoveCard: Record<string, unknown>;\n }>(ops.MOVE_CARD, { boardId, input });\n return jsonResult(data.planmagnetMoveCard);\n } catch (error) {\n ctx.logger.error('planmagnet boards_move_card failed', { error: String(error) });\n return errorResult(\n `Failed to move card: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_reorder_columns')),\n {\n title: 'Reorder Board Columns',\n description:\n 'Reorder the columns on a board by supplying the new ordered list of column IDs.',\n inputSchema: {\n boardId: z.string().describe('Board ID'),\n columnIds: z.array(z.string()).min(1).describe('Ordered column IDs (new order)'),\n },\n },\n async ({ boardId, columnIds }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetReorderColumns: Record<string, unknown>;\n }>(ops.REORDER_COLUMNS, { boardId, input: { columnIds } });\n return jsonResult(data.planmagnetReorderColumns);\n } catch (error) {\n ctx.logger.error('planmagnet boards_reorder_columns failed', { error: String(error) });\n return errorResult(\n `Failed to reorder columns: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_create_column')),\n {\n title: 'Create Board Column',\n description: 'Create a column on a board representing a workflow stage.',\n inputSchema: {\n boardId: z.string().min(1).describe('Parent board ID'),\n name: z.string().min(1).describe('Column name'),\n type: BoardColumnTypeEnum.describe('Column type (TODO/IN_PROGRESS/DONE/CUSTOM)'),\n mappedStatus: WorkItemStatusEnum.optional().describe(\n 'Work-item status this column maps to',\n ),\n sortOrder: z.number().int().optional().describe('Sort order within the board'),\n wipLimit: z.number().int().optional().describe('Work-in-progress limit (0 = unlimited)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n boardId: args.boardId,\n name: args.name,\n type: args.type,\n };\n for (const k of ['mappedStatus', 'sortOrder', 'wipLimit', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateBoardColumn: Record<string, unknown>;\n }>(ops.CREATE_BOARD_COLUMN, { input });\n return jsonResult(data.planmagnetCreateBoardColumn);\n } catch (error) {\n ctx.logger.error('planmagnet boards_create_column failed', { error: String(error) });\n return errorResult(\n `Failed to create board column: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_update_column')),\n {\n title: 'Update Board Column',\n description: 'Update a board column. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Board column ID'),\n name: z.string().optional().describe('Updated name'),\n type: BoardColumnTypeEnum.optional().describe('Updated type'),\n mappedStatus: WorkItemStatusEnum.optional().describe('Updated mapped status'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n wipLimit: z.number().int().optional().describe('Updated WIP limit'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable column field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateBoardColumn: Record<string, unknown>;\n }>(ops.UPDATE_BOARD_COLUMN, { id, input });\n return jsonResult(data.planmagnetUpdateBoardColumn);\n } catch (error) {\n ctx.logger.error('planmagnet boards_update_column failed', { error: String(error) });\n return errorResult(\n `Failed to update board column: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'boards_delete_column')),\n {\n title: 'Delete Board Column',\n description: 'Delete a board column by ID.',\n inputSchema: { id: z.string().describe('Board column ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteBoardColumn: boolean }>(\n ops.DELETE_BOARD_COLUMN,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteBoardColumn });\n } catch (error) {\n ctx.logger.error('planmagnet boards_delete_column failed', { error: String(error) });\n return errorResult(\n `Failed to delete board column: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet milestone tools — project timeline checkpoints.\n *\n * Surface (5): milestones_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n MilestoneStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerMilestoneTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_get')),\n {\n title: 'Get Milestone',\n description: 'Fetch a single milestone by ID.',\n inputSchema: { id: z.string().describe('Milestone ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetMilestone: Record<string, unknown> | null;\n }>(ops.GET_MILESTONE, { id });\n if (!data.planmagnetMilestone) return errorResult(`Milestone ${id} not found`);\n return jsonResult(data.planmagnetMilestone);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_get failed', { error: String(error) });\n return errorResult(\n `Failed to get milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_list')),\n {\n title: 'List Milestones',\n description:\n 'List milestones in a workspace with optional project/owner/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n ownerId: z.string().optional().describe('Filter by owner'),\n status: MilestoneStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, ownerId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetMilestones: Record<string, unknown>;\n }>(ops.LIST_MILESTONES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetMilestones);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_list failed', { error: String(error) });\n return errorResult(\n `Failed to list milestones: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_create')),\n {\n title: 'Create Milestone',\n description: 'Create a new milestone under a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Milestone name'),\n description: z.string().optional().describe('Description'),\n status: MilestoneStatusEnum.optional().describe('Initial status'),\n ownerId: z.string().optional().describe('Owner actor ID'),\n dueDate: z.string().optional().describe('Target due date (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n tags: z.array(z.string()).optional().describe('Legacy string tags'),\n tagsV2: JsonObject.optional().describe('Canonical universal-tag JSON'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { projectId: args.projectId, name: args.name };\n for (const k of [\n 'description',\n 'status',\n 'ownerId',\n 'dueDate',\n 'sortOrder',\n 'tags',\n 'tagsV2',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateMilestone: Record<string, unknown>;\n }>(ops.CREATE_MILESTONE, { input });\n return jsonResult(data.planmagnetCreateMilestone);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_create failed', { error: String(error) });\n return errorResult(\n `Failed to create milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_update')),\n {\n title: 'Update Milestone',\n description: 'Update a milestone. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Milestone ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n status: MilestoneStatusEnum.optional().describe('Updated status'),\n ownerId: z.string().optional().describe('Updated owner'),\n dueDate: z.string().optional().describe('Updated due date'),\n completedAt: z.string().optional().describe('Completion timestamp (ISO-8601)'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n tags: z.array(z.string()).optional().describe('Updated legacy tags'),\n tagsV2: JsonObject.optional().describe('Updated universal-tag JSON'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable milestone field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateMilestone: Record<string, unknown>;\n }>(ops.UPDATE_MILESTONE, { id, input });\n return jsonResult(data.planmagnetUpdateMilestone);\n } catch (error) {\n ctx.logger.error('planmagnet milestones_update failed', { error: String(error) });\n return errorResult(\n `Failed to update milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'milestones_delete')),\n {\n title: 'Delete Milestone',\n description: 'Delete a milestone by ID.',\n inputSchema: { id: z.string().describe('Milestone ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteMilestone: boolean }>(\n ops.DELETE_MILESTONE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteMilestone });\n } catch (error) {\n ctx.logger.error('planmagnet milestones_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete milestone: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet work-item dependency tools — typed relationships between\n * work items (blocks, blocked_by, relates_to, …).\n *\n * Surface (5): dependencies_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n DependencyTypeEnum,\n DependencyStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerDependencyTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_get')),\n {\n title: 'Get Dependency',\n description: 'Fetch a single work-item dependency by ID.',\n inputSchema: { id: z.string().describe('Dependency ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetDependency: Record<string, unknown> | null;\n }>(ops.GET_DEPENDENCY, { id });\n if (!data.planmagnetDependency) return errorResult(`Dependency ${id} not found`);\n return jsonResult(data.planmagnetDependency);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_get failed', { error: String(error) });\n return errorResult(\n `Failed to get dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_list')),\n {\n title: 'List Dependencies',\n description:\n 'List work-item dependencies in a workspace with optional source/target/type/status filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n sourceWorkItemId: z.string().optional().describe('Filter by source work item ID'),\n targetWorkItemId: z.string().optional().describe('Filter by target work item ID'),\n type: DependencyTypeEnum.optional().describe('Filter by dependency type'),\n status: DependencyStatusEnum.optional().describe('Filter by status'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, sourceWorkItemId, targetWorkItemId, type, status, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (sourceWorkItemId !== undefined) filter.sourceWorkItemId = sourceWorkItemId;\n if (targetWorkItemId !== undefined) filter.targetWorkItemId = targetWorkItemId;\n if (type !== undefined) filter.type = type;\n if (status !== undefined) filter.status = status;\n const data = await ctx.gql.workspace.request<{\n planmagnetDependencies: Record<string, unknown>;\n }>(ops.LIST_DEPENDENCIES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetDependencies);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_list failed', { error: String(error) });\n return errorResult(\n `Failed to list dependencies: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_create')),\n {\n title: 'Create Dependency',\n description: 'Create a typed dependency between two work items.',\n inputSchema: {\n sourceWorkItemId: z.string().min(1).describe('Source work item ID'),\n targetWorkItemId: z.string().min(1).describe('Target work item ID'),\n type: DependencyTypeEnum.describe('Dependency type'),\n description: z.string().optional().describe('Optional description'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ sourceWorkItemId, targetWorkItemId, type, description, metadata }) => {\n try {\n const input: Record<string, unknown> = { sourceWorkItemId, targetWorkItemId, type };\n if (description !== undefined) input.description = description;\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateDependency: Record<string, unknown>;\n }>(ops.CREATE_DEPENDENCY, { input });\n return jsonResult(data.planmagnetCreateDependency);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_create failed', { error: String(error) });\n return errorResult(\n `Failed to create dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_update')),\n {\n title: 'Update Dependency',\n description: 'Update a dependency. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Dependency ID'),\n type: DependencyTypeEnum.optional().describe('Updated type'),\n status: DependencyStatusEnum.optional().describe('Updated status'),\n description: z.string().optional().describe('Updated description'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable dependency field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateDependency: Record<string, unknown>;\n }>(ops.UPDATE_DEPENDENCY, { id, input });\n return jsonResult(data.planmagnetUpdateDependency);\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_update failed', { error: String(error) });\n return errorResult(\n `Failed to update dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dependencies_delete')),\n {\n title: 'Delete Dependency',\n description: 'Remove a dependency by ID.',\n inputSchema: { id: z.string().describe('Dependency ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteDependency: boolean }>(\n ops.DELETE_DEPENDENCY,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteDependency });\n } catch (error) {\n ctx.logger.error('planmagnet dependencies_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete dependency: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet budget + expense tools — project financial tracking.\n *\n * Surface (10): budgets_{get,list,create,update,delete,approve},\n * budgets_{list_expenses,log_expense,update_expense,delete_expense}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, BudgetStatusEnum, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerBudgetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_get')),\n {\n title: 'Get Budget',\n description: 'Fetch a single budget by ID.',\n inputSchema: { id: z.string().describe('Budget ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetBudget: Record<string, unknown> | null;\n }>(ops.GET_BUDGET, { id });\n if (!data.planmagnetBudget) return errorResult(`Budget ${id} not found`);\n return jsonResult(data.planmagnetBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_list')),\n {\n title: 'List Budgets',\n description: 'List budgets in a workspace with optional project/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n status: BudgetStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetBudgets: Record<string, unknown>;\n }>(ops.LIST_BUDGETS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetBudgets);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list budgets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_create')),\n {\n title: 'Create Budget',\n description: 'Create a new budget for a project.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Budget name'),\n currency: z.string().min(1).describe('Currency code (e.g. USD)'),\n plannedAmount: z.number().describe('Total planned amount'),\n description: z.string().optional().describe('Description'),\n periodStart: z.string().optional().describe('Budget period start (ISO-8601)'),\n periodEnd: z.string().optional().describe('Budget period end (ISO-8601)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n currency: args.currency,\n plannedAmount: args.plannedAmount,\n };\n for (const k of ['description', 'periodStart', 'periodEnd', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateBudget: Record<string, unknown>;\n }>(ops.CREATE_BUDGET, { input });\n return jsonResult(data.planmagnetCreateBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_update')),\n {\n title: 'Update Budget',\n description: 'Update a budget. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Budget ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n currency: z.string().optional().describe('Updated currency'),\n plannedAmount: z.number().optional().describe('Updated planned amount'),\n status: BudgetStatusEnum.optional().describe('Updated status'),\n periodStart: z.string().optional().describe('Updated period start'),\n periodEnd: z.string().optional().describe('Updated period end'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable budget field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateBudget: Record<string, unknown>;\n }>(ops.UPDATE_BUDGET, { id, input });\n return jsonResult(data.planmagnetUpdateBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_update failed', { error: String(error) });\n return errorResult(\n `Failed to update budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_delete')),\n {\n title: 'Delete Budget',\n description: 'Delete a budget by ID.',\n inputSchema: { id: z.string().describe('Budget ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteBudget: boolean }>(\n ops.DELETE_BUDGET,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteBudget });\n } catch (error) {\n ctx.logger.error('planmagnet budgets_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_approve')),\n {\n title: 'Approve Budget',\n description: 'Approve a budget by ID.',\n inputSchema: { id: z.string().describe('Budget ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetApproveBudget: Record<string, unknown>;\n }>(ops.APPROVE_BUDGET, { id });\n return jsonResult(data.planmagnetApproveBudget);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_approve failed', { error: String(error) });\n return errorResult(\n `Failed to approve budget: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_list_expenses')),\n {\n title: 'List Budget Expenses',\n description: 'List expenses logged against budgets in a workspace, with optional filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n budgetId: z.string().optional().describe('Filter by budget ID'),\n category: z.string().optional().describe('Filter by expense category'),\n dateFrom: z.string().optional().describe('Filter expenses on/after this date (ISO-8601)'),\n dateTo: z.string().optional().describe('Filter expenses on/before this date (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, budgetId, category, dateFrom, dateTo, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (budgetId !== undefined) filter.budgetId = budgetId;\n if (category !== undefined) filter.category = category;\n if (dateFrom !== undefined) filter.dateFrom = dateFrom;\n if (dateTo !== undefined) filter.dateTo = dateTo;\n const data = await ctx.gql.workspace.request<{\n planmagnetBudgetExpenses: Record<string, unknown>;\n }>(ops.LIST_BUDGET_EXPENSES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetBudgetExpenses);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_list_expenses failed', { error: String(error) });\n return errorResult(\n `Failed to list budget expenses: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_log_expense')),\n {\n title: 'Log Budget Expense',\n description: 'Log an expense against a budget.',\n inputSchema: {\n budgetId: z.string().min(1).describe('Parent budget ID'),\n amount: z.number().describe('Expense amount'),\n date: z.string().describe('Date of expense (ISO-8601 DateTime)'),\n description: z.string().min(1).describe('Expense description'),\n category: z.string().optional().describe('Expense category'),\n referenceUrl: z.string().optional().describe('Receipt or reference URL'),\n workItemId: z.string().optional().describe('Associated work item ID'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n budgetId: args.budgetId,\n amount: args.amount,\n date: args.date,\n description: args.description,\n };\n for (const k of ['category', 'referenceUrl', 'workItemId', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetLogExpense: Record<string, unknown>;\n }>(ops.LOG_EXPENSE, { input });\n return jsonResult(data.planmagnetLogExpense);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_log_expense failed', { error: String(error) });\n return errorResult(\n `Failed to log expense: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_update_expense')),\n {\n title: 'Update Budget Expense',\n description: 'Update a logged expense. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Expense ID'),\n amount: z.number().optional().describe('Updated amount'),\n date: z.string().optional().describe('Updated date (ISO-8601)'),\n description: z.string().optional().describe('Updated description'),\n category: z.string().optional().describe('Updated category'),\n referenceUrl: z.string().optional().describe('Updated reference URL'),\n workItemId: z.string().optional().describe('Updated associated work item'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable expense field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateExpense: Record<string, unknown>;\n }>(ops.UPDATE_EXPENSE, { id, input });\n return jsonResult(data.planmagnetUpdateExpense);\n } catch (error) {\n ctx.logger.error('planmagnet budgets_update_expense failed', { error: String(error) });\n return errorResult(\n `Failed to update expense: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'budgets_delete_expense')),\n {\n title: 'Delete Budget Expense',\n description: 'Delete a logged expense by ID.',\n inputSchema: { id: z.string().describe('Expense ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteExpense: boolean }>(\n ops.DELETE_EXPENSE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteExpense });\n } catch (error) {\n ctx.logger.error('planmagnet budgets_delete_expense failed', { error: String(error) });\n return errorResult(\n `Failed to delete expense: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet risk tools — project risk register + risk matrix.\n *\n * Surface (7): risks_{get,list,matrix,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n RiskSeverityEnum,\n RiskStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerRiskTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_get')),\n {\n title: 'Get Risk',\n description: 'Fetch a single risk by ID.',\n inputSchema: { id: z.string().describe('Risk ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRisk: Record<string, unknown> | null;\n }>(ops.GET_RISK, { id });\n if (!data.planmagnetRisk) return errorResult(`Risk ${id} not found`);\n return jsonResult(data.planmagnetRisk);\n } catch (error) {\n ctx.logger.error('planmagnet risks_get failed', { error: String(error) });\n return errorResult(\n `Failed to get risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_list')),\n {\n title: 'List Risks',\n description:\n 'List risks in a workspace with optional project/owner/category/severity/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n ownerId: z.string().optional().describe('Filter by owner'),\n category: z.string().optional().describe('Filter by category'),\n severity: RiskSeverityEnum.optional().describe('Filter by severity'),\n status: RiskStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'projectId',\n 'ownerId',\n 'category',\n 'severity',\n 'status',\n 'search',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{ planmagnetRisks: Record<string, unknown> }>(\n ops.LIST_RISKS,\n {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n },\n );\n return jsonResult(data.planmagnetRisks);\n } catch (error) {\n ctx.logger.error('planmagnet risks_list failed', { error: String(error) });\n return errorResult(\n `Failed to list risks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_matrix')),\n {\n title: 'Risk Matrix',\n description:\n 'Aggregated risk matrix for a project — distribution across likelihood and impact, plus counts by severity/status and average risk score.',\n inputSchema: { projectId: z.string().describe('Project ID') },\n },\n async ({ projectId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRiskMatrix: Record<string, unknown>;\n }>(ops.RISK_MATRIX, { projectId });\n return jsonResult(data.planmagnetRiskMatrix);\n } catch (error) {\n ctx.logger.error('planmagnet risks_matrix failed', { error: String(error) });\n return errorResult(\n `Failed to get risk matrix: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_create')),\n {\n title: 'Create Risk',\n description:\n 'Register a new risk. `impact` and `likelihood` are 1-5 scores; `severity` is required.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n title: z.string().min(1).describe('Risk title'),\n severity: RiskSeverityEnum.describe('Risk severity'),\n impact: z.number().int().min(1).max(5).describe('Impact score (1-5)'),\n likelihood: z.number().int().min(1).max(5).describe('Likelihood score (1-5)'),\n description: z.string().optional().describe('Detailed description'),\n category: z.string().optional().describe('Risk category'),\n ownerId: z.string().optional().describe('Owner actor ID responsible for mitigation'),\n mitigationPlan: z.string().optional().describe('Mitigation plan'),\n contingencyPlan: z.string().optional().describe('Contingency plan'),\n dueDate: z.string().optional().describe('Due date for mitigation (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n title: args.title,\n severity: args.severity,\n impact: args.impact,\n likelihood: args.likelihood,\n };\n for (const k of [\n 'description',\n 'category',\n 'ownerId',\n 'mitigationPlan',\n 'contingencyPlan',\n 'dueDate',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRisk: Record<string, unknown>;\n }>(ops.CREATE_RISK, { input });\n return jsonResult(data.planmagnetCreateRisk);\n } catch (error) {\n ctx.logger.error('planmagnet risks_create failed', { error: String(error) });\n return errorResult(\n `Failed to create risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_update')),\n {\n title: 'Update Risk',\n description: 'Update a risk. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Risk ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n category: z.string().optional().describe('Updated category'),\n severity: RiskSeverityEnum.optional().describe('Updated severity'),\n status: RiskStatusEnum.optional().describe('Updated status'),\n impact: z.number().int().min(1).max(5).optional().describe('Updated impact (1-5)'),\n likelihood: z.number().int().min(1).max(5).optional().describe('Updated likelihood (1-5)'),\n ownerId: z.string().optional().describe('Updated owner'),\n mitigationPlan: z.string().optional().describe('Updated mitigation plan'),\n contingencyPlan: z.string().optional().describe('Updated contingency plan'),\n dueDate: z.string().optional().describe('Updated due date'),\n resolvedAt: z.string().optional().describe('Resolution timestamp (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable risk field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRisk: Record<string, unknown>;\n }>(ops.UPDATE_RISK, { id, input });\n return jsonResult(data.planmagnetUpdateRisk);\n } catch (error) {\n ctx.logger.error('planmagnet risks_update failed', { error: String(error) });\n return errorResult(\n `Failed to update risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'risks_delete')),\n {\n title: 'Delete Risk',\n description: 'Delete a risk by ID.',\n inputSchema: { id: z.string().describe('Risk ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRisk: boolean }>(\n ops.DELETE_RISK,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRisk });\n } catch (error) {\n ctx.logger.error('planmagnet risks_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete risk: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet release tools — versioned deliverables bundling work items.\n *\n * Surface (5): releases_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, ReleaseStatusEnum, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerReleaseTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_get')),\n {\n title: 'Get Release',\n description: 'Fetch a single release by ID.',\n inputSchema: { id: z.string().describe('Release ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRelease: Record<string, unknown> | null;\n }>(ops.GET_RELEASE, { id });\n if (!data.planmagnetRelease) return errorResult(`Release ${id} not found`);\n return jsonResult(data.planmagnetRelease);\n } catch (error) {\n ctx.logger.error('planmagnet releases_get failed', { error: String(error) });\n return errorResult(\n `Failed to get release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_list')),\n {\n title: 'List Releases',\n description: 'List releases in a workspace with optional project/owner/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n ownerId: z.string().optional().describe('Filter by owner'),\n status: ReleaseStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, ownerId, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetReleases: Record<string, unknown>;\n }>(ops.LIST_RELEASES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetReleases);\n } catch (error) {\n ctx.logger.error('planmagnet releases_list failed', { error: String(error) });\n return errorResult(\n `Failed to list releases: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_create')),\n {\n title: 'Create Release',\n description: 'Create a new release for a project. `version` and `name` are required.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Release name'),\n version: z.string().min(1).describe('Release version (e.g. 1.2.0)'),\n description: z.string().optional().describe('Description'),\n status: ReleaseStatusEnum.optional().describe('Initial status'),\n ownerId: z.string().optional().describe('Owner actor ID'),\n plannedDate: z.string().optional().describe('Planned release date (ISO-8601)'),\n releaseNotes: z.string().optional().describe('Release notes (markdown)'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n version: args.version,\n };\n for (const k of [\n 'description',\n 'status',\n 'ownerId',\n 'plannedDate',\n 'releaseNotes',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRelease: Record<string, unknown>;\n }>(ops.CREATE_RELEASE, { input });\n return jsonResult(data.planmagnetCreateRelease);\n } catch (error) {\n ctx.logger.error('planmagnet releases_create failed', { error: String(error) });\n return errorResult(\n `Failed to create release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_update')),\n {\n title: 'Update Release',\n description: 'Update a release. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Release ID'),\n name: z.string().optional().describe('Updated name'),\n version: z.string().optional().describe('Updated version'),\n description: z.string().optional().describe('Updated description'),\n status: ReleaseStatusEnum.optional().describe('Updated status'),\n ownerId: z.string().optional().describe('Updated owner'),\n plannedDate: z.string().optional().describe('Updated planned date'),\n releasedAt: z.string().optional().describe('Actual release date (ISO-8601)'),\n releaseNotes: z.string().optional().describe('Updated release notes'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable release field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRelease: Record<string, unknown>;\n }>(ops.UPDATE_RELEASE, { id, input });\n return jsonResult(data.planmagnetUpdateRelease);\n } catch (error) {\n ctx.logger.error('planmagnet releases_update failed', { error: String(error) });\n return errorResult(\n `Failed to update release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'releases_delete')),\n {\n title: 'Delete Release',\n description: 'Delete a release by ID.',\n inputSchema: { id: z.string().describe('Release ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRelease: boolean }>(\n ops.DELETE_RELEASE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRelease });\n } catch (error) {\n ctx.logger.error('planmagnet releases_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete release: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet quality-gate tools — phase checkpoints that must be passed.\n *\n * Surface (6): quality_gates_{get,list,create,update,delete,review}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n QualityGateStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerQualityGateTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_get')),\n {\n title: 'Get Quality Gate',\n description: 'Fetch a single quality gate by ID.',\n inputSchema: { id: z.string().describe('Quality gate ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetQualityGate: Record<string, unknown> | null;\n }>(ops.GET_QUALITY_GATE, { id });\n if (!data.planmagnetQualityGate) return errorResult(`Quality gate ${id} not found`);\n return jsonResult(data.planmagnetQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_get failed', { error: String(error) });\n return errorResult(\n `Failed to get quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_list')),\n {\n title: 'List Quality Gates',\n description:\n 'List quality gates in a workspace with optional project/milestone/phase/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n milestoneId: z.string().optional().describe('Filter by linked milestone ID'),\n phase: z.string().optional().describe('Filter by phase'),\n status: QualityGateStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of ['projectId', 'milestoneId', 'phase', 'status', 'search'] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetQualityGates: Record<string, unknown>;\n }>(ops.LIST_QUALITY_GATES, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetQualityGates);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_list failed', { error: String(error) });\n return errorResult(\n `Failed to list quality gates: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_create')),\n {\n title: 'Create Quality Gate',\n description:\n 'Create a quality gate for a project. `criteria` is a JSON array of checks that must be met.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Gate name'),\n criteria: JsonValue.describe('Criteria JSON array (checks that must be met)'),\n description: z.string().optional().describe('Description'),\n milestoneId: z.string().optional().describe('Linked milestone ID'),\n phase: z.string().optional().describe('Phase or stage this gate belongs to'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n criteria: args.criteria,\n };\n for (const k of ['description', 'milestoneId', 'phase', 'sortOrder', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateQualityGate: Record<string, unknown>;\n }>(ops.CREATE_QUALITY_GATE, { input });\n return jsonResult(data.planmagnetCreateQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_create failed', { error: String(error) });\n return errorResult(\n `Failed to create quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_update')),\n {\n title: 'Update Quality Gate',\n description: 'Update a quality gate. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Quality gate ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n criteria: JsonValue.optional().describe('Updated criteria JSON array'),\n milestoneId: z.string().optional().describe('Updated linked milestone'),\n phase: z.string().optional().describe('Updated phase'),\n status: QualityGateStatusEnum.optional().describe('Updated status'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable quality-gate field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateQualityGate: Record<string, unknown>;\n }>(ops.UPDATE_QUALITY_GATE, { id, input });\n return jsonResult(data.planmagnetUpdateQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_update failed', { error: String(error) });\n return errorResult(\n `Failed to update quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_delete')),\n {\n title: 'Delete Quality Gate',\n description: 'Delete a quality gate by ID.',\n inputSchema: { id: z.string().describe('Quality gate ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteQualityGate: boolean }>(\n ops.DELETE_QUALITY_GATE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteQualityGate });\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'quality_gates_review')),\n {\n title: 'Review Quality Gate',\n description: 'Review a quality gate — pass, fail, or waive it, with optional review notes.',\n inputSchema: {\n id: z.string().describe('Quality gate ID'),\n status: QualityGateStatusEnum.describe('Review outcome (PASSED/FAILED/WAIVED/IN_REVIEW)'),\n reviewNotes: z.string().optional().describe('Review notes'),\n },\n },\n async ({ id, status, reviewNotes }) => {\n try {\n const input: Record<string, unknown> = { status };\n if (reviewNotes !== undefined) input.reviewNotes = reviewNotes;\n const data = await ctx.gql.workspace.request<{\n planmagnetReviewQualityGate: Record<string, unknown>;\n }>(ops.REVIEW_QUALITY_GATE, { id, input });\n return jsonResult(data.planmagnetReviewQualityGate);\n } catch (error) {\n ctx.logger.error('planmagnet quality_gates_review failed', { error: String(error) });\n return errorResult(\n `Failed to review quality gate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet roadmap + roadmap-item tools — strategic timeline visualization.\n *\n * Surface (10): roadmaps_{get,list,create,update,delete},\n * roadmaps_{get,list,create,update,delete}_item(s).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n RoadmapTypeEnum,\n RoadmapItemStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerRoadmapTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Roadmaps ───────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_get')),\n {\n title: 'Get Roadmap',\n description: 'Fetch a single roadmap by ID.',\n inputSchema: { id: z.string().describe('Roadmap ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmap: Record<string, unknown> | null;\n }>(ops.GET_ROADMAP, { id });\n if (!data.planmagnetRoadmap) return errorResult(`Roadmap ${id} not found`);\n return jsonResult(data.planmagnetRoadmap);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_get failed', { error: String(error) });\n return errorResult(\n `Failed to get roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_list')),\n {\n title: 'List Roadmaps',\n description: 'List roadmaps in a workspace with optional type/owner/public/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n type: RoadmapTypeEnum.optional().describe('Filter by roadmap type'),\n ownerId: z.string().optional().describe('Filter by owner'),\n isPublic: z.boolean().optional().describe('Filter by public/shared flag'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, type, ownerId, isPublic, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (type !== undefined) filter.type = type;\n if (ownerId !== undefined) filter.ownerId = ownerId;\n if (isPublic !== undefined) filter.isPublic = isPublic;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmaps: Record<string, unknown>;\n }>(ops.LIST_ROADMAPS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetRoadmaps);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_list failed', { error: String(error) });\n return errorResult(\n `Failed to list roadmaps: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_create')),\n {\n title: 'Create Roadmap',\n description: 'Create a new roadmap.',\n inputSchema: {\n name: z.string().min(1).describe('Roadmap name'),\n type: RoadmapTypeEnum.describe('Visualization type (TIMELINE/GANTT/SWIMLANE/CUSTOM)'),\n ownerId: z.string().min(1).describe('Owner actor ID'),\n description: z.string().optional().describe('Description'),\n isPublic: z.boolean().optional().describe('Whether the roadmap is publicly shared'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n name: args.name,\n type: args.type,\n ownerId: args.ownerId,\n };\n for (const k of ['description', 'isPublic', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRoadmap: Record<string, unknown>;\n }>(ops.CREATE_ROADMAP, { input });\n return jsonResult(data.planmagnetCreateRoadmap);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_create failed', { error: String(error) });\n return errorResult(\n `Failed to create roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_update')),\n {\n title: 'Update Roadmap',\n description: 'Update a roadmap. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Roadmap ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n type: RoadmapTypeEnum.optional().describe('Updated type'),\n isPublic: z.boolean().optional().describe('Updated public flag'),\n ownerId: z.string().optional().describe('Updated owner'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable roadmap field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRoadmap: Record<string, unknown>;\n }>(ops.UPDATE_ROADMAP, { id, input });\n return jsonResult(data.planmagnetUpdateRoadmap);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_update failed', { error: String(error) });\n return errorResult(\n `Failed to update roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_delete')),\n {\n title: 'Delete Roadmap',\n description: 'Delete a roadmap by ID.',\n inputSchema: { id: z.string().describe('Roadmap ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRoadmap: boolean }>(\n ops.DELETE_ROADMAP,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRoadmap });\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete roadmap: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Roadmap items ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_get_item')),\n {\n title: 'Get Roadmap Item',\n description: 'Fetch a single roadmap item by ID.',\n inputSchema: { id: z.string().describe('Roadmap item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmapItem: Record<string, unknown> | null;\n }>(ops.GET_ROADMAP_ITEM, { id });\n if (!data.planmagnetRoadmapItem) return errorResult(`Roadmap item ${id} not found`);\n return jsonResult(data.planmagnetRoadmapItem);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_get_item failed', { error: String(error) });\n return errorResult(\n `Failed to get roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_list_items')),\n {\n title: 'List Roadmap Items',\n description:\n 'List roadmap items in a workspace with optional roadmap/project/milestone/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n roadmapId: z.string().optional().describe('Filter by roadmap ID'),\n projectId: z.string().optional().describe('Filter by project ID'),\n milestoneId: z.string().optional().describe('Filter by milestone ID'),\n status: RoadmapItemStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of ['roadmapId', 'projectId', 'milestoneId', 'status', 'search'] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetRoadmapItems: Record<string, unknown>;\n }>(ops.LIST_ROADMAP_ITEMS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetRoadmapItems);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_list_items failed', { error: String(error) });\n return errorResult(\n `Failed to list roadmap items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_create_item')),\n {\n title: 'Create Roadmap Item',\n description: 'Add an item to a roadmap timeline.',\n inputSchema: {\n roadmapId: z.string().min(1).describe('Parent roadmap ID'),\n title: z.string().min(1).describe('Item title'),\n description: z.string().optional().describe('Description'),\n status: RoadmapItemStatusEnum.optional().describe('Initial status'),\n projectId: z.string().optional().describe('Linked project ID'),\n milestoneId: z.string().optional().describe('Linked milestone ID'),\n workItemId: z.string().optional().describe('Linked work item ID (typically an epic)'),\n startDate: z.string().optional().describe('Start date on timeline (ISO-8601)'),\n endDate: z.string().optional().describe('End date on timeline (ISO-8601)'),\n color: z.string().optional().describe('Color for visual display'),\n swimlane: z.string().optional().describe('Swimlane / row identifier'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { roadmapId: args.roadmapId, title: args.title };\n for (const k of [\n 'description',\n 'status',\n 'projectId',\n 'milestoneId',\n 'workItemId',\n 'startDate',\n 'endDate',\n 'color',\n 'swimlane',\n 'sortOrder',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateRoadmapItem: Record<string, unknown>;\n }>(ops.CREATE_ROADMAP_ITEM, { input });\n return jsonResult(data.planmagnetCreateRoadmapItem);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_create_item failed', { error: String(error) });\n return errorResult(\n `Failed to create roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_update_item')),\n {\n title: 'Update Roadmap Item',\n description: 'Update a roadmap item. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Roadmap item ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n status: RoadmapItemStatusEnum.optional().describe('Updated status'),\n projectId: z.string().optional().describe('Updated project link'),\n milestoneId: z.string().optional().describe('Updated milestone link'),\n workItemId: z.string().optional().describe('Updated work-item link'),\n startDate: z.string().optional().describe('Updated start date'),\n endDate: z.string().optional().describe('Updated end date'),\n color: z.string().optional().describe('Updated color'),\n swimlane: z.string().optional().describe('Updated swimlane'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable roadmap-item field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateRoadmapItem: Record<string, unknown>;\n }>(ops.UPDATE_ROADMAP_ITEM, { id, input });\n return jsonResult(data.planmagnetUpdateRoadmapItem);\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_update_item failed', { error: String(error) });\n return errorResult(\n `Failed to update roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'roadmaps_delete_item')),\n {\n title: 'Delete Roadmap Item',\n description: 'Delete a roadmap item by ID.',\n inputSchema: { id: z.string().describe('Roadmap item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteRoadmapItem: boolean }>(\n ops.DELETE_ROADMAP_ITEM,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteRoadmapItem });\n } catch (error) {\n ctx.logger.error('planmagnet roadmaps_delete_item failed', { error: String(error) });\n return errorResult(\n `Failed to delete roadmap item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet time-tracking tools — time entries + timesheets.\n *\n * Surface (12): time_entries_{get,list,create,update,delete,log},\n * timesheets_{get,list,create,submit,approve,reject}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n BillingTypeEnum,\n TimeEntryStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerTimeTrackingTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Time entries ───────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_get')),\n {\n title: 'Get Time Entry',\n description: 'Fetch a single time entry by ID.',\n inputSchema: { id: z.string().describe('Time entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetTimeEntry: Record<string, unknown> | null;\n }>(ops.GET_TIME_ENTRY, { id });\n if (!data.planmagnetTimeEntry) return errorResult(`Time entry ${id} not found`);\n return jsonResult(data.planmagnetTimeEntry);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_get failed', { error: String(error) });\n return errorResult(\n `Failed to get time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_list')),\n {\n title: 'List Time Entries',\n description:\n 'List time entries in a workspace with optional project/work-item/user/timesheet/billing/status/date filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n workItemId: z.string().optional().describe('Filter by work item ID'),\n userId: z.string().optional().describe('Filter by user actor ID'),\n timesheetId: z.string().optional().describe('Filter by timesheet ID'),\n billingType: BillingTypeEnum.optional().describe('Filter by billing type'),\n status: TimeEntryStatusEnum.optional().describe('Filter by status'),\n dateFrom: z.string().optional().describe('On/after date (ISO-8601)'),\n dateTo: z.string().optional().describe('On/before date (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'projectId',\n 'workItemId',\n 'userId',\n 'timesheetId',\n 'billingType',\n 'status',\n 'dateFrom',\n 'dateTo',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetTimeEntries: Record<string, unknown>;\n }>(ops.LIST_TIME_ENTRIES, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetTimeEntries);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_list failed', { error: String(error) });\n return errorResult(\n `Failed to list time entries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_create')),\n {\n title: 'Create Time Entry',\n description: 'Create a detailed time entry against a work item.',\n inputSchema: {\n projectId: z.string().min(1).describe('Project ID'),\n workItemId: z.string().min(1).describe('Work item this time is logged against'),\n date: z.string().describe('Date the work was performed (ISO-8601 DateTime)'),\n durationMinutes: z.number().int().describe('Duration in minutes'),\n description: z.string().optional().describe('Description of work performed'),\n billingType: BillingTypeEnum.optional().describe('Billing type'),\n billingRate: z.number().optional().describe('Billing rate per hour'),\n startTime: z.string().optional().describe('Start time (ISO-8601, clock-in/out)'),\n endTime: z.string().optional().describe('End time (ISO-8601, clock-in/out)'),\n timesheetId: z.string().optional().describe('Timesheet to attach this entry to'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n workItemId: args.workItemId,\n date: args.date,\n durationMinutes: args.durationMinutes,\n };\n for (const k of [\n 'description',\n 'billingType',\n 'billingRate',\n 'startTime',\n 'endTime',\n 'timesheetId',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateTimeEntry: Record<string, unknown>;\n }>(ops.CREATE_TIME_ENTRY, { input });\n return jsonResult(data.planmagnetCreateTimeEntry);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_create failed', { error: String(error) });\n return errorResult(\n `Failed to create time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_update')),\n {\n title: 'Update Time Entry',\n description: 'Update a time entry. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Time entry ID'),\n date: z.string().optional().describe('Updated date'),\n durationMinutes: z.number().int().optional().describe('Updated duration in minutes'),\n description: z.string().optional().describe('Updated description'),\n billingType: BillingTypeEnum.optional().describe('Updated billing type'),\n billingRate: z.number().optional().describe('Updated billing rate'),\n startTime: z.string().optional().describe('Updated start time'),\n endTime: z.string().optional().describe('Updated end time'),\n status: TimeEntryStatusEnum.optional().describe('Updated status'),\n workItemId: z.string().optional().describe('Updated work item'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable time-entry field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateTimeEntry: Record<string, unknown>;\n }>(ops.UPDATE_TIME_ENTRY, { id, input });\n return jsonResult(data.planmagnetUpdateTimeEntry);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_update failed', { error: String(error) });\n return errorResult(\n `Failed to update time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_delete')),\n {\n title: 'Delete Time Entry',\n description: 'Delete a time entry by ID.',\n inputSchema: { id: z.string().describe('Time entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteTimeEntry: boolean }>(\n ops.DELETE_TIME_ENTRY,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteTimeEntry });\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_entries_log')),\n {\n title: 'Quick Log Time',\n description: 'Quickly log time against a work item (lighter-weight than a full time entry).',\n inputSchema: {\n projectId: z.string().min(1).describe('Project ID'),\n workItemId: z.string().min(1).describe('Work item ID'),\n date: z.string().describe('Date (ISO-8601 DateTime)'),\n durationMinutes: z.number().int().describe('Duration in minutes'),\n description: z.string().optional().describe('Description'),\n billingType: BillingTypeEnum.optional().describe('Billing type'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n workItemId: args.workItemId,\n date: args.date,\n durationMinutes: args.durationMinutes,\n };\n for (const k of ['description', 'billingType', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetLogTime: Record<string, unknown>;\n }>(ops.LOG_TIME, { input });\n return jsonResult(data.planmagnetLogTime);\n } catch (error) {\n ctx.logger.error('planmagnet time_entries_log failed', { error: String(error) });\n return errorResult(\n `Failed to log time: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Timesheets ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_get')),\n {\n title: 'Get Timesheet',\n description: 'Fetch a single timesheet by ID, including its entries.',\n inputSchema: { id: z.string().describe('Timesheet ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetTimesheet: Record<string, unknown> | null;\n }>(ops.GET_TIMESHEET, { id });\n if (!data.planmagnetTimesheet) return errorResult(`Timesheet ${id} not found`);\n return jsonResult(data.planmagnetTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_list')),\n {\n title: 'List Timesheets',\n description: 'List timesheets in a workspace with optional user/status/period filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n userId: z.string().optional().describe('Filter by user actor ID'),\n status: TimeEntryStatusEnum.optional().describe('Filter by status'),\n periodStart: z.string().optional().describe('Filter by period start (ISO-8601)'),\n periodEnd: z.string().optional().describe('Filter by period end (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, userId, status, periodStart, periodEnd, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (userId !== undefined) filter.userId = userId;\n if (status !== undefined) filter.status = status;\n if (periodStart !== undefined) filter.periodStart = periodStart;\n if (periodEnd !== undefined) filter.periodEnd = periodEnd;\n const data = await ctx.gql.workspace.request<{\n planmagnetTimesheets: Record<string, unknown>;\n }>(ops.LIST_TIMESHEETS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetTimesheets);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list timesheets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_create')),\n {\n title: 'Create Timesheet',\n description: 'Create a timesheet for a time period (for the calling user).',\n inputSchema: {\n periodStart: z.string().describe('Period start date (ISO-8601 DateTime)'),\n periodEnd: z.string().describe('Period end date (ISO-8601 DateTime)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ periodStart, periodEnd, metadata }) => {\n try {\n const input: Record<string, unknown> = { periodStart, periodEnd };\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateTimesheet: Record<string, unknown>;\n }>(ops.CREATE_TIMESHEET, { input });\n return jsonResult(data.planmagnetCreateTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_submit')),\n {\n title: 'Submit Timesheet',\n description: 'Submit a timesheet for approval.',\n inputSchema: { id: z.string().describe('Timesheet ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetSubmitTimesheet: Record<string, unknown>;\n }>(ops.SUBMIT_TIMESHEET, { id });\n return jsonResult(data.planmagnetSubmitTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_submit failed', { error: String(error) });\n return errorResult(\n `Failed to submit timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_approve')),\n {\n title: 'Approve Timesheet',\n description: 'Approve a submitted timesheet.',\n inputSchema: { id: z.string().describe('Timesheet ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetApproveTimesheet: Record<string, unknown>;\n }>(ops.APPROVE_TIMESHEET, { id });\n return jsonResult(data.planmagnetApproveTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_approve failed', { error: String(error) });\n return errorResult(\n `Failed to approve timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timesheets_reject')),\n {\n title: 'Reject Timesheet',\n description: 'Reject a submitted timesheet, with an optional reason.',\n inputSchema: {\n id: z.string().describe('Timesheet ID'),\n reason: z.string().optional().describe('Rejection reason'),\n },\n },\n async ({ id, reason }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRejectTimesheet: Record<string, unknown>;\n }>(ops.REJECT_TIMESHEET, { id, reason });\n return jsonResult(data.planmagnetRejectTimesheet);\n } catch (error) {\n ctx.logger.error('planmagnet timesheets_reject failed', { error: String(error) });\n return errorResult(\n `Failed to reject timesheet: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet automation tools — rules + executions.\n *\n * Surface (8): automation_{get,list,create,update,delete,toggle,execute},\n * automation_list_executions.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n AutomationStatusEnum,\n AutomationTriggerTypeEnum,\n AutomationExecutionStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerAutomationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_get')),\n {\n title: 'Get Automation Rule',\n description: 'Fetch a single automation rule by ID.',\n inputSchema: { id: z.string().describe('Automation rule ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetAutomationRule: Record<string, unknown> | null;\n }>(ops.GET_AUTOMATION_RULE, { id });\n if (!data.planmagnetAutomationRule) return errorResult(`Automation rule ${id} not found`);\n return jsonResult(data.planmagnetAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_get failed', { error: String(error) });\n return errorResult(\n `Failed to get automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_list')),\n {\n title: 'List Automation Rules',\n description:\n 'List automation rules in a workspace with optional project/trigger-type/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n triggerType: AutomationTriggerTypeEnum.optional().describe('Filter by trigger type'),\n status: AutomationStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, triggerType, status, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (triggerType !== undefined) filter.triggerType = triggerType;\n if (status !== undefined) filter.status = status;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetAutomationRules: Record<string, unknown>;\n }>(ops.LIST_AUTOMATION_RULES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetAutomationRules);\n } catch (error) {\n ctx.logger.error('planmagnet automation_list failed', { error: String(error) });\n return errorResult(\n `Failed to list automation rules: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_create')),\n {\n title: 'Create Automation Rule',\n description:\n 'Create an automation rule. `triggerConfig` and `actions` are JSON; `conditions` is an optional JSON array.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Rule name'),\n triggerType: AutomationTriggerTypeEnum.describe('Trigger type'),\n triggerConfig: JsonValue.describe('Trigger configuration JSON'),\n actions: JsonValue.describe('Actions to execute (JSON array)'),\n conditions: JsonValue.optional().describe('Conditions that must be met (JSON array)'),\n description: z.string().optional().describe('Rule description'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n triggerType: args.triggerType,\n triggerConfig: args.triggerConfig,\n actions: args.actions,\n };\n for (const k of ['conditions', 'description', 'sortOrder', 'metadata'] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateAutomationRule: Record<string, unknown>;\n }>(ops.CREATE_AUTOMATION_RULE, { input });\n return jsonResult(data.planmagnetCreateAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_create failed', { error: String(error) });\n return errorResult(\n `Failed to create automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_update')),\n {\n title: 'Update Automation Rule',\n description: 'Update an automation rule. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Automation rule ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n triggerType: AutomationTriggerTypeEnum.optional().describe('Updated trigger type'),\n triggerConfig: JsonValue.optional().describe('Updated trigger configuration JSON'),\n actions: JsonValue.optional().describe('Updated actions JSON array'),\n conditions: JsonValue.optional().describe('Updated conditions JSON array'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable automation field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateAutomationRule: Record<string, unknown>;\n }>(ops.UPDATE_AUTOMATION_RULE, { id, input });\n return jsonResult(data.planmagnetUpdateAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_update failed', { error: String(error) });\n return errorResult(\n `Failed to update automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_delete')),\n {\n title: 'Delete Automation Rule',\n description: 'Delete an automation rule by ID.',\n inputSchema: { id: z.string().describe('Automation rule ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteAutomationRule: boolean }>(\n ops.DELETE_AUTOMATION_RULE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteAutomationRule });\n } catch (error) {\n ctx.logger.error('planmagnet automation_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_toggle')),\n {\n title: 'Toggle Automation Rule',\n description: 'Activate or pause an automation rule by setting its status.',\n inputSchema: {\n id: z.string().describe('Automation rule ID'),\n status: AutomationStatusEnum.describe('New status (ACTIVE/PAUSED/DISABLED/ERROR)'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetToggleAutomationRule: Record<string, unknown>;\n }>(ops.TOGGLE_AUTOMATION_RULE, { id, status });\n return jsonResult(data.planmagnetToggleAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_toggle failed', { error: String(error) });\n return errorResult(\n `Failed to toggle automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_execute')),\n {\n title: 'Execute Automation Rule',\n description: 'Manually execute an automation rule with optional trigger data.',\n inputSchema: {\n id: z.string().describe('Automation rule ID'),\n triggerData: JsonObject.optional().describe('Trigger data JSON to drive the execution'),\n },\n },\n async ({ id, triggerData }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetExecuteAutomationRule: Record<string, unknown>;\n }>(ops.EXECUTE_AUTOMATION_RULE, { id, triggerData });\n return jsonResult(data.planmagnetExecuteAutomationRule);\n } catch (error) {\n ctx.logger.error('planmagnet automation_execute failed', { error: String(error) });\n return errorResult(\n `Failed to execute automation rule: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'automation_list_executions')),\n {\n title: 'List Automation Executions',\n description:\n 'List automation rule executions in a workspace with optional rule/status/date filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n ruleId: z.string().optional().describe('Filter by automation rule ID'),\n status: AutomationExecutionStatusEnum.optional().describe('Filter by execution status'),\n executedAfter: z.string().optional().describe('Executed on/after (ISO-8601)'),\n executedBefore: z.string().optional().describe('Executed on/before (ISO-8601)'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, ruleId, status, executedAfter, executedBefore, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (ruleId !== undefined) filter.ruleId = ruleId;\n if (status !== undefined) filter.status = status;\n if (executedAfter !== undefined) filter.executedAfter = executedAfter;\n if (executedBefore !== undefined) filter.executedBefore = executedBefore;\n const data = await ctx.gql.workspace.request<{\n planmagnetAutomationExecutions: Record<string, unknown>;\n }>(ops.LIST_AUTOMATION_EXECUTIONS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetAutomationExecutions);\n } catch (error) {\n ctx.logger.error('planmagnet automation_list_executions failed', { error: String(error) });\n return errorResult(\n `Failed to list automation executions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet feature-request + competitor tools — product discovery surface.\n *\n * Surface (14): features_{get,list,create,update,delete,vote,\n * remove_vote,link_competitor,unlink_competitor},\n * competitors_{get,list,create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n FeatureRequestStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerFeatureTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Feature requests ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_get')),\n {\n title: 'Get Feature Request',\n description: 'Fetch a single feature request by ID.',\n inputSchema: { id: z.string().describe('Feature request ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetFeatureRequest: Record<string, unknown> | null;\n }>(ops.GET_FEATURE_REQUEST, { id });\n if (!data.planmagnetFeatureRequest) return errorResult(`Feature request ${id} not found`);\n return jsonResult(data.planmagnetFeatureRequest);\n } catch (error) {\n ctx.logger.error('planmagnet features_get failed', { error: String(error) });\n return errorResult(\n `Failed to get feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_list')),\n {\n title: 'List Feature Requests',\n description:\n 'List feature requests in a workspace with optional project/status/submitter/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n status: FeatureRequestStatusEnum.optional().describe('Filter by status'),\n submittedBy: z.string().optional().describe('Filter by submitter actor ID'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, status, submittedBy, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (status !== undefined) filter.status = status;\n if (submittedBy !== undefined) filter.submittedBy = submittedBy;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetFeatureRequests: Record<string, unknown>;\n }>(ops.LIST_FEATURE_REQUESTS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetFeatureRequests);\n } catch (error) {\n ctx.logger.error('planmagnet features_list failed', { error: String(error) });\n return errorResult(\n `Failed to list feature requests: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_create')),\n {\n title: 'Create Feature Request',\n description: 'Create a new feature request.',\n inputSchema: {\n title: z.string().min(1).describe('Feature title'),\n description: z.string().optional().describe('Detailed description'),\n projectId: z.string().optional().describe('Parent project ID'),\n status: FeatureRequestStatusEnum.optional().describe('Initial status'),\n businessValue: z.number().int().optional().describe('Business value rating (1-10)'),\n effortEstimate: z\n .string()\n .optional()\n .describe('Effort estimate (T-shirt: XS, S, M, L, XL)'),\n workItemId: z.string().optional().describe('Linked work item ID'),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = { title: args.title };\n for (const k of [\n 'description',\n 'projectId',\n 'status',\n 'businessValue',\n 'effortEstimate',\n 'workItemId',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateFeatureRequest: Record<string, unknown>;\n }>(ops.CREATE_FEATURE_REQUEST, { input });\n return jsonResult(data.planmagnetCreateFeatureRequest);\n } catch (error) {\n ctx.logger.error('planmagnet features_create failed', { error: String(error) });\n return errorResult(\n `Failed to create feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_update')),\n {\n title: 'Update Feature Request',\n description: 'Update a feature request. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Feature request ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n projectId: z.string().optional().describe('Updated project link'),\n status: FeatureRequestStatusEnum.optional().describe('Updated status'),\n businessValue: z.number().int().optional().describe('Updated business value'),\n effortEstimate: z.string().optional().describe('Updated effort estimate'),\n workItemId: z.string().optional().describe('Updated work-item link'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable feature field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateFeatureRequest: Record<string, unknown>;\n }>(ops.UPDATE_FEATURE_REQUEST, { id, input });\n return jsonResult(data.planmagnetUpdateFeatureRequest);\n } catch (error) {\n ctx.logger.error('planmagnet features_update failed', { error: String(error) });\n return errorResult(\n `Failed to update feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_delete')),\n {\n title: 'Delete Feature Request',\n description: 'Delete a feature request by ID.',\n inputSchema: { id: z.string().describe('Feature request ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteFeatureRequest: boolean }>(\n ops.DELETE_FEATURE_REQUEST,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteFeatureRequest });\n } catch (error) {\n ctx.logger.error('planmagnet features_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete feature request: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_vote')),\n {\n title: 'Vote on Feature',\n description: 'Cast a vote on a feature request, with optional weight and comment.',\n inputSchema: {\n featureRequestId: z.string().describe('Feature request ID'),\n weight: z.number().int().optional().describe('Vote weight (default 1)'),\n comment: z.string().optional().describe('Optional vote comment'),\n },\n },\n async ({ featureRequestId, weight, comment }) => {\n try {\n const input: Record<string, unknown> = {};\n if (weight !== undefined) input.weight = weight;\n if (comment !== undefined) input.comment = comment;\n const data = await ctx.gql.workspace.request<{\n planmagnetVoteOnFeature: Record<string, unknown>;\n }>(ops.VOTE_ON_FEATURE, {\n featureRequestId,\n input: Object.keys(input).length > 0 ? input : undefined,\n });\n return jsonResult(data.planmagnetVoteOnFeature);\n } catch (error) {\n ctx.logger.error('planmagnet features_vote failed', { error: String(error) });\n return errorResult(\n `Failed to vote on feature: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_remove_vote')),\n {\n title: 'Remove Feature Vote',\n description: 'Remove the calling actor’s vote from a feature request.',\n inputSchema: { featureRequestId: z.string().describe('Feature request ID') },\n },\n async ({ featureRequestId }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetRemoveFeatureVote: boolean }>(\n ops.REMOVE_FEATURE_VOTE,\n { featureRequestId },\n );\n return jsonResult({ featureRequestId, removed: data.planmagnetRemoveFeatureVote });\n } catch (error) {\n ctx.logger.error('planmagnet features_remove_vote failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to remove feature vote: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_link_competitor')),\n {\n title: 'Link Competitor to Feature',\n description: 'Link a competitor to a feature request.',\n inputSchema: {\n featureRequestId: z.string().describe('Feature request ID'),\n competitorId: z.string().describe('Competitor ID'),\n },\n },\n async ({ featureRequestId, competitorId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetLinkCompetitorToFeature: Record<string, unknown>;\n }>(ops.LINK_COMPETITOR_TO_FEATURE, { input: { featureRequestId, competitorId } });\n return jsonResult(data.planmagnetLinkCompetitorToFeature);\n } catch (error) {\n ctx.logger.error('planmagnet features_link_competitor failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to link competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'features_unlink_competitor')),\n {\n title: 'Unlink Competitor from Feature',\n description: 'Unlink a competitor from a feature request.',\n inputSchema: {\n featureRequestId: z.string().describe('Feature request ID'),\n competitorId: z.string().describe('Competitor ID'),\n },\n },\n async ({ featureRequestId, competitorId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetUnlinkCompetitorFromFeature: Record<string, unknown>;\n }>(ops.UNLINK_COMPETITOR_FROM_FEATURE, { input: { featureRequestId, competitorId } });\n return jsonResult(data.planmagnetUnlinkCompetitorFromFeature);\n } catch (error) {\n ctx.logger.error('planmagnet features_unlink_competitor failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to unlink competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Competitors ────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_get')),\n {\n title: 'Get Competitor',\n description: 'Fetch a single competitor by ID.',\n inputSchema: { id: z.string().describe('Competitor ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCompetitor: Record<string, unknown> | null;\n }>(ops.GET_COMPETITOR, { id });\n if (!data.planmagnetCompetitor) return errorResult(`Competitor ${id} not found`);\n return jsonResult(data.planmagnetCompetitor);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_get failed', { error: String(error) });\n return errorResult(\n `Failed to get competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_list')),\n {\n title: 'List Competitors',\n description: 'List competitors in a workspace with optional text search.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetCompetitors: Record<string, unknown>;\n }>(ops.LIST_COMPETITORS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetCompetitors);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list competitors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_create')),\n {\n title: 'Create Competitor',\n description: 'Create a competitor entry.',\n inputSchema: {\n name: z.string().min(1).describe('Competitor name'),\n description: z.string().optional().describe('Description / notes'),\n website: z.string().optional().describe('Competitor website URL'),\n tags: z.array(z.string()).optional().describe('Tags for categorization'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ name, description, website, tags, metadata }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (description !== undefined) input.description = description;\n if (website !== undefined) input.website = website;\n if (tags !== undefined) input.tags = tags;\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateCompetitor: Record<string, unknown>;\n }>(ops.CREATE_COMPETITOR, { input });\n return jsonResult(data.planmagnetCreateCompetitor);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_update')),\n {\n title: 'Update Competitor',\n description: 'Update a competitor. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Competitor ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n website: z.string().optional().describe('Updated website'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable competitor field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateCompetitor: Record<string, unknown>;\n }>(ops.UPDATE_COMPETITOR, { id, input });\n return jsonResult(data.planmagnetUpdateCompetitor);\n } catch (error) {\n ctx.logger.error('planmagnet competitors_update failed', { error: String(error) });\n return errorResult(\n `Failed to update competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'competitors_delete')),\n {\n title: 'Delete Competitor',\n description: 'Delete a competitor by ID.',\n inputSchema: { id: z.string().describe('Competitor ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteCompetitor: boolean }>(\n ops.DELETE_COMPETITOR,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteCompetitor });\n } catch (error) {\n ctx.logger.error('planmagnet competitors_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete competitor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet custom-field tools — definitions + per-work-item values.\n *\n * Surface (8): custom_fields_{get,list,create,update,delete}_definition(s),\n * custom_fields_{list_values,set_value,remove_value}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n CustomFieldTypeEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerCustomFieldTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── Definitions ────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_get_definition')),\n {\n title: 'Get Custom Field Definition',\n description: 'Fetch a single custom field definition by ID.',\n inputSchema: { id: z.string().describe('Custom field definition ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCustomFieldDefinition: Record<string, unknown> | null;\n }>(ops.GET_CUSTOM_FIELD_DEFINITION, { id });\n if (!data.planmagnetCustomFieldDefinition)\n return errorResult(`Custom field definition ${id} not found`);\n return jsonResult(data.planmagnetCustomFieldDefinition);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_get_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to get custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_list_definitions')),\n {\n title: 'List Custom Field Definitions',\n description:\n 'List custom field definitions in a workspace with optional project/field-type/required/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n fieldType: CustomFieldTypeEnum.optional().describe('Filter by field type'),\n isRequired: z.boolean().optional().describe('Filter by required flag'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, projectId, fieldType, isRequired, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (projectId !== undefined) filter.projectId = projectId;\n if (fieldType !== undefined) filter.fieldType = fieldType;\n if (isRequired !== undefined) filter.isRequired = isRequired;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetCustomFieldDefinitions: Record<string, unknown>;\n }>(ops.LIST_CUSTOM_FIELD_DEFINITIONS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetCustomFieldDefinitions);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_list_definitions failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to list custom field definitions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_create_definition')),\n {\n title: 'Create Custom Field Definition',\n description:\n 'Create a custom field definition on a project. For SELECT/MULTI_SELECT types provide `options` JSON.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n name: z.string().min(1).describe('Field name'),\n fieldType: CustomFieldTypeEnum.describe('Field data type'),\n description: z.string().optional().describe('Field description'),\n isRequired: z.boolean().optional().describe('Whether this field is required'),\n options: JsonValue.optional().describe('Options JSON for SELECT/MULTI_SELECT'),\n defaultValue: JsonValue.optional().describe('Default value (JSON-encoded)'),\n validationRules: JsonValue.optional().describe('Validation rules (JSON-encoded)'),\n sortOrder: z.number().int().optional().describe('Sort order'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n name: args.name,\n fieldType: args.fieldType,\n };\n for (const k of [\n 'description',\n 'isRequired',\n 'options',\n 'defaultValue',\n 'validationRules',\n 'sortOrder',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateCustomFieldDefinition: Record<string, unknown>;\n }>(ops.CREATE_CUSTOM_FIELD_DEFINITION, { input });\n return jsonResult(data.planmagnetCreateCustomFieldDefinition);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_create_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to create custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_update_definition')),\n {\n title: 'Update Custom Field Definition',\n description: 'Update a custom field definition. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Custom field definition ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n fieldType: CustomFieldTypeEnum.optional().describe('Updated field type'),\n isRequired: z.boolean().optional().describe('Updated required flag'),\n options: JsonValue.optional().describe('Updated options JSON'),\n defaultValue: JsonValue.optional().describe('Updated default value JSON'),\n validationRules: JsonValue.optional().describe('Updated validation rules JSON'),\n sortOrder: z.number().int().optional().describe('Updated sort order'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable definition field',\n );\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateCustomFieldDefinition: Record<string, unknown>;\n }>(ops.UPDATE_CUSTOM_FIELD_DEFINITION, { id, input });\n return jsonResult(data.planmagnetUpdateCustomFieldDefinition);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_update_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to update custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_delete_definition')),\n {\n title: 'Delete Custom Field Definition',\n description: 'Delete a custom field definition by ID.',\n inputSchema: { id: z.string().describe('Custom field definition ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetDeleteCustomFieldDefinition: boolean;\n }>(ops.DELETE_CUSTOM_FIELD_DEFINITION, { id });\n return jsonResult({ id, deleted: data.planmagnetDeleteCustomFieldDefinition });\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_delete_definition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to delete custom field definition: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── Values ─────────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_list_values')),\n {\n title: 'List Custom Field Values',\n description:\n 'List custom field values in a workspace with optional definition/work-item filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n definitionId: z.string().optional().describe('Filter by definition ID'),\n workItemId: z.string().optional().describe('Filter by work item ID'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, definitionId, workItemId, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (definitionId !== undefined) filter.definitionId = definitionId;\n if (workItemId !== undefined) filter.workItemId = workItemId;\n const data = await ctx.gql.workspace.request<{\n planmagnetCustomFieldValues: Record<string, unknown>;\n }>(ops.LIST_CUSTOM_FIELD_VALUES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetCustomFieldValues);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_list_values failed', { error: String(error) });\n return errorResult(\n `Failed to list custom field values: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_set_value')),\n {\n title: 'Set Custom Field Value',\n description: 'Set a custom field value on a work item.',\n inputSchema: {\n definitionId: z.string().describe('Custom field definition ID'),\n workItemId: z.string().describe('Work item ID'),\n value: JsonValue.describe('The value to store (JSON-encoded)'),\n },\n },\n async ({ definitionId, workItemId, value }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetSetCustomFieldValue: Record<string, unknown>;\n }>(ops.SET_CUSTOM_FIELD_VALUE, { input: { definitionId, workItemId, value } });\n return jsonResult(data.planmagnetSetCustomFieldValue);\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_set_value failed', { error: String(error) });\n return errorResult(\n `Failed to set custom field value: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'custom_fields_remove_value')),\n {\n title: 'Remove Custom Field Value',\n description: 'Remove a custom field value from a work item.',\n inputSchema: {\n definitionId: z.string().describe('Custom field definition ID'),\n workItemId: z.string().describe('Work item ID'),\n },\n },\n async ({ definitionId, workItemId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetRemoveCustomFieldValue: boolean;\n }>(ops.REMOVE_CUSTOM_FIELD_VALUE, { definitionId, workItemId });\n return jsonResult({\n definitionId,\n workItemId,\n removed: data.planmagnetRemoveCustomFieldValue,\n });\n } catch (error) {\n ctx.logger.error('planmagnet custom_fields_remove_value failed', { error: String(error) });\n return errorResult(\n `Failed to remove custom field value: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet project-template tools — reusable project blueprints.\n *\n * Surface (7): templates_{get,list,create,update,delete,create_from_project} + projects_apply_template.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, JsonValue, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerTemplateTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_get')),\n {\n title: 'Get Project Template',\n description: 'Fetch a single project template by ID.',\n inputSchema: { id: z.string().describe('Project template ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetProjectTemplate: Record<string, unknown> | null;\n }>(ops.GET_TEMPLATE, { id });\n if (!data.planmagnetProjectTemplate) return errorResult(`Project template ${id} not found`);\n return jsonResult(data.planmagnetProjectTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet templates_get failed', { error: String(error) });\n return errorResult(\n `Failed to get project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_list')),\n {\n title: 'List Project Templates',\n description:\n 'List project templates in a workspace with optional category/published/built-in/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n category: z.string().optional().describe('Filter by category'),\n isPublished: z.boolean().optional().describe('Filter by published flag'),\n isBuiltIn: z.boolean().optional().describe('Filter by built-in flag'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, category, isPublished, isBuiltIn, search, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (category !== undefined) filter.category = category;\n if (isPublished !== undefined) filter.isPublished = isPublished;\n if (isBuiltIn !== undefined) filter.isBuiltIn = isBuiltIn;\n if (search !== undefined) filter.search = search;\n const data = await ctx.gql.workspace.request<{\n planmagnetProjectTemplates: Record<string, unknown>;\n }>(ops.LIST_TEMPLATES, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetProjectTemplates);\n } catch (error) {\n ctx.logger.error('planmagnet templates_list failed', { error: String(error) });\n return errorResult(\n `Failed to list project templates: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_create')),\n {\n title: 'Create Project Template',\n description:\n 'Create a reusable project template. `configuration` is the core JSON blueprint.',\n inputSchema: {\n name: z.string().min(1).describe('Template name'),\n configuration: JsonValue.describe(\n 'Template configuration JSON (project settings, work-item types, …)',\n ),\n description: z.string().optional().describe('Description'),\n category: z.string().optional().describe('Template category'),\n isPublished: z.boolean().optional().describe('Whether the template is published'),\n boardConfig: JsonValue.optional().describe('Board layout configuration JSON'),\n sprintConfig: JsonValue.optional().describe('Default sprint configuration JSON'),\n customFieldsConfig: JsonValue.optional().describe(\n 'Custom field definitions to create (JSON)',\n ),\n tags: z.array(z.string()).optional().describe('Tags'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n name: args.name,\n configuration: args.configuration,\n };\n for (const k of [\n 'description',\n 'category',\n 'isPublished',\n 'boardConfig',\n 'sprintConfig',\n 'customFieldsConfig',\n 'tags',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateProjectTemplate: Record<string, unknown>;\n }>(ops.CREATE_TEMPLATE, { input });\n return jsonResult(data.planmagnetCreateProjectTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet templates_create failed', { error: String(error) });\n return errorResult(\n `Failed to create project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_update')),\n {\n title: 'Update Project Template',\n description: 'Update a project template. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Project template ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n category: z.string().optional().describe('Updated category'),\n isPublished: z.boolean().optional().describe('Updated published flag'),\n configuration: JsonValue.optional().describe('Updated configuration JSON'),\n boardConfig: JsonValue.optional().describe('Updated board configuration JSON'),\n sprintConfig: JsonValue.optional().describe('Updated sprint configuration JSON'),\n customFieldsConfig: JsonValue.optional().describe(\n 'Updated custom-fields configuration JSON',\n ),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable template field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateProjectTemplate: Record<string, unknown>;\n }>(ops.UPDATE_TEMPLATE, { id, input });\n return jsonResult(data.planmagnetUpdateProjectTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet templates_update failed', { error: String(error) });\n return errorResult(\n `Failed to update project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_delete')),\n {\n title: 'Delete Project Template',\n description: 'Delete a project template by ID.',\n inputSchema: { id: z.string().describe('Project template ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteProjectTemplate: boolean }>(\n ops.DELETE_TEMPLATE,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteProjectTemplate });\n } catch (error) {\n ctx.logger.error('planmagnet templates_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_apply_template')),\n {\n title: 'Apply Project Template',\n description: 'Apply a template to create a new project.',\n inputSchema: {\n templateId: z.string().describe('Source template ID'),\n projectName: z.string().min(1).describe('Name for the new project'),\n ownerId: z.string().min(1).describe('Owner actor ID for the new project'),\n projectDescription: z.string().optional().describe('Description for the new project'),\n },\n },\n async ({ templateId, projectName, ownerId, projectDescription }) => {\n try {\n const input: Record<string, unknown> = { templateId, projectName, ownerId };\n if (projectDescription !== undefined) input.projectDescription = projectDescription;\n const data = await ctx.gql.workspace.request<{\n planmagnetApplyTemplate: Record<string, unknown>;\n }>(ops.APPLY_TEMPLATE, { input });\n return jsonResult(data.planmagnetApplyTemplate);\n } catch (error) {\n ctx.logger.error('planmagnet projects_apply_template failed', { error: String(error) });\n return errorResult(\n `Failed to apply project template: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'templates_create_from_project')),\n {\n title: 'Create Template from Project',\n description: 'Create a reusable template from an existing project.',\n inputSchema: {\n projectId: z.string().describe('Source project ID'),\n name: z.string().min(1).describe('Template name'),\n description: z.string().optional().describe('Template description'),\n },\n },\n async ({ projectId, name, description }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateTemplateFromProject: Record<string, unknown>;\n }>(ops.CREATE_TEMPLATE_FROM_PROJECT, { projectId, name, description });\n return jsonResult(data.planmagnetCreateTemplateFromProject);\n } catch (error) {\n ctx.logger.error('planmagnet templates_create_from_project failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to create template from project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet external-sync tools — connect projects to external tools\n * (Jira, GitHub, Linear, …) plus import/export.\n *\n * Surface (11): sync_{get,list,create,update,delete,pause,resume,start},\n * sync_list_mappings, sync_export, sync_import.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n JsonObject,\n JsonValue,\n SyncProviderEnum,\n SyncDirectionEnum,\n SyncStatusEnum,\n paginationInputShape,\n buildPagination,\n} from './shared.js';\n\nexport function registerSyncTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_get')),\n {\n title: 'Get External Sync',\n description: 'Fetch a single external sync configuration by ID.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetExternalSync: Record<string, unknown> | null;\n }>(ops.GET_EXTERNAL_SYNC, { id });\n if (!data.planmagnetExternalSync) return errorResult(`External sync ${id} not found`);\n return jsonResult(data.planmagnetExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_get failed', { error: String(error) });\n return errorResult(\n `Failed to get external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_list')),\n {\n title: 'List External Syncs',\n description:\n 'List external syncs in a workspace with optional project/provider/direction/status/text filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n projectId: z.string().optional().describe('Filter by project ID'),\n provider: SyncProviderEnum.optional().describe('Filter by provider'),\n direction: SyncDirectionEnum.optional().describe('Filter by sync direction'),\n status: SyncStatusEnum.optional().describe('Filter by status'),\n search: z.string().optional().describe('Free-text search'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of ['projectId', 'provider', 'direction', 'status', 'search'] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetExternalSyncs: Record<string, unknown>;\n }>(ops.LIST_EXTERNAL_SYNCS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetExternalSyncs);\n } catch (error) {\n ctx.logger.error('planmagnet sync_list failed', { error: String(error) });\n return errorResult(\n `Failed to list external syncs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_create')),\n {\n title: 'Create External Sync',\n description:\n 'Create an external sync configuration connecting a project to an external tool.',\n inputSchema: {\n projectId: z.string().min(1).describe('Parent project ID'),\n provider: SyncProviderEnum.describe('External provider'),\n direction: SyncDirectionEnum.describe('Sync direction'),\n externalProjectId: z.string().min(1).describe('External project/board identifier'),\n connectionConfig: JsonValue.describe(\n 'Connection configuration JSON (credentials ref, endpoint, …)',\n ),\n externalProjectUrl: z.string().optional().describe('External project URL'),\n fieldMapping: JsonValue.optional().describe('Field mapping configuration JSON'),\n syncFilters: JsonValue.optional().describe('Sync filter rules JSON (which items to sync)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async (args) => {\n try {\n const input: Record<string, unknown> = {\n projectId: args.projectId,\n provider: args.provider,\n direction: args.direction,\n externalProjectId: args.externalProjectId,\n connectionConfig: args.connectionConfig,\n };\n for (const k of [\n 'externalProjectUrl',\n 'fieldMapping',\n 'syncFilters',\n 'metadata',\n ] as const) {\n if (args[k] !== undefined) input[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetCreateExternalSync: Record<string, unknown>;\n }>(ops.CREATE_EXTERNAL_SYNC, { input });\n return jsonResult(data.planmagnetCreateExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_create failed', { error: String(error) });\n return errorResult(\n `Failed to create external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_update')),\n {\n title: 'Update External Sync',\n description: 'Update an external sync. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('External sync ID'),\n direction: SyncDirectionEnum.optional().describe('Updated direction'),\n externalProjectId: z.string().optional().describe('Updated external project ID'),\n externalProjectUrl: z.string().optional().describe('Updated external project URL'),\n connectionConfig: JsonValue.optional().describe('Updated connection configuration JSON'),\n fieldMapping: JsonValue.optional().describe('Updated field mapping JSON'),\n syncFilters: JsonValue.optional().describe('Updated sync filters JSON'),\n metadata: JsonObject.optional().describe('Updated metadata JSON'),\n },\n },\n async ({ id, ...rest }) => {\n try {\n const input: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) input[k] = v;\n }\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable sync field');\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateExternalSync: Record<string, unknown>;\n }>(ops.UPDATE_EXTERNAL_SYNC, { id, input });\n return jsonResult(data.planmagnetUpdateExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_update failed', { error: String(error) });\n return errorResult(\n `Failed to update external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_delete')),\n {\n title: 'Delete External Sync',\n description: 'Delete an external sync configuration by ID.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteExternalSync: boolean }>(\n ops.DELETE_EXTERNAL_SYNC,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteExternalSync });\n } catch (error) {\n ctx.logger.error('planmagnet sync_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_pause')),\n {\n title: 'Pause External Sync',\n description: 'Pause a sync.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetPauseExternalSync: Record<string, unknown>;\n }>(ops.PAUSE_EXTERNAL_SYNC, { id });\n return jsonResult(data.planmagnetPauseExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_pause failed', { error: String(error) });\n return errorResult(\n `Failed to pause external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_resume')),\n {\n title: 'Resume External Sync',\n description: 'Resume a paused sync.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetResumeExternalSync: Record<string, unknown>;\n }>(ops.RESUME_EXTERNAL_SYNC, { id });\n return jsonResult(data.planmagnetResumeExternalSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_resume failed', { error: String(error) });\n return errorResult(\n `Failed to resume external sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_start')),\n {\n title: 'Start Sync',\n description: 'Start a sync operation; returns the sync result.',\n inputSchema: { id: z.string().describe('External sync ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetStartSync: Record<string, unknown>;\n }>(ops.START_SYNC, { id });\n return jsonResult(data.planmagnetStartSync);\n } catch (error) {\n ctx.logger.error('planmagnet sync_start failed', { error: String(error) });\n return errorResult(\n `Failed to start sync: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_list_mappings')),\n {\n title: 'List External Mappings',\n description:\n 'List external mappings (internal-entity ↔ external-counterpart) in a workspace with optional filters.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n syncId: z.string().optional().describe('Filter by sync configuration ID'),\n internalId: z.string().optional().describe('Filter by internal entity ID'),\n internalType: z\n .string()\n .optional()\n .describe('Filter by internal type (workitem/sprint/project)'),\n externalId: z.string().optional().describe('Filter by external entity ID'),\n externalType: z.string().optional().describe('Filter by external entity type'),\n ...paginationInputShape,\n },\n },\n async (args) => {\n try {\n const filter: Record<string, unknown> = {};\n for (const k of [\n 'syncId',\n 'internalId',\n 'internalType',\n 'externalId',\n 'externalType',\n ] as const) {\n if (args[k] !== undefined) filter[k] = args[k];\n }\n const data = await ctx.gql.workspace.request<{\n planmagnetExternalMappings: Record<string, unknown>;\n }>(ops.LIST_EXTERNAL_MAPPINGS, {\n workspaceId: args.workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(args.first, args.after),\n });\n return jsonResult(data.planmagnetExternalMappings);\n } catch (error) {\n ctx.logger.error('planmagnet sync_list_mappings failed', { error: String(error) });\n return errorResult(\n `Failed to list external mappings: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_export')),\n {\n title: 'Export to External',\n description:\n 'Export items to an external tool via a sync configuration. Provide specific `internalIds` or set `exportAll`.',\n inputSchema: {\n syncId: z.string().describe('Sync configuration ID'),\n internalIds: z\n .array(z.string())\n .optional()\n .describe('Specific internal entity IDs to export'),\n exportAll: z.boolean().optional().describe('Export all eligible items'),\n },\n },\n async ({ syncId, internalIds, exportAll }) => {\n try {\n const input: Record<string, unknown> = { syncId };\n if (internalIds !== undefined) input.internalIds = internalIds;\n if (exportAll !== undefined) input.exportAll = exportAll;\n const data = await ctx.gql.workspace.request<{\n planmagnetExportToExternal: Record<string, unknown>;\n }>(ops.EXPORT_TO_EXTERNAL, { input });\n return jsonResult(data.planmagnetExportToExternal);\n } catch (error) {\n ctx.logger.error('planmagnet sync_export failed', { error: String(error) });\n return errorResult(\n `Failed to export to external: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sync_import')),\n {\n title: 'Import from External',\n description:\n 'Import items from an external tool via a sync configuration. Provide specific `externalIds` or set `importAll`.',\n inputSchema: {\n syncId: z.string().describe('Sync configuration ID'),\n externalIds: z\n .array(z.string())\n .optional()\n .describe('Specific external entity IDs to import'),\n importAll: z.boolean().optional().describe('Import all eligible items'),\n },\n },\n async ({ syncId, externalIds, importAll }) => {\n try {\n const input: Record<string, unknown> = { syncId };\n if (externalIds !== undefined) input.externalIds = externalIds;\n if (importAll !== undefined) input.importAll = importAll;\n const data = await ctx.gql.workspace.request<{\n planmagnetImportFromExternal: Record<string, unknown>;\n }>(ops.IMPORT_FROM_EXTERNAL, { input });\n return jsonResult(data.planmagnetImportFromExternal);\n } catch (error) {\n ctx.logger.error('planmagnet sync_import failed', { error: String(error) });\n return errorResult(\n `Failed to import from external: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * PlanMagnet UI-session tools — persisted per-user view state.\n *\n * Surface (4): ui_sessions_{list,get_or_create,update,delete}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, JsonValue, paginationInputShape, buildPagination } from './shared.js';\n\nexport function registerUiSessionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_list')),\n {\n title: 'List UI Sessions',\n description: 'List persisted UI sessions for the current user in a workspace.',\n inputSchema: {\n workspaceId: z.string().describe('Workspace ID (required)'),\n userId: z.string().optional().describe('Filter by user actor ID'),\n ...paginationInputShape,\n },\n },\n async ({ workspaceId, userId, first, after }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (userId !== undefined) filter.userId = userId;\n const data = await ctx.gql.workspace.request<{\n planmagnetUiSessions: Record<string, unknown>;\n }>(ops.LIST_UI_SESSIONS, {\n workspaceId,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: buildPagination(first, after),\n });\n return jsonResult(data.planmagnetUiSessions);\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_list failed', { error: String(error) });\n return errorResult(\n `Failed to list UI sessions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_get_or_create')),\n {\n title: 'Get or Create UI Session',\n description: 'Get (or lazily create) the UI session for the current user in a workspace.',\n inputSchema: { workspaceId: z.string().describe('Workspace ID (required)') },\n },\n async ({ workspaceId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n planmagnetGetOrCreateUISession: Record<string, unknown>;\n }>(ops.GET_OR_CREATE_UI_SESSION, { workspaceId });\n return jsonResult(data.planmagnetGetOrCreateUISession);\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_get_or_create failed', { error: String(error) });\n return errorResult(\n `Failed to get/create UI session: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_update')),\n {\n title: 'Update UI Session',\n description: 'Update the current user’s UI-session view state.',\n inputSchema: {\n viewState: JsonValue.describe('Persisted view state JSON (filters, columns, sort, …)'),\n metadata: JsonObject.optional().describe('Arbitrary metadata JSON'),\n },\n },\n async ({ viewState, metadata }) => {\n try {\n const input: Record<string, unknown> = { viewState };\n if (metadata !== undefined) input.metadata = metadata;\n const data = await ctx.gql.workspace.request<{\n planmagnetUpdateUISession: Record<string, unknown>;\n }>(ops.UPDATE_UI_SESSION, { input });\n return jsonResult(data.planmagnetUpdateUISession);\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_update failed', { error: String(error) });\n return errorResult(\n `Failed to update UI session: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'ui_sessions_delete')),\n {\n title: 'Delete UI Session',\n description: 'Delete a UI session by ID.',\n inputSchema: { id: z.string().describe('UI session ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetDeleteUISession: boolean }>(\n ops.DELETE_UI_SESSION,\n { id },\n );\n return jsonResult({ id, deleted: data.planmagnetDeleteUISession });\n } catch (error) {\n ctx.logger.error('planmagnet ui_sessions_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete UI session: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { LIST_PROJECTS } from './operations.js';\n\n/**\n * Read-only PlanMagnet MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n *\n * PlanMagnet collection queries require an explicit `workspaceId`; the\n * data-backed `projects` resource resolves it from the configured / stored\n * workspace context (auth store, then config). When unavailable it returns an\n * informative error payload rather than throwing.\n */\nexport function registerPlanmagnetResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const projectsUri = track(mcpResourceUri(ctx.productName, 'projects'));\n\n const resolveWorkspaceId = (): string | undefined =>\n ctx.auth.read()?.workspaceId ?? ctx.config.read().workspaceId;\n\n // <product>://schema — domain overview\n server.registerResource(\n 'planmagnet-schema',\n schemaUri,\n {\n title: 'PlanMagnet Domain Schema',\n description:\n 'Overview of the PlanMagnet project-management domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# PlanMagnet Domain (Overview)\n\nStrategic project / portfolio / work-management product.\n\n## Planning hierarchy\nPortfolio > Program > Project > (Work Items, Sprints, Boards, Milestones, …)\n\n## Entities\n- Portfolio / Program / PlanmagnetProject — planning hierarchy\n- WorkItem (+WorkItemDependency) — epics/stories/tasks/bugs/sub-tasks\n- Sprint — time-boxed iterations\n- Board (+BoardColumn) — kanban/scrum visual boards\n- Milestone — timeline checkpoints\n- PlanmagnetBudget (+BudgetExpense) — financial tracking\n- Risk — risk register (+ risk matrix)\n- Release — versioned deliverables\n- QualityGate — phase checkpoints\n- Roadmap (+RoadmapItem) — strategic timelines\n- PlanmagnetTimeEntry / PlanmagnetTimesheet — time tracking\n- AutomationRule (+AutomationExecution) — automation\n- FeatureRequest (+FeatureVote) / Competitor — product discovery\n- CustomFieldDefinition (+CustomFieldValue) — extensible fields\n- ProjectTemplate — reusable blueprints\n- ExternalSync (+ExternalMapping) — integrations (Jira, GitHub, Linear, …)\n- PlanmagnetUISession — persisted per-user view state\n\n## Key enums\n- WorkItemType: BUG, EPIC, STORY, SUB_TASK, TASK\n- WorkItemStatus: BACKLOG, TODO, IN_PROGRESS, IN_REVIEW, TESTING, DONE, CANCELLED\n- WorkItemPriority: NONE, LOW, MEDIUM, HIGH, CRITICAL\n- SprintStatus: PLANNING, ACTIVE, REVIEW, COMPLETED, CANCELLED\n- PlanmagnetProjectStatus: PLANNING, ACTIVE, ON_HOLD, COMPLETED, ARCHIVED, CANCELLED\n- RiskSeverity: NEGLIGIBLE, LOW, MEDIUM, HIGH, CRITICAL\n- QualityGateStatus: PENDING, IN_REVIEW, PASSED, FAILED, WAIVED\n\n## Conventions\nAll collection queries require an explicit \\`workspaceId\\` and use cursor\npagination ({ first, after }) returning { items, totalCount, pageInfo }.\nAll run against the WORKSPACE gateway. The subgraph has no public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://projects — projects in the configured workspace\n server.registerResource(\n 'planmagnet-projects',\n projectsUri,\n {\n title: 'PlanMagnet Projects',\n description: 'The first page of projects in the configured/stored workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${projectsUri} requested`);\n const workspaceId = resolveWorkspaceId();\n if (!workspaceId) {\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify({\n error:\n 'No workspaceId configured. Set the workspace context (auth/select-workspace) or use planmagnet_projects_list with an explicit workspaceId.',\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n try {\n const data = await ctx.gql.workspace.request<{ planmagnetProjects: unknown }>(\n LIST_PROJECTS,\n {\n workspaceId,\n pagination: { first: 50 },\n },\n );\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify(data.planmagnetProjects, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * PlanMagnet MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerPlanmagnetPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'project-setup'));\n const sprintName = track(mcpPromptName(p, 'sprint-planning'));\n\n // <product>-project-setup — stand up a project + board + first sprint\n server.registerPrompt(\n setupName,\n {\n title: 'Project Setup',\n description:\n 'Guide for standing up a new PlanMagnet project end to end: create the project, add a board, open a sprint, and seed the backlog with work items.',\n argsSchema: {\n workspaceId: z.string().optional().describe('Workspace ID to operate in'),\n name: z.string().optional().describe('Project name'),\n },\n },\n ({ workspaceId, name }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { workspaceId, name });\n const wsNote = workspaceId\n ? `Use workspaceId \"${workspaceId}\" for all list/collection calls.`\n : 'Ask the user for the workspaceId — every list/collection tool requires it.';\n const nameNote = name\n ? `Use the project name \"${name}\".`\n : 'Ask the user for the project name.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me set up a new PlanMagnet project. ${wsNote}\n\n1. **Create Project**: Use ${p}_projects_create. ${nameNote} Provide a unique \\`key\\` (work-item prefix, e.g. PROJ), an \\`ownerId\\`, and optionally a \\`methodology\\` (AGILE/SCRUM/KANBAN/…).\n2. **Add a Board**: Use ${p}_boards_create with the new projectId and type=KANBAN (or SCRUM). Add columns with ${p}_boards_create_column (TODO → IN_PROGRESS → DONE).\n3. **Open a Sprint**: Use ${p}_sprints_create, then ${p}_sprints_start when ready.\n4. **Seed the Backlog**: Use ${p}_work_items_create for each epic/story/task (set type + priority). Optionally place them into the sprint with ${p}_sprints_add_work_items.\n5. **Verify**: Use ${p}_work_items_list (workspaceId + projectId) to confirm the backlog.\n\nShow results at each step and confirm before starting the sprint.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-sprint-planning — run a sprint planning + triage session\n server.registerPrompt(\n sprintName,\n {\n title: 'Sprint Planning',\n description:\n 'Workflow for planning and running a sprint: review the backlog, prioritize, fill the sprint, track risks, and monitor progress.',\n argsSchema: {\n workspaceId: z.string().optional().describe('Workspace ID'),\n projectId: z.string().optional().describe('Project ID to plan for'),\n },\n },\n ({ workspaceId, projectId }) => {\n ctx.logger.debug(`Prompt ${sprintName} called`, { workspaceId, projectId });\n const wsNote = workspaceId\n ? `Use workspaceId \"${workspaceId}\".`\n : 'Ask the user for the workspaceId (required by all list tools).';\n const projNote = projectId\n ? `Plan project \"${projectId}\".`\n : `First list projects with ${p}_projects_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run a PlanMagnet sprint-planning session. ${wsNote} ${projNote}\n\n1. **Backlog Review**: Use ${p}_work_items_list filtered by projectId and status=BACKLOG/TODO to see candidate work.\n2. **Prioritize**: Adjust priorities with ${p}_work_items_update (or ${p}_work_items_bulk_update for many at once).\n3. **Open/Confirm Sprint**: Use ${p}_sprints_list to find the planning sprint, or ${p}_sprints_create. Add chosen items with ${p}_sprints_add_work_items, then ${p}_sprints_start.\n4. **Capacity & Dependencies**: Check ${p}_dependencies_list for blockers; resolve ordering before commit.\n5. **Risks**: Review ${p}_risks_matrix (projectId) and triage high-severity risks.\n6. **Track**: During the sprint use ${p}_work_items_move to advance items and ${p}_sprints_complete at the end.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * PlanMagnet module — domain module for the future-products ecosystem program.\n *\n * Covers the wspace-planmagnet-svc @key-entity surface (projects, programs,\n * portfolios, work items, sprints, boards/columns, milestones, dependencies,\n * budgets/expenses, risks, releases, quality gates, roadmaps/items, time\n * tracking, automations, feature requests/competitors, custom fields,\n * project templates, external sync, UI sessions) grouped into per-entity\n * sub-APIs. Mirrors the kadaikodi / crewfoundry module structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/planmagnet/wspace-planmagnet-svc/\n * (Hive service name `planmagnet`). All operations run against the WORKSPACE\n * gateway. Every collection query takes an EXPLICIT `workspaceId: ID!` argument\n * and uses cursor pagination ({ first, after }).\n *\n * The subgraph exposes only the federation noops `_planmagnetPing` /\n * `_planmagnetService` / `_planmagnetVersion` (no @public health field), so\n * there is intentionally NO health command/tool.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerProjectTools } from './tools/projects.js';\nimport { registerWorkItemTools } from './tools/workitems.js';\nimport { registerSprintTools } from './tools/sprints.js';\nimport { registerBoardTools } from './tools/boards.js';\nimport { registerMilestoneTools } from './tools/milestones.js';\nimport { registerDependencyTools } from './tools/dependencies.js';\nimport { registerBudgetTools } from './tools/budgets.js';\nimport { registerRiskTools } from './tools/risks.js';\nimport { registerReleaseTools } from './tools/releases.js';\nimport { registerQualityGateTools } from './tools/qualitygates.js';\nimport { registerRoadmapTools } from './tools/roadmaps.js';\nimport { registerTimeTrackingTools } from './tools/timetracking.js';\nimport { registerAutomationTools } from './tools/automations.js';\nimport { registerFeatureTools } from './tools/features.js';\nimport { registerCustomFieldTools } from './tools/customfields.js';\nimport { registerTemplateTools } from './tools/templates.js';\nimport { registerSyncTools } from './tools/sync.js';\nimport { registerUiSessionTools } from './tools/uisessions.js';\nimport { registerPlanmagnetResources } from './resources.js';\nimport { registerPlanmagnetPrompts } from './prompts.js';\n\nconst planmagnetModule: McpModule = {\n id: 'planmagnet',\n version: '0.0.1',\n displayName: 'PlanMagnet',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerProjectTools(server, ctx, trackTool);\n registerWorkItemTools(server, ctx, trackTool);\n registerSprintTools(server, ctx, trackTool);\n registerBoardTools(server, ctx, trackTool);\n registerMilestoneTools(server, ctx, trackTool);\n registerDependencyTools(server, ctx, trackTool);\n registerBudgetTools(server, ctx, trackTool);\n registerRiskTools(server, ctx, trackTool);\n registerReleaseTools(server, ctx, trackTool);\n registerQualityGateTools(server, ctx, trackTool);\n registerRoadmapTools(server, ctx, trackTool);\n registerTimeTrackingTools(server, ctx, trackTool);\n registerAutomationTools(server, ctx, trackTool);\n registerFeatureTools(server, ctx, trackTool);\n registerCustomFieldTools(server, ctx, trackTool);\n registerTemplateTools(server, ctx, trackTool);\n registerSyncTools(server, ctx, trackTool);\n registerUiSessionTools(server, ctx, trackTool);\n\n registerPlanmagnetResources(server, ctx, trackResource);\n registerPlanmagnetPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default planmagnetModule;\n"]}
|