@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/proserviceworld/operations.ts","../../../src/modules/proserviceworld/tools/shared.ts","../../../src/modules/proserviceworld/tools/clients.ts","../../../src/modules/proserviceworld/tools/engagements.ts","../../../src/modules/proserviceworld/tools/matters.ts","../../../src/modules/proserviceworld/tools/invoices.ts","../../../src/modules/proserviceworld/tools/time.ts","../../../src/modules/proserviceworld/tools/compliance.ts","../../../src/modules/proserviceworld/tools/practice.ts","../../../src/modules/proserviceworld/tools/health.ts","../../../src/modules/proserviceworld/resources.ts","../../../src/modules/proserviceworld/prompts.ts","../../../src/modules/proserviceworld/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 ProServiceWorld MCP module.\n *\n * ProServiceWorld is the Professional-Services Operating System (clients,\n * engagements, matters, time, billing, compliance) for professional-services\n * firms. Backend subgraph:\n * ~/products/wspace/proserviceworld/wspace-proserviceworld-svc/\n * (Hive service name `proserviceworld`).\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 — ProServiceWorld inputs do NOT carry a workspaceId.\n *\n * Every root field is prefixed `psw*` and every type/input/enum is prefixed\n * `Psw*` per the service's GraphQL naming contract; the operations below call\n * them by their EXACT real names. List queries return cursor-less connections\n * (`{ items, pageInfo { cursor, hasMore } }`) driven by the shared\n * `PaginationInput` ({ cursor, limit, offset }).\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi/crewfoundry module operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const CLIENT_FIELDS = `\n id name type status industry contactName contactEmail contactPhone address\n notes tags relationshipOwnerId workspaceId createdAt updatedAt\n`;\n\nexport const ENGAGEMENT_FIELDS = `\n id clientId name description status feeArrangement feeAmount currency\n practiceAreaId responsiblePartnerId startDate endDate tags workspaceId\n createdAt updatedAt\n`;\n\nexport const MATTER_FIELDS = `\n id clientId engagementId title reference description status priority\n isPrivileged leadPractitionerId practiceAreaId dueDate closedAt tags\n workspaceId createdAt updatedAt\n`;\n\nexport const INVOICE_FIELDS = `\n id clientId engagementId number status issueDate dueDate paidAt subtotal\n taxAmount total currency lineItems notes workspaceId createdAt updatedAt\n`;\n\nexport const TIME_ENTRY_FIELDS = `\n id matterId engagementId practitionerId date minutes rate billable narrative\n status invoiceId workspaceId createdAt updatedAt\n`;\n\nexport const COMPLIANCE_FIELDS = `\n id type status title details subjectType subjectId reviewerId dueDate\n resolvedAt evidenceFileId workspaceId createdAt updatedAt\n`;\n\nexport const CONFLICT_FIELDS = `\n id clientId matterId status searchedParties findings waiverReason\n clearedById resolvedAt workspaceId createdAt updatedAt\n`;\n\nexport const PRACTICE_AREA_FIELDS = `\n id name code description isActive workspaceId createdAt updatedAt\n`;\n\nexport const MILESTONE_FIELDS = `\n id engagementId name description status triggersInvoice triggerAmount\n dueDate completedAt workspaceId createdAt updatedAt\n`;\n\nexport const DELIVERABLE_FIELDS = `\n id engagementId name description status version acceptanceCriteria\n acceptedAt dueDate workspaceId createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Clients\n// ---------------------------------------------------------------------------\n\nexport const GET_CLIENT = `\n query PswGetClient($id: ID!) {\n pswClient(id: $id) {\n ${CLIENT_FIELDS}\n engagements { id name status feeArrangement feeAmount currency }\n matters { id title status priority }\n }\n }\n`;\n\nexport const LIST_CLIENTS = `\n query PswListClients($pagination: PaginationInput, $status: PswClientStatus) {\n pswListClients(pagination: $pagination, status: $status) {\n items { ${CLIENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_CLIENT = `\n mutation PswCreateClient($input: PswCreateClientInput!) {\n pswCreateClient(input: $input) {\n ${CLIENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CLIENT = `\n mutation PswUpdateClient($id: ID!, $input: PswUpdateClientInput!) {\n pswUpdateClient(id: $id, input: $input) {\n ${CLIENT_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_CLIENT = `\n mutation PswArchiveClient($id: ID!) {\n pswArchiveClient(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Engagements\n// ---------------------------------------------------------------------------\n\nexport const GET_ENGAGEMENT = `\n query PswGetEngagement($id: ID!) {\n pswEngagement(id: $id) {\n ${ENGAGEMENT_FIELDS}\n client { id name status }\n milestones { ${MILESTONE_FIELDS} }\n deliverables { ${DELIVERABLE_FIELDS} }\n }\n }\n`;\n\nexport const LIST_ENGAGEMENTS = `\n query PswListEngagements(\n $clientId: ID\n $status: PswEngagementStatus\n $pagination: PaginationInput\n ) {\n pswListEngagements(clientId: $clientId, status: $status, pagination: $pagination) {\n items { ${ENGAGEMENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_ENGAGEMENT = `\n mutation PswCreateEngagement($input: PswCreateEngagementInput!) {\n pswCreateEngagement(input: $input) {\n ${ENGAGEMENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_ENGAGEMENT = `\n mutation PswUpdateEngagement($id: ID!, $input: PswUpdateEngagementInput!) {\n pswUpdateEngagement(id: $id, input: $input) {\n ${ENGAGEMENT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_ENGAGEMENT = `\n mutation PswTransitionEngagement($id: ID!, $status: PswEngagementStatus!) {\n pswTransitionEngagement(id: $id, status: $status) {\n ${ENGAGEMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Matters\n// ---------------------------------------------------------------------------\n\nexport const GET_MATTER = `\n query PswGetMatter($id: ID!) {\n pswMatter(id: $id) {\n ${MATTER_FIELDS}\n client { id name status }\n }\n }\n`;\n\nexport const LIST_MATTERS = `\n query PswListMatters(\n $clientId: ID\n $engagementId: ID\n $status: PswMatterStatus\n $pagination: PaginationInput\n ) {\n pswListMatters(\n clientId: $clientId\n engagementId: $engagementId\n status: $status\n pagination: $pagination\n ) {\n items { ${MATTER_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MATTER = `\n mutation PswCreateMatter($input: PswCreateMatterInput!) {\n pswCreateMatter(input: $input) {\n ${MATTER_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_MATTER = `\n mutation PswUpdateMatter($id: ID!, $input: PswUpdateMatterInput!) {\n pswUpdateMatter(id: $id, input: $input) {\n ${MATTER_FIELDS}\n }\n }\n`;\n\nexport const CLOSE_MATTER = `\n mutation PswCloseMatter($id: ID!) {\n pswCloseMatter(id: $id) {\n ${MATTER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Invoices\n// ---------------------------------------------------------------------------\n\nexport const LIST_INVOICES = `\n query PswListInvoices(\n $clientId: ID\n $status: PswInvoiceStatus\n $pagination: PaginationInput\n ) {\n pswListInvoices(clientId: $clientId, status: $status, pagination: $pagination) {\n items { ${INVOICE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_INVOICE = `\n mutation PswCreateInvoice($input: PswCreateInvoiceInput!) {\n pswCreateInvoice(input: $input) {\n ${INVOICE_FIELDS}\n }\n }\n`;\n\nexport const MARK_INVOICE_PAID = `\n mutation PswMarkInvoicePaid($id: ID!) {\n pswMarkInvoicePaid(id: $id) {\n ${INVOICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Time entries\n// ---------------------------------------------------------------------------\n\nexport const LOG_TIME_ENTRY = `\n mutation PswLogTimeEntry($input: PswCreateTimeEntryInput!) {\n pswLogTimeEntry(input: $input) {\n ${TIME_ENTRY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Compliance + conflicts\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMPLIANCE_CHECKS = `\n query PswListComplianceChecks(\n $status: PswComplianceStatus\n $subjectId: ID\n $subjectType: String\n $pagination: PaginationInput\n ) {\n pswListComplianceChecks(\n status: $status\n subjectId: $subjectId\n subjectType: $subjectType\n pagination: $pagination\n ) {\n ${COMPLIANCE_FIELDS}\n }\n }\n`;\n\nexport const LIST_CONFLICT_CHECKS = `\n query PswListConflictChecks($clientId: ID, $pagination: PaginationInput) {\n pswListConflictChecks(clientId: $clientId, pagination: $pagination) {\n ${CONFLICT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Practice areas\n// ---------------------------------------------------------------------------\n\nexport const LIST_PRACTICE_AREAS = `\n query PswListPracticeAreas($pagination: PaginationInput) {\n pswListPracticeAreas(pagination: $pagination) {\n ${PRACTICE_AREA_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query PswHealth {\n pswHealth\n }\n`;\n","/**\n * Shared zod schemas for the ProServiceWorld 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. JSON scalar inputs (invoice\n * lineItems) are modelled as permissive records — the backend accepts arbitrary\n * JSON, but a record/array shape gives the LLM a typed hint. `DateTime` scalar\n * inputs are accepted as ISO-8601 strings.\n */\n\nimport { z } from 'zod';\n\nexport const ClientStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'INACTIVE', 'PROSPECT'])\n .describe('Lifecycle status of a client relationship');\n\nexport const ClientTypeEnum = z\n .enum(['INDIVIDUAL', 'ORGANIZATION'])\n .describe('Whether the client is an INDIVIDUAL or an ORGANIZATION');\n\nexport const EngagementStatusEnum = z\n .enum([\n 'ACCEPTED',\n 'CANCELLED',\n 'CLOSED',\n 'DELIVERED',\n 'INVOICED',\n 'IN_PROGRESS',\n 'PROPOSAL',\n 'REVIEW',\n ])\n .describe('Delivery-lifecycle status of an engagement');\n\nexport const FeeArrangementEnum = z\n .enum(['FIXED', 'HOURLY', 'RETAINER', 'VALUE_BASED'])\n .describe('Fee arrangement for an engagement');\n\nexport const MatterStatusEnum = z\n .enum(['ARCHIVED', 'CLOSED', 'ON_HOLD', 'OPEN'])\n .describe('Lifecycle status of a matter');\n\nexport const MatterPriorityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM'])\n .describe('Priority of a matter');\n\nexport const InvoiceStatusEnum = z\n .enum(['CANCELLED', 'DRAFT', 'OVERDUE', 'PAID', 'SENT'])\n .describe('Status of an invoice');\n\nexport const ComplianceStatusEnum = z\n .enum(['FAILED', 'IN_REVIEW', 'PASSED', 'PENDING', 'WAIVED'])\n .describe('Status of a compliance check');\n\n/** Permissive JSON record for the invoice `lineItems` JSON scalar. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n\n/** Invoice line items: a JSON array (or object) of arbitrary line-item shapes. */\nexport const LineItems = z.union([z.array(z.unknown()), JsonObject]);\n","/**\n * ProServiceWorld client tools — the client/relationship directory.\n *\n * Surface (5): clients_{get,list,create,update,archive}. Maps to the real\n * root fields pswClient / pswListClients / pswCreateClient / pswUpdateClient /\n * pswArchiveClient.\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 { ClientStatusEnum, ClientTypeEnum } from './shared.js';\n\nexport function registerClientTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_get')),\n {\n title: 'Get Client',\n description:\n 'Fetch a single ProServiceWorld client by ID, including its engagements and matters.',\n inputSchema: { id: z.string().describe('Client ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswClient: Record<string, unknown> | null;\n }>(ops.GET_CLIENT, { id });\n if (!data.pswClient) return errorResult(`Client ${id} not found`);\n return jsonResult(data.pswClient);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_get failed', { error: String(error) });\n return errorResult(\n `Failed to get client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_list')),\n {\n title: 'List Clients',\n description:\n 'List clients in the bound workspace, optionally filtered by status, with limit/offset pagination.',\n inputSchema: {\n status: ClientStatusEnum.optional().describe('Filter by client status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListClients: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_CLIENTS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListClients);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_list failed', { error: String(error) });\n return errorResult(\n `Failed to list clients: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_create')),\n {\n title: 'Create Client',\n description:\n 'Onboard a new client. Only `name` is required; `type` defaults to ORGANIZATION and `status` to PROSPECT.',\n inputSchema: {\n name: z.string().min(1).describe('Client display name'),\n type: ClientTypeEnum.optional().describe('Client type (default ORGANIZATION)'),\n status: ClientStatusEnum.optional().describe('Initial status (default PROSPECT)'),\n industry: z.string().optional().describe('Industry / sector'),\n contactName: z.string().optional().describe('Primary contact name'),\n contactEmail: z.string().optional().describe('Primary contact email'),\n contactPhone: z.string().optional().describe('Primary contact phone'),\n address: z.string().optional().describe('Postal address'),\n notes: z.string().optional().describe('Free-text notes'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n relationshipOwnerId: z.string().optional().describe('User ID of the relationship owner'),\n },\n },\n async ({\n name,\n type,\n status,\n industry,\n contactName,\n contactEmail,\n contactPhone,\n address,\n notes,\n tags,\n relationshipOwnerId,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (industry !== undefined) input.industry = industry;\n if (contactName !== undefined) input.contactName = contactName;\n if (contactEmail !== undefined) input.contactEmail = contactEmail;\n if (contactPhone !== undefined) input.contactPhone = contactPhone;\n if (address !== undefined) input.address = address;\n if (notes !== undefined) input.notes = notes;\n if (tags !== undefined) input.tags = tags;\n if (relationshipOwnerId !== undefined) input.relationshipOwnerId = relationshipOwnerId;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateClient: Record<string, unknown>;\n }>(ops.CREATE_CLIENT, { input });\n return jsonResult(data.pswCreateClient);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_create failed', { error: String(error) });\n return errorResult(\n `Failed to create client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_update')),\n {\n title: 'Update Client',\n description:\n 'Update a client. At least one mutable field must be provided. Use `status` to move a client through ACTIVE/INACTIVE/etc.',\n inputSchema: {\n id: z.string().describe('Client ID'),\n name: z.string().optional().describe('Updated display name'),\n type: ClientTypeEnum.optional().describe('Updated client type'),\n status: ClientStatusEnum.optional().describe('Updated status'),\n industry: z.string().optional().describe('Updated industry'),\n contactName: z.string().optional().describe('Updated primary contact name'),\n contactEmail: z.string().optional().describe('Updated primary contact email'),\n contactPhone: z.string().optional().describe('Updated primary contact phone'),\n address: z.string().optional().describe('Updated postal address'),\n notes: z.string().optional().describe('Updated notes'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n relationshipOwnerId: z.string().optional().describe('Updated relationship owner user ID'),\n },\n },\n async ({\n id,\n name,\n type,\n status,\n industry,\n contactName,\n contactEmail,\n contactPhone,\n address,\n notes,\n tags,\n relationshipOwnerId,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (industry !== undefined) input.industry = industry;\n if (contactName !== undefined) input.contactName = contactName;\n if (contactEmail !== undefined) input.contactEmail = contactEmail;\n if (contactPhone !== undefined) input.contactPhone = contactPhone;\n if (address !== undefined) input.address = address;\n if (notes !== undefined) input.notes = notes;\n if (tags !== undefined) input.tags = tags;\n if (relationshipOwnerId !== undefined) input.relationshipOwnerId = relationshipOwnerId;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/type/status/industry/contactName/contactEmail/contactPhone/address/notes/tags/relationshipOwnerId',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n pswUpdateClient: Record<string, unknown>;\n }>(ops.UPDATE_CLIENT, { id, input });\n return jsonResult(data.pswUpdateClient);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_update failed', { error: String(error) });\n return errorResult(\n `Failed to update client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_archive')),\n {\n title: 'Archive Client',\n description: 'Archive (soft-delete) a client by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Client ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ pswArchiveClient: boolean }>(\n ops.ARCHIVE_CLIENT,\n { id },\n );\n return jsonResult({ archived: data.pswArchiveClient, id });\n } catch (error) {\n ctx.logger.error('proserviceworld clients_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld engagement tools — the proposal→delivery lifecycle.\n *\n * Surface (5): engagements_{get,list,create,update,transition}. Maps to the\n * real root fields pswEngagement / pswListEngagements / pswCreateEngagement /\n * pswUpdateEngagement / pswTransitionEngagement.\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 { EngagementStatusEnum, FeeArrangementEnum } from './shared.js';\n\nexport function registerEngagementTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_get')),\n {\n title: 'Get Engagement',\n description:\n 'Fetch a single engagement by ID, including its client, milestones, and deliverables.',\n inputSchema: { id: z.string().describe('Engagement ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswEngagement: Record<string, unknown> | null;\n }>(ops.GET_ENGAGEMENT, { id });\n if (!data.pswEngagement) return errorResult(`Engagement ${id} not found`);\n return jsonResult(data.pswEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_get failed', { error: String(error) });\n return errorResult(\n `Failed to get engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_list')),\n {\n title: 'List Engagements',\n description:\n 'List engagements, optionally filtered by client and/or status, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n status: EngagementStatusEnum.optional().describe('Filter by engagement status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListEngagements: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_ENGAGEMENTS, {\n clientId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListEngagements);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_list failed', { error: String(error) });\n return errorResult(\n `Failed to list engagements: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_create')),\n {\n title: 'Create Engagement',\n description:\n 'Open a new engagement for a client. `clientId` and `name` are required; `feeArrangement` defaults to FIXED.',\n inputSchema: {\n clientId: z.string().min(1).describe('Owning client ID'),\n name: z.string().min(1).describe('Engagement name'),\n description: z.string().optional().describe('Scope / description'),\n feeArrangement: FeeArrangementEnum.optional().describe('Fee arrangement (default FIXED)'),\n feeAmount: z.number().optional().describe('Fee amount'),\n currency: z.string().optional().describe('ISO currency code (e.g. \"USD\")'),\n practiceAreaId: z.string().optional().describe('Practice-area ID'),\n responsiblePartnerId: z.string().optional().describe('Responsible partner user ID'),\n startDate: z.string().optional().describe('Start date (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('End date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({\n clientId,\n name,\n description,\n feeArrangement,\n feeAmount,\n currency,\n practiceAreaId,\n responsiblePartnerId,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { clientId, name };\n if (description !== undefined) input.description = description;\n if (feeArrangement !== undefined) input.feeArrangement = feeArrangement;\n if (feeAmount !== undefined) input.feeAmount = feeAmount;\n if (currency !== undefined) input.currency = currency;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (responsiblePartnerId !== undefined) input.responsiblePartnerId = responsiblePartnerId;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateEngagement: Record<string, unknown>;\n }>(ops.CREATE_ENGAGEMENT, { input });\n return jsonResult(data.pswCreateEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_create failed', { error: String(error) });\n return errorResult(\n `Failed to create engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_update')),\n {\n title: 'Update Engagement',\n description:\n 'Update an engagement. At least one mutable field must be provided. Use `engagements_transition` to change lifecycle status.',\n inputSchema: {\n id: z.string().describe('Engagement ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated scope / description'),\n feeArrangement: FeeArrangementEnum.optional().describe('Updated fee arrangement'),\n feeAmount: z.number().optional().describe('Updated fee amount'),\n currency: z.string().optional().describe('Updated ISO currency code'),\n practiceAreaId: z.string().optional().describe('Updated practice-area ID'),\n responsiblePartnerId: z.string().optional().describe('Updated responsible partner user ID'),\n startDate: z.string().optional().describe('Updated start date (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Updated end date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({\n id,\n name,\n description,\n feeArrangement,\n feeAmount,\n currency,\n practiceAreaId,\n responsiblePartnerId,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (feeArrangement !== undefined) input.feeArrangement = feeArrangement;\n if (feeAmount !== undefined) input.feeAmount = feeAmount;\n if (currency !== undefined) input.currency = currency;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (responsiblePartnerId !== undefined) input.responsiblePartnerId = responsiblePartnerId;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\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/description/feeArrangement/feeAmount/currency/practiceAreaId/responsiblePartnerId/startDate/endDate/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n pswUpdateEngagement: Record<string, unknown>;\n }>(ops.UPDATE_ENGAGEMENT, { id, input });\n return jsonResult(data.pswUpdateEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_update failed', { error: String(error) });\n return errorResult(\n `Failed to update engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_transition')),\n {\n title: 'Transition Engagement',\n description:\n 'Advance an engagement through its delivery lifecycle (validated transitions), e.g. PROPOSAL → ACCEPTED → IN_PROGRESS → REVIEW → DELIVERED → INVOICED → CLOSED, or CANCELLED.',\n inputSchema: {\n id: z.string().describe('Engagement ID'),\n status: EngagementStatusEnum.describe('Target engagement status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswTransitionEngagement: Record<string, unknown>;\n }>(ops.TRANSITION_ENGAGEMENT, { id, status });\n return jsonResult(data.pswTransitionEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld matter tools — the unit of professional work.\n *\n * Surface (5): matters_{get,list,create,update,close}. Maps to the real root\n * fields pswMatter / pswListMatters / pswCreateMatter / pswUpdateMatter /\n * pswCloseMatter.\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 { MatterStatusEnum, MatterPriorityEnum } from './shared.js';\n\nexport function registerMatterTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_get')),\n {\n title: 'Get Matter',\n description: 'Fetch a single matter by ID, including its client.',\n inputSchema: { id: z.string().describe('Matter ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswMatter: Record<string, unknown> | null;\n }>(ops.GET_MATTER, { id });\n if (!data.pswMatter) return errorResult(`Matter ${id} not found`);\n return jsonResult(data.pswMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_get failed', { error: String(error) });\n return errorResult(\n `Failed to get matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_list')),\n {\n title: 'List Matters',\n description:\n 'List matters, optionally filtered by client, engagement, and/or status, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n engagementId: z.string().optional().describe('Filter by engagement ID'),\n status: MatterStatusEnum.optional().describe('Filter by matter status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, engagementId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListMatters: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MATTERS, {\n clientId,\n engagementId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListMatters);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_list failed', { error: String(error) });\n return errorResult(\n `Failed to list matters: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_create')),\n {\n title: 'Create Matter',\n description:\n 'Open a new matter for a client. `clientId` and `title` are required; `priority` defaults to MEDIUM and `isPrivileged` to false.',\n inputSchema: {\n clientId: z.string().min(1).describe('Owning client ID'),\n title: z.string().min(1).describe('Matter title'),\n reference: z.string().optional().describe('External matter reference / number'),\n description: z.string().optional().describe('Description'),\n engagementId: z.string().optional().describe('Parent engagement ID'),\n practiceAreaId: z.string().optional().describe('Practice-area ID'),\n leadPractitionerId: z.string().optional().describe('Lead practitioner user ID'),\n priority: MatterPriorityEnum.optional().describe('Priority (default MEDIUM)'),\n isPrivileged: z\n .boolean()\n .optional()\n .describe('Whether the matter is privileged (default false)'),\n dueDate: z.string().optional().describe('Due date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({\n clientId,\n title,\n reference,\n description,\n engagementId,\n practiceAreaId,\n leadPractitionerId,\n priority,\n isPrivileged,\n dueDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { clientId, title };\n if (reference !== undefined) input.reference = reference;\n if (description !== undefined) input.description = description;\n if (engagementId !== undefined) input.engagementId = engagementId;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (leadPractitionerId !== undefined) input.leadPractitionerId = leadPractitionerId;\n if (priority !== undefined) input.priority = priority;\n if (isPrivileged !== undefined) input.isPrivileged = isPrivileged;\n if (dueDate !== undefined) input.dueDate = dueDate;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateMatter: Record<string, unknown>;\n }>(ops.CREATE_MATTER, { input });\n return jsonResult(data.pswCreateMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_create failed', { error: String(error) });\n return errorResult(\n `Failed to create matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_update')),\n {\n title: 'Update Matter',\n description:\n 'Update a matter. At least one mutable field must be provided. Use `matters_close` to close a matter.',\n inputSchema: {\n id: z.string().describe('Matter ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n engagementId: z.string().optional().describe('Updated parent engagement ID'),\n practiceAreaId: z.string().optional().describe('Updated practice-area ID'),\n leadPractitionerId: z.string().optional().describe('Updated lead practitioner user ID'),\n priority: MatterPriorityEnum.optional().describe('Updated priority'),\n isPrivileged: z.boolean().optional().describe('Updated privileged flag'),\n dueDate: z.string().optional().describe('Updated due date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({\n id,\n title,\n description,\n engagementId,\n practiceAreaId,\n leadPractitionerId,\n priority,\n isPrivileged,\n dueDate,\n tags,\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 (engagementId !== undefined) input.engagementId = engagementId;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (leadPractitionerId !== undefined) input.leadPractitionerId = leadPractitionerId;\n if (priority !== undefined) input.priority = priority;\n if (isPrivileged !== undefined) input.isPrivileged = isPrivileged;\n if (dueDate !== undefined) input.dueDate = dueDate;\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 title/description/engagementId/practiceAreaId/leadPractitionerId/priority/isPrivileged/dueDate/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n pswUpdateMatter: Record<string, unknown>;\n }>(ops.UPDATE_MATTER, { id, input });\n return jsonResult(data.pswUpdateMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_update failed', { error: String(error) });\n return errorResult(\n `Failed to update matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_close')),\n {\n title: 'Close Matter',\n description: 'Close a matter by ID. Returns the closed matter (status=CLOSED, closedAt set).',\n inputSchema: { id: z.string().describe('Matter ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswCloseMatter: Record<string, unknown>;\n }>(ops.CLOSE_MATTER, { id });\n return jsonResult(data.pswCloseMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_close failed', { error: String(error) });\n return errorResult(\n `Failed to close matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld invoice tools — billing.\n *\n * Surface (3): invoices_{list,create,mark_paid}. Maps to the real root fields\n * pswListInvoices / pswCreateInvoice / pswMarkInvoicePaid. There is no single\n * invoice get query on the subgraph, so no invoices_get tool.\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 { InvoiceStatusEnum, LineItems } from './shared.js';\n\nexport function registerInvoiceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'invoices_list')),\n {\n title: 'List Invoices',\n description:\n 'List invoices, optionally filtered by client and/or status, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n status: InvoiceStatusEnum.optional().describe('Filter by invoice status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListInvoices: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_INVOICES, {\n clientId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListInvoices);\n } catch (error) {\n ctx.logger.error('proserviceworld invoices_list failed', { error: String(error) });\n return errorResult(\n `Failed to list invoices: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'invoices_create')),\n {\n title: 'Create Invoice',\n description:\n 'Raise a new invoice for a client. `clientId` and `number` are required; amounts and line items are optional JSON/numbers.',\n inputSchema: {\n clientId: z.string().min(1).describe('Billed client ID'),\n number: z.string().min(1).describe('Invoice number (unique within the workspace)'),\n engagementId: z.string().optional().describe('Related engagement ID'),\n issueDate: z.string().optional().describe('Issue date (ISO-8601 DateTime)'),\n dueDate: z.string().optional().describe('Due date (ISO-8601 DateTime)'),\n subtotal: z.number().optional().describe('Subtotal amount'),\n taxAmount: z.number().optional().describe('Tax amount'),\n total: z.number().optional().describe('Total amount'),\n currency: z.string().optional().describe('ISO currency code (e.g. \"USD\")'),\n lineItems: LineItems.optional().describe('Line items JSON (array of line-item objects)'),\n notes: z.string().optional().describe('Invoice notes'),\n },\n },\n async ({\n clientId,\n number,\n engagementId,\n issueDate,\n dueDate,\n subtotal,\n taxAmount,\n total,\n currency,\n lineItems,\n notes,\n }) => {\n try {\n const input: Record<string, unknown> = { clientId, number };\n if (engagementId !== undefined) input.engagementId = engagementId;\n if (issueDate !== undefined) input.issueDate = issueDate;\n if (dueDate !== undefined) input.dueDate = dueDate;\n if (subtotal !== undefined) input.subtotal = subtotal;\n if (taxAmount !== undefined) input.taxAmount = taxAmount;\n if (total !== undefined) input.total = total;\n if (currency !== undefined) input.currency = currency;\n if (lineItems !== undefined) input.lineItems = lineItems;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateInvoice: Record<string, unknown>;\n }>(ops.CREATE_INVOICE, { input });\n return jsonResult(data.pswCreateInvoice);\n } catch (error) {\n ctx.logger.error('proserviceworld invoices_create failed', { error: String(error) });\n return errorResult(\n `Failed to create invoice: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'invoices_mark_paid')),\n {\n title: 'Mark Invoice Paid',\n description: 'Mark an invoice as paid by ID (sets status=PAID, paidAt set).',\n inputSchema: { id: z.string().describe('Invoice ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswMarkInvoicePaid: Record<string, unknown>;\n }>(ops.MARK_INVOICE_PAID, { id });\n return jsonResult(data.pswMarkInvoicePaid);\n } catch (error) {\n ctx.logger.error('proserviceworld invoices_mark_paid failed', { error: String(error) });\n return errorResult(\n `Failed to mark invoice paid: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld time-tracking tools.\n *\n * Surface (1): time_log — record billable/non-billable time against a matter\n * and/or engagement. Maps to the real root field pswLogTimeEntry. The subgraph\n * exposes no time-entry list/read query, so logging is the only tool.\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 registerTimeTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_log')),\n {\n title: 'Log Time Entry',\n description:\n 'Record a time entry against a matter and/or engagement. `date` and `minutes` are required; `billable` defaults to true.',\n inputSchema: {\n date: z.string().describe('Work date (ISO-8601 DateTime)'),\n minutes: z.number().int().describe('Duration in minutes'),\n matterId: z.string().optional().describe('Matter the time is logged against'),\n engagementId: z.string().optional().describe('Engagement the time is logged against'),\n rate: z.number().optional().describe('Hourly rate applied'),\n billable: z.boolean().optional().describe('Whether the time is billable (default true)'),\n narrative: z.string().optional().describe('Narrative / description of the work'),\n },\n },\n async ({ date, minutes, matterId, engagementId, rate, billable, narrative }) => {\n try {\n const input: Record<string, unknown> = { date, minutes };\n if (matterId !== undefined) input.matterId = matterId;\n if (engagementId !== undefined) input.engagementId = engagementId;\n if (rate !== undefined) input.rate = rate;\n if (billable !== undefined) input.billable = billable;\n if (narrative !== undefined) input.narrative = narrative;\n\n const data = await ctx.gql.workspace.request<{\n pswLogTimeEntry: Record<string, unknown>;\n }>(ops.LOG_TIME_ENTRY, { input });\n return jsonResult(data.pswLogTimeEntry);\n } catch (error) {\n ctx.logger.error('proserviceworld time_log failed', { error: String(error) });\n return errorResult(\n `Failed to log time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld governance tools — compliance checks + conflict checks.\n *\n * Surface (2): compliance_list, conflicts_list. Maps to the real root fields\n * pswListComplianceChecks / pswListConflictChecks. Both return plain arrays\n * (not connections); pagination is via the shared PaginationInput.\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 { ComplianceStatusEnum } from './shared.js';\n\nexport function registerComplianceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'compliance_list')),\n {\n title: 'List Compliance Checks',\n description:\n 'List compliance checks (licensing, independence, data retention, legal hold, etc.), optionally filtered by status and/or subject.',\n inputSchema: {\n status: ComplianceStatusEnum.optional().describe('Filter by compliance status'),\n subjectId: z.string().optional().describe('Filter by subject ID'),\n subjectType: z\n .string()\n .optional()\n .describe('Filter by subject type (e.g. \"client\", \"engagement\", \"matter\")'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ status, subjectId, subjectType, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListComplianceChecks: Array<Record<string, unknown>>;\n }>(ops.LIST_COMPLIANCE_CHECKS, {\n status,\n subjectId,\n subjectType,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListComplianceChecks);\n } catch (error) {\n ctx.logger.error('proserviceworld compliance_list failed', { error: String(error) });\n return errorResult(\n `Failed to list compliance checks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'conflicts_list')),\n {\n title: 'List Conflict Checks',\n description:\n 'List conflict-of-interest checks, optionally filtered by client, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListConflictChecks: Array<Record<string, unknown>>;\n }>(ops.LIST_CONFLICT_CHECKS, {\n clientId,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListConflictChecks);\n } catch (error) {\n ctx.logger.error('proserviceworld conflicts_list failed', { error: String(error) });\n return errorResult(\n `Failed to list conflict checks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld practice-area tools.\n *\n * Surface (1): practice_areas_list — the firm's practice-area catalog. Maps to\n * the real root field pswListPracticeAreas (returns a plain array).\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 registerPracticeTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'practice_areas_list')),\n {\n title: 'List Practice Areas',\n description:\n \"List the firm's practice areas (e.g. tax, audit, litigation, advisory) in the bound workspace.\",\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListPracticeAreas: Array<Record<string, unknown>>;\n }>(ops.LIST_PRACTICE_AREAS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListPracticeAreas);\n } catch (error) {\n ctx.logger.error('proserviceworld practice_areas_list failed', { error: String(error) });\n return errorResult(\n `Failed to list practice areas: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld health tool.\n *\n * Surface (1): health — maps to the @public `pswHealth` query (no auth\n * required), a liveness/identity probe for the ProServiceWorld 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: 'ProServiceWorld Health Check',\n description:\n 'Public health probe for the ProServiceWorld subgraph (pswHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ pswHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.pswHealth });\n } catch (error) {\n ctx.logger.error('proserviceworld health failed', { error: String(error) });\n return errorResult(\n `ProServiceWorld 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_CLIENTS, LIST_MATTERS, LIST_PRACTICE_AREAS } from './operations.js';\n\n/**\n * Read-only ProServiceWorld 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 registerProserviceworldResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const clientsUri = track(mcpResourceUri(ctx.productName, 'clients'));\n const mattersUri = track(mcpResourceUri(ctx.productName, 'matters'));\n const practiceAreasUri = track(mcpResourceUri(ctx.productName, 'practice-areas'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'proserviceworld-schema',\n schemaUri,\n {\n title: 'ProServiceWorld Domain Schema',\n description:\n 'Overview of the ProServiceWorld professional-services 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 = `# ProServiceWorld Domain (Overview)\n\nThe Professional-Services Operating System — system of record for clients,\nengagements, matters, time, billing, and compliance across professional-services\nfirms (finance, insurance, legal, accounting, tax, advisory, consulting).\n\n## Entities\n- PswClient — a client/relationship (has engagements + matters)\n- PswEngagement — proposal→delivery engagement (has milestones + deliverables)\n- PswMatter — a unit of professional work for a client\n- PswInvoice — a billing document\n- PswTimeEntry — logged billable/non-billable time\n- PswComplianceCheck — a governance/compliance check\n- PswConflictCheck — a conflict-of-interest check\n- PswPracticeArea — the firm's practice-area catalog\n- PswMilestone / PswDeliverable / PswTeamAssignment — engagement sub-records\n\n## Enums\n- PswClientStatus: ACTIVE, ARCHIVED, INACTIVE, PROSPECT\n- PswClientType: INDIVIDUAL, ORGANIZATION\n- PswEngagementStatus: PROPOSAL, ACCEPTED, IN_PROGRESS, REVIEW, DELIVERED, INVOICED, CLOSED, CANCELLED\n- PswFeeArrangement: FIXED, HOURLY, RETAINER, VALUE_BASED\n- PswMatterStatus: OPEN, ON_HOLD, CLOSED, ARCHIVED\n- PswMatterPriority: LOW, MEDIUM, HIGH, CRITICAL\n- PswInvoiceStatus: DRAFT, SENT, PAID, OVERDUE, CANCELLED\n- PswComplianceStatus: PENDING, IN_REVIEW, PASSED, FAILED, WAIVED\n\n## Tool groups\nclients, engagements, matters, invoices, time, compliance (compliance + conflict\nchecks), practice (practice areas), health. All run against the WORKSPACE gateway\n(workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://clients — client directory\n server.registerResource(\n 'proserviceworld-clients',\n clientsUri,\n {\n title: 'ProServiceWorld Client Directory',\n description: 'The first 50 clients in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${clientsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ pswListClients: unknown }>(LIST_CLIENTS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: clientsUri,\n text: JSON.stringify(data.pswListClients, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: clientsUri,\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 // <product>://matters — matter list\n server.registerResource(\n 'proserviceworld-matters',\n mattersUri,\n {\n title: 'ProServiceWorld Matters',\n description: 'The first 50 matters in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${mattersUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ pswListMatters: unknown }>(LIST_MATTERS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: mattersUri,\n text: JSON.stringify(data.pswListMatters, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: mattersUri,\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 // <product>://practice-areas — practice-area catalog\n server.registerResource(\n 'proserviceworld-practice-areas',\n practiceAreasUri,\n {\n title: 'ProServiceWorld Practice Areas',\n description: \"The firm's practice-area catalog in the bound workspace.\",\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${practiceAreasUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ pswListPracticeAreas: unknown }>(\n LIST_PRACTICE_AREAS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: practiceAreasUri,\n text: JSON.stringify(data.pswListPracticeAreas, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: practiceAreasUri,\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 * ProServiceWorld MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerProserviceworldPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const onboardingName = track(mcpPromptName(p, 'client-onboarding'));\n const deliveryName = track(mcpPromptName(p, 'engagement-delivery'));\n\n // <product>-client-onboarding — stand up a client + engagement + matter\n server.registerPrompt(\n onboardingName,\n {\n title: 'Client Onboarding',\n description:\n 'Guide for onboarding a new ProServiceWorld client end to end: create the client, open an engagement, run a conflict check, and open the first matter.',\n argsSchema: {\n name: z.string().optional().describe('Client / organization name'),\n industry: z.string().optional().describe('Client industry / sector'),\n },\n },\n ({ name, industry }) => {\n ctx.logger.debug(`Prompt ${onboardingName} called`, { name, industry });\n const nameNote = name\n ? `Use the client name \"${name}\".`\n : 'Ask the user for the client name.';\n const industryNote = industry ? `Industry is ${industry}.` : 'Ask the user for the industry.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new ProServiceWorld client.\n\n1. **Create Client**: Use ${p}_clients_create. ${nameNote} ${industryNote} Set type (INDIVIDUAL/ORGANIZATION) and capture contact details.\n2. **Conflict Check**: Use ${p}_conflicts_list filtered by the new clientId to confirm there are no unresolved conflicts of interest before engaging.\n3. **Pick Practice Area**: Use ${p}_practice_areas_list and choose the relevant practiceAreaId.\n4. **Open Engagement**: Use ${p}_engagements_create with the clientId, a name, a feeArrangement (FIXED/HOURLY/RETAINER/VALUE_BASED), and the practiceAreaId.\n5. **Open First Matter**: Use ${p}_matters_create for the initial unit of work (clientId, title, priority, optional engagementId).\n6. **Activate**: Use ${p}_clients_update with status=ACTIVE once engaged.\n\nShow results at each step and confirm before activation.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-engagement-delivery — run an engagement to invoice\n server.registerPrompt(\n deliveryName,\n {\n title: 'Engagement Delivery',\n description:\n 'Workflow to drive an engagement through delivery: advance its lifecycle, log time, check compliance, raise an invoice, and mark it paid.',\n argsSchema: {\n engagementId: z.string().optional().describe('Engagement ID to operate'),\n },\n },\n ({ engagementId }) => {\n ctx.logger.debug(`Prompt ${deliveryName} called`, { engagementId });\n const engagementNote = engagementId\n ? `Operate engagement \"${engagementId}\".`\n : `First list engagements with ${p}_engagements_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run ProServiceWorld engagement delivery. ${engagementNote}\n\n1. **Review**: Use ${p}_engagements_get to inspect milestones and deliverables.\n2. **Advance**: Use ${p}_engagements_transition to move the engagement (e.g. ACCEPTED → IN_PROGRESS → REVIEW → DELIVERED).\n3. **Log Time**: Use ${p}_time_log to record billable time against the engagement and/or its matters.\n4. **Compliance**: Use ${p}_compliance_list (subjectId=engagementId, subjectType=\"engagement\") to confirm no PENDING/IN_REVIEW checks block invoicing.\n5. **Invoice**: When DELIVERED, use ${p}_invoices_create (clientId, number, amounts/line items), then ${p}_engagements_transition to INVOICED.\n6. **Collect**: Once paid, use ${p}_invoices_mark_paid and ${p}_engagements_transition to CLOSED.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * ProServiceWorld module — domain module for the future-products ecosystem program.\n *\n * Covers every queryable/mutable @key entity of wspace-proserviceworld-svc\n * grouped into per-entity sub-APIs: clients, engagements, matters, invoices,\n * time, compliance (compliance + conflict checks), practice (practice areas),\n * and a public health probe. Mirrors the kadaikodi module's structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/proserviceworld/wspace-proserviceworld-svc/\n * (Hive service name `proserviceworld`). All operations run against the\n * WORKSPACE gateway. Every root field is prefixed `psw*` / every type `Psw*`\n * per the service's GraphQL naming contract; the @public `pswHealth` probe is\n * 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 { registerClientTools } from './tools/clients.js';\nimport { registerEngagementTools } from './tools/engagements.js';\nimport { registerMatterTools } from './tools/matters.js';\nimport { registerInvoiceTools } from './tools/invoices.js';\nimport { registerTimeTools } from './tools/time.js';\nimport { registerComplianceTools } from './tools/compliance.js';\nimport { registerPracticeTools } from './tools/practice.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerProserviceworldResources } from './resources.js';\nimport { registerProserviceworldPrompts } from './prompts.js';\n\nconst proserviceworldModule: McpModule = {\n id: 'proserviceworld',\n version: '0.0.1',\n displayName: 'ProServiceWorld',\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 registerClientTools(server, ctx, trackTool);\n registerEngagementTools(server, ctx, trackTool);\n registerMatterTools(server, ctx, trackTool);\n registerInvoiceTools(server, ctx, trackTool);\n registerTimeTools(server, ctx, trackTool);\n registerComplianceTools(server, ctx, trackTool);\n registerPracticeTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerProserviceworldResources(server, ctx, trackResource);\n registerProserviceworldPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default proserviceworldModule;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/proserviceworld/operations.ts","../../../src/modules/proserviceworld/tools/shared.ts","../../../src/modules/proserviceworld/tools/clients.ts","../../../src/modules/proserviceworld/tools/engagements.ts","../../../src/modules/proserviceworld/tools/matters.ts","../../../src/modules/proserviceworld/tools/invoices.ts","../../../src/modules/proserviceworld/tools/time.ts","../../../src/modules/proserviceworld/tools/compliance.ts","../../../src/modules/proserviceworld/tools/practice.ts","../../../src/modules/proserviceworld/tools/health.ts","../../../src/modules/proserviceworld/resources.ts","../../../src/modules/proserviceworld/prompts.ts","../../../src/modules/proserviceworld/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 ProServiceWorld MCP module.\n *\n * ProServiceWorld is the Professional-Services Operating System (clients,\n * engagements, matters, time, billing, compliance) for professional-services\n * firms. Backend subgraph:\n * ~/products/wspace/proserviceworld/wspace-proserviceworld-svc/\n * (Hive service name `proserviceworld`).\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 — ProServiceWorld inputs do NOT carry a workspaceId.\n *\n * Every root field is prefixed `psw*` and every type/input/enum is prefixed\n * `Psw*` per the service's GraphQL naming contract; the operations below call\n * them by their EXACT real names. List queries return cursor-less connections\n * (`{ items, pageInfo { cursor, hasMore } }`) driven by the shared\n * `PaginationInput` ({ cursor, limit, offset }).\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi/crewfoundry module operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const CLIENT_FIELDS = `\n id name type status industry contactName contactEmail contactPhone address\n notes tags relationshipOwnerId workspaceId createdAt updatedAt\n`;\n\nexport const ENGAGEMENT_FIELDS = `\n id clientId name description status feeArrangement feeAmount currency\n practiceAreaId responsiblePartnerId startDate endDate tags workspaceId\n createdAt updatedAt\n`;\n\nexport const MATTER_FIELDS = `\n id clientId engagementId title reference description status priority\n isPrivileged leadPractitionerId practiceAreaId dueDate closedAt tags\n workspaceId createdAt updatedAt\n`;\n\nexport const INVOICE_FIELDS = `\n id clientId engagementId number status issueDate dueDate paidAt subtotal\n taxAmount total currency lineItems notes workspaceId createdAt updatedAt\n`;\n\nexport const TIME_ENTRY_FIELDS = `\n id matterId engagementId practitionerId date minutes rate billable narrative\n status invoiceId workspaceId createdAt updatedAt\n`;\n\nexport const COMPLIANCE_FIELDS = `\n id type status title details subjectType subjectId reviewerId dueDate\n resolvedAt evidenceFileId workspaceId createdAt updatedAt\n`;\n\nexport const CONFLICT_FIELDS = `\n id clientId matterId status searchedParties findings waiverReason\n clearedById resolvedAt workspaceId createdAt updatedAt\n`;\n\nexport const PRACTICE_AREA_FIELDS = `\n id name code description isActive workspaceId createdAt updatedAt\n`;\n\nexport const MILESTONE_FIELDS = `\n id engagementId name description status triggersInvoice triggerAmount\n dueDate completedAt workspaceId createdAt updatedAt\n`;\n\nexport const DELIVERABLE_FIELDS = `\n id engagementId name description status version acceptanceCriteria\n acceptedAt dueDate workspaceId createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Clients\n// ---------------------------------------------------------------------------\n\nexport const GET_CLIENT = `\n query PswGetClient($id: ID!) {\n pswClient(id: $id) {\n ${CLIENT_FIELDS}\n engagements { id name status feeArrangement feeAmount currency }\n matters { id title status priority }\n }\n }\n`;\n\nexport const LIST_CLIENTS = `\n query PswListClients($pagination: PaginationInput, $status: PswClientStatus) {\n pswListClients(pagination: $pagination, status: $status) {\n items { ${CLIENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_CLIENT = `\n mutation PswCreateClient($input: PswCreateClientInput!) {\n pswCreateClient(input: $input) {\n ${CLIENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CLIENT = `\n mutation PswUpdateClient($id: ID!, $input: PswUpdateClientInput!) {\n pswUpdateClient(id: $id, input: $input) {\n ${CLIENT_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_CLIENT = `\n mutation PswArchiveClient($id: ID!) {\n pswArchiveClient(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Engagements\n// ---------------------------------------------------------------------------\n\nexport const GET_ENGAGEMENT = `\n query PswGetEngagement($id: ID!) {\n pswEngagement(id: $id) {\n ${ENGAGEMENT_FIELDS}\n client { id name status }\n milestones { ${MILESTONE_FIELDS} }\n deliverables { ${DELIVERABLE_FIELDS} }\n }\n }\n`;\n\nexport const LIST_ENGAGEMENTS = `\n query PswListEngagements(\n $clientId: ID\n $status: PswEngagementStatus\n $pagination: PaginationInput\n ) {\n pswListEngagements(clientId: $clientId, status: $status, pagination: $pagination) {\n items { ${ENGAGEMENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_ENGAGEMENT = `\n mutation PswCreateEngagement($input: PswCreateEngagementInput!) {\n pswCreateEngagement(input: $input) {\n ${ENGAGEMENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_ENGAGEMENT = `\n mutation PswUpdateEngagement($id: ID!, $input: PswUpdateEngagementInput!) {\n pswUpdateEngagement(id: $id, input: $input) {\n ${ENGAGEMENT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_ENGAGEMENT = `\n mutation PswTransitionEngagement($id: ID!, $status: PswEngagementStatus!) {\n pswTransitionEngagement(id: $id, status: $status) {\n ${ENGAGEMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Matters\n// ---------------------------------------------------------------------------\n\nexport const GET_MATTER = `\n query PswGetMatter($id: ID!) {\n pswMatter(id: $id) {\n ${MATTER_FIELDS}\n client { id name status }\n }\n }\n`;\n\nexport const LIST_MATTERS = `\n query PswListMatters(\n $clientId: ID\n $engagementId: ID\n $status: PswMatterStatus\n $pagination: PaginationInput\n ) {\n pswListMatters(\n clientId: $clientId\n engagementId: $engagementId\n status: $status\n pagination: $pagination\n ) {\n items { ${MATTER_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MATTER = `\n mutation PswCreateMatter($input: PswCreateMatterInput!) {\n pswCreateMatter(input: $input) {\n ${MATTER_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_MATTER = `\n mutation PswUpdateMatter($id: ID!, $input: PswUpdateMatterInput!) {\n pswUpdateMatter(id: $id, input: $input) {\n ${MATTER_FIELDS}\n }\n }\n`;\n\nexport const CLOSE_MATTER = `\n mutation PswCloseMatter($id: ID!) {\n pswCloseMatter(id: $id) {\n ${MATTER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Invoices\n// ---------------------------------------------------------------------------\n\nexport const LIST_INVOICES = `\n query PswListInvoices(\n $clientId: ID\n $status: PswInvoiceStatus\n $pagination: PaginationInput\n ) {\n pswListInvoices(clientId: $clientId, status: $status, pagination: $pagination) {\n items { ${INVOICE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_INVOICE = `\n mutation PswCreateInvoice($input: PswCreateInvoiceInput!) {\n pswCreateInvoice(input: $input) {\n ${INVOICE_FIELDS}\n }\n }\n`;\n\nexport const MARK_INVOICE_PAID = `\n mutation PswMarkInvoicePaid($id: ID!) {\n pswMarkInvoicePaid(id: $id) {\n ${INVOICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Time entries\n// ---------------------------------------------------------------------------\n\nexport const LOG_TIME_ENTRY = `\n mutation PswLogTimeEntry($input: PswCreateTimeEntryInput!) {\n pswLogTimeEntry(input: $input) {\n ${TIME_ENTRY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Compliance + conflicts\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMPLIANCE_CHECKS = `\n query PswListComplianceChecks(\n $status: PswComplianceStatus\n $subjectId: ID\n $subjectType: String\n $pagination: PaginationInput\n ) {\n pswListComplianceChecks(\n status: $status\n subjectId: $subjectId\n subjectType: $subjectType\n pagination: $pagination\n ) {\n ${COMPLIANCE_FIELDS}\n }\n }\n`;\n\nexport const LIST_CONFLICT_CHECKS = `\n query PswListConflictChecks($clientId: ID, $pagination: PaginationInput) {\n pswListConflictChecks(clientId: $clientId, pagination: $pagination) {\n ${CONFLICT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Practice areas\n// ---------------------------------------------------------------------------\n\nexport const LIST_PRACTICE_AREAS = `\n query PswListPracticeAreas($pagination: PaginationInput) {\n pswListPracticeAreas(pagination: $pagination) {\n ${PRACTICE_AREA_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query PswHealth {\n pswHealth\n }\n`;\n","/**\n * Shared zod schemas for the ProServiceWorld 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. JSON scalar inputs (invoice\n * lineItems) are modelled as permissive records — the backend accepts arbitrary\n * JSON, but a record/array shape gives the LLM a typed hint. `DateTime` scalar\n * inputs are accepted as ISO-8601 strings.\n */\n\nimport { z } from 'zod';\n\nexport const ClientStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'INACTIVE', 'PROSPECT'])\n .describe('Lifecycle status of a client relationship');\n\nexport const ClientTypeEnum = z\n .enum(['INDIVIDUAL', 'ORGANIZATION'])\n .describe('Whether the client is an INDIVIDUAL or an ORGANIZATION');\n\nexport const EngagementStatusEnum = z\n .enum([\n 'ACCEPTED',\n 'CANCELLED',\n 'CLOSED',\n 'DELIVERED',\n 'INVOICED',\n 'IN_PROGRESS',\n 'PROPOSAL',\n 'REVIEW',\n ])\n .describe('Delivery-lifecycle status of an engagement');\n\nexport const FeeArrangementEnum = z\n .enum(['FIXED', 'HOURLY', 'RETAINER', 'VALUE_BASED'])\n .describe('Fee arrangement for an engagement');\n\nexport const MatterStatusEnum = z\n .enum(['ARCHIVED', 'CLOSED', 'ON_HOLD', 'OPEN'])\n .describe('Lifecycle status of a matter');\n\nexport const MatterPriorityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM'])\n .describe('Priority of a matter');\n\nexport const InvoiceStatusEnum = z\n .enum(['CANCELLED', 'DRAFT', 'OVERDUE', 'PAID', 'SENT'])\n .describe('Status of an invoice');\n\nexport const ComplianceStatusEnum = z\n .enum(['FAILED', 'IN_REVIEW', 'PASSED', 'PENDING', 'WAIVED'])\n .describe('Status of a compliance check');\n\n/** Permissive JSON record for the invoice `lineItems` JSON scalar. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n\n/** Invoice line items: a JSON array (or object) of arbitrary line-item shapes. */\nexport const LineItems = z.union([z.array(z.unknown()), JsonObject]);\n","/**\n * ProServiceWorld client tools — the client/relationship directory.\n *\n * Surface (5): clients_{get,list,create,update,archive}. Maps to the real\n * root fields pswClient / pswListClients / pswCreateClient / pswUpdateClient /\n * pswArchiveClient.\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 { ClientStatusEnum, ClientTypeEnum } from './shared.js';\n\nexport function registerClientTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_get')),\n {\n title: 'Get Client',\n description:\n 'Fetch a single ProServiceWorld client by ID, including its engagements and matters.',\n inputSchema: { id: z.string().describe('Client ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswClient: Record<string, unknown> | null;\n }>(ops.GET_CLIENT, { id });\n if (!data.pswClient) return errorResult(`Client ${id} not found`);\n return jsonResult(data.pswClient);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_get failed', { error: String(error) });\n return errorResult(\n `Failed to get client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_list')),\n {\n title: 'List Clients',\n description:\n 'List clients in the bound workspace, optionally filtered by status, with limit/offset pagination.',\n inputSchema: {\n status: ClientStatusEnum.optional().describe('Filter by client status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListClients: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_CLIENTS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListClients);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_list failed', { error: String(error) });\n return errorResult(\n `Failed to list clients: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_create')),\n {\n title: 'Create Client',\n description:\n 'Onboard a new client. Only `name` is required; `type` defaults to ORGANIZATION and `status` to PROSPECT.',\n inputSchema: {\n name: z.string().min(1).describe('Client display name'),\n type: ClientTypeEnum.optional().describe('Client type (default ORGANIZATION)'),\n status: ClientStatusEnum.optional().describe('Initial status (default PROSPECT)'),\n industry: z.string().optional().describe('Industry / sector'),\n contactName: z.string().optional().describe('Primary contact name'),\n contactEmail: z.string().optional().describe('Primary contact email'),\n contactPhone: z.string().optional().describe('Primary contact phone'),\n address: z.string().optional().describe('Postal address'),\n notes: z.string().optional().describe('Free-text notes'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n relationshipOwnerId: z.string().optional().describe('User ID of the relationship owner'),\n },\n },\n async ({\n name,\n type,\n status,\n industry,\n contactName,\n contactEmail,\n contactPhone,\n address,\n notes,\n tags,\n relationshipOwnerId,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (industry !== undefined) input.industry = industry;\n if (contactName !== undefined) input.contactName = contactName;\n if (contactEmail !== undefined) input.contactEmail = contactEmail;\n if (contactPhone !== undefined) input.contactPhone = contactPhone;\n if (address !== undefined) input.address = address;\n if (notes !== undefined) input.notes = notes;\n if (tags !== undefined) input.tags = tags;\n if (relationshipOwnerId !== undefined) input.relationshipOwnerId = relationshipOwnerId;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateClient: Record<string, unknown>;\n }>(ops.CREATE_CLIENT, { input });\n return jsonResult(data.pswCreateClient);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_create failed', { error: String(error) });\n return errorResult(\n `Failed to create client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_update')),\n {\n title: 'Update Client',\n description:\n 'Update a client. At least one mutable field must be provided. Use `status` to move a client through ACTIVE/INACTIVE/etc.',\n inputSchema: {\n id: z.string().describe('Client ID'),\n name: z.string().optional().describe('Updated display name'),\n type: ClientTypeEnum.optional().describe('Updated client type'),\n status: ClientStatusEnum.optional().describe('Updated status'),\n industry: z.string().optional().describe('Updated industry'),\n contactName: z.string().optional().describe('Updated primary contact name'),\n contactEmail: z.string().optional().describe('Updated primary contact email'),\n contactPhone: z.string().optional().describe('Updated primary contact phone'),\n address: z.string().optional().describe('Updated postal address'),\n notes: z.string().optional().describe('Updated notes'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n relationshipOwnerId: z.string().optional().describe('Updated relationship owner user ID'),\n },\n },\n async ({\n id,\n name,\n type,\n status,\n industry,\n contactName,\n contactEmail,\n contactPhone,\n address,\n notes,\n tags,\n relationshipOwnerId,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (industry !== undefined) input.industry = industry;\n if (contactName !== undefined) input.contactName = contactName;\n if (contactEmail !== undefined) input.contactEmail = contactEmail;\n if (contactPhone !== undefined) input.contactPhone = contactPhone;\n if (address !== undefined) input.address = address;\n if (notes !== undefined) input.notes = notes;\n if (tags !== undefined) input.tags = tags;\n if (relationshipOwnerId !== undefined) input.relationshipOwnerId = relationshipOwnerId;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/type/status/industry/contactName/contactEmail/contactPhone/address/notes/tags/relationshipOwnerId',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n pswUpdateClient: Record<string, unknown>;\n }>(ops.UPDATE_CLIENT, { id, input });\n return jsonResult(data.pswUpdateClient);\n } catch (error) {\n ctx.logger.error('proserviceworld clients_update failed', { error: String(error) });\n return errorResult(\n `Failed to update client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'clients_archive')),\n {\n title: 'Archive Client',\n description: 'Archive (soft-delete) a client by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Client ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ pswArchiveClient: boolean }>(\n ops.ARCHIVE_CLIENT,\n { id },\n );\n return jsonResult({ archived: data.pswArchiveClient, id });\n } catch (error) {\n ctx.logger.error('proserviceworld clients_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive client: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld engagement tools — the proposal→delivery lifecycle.\n *\n * Surface (5): engagements_{get,list,create,update,transition}. Maps to the\n * real root fields pswEngagement / pswListEngagements / pswCreateEngagement /\n * pswUpdateEngagement / pswTransitionEngagement.\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 { EngagementStatusEnum, FeeArrangementEnum } from './shared.js';\n\nexport function registerEngagementTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_get')),\n {\n title: 'Get Engagement',\n description:\n 'Fetch a single engagement by ID, including its client, milestones, and deliverables.',\n inputSchema: { id: z.string().describe('Engagement ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswEngagement: Record<string, unknown> | null;\n }>(ops.GET_ENGAGEMENT, { id });\n if (!data.pswEngagement) return errorResult(`Engagement ${id} not found`);\n return jsonResult(data.pswEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_get failed', { error: String(error) });\n return errorResult(\n `Failed to get engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_list')),\n {\n title: 'List Engagements',\n description:\n 'List engagements, optionally filtered by client and/or status, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n status: EngagementStatusEnum.optional().describe('Filter by engagement status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListEngagements: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_ENGAGEMENTS, {\n clientId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListEngagements);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_list failed', { error: String(error) });\n return errorResult(\n `Failed to list engagements: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_create')),\n {\n title: 'Create Engagement',\n description:\n 'Open a new engagement for a client. `clientId` and `name` are required; `feeArrangement` defaults to FIXED.',\n inputSchema: {\n clientId: z.string().min(1).describe('Owning client ID'),\n name: z.string().min(1).describe('Engagement name'),\n description: z.string().optional().describe('Scope / description'),\n feeArrangement: FeeArrangementEnum.optional().describe('Fee arrangement (default FIXED)'),\n feeAmount: z.number().optional().describe('Fee amount'),\n currency: z.string().optional().describe('ISO currency code (e.g. \"USD\")'),\n practiceAreaId: z.string().optional().describe('Practice-area ID'),\n responsiblePartnerId: z.string().optional().describe('Responsible partner user ID'),\n startDate: z.string().optional().describe('Start date (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('End date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({\n clientId,\n name,\n description,\n feeArrangement,\n feeAmount,\n currency,\n practiceAreaId,\n responsiblePartnerId,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { clientId, name };\n if (description !== undefined) input.description = description;\n if (feeArrangement !== undefined) input.feeArrangement = feeArrangement;\n if (feeAmount !== undefined) input.feeAmount = feeAmount;\n if (currency !== undefined) input.currency = currency;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (responsiblePartnerId !== undefined) input.responsiblePartnerId = responsiblePartnerId;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateEngagement: Record<string, unknown>;\n }>(ops.CREATE_ENGAGEMENT, { input });\n return jsonResult(data.pswCreateEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_create failed', { error: String(error) });\n return errorResult(\n `Failed to create engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_update')),\n {\n title: 'Update Engagement',\n description:\n 'Update an engagement. At least one mutable field must be provided. Use `engagements_transition` to change lifecycle status.',\n inputSchema: {\n id: z.string().describe('Engagement ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated scope / description'),\n feeArrangement: FeeArrangementEnum.optional().describe('Updated fee arrangement'),\n feeAmount: z.number().optional().describe('Updated fee amount'),\n currency: z.string().optional().describe('Updated ISO currency code'),\n practiceAreaId: z.string().optional().describe('Updated practice-area ID'),\n responsiblePartnerId: z.string().optional().describe('Updated responsible partner user ID'),\n startDate: z.string().optional().describe('Updated start date (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Updated end date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({\n id,\n name,\n description,\n feeArrangement,\n feeAmount,\n currency,\n practiceAreaId,\n responsiblePartnerId,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (feeArrangement !== undefined) input.feeArrangement = feeArrangement;\n if (feeAmount !== undefined) input.feeAmount = feeAmount;\n if (currency !== undefined) input.currency = currency;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (responsiblePartnerId !== undefined) input.responsiblePartnerId = responsiblePartnerId;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\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/description/feeArrangement/feeAmount/currency/practiceAreaId/responsiblePartnerId/startDate/endDate/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n pswUpdateEngagement: Record<string, unknown>;\n }>(ops.UPDATE_ENGAGEMENT, { id, input });\n return jsonResult(data.pswUpdateEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_update failed', { error: String(error) });\n return errorResult(\n `Failed to update engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'engagements_transition')),\n {\n title: 'Transition Engagement',\n description:\n 'Advance an engagement through its delivery lifecycle (validated transitions), e.g. PROPOSAL → ACCEPTED → IN_PROGRESS → REVIEW → DELIVERED → INVOICED → CLOSED, or CANCELLED.',\n inputSchema: {\n id: z.string().describe('Engagement ID'),\n status: EngagementStatusEnum.describe('Target engagement status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswTransitionEngagement: Record<string, unknown>;\n }>(ops.TRANSITION_ENGAGEMENT, { id, status });\n return jsonResult(data.pswTransitionEngagement);\n } catch (error) {\n ctx.logger.error('proserviceworld engagements_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition engagement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld matter tools — the unit of professional work.\n *\n * Surface (5): matters_{get,list,create,update,close}. Maps to the real root\n * fields pswMatter / pswListMatters / pswCreateMatter / pswUpdateMatter /\n * pswCloseMatter.\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 { MatterStatusEnum, MatterPriorityEnum } from './shared.js';\n\nexport function registerMatterTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_get')),\n {\n title: 'Get Matter',\n description: 'Fetch a single matter by ID, including its client.',\n inputSchema: { id: z.string().describe('Matter ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswMatter: Record<string, unknown> | null;\n }>(ops.GET_MATTER, { id });\n if (!data.pswMatter) return errorResult(`Matter ${id} not found`);\n return jsonResult(data.pswMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_get failed', { error: String(error) });\n return errorResult(\n `Failed to get matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_list')),\n {\n title: 'List Matters',\n description:\n 'List matters, optionally filtered by client, engagement, and/or status, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n engagementId: z.string().optional().describe('Filter by engagement ID'),\n status: MatterStatusEnum.optional().describe('Filter by matter status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, engagementId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListMatters: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MATTERS, {\n clientId,\n engagementId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListMatters);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_list failed', { error: String(error) });\n return errorResult(\n `Failed to list matters: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_create')),\n {\n title: 'Create Matter',\n description:\n 'Open a new matter for a client. `clientId` and `title` are required; `priority` defaults to MEDIUM and `isPrivileged` to false.',\n inputSchema: {\n clientId: z.string().min(1).describe('Owning client ID'),\n title: z.string().min(1).describe('Matter title'),\n reference: z.string().optional().describe('External matter reference / number'),\n description: z.string().optional().describe('Description'),\n engagementId: z.string().optional().describe('Parent engagement ID'),\n practiceAreaId: z.string().optional().describe('Practice-area ID'),\n leadPractitionerId: z.string().optional().describe('Lead practitioner user ID'),\n priority: MatterPriorityEnum.optional().describe('Priority (default MEDIUM)'),\n isPrivileged: z\n .boolean()\n .optional()\n .describe('Whether the matter is privileged (default false)'),\n dueDate: z.string().optional().describe('Due date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({\n clientId,\n title,\n reference,\n description,\n engagementId,\n practiceAreaId,\n leadPractitionerId,\n priority,\n isPrivileged,\n dueDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { clientId, title };\n if (reference !== undefined) input.reference = reference;\n if (description !== undefined) input.description = description;\n if (engagementId !== undefined) input.engagementId = engagementId;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (leadPractitionerId !== undefined) input.leadPractitionerId = leadPractitionerId;\n if (priority !== undefined) input.priority = priority;\n if (isPrivileged !== undefined) input.isPrivileged = isPrivileged;\n if (dueDate !== undefined) input.dueDate = dueDate;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateMatter: Record<string, unknown>;\n }>(ops.CREATE_MATTER, { input });\n return jsonResult(data.pswCreateMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_create failed', { error: String(error) });\n return errorResult(\n `Failed to create matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_update')),\n {\n title: 'Update Matter',\n description:\n 'Update a matter. At least one mutable field must be provided. Use `matters_close` to close a matter.',\n inputSchema: {\n id: z.string().describe('Matter ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n engagementId: z.string().optional().describe('Updated parent engagement ID'),\n practiceAreaId: z.string().optional().describe('Updated practice-area ID'),\n leadPractitionerId: z.string().optional().describe('Updated lead practitioner user ID'),\n priority: MatterPriorityEnum.optional().describe('Updated priority'),\n isPrivileged: z.boolean().optional().describe('Updated privileged flag'),\n dueDate: z.string().optional().describe('Updated due date (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({\n id,\n title,\n description,\n engagementId,\n practiceAreaId,\n leadPractitionerId,\n priority,\n isPrivileged,\n dueDate,\n tags,\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 (engagementId !== undefined) input.engagementId = engagementId;\n if (practiceAreaId !== undefined) input.practiceAreaId = practiceAreaId;\n if (leadPractitionerId !== undefined) input.leadPractitionerId = leadPractitionerId;\n if (priority !== undefined) input.priority = priority;\n if (isPrivileged !== undefined) input.isPrivileged = isPrivileged;\n if (dueDate !== undefined) input.dueDate = dueDate;\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 title/description/engagementId/practiceAreaId/leadPractitionerId/priority/isPrivileged/dueDate/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n pswUpdateMatter: Record<string, unknown>;\n }>(ops.UPDATE_MATTER, { id, input });\n return jsonResult(data.pswUpdateMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_update failed', { error: String(error) });\n return errorResult(\n `Failed to update matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'matters_close')),\n {\n title: 'Close Matter',\n description: 'Close a matter by ID. Returns the closed matter (status=CLOSED, closedAt set).',\n inputSchema: { id: z.string().describe('Matter ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswCloseMatter: Record<string, unknown>;\n }>(ops.CLOSE_MATTER, { id });\n return jsonResult(data.pswCloseMatter);\n } catch (error) {\n ctx.logger.error('proserviceworld matters_close failed', { error: String(error) });\n return errorResult(\n `Failed to close matter: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld invoice tools — billing.\n *\n * Surface (3): invoices_{list,create,mark_paid}. Maps to the real root fields\n * pswListInvoices / pswCreateInvoice / pswMarkInvoicePaid. There is no single\n * invoice get query on the subgraph, so no invoices_get tool.\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 { InvoiceStatusEnum, LineItems } from './shared.js';\n\nexport function registerInvoiceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'invoices_list')),\n {\n title: 'List Invoices',\n description:\n 'List invoices, optionally filtered by client and/or status, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n status: InvoiceStatusEnum.optional().describe('Filter by invoice status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListInvoices: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_INVOICES, {\n clientId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListInvoices);\n } catch (error) {\n ctx.logger.error('proserviceworld invoices_list failed', { error: String(error) });\n return errorResult(\n `Failed to list invoices: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'invoices_create')),\n {\n title: 'Create Invoice',\n description:\n 'Raise a new invoice for a client. `clientId` and `number` are required; amounts and line items are optional JSON/numbers.',\n inputSchema: {\n clientId: z.string().min(1).describe('Billed client ID'),\n number: z.string().min(1).describe('Invoice number (unique within the workspace)'),\n engagementId: z.string().optional().describe('Related engagement ID'),\n issueDate: z.string().optional().describe('Issue date (ISO-8601 DateTime)'),\n dueDate: z.string().optional().describe('Due date (ISO-8601 DateTime)'),\n subtotal: z.number().optional().describe('Subtotal amount'),\n taxAmount: z.number().optional().describe('Tax amount'),\n total: z.number().optional().describe('Total amount'),\n currency: z.string().optional().describe('ISO currency code (e.g. \"USD\")'),\n lineItems: LineItems.optional().describe('Line items JSON (array of line-item objects)'),\n notes: z.string().optional().describe('Invoice notes'),\n },\n },\n async ({\n clientId,\n number,\n engagementId,\n issueDate,\n dueDate,\n subtotal,\n taxAmount,\n total,\n currency,\n lineItems,\n notes,\n }) => {\n try {\n const input: Record<string, unknown> = { clientId, number };\n if (engagementId !== undefined) input.engagementId = engagementId;\n if (issueDate !== undefined) input.issueDate = issueDate;\n if (dueDate !== undefined) input.dueDate = dueDate;\n if (subtotal !== undefined) input.subtotal = subtotal;\n if (taxAmount !== undefined) input.taxAmount = taxAmount;\n if (total !== undefined) input.total = total;\n if (currency !== undefined) input.currency = currency;\n if (lineItems !== undefined) input.lineItems = lineItems;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n pswCreateInvoice: Record<string, unknown>;\n }>(ops.CREATE_INVOICE, { input });\n return jsonResult(data.pswCreateInvoice);\n } catch (error) {\n ctx.logger.error('proserviceworld invoices_create failed', { error: String(error) });\n return errorResult(\n `Failed to create invoice: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'invoices_mark_paid')),\n {\n title: 'Mark Invoice Paid',\n description: 'Mark an invoice as paid by ID (sets status=PAID, paidAt set).',\n inputSchema: { id: z.string().describe('Invoice ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswMarkInvoicePaid: Record<string, unknown>;\n }>(ops.MARK_INVOICE_PAID, { id });\n return jsonResult(data.pswMarkInvoicePaid);\n } catch (error) {\n ctx.logger.error('proserviceworld invoices_mark_paid failed', { error: String(error) });\n return errorResult(\n `Failed to mark invoice paid: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld time-tracking tools.\n *\n * Surface (1): time_log — record billable/non-billable time against a matter\n * and/or engagement. Maps to the real root field pswLogTimeEntry. The subgraph\n * exposes no time-entry list/read query, so logging is the only tool.\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 registerTimeTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'time_log')),\n {\n title: 'Log Time Entry',\n description:\n 'Record a time entry against a matter and/or engagement. `date` and `minutes` are required; `billable` defaults to true.',\n inputSchema: {\n date: z.string().describe('Work date (ISO-8601 DateTime)'),\n minutes: z.number().int().describe('Duration in minutes'),\n matterId: z.string().optional().describe('Matter the time is logged against'),\n engagementId: z.string().optional().describe('Engagement the time is logged against'),\n rate: z.number().optional().describe('Hourly rate applied'),\n billable: z.boolean().optional().describe('Whether the time is billable (default true)'),\n narrative: z.string().optional().describe('Narrative / description of the work'),\n },\n },\n async ({ date, minutes, matterId, engagementId, rate, billable, narrative }) => {\n try {\n const input: Record<string, unknown> = { date, minutes };\n if (matterId !== undefined) input.matterId = matterId;\n if (engagementId !== undefined) input.engagementId = engagementId;\n if (rate !== undefined) input.rate = rate;\n if (billable !== undefined) input.billable = billable;\n if (narrative !== undefined) input.narrative = narrative;\n\n const data = await ctx.gql.workspace.request<{\n pswLogTimeEntry: Record<string, unknown>;\n }>(ops.LOG_TIME_ENTRY, { input });\n return jsonResult(data.pswLogTimeEntry);\n } catch (error) {\n ctx.logger.error('proserviceworld time_log failed', { error: String(error) });\n return errorResult(\n `Failed to log time entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld governance tools — compliance checks + conflict checks.\n *\n * Surface (2): compliance_list, conflicts_list. Maps to the real root fields\n * pswListComplianceChecks / pswListConflictChecks. Both return plain arrays\n * (not connections); pagination is via the shared PaginationInput.\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 { ComplianceStatusEnum } from './shared.js';\n\nexport function registerComplianceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'compliance_list')),\n {\n title: 'List Compliance Checks',\n description:\n 'List compliance checks (licensing, independence, data retention, legal hold, etc.), optionally filtered by status and/or subject.',\n inputSchema: {\n status: ComplianceStatusEnum.optional().describe('Filter by compliance status'),\n subjectId: z.string().optional().describe('Filter by subject ID'),\n subjectType: z\n .string()\n .optional()\n .describe('Filter by subject type (e.g. \"client\", \"engagement\", \"matter\")'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ status, subjectId, subjectType, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListComplianceChecks: Array<Record<string, unknown>>;\n }>(ops.LIST_COMPLIANCE_CHECKS, {\n status,\n subjectId,\n subjectType,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListComplianceChecks);\n } catch (error) {\n ctx.logger.error('proserviceworld compliance_list failed', { error: String(error) });\n return errorResult(\n `Failed to list compliance checks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'conflicts_list')),\n {\n title: 'List Conflict Checks',\n description:\n 'List conflict-of-interest checks, optionally filtered by client, with limit/offset pagination.',\n inputSchema: {\n clientId: z.string().optional().describe('Filter by client ID'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ clientId, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListConflictChecks: Array<Record<string, unknown>>;\n }>(ops.LIST_CONFLICT_CHECKS, {\n clientId,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListConflictChecks);\n } catch (error) {\n ctx.logger.error('proserviceworld conflicts_list failed', { error: String(error) });\n return errorResult(\n `Failed to list conflict checks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld practice-area tools.\n *\n * Surface (1): practice_areas_list — the firm's practice-area catalog. Maps to\n * the real root field pswListPracticeAreas (returns a plain array).\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 registerPracticeTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'practice_areas_list')),\n {\n title: 'List Practice Areas',\n description:\n \"List the firm's practice areas (e.g. tax, audit, litigation, advisory) in the bound workspace.\",\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n pswListPracticeAreas: Array<Record<string, unknown>>;\n }>(ops.LIST_PRACTICE_AREAS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.pswListPracticeAreas);\n } catch (error) {\n ctx.logger.error('proserviceworld practice_areas_list failed', { error: String(error) });\n return errorResult(\n `Failed to list practice areas: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * ProServiceWorld health tool.\n *\n * Surface (1): health — maps to the @public `pswHealth` query (no auth\n * required), a liveness/identity probe for the ProServiceWorld 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: 'ProServiceWorld Health Check',\n description:\n 'Public health probe for the ProServiceWorld subgraph (pswHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ pswHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.pswHealth });\n } catch (error) {\n ctx.logger.error('proserviceworld health failed', { error: String(error) });\n return errorResult(\n `ProServiceWorld 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_CLIENTS, LIST_MATTERS, LIST_PRACTICE_AREAS } from './operations.js';\n\n/**\n * Read-only ProServiceWorld 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 registerProserviceworldResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const clientsUri = track(mcpResourceUri(ctx.productName, 'clients'));\n const mattersUri = track(mcpResourceUri(ctx.productName, 'matters'));\n const practiceAreasUri = track(mcpResourceUri(ctx.productName, 'practice-areas'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'proserviceworld-schema',\n schemaUri,\n {\n title: 'ProServiceWorld Domain Schema',\n description:\n 'Overview of the ProServiceWorld professional-services 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 = `# ProServiceWorld Domain (Overview)\n\nThe Professional-Services Operating System — system of record for clients,\nengagements, matters, time, billing, and compliance across professional-services\nfirms (finance, insurance, legal, accounting, tax, advisory, consulting).\n\n## Entities\n- PswClient — a client/relationship (has engagements + matters)\n- PswEngagement — proposal→delivery engagement (has milestones + deliverables)\n- PswMatter — a unit of professional work for a client\n- PswInvoice — a billing document\n- PswTimeEntry — logged billable/non-billable time\n- PswComplianceCheck — a governance/compliance check\n- PswConflictCheck — a conflict-of-interest check\n- PswPracticeArea — the firm's practice-area catalog\n- PswMilestone / PswDeliverable / PswTeamAssignment — engagement sub-records\n\n## Enums\n- PswClientStatus: ACTIVE, ARCHIVED, INACTIVE, PROSPECT\n- PswClientType: INDIVIDUAL, ORGANIZATION\n- PswEngagementStatus: PROPOSAL, ACCEPTED, IN_PROGRESS, REVIEW, DELIVERED, INVOICED, CLOSED, CANCELLED\n- PswFeeArrangement: FIXED, HOURLY, RETAINER, VALUE_BASED\n- PswMatterStatus: OPEN, ON_HOLD, CLOSED, ARCHIVED\n- PswMatterPriority: LOW, MEDIUM, HIGH, CRITICAL\n- PswInvoiceStatus: DRAFT, SENT, PAID, OVERDUE, CANCELLED\n- PswComplianceStatus: PENDING, IN_REVIEW, PASSED, FAILED, WAIVED\n\n## Tool groups\nclients, engagements, matters, invoices, time, compliance (compliance + conflict\nchecks), practice (practice areas), health. All run against the WORKSPACE gateway\n(workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://clients — client directory\n server.registerResource(\n 'proserviceworld-clients',\n clientsUri,\n {\n title: 'ProServiceWorld Client Directory',\n description: 'The first 50 clients in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${clientsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ pswListClients: unknown }>(LIST_CLIENTS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: clientsUri,\n text: JSON.stringify(data.pswListClients, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: clientsUri,\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 // <product>://matters — matter list\n server.registerResource(\n 'proserviceworld-matters',\n mattersUri,\n {\n title: 'ProServiceWorld Matters',\n description: 'The first 50 matters in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${mattersUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ pswListMatters: unknown }>(LIST_MATTERS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: mattersUri,\n text: JSON.stringify(data.pswListMatters, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: mattersUri,\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 // <product>://practice-areas — practice-area catalog\n server.registerResource(\n 'proserviceworld-practice-areas',\n practiceAreasUri,\n {\n title: 'ProServiceWorld Practice Areas',\n description: \"The firm's practice-area catalog in the bound workspace.\",\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${practiceAreasUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ pswListPracticeAreas: unknown }>(\n LIST_PRACTICE_AREAS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: practiceAreasUri,\n text: JSON.stringify(data.pswListPracticeAreas, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: practiceAreasUri,\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 * ProServiceWorld MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerProserviceworldPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const onboardingName = track(mcpPromptName(p, 'client-onboarding'));\n const deliveryName = track(mcpPromptName(p, 'engagement-delivery'));\n\n // <product>-client-onboarding — stand up a client + engagement + matter\n server.registerPrompt(\n onboardingName,\n {\n title: 'Client Onboarding',\n description:\n 'Guide for onboarding a new ProServiceWorld client end to end: create the client, open an engagement, run a conflict check, and open the first matter.',\n argsSchema: {\n name: z.string().optional().describe('Client / organization name'),\n industry: z.string().optional().describe('Client industry / sector'),\n },\n },\n ({ name, industry }) => {\n ctx.logger.debug(`Prompt ${onboardingName} called`, { name, industry });\n const nameNote = name\n ? `Use the client name \"${name}\".`\n : 'Ask the user for the client name.';\n const industryNote = industry ? `Industry is ${industry}.` : 'Ask the user for the industry.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new ProServiceWorld client.\n\n1. **Create Client**: Use ${p}_clients_create. ${nameNote} ${industryNote} Set type (INDIVIDUAL/ORGANIZATION) and capture contact details.\n2. **Conflict Check**: Use ${p}_conflicts_list filtered by the new clientId to confirm there are no unresolved conflicts of interest before engaging.\n3. **Pick Practice Area**: Use ${p}_practice_areas_list and choose the relevant practiceAreaId.\n4. **Open Engagement**: Use ${p}_engagements_create with the clientId, a name, a feeArrangement (FIXED/HOURLY/RETAINER/VALUE_BASED), and the practiceAreaId.\n5. **Open First Matter**: Use ${p}_matters_create for the initial unit of work (clientId, title, priority, optional engagementId).\n6. **Activate**: Use ${p}_clients_update with status=ACTIVE once engaged.\n\nShow results at each step and confirm before activation.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-engagement-delivery — run an engagement to invoice\n server.registerPrompt(\n deliveryName,\n {\n title: 'Engagement Delivery',\n description:\n 'Workflow to drive an engagement through delivery: advance its lifecycle, log time, check compliance, raise an invoice, and mark it paid.',\n argsSchema: {\n engagementId: z.string().optional().describe('Engagement ID to operate'),\n },\n },\n ({ engagementId }) => {\n ctx.logger.debug(`Prompt ${deliveryName} called`, { engagementId });\n const engagementNote = engagementId\n ? `Operate engagement \"${engagementId}\".`\n : `First list engagements with ${p}_engagements_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run ProServiceWorld engagement delivery. ${engagementNote}\n\n1. **Review**: Use ${p}_engagements_get to inspect milestones and deliverables.\n2. **Advance**: Use ${p}_engagements_transition to move the engagement (e.g. ACCEPTED → IN_PROGRESS → REVIEW → DELIVERED).\n3. **Log Time**: Use ${p}_time_log to record billable time against the engagement and/or its matters.\n4. **Compliance**: Use ${p}_compliance_list (subjectId=engagementId, subjectType=\"engagement\") to confirm no PENDING/IN_REVIEW checks block invoicing.\n5. **Invoice**: When DELIVERED, use ${p}_invoices_create (clientId, number, amounts/line items), then ${p}_engagements_transition to INVOICED.\n6. **Collect**: Once paid, use ${p}_invoices_mark_paid and ${p}_engagements_transition to CLOSED.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * ProServiceWorld module — domain module for the future-products ecosystem program.\n *\n * Covers every queryable/mutable @key entity of wspace-proserviceworld-svc\n * grouped into per-entity sub-APIs: clients, engagements, matters, invoices,\n * time, compliance (compliance + conflict checks), practice (practice areas),\n * and a public health probe. Mirrors the kadaikodi module's structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/proserviceworld/wspace-proserviceworld-svc/\n * (Hive service name `proserviceworld`). All operations run against the\n * WORKSPACE gateway. Every root field is prefixed `psw*` / every type `Psw*`\n * per the service's GraphQL naming contract; the @public `pswHealth` probe is\n * 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 { registerClientTools } from './tools/clients.js';\nimport { registerEngagementTools } from './tools/engagements.js';\nimport { registerMatterTools } from './tools/matters.js';\nimport { registerInvoiceTools } from './tools/invoices.js';\nimport { registerTimeTools } from './tools/time.js';\nimport { registerComplianceTools } from './tools/compliance.js';\nimport { registerPracticeTools } from './tools/practice.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerProserviceworldResources } from './resources.js';\nimport { registerProserviceworldPrompts } from './prompts.js';\n\nconst proserviceworldModule: McpModule = {\n id: 'proserviceworld',\n version: '0.0.1',\n displayName: 'ProServiceWorld',\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 registerClientTools(server, ctx, trackTool);\n registerEngagementTools(server, ctx, trackTool);\n registerMatterTools(server, ctx, trackTool);\n registerInvoiceTools(server, ctx, trackTool);\n registerTimeTools(server, ctx, trackTool);\n registerComplianceTools(server, ctx, trackTool);\n registerPracticeTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerProserviceworldResources(server, ctx, trackResource);\n registerProserviceworldPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default proserviceworldModule;\n"]}
|