@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/collabkin/operations.ts","../../../src/modules/collabkin/tools/shared.ts","../../../src/modules/collabkin/tools/trees.ts","../../../src/modules/collabkin/tools/people.ts","../../../src/modules/collabkin/tools/relationships.ts","../../../src/modules/collabkin/tools/memberships.ts","../../../src/modules/collabkin/tools/memories.ts","../../../src/modules/collabkin/tools/stories.ts","../../../src/modules/collabkin/tools/comments.ts","../../../src/modules/collabkin/tools/timeline.ts","../../../src/modules/collabkin/tools/health.ts","../../../src/modules/collabkin/resources.ts","../../../src/modules/collabkin/prompts.ts","../../../src/modules/collabkin/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 Collabkin MCP module.\n *\n * Collabkin is the private, collaborative home for a family and its ancestry\n * (future-products ecosystem). Backend subgraph:\n * ~/products/collabkin/wspace-collabkin-svc/ (Hive service name `collabkin`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — Collabkin inputs do NOT carry a workspaceId.\n *\n * Every product-owned root field is prefixed `col*` / every type `Col*` per the\n * service's GraphQL naming contract; the @public `colHealth` probe is exposed\n * as `<product>_health`. Connection queries take a `pagination: PaginationInput`\n * ({ cursor, limit, offset }) and return `{ items, pageInfo { cursor, hasMore } }`.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi module's operations file.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const TREE_FIELDS = `\n id name surname description status tags workspaceId createdAt updatedAt\n coverFile { id }\n`;\n\nexport const PERSON_FIELDS = `\n id treeId givenName familyName maidenName nickname gender lifeStatus\n birthDate birthPlace deathDate bio tags linkedUserId workspaceId\n createdAt updatedAt\n photoFile { id }\n`;\n\nexport const RELATIONSHIP_FIELDS = `\n id treeId fromPersonId toPersonId type certainty startDate endDate notes\n workspaceId createdAt updatedAt\n`;\n\nexport const MEMBERSHIP_FIELDS = `\n id treeId memberUserId personId role status invitedById invitedAt acceptedAt\n workspaceId createdAt updatedAt\n`;\n\nexport const COMMENT_FIELDS = `\n id body memoryId storyId workspaceId createdAt updatedAt\n`;\n\nexport const MEMORY_FIELDS = `\n id treeId title description kind place takenAt tags visibility personId\n workspaceId createdAt updatedAt\n file { id }\n`;\n\nexport const STORY_FIELDS = `\n id treeId title body format narrator personId tags visibility\n workspaceId createdAt updatedAt\n recordingFile { id }\n`;\n\nexport const EVENT_FIELDS = `\n id treeId personId type title description date place isApproximate\n workspaceId createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Family trees\n// ---------------------------------------------------------------------------\n\nexport const GET_FAMILY_TREE = `\n query CollabkinGetFamilyTree($id: ID!) {\n colFamilyTree(id: $id) {\n ${TREE_FIELDS}\n people { id givenName familyName lifeStatus }\n memberships { id memberUserId role status }\n }\n }\n`;\n\nexport const LIST_FAMILY_TREES = `\n query CollabkinListFamilyTrees($pagination: PaginationInput, $status: ColTreeStatus) {\n colListFamilyTrees(pagination: $pagination, status: $status) {\n items { ${TREE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_FAMILY_TREE = `\n mutation CollabkinCreateFamilyTree($input: ColCreateFamilyTreeInput!) {\n colCreateFamilyTree(input: $input) {\n ${TREE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_FAMILY_TREE = `\n mutation CollabkinUpdateFamilyTree($id: ID!, $input: ColUpdateFamilyTreeInput!) {\n colUpdateFamilyTree(id: $id, input: $input) {\n ${TREE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_FAMILY_TREE = `\n mutation CollabkinArchiveFamilyTree($id: ID!) {\n colArchiveFamilyTree(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// People\n// ---------------------------------------------------------------------------\n\nexport const GET_PERSON = `\n query CollabkinGetPerson($id: ID!) {\n colPerson(id: $id) {\n ${PERSON_FIELDS}\n relationships { ${RELATIONSHIP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_PEOPLE = `\n query CollabkinListPeople(\n $treeId: ID\n $lifeStatus: ColLifeStatus\n $pagination: PaginationInput\n ) {\n colListPeople(treeId: $treeId, lifeStatus: $lifeStatus, pagination: $pagination) {\n items { ${PERSON_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PERSON = `\n mutation CollabkinCreatePerson($input: ColCreatePersonInput!) {\n colCreatePerson(input: $input) {\n ${PERSON_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PERSON = `\n mutation CollabkinUpdatePerson($id: ID!, $input: ColUpdatePersonInput!) {\n colUpdatePerson(id: $id, input: $input) {\n ${PERSON_FIELDS}\n }\n }\n`;\n\nexport const DELETE_PERSON = `\n mutation CollabkinDeletePerson($id: ID!) {\n colDeletePerson(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Relationships\n// ---------------------------------------------------------------------------\n\nexport const LIST_RELATIONSHIPS = `\n query CollabkinListRelationships($treeId: ID, $personId: ID) {\n colListRelationships(treeId: $treeId, personId: $personId) {\n ${RELATIONSHIP_FIELDS}\n fromPerson { id givenName familyName }\n toPerson { id givenName familyName }\n }\n }\n`;\n\nexport const CREATE_RELATIONSHIP = `\n mutation CollabkinCreateRelationship($input: ColCreateRelationshipInput!) {\n colCreateRelationship(input: $input) {\n ${RELATIONSHIP_FIELDS}\n }\n }\n`;\n\nexport const DELETE_RELATIONSHIP = `\n mutation CollabkinDeleteRelationship($id: ID!) {\n colDeleteRelationship(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Memberships\n// ---------------------------------------------------------------------------\n\nexport const LIST_MEMBERSHIPS = `\n query CollabkinListMemberships($treeId: ID!) {\n colListMemberships(treeId: $treeId) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const INVITE_MEMBER = `\n mutation CollabkinInviteMember($input: ColInviteMemberInput!) {\n colInviteMember(input: $input) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const ACCEPT_MEMBERSHIP = `\n mutation CollabkinAcceptMembership($id: ID!) {\n colAcceptMembership(id: $id) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const REMOVE_MEMBER = `\n mutation CollabkinRemoveMember($id: ID!) {\n colRemoveMember(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Memories\n// ---------------------------------------------------------------------------\n\nexport const GET_MEMORY = `\n query CollabkinGetMemory($id: ID!) {\n colMemory(id: $id) {\n ${MEMORY_FIELDS}\n comments { ${COMMENT_FIELDS} }\n }\n }\n`;\n\nexport const LIST_MEMORIES = `\n query CollabkinListMemories(\n $treeId: ID\n $personId: ID\n $kind: ColMemoryKind\n $pagination: PaginationInput\n ) {\n colListMemories(\n treeId: $treeId\n personId: $personId\n kind: $kind\n pagination: $pagination\n ) {\n items { ${MEMORY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MEMORY = `\n mutation CollabkinCreateMemory($input: ColCreateMemoryInput!) {\n colCreateMemory(input: $input) {\n ${MEMORY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_MEMORY = `\n mutation CollabkinUpdateMemory($id: ID!, $input: ColUpdateMemoryInput!) {\n colUpdateMemory(id: $id, input: $input) {\n ${MEMORY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_MEMORY = `\n mutation CollabkinDeleteMemory($id: ID!) {\n colDeleteMemory(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Stories\n// ---------------------------------------------------------------------------\n\nexport const GET_STORY = `\n query CollabkinGetStory($id: ID!) {\n colStory(id: $id) {\n ${STORY_FIELDS}\n comments { ${COMMENT_FIELDS} }\n }\n }\n`;\n\nexport const LIST_STORIES = `\n query CollabkinListStories(\n $treeId: ID\n $personId: ID\n $pagination: PaginationInput\n ) {\n colListStories(treeId: $treeId, personId: $personId, pagination: $pagination) {\n items { ${STORY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_STORY = `\n mutation CollabkinCreateStory($input: ColCreateStoryInput!) {\n colCreateStory(input: $input) {\n ${STORY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_STORY = `\n mutation CollabkinDeleteStory($id: ID!) {\n colDeleteStory(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Comments\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMMENTS = `\n query CollabkinListComments($memoryId: ID, $storyId: ID) {\n colListComments(memoryId: $memoryId, storyId: $storyId) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\nexport const ADD_COMMENT = `\n mutation CollabkinAddComment($input: ColCreateCommentInput!) {\n colAddComment(input: $input) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\nexport const DELETE_COMMENT = `\n mutation CollabkinDeleteComment($id: ID!) {\n colDeleteComment(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Timeline + events\n// ---------------------------------------------------------------------------\n\nexport const TIMELINE = `\n query CollabkinTimeline($treeId: ID!, $personId: ID, $type: ColEventType) {\n colTimeline(treeId: $treeId, personId: $personId, type: $type) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_EVENT = `\n mutation CollabkinCreateEvent($input: ColCreateEventInput!) {\n colCreateEvent(input: $input) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const DELETE_EVENT = `\n mutation CollabkinDeleteEvent($id: ID!) {\n colDeleteEvent(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query CollabkinHealth {\n colHealth\n }\n`;\n","/**\n * Shared zod schemas + helpers for the Collabkin 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. `tags` are free-form string\n * arrays; DateTime fields are passed as ISO-8601 strings (the backend `DateTime`\n * scalar). Connection queries take a `pagination: PaginationInput`\n * ({ cursor, limit, offset }), built via `buildPagination`.\n */\n\nimport { z } from 'zod';\n\nexport const TreeStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED'])\n .describe('Lifecycle status of a family tree');\n\nexport const GenderEnum = z\n .enum(['FEMALE', 'MALE', 'OTHER', 'UNKNOWN'])\n .describe('Gender of a person');\n\nexport const LifeStatusEnum = z\n .enum(['DECEASED', 'LIVING', 'UNKNOWN'])\n .describe('Whether a person is living, deceased, or unknown');\n\nexport const MemberRoleEnum = z\n .enum(['CONTRIBUTOR', 'OWNER', 'STEWARD', 'VIEWER'])\n .describe('A member’s role within a family tree');\n\nexport const MemoryKindEnum = z\n .enum(['ARTIFACT', 'AUDIO', 'DOCUMENT', 'PHOTO', 'VIDEO'])\n .describe('Media type of a memory');\n\nexport const VisibilityEnum = z\n .enum(['PRIVATE', 'STEWARDS', 'TREE'])\n .describe('Who can see a memory or story (PRIVATE, STEWARDS, or whole TREE)');\n\nexport const EventTypeEnum = z\n .enum([\n 'BIRTH',\n 'DEATH',\n 'DIVORCE',\n 'EDUCATION',\n 'IMMIGRATION',\n 'MARRIAGE',\n 'MILESTONE',\n 'MILITARY',\n 'OTHER',\n 'RESIDENCE',\n ])\n .describe('Type of a timeline event');\n\nexport const RelationshipTypeEnum = z\n .enum([\n 'CHILD',\n 'GRANDCHILD',\n 'GRANDPARENT',\n 'GUARDIAN',\n 'PARENT',\n 'PARTNER',\n 'SIBLING',\n 'SPOUSE',\n ])\n .describe('Kind of relationship between two people');\n\nexport const StoryFormatEnum = z\n .enum(['AUDIO', 'VIDEO', 'WRITTEN'])\n .describe('Format a story is recorded in');\n\nexport const CertaintyEnum = z\n .enum(['CONFIRMED', 'DISPUTED', 'PROBABLE', 'UNVERIFIED'])\n .describe('Confidence level of a recorded relationship');\n\n/**\n * Build a `PaginationInput` ({ cursor, limit, offset }) from optional parts.\n * Returns `undefined` when no pagination args were supplied so the backend\n * applies its own defaults (limit 50, offset 0).\n */\nexport function buildPagination(\n limit?: number,\n offset?: number,\n cursor?: string,\n): Record<string, unknown> | undefined {\n const pagination: Record<string, unknown> = {};\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n if (cursor !== undefined) pagination.cursor = cursor;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n","/**\n * Collabkin family-tree tools.\n *\n * Surface (5): trees_{list,get,create,update,archive}. A family tree is the\n * top-level container for people, relationships, memberships, memories,\n * stories, and the timeline.\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 { TreeStatusEnum, buildPagination } from './shared.js';\n\nexport function registerTreeTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_list')),\n {\n title: 'List Family Trees',\n description:\n 'List the family trees in the bound workspace, optionally filtered by status (ACTIVE/ARCHIVED), with cursor/offset pagination.',\n inputSchema: {\n status: TreeStatusEnum.optional().describe('Filter by tree status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListFamilyTrees: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_FAMILY_TREES, {\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListFamilyTrees);\n } catch (error) {\n ctx.logger.error('collabkin trees_list failed', { error: String(error) });\n return errorResult(\n `Failed to list family trees: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_get')),\n {\n title: 'Get Family Tree',\n description:\n 'Fetch a single family tree by ID, including a summary of its people and memberships.',\n inputSchema: { id: z.string().describe('Family tree ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colFamilyTree: Record<string, unknown> | null;\n }>(ops.GET_FAMILY_TREE, { id });\n if (!data.colFamilyTree) return errorResult(`Family tree ${id} not found`);\n return jsonResult(data.colFamilyTree);\n } catch (error) {\n ctx.logger.error('collabkin trees_get failed', { error: String(error) });\n return errorResult(\n `Failed to get family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_create')),\n {\n title: 'Create Family Tree',\n description:\n 'Create a new family tree. Only `name` is required; `coverFileId` references a wspace-files-svc File.',\n inputSchema: {\n name: z.string().min(1).describe('Family tree name'),\n surname: z.string().optional().describe('Primary family surname'),\n description: z.string().optional().describe('Tree description'),\n coverFileId: z.string().optional().describe('Cover image File ID (wspace-files-svc)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, surname, description, coverFileId, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (surname !== undefined) input.surname = surname;\n if (description !== undefined) input.description = description;\n if (coverFileId !== undefined) input.coverFileId = coverFileId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n colCreateFamilyTree: Record<string, unknown>;\n }>(ops.CREATE_FAMILY_TREE, { input });\n return jsonResult(data.colCreateFamilyTree);\n } catch (error) {\n ctx.logger.error('collabkin trees_create failed', { error: String(error) });\n return errorResult(\n `Failed to create family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_update')),\n {\n title: 'Update Family Tree',\n description: 'Update a family tree. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Family tree ID'),\n name: z.string().optional().describe('Updated name'),\n surname: z.string().optional().describe('Updated surname'),\n description: z.string().optional().describe('Updated description'),\n coverFileId: z.string().optional().describe('Updated cover image File ID'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({ id, name, surname, description, coverFileId, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (surname !== undefined) input.surname = surname;\n if (description !== undefined) input.description = description;\n if (coverFileId !== undefined) input.coverFileId = coverFileId;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/surname/description/coverFileId/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n colUpdateFamilyTree: Record<string, unknown>;\n }>(ops.UPDATE_FAMILY_TREE, { id, input });\n return jsonResult(data.colUpdateFamilyTree);\n } catch (error) {\n ctx.logger.error('collabkin trees_update failed', { error: String(error) });\n return errorResult(\n `Failed to update family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_archive')),\n {\n title: 'Archive Family Tree',\n description: 'Archive a family tree (soft delete — sets status to ARCHIVED).',\n inputSchema: { id: z.string().describe('Family tree ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colArchiveFamilyTree: boolean }>(\n ops.ARCHIVE_FAMILY_TREE,\n { id },\n );\n return jsonResult({ success: data.colArchiveFamilyTree, id });\n } catch (error) {\n ctx.logger.error('collabkin trees_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin people tools — relatives & ancestors within a family tree.\n *\n * Surface (5): people_{list,get,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 { GenderEnum, LifeStatusEnum, buildPagination } from './shared.js';\n\nexport function registerPersonTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_list')),\n {\n title: 'List People',\n description:\n 'List people in a family tree, optionally filtered by tree and/or life status, with cursor/offset pagination.',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n lifeStatus: LifeStatusEnum.optional().describe('Filter by life status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ treeId, lifeStatus, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListPeople: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_PEOPLE, {\n treeId,\n lifeStatus,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListPeople);\n } catch (error) {\n ctx.logger.error('collabkin people_list failed', { error: String(error) });\n return errorResult(\n `Failed to list people: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_get')),\n {\n title: 'Get Person',\n description: 'Fetch a single person by ID, including their relationships.',\n inputSchema: { id: z.string().describe('Person ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colPerson: Record<string, unknown> | null;\n }>(ops.GET_PERSON, { id });\n if (!data.colPerson) return errorResult(`Person ${id} not found`);\n return jsonResult(data.colPerson);\n } catch (error) {\n ctx.logger.error('collabkin people_get failed', { error: String(error) });\n return errorResult(\n `Failed to get person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_create')),\n {\n title: 'Create Person',\n description:\n 'Add a person to a family tree. `treeId` and `givenName` are required; `linkedUserId` links the person to a platform user, `photoFileId` references a wspace-files-svc File.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n givenName: z.string().min(1).describe('Given (first) name'),\n familyName: z.string().optional().describe('Family (last) name'),\n maidenName: z.string().optional().describe('Maiden name'),\n nickname: z.string().optional().describe('Nickname'),\n gender: GenderEnum.optional().describe('Gender (default UNKNOWN)'),\n lifeStatus: LifeStatusEnum.optional().describe('Life status (default UNKNOWN)'),\n birthDate: z.string().optional().describe('Birth date (ISO-8601 DateTime)'),\n birthPlace: z.string().optional().describe('Birth place'),\n deathDate: z.string().optional().describe('Death date (ISO-8601 DateTime)'),\n bio: z.string().optional().describe('Biographical notes'),\n linkedUserId: z.string().optional().describe('Linked platform user ID'),\n photoFileId: z.string().optional().describe('Portrait photo File ID'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({\n treeId,\n givenName,\n familyName,\n maidenName,\n nickname,\n gender,\n lifeStatus,\n birthDate,\n birthPlace,\n deathDate,\n bio,\n linkedUserId,\n photoFileId,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { treeId, givenName };\n if (familyName !== undefined) input.familyName = familyName;\n if (maidenName !== undefined) input.maidenName = maidenName;\n if (nickname !== undefined) input.nickname = nickname;\n if (gender !== undefined) input.gender = gender;\n if (lifeStatus !== undefined) input.lifeStatus = lifeStatus;\n if (birthDate !== undefined) input.birthDate = birthDate;\n if (birthPlace !== undefined) input.birthPlace = birthPlace;\n if (deathDate !== undefined) input.deathDate = deathDate;\n if (bio !== undefined) input.bio = bio;\n if (linkedUserId !== undefined) input.linkedUserId = linkedUserId;\n if (photoFileId !== undefined) input.photoFileId = photoFileId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n colCreatePerson: Record<string, unknown>;\n }>(ops.CREATE_PERSON, { input });\n return jsonResult(data.colCreatePerson);\n } catch (error) {\n ctx.logger.error('collabkin people_create failed', { error: String(error) });\n return errorResult(\n `Failed to create person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_update')),\n {\n title: 'Update Person',\n description: 'Update a person. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Person ID'),\n givenName: z.string().optional().describe('Updated given name'),\n familyName: z.string().optional().describe('Updated family name'),\n maidenName: z.string().optional().describe('Updated maiden name'),\n nickname: z.string().optional().describe('Updated nickname'),\n gender: GenderEnum.optional().describe('Updated gender'),\n lifeStatus: LifeStatusEnum.optional().describe('Updated life status'),\n birthDate: z.string().optional().describe('Updated birth date (ISO-8601 DateTime)'),\n birthPlace: z.string().optional().describe('Updated birth place'),\n deathDate: z.string().optional().describe('Updated death date (ISO-8601 DateTime)'),\n bio: z.string().optional().describe('Updated biographical notes'),\n linkedUserId: z.string().optional().describe('Updated linked platform user ID'),\n photoFileId: z.string().optional().describe('Updated portrait photo File ID'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n givenName,\n familyName,\n maidenName,\n nickname,\n gender,\n lifeStatus,\n birthDate,\n birthPlace,\n deathDate,\n bio,\n linkedUserId,\n photoFileId,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (givenName !== undefined) input.givenName = givenName;\n if (familyName !== undefined) input.familyName = familyName;\n if (maidenName !== undefined) input.maidenName = maidenName;\n if (nickname !== undefined) input.nickname = nickname;\n if (gender !== undefined) input.gender = gender;\n if (lifeStatus !== undefined) input.lifeStatus = lifeStatus;\n if (birthDate !== undefined) input.birthDate = birthDate;\n if (birthPlace !== undefined) input.birthPlace = birthPlace;\n if (deathDate !== undefined) input.deathDate = deathDate;\n if (bio !== undefined) input.bio = bio;\n if (linkedUserId !== undefined) input.linkedUserId = linkedUserId;\n if (photoFileId !== undefined) input.photoFileId = photoFileId;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable person field');\n }\n\n const data = await ctx.gql.workspace.request<{\n colUpdatePerson: Record<string, unknown>;\n }>(ops.UPDATE_PERSON, { id, input });\n return jsonResult(data.colUpdatePerson);\n } catch (error) {\n ctx.logger.error('collabkin people_update failed', { error: String(error) });\n return errorResult(\n `Failed to update person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_delete')),\n {\n title: 'Delete Person',\n description: 'Delete a person from a family tree.',\n inputSchema: { id: z.string().describe('Person ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeletePerson: boolean }>(\n ops.DELETE_PERSON,\n { id },\n );\n return jsonResult({ success: data.colDeletePerson, id });\n } catch (error) {\n ctx.logger.error('collabkin people_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin relationship tools — edges between people in a family tree.\n *\n * Surface (3): relationships_{list,create,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 { RelationshipTypeEnum, CertaintyEnum } from './shared.js';\n\nexport function registerRelationshipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_list')),\n {\n title: 'List Relationships',\n description:\n 'List relationships, optionally filtered by family tree and/or a specific person (relationships touching that person).',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n personId: z.string().optional().describe('Filter to relationships involving this person'),\n },\n },\n async ({ treeId, personId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListRelationships: Array<Record<string, unknown>>;\n }>(ops.LIST_RELATIONSHIPS, { treeId, personId });\n return jsonResult(data.colListRelationships);\n } catch (error) {\n ctx.logger.error('collabkin relationships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list relationships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_create')),\n {\n title: 'Create Relationship',\n description:\n 'Create a relationship between two people in a family tree (e.g. PARENT, SPOUSE, SIBLING). `fromPersonId`, `toPersonId`, `treeId`, and `type` are required.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n fromPersonId: z.string().min(1).describe('Source person ID'),\n toPersonId: z.string().min(1).describe('Target person ID'),\n type: RelationshipTypeEnum.describe('Relationship type'),\n certainty: CertaintyEnum.optional().describe('Confidence level (default CONFIRMED)'),\n startDate: z.string().optional().describe('Relationship start (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Relationship end (ISO-8601 DateTime)'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({ treeId, fromPersonId, toPersonId, type, certainty, startDate, endDate, notes }) => {\n try {\n const input: Record<string, unknown> = { treeId, fromPersonId, toPersonId, type };\n if (certainty !== undefined) input.certainty = certainty;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n colCreateRelationship: Record<string, unknown>;\n }>(ops.CREATE_RELATIONSHIP, { input });\n return jsonResult(data.colCreateRelationship);\n } catch (error) {\n ctx.logger.error('collabkin relationships_create failed', { error: String(error) });\n return errorResult(\n `Failed to create relationship: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_delete')),\n {\n title: 'Delete Relationship',\n description: 'Delete a relationship between two people.',\n inputSchema: { id: z.string().describe('Relationship ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteRelationship: boolean }>(\n ops.DELETE_RELATIONSHIP,\n { id },\n );\n return jsonResult({ success: data.colDeleteRelationship, id });\n } catch (error) {\n ctx.logger.error('collabkin relationships_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete relationship: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin membership tools — family members & consent.\n *\n * Surface (4): memberships_{list,invite,accept,remove}.\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 { MemberRoleEnum } from './shared.js';\n\nexport function registerMembershipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_list')),\n {\n title: 'List Memberships',\n description: 'List the memberships (invited/active/declined/removed) for a family tree.',\n inputSchema: { treeId: z.string().describe('Family tree ID') },\n },\n async ({ treeId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListMemberships: Array<Record<string, unknown>>;\n }>(ops.LIST_MEMBERSHIPS, { treeId });\n return jsonResult(data.colListMemberships);\n } catch (error) {\n ctx.logger.error('collabkin memberships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list memberships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_invite')),\n {\n title: 'Invite Member',\n description:\n 'Invite a platform user to collaborate on a family tree. `treeId` and `memberUserId` are required; `personId` optionally links the member to a person record.',\n inputSchema: {\n treeId: z.string().min(1).describe('Family tree ID'),\n memberUserId: z.string().min(1).describe('Invited platform user ID'),\n personId: z.string().optional().describe('Linked person ID within the tree'),\n role: MemberRoleEnum.optional().describe('Member role (default VIEWER)'),\n },\n },\n async ({ treeId, memberUserId, personId, role }) => {\n try {\n const input: Record<string, unknown> = { treeId, memberUserId };\n if (personId !== undefined) input.personId = personId;\n if (role !== undefined) input.role = role;\n\n const data = await ctx.gql.workspace.request<{\n colInviteMember: Record<string, unknown>;\n }>(ops.INVITE_MEMBER, { input });\n return jsonResult(data.colInviteMember);\n } catch (error) {\n ctx.logger.error('collabkin memberships_invite failed', { error: String(error) });\n return errorResult(\n `Failed to invite member: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_accept')),\n {\n title: 'Accept Membership',\n description: 'Accept a pending membership invitation (moves it to ACTIVE).',\n inputSchema: { id: z.string().describe('Membership ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colAcceptMembership: Record<string, unknown>;\n }>(ops.ACCEPT_MEMBERSHIP, { id });\n return jsonResult(data.colAcceptMembership);\n } catch (error) {\n ctx.logger.error('collabkin memberships_accept failed', { error: String(error) });\n return errorResult(\n `Failed to accept membership: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_remove')),\n {\n title: 'Remove Member',\n description: 'Remove a member from a family tree (sets status to REMOVED).',\n inputSchema: { id: z.string().describe('Membership ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colRemoveMember: boolean }>(\n ops.REMOVE_MEMBER,\n { id },\n );\n return jsonResult({ success: data.colRemoveMember, id });\n } catch (error) {\n ctx.logger.error('collabkin memberships_remove failed', { error: String(error) });\n return errorResult(\n `Failed to remove member: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin memory tools — photos, videos, documents, and artifacts.\n *\n * Surface (5): memories_{list,get,create,update,delete}. The media blob itself\n * lives in wspace-files-svc; `fileId` references that File.\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 { MemoryKindEnum, VisibilityEnum, buildPagination } from './shared.js';\n\nexport function registerMemoryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_list')),\n {\n title: 'List Memories',\n description:\n 'List memories, optionally filtered by tree, person, and/or media kind, with cursor/offset pagination.',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n personId: z.string().optional().describe('Filter by associated person ID'),\n kind: MemoryKindEnum.optional().describe('Filter by media kind'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ treeId, personId, kind, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListMemories: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MEMORIES, {\n treeId,\n personId,\n kind,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListMemories);\n } catch (error) {\n ctx.logger.error('collabkin memories_list failed', { error: String(error) });\n return errorResult(\n `Failed to list memories: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_get')),\n {\n title: 'Get Memory',\n description: 'Fetch a single memory by ID, including its comments.',\n inputSchema: { id: z.string().describe('Memory ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colMemory: Record<string, unknown> | null;\n }>(ops.GET_MEMORY, { id });\n if (!data.colMemory) return errorResult(`Memory ${id} not found`);\n return jsonResult(data.colMemory);\n } catch (error) {\n ctx.logger.error('collabkin memories_get failed', { error: String(error) });\n return errorResult(\n `Failed to get memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_create')),\n {\n title: 'Create Memory',\n description:\n 'Add a memory (photo/video/document/artifact) to a family tree. `treeId` and `title` are required; `fileId` references a wspace-files-svc File.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n title: z.string().min(1).describe('Memory title'),\n description: z.string().optional().describe('Memory description'),\n kind: MemoryKindEnum.optional().describe('Media kind (default PHOTO)'),\n fileId: z.string().optional().describe('Media File ID (wspace-files-svc)'),\n personId: z.string().optional().describe('Associated person ID'),\n place: z.string().optional().describe('Where the memory was captured'),\n takenAt: z.string().optional().describe('When it was captured (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n visibility: VisibilityEnum.optional().describe('Visibility (default TREE)'),\n },\n },\n async ({\n treeId,\n title,\n description,\n kind,\n fileId,\n personId,\n place,\n takenAt,\n tags,\n visibility,\n }) => {\n try {\n const input: Record<string, unknown> = { treeId, title };\n if (description !== undefined) input.description = description;\n if (kind !== undefined) input.kind = kind;\n if (fileId !== undefined) input.fileId = fileId;\n if (personId !== undefined) input.personId = personId;\n if (place !== undefined) input.place = place;\n if (takenAt !== undefined) input.takenAt = takenAt;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n\n const data = await ctx.gql.workspace.request<{\n colCreateMemory: Record<string, unknown>;\n }>(ops.CREATE_MEMORY, { input });\n return jsonResult(data.colCreateMemory);\n } catch (error) {\n ctx.logger.error('collabkin memories_create failed', { error: String(error) });\n return errorResult(\n `Failed to create memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_update')),\n {\n title: 'Update Memory',\n description: 'Update a memory. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Memory ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n kind: MemoryKindEnum.optional().describe('Updated media kind'),\n fileId: z.string().optional().describe('Updated media File ID'),\n personId: z.string().optional().describe('Updated associated person ID'),\n place: z.string().optional().describe('Updated place'),\n takenAt: z.string().optional().describe('Updated capture date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n visibility: VisibilityEnum.optional().describe('Updated visibility'),\n },\n },\n async ({\n id,\n title,\n description,\n kind,\n fileId,\n personId,\n place,\n takenAt,\n tags,\n visibility,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (title !== undefined) input.title = title;\n if (description !== undefined) input.description = description;\n if (kind !== undefined) input.kind = kind;\n if (fileId !== undefined) input.fileId = fileId;\n if (personId !== undefined) input.personId = personId;\n if (place !== undefined) input.place = place;\n if (takenAt !== undefined) input.takenAt = takenAt;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable memory field');\n }\n\n const data = await ctx.gql.workspace.request<{\n colUpdateMemory: Record<string, unknown>;\n }>(ops.UPDATE_MEMORY, { id, input });\n return jsonResult(data.colUpdateMemory);\n } catch (error) {\n ctx.logger.error('collabkin memories_update failed', { error: String(error) });\n return errorResult(\n `Failed to update memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_delete')),\n {\n title: 'Delete Memory',\n description: 'Delete a memory from a family tree.',\n inputSchema: { id: z.string().describe('Memory ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteMemory: boolean }>(\n ops.DELETE_MEMORY,\n { id },\n );\n return jsonResult({ success: data.colDeleteMemory, id });\n } catch (error) {\n ctx.logger.error('collabkin memories_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin story tools — written/recorded family stories.\n *\n * Surface (4): stories_{list,get,create,delete}. Recorded audio/video lives in\n * wspace-files-svc; `recordingFileId` references that File.\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 { StoryFormatEnum, VisibilityEnum, buildPagination } from './shared.js';\n\nexport function registerStoryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_list')),\n {\n title: 'List Stories',\n description:\n 'List stories, optionally filtered by tree and/or person, with cursor/offset pagination.',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n personId: z.string().optional().describe('Filter by associated person ID'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ treeId, personId, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListStories: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_STORIES, {\n treeId,\n personId,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListStories);\n } catch (error) {\n ctx.logger.error('collabkin stories_list failed', { error: String(error) });\n return errorResult(\n `Failed to list stories: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_get')),\n {\n title: 'Get Story',\n description: 'Fetch a single story by ID, including its comments.',\n inputSchema: { id: z.string().describe('Story ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colStory: Record<string, unknown> | null;\n }>(ops.GET_STORY, { id });\n if (!data.colStory) return errorResult(`Story ${id} not found`);\n return jsonResult(data.colStory);\n } catch (error) {\n ctx.logger.error('collabkin stories_get failed', { error: String(error) });\n return errorResult(\n `Failed to get story: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_create')),\n {\n title: 'Create Story',\n description:\n 'Add a story to a family tree. `treeId` and `title` are required; for recorded stories set `format` (AUDIO/VIDEO) and `recordingFileId`.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n title: z.string().min(1).describe('Story title'),\n body: z.string().optional().describe('Written story body'),\n format: StoryFormatEnum.optional().describe('Story format (default WRITTEN)'),\n narrator: z.string().optional().describe('Narrator name'),\n personId: z.string().optional().describe('Associated person ID'),\n recordingFileId: z.string().optional().describe('Recording File ID (wspace-files-svc)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n visibility: VisibilityEnum.optional().describe('Visibility (default TREE)'),\n },\n },\n async ({\n treeId,\n title,\n body,\n format,\n narrator,\n personId,\n recordingFileId,\n tags,\n visibility,\n }) => {\n try {\n const input: Record<string, unknown> = { treeId, title };\n if (body !== undefined) input.body = body;\n if (format !== undefined) input.format = format;\n if (narrator !== undefined) input.narrator = narrator;\n if (personId !== undefined) input.personId = personId;\n if (recordingFileId !== undefined) input.recordingFileId = recordingFileId;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n\n const data = await ctx.gql.workspace.request<{\n colCreateStory: Record<string, unknown>;\n }>(ops.CREATE_STORY, { input });\n return jsonResult(data.colCreateStory);\n } catch (error) {\n ctx.logger.error('collabkin stories_create failed', { error: String(error) });\n return errorResult(\n `Failed to create story: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_delete')),\n {\n title: 'Delete Story',\n description: 'Delete a story from a family tree.',\n inputSchema: { id: z.string().describe('Story ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteStory: boolean }>(\n ops.DELETE_STORY,\n { id },\n );\n return jsonResult({ success: data.colDeleteStory, id });\n } catch (error) {\n ctx.logger.error('collabkin stories_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete story: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin comment tools — discussion on memories & stories.\n *\n * Surface (3): comments_{list,add,delete}. A comment is attached to exactly one\n * of a memory or a story.\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';\n\nexport function registerCommentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_list')),\n {\n title: 'List Comments',\n description:\n 'List comments for a memory or a story. Provide exactly one of `memoryId` or `storyId`.',\n inputSchema: {\n memoryId: z.string().optional().describe('List comments on this memory'),\n storyId: z.string().optional().describe('List comments on this story'),\n },\n },\n async ({ memoryId, storyId }) => {\n try {\n if (!memoryId && !storyId) {\n return errorResult('Provide exactly one of memoryId or storyId');\n }\n const data = await ctx.gql.workspace.request<{\n colListComments: Array<Record<string, unknown>>;\n }>(ops.LIST_COMMENTS, { memoryId, storyId });\n return jsonResult(data.colListComments);\n } catch (error) {\n ctx.logger.error('collabkin comments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list comments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_add')),\n {\n title: 'Add Comment',\n description:\n 'Add a comment to a memory or a story. `body` is required; provide exactly one of `memoryId` or `storyId`.',\n inputSchema: {\n body: z.string().min(1).describe('Comment body'),\n memoryId: z.string().optional().describe('Memory to comment on'),\n storyId: z.string().optional().describe('Story to comment on'),\n },\n },\n async ({ body, memoryId, storyId }) => {\n try {\n if (!memoryId && !storyId) {\n return errorResult('Provide exactly one of memoryId or storyId');\n }\n const input: Record<string, unknown> = { body };\n if (memoryId !== undefined) input.memoryId = memoryId;\n if (storyId !== undefined) input.storyId = storyId;\n\n const data = await ctx.gql.workspace.request<{\n colAddComment: Record<string, unknown>;\n }>(ops.ADD_COMMENT, { input });\n return jsonResult(data.colAddComment);\n } catch (error) {\n ctx.logger.error('collabkin comments_add failed', { error: String(error) });\n return errorResult(\n `Failed to add comment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_delete')),\n {\n title: 'Delete Comment',\n description: 'Delete a comment.',\n inputSchema: { id: z.string().describe('Comment ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteComment: boolean }>(\n ops.DELETE_COMMENT,\n { id },\n );\n return jsonResult({ success: data.colDeleteComment, id });\n } catch (error) {\n ctx.logger.error('collabkin comments_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete comment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin timeline tools — the family's dated events.\n *\n * Surface (3): timeline_list (the colTimeline query), timeline_create_event,\n * timeline_delete_event. The underlying @key entity is ColEvent; `timeline_list`\n * returns the events for a tree (optionally one person), most-recent first.\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 { EventTypeEnum } from './shared.js';\n\nexport function registerTimelineTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timeline_list')),\n {\n title: 'List Timeline',\n description:\n 'The family timeline — dated events for a tree (optionally one person), ordered most-recent first. `treeId` is required; filter by event `type` if desired.',\n inputSchema: {\n treeId: z.string().describe('Family tree ID'),\n personId: z.string().optional().describe('Restrict to events about this person'),\n type: EventTypeEnum.optional().describe('Filter by event type'),\n },\n },\n async ({ treeId, personId, type }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colTimeline: Array<Record<string, unknown>>;\n }>(ops.TIMELINE, { treeId, personId, type });\n return jsonResult(data.colTimeline);\n } catch (error) {\n ctx.logger.error('collabkin timeline_list failed', { error: String(error) });\n return errorResult(\n `Failed to list timeline: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timeline_create_event')),\n {\n title: 'Create Event',\n description:\n 'Add a dated event to the family timeline. `treeId`, `title`, and `date` are required.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n title: z.string().min(1).describe('Event title'),\n date: z.string().describe('Event date (ISO-8601 DateTime)'),\n type: EventTypeEnum.optional().describe('Event type (default MILESTONE)'),\n description: z.string().optional().describe('Event description'),\n place: z.string().optional().describe('Where it happened'),\n personId: z.string().optional().describe('Person the event is about'),\n isApproximate: z\n .boolean()\n .optional()\n .describe('Whether the date is approximate (default false)'),\n },\n },\n async ({ treeId, title, date, type, description, place, personId, isApproximate }) => {\n try {\n const input: Record<string, unknown> = { treeId, title, date };\n if (type !== undefined) input.type = type;\n if (description !== undefined) input.description = description;\n if (place !== undefined) input.place = place;\n if (personId !== undefined) input.personId = personId;\n if (isApproximate !== undefined) input.isApproximate = isApproximate;\n\n const data = await ctx.gql.workspace.request<{\n colCreateEvent: Record<string, unknown>;\n }>(ops.CREATE_EVENT, { input });\n return jsonResult(data.colCreateEvent);\n } catch (error) {\n ctx.logger.error('collabkin timeline_create_event failed', { error: String(error) });\n return errorResult(\n `Failed to create event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timeline_delete_event')),\n {\n title: 'Delete Event',\n description: 'Delete an event from the family timeline.',\n inputSchema: { id: z.string().describe('Event ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteEvent: boolean }>(\n ops.DELETE_EVENT,\n { id },\n );\n return jsonResult({ success: data.colDeleteEvent, id });\n } catch (error) {\n ctx.logger.error('collabkin timeline_delete_event failed', { error: String(error) });\n return errorResult(\n `Failed to delete event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin health tool.\n *\n * Surface (1): health — maps to the @public `colHealth` query (no auth\n * required), a liveness/identity probe for the Collabkin subgraph.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health')),\n {\n title: 'Collabkin Health Check',\n description:\n 'Public health probe for the Collabkin subgraph (colHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ colHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.colHealth });\n } catch (error) {\n ctx.logger.error('collabkin health failed', { error: String(error) });\n return errorResult(\n `Collabkin health check failed: ${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_FAMILY_TREES } from './operations.js';\n\n/**\n * Read-only Collabkin 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 */\nexport function registerCollabkinResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const treesUri = track(mcpResourceUri(ctx.productName, 'trees'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'collabkin-schema',\n schemaUri,\n {\n title: 'Collabkin Domain Schema',\n description:\n 'Overview of the Collabkin family-heritage 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 = `# Collabkin Domain (Overview)\n\nA private, collaborative home for a family and its ancestry.\n\n## Entities\n- ColFamilyTree — top-level container (people, memberships, memories, stories, timeline)\n- ColPerson — a relative or ancestor within a tree (has relationships)\n- ColRelationship — a typed edge between two people (PARENT, SPOUSE, …)\n- ColMembership — a family member / invited collaborator + consent state\n- ColMemory (+ColComment) — a photo/video/document/artifact + its comments\n- ColStory (+ColComment) — a written/recorded family story + its comments\n- ColEvent — a dated entry on the family timeline\n\n## Enums\n- ColTreeStatus: ACTIVE, ARCHIVED\n- ColGender: FEMALE, MALE, OTHER, UNKNOWN\n- ColLifeStatus: DECEASED, LIVING, UNKNOWN\n- ColMemberRole: CONTRIBUTOR, OWNER, STEWARD, VIEWER\n- ColMembershipStatus: ACTIVE, DECLINED, INVITED, REMOVED\n- ColMemoryKind: ARTIFACT, AUDIO, DOCUMENT, PHOTO, VIDEO\n- ColVisibility: PRIVATE, STEWARDS, TREE\n- ColEventType: BIRTH, DEATH, DIVORCE, EDUCATION, IMMIGRATION, MARRIAGE, MILESTONE, MILITARY, OTHER, RESIDENCE\n- ColRelationshipType: CHILD, GRANDCHILD, GRANDPARENT, GUARDIAN, PARENT, PARTNER, SIBLING, SPOUSE\n- ColStoryFormat: AUDIO, VIDEO, WRITTEN\n- ColCertainty: CONFIRMED, DISPUTED, PROBABLE, UNVERIFIED\n\n## Tool groups\ntrees, people, relationships, memberships, memories, stories, comments, timeline.\nAll run against the WORKSPACE gateway (workspace-scoped) except the public health probe.\nMemory/story/portrait/cover blobs live in wspace-files-svc (referenced by File id).\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://trees — family-tree directory\n server.registerResource(\n 'collabkin-trees',\n treesUri,\n {\n title: 'Collabkin Family Tree Directory',\n description: 'The first 50 active family trees in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${treesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ colListFamilyTrees: unknown }>(\n LIST_FAMILY_TREES,\n { status: 'ACTIVE', pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: treesUri,\n text: JSON.stringify(data.colListFamilyTrees, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: treesUri,\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 * Collabkin MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerCollabkinPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'tree-setup'));\n const heritageName = track(mcpPromptName(p, 'heritage-curation'));\n\n // <product>-tree-setup — stand up a family tree + people + memberships\n server.registerPrompt(\n setupName,\n {\n title: 'Family Tree Setup',\n description:\n 'Guide for setting up a new Collabkin family tree end to end: create the tree, add people, connect them with relationships, and invite family members.',\n argsSchema: {\n name: z.string().optional().describe('Family tree name'),\n surname: z.string().optional().describe('Primary family surname'),\n },\n },\n ({ name, surname }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { name, surname });\n const nameNote = name\n ? `Use the tree name \"${name}\".`\n : 'Ask the user for the family tree name.';\n const surnameNote = surname ? `Use surname \"${surname}\".` : '';\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 Collabkin family tree.\n\n1. **Create Tree**: Use ${p}_trees_create. ${nameNote} ${surnameNote}\n2. **Add People**: Use ${p}_people_create for each relative/ancestor — set treeId, givenName (required), plus gender, lifeStatus, birthDate/birthPlace, and deathDate for ancestors.\n3. **Connect Relationships**: Use ${p}_relationships_create to link people (PARENT, SPOUSE, SIBLING, CHILD, …) — pass treeId, fromPersonId, toPersonId, and type.\n4. **Invite Family**: Use ${p}_memberships_invite to bring in collaborators (treeId, memberUserId, role=CONTRIBUTOR/VIEWER).\n5. **Verify**: Use ${p}_people_list and ${p}_relationships_list (filtered by the new treeId) to confirm the shape.\n\nShow results at each step and confirm before inviting members.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-heritage-curation — capture memories, stories, and the timeline\n server.registerPrompt(\n heritageName,\n {\n title: 'Heritage Curation',\n description:\n 'Workflow for enriching a family tree: add memories and stories, discuss them via comments, and build out the family timeline.',\n argsSchema: {\n treeId: z.string().optional().describe('Family tree ID to curate'),\n },\n },\n ({ treeId }) => {\n ctx.logger.debug(`Prompt ${heritageName} called`, { treeId });\n const treeNote = treeId\n ? `Curate tree \"${treeId}\".`\n : `First list trees with ${p}_trees_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me curate family heritage in Collabkin. ${treeNote}\n\n1. **Memories**: Use ${p}_memories_create to add photos/videos/documents/artifacts (treeId, title, kind, optional fileId from wspace-files, personId, visibility).\n2. **Stories**: Use ${p}_stories_create for written or recorded stories (treeId, title, body or format+recordingFileId, narrator, personId).\n3. **Discuss**: Use ${p}_comments_add to discuss a memory or story (exactly one of memoryId/storyId).\n4. **Timeline**: Use ${p}_timeline_create_event to add dated milestones (births, marriages, immigrations, …) and ${p}_timeline_list to review them most-recent first.\n5. **Review**: Use ${p}_memories_list and ${p}_stories_list to confirm what was captured.\n\nSummarize what was added after each step and suggest gaps to fill.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Collabkin module — domain module for the future-products ecosystem program.\n *\n * Covers all 8 @key entities of wspace-collabkin-svc grouped into per-entity\n * sub-APIs: trees, people, relationships, memberships, memories, stories,\n * comments, timeline (events), plus a public health probe. Mirrors the\n * kadaikodi module's structure (tools/<entity>.ts + resources.ts + prompts.ts)\n * and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/collabkin/wspace-collabkin-svc/ (Hive service name\n * `collabkin`). All operations run against the WORKSPACE gateway; every\n * product-owned root field is prefixed `col*` / every type `Col*`. The @public\n * `colHealth` probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerTreeTools } from './tools/trees.js';\nimport { registerPersonTools } from './tools/people.js';\nimport { registerRelationshipTools } from './tools/relationships.js';\nimport { registerMembershipTools } from './tools/memberships.js';\nimport { registerMemoryTools } from './tools/memories.js';\nimport { registerStoryTools } from './tools/stories.js';\nimport { registerCommentTools } from './tools/comments.js';\nimport { registerTimelineTools } from './tools/timeline.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerCollabkinResources } from './resources.js';\nimport { registerCollabkinPrompts } from './prompts.js';\n\nconst collabkinModule: McpModule = {\n id: 'collabkin',\n version: '0.0.1',\n displayName: 'Collabkin',\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 registerTreeTools(server, ctx, trackTool);\n registerPersonTools(server, ctx, trackTool);\n registerRelationshipTools(server, ctx, trackTool);\n registerMembershipTools(server, ctx, trackTool);\n registerMemoryTools(server, ctx, trackTool);\n registerStoryTools(server, ctx, trackTool);\n registerCommentTools(server, ctx, trackTool);\n registerTimelineTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerCollabkinResources(server, ctx, trackResource);\n registerCollabkinPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default collabkinModule;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/collabkin/operations.ts","../../../src/modules/collabkin/tools/shared.ts","../../../src/modules/collabkin/tools/trees.ts","../../../src/modules/collabkin/tools/people.ts","../../../src/modules/collabkin/tools/relationships.ts","../../../src/modules/collabkin/tools/memberships.ts","../../../src/modules/collabkin/tools/memories.ts","../../../src/modules/collabkin/tools/stories.ts","../../../src/modules/collabkin/tools/comments.ts","../../../src/modules/collabkin/tools/timeline.ts","../../../src/modules/collabkin/tools/health.ts","../../../src/modules/collabkin/resources.ts","../../../src/modules/collabkin/prompts.ts","../../../src/modules/collabkin/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 Collabkin MCP module.\n *\n * Collabkin is the private, collaborative home for a family and its ancestry\n * (future-products ecosystem). Backend subgraph:\n * ~/products/collabkin/wspace-collabkin-svc/ (Hive service name `collabkin`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — Collabkin inputs do NOT carry a workspaceId.\n *\n * Every product-owned root field is prefixed `col*` / every type `Col*` per the\n * service's GraphQL naming contract; the @public `colHealth` probe is exposed\n * as `<product>_health`. Connection queries take a `pagination: PaginationInput`\n * ({ cursor, limit, offset }) and return `{ items, pageInfo { cursor, hasMore } }`.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi module's operations file.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const TREE_FIELDS = `\n id name surname description status tags workspaceId createdAt updatedAt\n coverFile { id }\n`;\n\nexport const PERSON_FIELDS = `\n id treeId givenName familyName maidenName nickname gender lifeStatus\n birthDate birthPlace deathDate bio tags linkedUserId workspaceId\n createdAt updatedAt\n photoFile { id }\n`;\n\nexport const RELATIONSHIP_FIELDS = `\n id treeId fromPersonId toPersonId type certainty startDate endDate notes\n workspaceId createdAt updatedAt\n`;\n\nexport const MEMBERSHIP_FIELDS = `\n id treeId memberUserId personId role status invitedById invitedAt acceptedAt\n workspaceId createdAt updatedAt\n`;\n\nexport const COMMENT_FIELDS = `\n id body memoryId storyId workspaceId createdAt updatedAt\n`;\n\nexport const MEMORY_FIELDS = `\n id treeId title description kind place takenAt tags visibility personId\n workspaceId createdAt updatedAt\n file { id }\n`;\n\nexport const STORY_FIELDS = `\n id treeId title body format narrator personId tags visibility\n workspaceId createdAt updatedAt\n recordingFile { id }\n`;\n\nexport const EVENT_FIELDS = `\n id treeId personId type title description date place isApproximate\n workspaceId createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Family trees\n// ---------------------------------------------------------------------------\n\nexport const GET_FAMILY_TREE = `\n query CollabkinGetFamilyTree($id: ID!) {\n colFamilyTree(id: $id) {\n ${TREE_FIELDS}\n people { id givenName familyName lifeStatus }\n memberships { id memberUserId role status }\n }\n }\n`;\n\nexport const LIST_FAMILY_TREES = `\n query CollabkinListFamilyTrees($pagination: PaginationInput, $status: ColTreeStatus) {\n colListFamilyTrees(pagination: $pagination, status: $status) {\n items { ${TREE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_FAMILY_TREE = `\n mutation CollabkinCreateFamilyTree($input: ColCreateFamilyTreeInput!) {\n colCreateFamilyTree(input: $input) {\n ${TREE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_FAMILY_TREE = `\n mutation CollabkinUpdateFamilyTree($id: ID!, $input: ColUpdateFamilyTreeInput!) {\n colUpdateFamilyTree(id: $id, input: $input) {\n ${TREE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_FAMILY_TREE = `\n mutation CollabkinArchiveFamilyTree($id: ID!) {\n colArchiveFamilyTree(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// People\n// ---------------------------------------------------------------------------\n\nexport const GET_PERSON = `\n query CollabkinGetPerson($id: ID!) {\n colPerson(id: $id) {\n ${PERSON_FIELDS}\n relationships { ${RELATIONSHIP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_PEOPLE = `\n query CollabkinListPeople(\n $treeId: ID\n $lifeStatus: ColLifeStatus\n $pagination: PaginationInput\n ) {\n colListPeople(treeId: $treeId, lifeStatus: $lifeStatus, pagination: $pagination) {\n items { ${PERSON_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PERSON = `\n mutation CollabkinCreatePerson($input: ColCreatePersonInput!) {\n colCreatePerson(input: $input) {\n ${PERSON_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PERSON = `\n mutation CollabkinUpdatePerson($id: ID!, $input: ColUpdatePersonInput!) {\n colUpdatePerson(id: $id, input: $input) {\n ${PERSON_FIELDS}\n }\n }\n`;\n\nexport const DELETE_PERSON = `\n mutation CollabkinDeletePerson($id: ID!) {\n colDeletePerson(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Relationships\n// ---------------------------------------------------------------------------\n\nexport const LIST_RELATIONSHIPS = `\n query CollabkinListRelationships($treeId: ID, $personId: ID) {\n colListRelationships(treeId: $treeId, personId: $personId) {\n ${RELATIONSHIP_FIELDS}\n fromPerson { id givenName familyName }\n toPerson { id givenName familyName }\n }\n }\n`;\n\nexport const CREATE_RELATIONSHIP = `\n mutation CollabkinCreateRelationship($input: ColCreateRelationshipInput!) {\n colCreateRelationship(input: $input) {\n ${RELATIONSHIP_FIELDS}\n }\n }\n`;\n\nexport const DELETE_RELATIONSHIP = `\n mutation CollabkinDeleteRelationship($id: ID!) {\n colDeleteRelationship(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Memberships\n// ---------------------------------------------------------------------------\n\nexport const LIST_MEMBERSHIPS = `\n query CollabkinListMemberships($treeId: ID!) {\n colListMemberships(treeId: $treeId) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const INVITE_MEMBER = `\n mutation CollabkinInviteMember($input: ColInviteMemberInput!) {\n colInviteMember(input: $input) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const ACCEPT_MEMBERSHIP = `\n mutation CollabkinAcceptMembership($id: ID!) {\n colAcceptMembership(id: $id) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const REMOVE_MEMBER = `\n mutation CollabkinRemoveMember($id: ID!) {\n colRemoveMember(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Memories\n// ---------------------------------------------------------------------------\n\nexport const GET_MEMORY = `\n query CollabkinGetMemory($id: ID!) {\n colMemory(id: $id) {\n ${MEMORY_FIELDS}\n comments { ${COMMENT_FIELDS} }\n }\n }\n`;\n\nexport const LIST_MEMORIES = `\n query CollabkinListMemories(\n $treeId: ID\n $personId: ID\n $kind: ColMemoryKind\n $pagination: PaginationInput\n ) {\n colListMemories(\n treeId: $treeId\n personId: $personId\n kind: $kind\n pagination: $pagination\n ) {\n items { ${MEMORY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MEMORY = `\n mutation CollabkinCreateMemory($input: ColCreateMemoryInput!) {\n colCreateMemory(input: $input) {\n ${MEMORY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_MEMORY = `\n mutation CollabkinUpdateMemory($id: ID!, $input: ColUpdateMemoryInput!) {\n colUpdateMemory(id: $id, input: $input) {\n ${MEMORY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_MEMORY = `\n mutation CollabkinDeleteMemory($id: ID!) {\n colDeleteMemory(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Stories\n// ---------------------------------------------------------------------------\n\nexport const GET_STORY = `\n query CollabkinGetStory($id: ID!) {\n colStory(id: $id) {\n ${STORY_FIELDS}\n comments { ${COMMENT_FIELDS} }\n }\n }\n`;\n\nexport const LIST_STORIES = `\n query CollabkinListStories(\n $treeId: ID\n $personId: ID\n $pagination: PaginationInput\n ) {\n colListStories(treeId: $treeId, personId: $personId, pagination: $pagination) {\n items { ${STORY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_STORY = `\n mutation CollabkinCreateStory($input: ColCreateStoryInput!) {\n colCreateStory(input: $input) {\n ${STORY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_STORY = `\n mutation CollabkinDeleteStory($id: ID!) {\n colDeleteStory(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Comments\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMMENTS = `\n query CollabkinListComments($memoryId: ID, $storyId: ID) {\n colListComments(memoryId: $memoryId, storyId: $storyId) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\nexport const ADD_COMMENT = `\n mutation CollabkinAddComment($input: ColCreateCommentInput!) {\n colAddComment(input: $input) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\nexport const DELETE_COMMENT = `\n mutation CollabkinDeleteComment($id: ID!) {\n colDeleteComment(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Timeline + events\n// ---------------------------------------------------------------------------\n\nexport const TIMELINE = `\n query CollabkinTimeline($treeId: ID!, $personId: ID, $type: ColEventType) {\n colTimeline(treeId: $treeId, personId: $personId, type: $type) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_EVENT = `\n mutation CollabkinCreateEvent($input: ColCreateEventInput!) {\n colCreateEvent(input: $input) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const DELETE_EVENT = `\n mutation CollabkinDeleteEvent($id: ID!) {\n colDeleteEvent(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query CollabkinHealth {\n colHealth\n }\n`;\n","/**\n * Shared zod schemas + helpers for the Collabkin 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. `tags` are free-form string\n * arrays; DateTime fields are passed as ISO-8601 strings (the backend `DateTime`\n * scalar). Connection queries take a `pagination: PaginationInput`\n * ({ cursor, limit, offset }), built via `buildPagination`.\n */\n\nimport { z } from 'zod';\n\nexport const TreeStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED'])\n .describe('Lifecycle status of a family tree');\n\nexport const GenderEnum = z\n .enum(['FEMALE', 'MALE', 'OTHER', 'UNKNOWN'])\n .describe('Gender of a person');\n\nexport const LifeStatusEnum = z\n .enum(['DECEASED', 'LIVING', 'UNKNOWN'])\n .describe('Whether a person is living, deceased, or unknown');\n\nexport const MemberRoleEnum = z\n .enum(['CONTRIBUTOR', 'OWNER', 'STEWARD', 'VIEWER'])\n .describe('A member’s role within a family tree');\n\nexport const MemoryKindEnum = z\n .enum(['ARTIFACT', 'AUDIO', 'DOCUMENT', 'PHOTO', 'VIDEO'])\n .describe('Media type of a memory');\n\nexport const VisibilityEnum = z\n .enum(['PRIVATE', 'STEWARDS', 'TREE'])\n .describe('Who can see a memory or story (PRIVATE, STEWARDS, or whole TREE)');\n\nexport const EventTypeEnum = z\n .enum([\n 'BIRTH',\n 'DEATH',\n 'DIVORCE',\n 'EDUCATION',\n 'IMMIGRATION',\n 'MARRIAGE',\n 'MILESTONE',\n 'MILITARY',\n 'OTHER',\n 'RESIDENCE',\n ])\n .describe('Type of a timeline event');\n\nexport const RelationshipTypeEnum = z\n .enum([\n 'CHILD',\n 'GRANDCHILD',\n 'GRANDPARENT',\n 'GUARDIAN',\n 'PARENT',\n 'PARTNER',\n 'SIBLING',\n 'SPOUSE',\n ])\n .describe('Kind of relationship between two people');\n\nexport const StoryFormatEnum = z\n .enum(['AUDIO', 'VIDEO', 'WRITTEN'])\n .describe('Format a story is recorded in');\n\nexport const CertaintyEnum = z\n .enum(['CONFIRMED', 'DISPUTED', 'PROBABLE', 'UNVERIFIED'])\n .describe('Confidence level of a recorded relationship');\n\n/**\n * Build a `PaginationInput` ({ cursor, limit, offset }) from optional parts.\n * Returns `undefined` when no pagination args were supplied so the backend\n * applies its own defaults (limit 50, offset 0).\n */\nexport function buildPagination(\n limit?: number,\n offset?: number,\n cursor?: string,\n): Record<string, unknown> | undefined {\n const pagination: Record<string, unknown> = {};\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n if (cursor !== undefined) pagination.cursor = cursor;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n","/**\n * Collabkin family-tree tools.\n *\n * Surface (5): trees_{list,get,create,update,archive}. A family tree is the\n * top-level container for people, relationships, memberships, memories,\n * stories, and the timeline.\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 { TreeStatusEnum, buildPagination } from './shared.js';\n\nexport function registerTreeTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_list')),\n {\n title: 'List Family Trees',\n description:\n 'List the family trees in the bound workspace, optionally filtered by status (ACTIVE/ARCHIVED), with cursor/offset pagination.',\n inputSchema: {\n status: TreeStatusEnum.optional().describe('Filter by tree status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListFamilyTrees: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_FAMILY_TREES, {\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListFamilyTrees);\n } catch (error) {\n ctx.logger.error('collabkin trees_list failed', { error: String(error) });\n return errorResult(\n `Failed to list family trees: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_get')),\n {\n title: 'Get Family Tree',\n description:\n 'Fetch a single family tree by ID, including a summary of its people and memberships.',\n inputSchema: { id: z.string().describe('Family tree ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colFamilyTree: Record<string, unknown> | null;\n }>(ops.GET_FAMILY_TREE, { id });\n if (!data.colFamilyTree) return errorResult(`Family tree ${id} not found`);\n return jsonResult(data.colFamilyTree);\n } catch (error) {\n ctx.logger.error('collabkin trees_get failed', { error: String(error) });\n return errorResult(\n `Failed to get family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_create')),\n {\n title: 'Create Family Tree',\n description:\n 'Create a new family tree. Only `name` is required; `coverFileId` references a wspace-files-svc File.',\n inputSchema: {\n name: z.string().min(1).describe('Family tree name'),\n surname: z.string().optional().describe('Primary family surname'),\n description: z.string().optional().describe('Tree description'),\n coverFileId: z.string().optional().describe('Cover image File ID (wspace-files-svc)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, surname, description, coverFileId, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (surname !== undefined) input.surname = surname;\n if (description !== undefined) input.description = description;\n if (coverFileId !== undefined) input.coverFileId = coverFileId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n colCreateFamilyTree: Record<string, unknown>;\n }>(ops.CREATE_FAMILY_TREE, { input });\n return jsonResult(data.colCreateFamilyTree);\n } catch (error) {\n ctx.logger.error('collabkin trees_create failed', { error: String(error) });\n return errorResult(\n `Failed to create family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_update')),\n {\n title: 'Update Family Tree',\n description: 'Update a family tree. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Family tree ID'),\n name: z.string().optional().describe('Updated name'),\n surname: z.string().optional().describe('Updated surname'),\n description: z.string().optional().describe('Updated description'),\n coverFileId: z.string().optional().describe('Updated cover image File ID'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({ id, name, surname, description, coverFileId, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (surname !== undefined) input.surname = surname;\n if (description !== undefined) input.description = description;\n if (coverFileId !== undefined) input.coverFileId = coverFileId;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/surname/description/coverFileId/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n colUpdateFamilyTree: Record<string, unknown>;\n }>(ops.UPDATE_FAMILY_TREE, { id, input });\n return jsonResult(data.colUpdateFamilyTree);\n } catch (error) {\n ctx.logger.error('collabkin trees_update failed', { error: String(error) });\n return errorResult(\n `Failed to update family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trees_archive')),\n {\n title: 'Archive Family Tree',\n description: 'Archive a family tree (soft delete — sets status to ARCHIVED).',\n inputSchema: { id: z.string().describe('Family tree ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colArchiveFamilyTree: boolean }>(\n ops.ARCHIVE_FAMILY_TREE,\n { id },\n );\n return jsonResult({ success: data.colArchiveFamilyTree, id });\n } catch (error) {\n ctx.logger.error('collabkin trees_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive family tree: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin people tools — relatives & ancestors within a family tree.\n *\n * Surface (5): people_{list,get,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 { GenderEnum, LifeStatusEnum, buildPagination } from './shared.js';\n\nexport function registerPersonTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_list')),\n {\n title: 'List People',\n description:\n 'List people in a family tree, optionally filtered by tree and/or life status, with cursor/offset pagination.',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n lifeStatus: LifeStatusEnum.optional().describe('Filter by life status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ treeId, lifeStatus, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListPeople: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_PEOPLE, {\n treeId,\n lifeStatus,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListPeople);\n } catch (error) {\n ctx.logger.error('collabkin people_list failed', { error: String(error) });\n return errorResult(\n `Failed to list people: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_get')),\n {\n title: 'Get Person',\n description: 'Fetch a single person by ID, including their relationships.',\n inputSchema: { id: z.string().describe('Person ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colPerson: Record<string, unknown> | null;\n }>(ops.GET_PERSON, { id });\n if (!data.colPerson) return errorResult(`Person ${id} not found`);\n return jsonResult(data.colPerson);\n } catch (error) {\n ctx.logger.error('collabkin people_get failed', { error: String(error) });\n return errorResult(\n `Failed to get person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_create')),\n {\n title: 'Create Person',\n description:\n 'Add a person to a family tree. `treeId` and `givenName` are required; `linkedUserId` links the person to a platform user, `photoFileId` references a wspace-files-svc File.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n givenName: z.string().min(1).describe('Given (first) name'),\n familyName: z.string().optional().describe('Family (last) name'),\n maidenName: z.string().optional().describe('Maiden name'),\n nickname: z.string().optional().describe('Nickname'),\n gender: GenderEnum.optional().describe('Gender (default UNKNOWN)'),\n lifeStatus: LifeStatusEnum.optional().describe('Life status (default UNKNOWN)'),\n birthDate: z.string().optional().describe('Birth date (ISO-8601 DateTime)'),\n birthPlace: z.string().optional().describe('Birth place'),\n deathDate: z.string().optional().describe('Death date (ISO-8601 DateTime)'),\n bio: z.string().optional().describe('Biographical notes'),\n linkedUserId: z.string().optional().describe('Linked platform user ID'),\n photoFileId: z.string().optional().describe('Portrait photo File ID'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({\n treeId,\n givenName,\n familyName,\n maidenName,\n nickname,\n gender,\n lifeStatus,\n birthDate,\n birthPlace,\n deathDate,\n bio,\n linkedUserId,\n photoFileId,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { treeId, givenName };\n if (familyName !== undefined) input.familyName = familyName;\n if (maidenName !== undefined) input.maidenName = maidenName;\n if (nickname !== undefined) input.nickname = nickname;\n if (gender !== undefined) input.gender = gender;\n if (lifeStatus !== undefined) input.lifeStatus = lifeStatus;\n if (birthDate !== undefined) input.birthDate = birthDate;\n if (birthPlace !== undefined) input.birthPlace = birthPlace;\n if (deathDate !== undefined) input.deathDate = deathDate;\n if (bio !== undefined) input.bio = bio;\n if (linkedUserId !== undefined) input.linkedUserId = linkedUserId;\n if (photoFileId !== undefined) input.photoFileId = photoFileId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n colCreatePerson: Record<string, unknown>;\n }>(ops.CREATE_PERSON, { input });\n return jsonResult(data.colCreatePerson);\n } catch (error) {\n ctx.logger.error('collabkin people_create failed', { error: String(error) });\n return errorResult(\n `Failed to create person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_update')),\n {\n title: 'Update Person',\n description: 'Update a person. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Person ID'),\n givenName: z.string().optional().describe('Updated given name'),\n familyName: z.string().optional().describe('Updated family name'),\n maidenName: z.string().optional().describe('Updated maiden name'),\n nickname: z.string().optional().describe('Updated nickname'),\n gender: GenderEnum.optional().describe('Updated gender'),\n lifeStatus: LifeStatusEnum.optional().describe('Updated life status'),\n birthDate: z.string().optional().describe('Updated birth date (ISO-8601 DateTime)'),\n birthPlace: z.string().optional().describe('Updated birth place'),\n deathDate: z.string().optional().describe('Updated death date (ISO-8601 DateTime)'),\n bio: z.string().optional().describe('Updated biographical notes'),\n linkedUserId: z.string().optional().describe('Updated linked platform user ID'),\n photoFileId: z.string().optional().describe('Updated portrait photo File ID'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n givenName,\n familyName,\n maidenName,\n nickname,\n gender,\n lifeStatus,\n birthDate,\n birthPlace,\n deathDate,\n bio,\n linkedUserId,\n photoFileId,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (givenName !== undefined) input.givenName = givenName;\n if (familyName !== undefined) input.familyName = familyName;\n if (maidenName !== undefined) input.maidenName = maidenName;\n if (nickname !== undefined) input.nickname = nickname;\n if (gender !== undefined) input.gender = gender;\n if (lifeStatus !== undefined) input.lifeStatus = lifeStatus;\n if (birthDate !== undefined) input.birthDate = birthDate;\n if (birthPlace !== undefined) input.birthPlace = birthPlace;\n if (deathDate !== undefined) input.deathDate = deathDate;\n if (bio !== undefined) input.bio = bio;\n if (linkedUserId !== undefined) input.linkedUserId = linkedUserId;\n if (photoFileId !== undefined) input.photoFileId = photoFileId;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable person field');\n }\n\n const data = await ctx.gql.workspace.request<{\n colUpdatePerson: Record<string, unknown>;\n }>(ops.UPDATE_PERSON, { id, input });\n return jsonResult(data.colUpdatePerson);\n } catch (error) {\n ctx.logger.error('collabkin people_update failed', { error: String(error) });\n return errorResult(\n `Failed to update person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'people_delete')),\n {\n title: 'Delete Person',\n description: 'Delete a person from a family tree.',\n inputSchema: { id: z.string().describe('Person ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeletePerson: boolean }>(\n ops.DELETE_PERSON,\n { id },\n );\n return jsonResult({ success: data.colDeletePerson, id });\n } catch (error) {\n ctx.logger.error('collabkin people_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete person: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin relationship tools — edges between people in a family tree.\n *\n * Surface (3): relationships_{list,create,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 { RelationshipTypeEnum, CertaintyEnum } from './shared.js';\n\nexport function registerRelationshipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_list')),\n {\n title: 'List Relationships',\n description:\n 'List relationships, optionally filtered by family tree and/or a specific person (relationships touching that person).',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n personId: z.string().optional().describe('Filter to relationships involving this person'),\n },\n },\n async ({ treeId, personId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListRelationships: Array<Record<string, unknown>>;\n }>(ops.LIST_RELATIONSHIPS, { treeId, personId });\n return jsonResult(data.colListRelationships);\n } catch (error) {\n ctx.logger.error('collabkin relationships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list relationships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_create')),\n {\n title: 'Create Relationship',\n description:\n 'Create a relationship between two people in a family tree (e.g. PARENT, SPOUSE, SIBLING). `fromPersonId`, `toPersonId`, `treeId`, and `type` are required.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n fromPersonId: z.string().min(1).describe('Source person ID'),\n toPersonId: z.string().min(1).describe('Target person ID'),\n type: RelationshipTypeEnum.describe('Relationship type'),\n certainty: CertaintyEnum.optional().describe('Confidence level (default CONFIRMED)'),\n startDate: z.string().optional().describe('Relationship start (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Relationship end (ISO-8601 DateTime)'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({ treeId, fromPersonId, toPersonId, type, certainty, startDate, endDate, notes }) => {\n try {\n const input: Record<string, unknown> = { treeId, fromPersonId, toPersonId, type };\n if (certainty !== undefined) input.certainty = certainty;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n colCreateRelationship: Record<string, unknown>;\n }>(ops.CREATE_RELATIONSHIP, { input });\n return jsonResult(data.colCreateRelationship);\n } catch (error) {\n ctx.logger.error('collabkin relationships_create failed', { error: String(error) });\n return errorResult(\n `Failed to create relationship: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_delete')),\n {\n title: 'Delete Relationship',\n description: 'Delete a relationship between two people.',\n inputSchema: { id: z.string().describe('Relationship ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteRelationship: boolean }>(\n ops.DELETE_RELATIONSHIP,\n { id },\n );\n return jsonResult({ success: data.colDeleteRelationship, id });\n } catch (error) {\n ctx.logger.error('collabkin relationships_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete relationship: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin membership tools — family members & consent.\n *\n * Surface (4): memberships_{list,invite,accept,remove}.\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 { MemberRoleEnum } from './shared.js';\n\nexport function registerMembershipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_list')),\n {\n title: 'List Memberships',\n description: 'List the memberships (invited/active/declined/removed) for a family tree.',\n inputSchema: { treeId: z.string().describe('Family tree ID') },\n },\n async ({ treeId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListMemberships: Array<Record<string, unknown>>;\n }>(ops.LIST_MEMBERSHIPS, { treeId });\n return jsonResult(data.colListMemberships);\n } catch (error) {\n ctx.logger.error('collabkin memberships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list memberships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_invite')),\n {\n title: 'Invite Member',\n description:\n 'Invite a platform user to collaborate on a family tree. `treeId` and `memberUserId` are required; `personId` optionally links the member to a person record.',\n inputSchema: {\n treeId: z.string().min(1).describe('Family tree ID'),\n memberUserId: z.string().min(1).describe('Invited platform user ID'),\n personId: z.string().optional().describe('Linked person ID within the tree'),\n role: MemberRoleEnum.optional().describe('Member role (default VIEWER)'),\n },\n },\n async ({ treeId, memberUserId, personId, role }) => {\n try {\n const input: Record<string, unknown> = { treeId, memberUserId };\n if (personId !== undefined) input.personId = personId;\n if (role !== undefined) input.role = role;\n\n const data = await ctx.gql.workspace.request<{\n colInviteMember: Record<string, unknown>;\n }>(ops.INVITE_MEMBER, { input });\n return jsonResult(data.colInviteMember);\n } catch (error) {\n ctx.logger.error('collabkin memberships_invite failed', { error: String(error) });\n return errorResult(\n `Failed to invite member: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_accept')),\n {\n title: 'Accept Membership',\n description: 'Accept a pending membership invitation (moves it to ACTIVE).',\n inputSchema: { id: z.string().describe('Membership ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colAcceptMembership: Record<string, unknown>;\n }>(ops.ACCEPT_MEMBERSHIP, { id });\n return jsonResult(data.colAcceptMembership);\n } catch (error) {\n ctx.logger.error('collabkin memberships_accept failed', { error: String(error) });\n return errorResult(\n `Failed to accept membership: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_remove')),\n {\n title: 'Remove Member',\n description: 'Remove a member from a family tree (sets status to REMOVED).',\n inputSchema: { id: z.string().describe('Membership ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colRemoveMember: boolean }>(\n ops.REMOVE_MEMBER,\n { id },\n );\n return jsonResult({ success: data.colRemoveMember, id });\n } catch (error) {\n ctx.logger.error('collabkin memberships_remove failed', { error: String(error) });\n return errorResult(\n `Failed to remove member: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin memory tools — photos, videos, documents, and artifacts.\n *\n * Surface (5): memories_{list,get,create,update,delete}. The media blob itself\n * lives in wspace-files-svc; `fileId` references that File.\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 { MemoryKindEnum, VisibilityEnum, buildPagination } from './shared.js';\n\nexport function registerMemoryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_list')),\n {\n title: 'List Memories',\n description:\n 'List memories, optionally filtered by tree, person, and/or media kind, with cursor/offset pagination.',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n personId: z.string().optional().describe('Filter by associated person ID'),\n kind: MemoryKindEnum.optional().describe('Filter by media kind'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ treeId, personId, kind, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListMemories: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MEMORIES, {\n treeId,\n personId,\n kind,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListMemories);\n } catch (error) {\n ctx.logger.error('collabkin memories_list failed', { error: String(error) });\n return errorResult(\n `Failed to list memories: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_get')),\n {\n title: 'Get Memory',\n description: 'Fetch a single memory by ID, including its comments.',\n inputSchema: { id: z.string().describe('Memory ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colMemory: Record<string, unknown> | null;\n }>(ops.GET_MEMORY, { id });\n if (!data.colMemory) return errorResult(`Memory ${id} not found`);\n return jsonResult(data.colMemory);\n } catch (error) {\n ctx.logger.error('collabkin memories_get failed', { error: String(error) });\n return errorResult(\n `Failed to get memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_create')),\n {\n title: 'Create Memory',\n description:\n 'Add a memory (photo/video/document/artifact) to a family tree. `treeId` and `title` are required; `fileId` references a wspace-files-svc File.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n title: z.string().min(1).describe('Memory title'),\n description: z.string().optional().describe('Memory description'),\n kind: MemoryKindEnum.optional().describe('Media kind (default PHOTO)'),\n fileId: z.string().optional().describe('Media File ID (wspace-files-svc)'),\n personId: z.string().optional().describe('Associated person ID'),\n place: z.string().optional().describe('Where the memory was captured'),\n takenAt: z.string().optional().describe('When it was captured (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n visibility: VisibilityEnum.optional().describe('Visibility (default TREE)'),\n },\n },\n async ({\n treeId,\n title,\n description,\n kind,\n fileId,\n personId,\n place,\n takenAt,\n tags,\n visibility,\n }) => {\n try {\n const input: Record<string, unknown> = { treeId, title };\n if (description !== undefined) input.description = description;\n if (kind !== undefined) input.kind = kind;\n if (fileId !== undefined) input.fileId = fileId;\n if (personId !== undefined) input.personId = personId;\n if (place !== undefined) input.place = place;\n if (takenAt !== undefined) input.takenAt = takenAt;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n\n const data = await ctx.gql.workspace.request<{\n colCreateMemory: Record<string, unknown>;\n }>(ops.CREATE_MEMORY, { input });\n return jsonResult(data.colCreateMemory);\n } catch (error) {\n ctx.logger.error('collabkin memories_create failed', { error: String(error) });\n return errorResult(\n `Failed to create memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_update')),\n {\n title: 'Update Memory',\n description: 'Update a memory. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Memory ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n kind: MemoryKindEnum.optional().describe('Updated media kind'),\n fileId: z.string().optional().describe('Updated media File ID'),\n personId: z.string().optional().describe('Updated associated person ID'),\n place: z.string().optional().describe('Updated place'),\n takenAt: z.string().optional().describe('Updated capture date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n visibility: VisibilityEnum.optional().describe('Updated visibility'),\n },\n },\n async ({\n id,\n title,\n description,\n kind,\n fileId,\n personId,\n place,\n takenAt,\n tags,\n visibility,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (title !== undefined) input.title = title;\n if (description !== undefined) input.description = description;\n if (kind !== undefined) input.kind = kind;\n if (fileId !== undefined) input.fileId = fileId;\n if (personId !== undefined) input.personId = personId;\n if (place !== undefined) input.place = place;\n if (takenAt !== undefined) input.takenAt = takenAt;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable memory field');\n }\n\n const data = await ctx.gql.workspace.request<{\n colUpdateMemory: Record<string, unknown>;\n }>(ops.UPDATE_MEMORY, { id, input });\n return jsonResult(data.colUpdateMemory);\n } catch (error) {\n ctx.logger.error('collabkin memories_update failed', { error: String(error) });\n return errorResult(\n `Failed to update memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memories_delete')),\n {\n title: 'Delete Memory',\n description: 'Delete a memory from a family tree.',\n inputSchema: { id: z.string().describe('Memory ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteMemory: boolean }>(\n ops.DELETE_MEMORY,\n { id },\n );\n return jsonResult({ success: data.colDeleteMemory, id });\n } catch (error) {\n ctx.logger.error('collabkin memories_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete memory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin story tools — written/recorded family stories.\n *\n * Surface (4): stories_{list,get,create,delete}. Recorded audio/video lives in\n * wspace-files-svc; `recordingFileId` references that File.\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 { StoryFormatEnum, VisibilityEnum, buildPagination } from './shared.js';\n\nexport function registerStoryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_list')),\n {\n title: 'List Stories',\n description:\n 'List stories, optionally filtered by tree and/or person, with cursor/offset pagination.',\n inputSchema: {\n treeId: z.string().optional().describe('Filter by family tree ID'),\n personId: z.string().optional().describe('Filter by associated person ID'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ treeId, personId, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colListStories: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_STORIES, {\n treeId,\n personId,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.colListStories);\n } catch (error) {\n ctx.logger.error('collabkin stories_list failed', { error: String(error) });\n return errorResult(\n `Failed to list stories: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_get')),\n {\n title: 'Get Story',\n description: 'Fetch a single story by ID, including its comments.',\n inputSchema: { id: z.string().describe('Story ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colStory: Record<string, unknown> | null;\n }>(ops.GET_STORY, { id });\n if (!data.colStory) return errorResult(`Story ${id} not found`);\n return jsonResult(data.colStory);\n } catch (error) {\n ctx.logger.error('collabkin stories_get failed', { error: String(error) });\n return errorResult(\n `Failed to get story: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_create')),\n {\n title: 'Create Story',\n description:\n 'Add a story to a family tree. `treeId` and `title` are required; for recorded stories set `format` (AUDIO/VIDEO) and `recordingFileId`.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n title: z.string().min(1).describe('Story title'),\n body: z.string().optional().describe('Written story body'),\n format: StoryFormatEnum.optional().describe('Story format (default WRITTEN)'),\n narrator: z.string().optional().describe('Narrator name'),\n personId: z.string().optional().describe('Associated person ID'),\n recordingFileId: z.string().optional().describe('Recording File ID (wspace-files-svc)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n visibility: VisibilityEnum.optional().describe('Visibility (default TREE)'),\n },\n },\n async ({\n treeId,\n title,\n body,\n format,\n narrator,\n personId,\n recordingFileId,\n tags,\n visibility,\n }) => {\n try {\n const input: Record<string, unknown> = { treeId, title };\n if (body !== undefined) input.body = body;\n if (format !== undefined) input.format = format;\n if (narrator !== undefined) input.narrator = narrator;\n if (personId !== undefined) input.personId = personId;\n if (recordingFileId !== undefined) input.recordingFileId = recordingFileId;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n\n const data = await ctx.gql.workspace.request<{\n colCreateStory: Record<string, unknown>;\n }>(ops.CREATE_STORY, { input });\n return jsonResult(data.colCreateStory);\n } catch (error) {\n ctx.logger.error('collabkin stories_create failed', { error: String(error) });\n return errorResult(\n `Failed to create story: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'stories_delete')),\n {\n title: 'Delete Story',\n description: 'Delete a story from a family tree.',\n inputSchema: { id: z.string().describe('Story ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteStory: boolean }>(\n ops.DELETE_STORY,\n { id },\n );\n return jsonResult({ success: data.colDeleteStory, id });\n } catch (error) {\n ctx.logger.error('collabkin stories_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete story: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin comment tools — discussion on memories & stories.\n *\n * Surface (3): comments_{list,add,delete}. A comment is attached to exactly one\n * of a memory or a story.\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';\n\nexport function registerCommentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_list')),\n {\n title: 'List Comments',\n description:\n 'List comments for a memory or a story. Provide exactly one of `memoryId` or `storyId`.',\n inputSchema: {\n memoryId: z.string().optional().describe('List comments on this memory'),\n storyId: z.string().optional().describe('List comments on this story'),\n },\n },\n async ({ memoryId, storyId }) => {\n try {\n if (!memoryId && !storyId) {\n return errorResult('Provide exactly one of memoryId or storyId');\n }\n const data = await ctx.gql.workspace.request<{\n colListComments: Array<Record<string, unknown>>;\n }>(ops.LIST_COMMENTS, { memoryId, storyId });\n return jsonResult(data.colListComments);\n } catch (error) {\n ctx.logger.error('collabkin comments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list comments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_add')),\n {\n title: 'Add Comment',\n description:\n 'Add a comment to a memory or a story. `body` is required; provide exactly one of `memoryId` or `storyId`.',\n inputSchema: {\n body: z.string().min(1).describe('Comment body'),\n memoryId: z.string().optional().describe('Memory to comment on'),\n storyId: z.string().optional().describe('Story to comment on'),\n },\n },\n async ({ body, memoryId, storyId }) => {\n try {\n if (!memoryId && !storyId) {\n return errorResult('Provide exactly one of memoryId or storyId');\n }\n const input: Record<string, unknown> = { body };\n if (memoryId !== undefined) input.memoryId = memoryId;\n if (storyId !== undefined) input.storyId = storyId;\n\n const data = await ctx.gql.workspace.request<{\n colAddComment: Record<string, unknown>;\n }>(ops.ADD_COMMENT, { input });\n return jsonResult(data.colAddComment);\n } catch (error) {\n ctx.logger.error('collabkin comments_add failed', { error: String(error) });\n return errorResult(\n `Failed to add comment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_delete')),\n {\n title: 'Delete Comment',\n description: 'Delete a comment.',\n inputSchema: { id: z.string().describe('Comment ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteComment: boolean }>(\n ops.DELETE_COMMENT,\n { id },\n );\n return jsonResult({ success: data.colDeleteComment, id });\n } catch (error) {\n ctx.logger.error('collabkin comments_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete comment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin timeline tools — the family's dated events.\n *\n * Surface (3): timeline_list (the colTimeline query), timeline_create_event,\n * timeline_delete_event. The underlying @key entity is ColEvent; `timeline_list`\n * returns the events for a tree (optionally one person), most-recent first.\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 { EventTypeEnum } from './shared.js';\n\nexport function registerTimelineTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timeline_list')),\n {\n title: 'List Timeline',\n description:\n 'The family timeline — dated events for a tree (optionally one person), ordered most-recent first. `treeId` is required; filter by event `type` if desired.',\n inputSchema: {\n treeId: z.string().describe('Family tree ID'),\n personId: z.string().optional().describe('Restrict to events about this person'),\n type: EventTypeEnum.optional().describe('Filter by event type'),\n },\n },\n async ({ treeId, personId, type }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n colTimeline: Array<Record<string, unknown>>;\n }>(ops.TIMELINE, { treeId, personId, type });\n return jsonResult(data.colTimeline);\n } catch (error) {\n ctx.logger.error('collabkin timeline_list failed', { error: String(error) });\n return errorResult(\n `Failed to list timeline: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timeline_create_event')),\n {\n title: 'Create Event',\n description:\n 'Add a dated event to the family timeline. `treeId`, `title`, and `date` are required.',\n inputSchema: {\n treeId: z.string().min(1).describe('Owning family tree ID'),\n title: z.string().min(1).describe('Event title'),\n date: z.string().describe('Event date (ISO-8601 DateTime)'),\n type: EventTypeEnum.optional().describe('Event type (default MILESTONE)'),\n description: z.string().optional().describe('Event description'),\n place: z.string().optional().describe('Where it happened'),\n personId: z.string().optional().describe('Person the event is about'),\n isApproximate: z\n .boolean()\n .optional()\n .describe('Whether the date is approximate (default false)'),\n },\n },\n async ({ treeId, title, date, type, description, place, personId, isApproximate }) => {\n try {\n const input: Record<string, unknown> = { treeId, title, date };\n if (type !== undefined) input.type = type;\n if (description !== undefined) input.description = description;\n if (place !== undefined) input.place = place;\n if (personId !== undefined) input.personId = personId;\n if (isApproximate !== undefined) input.isApproximate = isApproximate;\n\n const data = await ctx.gql.workspace.request<{\n colCreateEvent: Record<string, unknown>;\n }>(ops.CREATE_EVENT, { input });\n return jsonResult(data.colCreateEvent);\n } catch (error) {\n ctx.logger.error('collabkin timeline_create_event failed', { error: String(error) });\n return errorResult(\n `Failed to create event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'timeline_delete_event')),\n {\n title: 'Delete Event',\n description: 'Delete an event from the family timeline.',\n inputSchema: { id: z.string().describe('Event ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ colDeleteEvent: boolean }>(\n ops.DELETE_EVENT,\n { id },\n );\n return jsonResult({ success: data.colDeleteEvent, id });\n } catch (error) {\n ctx.logger.error('collabkin timeline_delete_event failed', { error: String(error) });\n return errorResult(\n `Failed to delete event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Collabkin health tool.\n *\n * Surface (1): health — maps to the @public `colHealth` query (no auth\n * required), a liveness/identity probe for the Collabkin subgraph.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health')),\n {\n title: 'Collabkin Health Check',\n description:\n 'Public health probe for the Collabkin subgraph (colHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ colHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.colHealth });\n } catch (error) {\n ctx.logger.error('collabkin health failed', { error: String(error) });\n return errorResult(\n `Collabkin health check failed: ${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_FAMILY_TREES } from './operations.js';\n\n/**\n * Read-only Collabkin 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 */\nexport function registerCollabkinResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const treesUri = track(mcpResourceUri(ctx.productName, 'trees'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'collabkin-schema',\n schemaUri,\n {\n title: 'Collabkin Domain Schema',\n description:\n 'Overview of the Collabkin family-heritage 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 = `# Collabkin Domain (Overview)\n\nA private, collaborative home for a family and its ancestry.\n\n## Entities\n- ColFamilyTree — top-level container (people, memberships, memories, stories, timeline)\n- ColPerson — a relative or ancestor within a tree (has relationships)\n- ColRelationship — a typed edge between two people (PARENT, SPOUSE, …)\n- ColMembership — a family member / invited collaborator + consent state\n- ColMemory (+ColComment) — a photo/video/document/artifact + its comments\n- ColStory (+ColComment) — a written/recorded family story + its comments\n- ColEvent — a dated entry on the family timeline\n\n## Enums\n- ColTreeStatus: ACTIVE, ARCHIVED\n- ColGender: FEMALE, MALE, OTHER, UNKNOWN\n- ColLifeStatus: DECEASED, LIVING, UNKNOWN\n- ColMemberRole: CONTRIBUTOR, OWNER, STEWARD, VIEWER\n- ColMembershipStatus: ACTIVE, DECLINED, INVITED, REMOVED\n- ColMemoryKind: ARTIFACT, AUDIO, DOCUMENT, PHOTO, VIDEO\n- ColVisibility: PRIVATE, STEWARDS, TREE\n- ColEventType: BIRTH, DEATH, DIVORCE, EDUCATION, IMMIGRATION, MARRIAGE, MILESTONE, MILITARY, OTHER, RESIDENCE\n- ColRelationshipType: CHILD, GRANDCHILD, GRANDPARENT, GUARDIAN, PARENT, PARTNER, SIBLING, SPOUSE\n- ColStoryFormat: AUDIO, VIDEO, WRITTEN\n- ColCertainty: CONFIRMED, DISPUTED, PROBABLE, UNVERIFIED\n\n## Tool groups\ntrees, people, relationships, memberships, memories, stories, comments, timeline.\nAll run against the WORKSPACE gateway (workspace-scoped) except the public health probe.\nMemory/story/portrait/cover blobs live in wspace-files-svc (referenced by File id).\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://trees — family-tree directory\n server.registerResource(\n 'collabkin-trees',\n treesUri,\n {\n title: 'Collabkin Family Tree Directory',\n description: 'The first 50 active family trees in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${treesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ colListFamilyTrees: unknown }>(\n LIST_FAMILY_TREES,\n { status: 'ACTIVE', pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: treesUri,\n text: JSON.stringify(data.colListFamilyTrees, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: treesUri,\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 * Collabkin MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerCollabkinPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'tree-setup'));\n const heritageName = track(mcpPromptName(p, 'heritage-curation'));\n\n // <product>-tree-setup — stand up a family tree + people + memberships\n server.registerPrompt(\n setupName,\n {\n title: 'Family Tree Setup',\n description:\n 'Guide for setting up a new Collabkin family tree end to end: create the tree, add people, connect them with relationships, and invite family members.',\n argsSchema: {\n name: z.string().optional().describe('Family tree name'),\n surname: z.string().optional().describe('Primary family surname'),\n },\n },\n ({ name, surname }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { name, surname });\n const nameNote = name\n ? `Use the tree name \"${name}\".`\n : 'Ask the user for the family tree name.';\n const surnameNote = surname ? `Use surname \"${surname}\".` : '';\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 Collabkin family tree.\n\n1. **Create Tree**: Use ${p}_trees_create. ${nameNote} ${surnameNote}\n2. **Add People**: Use ${p}_people_create for each relative/ancestor — set treeId, givenName (required), plus gender, lifeStatus, birthDate/birthPlace, and deathDate for ancestors.\n3. **Connect Relationships**: Use ${p}_relationships_create to link people (PARENT, SPOUSE, SIBLING, CHILD, …) — pass treeId, fromPersonId, toPersonId, and type.\n4. **Invite Family**: Use ${p}_memberships_invite to bring in collaborators (treeId, memberUserId, role=CONTRIBUTOR/VIEWER).\n5. **Verify**: Use ${p}_people_list and ${p}_relationships_list (filtered by the new treeId) to confirm the shape.\n\nShow results at each step and confirm before inviting members.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-heritage-curation — capture memories, stories, and the timeline\n server.registerPrompt(\n heritageName,\n {\n title: 'Heritage Curation',\n description:\n 'Workflow for enriching a family tree: add memories and stories, discuss them via comments, and build out the family timeline.',\n argsSchema: {\n treeId: z.string().optional().describe('Family tree ID to curate'),\n },\n },\n ({ treeId }) => {\n ctx.logger.debug(`Prompt ${heritageName} called`, { treeId });\n const treeNote = treeId\n ? `Curate tree \"${treeId}\".`\n : `First list trees with ${p}_trees_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me curate family heritage in Collabkin. ${treeNote}\n\n1. **Memories**: Use ${p}_memories_create to add photos/videos/documents/artifacts (treeId, title, kind, optional fileId from wspace-files, personId, visibility).\n2. **Stories**: Use ${p}_stories_create for written or recorded stories (treeId, title, body or format+recordingFileId, narrator, personId).\n3. **Discuss**: Use ${p}_comments_add to discuss a memory or story (exactly one of memoryId/storyId).\n4. **Timeline**: Use ${p}_timeline_create_event to add dated milestones (births, marriages, immigrations, …) and ${p}_timeline_list to review them most-recent first.\n5. **Review**: Use ${p}_memories_list and ${p}_stories_list to confirm what was captured.\n\nSummarize what was added after each step and suggest gaps to fill.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Collabkin module — domain module for the future-products ecosystem program.\n *\n * Covers all 8 @key entities of wspace-collabkin-svc grouped into per-entity\n * sub-APIs: trees, people, relationships, memberships, memories, stories,\n * comments, timeline (events), plus a public health probe. Mirrors the\n * kadaikodi module's structure (tools/<entity>.ts + resources.ts + prompts.ts)\n * and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/collabkin/wspace-collabkin-svc/ (Hive service name\n * `collabkin`). All operations run against the WORKSPACE gateway; every\n * product-owned root field is prefixed `col*` / every type `Col*`. The @public\n * `colHealth` probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerTreeTools } from './tools/trees.js';\nimport { registerPersonTools } from './tools/people.js';\nimport { registerRelationshipTools } from './tools/relationships.js';\nimport { registerMembershipTools } from './tools/memberships.js';\nimport { registerMemoryTools } from './tools/memories.js';\nimport { registerStoryTools } from './tools/stories.js';\nimport { registerCommentTools } from './tools/comments.js';\nimport { registerTimelineTools } from './tools/timeline.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerCollabkinResources } from './resources.js';\nimport { registerCollabkinPrompts } from './prompts.js';\n\nconst collabkinModule: McpModule = {\n id: 'collabkin',\n version: '0.0.1',\n displayName: 'Collabkin',\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 registerTreeTools(server, ctx, trackTool);\n registerPersonTools(server, ctx, trackTool);\n registerRelationshipTools(server, ctx, trackTool);\n registerMembershipTools(server, ctx, trackTool);\n registerMemoryTools(server, ctx, trackTool);\n registerStoryTools(server, ctx, trackTool);\n registerCommentTools(server, ctx, trackTool);\n registerTimelineTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerCollabkinResources(server, ctx, trackResource);\n registerCollabkinPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default collabkinModule;\n"]}
|